X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/3ca624f3eedf94125458ec43c9e4f59e1d7e4388..73c196a823e4cd86812eeddaa76a76997d2aa0fc:/INSTALL/Ventoy2Disk.sh diff --git a/INSTALL/Ventoy2Disk.sh b/INSTALL/Ventoy2Disk.sh index 29e3071..96dd77f 100644 --- a/INSTALL/Ventoy2Disk.sh +++ b/INSTALL/Ventoy2Disk.sh @@ -9,12 +9,16 @@ fi . ./tool/ventoy_lib.sh print_usage() { - echo 'Usage: VentoyInstaller.sh OPTION /dev/sdX' - echo ' OPTION:' + 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 '' @@ -38,6 +42,7 @@ while [ -n "$1" ]; do SECUREBOOT="YES" else if ! [ -b "$1" ]; then + vterr "$1 is NOT a valid device" print_usage cd $OLDDIR exit 1 @@ -54,13 +59,25 @@ if [ -z "$MODE" ]; then exit 1 fi -if [ -z "$SUDO_USER" ]; then - if [ "$USER" != "root" ]; then - vterr "EUID is $EUID root permission is required." - echo '' - 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 +fi + +if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then + vtdebug "root permission check ok ..." +else + vterr "Failed to access $DISK, maybe root privilege is needed!" + echo '' + cd $OLDDIR + exit 1 fi vtdebug "MODE=$MODE FORCE=$FORCE" @@ -93,38 +110,49 @@ if ! check_tool_work_ok; then 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 +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 $DISK}') + 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 + done +fi + + 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 ! fdisk -v >/dev/null 2>&1; then - vterr "fdisk is needed by ventoy installation, but is not found in the system." + + 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 @@ -188,7 +216,7 @@ if [ "$MODE" = "install" ]; then exit 1 fi - format_ventoy_disk $DISK + format_ventoy_disk $DISK $PARTTOOL # format part1 if ventoy_is_linux64; then @@ -227,6 +255,12 @@ if [ "$MODE" = "install" ]; then 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 @@ -236,12 +270,18 @@ if [ "$MODE" = "install" ]; 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 @@ -305,6 +345,7 @@ else 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