]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - INSTALL/Ventoy2Disk.sh
Update tr_TR.txt (#2262)
[Ventoy.git] / INSTALL / Ventoy2Disk.sh
index 96dd77fb85cc6e348568db7ec2afd33bebdd14d9..f08ab1090a26d040af9a09db88b283e00eb09c62 100644 (file)
 #!/bin/sh
 
-OLDDIR=$PWD
+OLDDIR=$(pwd)
 
 if ! [ -f ./tool/ventoy_lib.sh ]; then
-    cd ${0%Ventoy2Disk.sh}
-fi
-
-. ./tool/ventoy_lib.sh
-
-print_usage() {
-    echo 'Usage:  Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
-    echo '  CMD:'
-    echo '   -i  install ventoy to sdX (fail if disk already installed with ventoy)'
-    echo '   -u  update ventoy in sdX'
-    echo '   -I  force install ventoy to sdX (no matter installed or not)'
-    echo ''
-    echo '  OPTION: (optional)'
-    echo '   -s  enable secure boot support (default is disabled)'
-    echo ''
-    
-}
-
-echo ''
-echo '***********************************************************'
-echo '*                Ventoy2Disk Script                       *'
-echo '*             longpanda  admin@ventoy.net                 *'
-echo '***********************************************************'
-echo ''
-
-vtdebug "############# Ventoy2Disk $0 ################"
-
-while [ -n "$1" ]; do
-    if [ "$1" = "-i" ]; then
-        MODE="install"
-    elif [ "$1" = "-I" ]; then
-        MODE="install"
-        FORCE="Y"
-    elif [ "$1" = "-u" ]; then
-        MODE="update"
-    elif [ "$1" = "-s" ]; then
-        SECUREBOOT="YES"
-    else
-        if ! [ -b "$1" ]; then
-            vterr "$1 is NOT a valid device"
-            print_usage
-            cd $OLDDIR
-            exit 1
-        fi
-        DISK=$1
+    if [ -f ${0%Ventoy2Disk.sh}/tool/ventoy_lib.sh ]; then
+        cd ${0%Ventoy2Disk.sh}    
     fi
-    
-    shift
-done
-
-if [ -z "$MODE" ]; then
-    print_usage
-    cd $OLDDIR
-    exit 1
 fi
 
-if ! [ -b "$DISK" ]; then
-    vterr "Disk $DISK does not exist"
-    cd $OLDDIR
-    exit 1
-fi
-
-if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
-    vterr "$DISK is a partition, please use the whole disk"
-    cd $OLDDIR
-    exit 1
+if [ -f ./ventoy/version ]; then
+    curver=$(cat ./ventoy/version) 
 fi
 
-if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then
-    vtdebug "root permission check ok ..."
+if uname -m | grep -E -q 'aarch64|arm64'; then
+    export TOOLDIR=aarch64
+elif uname -m | grep -E -q 'x86_64|amd64'; then
+    export TOOLDIR=x86_64
+elif uname -m | grep -E -q 'mips64'; then
+    export TOOLDIR=mips64el
 else
-    vterr "Failed to access $DISK, maybe root privilege is needed!"
-    echo ''
-    cd $OLDDIR
-    exit 1
+    export TOOLDIR=i386
 fi
+export PATH="./tool/$TOOLDIR:$PATH"
+
+
+echo ''
+echo '**********************************************'
+echo "      Ventoy: $curver  $TOOLDIR"
+echo "      longpanda admin@ventoy.net"
+echo "      https://www.ventoy.net"
+echo '**********************************************'
+echo ''
 
-vtdebug "MODE=$MODE FORCE=$FORCE"
 
 if ! [ -f ./boot/boot.img ]; then
     if [ -d ./grub ]; then
-        vterr "Don't run me here, please download the released install package, and run there."
+        echo "Don't run Ventoy2Disk.sh here, please download the released install package, and run the script in it."
     else
-        vterr "Please run under the right directory!" 
+        echo "Please run under the correct directory!" 
     fi
     exit 1
 fi
 
-#decompress tool
-cd tool
-chmod +x ./xzcat
-for file in $(ls); do
-    if [ "$file" != "xzcat" ]; then
-        if [ "$file" != "ventoy_lib.sh" ]; then
-            ./xzcat $file > ${file%.xz}
-            chmod +x ${file%.xz}
-        fi
-    fi
-done
-cd ../
-
-if ! check_tool_work_ok; then
-    vterr "Some tools can not run in current system. Please check log.txt for detail."
-    cd $OLDDIR
-    exit 1
-fi
+echo "############# Ventoy2Disk $* [$TOOLDIR] ################" >> ./log.txt
+date >> ./log.txt
 
-testEF=$(echo -en '\xEF' | ./tool/hexdump -n 1 -e '1/1 "%02X"')
-if [ "$testEF" != "EF" ]; then
-    vtdebug "testEF=##${testEF}##"
-    vterr "There is something wrong with the interpreter !"
-    exit 1
-fi
-
-grep "^$DISK" /proc/mounts | while read mtline; do
-    mtpnt=$(echo $mtline | awk '{print $2}')
-    vtdebug "Trying to umount $mtpnt ..."
-    umount $mtpnt >/dev/null 2>&1
-done
-
-if swapon -s | grep -q "^${DISK}[0-9]"; then
-    swapon -s | grep "^${DISK}[0-9]" | awk '{print $1}' | while read line; do
-        vtdebug "Trying to swapoff $line ..."
-        swapoff $line
+#decompress tool
+echo "decompress tools" >> ./log.txt
+cd ./tool/$TOOLDIR
+
+ls *.xz > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    [ -f ./xzcat ] && chmod +x ./xzcat
+
+    for file in $(ls *.xz); do
+        echo "decompress $file" >> ./log.txt
+        xzcat $file > ${file%.xz}
+        [ -f ./${file%.xz} ] && chmod +x ./${file%.xz}
+        [ -f ./$file ] && rm -f ./$file
     done
 fi
 
+cd ../../
+chmod +x -R ./tool/$TOOLDIR
 
-if grep "$DISK" /proc/mounts; then
-    vterr "$DISK is already mounted, please umount it first!"
-    cd $OLDDIR
-    exit 1
-fi
-
-if swapon -s | grep -q "^${DISK}[0-9]"; then
-    vterr "$DISK is used as swap, please swapoff it first!"
-    cd $OLDDIR
-    exit 1
-fi
-
-
-if [ "$MODE" = "install" ]; then
-    vtdebug "install ventoy ..."
-
-    if parted -v > /dev/null 2>&1; then
-        PARTTOOL='parted'
-    elif fdisk -v >/dev/null 2>&1; then
-        PARTTOOL='fdisk'
-    else
-        vterr "Both parted and fdisk are not found in the sysstem, Ventoy can't create new partition."
-        cd $OLDDIR
-        exit 1
-    fi
-    
-    version=$(get_disk_ventoy_version $DISK)
-    if [ $? -eq 0 ]; then
-        if [ -z "$FORCE" ]; then
-            vtwarn "$DISK already contains a Ventoy with version $version"
-            vtwarn "Use -u option to do a safe upgrade operation."
-            vtwarn "OR if you really want to reinstall ventoy to $DISK, please use -I option."
-            vtwarn ""
-            cd $OLDDIR
-            exit 1
-        fi
-    fi
-    
-    disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size)
-    disk_size_gb=$(expr $disk_sector_num / 2097152)
-
-    if [ $disk_sector_num -gt 4294967296 ]; then
-        vterr "$DISK is over 2TB size, MBR will not work on it."
-        cd $OLDDIR
-        exit 1
-    fi
-
-    #Print disk info
-    echo "Disk : $DISK"
-    parted -s $DISK p 2>&1 | grep Model
-    echo "Size : $disk_size_gb GB"
-    echo ''
-
-    vtwarn "Attention:"
-    vtwarn "You will install Ventoy to $DISK."
-    vtwarn "All the data on the disk $DISK will be lost!!!"
-    echo ""
-
-    read -p 'Continue? (y/n)'  Answer
-    if [ "$Answer" != "y" ]; then
-        if [ "$Answer" != "Y" ]; then
-            exit 0
-        fi
-    fi
-
-    echo ""
-    vtwarn "All the data on the disk $DISK will be lost!!!"
-    read -p 'Double-check. Continue? (y/n)'  Answer
-    if [ "$Answer" != "y" ]; then
-        if [ "$Answer" != "Y" ]; then
-            exit 0
-        fi
-    fi
-
-
-    if [ $disk_sector_num -le $VENTOY_SECTOR_NUM ]; then  
-        vterr "No enough space in disk $DISK"
-        exit 1
-    fi
-
-    if ! dd if=/dev/zero of=$DISK bs=1 count=512 status=none conv=fsync; then
-        vterr "Write data to $DISK failed, please check whether it's in use."
-        exit 1
-    fi
-
-    format_ventoy_disk $DISK $PARTTOOL
-
-    # format part1
-    if ventoy_is_linux64; then
-        cmd=./tool/mkexfatfs_64
-    else
-        cmd=./tool/mkexfatfs_32
-    fi
-
-    chmod +x ./tool/*
-
-    # DiskSize > 32GB  Cluster Size use 128KB
-    # DiskSize < 32GB  Cluster Size use 32KB
-    if [ $disk_size_gb -gt 32 ]; then
-        cluster_sectors=256
-    else
-        cluster_sectors=64
-    fi
-
-    $cmd -n ventoy -s $cluster_sectors ${DISK}1
-
-    chmod +x ./tool/vtoy_gen_uuid
-
-    vtinfo "writing data to disk ..."
-    dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446
-    ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
-    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
-    
-    #disk uuid
-    ./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
-    
-    #disk signature
-    ./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
 
-    vtinfo "sync data ..."
-    sync
-    
-    vtinfo "esp partition processing ..."
-    
-    sleep 1
-    mtpnt=$(grep "^${DISK}2" /proc/mounts | awk '{print $2}')
-    if [ -n "$mtpnt" ]; then
-        umount $mtpnt >/dev/null 2>&1
-    fi
-    
-    if [ "$SECUREBOOT" != "YES" ]; then
-        mkdir ./tmp_mnt
-        
-        vtdebug "mounting part2 ...."
-        for tt in 1 2 3; do
-            if mount ${DISK}2 ./tmp_mnt; then
-                vtdebug "mounting part2 success"
-                break
-            fi
-            
-            mtpnt=$(grep "^${DISK}2" /proc/mounts | awk '{print $2}')
-            if [ -n "$mtpnt" ]; then
-                umount $mtpnt >/dev/null 2>&1
-            fi
-            sleep 2
-        done
-
-        rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
-        rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
-        rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
-        rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
-        mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi  ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
-        
-        umount ./tmp_mnt
-        rm -rf ./tmp_mnt
-    fi
-
-    echo ""
-    vtinfo "Install Ventoy to $DISK successfully finished."
-    echo ""
-    
+if [ -f /bin/bash ]; then
+    /bin/bash ./tool/VentoyWorker.sh $*
 else
-    vtdebug "update ventoy ..."
-    
-    oldver=$(get_disk_ventoy_version $DISK)
-    if [ $? -ne 0 ]; then
-        vtwarn "$DISK does not contain ventoy or data corupted"
-        echo ""
-        vtwarn "Please use -i option if you want to install ventoy to $DISK"
-        echo ""
-        cd $OLDDIR
-        exit 1
-    fi
-
-    curver=$(cat ./ventoy/version)
-
-    vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!"
-    echo ""
-
-    read -p "Update Ventoy  $oldver ===> $curver   Continue? (y/n)"  Answer
-    if [ "$Answer" != "y" ]; then
-        if [ "$Answer" != "Y" ]; then
-            cd $OLDDIR
-            exit 0
-        fi
-    fi
-
-    PART2=$(get_disk_part_name $DISK 2)
-    
-    dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
-    
-    ./tool/xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1  
-
-    disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size) 
-    part2_start=$(expr $disk_sector_num - $VENTOY_SECTOR_NUM)
-    ./tool/xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
+    ash ./tool/VentoyWorker.sh $*
+fi
 
-    sync
-    
-    if [ "$SECUREBOOT" != "YES" ]; then
-        mkdir ./tmp_mnt
-        
-        vtdebug "mounting part2 ...."
-        for tt in 1 2 3; do
-            if mount ${DISK}2 ./tmp_mnt; then
-                vtdebug "mounting part2 success"
-                break
-            fi
-            sleep 2
-        done
-              
-        rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
-        rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
-        rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
-        rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
-        mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi  ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
-        
-        umount ./tmp_mnt
-        rm -rf ./tmp_mnt
+if [ -n "$OLDDIR" ]; then 
+    CURDIR=$(pwd)
+    if [ "$CURDIR" != "$OLDDIR" ]; then
+        cd "$OLDDIR"
     fi
-
-    echo ""
-    vtinfo "Update Ventoy to $DISK successfully finished."
-    echo ""
-    
 fi
-
-cd $OLDDIR
-