home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / redakcyjne / openSuSE / openSUSE-11.2-KDE4-LiveCD-i686.iso / boot / i386 / loader / initrd / initrd~ / linuxrc < prev    next >
Text File  |  2009-11-02  |  11KB  |  369 lines

  1. #!/bin/bash
  2. #================
  3. # FILE          : linuxrc
  4. #----------------
  5. # PROJECT       : OpenSuSE KIWI Image System
  6. # COPYRIGHT     : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
  7. #               :
  8. # AUTHOR        : Marcus Schaefer <ms@suse.de>
  9. #               :
  10. # BELONGS TO    : Operating System images
  11. #               :
  12. # DESCRIPTION   : This file is changed to become the real
  13. #               : linuxrc script which is used to prepare the
  14. #               : operating system for the main image
  15. #               :
  16. #               :
  17. # STATUS        : BETA
  18. #----------------
  19. #======================================
  20. # Exports (General)...
  21. #--------------------------------------
  22. export PATH="/sbin:/bin:/usr/sbin:/usr/bin"
  23. export IFS_ORIG=$IFS
  24. export DEBUG=0
  25. export ARCH=`arch`
  26.  
  27. #======================================
  28. # Exports (Configuration)...
  29. #--------------------------------------
  30. export systemIntegrity=clean
  31. export LIVECD_CONFIG="/cdrom/config.isoclient"
  32. export LIVECD="/livecd"
  33. export LOCAL_BOOT="no"
  34.  
  35. #======================================
  36. # Functions...
  37. #--------------------------------------
  38. . /include
  39.  
  40. #======================================
  41. # Beautify Startup
  42. #--------------------------------------
  43. echo "Loading KIWI CD Boot-System..."
  44. echo "------------------------------"
  45.  
  46. #======================================
  47. # Update library path
  48. #--------------------------------------
  49. ldconfig
  50.  
  51. #======================================
  52. # 1) Mounting local file systems
  53. #--------------------------------------
  54. mountSystemFilesystems &>/dev/null
  55. closeKernelConsole
  56.  
  57. #======================================
  58. # 2) probe for livecd_config in cmdline
  59. #--------------------------------------
  60. includeKernelParameters
  61. if grep -i -q "livecd_config=[a-zA-Z0-9/]" /proc/cmdline; then
  62.     export LIVECD_CONFIG=`sed 's/.*livecd_config=\([^ ]*\).*/\1/' /proc/cmdline`
  63. fi
  64.  
  65. #======================================
  66. # 3) Prepare module load support 
  67. #--------------------------------------
  68. touch /etc/modules.conf
  69. touch /lib/modules/*/modules.dep
  70.  
  71. #======================================
  72. # 4) run udevd
  73. #--------------------------------------
  74. udevStart
  75.  
  76. #======================================
  77. # 5) start boot shell and logging
  78. #--------------------------------------
  79. startBlogD
  80. startShell
  81. errorLogStart
  82. openKernelConsole
  83.  
  84. #======================================
  85. # 6) Including required kernel modules
  86. #--------------------------------------
  87. probeDevices
  88.  
  89. #======================================
  90. # 7) Mount the CD device
  91. #--------------------------------------
  92. CDMount
  93.  
  94. #======================================
  95. # 8) Load configuration
  96. #--------------------------------------
  97. importFile < $LIVECD_CONFIG
  98. if [ ! -z "$HYBRID_RW" ];then
  99.     if [ ! -z "$UNIONFS_CONFIG" ];then
  100.         UNIONFS_CONFIG=$(echo $UNIONFS_CONFIG | sed -e s@/dev/ram1@$HYBRID_RW@)
  101.     else
  102.         IMAGE=$(echo $IMAGE | sed -e s@/dev/ram1@$HYBRID_RW@)
  103.     fi
  104. fi
  105.  
  106. #======================================
  107. # 9) Download RW part of the CD image
  108. #--------------------------------------
  109. IFS="," ; for i in $IMAGE;do
  110.     field=0
  111.     IFS=";" ; for n in $i;do
  112.     case $field in
  113.         0) imageDevice=$n ; field=1 ;;
  114.         1) imageName=$n   ; field=2 ;;
  115.         2) imageVersion=$n
  116.     esac
  117.     done
  118.     imageReadOnly="$imageName"
  119.     imageReadOnly=`echo $imageReadOnly | sed -e s@.$ARCH@@`
  120.     imageReadOnly="$imageReadOnly-read-only.$ARCH-$imageVersion"
  121.     imageName="/cdrom/$imageName-$imageVersion"
  122.     gzippName=$imageName.gz
  123.     imageMD5s="$imageName.md5"
  124.     if [ ! -z "$UNIONFS_CONFIG" ] || [ ! -z "$COMBINED_IMAGE" ];then
  125.         continue
  126.     fi
  127.     while true;do
  128.         IFS=" "
  129.         read sum1 blocks blocksize zblocks zblocksize < $imageMD5s
  130.         if ! validateSize;then
  131.             systemException \
  132.                 "Not enough RAM available for this image" \
  133.             "reboot"
  134.         fi
  135.         needBytes=`gzip -l $gzippName|tail -n1|sed -e "s@ \+@:@g"|cut -f3 -d:`
  136.         needMByte=`expr $needBytes / 1024 / 1024`
  137.         if [ -x /usr/bin/dcounter ];then
  138.             errorLogStop
  139.             Echo -n "Loading $imageName [$imageDevice] "
  140.             gzip -cd $gzippName |\
  141.                 dcounter -s $needMByte | dd of=$imageDevice &>/dev/null
  142.             errorLogContinue
  143.             echo
  144.         else
  145.             Echo "Loading $imageName [$imageDevice]..."
  146.             gzip -cd $gzippName | dd of=$imageDevice
  147.         fi
  148.         dd if=$imageDevice bs=1024 |\
  149.             head --bytes=$((blocks * blocksize)) |\
  150.             md5sum - > /etc/ireal.md5
  151.         read sum2 dumy < /etc/ireal.md5
  152.         if test $sum1 = $sum2;then
  153.             Echo "Image checksum test: fine :-)"
  154.             break
  155.         fi
  156.         Echo "Image checksum test failed:"
  157.         echo
  158.         Echo -b "1) Data corruption while loading the image:"
  159.         Echo -b "   will give it a new try..."
  160.         echo
  161.         Echo -b "2) ramdisk size is too small for the image:"
  162.         Echo -b "   try to set the kernel parameter ramdisk_size=<size>"
  163.         echo
  164.         Echo "Retry to load image..."
  165.         sleep 15
  166.     done
  167.     rm -f /etc/ireal.md5
  168. done
  169. CDUmount
  170.  
  171. #======================================
  172. # 10) Get filesystem type
  173. #--------------------------------------
  174. if [ -z "$UNIONFS_CONFIG" ];then
  175.     probeFileSystem $imageDevice
  176.     if [ "$FSTYPE" = "luks" ];then
  177.         imageDevice=$(luksOpen $imageDevice)
  178.         probeFileSystem $imageDevice
  179.         export haveLuks=yes
  180.     fi
  181.     if test "$FSTYPE" = "reiserfs";then
  182.         Echo "Resize Reiser filesystem to full ramdisk space..."
  183.         luksResize $imageDevice
  184.         resize_reiserfs $imageDevice
  185.     fi
  186.     if test "$FSTYPE" = "ext2";then
  187.         Echo "Resize EXT2 filesystem to full ramdisk space..."
  188.         luksResize $imageDevice
  189.         resize2fs -f $imageDevice
  190.     fi
  191.     if test "$FSTYPE" = "ext3";then
  192.         Echo "Resize EXT3 filesystem to full ramdisk space..."
  193.         luksResize $imageDevice
  194.         resize2fs -f $imageDevice
  195.     fi
  196.     if test "$FSTYPE" = "ext4";then
  197.         Echo "Resize EXT4 filesystem to full ramdisk space..."
  198.         luksResize $imageDevice
  199.         resize2fs -f $imageDevice
  200.     fi
  201. fi
  202.  
  203. #======================================
  204. # 11) Check for swap space
  205. #--------------------------------------
  206. swapSpace=`searchSwapSpace`
  207. if [ ! -z "$swapSpace" ];then
  208.     #======================================
  209.     # 11.1) use an existing swap partition
  210.     #--------------------------------------
  211.     Echo "Found swap space on: $swapSpace"
  212. else
  213.     #======================================
  214.     # 11.1) use a swap file on a free part.
  215.     #--------------------------------------
  216.     swapDevice=`searchDiskSpace`
  217.     if [ ! -z "$swapDevice" ];then
  218.         FSTYPE_SAVE=$FSTYPE
  219.         probeFileSystem $swapDevice
  220.         SWTYPE=$FSTYPE
  221.         FSTYPE=$FSTYPE_SAVE
  222.         if [ $SWTYPE = "unknown" ];then
  223.             Echo "Can't use unknown filesystem for swap file... skipped"
  224.         else
  225.             Echo "Setting up swap file on: $swapDevice -> $SWTYPE"
  226.             mRAM=`cat /proc/meminfo | grep MemTotal | cut -f2 -d:`
  227.             mRAM=`echo $mRAM | cut -f1 -d" "`
  228.             SWSIZE=`expr $mRAM / 1024`
  229.             SWSIZE=`expr $SWSIZE \* 2`
  230.             if [ $SWSIZE -lt 64 ];then
  231.                 SWSIZE=64
  232.             fi
  233.             SWDIR=/liveswap
  234.             SWFILE=$SWDIR/kiwiswap
  235.             mkdir -p $SWDIR
  236.             if ! mount -t $SWTYPE $swapDevice $SWDIR;then
  237.                 Echo "Failed to mount swap device on: $swapDevice"
  238.                 unset swapDevice
  239.             fi
  240.             if [ ! -f $SWFILE ];then
  241.                 dd if=/dev/zero of=$SWFILE bs=1M count=$SWSIZE >/dev/null
  242.                 if [ ! $? = 0 ];then
  243.                     Echo "Failed to create swap file on: $swapDevice"
  244.                     unset swapDevice
  245.                 fi
  246.                 if ! mkswap $SWFILE >/dev/null;then
  247.                     Echo "Failed to initialize swap file"
  248.                     unset swapDevice
  249.                 fi
  250.             fi
  251.             Echo "Created swap file: kiwiswap [ $SWSIZE MB ]"
  252.             umount $SWDIR
  253.         fi
  254.     fi
  255. fi
  256.  
  257. #======================================
  258. # 12) Mount OS image to /mnt
  259. #--------------------------------------
  260. runHook premount
  261. if [ -z "$UNIONFS_CONFIG" ] && [ -z "$COMBINED_IMAGE" ];then
  262.     #======================================
  263.     # 12.1) mount RW part and CD to /mnt
  264.     #--------------------------------------
  265.     if ! mount $imageDevice /mnt >/dev/null;then
  266.         systemException "Failed to mount RW root filesystem" "reboot"
  267.     fi
  268.     cdopt=$(CDMountOption $cddev)
  269.     mkdir -p $LIVECD && eval mount $cdopt $cddev $LIVECD
  270.     #======================================
  271.     # 12.2) Create RO Link list
  272.     #--------------------------------------
  273.     cd /mnt
  274.     if [ ! -d $LIVECD/read-only-system ];then
  275.         Echo "Mounting compressed read only tree..."
  276.         rosys="/read-only"
  277.         rosrc="$LIVECD/$imageReadOnly"
  278.         mkdir -p $rosys
  279.         if ! kiwiMount $rosrc $rosys "-o loop";then
  280.             systemException "Failed to mount RO root filesystem" "reboot"
  281.         fi
  282.         Echo "Creating live media links..."
  283.         for dir in bin boot lib lib64 opt sbin usr;do
  284.             ln -s read-only/$dir $dir
  285.         done
  286.     else
  287.         Echo "Creating live media links..."
  288.         for dir in bin boot lib lib64 opt sbin usr;do
  289.             if [ -d $LIVECD/read-only-system/$dir ];then
  290.                 ln -s $LIVECD/read-only-system/$dir $dir
  291.             fi
  292.         done
  293.     fi
  294.     cd /
  295. else
  296.     #======================================
  297.     # 12.1) mount CD to /mnt and unify
  298.     #--------------------------------------
  299.     if [ ! -z "$COMBINED_IMAGE" ]; then
  300.         Echo "Mounting compressed split tree..."
  301.         imageReadOnly=`echo $imageReadOnly | sed -e "s/-read-only//"`
  302.     else
  303.         Echo "Mounting compressed unified tree..."
  304.     fi
  305.     cdopt=$(CDMountOption $cddev)
  306.     mkdir -p $LIVECD && eval mount $cdopt $cddev $LIVECD
  307.     if ! mountSystem /dev/loop1 $LIVECD/$imageReadOnly;then
  308.         systemException "Failed to mount root filesystem" "reboot"
  309.     fi
  310. fi
  311. validateRootTree
  312. runHook postmount
  313.  
  314. #======================================
  315. # 13) Create system dependant files
  316. #--------------------------------------
  317. setupDefaultFstab /config
  318. updateRootDeviceFstab /config $imageDevice
  319. if [ ! -z "$swapSpace" ];then
  320.     updateSwapDeviceFstab /config $swapSpace
  321. elif [ ! -z "$swapDevice" ];then
  322.     mkdir -p /mnt/liveswap
  323.     echo "$swapDevice /liveswap $SWTYPE defaults 1 1"  >> /config/etc/fstab
  324.     echo "/liveswap/kiwiswap swap swap prio=42 0 0"    >> /config/etc/fstab
  325. fi
  326.  
  327. #======================================
  328. # 14) copy system dependant files
  329. #--------------------------------------
  330. setupConfigFiles
  331.  
  332. #======================================
  333. # 15) update system dependant files
  334. #--------------------------------------
  335. setupInittab /mnt
  336.  
  337. #======================================
  338. # 16) setup real root device
  339. #--------------------------------------
  340. echo 256 > /proc/sys/kernel/real-root-dev
  341.  
  342. #======================================
  343. # 17) umount system filesystems
  344. #--------------------------------------
  345. umountSystemFilesystems
  346.  
  347. #======================================
  348. # 18) copy initrd files to image
  349. #--------------------------------------
  350. importBranding
  351. cp /preinit /mnt
  352. cp /include /mnt
  353.  
  354. #======================================
  355. # 19) kill boot shell
  356. #--------------------------------------
  357. killShell
  358. killBlogD
  359.  
  360. #======================================
  361. # 20) Activate new root
  362. #--------------------------------------
  363. activateImage
  364.  
  365. #======================================
  366. # 21) Unmount initrd / system init
  367. #--------------------------------------
  368. bootImage $@
  369.