# Step 1 : parse kernel debug parameter #
# #
####################################################################
-[ -d /proc ] || mkdir /proc; mount -t proc proc /proc
-vtcmdline=$(cat /proc/cmdline)
-vtkerver=$(cat /proc/version)
-umount /proc; rm -rf /proc
+
+if ! [ -d /proc ]; then
+ mkdir /proc
+ vtrmproc='Y'
+fi
+
+mount -t proc proc /proc
+export vtcmdline=$(cat /proc/cmdline)
+export vtkerver=$(cat /proc/version)
+umount /proc;
+
+if [ "$vtrmproc" = "Y" ]; then
+ rm -rf /proc
+fi
echo "kenel version=$vtkerver" >>$VTLOG
echo "kenel cmdline=$vtcmdline" >>$VTLOG
#break here for debug
if [ "$VTOY_BREAK_LEVEL" = "01" ] || [ "$VTOY_BREAK_LEVEL" = "11" ]; then
- sleep 5
+ sleep 5
echo -e "\n\n\033[32m ################################################# \033[0m"
echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
echo -e "\033[32m ################################################# \033[0m \n"
exec $BUSYBOX_PATH/sh
fi
-
-####################################################################
-# #
-# Step 2 : extract real initramfs to / #
-# #
-####################################################################
-cd /
-rm -rf /init /linuxrc /dev/ /root
-
-vtSbinFileNum=$(ls -1 /sbin | wc -l)
-if [ $vtSbinFileNum -eq 1 ]; then
- echo "remove whole sbin directory" >> $VTLOG
- rm -rf /sbin
+if echo $vtcmdline | grep -q 'rdinit=/vtoy/vtoy'; then
+ echo "handover to init_loop" >>$VTLOG
+ rm -f /xxxx /vtoyxrc
+ exec $BUSYBOX_PATH/sh $VTOY_PATH/init_loop
else
- echo "remove only sbin/init file" >> $VTLOG
- ls -l /sbin >> $VTLOG
- rm -f /sbin/init
+ echo "handover to init_chain" >>$VTLOG
+ exec $BUSYBOX_PATH/sh $VTOY_PATH/init_chain
fi
-
-ventoy_is_initrd_ramdisk() {
- #As I known, PCLinuxOS use ramdisk
- if echo $vtkerver | grep -i -q 'PCLinuxOS'; then
- true
- else
- false
- fi
-}
-
-# param: file skip magic tmp
-ventoy_unpack_initramfs() {
- vtfile=$1; vtskip=$2; vtmagic=$3; vttmp=$4
- echo "=====ventoy_unpack_initramfs: #$*#" >> $VTLOG
-
- #special process
- #if [ "${vtmagic:0:4}" = '5678' ]; then
- # echo -en '\x1F\x8B' | dd status=none of=$vtfile bs=1 count=2 conv=notrunc
- # vtmagic='1F8B'
- #fi
-
- for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat'; do
- if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
- echo "vtx=$vtx" >> $VTLOG
- if [ $vtskip -eq 0 ]; then
- if [ "${vtx:5}" = "xzcat" ]; then
- rm -f $VTOY_PATH/xzlog
- ${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
-
- if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
- echo 'xzcat failed, now try xzminidec...' >> $VTLOG
- cat $vtfile | xzminidec | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
- fi
-
- else
- ${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
- fi
- else
- dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none | ${vtx:5} | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
- fi
- break
- fi
- done
-}
-
-# param: file magic tmp
-ventoy_unpack_initrd() {
- vtfile=$1; vtmagic=$2; vttmp=$3
- echo "=====ventoy_unpack_initrd: #$*#" >> $VTLOG
-
- for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat'; do
- if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
- echo "vtx=$vtx" >> $VTLOG
- ${vtx:5} $vtfile > $vttmp
- break
- fi
- done
-}
-
-
-# This export is for busybox cpio command
-export EXTRACT_UNSAFE_SYMLINKS=1
-
-for vtfile in $(ls /initrd*); do
- #decompress first initrd
- vtmagic=$(hexdump -n 2 -e '2/1 "%02X"' $vtfile)
-
- if ventoy_is_initrd_ramdisk; then
- ventoy_unpack_initrd $vtfile $vtmagic ${vtfile}_tmp
- mv ${vtfile}_tmp $vtfile
- break
- else
- ventoy_unpack_initramfs $vtfile 0 $vtmagic ${vtfile}_tmp
- fi
-
- #only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
- while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
- mv ${vtfile}_tmp $vtfile
- vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
- vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
- let vtoffset="(${#vtdump}-${#vtmagic})/2"
-
- if [ -z "$vtmagic" ]; then
- echo "terminate with all zero data file" >> $VTLOG
- break
- fi
-
- ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
- done
-
- rm -f $vtfile ${vtfile}_tmp
-done
-
-
-#break here for debug
-if [ "$VTOY_BREAK_LEVEL" = "02" ] || [ "$VTOY_BREAK_LEVEL" = "12" ]; then
- sleep 5
- echo -e "\n\n\033[32m ################################################# \033[0m"
- echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
- echo -e "\033[32m ################################################# \033[0m \n"
- if [ "$VTOY_BREAK_LEVEL" = "12" ]; then
- cat $VTOY_PATH/log
- fi
- exec $BUSYBOX_PATH/sh
-fi
-
-
-####################################################################
-# #
-# Step 3 : Hand over to ventoy.sh #
-# #
-####################################################################
-echo "Now hand over to ventoy.sh" >>$VTLOG
-. $VTOY_PATH/tool/vtoytool_install.sh
-
-export PATH=$VTOY_ORG_PATH
-exec $BUSYBOX_PATH/sh $VTOY_PATH/ventoy.sh