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