wok view 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
line source
1 #!/bin/sh
3 getarg()
4 {
5 sed "/$1=/!d;s/.*$1=\\([^ ]*\\).*/\\1/" /proc/cmdline
6 }
8 myget()
9 {
10 od -v -j $1 -N ${4:-${3:-2}} -t u${3:-2} -w${3:-2} -An $2 2>/dev/null ||
11 hexdump -v -s $1 -n ${4:-${3:-2}} -e "\"\" 1/${3:-2} \" %u\n\"" $2
12 }
14 mount_proc()
15 {
16 mount -t proc /proc /proc
17 mount -t sysfs /sys /sys
18 udevd --daemon 2>/dev/null && udevadm trigger && sleep 5
19 }
21 umount_proc()
22 {
23 killall udevd 2>/dev/null
24 umount /sys/fs/fuse/connections 2>/dev/null
25 umount /sys
26 umount /proc
27 }
29 checkmagic()
30 {
31 [ -s $1 ] && [ $(getarg magic) = $(myget 18 $1 2) ]
32 }
34 media=/media/cdrom
35 mnt=/mnt
36 getiso()
37 {
38 mkdir -p $media
39 for dev in /sys/block/?d?/?d??*; do
40 mount /dev/$(basename $dev) $mnt
41 if checkmagic $mnt/$ISO; then
42 mount -o loop,ro $mnt/$ISO $media
43 echo "Found $ISO on $(basename $dev)"
44 ISO=$mnt/$ISO
45 return 0
46 fi
47 umount $mnt
48 done 2>/dev/null
49 return 1
50 }
52 uncpio=uncpio64
53 uncpio64()
54 {
55 i=$1
56 sed 's|$| |' /proc/cpuinfo | grep ' lm ' && [ -s ${i}64 ] && i=${i}64
57 [ -s "$i" ] || return
58 echo -en "\n Extracting $(basename $i) ..."
59 case $(get 0 $i) in
60 *35615) ( zcat || gunzip );;
61 *14333) unxz;;
62 *\ 93) unlzma;;
63 *) cat;;
64 esac < $i | ( cd ${2:-/}; cpio -idmu > /dev/null 2>&1 )
65 }
67 tty0=tty0
69 bootlog()
70 {
71 dialog --clear --title " Linux boot messages " \
72 --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] /sqfs/dev/[hs]d* /dev
98 ln -s /sqfs/lib/* lib 2>/dev/null
99 ln -fs /sqfs/usr /sqfs/var /
100 mkdir /etc && cp /sqfs/etc/dialogrc /etc 2>/dev/null
101 }
103 umount_loram()
104 {
105 myis_loram || return
106 rm /var /usr
107 umount -d /sqfs
108 rmdir /sqfs 2>/dev/null || rm -f /sqfs
109 rm -rf /etc
110 }
112 dosync()
113 {
114 sync
115 umount_loram
116 umount -d $media
117 rm -f /dev/cdrom
118 umount $mnt
119 umount_proc
120 }
122 text()
123 {
124 $uncpio $(ls_r $media/boot/rootfs?*.* | sed q)
125 init=
126 cmdline="$(cat /proc/cmdline)"
127 if hascustomconf; then
128 getcustomconf /tmp > /dev/null
129 [ -s /tmp/cmdline ] &&
130 cmdline="$cmdline $(cat /tmp/cmdline)" &&
131 init="$(sed '/rdinit=/!d;s/.*rdinit=\([^ ]*\).*/\1/' < /tmp/cmdline)"
132 [ -s /tmp/initrd ] && $uncpio /tmp/initrd
133 fi
134 dosync
135 sed -i 's/ || exit//' /init
136 exec ${init:-/init} $cmdline
137 }
139 live()
140 {
141 n=0
142 dotwait "Extract filesystem..."
143 for i in $(ls_r $media/boot/rootfs*); do
144 [ $((n++)) -eq 0 ] || $uncpio $i
145 done
146 rm -f /tmp/wait
147 text
148 }
150 restart()
151 {
152 dosync
153 reboot -f
154 }
156 stop()
157 {
158 dosync
159 poweroff -f
160 }
162 dokexec()
163 {
164 kexec -l $file || return
165 dosync
166 kexec -e
167 }
169 runmemtest()
170 {
171 gotcdfile "memtest*" && dokexec
172 }
174 runpxe()
175 {
176 gotcdfile "?pxe*" && dokexec
177 }
179 shell()
180 {
181 trap text 2
182 getty -n -l /bin/ash 38400 tty1 2>/dev/null || sh
183 }
185 BIN=bin/mount.posixovl
186 [ -x /usr/s$BIN ] || mv /bin/mount.posixovl.iso2exe \
187 /usr/s$BIN 2>/dev/null || mv /bin/mount.posixovl.iso2exe /$BIN 2>/dev/null
188 mount_proc
189 for i in /sys/block/*/dev /sys/block/*/*/dev; do
190 [ -s "$i" ] || continue
191 n=${i%/dev}
192 n=/dev/${n##*/}
193 [ -e $n ] && continue
194 mknod $n b $(sed 's/:/ /' < $i)
195 done 2>/dev/null
196 ISO="$(getarg bootfrom | sed 's/.://;s|\\|/|g')"
197 getiso 2>/dev/null || text
198 mount_loram
199 [ -s /usr/bin/taziso ] || live
201 . /usr/bin/taziso