wok-current view syslinux/stuff/iso2exe/init @ rev 23951

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