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