Merge branches 'warthog9' and 'master' of http://etherboot.org/share/warthog9/BKO
[people/pravin/BKO.git] / pxeknife / red_hat / fedora_11_live_cd / real-init
1 #!/bin/bash
2
3 emergency_shell()
4 {
5     plymouth --hide-splash || :
6     echo "Bug in initramfs /init detected. Dropping to a shell. Good luck!"
7     echo
8     bash < /dev/console
9 }
10 trap "emergency_shell" 0 2
11
12 # exit immediately if a command fails
13 set -e
14
15 export PATH=/sbin:/bin:/usr/sbin:/usr/bin
16 export TERM=linux
17
18 exec > /dev/console 2>&1
19
20 echo "" > /proc/sys/kernel/hotplug
21
22 # Declare all variables here.. mostly for housekeeping
23 #
24 init="/sbin/init"
25 root_ro=0
26 root_rw=0
27 root=""
28 rootflags=""
29 rootfstype=""
30 quiet=0
31 shell=0
32 eshell=0
33 live_ram=0
34 check_iso=0
35 live_locale=""
36 live_dir="LiveOS"
37 overlay="off"
38 HTTPFS=""
39
40 echo "here in 40"
41 # Parse kernel commandline options
42 #
43 for o in `cat /proc/cmdline` ; do
44     case $o in
45     init=*)
46         init=${o#init=}
47         ;;
48     ro)
49         root_ro=1
50         ;;
51     rw)
52         root_rw=1
53         ;;
54     quiet)
55         quiet=1
56         ;;
57     shell)
58         shell=1
59         ;;
60     eshell)
61         eshell=1
62         ;;
63     live_ram)
64         live_ram=1
65         ;;
66     live_locale=*)
67         live_locale=${o#live_locale=}
68         ;;
69     live_keytable=*)
70         live_keytable=${o#live_keytable=}
71         ;;
72     live_dir=*)
73         live_dir=${o#live_dir=}
74         ;;
75     overlay)
76         overlay=auto
77         ;;
78     overlay=*)
79         overlay=${o#overlay=}
80         ;;
81     reset_overlay)
82         reset_overlay=1
83         ;;
84     check)
85         check_iso=1
86         ;;
87     httpfs=*)
88         HTTPFS=${o#httpfs=}
89         ;;
90     blacklist=*)
91         blacklist=${o#blacklist=}
92         echo "blacklist $blacklist" >> /etc/modprobe.conf
93         ;;
94     *)
95         m=$(echo $o |cut -s -d . -f 1)
96         opt=$(echo $o |cut -s -d . -f 2-)
97         if [ -z "$m" -o -z "$opt" ]; then
98           continue
99         fi
100         p=$(echo $opt |cut -s -d = -f 1)
101         v=$(echo $opt |cut -s -d = -f 2-)
102         if [ -z "$p" -o -z "$v" ]; then
103           continue
104         fi
105         echo "options $m $p=$v" >> /etc/modprobe.conf
106         ;;
107     esac
108 done
109
110 if [ "$quiet" != "1" ] ; then
111     echo "kernel commandline: `cat /proc/cmdline`"
112 fi
113
114 echo "here in 113"
115 # Users can override rootfs target on the kernel commandline
116 #
117 for o in `cat /proc/cmdline` ; do
118     case $o in
119     root=*)
120         root=${o#root=}
121         ;;
122     rootflags=*)
123         rootflags=${o#rootflags=}
124         ;;
125     rootfstype=*)
126         rootfstype=${o#rootfstype=}
127         ;;
128     esac
129 done
130
131 # Print out what we are going to do
132 #
133 if [ "$quiet" != "1" ] ; then
134     echo "init=$init"
135     echo "root=$root"
136     echo "rootflags=$rootflags"
137     echo "rootfstype=$rootfstype"
138     echo "root_ro=$root_ro"
139     echo "root_rw=$root_rw"
140 fi
141
142 waitforsymlink=0
143 # generate udev rules to generate /dev/root symlink
144 if [ -z $root ] ; then
145     root=/dev/something
146 else
147     case $root in
148         /dev/disk/by-label/*)
149             LABEL=${root#/dev/disk/by-label/}
150             echo "SUBSYSTEM==\"block\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"root\"" > /etc/udev/rules.d/00-label.rules
151             if [ "$quiet" != "1" ] ; then
152                 echo "Added udev rule 00-label.rules:"
153                 cat /etc/udev/rules.d/00-label.rules
154             fi
155             waitforsymlink=1
156             thingtomount=/dev/root
157             ;;
158         CDLABEL=*)
159             CDLABEL=${root#CDLABEL=}
160             echo "KERNEL==\"hd[a-z]\", BUS==\"ide\", SYSFS{removable}==\"1\", ATTRS{media}==\"cdrom\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"root\"" > /etc/udev/rules.d/00-cdlabel.rules
161             echo "KERNEL==\"sr[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"root\"" >> /etc/udev/rules.d/00-cdlabel.rules
162             echo "KERNEL==\"scd[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"root\"" >> /etc/udev/rules.d/00-cdlabel.rules
163             echo "KERNEL==\"pcd[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"root\"" >> /etc/udev/rules.d/00-cdlabel.rules
164             if [ "$quiet" != "1" ] ; then
165                 echo "Added udev rule 00-cdlabel.rules:"
166                 cat /etc/udev/rules.d/00-cdlabel.rules
167             fi
168             waitforsymlink=1
169             thingtomount=/dev/root
170             ;;
171         LABEL=*)
172             LABEL=${root#LABEL=}
173             echo "SUBSYSTEM==\"block\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"root\"" > /etc/udev/rules.d/00-label.rules
174             if [ "$quiet" != "1" ] ; then
175                 echo "Added udev rule 00-label.rules:"
176                 cat /etc/udev/rules.d/00-label.rules
177             fi
178             waitforsymlink=1
179             thingtomount=/dev/root
180             ;;
181         /dev/disk/by-id/*)
182             UUID=${root#/dev/disk/by-id/}
183             echo "SUBSYSTEM==\"block\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"root\"" > /etc/udev/rules.d/01-uuid.rules
184             if [ "$quiet" != "1" ] ; then
185                 echo "Added udev rule 01-uuid.rules:"
186                 cat /etc/udev/rules.d/01-uuid.rules
187             fi
188             waitforsymlink=1
189             thingtomount=/dev/root
190             ;;
191         UUID=*)
192             UUID=${root#UUID=}
193             echo "SUBSYSTEM==\"block\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"root\"" > /etc/udev/rules.d/01-uuid.rules
194             if [ "$quiet" != "1" ] ; then
195                 echo "Added udev rule 01-uuid.rules:"
196                 cat /etc/udev/rules.d/01-uuid.rules
197             fi
198             waitforsymlink=1
199             thingtomount=/dev/root
200             ;;
201         /dev/*)
202             ln -s $root /dev/root
203             thingtomount=$root
204             ;;
205         *)
206             thingtomount=$root
207             ;;
208     esac
209 fi
210
211 echo "udev_log=\"error\"" >> /etc/udev/udev.conf
212
213 # rules for loading modules
214 #
215 echo -n "ACTION==\"add\", SUBSYSTEM==\"?*\", ENV{MODALIAS}==\"?*\", RUN+=\"/sbin/modprobe $" >> /etc/udev/rules.d/10-modprobe.rules
216 echo "env{MODALIAS}\"" >> /etc/udev/rules.d/10-modprobe.rules
217 echo "ACTION==\"add\", SUBSYSTEM==\"scsi_device\" RUN+=\"/sbin/modprobe sg\"" >> /etc/udev/rules.d/10-modprobe.rules
218 echo "ACTION==\"add\", SUBSYSTEM==\"scsi_device\", SYSFS{type}==\"0|7|14\", RUN+=\"/sbin/modprobe sd_mod\"" >> /etc/udev/rules.d/10-modprobe.rules
219 echo "ACTION==\"add\", SUBSYSTEM==\"scsi_device\", SYSFS{type}==\"[45]\", RUN+=\"/sbin/modprobe sr_mod\"" >> /etc/udev/rules.d/10-modprobe.rules
220 echo "SUBSYSTEM==\"mmc\", RUN+=\"/sbin/modprobe mmc_block\"" >> /etc/udev/rules.d/10-modprobe.rules
221
222 echo "ACTION==\"add\", SUBSYSTEM==\"graphics\", KERNEL==\"fb[0-9]*\", RUN+=\"/bin/plymouth --show-splash\"" > /etc/udev/rules.d/20-show-plymouth.rules
223
224 # FIXME: hack since sr_mod seems to fail to get loaded sometimes (#239657)
225 /sbin/modprobe sr_mod 2>/dev/null || :
226
227 /sbin/modprobe loop max_loop=16 2>/dev/null || :
228
229 if [ "$quiet" != "1" ] ; then
230     echo "starting udevd"
231 fi
232 /sbin/udevd --daemon
233
234 if [ "$quiet" != "1" ] ; then
235     echo "creating devices"
236 fi
237 /sbin/udevadm trigger
238
239 if [ "$shell" == "1" ] ; then
240     plymouth --hide-splash || :
241     echo "Shell requested on kernel commandline. Exit to continue booting."
242     echo
243     bash < /dev/console
244     plymouth --show-splash || :
245 fi
246
247 # don't wait for "mtd0" as no device file will appear
248 # and don't worry about this if $thingtomount is a regular file
249 if [ "$root" != "mtd0" -a ! -f "$thingtomount" ] ; then
250
251     # If we don't have the /dev/root link.. ask the user to create..
252     if [ "$waitforsymlink" != "1" ] ; then
253         if [ ! -L /dev/root ] ; then
254             plymouth --hide-splash || :
255             echo
256             echo "--------------------------------------"
257             echo "WARNING: Cannot find root file system!"
258             echo "--------------------------------------"
259             echo
260             echo "Create symlink /dev/root and then exit this shell to continue"
261             echo "the boot sequence."
262             echo
263             bash < /dev/console
264             plymouth --show-splash || :
265         fi
266     fi
267
268     if [ ! -b /dev/root ] ; then
269         if [ "$quiet" != "1" ] ; then
270             echo "Waiting for root to appear"
271         fi
272         COUNTDOWN=90
273         while [ "x$COUNTDOWN" != "x0" ] ; do
274             if [ "$quiet" != "1" ] ; then
275                 echo -n "."
276             fi
277             COUNTDOWN=$(($COUNTDOWN - 1))
278             /bin/sleep 1
279             if [ -e /dev/root ] ; then
280                 COUNTDOWN=0
281                 continue
282             fi
283             # this is kind of lame, but we could have had a situation
284             # where we were unable to read the volume id.  so trigger
285             # another run through the block devs
286             if [ "x$COUNTDOWN" = "x30" ]; then
287                 /sbin/udevadm trigger --subsystem-match=block
288             fi
289         done
290     fi
291
292     if [ ! -b /dev/root ] ; then
293         plymouth --hide-splash || :
294         echo
295         echo "--------------------------------------"
296         echo "WARNING: Cannot find root file system!"
297         echo "--------------------------------------"
298         echo
299         echo "Create symlink /dev/root and then exit this shell to continue"
300         echo "the boot sequence."
301         echo
302         bash < /dev/console
303         plymouth --show-splash || :
304     fi
305
306     if [ "$quiet" != "1" ] ; then
307         echo "mounting /dev/root"
308         ls -l /dev/root
309     fi
310
311     if [ -z $rootfstype ] ; then
312         rootfstype=auto
313     fi
314
315 fi
316
317 [ -e /dev/root ] && fs=$(/lib/udev/vol_id -t /dev/root)
318 if [ "x$fs" == "xiso9660" -o "x$fs" == "xudf" ]; then checkfs=1 ; fi
319 if [ "x$check_iso" == "x1" -a -x /bin/checkisomd5 -a "x$checkfs" == "x1" ]; then
320    plymouth --hide-splash || :
321    echo "Verifying ISO image..."
322    /bin/checkisomd5 --verbose /dev/root
323    if [ $? -ne 0 ]; then
324        echo "Are you SURE you want to continue?"
325        echo "Press Enter to continue or ctrl-alt-del to reboot."
326        read < /dev/console
327    fi
328    plymouth --show-splash || :
329 fi
330
331 if [ "x$root_ro" == "x1" ] ; then
332    if [ -z $rootflags ] ; then
333        rootflags="ro"
334    else
335        rootflags="$rootflags,ro"
336    fi
337 fi
338
339 if [ "x$root_rw" == "x1" ] ; then
340    if [ -z $rootflags ] ; then
341        rootflags="rw"
342    else
343        rootflags="$rootflags,rw"
344    fi
345 fi
346
347 if [ -z $rootflags ] ; then
348     mountoptions=""
349 else
350     mountoptions=" -o$rootflags"
351 fi
352
353 if [ -z ${HTTPFS} ] ; then
354     echo " mounting httpfs filesystem from ${HTTPFS}"
355     mount_http_iso.sh ${HTTPFS}
356     RES=$?
357 else
358     echo " no httpfs provided, booting normal filesystem"
359     mount -n -t $rootfstype $mountoptions $thingtomount /sysroot
360     RES=$?
361 fi
362
363
364 if [ "$RES" != "0" ] ; then
365     plymouth --hide-splash || :
366     echo "---------------------------------"
367     echo "WARNING: Cannot mount rootfs!"
368     echo "---------------------------------"
369     echo
370     echo "Dropping to a shell. "
371     echo "Mount rootfs at /sysroot and exit shell to continue. Good luck!"
372     echo
373     bash < /dev/console
374     plymouth --hide-splash || :
375 fi
376
377 # Now get ready to leave the initramfs
378 #
379
380 # only pass kernel command line if we're launching /sbin/init
381 if [ "$init" == "/sbin/init" ] ; then
382     initargs=$(cat /proc/cmdline)
383 else
384     initargs=""
385 fi
386
387 # overlay setup helper function
388 do_live_overlay() {
389     # create a sparse file for the overlay
390     # overlay: if non-ram overlay searching is desired, do it,
391     #              otherwise, create traditional overlay in ram
392     OVERLAY_LOOPDEV=$( losetup -f )
393
394     l=$(/lib/udev/vol_id -l /dev/root) || l=""
395     u=$(/lib/udev/vol_id -u /dev/root) || u=""
396
397     if ( echo $overlay | grep -q ":" ); then
398         # pathspec specified, extract
399         pathspec=$( echo $overlay | sed -e 's/^.*://' )
400     elif [ "x${overlay}" != "xoff" ]; then
401         pathspec="/${live_dir}/overlay-$l-$u"
402     fi
403
404     if [ -z "$pathspec" -o "$pathspec" == "auto" ]; then
405         pathspec="/${live_dir}/overlay-$l-$u"
406     fi
407     devspec=$( echo $overlay | sed -e 's/:.*$//' )
408
409     # need to know where to look for the overlay
410     setup=""
411     if [ -n "$devspec" -a -n "$pathspec" -a "${overlay}" != "off" ]; then
412         mkdir /overlayfs
413         mount -n -t auto $devspec /overlayfs || :
414         if [ -f /overlayfs$pathspec -a -w /overlayfs$pathspec ]; then
415             losetup $OVERLAY_LOOPDEV /overlayfs$pathspec
416             if [ -n "$reset_overlay" ]; then
417                dd if=/dev/zero of=$OVERLAY_LOOPDEV bs=64k count=1 2>/dev/null
418             fi
419             setup="yes"
420         fi
421         umount -l /overlayfs || :
422     fi
423
424     if [ -z "$setup" ]; then
425         if [ -n "$devspec" -a -n "$pathspec" ]; then
426            echo "Unable to find persistent overlay; using temporary"
427            sleep 5
428         fi
429
430         dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((512*1024)) 2> /dev/null
431         losetup $OVERLAY_LOOPDEV /overlay
432     fi
433
434     # set up the snapshot
435     echo 0 `blockdev --getsize $BASE_LOOPDEV` snapshot $BASE_LOOPDEV $OVERLAY_LOOPDEV p 8 | dmsetup create live-rw
436 }
437
438 # live cd helper function
439 do_live_from_base_loop() {
440     do_live_overlay
441
442     # set up new /dev/root symlink
443     rm -f /dev/root
444     ln -s /dev/mapper/live-rw /dev/root
445
446     mount -n  /dev/mapper/live-rw /sysroot
447     # here you can modify the rw ext3 fs for testing if you don't want to
448     # respin the entire rootfs (which takes ages). Example
449     #
450     #  echo foo > /sysroot/etc/bar.conf
451     #
452     # We also use it to dynamically set the system locale from the boot
453     # menu on live cd's.
454     #
455     if [ "$live_locale" != "" ] ; then
456         echo "LANG=$live_locale" > /sysroot/etc/sysconfig/i18n
457     fi
458     if [ "$live_keytable" != "" ] ; then
459         echo "KEYTABLE=$live_keytable" > /sysroot/etc/sysconfig/keyboard
460     fi
461
462     # copy over module options
463     [ -f /etc/modprobe.conf ] && cat /etc/modprobe.conf >> /sysroot/etc/modprobe.conf
464
465     # create rule so udev creates /dev/live symlink on real rootfs
466     if [ -d /sysroot/lib/udev/rules.d ] ;then
467       udevrulefn=$(ls /sysroot/lib/udev/rules.d/50-udev* |grep -v rpmsave |grep -v rpmnew)
468     else
469       udevrulefn=$(ls /sysroot/etc/udev/rules.d/50-udev* |grep -v rpmsave |grep -v rpmnew)
470     fi
471     if [ -n "$CDLABEL" ]; then
472        echo "KERNEL==\"hd[a-z]\", BUS==\"ide\", SYSFS{removable}==\"1\", ATTRS{media}==\"cdrom\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"live\"" >> $udevrulefn
473        echo "KERNEL==\"sr[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"live\"" >> $udevrulefn
474        echo "KERNEL==\"scd[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"live\"" >> $udevrulefn
475        echo "KERNEL==\"pcd[0-9]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$CDLABEL\", SYMLINK+=\"live\"" >> $udevrulefn
476     elif [ -n "$LABEL" ]; then
477        echo "KERNEL==\"hd[a-z]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"live\"" >> $udevrulefn
478        echo "KERNEL==\"hd[a-z][0-9]*\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"live\"" >> $udevrulefn
479        echo "KERNEL==\"sd[a-z]\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"live\"" >> $udevrulefn
480        echo "KERNEL==\"sd[a-z][0-9]*\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"live\"" >> $udevrulefn
481        echo "KERNEL==\"mmcblk[0-9]*\", PROGRAM=\"/lib/udev/vol_id -l %N\", RESULT==\"$LABEL\", SYMLINK+=\"live\"" >> $udevrulefn
482     elif [ -n "$UUID" ]; then
483        echo "KERNEL==\"hd[a-z]\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"live\"" >> $udevrulefn
484        echo "KERNEL==\"hd[a-z][0-9]*\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"live\"" >> $udevrulefn
485        echo "KERNEL==\"sd[a-z]\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"live\"" >> $udevrulefn
486        echo "KERNEL==\"sd[a-z][0-9]*\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"live\"" >> $udevrulefn
487        echo "KERNEL==\"mmcblk[0-9]*\", PROGRAM=\"/lib/udev/vol_id -u %N\", RESULT==\"$UUID\", SYMLINK+=\"live\"" >> $udevrulefn
488     fi
489
490     # add rules for loop devices created by this mayflower generated init
491     # i.e. /dev/live-osimg, /dev/live-osmin, /dev/live-overlay,
492     #      and /dev/live-squashed
493     if [ -b "$SQUASHED_LOOPDEV" ]; then
494         echo "KERNEL==\"${SQUASHED_LOOPDEV#/dev/}\", SYMLINK+=\"live-squashed\"" >> $udevrulefn
495     fi
496     if [ -b "$OSMIN_SQUASHED_LOOPDEV" ]; then
497         echo "KERNEL==\"${OSMIN_SQUASHED_LOOPDEV#/dev/}\", SYMLINK+=\"live-squashed-osmin\"" >> $udevrulefn
498     fi
499     if [ -b "$OSMIN_LOOPDEV" ]; then
500         echo "KERNEL==\"${OSMIN_LOOPDEV#/dev/}\", SYMLINK+=\"live-osmin\"" >> $udevrulefn
501         echo "ENV{DM_NAME}==\"live-osimg-min\", ENV{DKD_PRESENTATION_HIDE}=\"1\"" >> $udevrulefn
502     fi
503     echo "KERNEL==\"${BASE_LOOPDEV#/dev/}\", SYMLINK+=\"live-osimg\"" >> $udevrulefn
504     echo "KERNEL==\"${OVERLAY_LOOPDEV#/dev/}\", SYMLINK+=\"live-overlay\"" >> $udevrulefn
505
506     mount -n -o ro,remount /dev/mapper/live-rw /sysroot
507 }
508
509 # we might have a genMinInstDelta delta file for anaconda to take advantage of
510 if [ -e /sysroot/${live_dir}/osmin.img ]; then
511     OSMINSQFS=/sysroot/${live_dir}/osmin.img
512 fi
513
514 if [ -n "$OSMINSQFS" ]; then
515     # decompress the delta data
516     dd if=$OSMINSQFS of=/osmin.img 2> /dev/null
517     OSMIN_SQUASHED_LOOPDEV=$( losetup -f )
518     losetup -r $OSMIN_SQUASHED_LOOPDEV /osmin.img
519     mkdir -p /squashfs.osmin
520     mount -n -t squashfs -o ro $OSMIN_SQUASHED_LOOPDEV /squashfs.osmin
521     OSMIN_LOOPDEV=$( losetup -f )
522     losetup -r $OSMIN_LOOPDEV /squashfs.osmin/osmin
523     umount -l /squashfs.osmin
524 fi
525
526 # we might have an uncompressed embedded ext3  to use as rootfs (uncompressed live)
527 #
528 if [ -e /sysroot/${live_dir}/ext3fs.img ]; then
529   EXT3FS="/sysroot/${live_dir}/ext3fs.img"
530 fi
531
532 if [ -n "$EXT3FS" ] ; then
533     if [ "$quiet" != "1" ] ; then
534         echo "setting up embedded ext3 fs "
535     fi
536
537     mkdir -p /dev/mapper
538     mknod /dev/mapper/control c 10 63
539     modprobe dm_snapshot 2>/dev/null || :
540
541     BASE_LOOPDEV=$( losetup -f )
542     losetup -r $BASE_LOOPDEV $EXT3FS
543     umount -l /sysroot
544
545     do_live_from_base_loop
546 fi
547
548 # we might have an embedded ext3 on squashfs to use as rootfs (compressed live)
549 #
550 if [ -e /sysroot/${live_dir}/squashfs.img ]; then
551   SQUASHED="/sysroot/${live_dir}/squashfs.img"
552 fi
553
554 if [ -e "$SQUASHED" ] ; then
555
556     if [ "$quiet" != "1" ] ; then
557         echo "setting up embedded squash -> ext3 fs "
558     fi
559
560     mkdir -p /dev/mapper
561     mknod /dev/mapper/control c 10 63
562     modprobe dm_snapshot 2>/dev/null || :
563
564     if [ "$live_ram" == "1" ] ; then
565         echo "Copying live image to RAM..."
566         echo "(this may take a few minutes)"
567         dd if=$SQUASHED of=/squashed.img bs=512 2> /dev/null
568         umount -n /sysroot
569         echo "Done copying live image to RAM."
570         eject -p /dev/root || :
571         SQUASHED="/squashed.img"
572     fi
573
574     SQUASHED_LOOPDEV=$( losetup -f )
575     losetup -r $SQUASHED_LOOPDEV $SQUASHED
576     mkdir -p /squashfs
577     mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /squashfs
578
579     BASE_LOOPDEV=$( losetup -f )
580     losetup -r $BASE_LOOPDEV /squashfs/LiveOS/ext3fs.img
581
582     umount -l /squashfs
583     if [ "$live_ram" == "0" ] ; then
584         umount -l /sysroot
585     fi
586
587     do_live_from_base_loop
588 fi
589
590 if [ -b "$OSMIN_LOOPDEV" ]; then
591     # set up the devicemapper snapshot device, which will merge
592     # the normal live fs image, and the delta, into a minimzied fs image
593     echo "0 $( blockdev --getsize $BASE_LOOPDEV ) snapshot $BASE_LOOPDEV $OSMIN_LOOPDEV p 8" | dmsetup create --readonly live-osimg-min
594 fi
595
596 if [ "$eshell" == "1" ] ; then
597     plymouth --hide-splash || :
598     echo "Shell requested on kernel commandline."
599     echo "Rootfs is mounted ro on /sysroot. Exit to continue booting."
600     echo
601     bash < /dev/console
602     plymouth --show-splash || :
603 fi
604
605 if [ -x /sysroot$init ] ; then
606
607     # Leave initramfs and transition to rootfs
608     kill `pidof udevd`
609     if [ "$quiet" != "1" ] ; then
610         echo "transfering control to $init"
611     fi
612
613     # If the udev rule doesn't get triggered make sure to
614     # show a splash
615     plymouth --show-splash
616     exec /sbin/run-init
617     plymouth --hide-splash || :
618     echo "---------------------------------"
619     echo "WARNING: Error switching to real rootfs!"
620     echo "---------------------------------"
621     echo
622     echo "Dropping to a shell. Good luck!"
623     echo
624     bash < /dev/console
625 else
626     plymouth --hide-splash || :
627     echo "---------------------------------------------------------"
628     echo "WARNING: Requested $init binary does not exist on rootfs."
629     echo "---------------------------------------------------------"
630     echo
631     echo "Dropping to a shell. Good luck!"
632     echo
633     bash < /dev/console
634 fi
635