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