wok annotate syslinux/stuff/iso2exe/init @ rev 23996
linld: add iso support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Fri Jan 08 20:15:35 2021 +0000 (2021-01-08) |
parents | a1fa13454a0c |
children | 8eaf1d9eb640 |
rev | line source |
---|---|
pascal@21302 | 1 #!/bin/sh |
pascal@13691 | 2 |
pascal@13691 | 3 getarg() |
pascal@13691 | 4 { |
pascal@13691 | 5 sed "/$1=/!d;s/.*$1=\\([^ ]*\\).*/\\1/" /proc/cmdline |
pascal@13691 | 6 } |
pascal@13691 | 7 |
pascal@23820 | 8 media=/media/cdrom |
pascal@23820 | 9 mnt=/mnt |
pascal@13691 | 10 getiso() |
pascal@13691 | 11 { |
pascal@23820 | 12 mkdir -p $media |
pascal@23951 | 13 for dev in /sys/block/*; do |
pascal@23988 | 14 for dev in $(ls -d $dev/$(basename $dev)*); do |
pascal@23988 | 15 [ "$dev" ] || continue 2 |
pascal@23988 | 16 mount /dev/$(basename $dev) $mnt |
pascal@23992 | 17 if [ -s $mnt/$ISO ] && [ $(getarg magic) = $(hexdump -v -s 18 -n 2 -e "\"\" 1/2 \" %u\n\"" $mnt/$ISO) ]; then |
pascal@23988 | 18 echo "Found $ISO on $(basename $dev)" |
pascal@23988 | 19 ISO=$mnt/$ISO |
pascal@23988 | 20 mount -o loop,ro $ISO $media |
pascal@23992 | 21 return |
pascal@23988 | 22 fi |
pascal@23988 | 23 umount $mnt |
pascal@23988 | 24 done |
pascal@23986 | 25 done |
pascal@23992 | 26 text |
pascal@13691 | 27 } |
pascal@13691 | 28 |
pascal@23820 | 29 uncpio=uncpio64 |
pascal@23820 | 30 uncpio64() |
pascal@13691 | 31 { |
pascal@21801 | 32 i=$1 |
pascal@23951 | 33 grep ' lm ' /proc/cpuinfo && [ -s ${i}64 ] && i=${i}64 |
pascal@21801 | 34 [ -s "$i" ] || return |
pascal@21801 | 35 echo -en "\n Extracting $(basename $i) ..." |
pascal@21801 | 36 case $(get 0 $i) in |
pascal@21801 | 37 *35615) ( zcat || gunzip );; |
pascal@21801 | 38 *14333) unxz;; |
pascal@21801 | 39 *\ 93) unlzma;; |
pascal@21801 | 40 *) cat;; |
pascal@21801 | 41 esac < $i | ( cd ${2:-/}; cpio -idmu > /dev/null 2>&1 ) |
pascal@13691 | 42 } |
pascal@13691 | 43 |
pascal@23820 | 44 tty0=tty0 |
pascal@13697 | 45 bootlog() |
pascal@13697 | 46 { |
pascal@23988 | 47 dialog --clear --title " Linux boot messages " --textbox /tmp/dmesg 24 78 |
pascal@13697 | 48 } |
pascal@13697 | 49 |
pascal@16041 | 50 gotposixovl() |
pascal@16041 | 51 { |
pascal@20771 | 52 mount.posixovl 2>&1 | grep -qi usage && |
pascal@16041 | 53 echo -en "\"$1\" \"$2\"" |
pascal@16041 | 54 } |
pascal@16041 | 55 |
pascal@17569 | 56 dosync() |
pascal@13691 | 57 { |
pascal@17569 | 58 sync |
pascal@23992 | 59 if [ -s /lib/modules/squashfs.ko* ]; then |
pascal@23992 | 60 rm /var /usr |
pascal@23992 | 61 umount -d /sqfs |
pascal@23992 | 62 rmdir /sqfs 2>/dev/null || rm -f /sqfs |
pascal@23992 | 63 rm -rf /etc |
pascal@23992 | 64 fi |
pascal@23820 | 65 umount -d $media |
pascal@16073 | 66 rm -f /dev/cdrom |
pascal@23820 | 67 umount $mnt |
pascal@23992 | 68 killall udevd 2>/dev/null |
pascal@23992 | 69 umount /sys/fs/fuse/connections 2>/dev/null |
pascal@23992 | 70 umount /sys |
pascal@23992 | 71 umount /proc |
pascal@17569 | 72 } |
pascal@17569 | 73 |
pascal@23831 | 74 xhascustomconf=false |
pascal@17569 | 75 text() |
pascal@17569 | 76 { |
pascal@23991 | 77 [ -d /etc/skel ] || $uncpio $(ls -r $media/boot/rootfs?*.* | sed q) |
pascal@18774 | 78 init= |
pascal@18774 | 79 cmdline="$(cat /proc/cmdline)" |
pascal@23831 | 80 if $xhascustomconf 2> /dev/null; then |
pascal@18774 | 81 getcustomconf /tmp > /dev/null |
pascal@18774 | 82 [ -s /tmp/cmdline ] && |
pascal@18774 | 83 cmdline="$cmdline $(cat /tmp/cmdline)" && |
pascal@23992 | 84 init="$(sed '/rdinit=/!d;s/.*rdinit=\([^ ]*\).*/\1/' /tmp/cmdline)" |
pascal@23820 | 85 [ -s /tmp/initrd ] && $uncpio /tmp/initrd |
pascal@18774 | 86 fi |
pascal@17569 | 87 dosync |
pascal@23992 | 88 sed 's/ || exit//' -i /init |
pascal@18774 | 89 exec ${init:-/init} $cmdline |
pascal@13691 | 90 } |
pascal@13691 | 91 |
pascal@23831 | 92 xdowait=echo |
pascal@13691 | 93 live() |
pascal@13691 | 94 { |
pascal@13691 | 95 n=0 |
pascal@23831 | 96 $xdotwait "Extract filesystem..." |
pascal@23988 | 97 for i in $(ls -r $media/boot/rootfs?*.*); do |
pascal@23820 | 98 [ $((n++)) -eq 0 ] || $uncpio $i |
pascal@13691 | 99 done |
pascal@17476 | 100 rm -f /tmp/wait |
pascal@13691 | 101 text |
pascal@13691 | 102 } |
pascal@13691 | 103 |
pascal@13713 | 104 restart() |
pascal@13691 | 105 { |
pascal@17476 | 106 dosync |
pascal@13713 | 107 reboot -f |
pascal@13691 | 108 } |
pascal@13691 | 109 |
pascal@13713 | 110 stop() |
pascal@13691 | 111 { |
pascal@17476 | 112 dosync |
pascal@13713 | 113 poweroff -f |
pascal@13691 | 114 } |
pascal@13691 | 115 |
pascal@17489 | 116 dokexec() |
pascal@17476 | 117 { |
pascal@17659 | 118 kexec -l $file || return |
pascal@17476 | 119 dosync |
pascal@17476 | 120 kexec -e |
pascal@17476 | 121 } |
pascal@17476 | 122 |
pascal@13697 | 123 shell() |
pascal@13697 | 124 { |
pascal@20771 | 125 trap text 2 |
pascal@21801 | 126 getty -n -l /bin/ash 38400 tty1 2>/dev/null || sh |
pascal@13697 | 127 } |
pascal@13697 | 128 |
pascal@14247 | 129 BIN=bin/mount.posixovl |
pascal@23992 | 130 [ -x /usr/s$BIN ] || mv /$BIN.iso2exe /usr/s$BIN 2>/dev/null || mv /$BIN.iso2exe /$BIN 2>/dev/null |
pascal@23992 | 131 mount -t proc /proc /proc |
pascal@23992 | 132 mount -t sysfs /sys /sys |
pascal@23992 | 133 udevd --daemon 2>/dev/null && udevadm trigger && sleep 5 |
pascal@23951 | 134 mdev -s 2> /dev/null || |
pascal@21801 | 135 for i in /sys/block/*/dev /sys/block/*/*/dev; do |
pascal@18804 | 136 [ -s "$i" ] || continue |
pascal@18804 | 137 n=${i%/dev} |
pascal@18804 | 138 n=/dev/${n##*/} |
pascal@18804 | 139 [ -e $n ] && continue |
pascal@18804 | 140 mknod $n b $(sed 's/:/ /' < $i) |
pascal@21801 | 141 done 2>/dev/null |
pascal@23992 | 142 ISO="$(getarg iso | sed 's/.://;s|\\|/|g')" |
pascal@21801 | 143 getiso 2>/dev/null || text |
pascal@23992 | 144 if [ -s /lib/modules/squashfs.ko* ]; then |
pascal@23992 | 145 insmod /lib/modules/squashfs.ko* 2>/dev/null |
pascal@23992 | 146 if [ -d $media/fs ]; then |
pascal@23992 | 147 ln -s $media/fs /sqfs |
pascal@23992 | 148 else |
pascal@23992 | 149 mkdir /sqfs |
pascal@23992 | 150 losetup -o 124 /dev/loop6 $(ls -r $media/boot/rootfs?*.* | sed q) |
pascal@23992 | 151 mount -r /dev/loop6 /sqfs |
pascal@23992 | 152 fi |
pascal@23992 | 153 cp -a /sqfs/dev/fuse /sqfs/dev/tty[12] /dev |
pascal@23992 | 154 for i in /sqfs/dev/* ; do [ -b $i ] && cp -a $i /dev ; done |
pascal@23992 | 155 ln -s /sqfs/lib/* lib 2>/dev/null |
pascal@23992 | 156 ln -fs /sqfs/usr /sqfs/var / |
pascal@23992 | 157 mkdir /etc && cp /sqfs/etc/dialogrc /etc 2>/dev/null |
pascal@23992 | 158 fi |
pascal@23820 | 159 [ -s /usr/bin/taziso ] || live |
pascal@23987 | 160 . /usr/bin/taziso |