Add guestfs_rescue=1 appliance option to start a rescue shell.
[libguestfs.git] / appliance / make-initramfs.sh.in
index 248f2e2..b39b13d 100755 (executable)
@@ -95,6 +95,12 @@ rm -f $koutput
   -a ! -name 'crc_itu_t.ko' \
   -a ! -name 'nls_utf8.ko' \
   -a ! -name 'dm-*.ko' \
+  -a ! -name 'cramfs.ko' \
+  -a ! -name 'squashfs.ko' \
+  -a ! -name 'hfsplus.ko' \
+  -a ! -name 'ufs.ko' \
+  -a ! -name 'exportfs.ko' \
+  -a ! -name 'xfs.ko' \
   -a -print0 ) |
   xargs -0 @FEBOOTSTRAP_RUN@ initramfs -- rm
 
@@ -129,11 +135,19 @@ cat > init.new <<'__EOF__'
 #!/bin/sh
 echo Starting /init script ...
 PATH=/sbin:/usr/sbin:$PATH
+mount -t tmpfs none /dev
+mkdir /dev/pts /dev/shm /dev/mapper
 MAKEDEV mem null port zero core full ram tty console fd \
   hda hdb hdc hdd sda sdb sdc sdd loop sd
+mknod /dev/ptmx c 5 2; chmod 0666 /dev/ptmx
+mknod /dev/random c 1 8;  chmod 0666 /dev/random
+mknod /dev/urandom c 1 9; chmod 0444 /dev/urandom
 mount -t proc /proc /proc
 mount -t sysfs /sys /sys
 mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
+ln -sf /proc/self/fd/0 /dev/stdin
+ln -sf /proc/self/fd/1 /dev/stdout
+ln -sf /proc/self/fd/2 /dev/stderr
 modprobe virtio_pci
 modprobe virtio_net
 modprobe dm_mod ||:
@@ -142,6 +156,9 @@ modprobe dm_mod ||:
 /sbin/route add default gw 10.0.2.2
 lvm vgscan --ignorelockingfailure
 lvm vgchange -ay --ignorelockingfailure
+if grep -sq guestfs_rescue=1 /proc/cmdline; then
+  bash -i
+fi
 exec guestfsd -f
 __EOF__