From 1840cb8f38f3ee14a50a5779ecbf7897f8f02bd9 Mon Sep 17 00:00:00 2001 From: longpanda Date: Sat, 6 Mar 2021 19:53:50 +0800 Subject: [PATCH] 1.0.37 release --- IMG/cpio/ventoy/hook/manjaro/ventoy-disk.sh | 6 +- IMG/mkcpio.sh | 10 +- INSTALL/README | 2 + INSTALL/Ventoy2Disk.sh | 2 + INSTALL/VentoyWeb.sh | 2 + INSTALL/VentoyWebDeepin.sh | 192 ++++++++++++++++++++ INSTALL/grub/grub.cfg | 2 +- INSTALL/ventoy_pack.sh | 6 + LANGUAGES/languages.ini | Bin 167790 -> 168074 bytes LinuxGUI/WebUI/index.html | 18 +- LinuxGUI/WebUI/static/img/VentoyLogo.png | Bin 0 -> 26480 bytes vtoyfat/fat_io_lib/buildlib.sh | 4 + 12 files changed, 232 insertions(+), 12 deletions(-) create mode 100644 INSTALL/VentoyWebDeepin.sh create mode 100644 LinuxGUI/WebUI/static/img/VentoyLogo.png diff --git a/IMG/cpio/ventoy/hook/manjaro/ventoy-disk.sh b/IMG/cpio/ventoy/hook/manjaro/ventoy-disk.sh index c1765376..e325eabf 100644 --- a/IMG/cpio/ventoy/hook/manjaro/ventoy-disk.sh +++ b/IMG/cpio/ventoy/hook/manjaro/ventoy-disk.sh @@ -59,7 +59,11 @@ else vtlog "vtLABEL is $vtLABEL from cmdline" fi - ln -s /dev/$vtDM "/dev/disk/by-label/$vtLABEL" + if [ -e "/dev/disk/by-label/$vtLABEL" ]; then + vtlog "/dev/disk/by-label/$vtLABEL already exist" + else + ln -s /dev/$vtDM "/dev/disk/by-label/$vtLABEL" + fi fi # OK finish diff --git a/IMG/mkcpio.sh b/IMG/mkcpio.sh index 5daded7f..0fc88baf 100644 --- a/IMG/mkcpio.sh +++ b/IMG/mkcpio.sh @@ -142,6 +142,12 @@ rm -rf cpio_tmp echo '======== SUCCESS =============' -rm -f $VENTOY_PATH/INSTALL/ventoy/ventoy*.cpio -cp -a ventoy*.cpio $VENTOY_PATH/INSTALL/ventoy/ +rm -f $VENTOY_PATH/INSTALL/ventoy/ventoy.cpio +rm -f $VENTOY_PATH/INSTALL/ventoy/ventoy_x86.cpio +rm -f $VENTOY_PATH/INSTALL/ventoy/ventoy_arm64.cpio +rm -f $VENTOY_PATH/INSTALL/ventoy/ventoy_mips64.cpio +cp -a ventoy.cpio $VENTOY_PATH/INSTALL/ventoy/ +cp -a ventoy_x86.cpio $VENTOY_PATH/INSTALL/ventoy/ +cp -a ventoy_arm64.cpio $VENTOY_PATH/INSTALL/ventoy/ +cp -a ventoy_mips64.cpio $VENTOY_PATH/INSTALL/ventoy/ diff --git a/INSTALL/README b/INSTALL/README index db836ce6..c90d1896 100644 --- a/INSTALL/README +++ b/INSTALL/README @@ -21,6 +21,8 @@ Please refer https://www.ventoy.net/en/doc_start.html for details. 1. sudo sh VentoyWeb.sh 2. open your browser and visit http://127.0.0.1:24680 +========== VentoyWebDeepin.sh =============== +1. sudo sh VentoyWebDeepin.sh ========== CreatePersistentImg.sh =============== diff --git a/INSTALL/Ventoy2Disk.sh b/INSTALL/Ventoy2Disk.sh index fb499a95..5b1d6f4c 100644 --- a/INSTALL/Ventoy2Disk.sh +++ b/INSTALL/Ventoy2Disk.sh @@ -16,6 +16,8 @@ if uname -m | egrep -q 'aarch64|arm64'; then export TOOLDIR=aarch64 elif uname -m | egrep -q 'x86_64|amd64'; then export TOOLDIR=x86_64 +elif uname -m | egrep -q 'mips64'; then + export TOOLDIR=mips64el else export TOOLDIR=i386 fi diff --git a/INSTALL/VentoyWeb.sh b/INSTALL/VentoyWeb.sh index 4c811e00..061120b8 100644 --- a/INSTALL/VentoyWeb.sh +++ b/INSTALL/VentoyWeb.sh @@ -27,6 +27,8 @@ if uname -m | egrep -q 'aarch64|arm64'; then TOOLDIR=aarch64 elif uname -m | egrep -q 'x86_64|amd64'; then TOOLDIR=x86_64 +elif uname -m | egrep -q 'mips64'; then + TOOLDIR=mips64el else TOOLDIR=i386 fi diff --git a/INSTALL/VentoyWebDeepin.sh b/INSTALL/VentoyWebDeepin.sh new file mode 100644 index 00000000..c17607e6 --- /dev/null +++ b/INSTALL/VentoyWebDeepin.sh @@ -0,0 +1,192 @@ +#!/bin/sh + +print_usage() { + echo 'Usage: VentoyWebDeepin.sh [ OPTION ]' + echo ' OPTION: (optional)' + echo ' -H x.x.x.x http server IP address (default is 127.0.0.1)' + echo ' -p PORT http server PORT (default is 24680)' + echo ' -h print this help' + echo '' +} + +print_err() { + echo "" + echo "$*" + echo "" +} + + +get_user() { + name=$(logname) + if [ -n "$name" -a "$name" != "root" ]; then + echo $name; return + fi + + name=${HOME#/home/} + if [ -n "$name" -a "$name" != "root" ]; then + echo $name; return + fi +} + + +uid=$(id -u) +if [ $uid -ne 0 ]; then + exec sudo sh $0 $* +fi + +OLDDIR=$(pwd) + +if uname -m | egrep -q 'aarch64|arm64'; then + TOOLDIR=aarch64 +elif uname -m | egrep -q 'x86_64|amd64'; then + TOOLDIR=x86_64 +elif uname -m | egrep -q 'mips64'; then + TOOLDIR=mips64el +else + TOOLDIR=i386 +fi + +if [ ! -f ./tool/$TOOLDIR/V2DServer ]; then + if [ -f ${0%VentoyWebDeepin.sh}/tool/$TOOLDIR/V2DServer ]; then + cd ${0%VentoyWebDeepin.sh} + fi +fi + +PATH=./tool/$TOOLDIR:$PATH + +if [ ! -f ./boot/boot.img ]; then + if [ -d ./grub ]; then + echo "Don't run VentoyWebDeepin.sh here, please download the released install package, and run the script in it." + else + echo "Please run under the correct directory!" + fi + exit 1 +fi + +HOST="127.0.0.1" +PORT=24680 + +while [ -n "$1" ]; do + if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + print_usage + exit 0 + elif [ "$1" = "-H" ]; then + shift + if echo $1 | grep -q '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'; then + HOST="$1" + else + print_err "Invalid host $1" + exit 1 + fi + elif [ "$1" = "-p" ]; then + shift + if [ $1 -gt 0 -a $1 -le 65535 ]; then + PORT="$1" + else + print_err "Invalid port $1" + exit 1 + fi + fi + + shift +done + + +if ps -ef | grep "V2DServer.*$HOST.*$PORT" | grep -q -v grep; then + print_err "Another ventoy server is running now, please close it first." + exit 1 +fi + +VUSER=$(get_user) + +LOGFILE=log.txt +if [ -e $LOGFILE ]; then + chown $VUSER $LOGFILE +else + su $VUSER -c "touch $LOGFILE" +fi + +#delete the log.txt if it's more than 8MB +if [ -f $LOGFILE ]; then + logsize=$(stat -c '%s' $LOGFILE) + if [ $logsize -gt 8388608 ]; then + rm -f $LOGFILE + fi +fi + + +if [ -f ./tool/$TOOLDIR/V2DServer.xz ]; then + xz -d ./tool/$TOOLDIR/V2DServer.xz + chmod +x ./tool/$TOOLDIR/V2DServer +fi + +rm -rf ./*_VTMPDIR +vtWebTmpDir=$(mktemp -d -p ./ --suffix=_VTMPDIR) +chown $VUSER $vtWebTmpDir + + +V2DServer "$HOST" "$PORT" & +V2DPid=$! +sleep 1 + +su $VUSER -c "browser --window-size=550,400 --app=\"http://${HOST}:${PORT}/index.html?chrome-app\" --user-data-dir=$vtWebTmpDir >> $LOGFILE 2>&1" & +WebPid=$! + + +vtoy_trap_exit() { + + [ -d /proc/$V2DPid ] && kill -2 $V2DPid + [ -d /proc/$WebPid ] && kill -9 $WebPid + + while [ -n "1" ]; do + curPid=$(ps -ef | grep -m1 "$vtWebTmpDir" | egrep -v '\sgrep\s' | awk '{print $2}') + if [ -z "$curPid" ]; then + break + fi + + if [ -d /proc/$curPid ]; then + kill -9 $curPid + fi + done + + [ -d $vtWebTmpDir ] && rm -rf $vtWebTmpDir + + if [ -n "$OLDDIR" ]; then + CURDIR=$(pwd) + if [ "$CURDIR" != "$OLDDIR" ]; then + cd "$OLDDIR" + fi + fi + + exit 1 +} + +trap vtoy_trap_exit HUP INT QUIT TSTP +sleep 1 + + +vtVer=$(cat ventoy/version) +echo "" +echo "==================================================" +if [ "$LANG" = "zh_CN.UTF-8" ]; then + echo " Ventoy Server $vtVer 已经启动 ..." +else + echo " Ventoy Server $vtVer is running ..." +fi +echo "==================================================" +echo "" +echo "########### Press Ctrl + C to exit ###############" +echo "" + +wait $WebPid + +[ -d /proc/$V2DPid ] && kill -2 $V2DPid + +[ -d $vtWebTmpDir ] && rm -rf $vtWebTmpDir + +if [ -n "$OLDDIR" ]; then + CURDIR=$(pwd) + if [ "$CURDIR" != "$OLDDIR" ]; then + cd "$OLDDIR" + fi +fi diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index 3513df39..85a630a1 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -1584,7 +1584,7 @@ function img_unsupport_menuentry { ############################################################# ############################################################# -set VENTOY_VERSION="1.0.36" +set VENTOY_VERSION="1.0.37" #ACPI not compatible with Window7/8, so disable by default set VTOY_PARAM_NO_ACPI=1 diff --git a/INSTALL/ventoy_pack.sh b/INSTALL/ventoy_pack.sh index 8c2655c3..8a5ad705 100644 --- a/INSTALL/ventoy_pack.sh +++ b/INSTALL/ventoy_pack.sh @@ -94,11 +94,15 @@ cp $OPT ./tool $tmpdir/ rm -f $tmpdir/ENROLL_THIS_KEY_IN_MOKMANAGER.cer cp $OPT Ventoy2Disk.sh $tmpdir/ cp $OPT VentoyWeb.sh $tmpdir/ +cp $OPT VentoyWebDeepin.sh $tmpdir/ +#cp $OPT Ventoy.desktop $tmpdir/ cp $OPT README $tmpdir/ cp $OPT plugin $tmpdir/ cp $OPT CreatePersistentImg.sh $tmpdir/ dos2unix -q $tmpdir/Ventoy2Disk.sh dos2unix -q $tmpdir/VentoyWeb.sh +dos2unix -q $tmpdir/VentoyWebDeepin.sh +#dos2unix -q $tmpdir/Ventoy.desktop dos2unix -q $tmpdir/CreatePersistentImg.sh cp $OPT ../LinuxGUI/WebUI $tmpdir/ @@ -130,6 +134,8 @@ find $tmpdir/ -type d -exec chmod 755 "{}" + find $tmpdir/ -type f -exec chmod 644 "{}" + chmod +x $tmpdir/Ventoy2Disk.sh chmod +x $tmpdir/VentoyWeb.sh +chmod +x $tmpdir/VentoyWebDeepin.sh +#chmod +x $tmpdir/Ventoy.desktop chmod +x $tmpdir/CreatePersistentImg.sh tar -czvf ventoy-${curver}-linux.tar.gz $tmpdir diff --git a/LANGUAGES/languages.ini b/LANGUAGES/languages.ini index 091bc27c6ab4be30a1bb52ca74e74aba1c7fb6c2..fdf6949bba01f7a648eb637704909c1196665172 100644 GIT binary patch delta 2649 zcmb7FZERCj7=CX#X0RDpX~s54?rs4yg~_(E(RS}0cK{S?uV9cY#rCF>pD~f z1HVj6jOa1me}rjtCISvCL6P9cAEPoIiHRm=X2cjk_l|Mf3xh-zuHcfNyx#yhs zectE&?98#k=SB<1Urx$blVwFukwL@MLuq=#x_m`*y)?E-u1T)XuIay9)8bk8zH8xq z?G&d0NLtP!+x(R~QMprf#~iGa%hVCY}T&)6}cp22KVQMjC4` z&g0OH8Q5G+qBj4!s(sa-`_qbtkiC8b^cz)FS@jZd@)oaKRO<`YXGj8 zvif?9Or1Gw9p33!Tgj|aV3EdZf?W@MW8c|;fm7b&R(||-i9Fg`?^=g&${H~ zRD+y8U9~C$Y4$RseC&~{#w+FY=Y|}3C$!GS+>2ZGkz+V;TW<75Ns*~^l8h@)k8gF9 z8?rcCRTP6@zk)m<}iuCnyf8eR4G8lBpNgD@shjoa60e^QL7;jGVo=uAW2B z&e#d_P^U@`yJaUX7fag~Xhz@&GOj6VrK@@oMg7nX&sjF6D4x;rcbUsw0yG( zExzH9r6HG8fkS50=`iBWw{_G;gI33bS`cK@_zfbWQ-{h|<8^r2%W9-i{|GV&6olAjz zNy?!Qf=Nz2L+6r=Xc)8|`yM2frMOuVxE;Z2Li>P{<;LL{rXgXMIF~-hC$93#g_qAz zj<_6}tbeo}I(M?O^DqcIBP!+@)tLVipSDnC_Q?6MwyKDz5nfRz>P4ey69zTmvCjfH zi-?d2;G~Y$3a60QCjw=7fqrW27Gukzjmc3kH>ruEoP`psnvsFBj644z>Rviu?ycJu?=uc zB#4zyy!Z|)N1N~^$IB!B#lYPFZ2?FvgblKphLph;5wIK#%ucu}wN}xn%MAjqUTPupdEq z#CEyjSlWZ#e?SDgSEAa+vu2StbE~u!h5M<_#hjtnbuRS;y`~%1^M7a+@|ee1*+R=S zzD{5sf2La(9FDRAgZ9&RdQx8Mijpgu zJ%je-%x7R{T$=)=UOD@QKejl+!}Jq6gV~MgygIcX@a}_sc7?H~=CI5AF{N|nql-gt zr!RDNnw|X-H22~ACK|aHC&P3`#VkR;%F9u&zgU?~&`CXoTmI`hnIn*IHLfwppm4`t;+iN-9q>2Py)Bdbw=5fMY}*ww@$JO+43#89!k_uf7W;Ox#Jp>sJ0 zAljH46JEeo5)TS4WgZoeEH1(W!vpL()vNZ<;DO-*M=#X+*J%I42cXm40#NxlP6|MPd8e?C^6YUU1_pdrqX7yEFQ+qD%mgW zr^iiTWSeZU|J3GltCulNKCsqkQW4waABUbzp0hD(dWa>X(B?1eSFlW9_nwh!+FVAi z%?9>2*f;y^?ednlXE9}Q0AgbnJ0NYxV!~p@V!@)o;0VMf3<}f#axgk>R`~XWX}b*% b - +
@@ -580,11 +580,16 @@ } function ResizeWindow() { - //console.log(window.screen.width + ' [x1] ' + window.screen.height); + //console.log(window.screen.availWidth + ' [x1] ' + window.screen.availHeight); //console.log(vtoy_app_width + ' [x2] ' + vtoy_app_height); - //console.log((window.screen.width - vtoy_app_width) / 2 + ' [x3] ' + (window.screen.height - vtoy_app_height) / 2); - window.moveTo((window.screen.width - vtoy_app_width) / 2, (window.screen.height - vtoy_app_height) / 2); - window.resizeTo(vtoy_app_width, vtoy_app_height); + //console.log((window.screen.availWidth - vtoy_app_width) / 2 + ' [x3] ' + (window.screen.availHeight - vtoy_app_height) / 2); + + window.onresize = function() { }; + + window.resizeTo(vtoy_app_width, vtoy_app_height); + window.moveTo((window.screen.availWidth - vtoy_app_width) / 2, (window.screen.availHeight - vtoy_app_height) / 2); + + window.onresize = ResizeWindow; } function MoveMainDivToCenter() { @@ -1012,9 +1017,6 @@ $('#vtoy_part_align_4kb').prop("checked", true); if (vtoy_chrome_app_mode) { - window.onresize = function() { - ResizeWindow(); - } ResizeWindow(); } else { $('#vtoy_main_div').css("border", '2px solid #f4f4f4'); diff --git a/LinuxGUI/WebUI/static/img/VentoyLogo.png b/LinuxGUI/WebUI/static/img/VentoyLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a13884a46f46860dd2591f92adc4b18333cddb85 GIT binary patch literal 26480 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 bF*qwQI65#e$CHXc00000NkvXXu0mjf&;5Zz literal 0 HcmV?d00001 diff --git a/vtoyfat/fat_io_lib/buildlib.sh b/vtoyfat/fat_io_lib/buildlib.sh index 50b5fc91..eaab1197 100644 --- a/vtoyfat/fat_io_lib/buildlib.sh +++ b/vtoyfat/fat_io_lib/buildlib.sh @@ -27,6 +27,10 @@ ar -rc libfat_io_aa64.a *.o rm -f *.o +mips64el-linux-musl-gcc -mips64r2 -mabi=64 -O2 -D_FILE_OFFSET_BITS=64 fat*.c -c +ar -rc libfat_io_m64e.a *.o +rm -f *.o + cd -