wok-6.x annotate syslinux/stuff/iso2exe/init @ rev 23991

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