]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - IMG/cpio/sbin/init
Fix the "Unsupported vtoy type unknown" error when boot a VDI file created by Virtual...
[Ventoy.git] / IMG / cpio / sbin / init
1 #!/ventoy/busybox/ash
2 #************************************************************************************
3 # Copyright (c) 2020, longpanda <admin@ventoy.net>
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License as
7 # published by the Free Software Foundation; either version 3 of the
8 # License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, see <http://www.gnu.org/licenses/>.
17 #
18 #************************************************************************************
19
20 ####################################################################
21 # #
22 # Step 1 : extract busybox & set busybox environment #
23 # #
24 ####################################################################
25
26 export VTOY_ORG_PATH=$PATH
27 export VTOY_PATH=/ventoy
28 export BUSYBOX_PATH=$VTOY_PATH/busybox
29 export VTLOG=$VTOY_PATH/log
30 export FIND=$BUSYBOX_PATH/find
31 export GREP=$BUSYBOX_PATH/grep
32 export EGREP=$BUSYBOX_PATH/egrep
33 export CAT=$BUSYBOX_PATH/cat
34 export AWK=$BUSYBOX_PATH/awk
35 export SED=$BUSYBOX_PATH/sed
36 export SLEEP=$BUSYBOX_PATH/sleep
37 export HEAD=$BUSYBOX_PATH/head
38
39 if [ -e $BUSYBOX_PATH/busyboxaa64.xz ]; then
40 export VTOY_ARCH=aarch64
41 elif [ -e $BUSYBOX_PATH/busyboxm64e.xz ]; then
42 export VTOY_ARCH=mips64el
43 else
44 if [ -e $BUSYBOX_PATH/32h ]; then
45 export VTOY_ARCH=x86_64
46 else
47 export VTOY_ARCH=i386
48 fi
49 fi
50
51 if [ "$VTOY_ARCH" = "i386" ]; then
52 if $BUSYBOX_PATH/vtchmod32 -6; then
53 export VTOY_ARCH=x86_64
54 fi
55 fi
56
57 echo $VTOY_ARCH > $VTOY_PATH/ventoy_arch
58
59
60 if [ "$VTOY_ARCH" = "aarch64" ]; then
61 $BUSYBOX_PATH/xzminidecaa64 < $BUSYBOX_PATH/busyboxaa64.xz > $BUSYBOX_PATH/busybox
62 $BUSYBOX_PATH/vtchmodaa64 $BUSYBOX_PATH/busybox
63 elif [ "$VTOY_ARCH" = "mips64el" ]; then
64 $BUSYBOX_PATH/xzminidecm64e < $BUSYBOX_PATH/busyboxm64e.xz > $BUSYBOX_PATH/busybox
65 $BUSYBOX_PATH/vtchmodm64e $BUSYBOX_PATH/busybox
66 elif [ "$VTOY_ARCH" = "x86_64" ]; then
67 $BUSYBOX_PATH/xzminidec64 < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
68 if [ -s $BUSYBOX_PATH/busybox ]; then
69 $BUSYBOX_PATH/vtchmod64 $BUSYBOX_PATH/busybox
70 else
71 $BUSYBOX_PATH/xzminidec64_musl < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
72 $BUSYBOX_PATH/vtchmod64_musl $BUSYBOX_PATH/busybox
73 fi
74 else
75 $BUSYBOX_PATH/xzminidec32 < $BUSYBOX_PATH/busybox32.xz > $BUSYBOX_PATH/busybox
76 $BUSYBOX_PATH/vtchmod32 $BUSYBOX_PATH/busybox
77 fi
78
79 if [ -e $BUSYBOX_PATH/busybox ]; then
80 $BUSYBOX_PATH/busybox --install $BUSYBOX_PATH
81 else
82 $BUSYBOX_PATH/tmpxz -d $BUSYBOX_PATH/busybox32.xz
83 $BUSYBOX_PATH/busybox32 --install $BUSYBOX_PATH
84 fi
85
86 export PATH=$BUSYBOX_PATH/:$VTOY_PATH/tool
87
88 export VTOY_BREAK_LEVEL=$(hexdump -n 1 -s 449 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param)
89 export VTOY_DEBUG_LEVEL=$(hexdump -n 1 -s 450 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param)
90 export VTOY_LINUX_REMOUNT=$(hexdump -n 1 -s 454 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param)
91
92 #Fixme: busybox shell output redirect seems to have some bug in rhel5
93 if uname -a | grep -q el5; then
94 VTOY_REDT_BUG=YES
95 fi
96
97 if [ -z "$VTOY_REDT_BUG" ]; then
98 echo "============== VENTOY =================" >>$VTLOG
99 fi
100
101 cd $VTOY_PATH
102 xz -d ventoy_chain.sh.xz
103 xz -d ventoy_loop.sh.xz
104
105 if [ -n "$VTOY_REDT_BUG" ]; then
106 xz -d -c hook.cpio.xz | cpio -idm
107 xz -d -c tool.cpio.xz | cpio -idm
108 xz -d -c loop.cpio.xz | cpio -idm
109 else
110 xz -d -c hook.cpio.xz | cpio -idm 2>>$VTLOG
111 xz -d -c tool.cpio.xz | cpio -idm 2>>$VTLOG
112 xz -d -c loop.cpio.xz | cpio -idm 2>>$VTLOG
113 fi
114
115
116 if [ "$VTOY_ARCH" = "x86_64" ]; then
117 echo "Use x86_64 busybox toolkit ..." >>$VTLOG
118 $BUSYBOX_PATH/xzcat $BUSYBOX_PATH/xzcat64_musl.xz > $BUSYBOX_PATH/xzcat_musl
119 $BUSYBOX_PATH/chmod +x $BUSYBOX_PATH/xzcat_musl
120 ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
121 ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
122 ln -s $VTOY_PATH/tool/lunzip64 $VTOY_PATH/tool/lunzip
123
124 rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
125 ln -s $VTOY_PATH/tool/lz4cat64 $VTOY_PATH/tool/lz4cat
126 ln -s $VTOY_PATH/tool/zstdcat64 $VTOY_PATH/tool/zstdcat
127 elif [ "$VTOY_ARCH" = "i386" ]; then
128 echo "Use i386 busybox toolkit ..." >>$VTLOG
129 $BUSYBOX_PATH/xzcat $BUSYBOX_PATH/xzcat32_musl.xz > $BUSYBOX_PATH/xzcat_musl
130 $BUSYBOX_PATH/chmod +x $BUSYBOX_PATH/xzcat_musl
131 ln -s $BUSYBOX_PATH/xzminidec32 $BUSYBOX_PATH/xzminidec
132 ln -s $VTOY_PATH/tool/dmsetup32 $VTOY_PATH/tool/dmsetup
133 ln -s $VTOY_PATH/tool/lunzip32 $VTOY_PATH/tool/lunzip
134
135 if uname -a | egrep -q 'x86_64|amd64'; then
136 echo "zstdcat use 64bit ..." >>$VTLOG
137 rm -f $VTOY_PATH/tool/zstdcat
138 ln -s $VTOY_PATH/tool/zstdcat64 $VTOY_PATH/tool/zstdcat
139 fi
140 elif [ "$VTOY_ARCH" = "mips64el" ]; then
141 echo "Use MIPS64 busybox toolkit ..." >>$VTLOG
142 ln -s $BUSYBOX_PATH/xzminidecm64e $BUSYBOX_PATH/xzminidec
143 ln -s $VTOY_PATH/tool/dmsetupm64e $VTOY_PATH/tool/dmsetup
144
145 # TBD
146 #ln -s $VTOY_PATH/tool/lunzipm64e $VTOY_PATH/tool/lunzip
147
148 rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
149 ln -s $VTOY_PATH/tool/lz4catm64e $VTOY_PATH/tool/lz4cat
150
151 # TBD
152 #ln -s $VTOY_PATH/tool/zstdcataa64 $VTOY_PATH/tool/zstdcat
153
154 elif [ "$VTOY_ARCH" = "aarch64" ]; then
155 echo "Use ARM64 busybox toolkit ..." >>$VTLOG
156 ln -s $BUSYBOX_PATH/xzminidecaa64 $BUSYBOX_PATH/xzminidec
157 ln -s $VTOY_PATH/tool/dmsetupaa64 $VTOY_PATH/tool/dmsetup
158 ln -s $VTOY_PATH/tool/lunzipaa64 $VTOY_PATH/tool/lunzip
159
160 rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
161 ln -s $VTOY_PATH/tool/lz4cataa64 $VTOY_PATH/tool/lz4cat
162 ln -s $VTOY_PATH/tool/zstdcataa64 $VTOY_PATH/tool/zstdcat
163 else
164 echo "Unknown busybox toolkit ..." >>$VTLOG
165 fi
166
167 rm -f *.xz
168 cd /
169
170 ####################################################################
171 # #
172 # Step 2 : Hand over to ventoy init #
173 # #
174 ####################################################################
175 exec $BUSYBOX_PATH/sh $VTOY_PATH/init