X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/d8fbd79ddaad6791441f328731b9d3df4f1e654f..fc5cd0a00a6745d7a8ce31bfadd76e8d064e18a1:/INSTALL/tool/ventoy_lib.sh diff --git a/INSTALL/tool/ventoy_lib.sh b/INSTALL/tool/ventoy_lib.sh index 7fe771a..a394eb1 100644 --- a/INSTALL/tool/ventoy_lib.sh +++ b/INSTALL/tool/ventoy_lib.sh @@ -14,14 +14,6 @@ ventoy_true() { [ "1" = "1" ] } -ventoy_is_linux64() { - if uname -a | egrep -q 'x86_64|amd64'; then - ventoy_true - return - fi - - ventoy_false -} vtinfo() { echo -e "\033[32m$*\033[0m" @@ -40,17 +32,25 @@ vtdebug() { echo "$*" >> ./log.txt } -check_tool_work_ok() { - - if ventoy_is_linux64; then - vtdebug "This is linux 64" - mkexfatfs=mkexfatfs_64 - vtoyfat=vtoyfat_64 +vtoy_gen_uuid() { + if uuid -F BIN > /dev/null 2>&1; then + uuid -F BIN + elif uuidgen -V > /dev/null 2>&1; then + a=$(uuidgen | sed 's/-//g') + echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}" + elif python -V > /dev/null 2>&1; then + a=$(python -c 'import sys,uuid; sys.stdout.write(uuid.uuid4().hex)') + echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}" + elif [ -e /dev/urandom ]; then + dd if=/dev/urandom bs=1 count=16 status=none else - vtdebug "This is linux 32" - mkexfatfs=mkexfatfs_32 - vtoyfat=vtoyfat_32 + datestr=$(date +%N%N%N%N%N) + a=${datestr:0:32} + echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}" fi +} + +check_tool_work_ok() { if echo 1 | hexdump > /dev/null; then vtdebug "hexdump test ok ..." @@ -60,18 +60,18 @@ check_tool_work_ok() { return fi - if ./tool/$mkexfatfs -V > /dev/null; then - vtdebug "$mkexfatfs test ok ..." + if mkexfatfs -V > /dev/null; then + vtdebug "mkexfatfs test ok ..." else - vtdebug "$mkexfatfs test fail ..." + vtdebug "mkexfatfs test fail ..." ventoy_false return fi - if ./tool/$vtoyfat -T; then - vtdebug "$vtoyfat test ok ..." + if vtoyfat -T; then + vtdebug "vtoyfat test ok ..." else - vtdebug "$vtoyfat test fail ..." + vtdebug "vtoyfat test fail ..." ventoy_false return fi @@ -90,11 +90,21 @@ get_disk_part_name() { echo ${DISK}p${2} elif echo $DISK | grep -q "/dev/mmcblk[0-9]"; then echo ${DISK}p${2} + elif echo $DISK | grep -q "/dev/nbd[0-9]"; then + echo ${DISK}p${2} else echo ${DISK}${2} fi } +check_umount_disk() { + DiskOrPart="$1" + grep "^${DiskOrPart}" /proc/mounts | while read mtline; do + mtpnt=$(echo $mtline | awk '{print $2}') + vtdebug "Trying to umount $mtpnt ..." + umount $mtpnt >/dev/null 2>&1 + done +} get_ventoy_version_from_cfg() { if grep -q 'set.*VENTOY_VERSION=' $1; then @@ -165,8 +175,7 @@ is_disk_contains_ventoy() { ventoy_true } -get_disk_ventoy_version() { - +check_disk_secure_boot() { if ! is_disk_contains_ventoy $1; then ventoy_false return @@ -174,13 +183,19 @@ get_disk_ventoy_version() { PART2=$(get_disk_part_name $1 2) - if ventoy_is_linux64; then - cmd=./tool/vtoyfat_64 - else - cmd=./tool/vtoyfat_32 + vtoyfat -s $PART2 +} + +get_disk_ventoy_version() { + + if ! is_disk_contains_ventoy $1; then + ventoy_false + return fi - ParseVer=$($cmd $PART2) + PART2=$(get_disk_part_name $1 2) + + ParseVer=$(vtoyfat $PART2) if [ $? -eq 0 ]; then vtdebug "Ventoy version in $PART2 is $ParseVer" echo $ParseVer @@ -211,6 +226,14 @@ format_ventoy_disk_mbr() { fi part2_start_sector=$(expr $part1_end_sector + 1) + + modsector=$(expr $part2_start_sector % 8) + if [ $modsector -gt 0 ]; then + vtdebug "modsector:$modsector need to be aligned with 4KB" + part1_end_sector=$(expr $part1_end_sector - $modsector) + part2_start_sector=$(expr $part1_end_sector + 1) + fi + part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1) export part2_start_sector @@ -295,6 +318,8 @@ EOF echo "create efi fat fs $PART2 ..." for i in 0 1 2 3 4 5 6 7 8 9; do + check_umount_disk "$PART2" + if mkfs.vfat -F 16 -n VTOYEFI $PART2; then echo 'success' break @@ -326,6 +351,14 @@ format_ventoy_disk_gpt() { fi part2_start_sector=$(expr $part1_end_sector + 1) + + modsector=$(expr $part2_start_sector % 8) + if [ $modsector -gt 0 ]; then + vtdebug "modsector:$modsector need to be aligned with 4KB" + part1_end_sector=$(expr $part1_end_sector - $modsector) + part2_start_sector=$(expr $part1_end_sector + 1) + fi + part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1) export part2_start_sector @@ -342,24 +375,23 @@ format_ventoy_disk_gpt() { echo "Create partitions on $DISK by $PARTTOOL in GPT style ..." vtdebug "format disk by parted ..." + + if [ "$TOOLDIR" != "aarch64" ]; then + vt_set_efi_type="set 2 msftdata on" + fi + parted -a none --script $DISK \ mklabel gpt \ unit s \ mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \ mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \ - set 2 msftdata on \ + $vt_set_efi_type \ set 2 hidden on \ quit - + sync - if ventoy_is_linux64; then - vtoygpt=./tool/vtoygpt_64 - else - vtoygpt=./tool/vtoygpt_32 - fi - - $vtoygpt -f $DISK + vtoygpt -f $DISK sync udevadm trigger --name-match=$DISK >/dev/null 2>&1 @@ -391,7 +423,10 @@ format_ventoy_disk_gpt() { fi echo "create efi fat fs $PART2 ..." + for i in 0 1 2 3 4 5 6 7 8 9; do + check_umount_disk "$PART2" + if mkfs.vfat -F 16 -n VTOYEFI $PART2; then echo 'success' break