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