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

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