home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd2.bin / suse / inst-sys / sbin / lvmcreate_initrd < prev    next >
Text File  |  2000-03-24  |  4KB  |  172 lines

  1. #!/bin/sh
  2. #
  3. #  Copyright (C) 1997 - 2000  Heinz Mauelshagen, Germany
  4. #  June 1999
  5. #  LVM is free software; you can redistribute it and/or modify
  6. #  it under the terms of the GNU General Public License as published by
  7. #  the Free Software Foundation; either version 2, or (at your option)
  8. #  any later version.
  9. #  
  10. #  LVM is distributed in the hope that it will be useful,
  11. #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #  GNU General Public License for more details.
  14. #  
  15. #  You should have received a copy of the GNU General Public License
  16. #  along with LVM; see the file COPYING.  If not, write to
  17. #  the Free Software Foundation, 59 Temple Place - Suite 330,
  18. #  Boston, MA 02111-1307, USA. 
  19.  
  20. #
  21. # Changelog
  22. #
  23. #   16/11/1999 - corrected -N type with mke2fs
  24. #   19/12/1999 - use correct ramdisk size
  25. #                strip shared library to save space
  26. #   04/01/2000 - support /proc mount, because lvm_dir_cache now uses it
  27. #
  28.  
  29. cmd=`basename $0`
  30. VERRSION=$1
  31. [ -z "$VERSION" ] && VERSION=`uname -r`
  32. DEVRAM=/dev/ram1
  33. INITRD=/boot/initrd.gz
  34. INITRDSIZE=8192
  35. INITRDFILES="/sbin/modprobe /sbin/vgchange /sbin/vgscan /bin/bash /bin/sh /bin/rm /sbin/insmod /sbin/modprobe /dev/* /lib/modules/${VERSION}/modules.dep /lib/modules/${VERSION}/block/lvm.o"
  36. TMP=/tmp/mnt.$$
  37.  
  38. trap "
  39.   cd /
  40.   umount $DEVRAM
  41.   freeramdisk $DEVRAM
  42.   echo -e 'Bye bye...\n'
  43. " 1 2 3 15
  44.  
  45.  
  46. function create_fstab {
  47.    echo "
  48. /dev/ram        /                         ext2            defaults   1   0
  49. none            /proc                     proc            defaults   0   0
  50.    " > etc/fstab
  51.    chmod 644 etc/fstab
  52. }
  53.  
  54. function create_linuxrc {
  55.    echo "#!/bin/sh
  56.    /sbin/insmod lvm
  57.    /bin/mount /proc
  58.    /sbin/vgscan
  59.    /sbin/vgchange -a y
  60.    /bin/umount /proc" > linuxrc
  61.    chmod 555 linuxrc
  62. }
  63.  
  64. #
  65. # Main
  66. #
  67. echo -e "\nLogical Volume Manager 0.8 by Heinz Mauelshagen  11/11/1999\n"
  68. echo -e "$cmd -- this script creates a LVM initial ram disk in $INITRD\n"
  69.  
  70. echo "$cmd -- making ram filesystem"
  71. mke2fs -m0 -i 1024 $DEVRAM $INITRDSIZE >/dev/null 2>&1
  72. if [ $? -ne 0 ]; then
  73.    echo -e "$cmd -- ERROR making ram disk filesystem\n"
  74.    exit 1
  75. fi
  76.  
  77. mkdir -p $TMP/ram >/dev/null 2>&1
  78. if [ $? -ne 0 ]; then
  79.    echo -e "$cmd -- ERROR making $TMP/ram\n"
  80.    exit 1
  81. fi
  82.  
  83. echo "$cmd -- mounting ram filesystem"
  84. mount -t ext2 $DEVRAM $TMP/ram >/dev/null 2>&1
  85. if [ $? -ne 0 ]; then
  86.    echo -e "$cmd -- ERROR mounting $DEVRAM on $TMP/ram\n"
  87.    exit 1
  88. fi
  89.  
  90. cd $TMP/ram
  91. mkdir etc proc
  92.  
  93. #
  94. # create new conf.modules to avoid kmod complaining about nonexsisting modules.
  95. #
  96. echo "$cmd -- creating etc/conf.modules"
  97. i=0
  98. while [ $i -lt 256 ]; do
  99.    echo "alias    block-major-$i    off"
  100.    echo "alias    char-major-$i    off"
  101.    let i=i+1
  102. done > etc/conf.modules
  103.  
  104. # to ensure, that modprobe doesn complain about timestamps
  105. echo "$cmd -- creating new modules.dep"
  106. depmod -a ${VERSION} >/dev/null 2>&1
  107. if [ $? -ne 0 ]; then
  108.    echo -e "$cmd -- ERROR depmod\n"
  109.    exit 1
  110. fi
  111.  
  112. # copy necessary files to ram disk
  113. echo "$cmd -- copying files to ram disk"
  114. find $INITRDFILES|cpio -pdm $TMP/ram >/dev/null 2>&1
  115. if [ $? -ne 0 ]; then
  116.    echo -e "$cmd -- ERROR cpio to ram disk\n"
  117.    exit 1
  118. fi
  119.  
  120. # figure out which actual shared libraries we need in our initrd
  121. echo "$cmd -- figuring out shared libraries"
  122. SHLIBS=`ldd sbin/vg* bin/sh|awk '{if(/=>/){print $3}}'|sort -u 2>/dev/null`
  123. if [ $? -ne 0 ]; then
  124.    echo -e "$cmd -- ERROR figuring out needed shared libraries\n"
  125.    exit 1
  126. fi
  127.  
  128. echo "$cmd -- copying shared libraries to ram disk"
  129. find $SHLIBS|cpio -Lpdm $TMP/ram >/dev/null 2>&1
  130. if [ $? -ne 0 ]; then
  131.    echo -e "$cmd -- ERROR copying needed shared libraries to ram disk\n"
  132.    exit 1
  133. fi
  134. for lib in $SHLIBS
  135. do
  136.    strip $TMP/ram$lib >/dev/null
  137. done
  138.  
  139. echo "$cmd -- creating linuxrc"
  140. create_linuxrc >/dev/null 2>&1
  141. if [ $? -ne 0 ]; then
  142.    echo -e "$cmd -- ERROR creating linuxrc\n"
  143.    exit 1
  144. fi
  145.  
  146. echo "$cmd -- creating etc/fstab"
  147. create_fstab >/dev/null 2>&1
  148. if [ $? -ne 0 ]; then
  149.    echo -e "$cmd -- ERROR creating etc/fstab\n"
  150.    exit 1
  151. fi
  152.  
  153. cd /
  154. echo "$cmd -- ummounting ram disk"
  155. umount $DEVRAM
  156. if [ $? -ne 0 ]; then
  157.    echo -e "$cmd -- ERROR umounting $DEVRAM\n"
  158.    exit 1
  159. fi
  160.  
  161. echo "$cmd -- creating compressed initrd in $INITRD"
  162. dd if=$DEVRAM bs=1k count=$INITRDSIZE | gzip -9 > $INITRD 2>/dev/null
  163. if [ $? -ne 0 ]; then
  164.    echo -e "$cmd -- ERROR creating $INITRD\n"
  165.    exit 1
  166. fi
  167.  
  168. freeramdisk $DEVRAM
  169.