Compare commits

..

14 Commits

Author SHA1 Message Date
longpanda
b9b6852631 1.0.63 release 2021-12-20 20:20:07 +08:00
crim50n
4a44a82840 Adding support for MiniOS. (#1317)
* Create minios-hook.sh

* Create minios-disk.sh

* Update ventoy-hook.sh

* Update grub.cfg

* Update README.md
2021-12-20 16:20:31 +08:00
kheyyam
f2e82862ab Add Azerbaijani language (#1325) 2021-12-20 16:17:56 +08:00
gbrea
368151aa3b Added Galician Language (#1323)
* Update languages.json, added Galician language

* Added Galician Language
2021-12-20 16:17:31 +08:00
Hoàng Điềm Tĩnh
b5dcaecffe Update languages.json (#1320)
Please update Vietnamese Language.
2021-12-20 16:17:07 +08:00
longpanda
a4cfbd6799 Merge branch 'master' of https://github.com/ventoy/Ventoy 2021-12-08 11:55:23 +08:00
longpanda
ab964932cb Solus UEFI boot 2021-12-08 11:55:06 +08:00
VlatkoS
bcc81d31db Updated Macedonian language (#1309)
Updated Macedonian language
2021-12-06 09:48:58 +08:00
longpanda
91330b97bf Update grub.cfg 2021-12-05 21:02:14 +08:00
longpanda
fe7b9abcff Add missing manifest file. 2021-12-05 12:02:46 +08:00
longpanda
68d3b55167 misc update 2021-12-04 14:40:04 +08:00
longpanda
e1c26567a1 1. Add check for invalid characters in menu_class plugin.
2. Optimization for help language list process
2021-12-03 18:31:09 +08:00
4131d95cef add ja_JP translation for Grub help text (#1294) 2021-12-03 17:09:30 +08:00
longpanda
8c18f91ac1 Fix the "plugson.tar.xz not found" error, when the path contains unicode characters. 2021-12-03 14:21:47 +08:00
29 changed files with 677 additions and 154 deletions

View File

@@ -21,7 +21,7 @@ body:
attributes:
label: Ventoy Version
description: What version of ventoy are you running?
placeholder: 1.0.61
placeholder: 1.0.63
validations:
required: true
- type: dropdown

View File

@@ -0,0 +1,82 @@
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
. /ventoy/hook/ventoy-hook-lib.sh
vtlog "####### $0 $* ########"
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
ventoy_os_install_dmsetup_by_fuse() {
vtlog "ventoy_os_install_dmsetup_by_fuse $*"
mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
mount -t squashfs $VTOY_PATH/mnt/iso/minios/01-core*.sb $VTOY_PATH/mnt/squashfs
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
vtlog "insmod $KoName"
insmod $KoName
umount $VTOY_PATH/mnt/squashfs
umount $VTOY_PATH/mnt/iso
umount $VTOY_PATH/mnt/fuse
}
ventoy_os_install_dmsetup() {
vtlog "ventoy_os_install_dmsetup"
if grep -q 'device-mapper' /proc/devices; then
vtlog "device-mapper module already loaded"
return;
fi
vtKerVer=$(uname -r)
if modprobe fuse 2>>$VTLOG; then
ventoy_os_install_dmsetup_by_fuse $1 $vtKerVer
fi
}
vtdiskname=$(get_ventoy_disk_name)
if [ "$vtdiskname" = "unknown" ]; then
vtlog "ventoy disk not found"
PATH=$VTPATH_OLD
exit 0
fi
if check_usb_disk_ready "$vtdiskname"; then
vtlog "check_usb_disk_ready ok"
else
vtlog "check_usb_disk_ready error"
PATH=$VTPATH_OLD
exit 0
fi
ventoy_os_install_dmsetup $vtdiskname
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
PATH=$VTPATH_OLD

View File

@@ -0,0 +1,24 @@
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
if [ -f /lib/livekitlib ] && $GREP -q 'debug_log.*find_data_try' /lib/livekitlib; then
$SED "/debug_log.*find_data_try/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/minios-disk.sh" -i /lib/livekitlib
else
$SED "/find_data/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/minios-disk.sh" -i /init
fi

View File

@@ -56,6 +56,10 @@ ventoy_get_debian_distro() {
echo 'slax'; return
fi
if $GREP -q 'minios/' /proc/cmdline; then
echo 'minios'; return
fi
if $GREP -q 'PVE ' /proc/version; then
echo 'pve'; return
fi

View File

@@ -157,9 +157,7 @@ function vt_check_compatible_pe {
#Check for PE without external tools
#set compatible if ISO file is less than 80MB
if [ $vt_chosen_size -gt 33554432 -a $vt_chosen_size -le 83886080 ]; then
set ventoy_compatible=YES
elif [ -e $1/WEPE/WEPE.INI ]; then
set ventoy_compatible=YES
set ventoy_compatible=YES
fi
return
@@ -168,6 +166,8 @@ function vt_check_compatible_pe {
function vt_check_compatible_linux {
if vt_str_begin "$vt_volume_id" "embootkit"; then
set ventoy_compatible=YES
elif [ -e "$1/casper/tinycore.gz" ]; then
set ventoy_compatible=YES
fi
return
@@ -236,6 +236,8 @@ function distro_specify_initrd_file {
vt_linux_specify_initrd_file /initrd.gz
elif [ -e (loop)/slax/boot/initrfs.img ]; then
vt_linux_specify_initrd_file /slax/boot/initrfs.img
elif [ -e (loop)/minios/boot/initrfs.img ]; then
vt_linux_specify_initrd_file /minios/boot/initrfs.img
elif [ -e (loop)/pmagic/initrd.img ]; then
vt_linux_specify_initrd_file /pmagic/initrd.img
elif [ -e (loop)/boot/initrd.xz ]; then
@@ -721,7 +723,9 @@ function uefi_linux_menu_func {
elif [ -e (loop)/syslinux/alt0/full.cz ]; then
vt_add_replace_file 0 "EFI\\BOOT\\full.cz"
set FirstTryBootFile='@EFI@BOOT@grubx64.efi'
elif vt_str_begin "$vt_volume_id" "SolusLive"; then
vt_add_replace_file 0 "initrd"
fi
@@ -2018,7 +2022,7 @@ function img_unsupport_menuentry {
#############################################################
#############################################################
set VENTOY_VERSION="1.0.62"
set VENTOY_VERSION="1.0.63"
#ACPI not compatible with Window7/8, so disable by default
set VTOY_PARAM_NO_ACPI=1

View File

@@ -0,0 +1,18 @@
h - この画面を表示する
F1 - 主記憶装置上に記憶域を作成する容量の小さなWinPE・LiveCD専用
F2 - 再起動・電源断
F3 - 表示形式を切り替える(一覧 ↔ 階層)
F4 - 手元の記憶装置にあるOSを起動する
F5 - 諸機能
F6 - Grub2の構成を読み込む
F7 - 操作形式を切り替えるGUI ↔ CUI
m - イメージの検査合計を計算する (md5/sha1/sha256/sha512)
Ctrl+w - WIMBOOTモード標準的なWindows ISO専用
Ctrl+r - Grub2モード一部のLinuxディストリビューション専用
Ctrl+i - 互換モード(開発用)
Ctrl+u - ISO efiドライバーを読み取る開発用非公式
この画面を閉じるにはESCを押してください

View File

@@ -291,8 +291,23 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
dd status=none conv=fsync if=/dev/zero of=$DISK bs=512 count=32 seek=$part2_start_sector
#format part1
vtinfo "Format partition 1 ..."
mkexfatfs -n "$VTNEW_LABEL" -s $cluster_sectors ${PART1}
wait_and_create_part ${PART1} ${PART2}
if [ -b ${PART1} ]; then
vtinfo "Format partition 1 ${PART1} ..."
mkexfatfs -n "$VTNEW_LABEL" -s $cluster_sectors ${PART1}
if [ $? -ne 0 ]; then
echo "mkexfatfs failed, now retry..."
mkexfatfs -n "$VTNEW_LABEL" -s $cluster_sectors ${PART1}
if [ $? -ne 0 ]; then
echo "######### mkexfatfs failed, exit ########"
exit 1
fi
else
echo "mkexfatfs success"
fi
else
vterr "${PART1} NOT exist"
fi
vtinfo "writing data to disk ..."
dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446

View File

@@ -206,6 +206,48 @@ get_disk_ventoy_version() {
ventoy_false
}
wait_and_create_part() {
vPART1=$1
vPART2=$2
echo 'Wait for partitions ...'
for i in 0 1 2 3 4 5 6 7 8 9; do
if ls -l $vPART1 2>/dev/null | grep -q '^b'; then
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
break
fi
else
echo "Wait for $vPART1/$vPART2 ..."
sleep 1
fi
done
if ls -l $vPART1 2>/dev/null | grep -q '^b'; then
echo "$vPART1 exist OK"
else
MajorMinor=$(sed "s/:/ /" /sys/class/block/${vPART1#/dev/}/dev)
echo "mknod -m 0660 $vPART1 b $MajorMinor ..."
mknod -m 0660 $vPART1 b $MajorMinor
fi
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
echo "$vPART2 exist OK"
else
MajorMinor=$(sed "s/:/ /" /sys/class/block/${vPART2#/dev/}/dev)
echo "mknod -m 0660 $vPART2 b $MajorMinor ..."
mknod -m 0660 $vPART2 b $MajorMinor
fi
if ls -l $vPART1 2>/dev/null | grep -q '^b'; then
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
echo "partition exist OK"
fi
else
echo "[FAIL] $vPART1/$vPART2 does not exist"
exit 1
fi
}
format_ventoy_disk_mbr() {
reserve_mb=$1
DISK=$2

View File

@@ -56,6 +56,63 @@
"STRXXX":""
},
{
"name":"Azerbaijani (Azərbaycanca)",
"FontFamily":"Courier New",
"FontSize":16,
"Author":"Xəyyam Qocayev",
"STR_ERROR":"Xəta",
"STR_WARNING":"Xəbərdarlıq",
"STR_INFO":"Məlumat",
"STR_INCORRECT_DIR":"Lütfən, başqa kataloqda başladın!",
"STR_INCORRECT_TREE_DIR":"Lütfən məni burada başlatmayın, buraxılmış quraşdırıcı paketini endirin və başqa yerdə işə salın.",
"STR_DEVICE":"Cihaz",
"STR_LOCAL_VER":"Ventoy paketdə",
"STR_DISK_VER":"Ventoy cihazda",
"STR_STATUS":"Vəziyyəti - hazır",
"STR_INSTALL":"Quraşdırın",
"STR_UPDATE":"Yeniləyin",
"STR_UPDATE_TIP":"Yeniləmək təhlükəsizdir, ISO faylı dəyişməz qalır, #@Davam edək?",
"STR_INSTALL_TIP":"Disk formatlanacaq və ondakı bütün məlumatlkar itiriləcəkdir.#@Davam edək?",
"STR_INSTALL_TIP2":"Disk formatlanacaq və ondakı bütün məlumatlkar itiriləcəkdir.#@Həqiqətən davam etmək istəyirsiniz?",
"STR_INSTALL_SUCCESS":"Təbriklər!#@Ventoy, uğurla cihazınıza quraşdırıldı.",
"STR_INSTALL_FAILED":"Ventoyun quraşdırılması zamanı xəta baş verdi. Cihazı təkrar qoşun və yenidən cəhd edin. Daha çox məlumat almaq üçün log.txt jurnal faylına baxın.",
"STR_UPDATE_SUCCESS":"Təbriklər!#@Ventoy, uğurla cihazınıza quraşdırıldı.",
"STR_UPDATE_FAILED":"Ventoy yenilənən zaman xəta ba. verdi. Cihazı yenidən qoşun və yenidən cəhd edin. Daha ətraflı məlumat üçün log.txt jurnal faylına baxın.",
"STR_WAIT_PROCESS":"Proses başladıldı, lütfən gözləyin...",
"STR_MENU_OPTION":"Seçimlər",
"STR_MENU_SECURE_BOOT":"Secure Boot dəstəyi",
"STR_MENU_PART_CFG":"Əlavə bölmə",
"STR_BTN_OK":"ОLDU",
"STR_BTN_CANCEL":"Ləğv edin",
"STR_PRESERVE_SPACE":"Diskin sonunda əlavə bölmə yaradın",
"STR_SPACE_VAL_INVALID":"Bölmənin ölçüsündə səhv var",
"STR_MENU_CLEAR":"Ventoy'u silin",
"STR_CLEAR_SUCCESS":"Ventoy, cihazdan uğurla silindi.",
"STR_CLEAR_FAILED":"Ventoyun silinməsi zamanı xəta baş verdi. Cihazı yenidən qoşun və təkrar cəhd edin. Daha ətraflı məlumat üçün log.txt jurnal faylına baxın.",
"STR_MENU_PART_STYLE":"Diskin bölünməsi qaydası",
"STR_DISK_2TB_MBR_ERROR":"2TB-dan artıq disklər üçün GPT seçin",
"STR_SHOW_ALL_DEV":"Bütün cihazları göstərmək",
"STR_PART_ALIGN_4KB":"4KB ölçüsündəki bölməni düzləndirmək",
"STR_WEB_COMMUNICATION_ERR":"Bağlantı xətası:",
"STR_WEB_REMOTE_ABNORMAL":"Bağlantı xətası: Uzaq bağlantı aktiv deyil",
"STR_WEB_REQUEST_TIMEOUT":"Bağlantı xətası: Gözləmə vaxtı başa çatdı",
"STR_WEB_SERVICE_UNAVAILABLE":"Bağlantı xətası: Xidmət əlçatmazdır",
"STR_WEB_TOKEN_MISMATCH":"Domen vəziyyəti yeniləndi. Sonra yenidən cəhd edin.",
"STR_WEB_SERVICE_BUSY":"Xidmət mə.ğuldur, sonra cəhd edin.",
"STR_MENU_VTSI_CREATE":"VTSI faylı yaradın",
"STR_VTSI_CREATE_TIP":"Bu dəfə Ventoy, cihaza quraşdırılmayacaq, yalnız VTSI faylı yaradılacaq #@Davam edək?",
"STR_VTSI_CREATE_SUCCESS":"VTSI faylı uğurla yaradıldı!#@Ventoy'u quraşdırmağı tamamlamaq üçün həmin faylı diskə Rufus(3.15+) istifadə edərək yaza bilərsiniz.",
"STR_VTSI_CREATE_FAILED":"VTSI faylının yaradlmasında xəta.",
"STR_MENU_PART_RESIZE":"Zərər verməyən quraşdırma",
"STR_PART_RESIZE_TIP":"Ventoy mümkün olduqca zərər vermədən quraşdırmağa cəhd edir. #@Davam edək?",
"STR_PART_RESIZE_SUCCESS":"Təbriklər!#@Zərərsiz Ventoy quraşdırması başa çatdı.",
"STR_PART_RESIZE_FAILED":"Zərərsiz quraşdırma baş tutmadı, daha ətraflı öyrənmək üçün log.txt jurnal faylına baxın.",
"STR_PART_RESIZE_UNSUPPORTED":"ZƏrərsiz Ventoy quraşdırması dayandırıldı, belə ki, bəzi şərtlər yerinə yetirilə bilməd. Daha ətraflı məlumat üçün.txt jurnal faylına baxın.",
"STRXXX":""
},
{
"name":"Korean (한국어)",
"FontFamily":"Courier New",
@@ -1558,9 +1615,9 @@
"STR_UPDATE_TIP":"Việc cập nhật Ventoy là an toàn, các tập tin ISO của bạn sẽ được giữ nguyên trạng.#@Bạn thật sự muốn tiếp tục?",
"STR_INSTALL_TIP":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục?",
"STR_INSTALL_TIP2":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục? (Xác nhận lần hai)",
"STR_INSTALL_SUCCESS":"Chúc mừng bạn !.#@Thiết bị đã được cài Ventoy thành công.",
"STR_INSTALL_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cài Ventoy thành công.",
"STR_INSTALL_FAILED":"Đã xảy ra lỗi trong quá trình cài đặt Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
"STR_UPDATE_SUCCESS":"Chúc mừng bạn !.#@Thiết bị đã được cập nhật Ventoy thành công.",
"STR_UPDATE_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cập nhật Ventoy thành công.",
"STR_UPDATE_FAILED":"Đã xảy ra lỗi trong quá trình cập nhật Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
"STR_WAIT_PROCESS":"Một luồng xử lý đang chạy, vui lòng chờ...",
"STR_MENU_OPTION":"Tùy chọn",
@@ -1571,7 +1628,7 @@
"STR_PRESERVE_SPACE":"Giữ lại phần dung lượng ở cuối thiết bị",
"STR_SPACE_VAL_INVALID":"Giá trị dung lượng giữ lại không hợp lệ.",
"STR_MENU_CLEAR":"Gỡ bỏ Ventoy",
"STR_CLEAR_SUCCESS":"Chúc mừng bạn !.#@Thiết bị đã được gỡ bỏ Ventoy thành công.",
"STR_CLEAR_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được gỡ bỏ Ventoy thành công.",
"STR_CLEAR_FAILED":"Đã xảy ra lỗi trong quá trình gỡ bỏ Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
"STR_MENU_PART_STYLE":"Kiểu phân vùng",
"STR_DISK_2TB_MBR_ERROR":"Thiết bị có dung lượng lớn hơn 2TB. Vui lòng chọn Kiểu phân vùng là GPT.",
@@ -1587,12 +1644,11 @@
"STR_VTSI_CREATE_TIP":"Lần này sẽ không ghi vào thiết bị, chỉ tạo một tệp VTSI#@Bạn muốn tiếp tục?",
"STR_VTSI_CREATE_SUCCESS":"Tạo tệp VTSI thành công!#@Để hoàn thành cài đặt Ventoy, bạn có thể dùng Rufus (3.15+) để ghi tệp này vào thiết bị.",
"STR_VTSI_CREATE_FAILED":"Tạo tệp VTSI đã gặp lỗi.",
"STR_MENU_PART_RESIZE":"Non-destructive Install",
"STR_PART_RESIZE_TIP":"Ventoy will try non-destructive installation if possible. #@Continue?",
"STR_PART_RESIZE_SUCCESS":"Congratulations!#@Ventoy non-destructive installation successfully finished.",
"STR_PART_RESIZE_FAILED":"Non-destructive installation failed, Check log.txt for details.",
"STR_PART_RESIZE_UNSUPPORTED":"Ventoy non-destructive installation stopped because some conditions cannot be met. Check log.txt for details.",
"STR_MENU_PART_RESIZE":"Cài đặt không phá hủy",
"STR_PART_RESIZE_TIP":"Ventoy sẽ thử cài đặt không phá hủy nếu có thể. #@Bạn muốn tiếp tục?",
"STR_PART_RESIZE_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cài Ventoy thành công theo cách cài đặt không phá hủy.",
"STR_PART_RESIZE_FAILED":"Đã xảy ra lỗi trong quá trình cài Ventoy theo cách cài đặt không phá hủy. Xem chi tiết ở tệp log.txt.",
"STR_PART_RESIZE_UNSUPPORTED":"Cài Ventoy theo cách cài đặt không phá hủy đã bị dừng lại vì chưa đúng điều kiện. Xem chi tiết ở tệp log.txt.",
"STRXXX":""
},
{
@@ -1701,11 +1757,11 @@
"STR_VTSI_CREATE_TIP":"Овој пат ништо нема да се запише на уредот туку само ќе се генерира VTSI датотека#@Продолжи?",
"STR_VTSI_CREATE_SUCCESS":"Успешно креирана VTSI датотека!#@Можете да го користите Rufus(3.15+) за да ја запишете на уредот како и да ја комплетирате инсталацијата на Ventoy.",
"STR_VTSI_CREATE_FAILED":"Креирањето на VTSI датотека е неуспешно.",
"STR_MENU_PART_RESIZE":"Non-destructive Install",
"STR_PART_RESIZE_TIP":"Ventoy will try non-destructive installation if possible. #@Continue?",
"STR_PART_RESIZE_SUCCESS":"Congratulations!#@Ventoy non-destructive installation successfully finished.",
"STR_PART_RESIZE_FAILED":"Non-destructive installation failed, Check log.txt for details.",
"STR_PART_RESIZE_UNSUPPORTED":"Ventoy non-destructive installation stopped because some conditions cannot be met. Check log.txt for details.",
"STR_MENU_PART_RESIZE":"Недеструктивна инсталација",
"STR_PART_RESIZE_TIP":"Ventoy ќе се обиде со недеструктивна инсталација доколку е возможно. #@Продолжи?",
"STR_PART_RESIZE_SUCCESS":"Честитки! Недеструктивната инсталација е успешно завршена.",
"STR_PART_RESIZE_FAILED":"Недеструктивната инсталација не успеа. Проверете го log.txt за детали.",
"STR_PART_RESIZE_UNSUPPORTED":"Недеструктивната инсталација на Ventoy е запрена бидејќи некои услови не се исполнети. Проверете го log.txt за детали.",
"STRXXX":""
},
@@ -2334,6 +2390,63 @@
"STR_PART_RESIZE_FAILED":"Non-destructive installation failed, Check log.txt for details.",
"STR_PART_RESIZE_UNSUPPORTED":"Ventoy non-destructive installation stopped because some conditions cannot be met. Check log.txt for details.",
"STRXXX":""
},
{
"name":"Galician (Galego)",
"FontFamily":"Courier New",
"FontSize":16,
"Author":"gbrea",
"STR_ERROR":"Erro",
"STR_WARNING":"Atención",
"STR_INFO":"Info",
"STR_INCORRECT_DIR":"Por favor, execute no directorio correto!",
"STR_INCORRECT_TREE_DIR":"Non me executes aquí, por favor transfire o pacote de instalación, e execute alí.",
"STR_DEVICE":"Dispositivo",
"STR_LOCAL_VER":"Ventoy na aplicación",
"STR_DISK_VER":"Ventoy no dispositivo",
"STR_STATUS":"Estado - PRONTO",
"STR_INSTALL":"Instalar",
"STR_UPDATE":"Actualizar",
"STR_UPDATE_TIP":"A operación de atualización é segura, os ficheiros ISO non serán alterados.#@Continuar?",
"STR_INSTALL_TIP":"O disco será formatado e perderanse todos os datos.#@Continuar?",
"STR_INSTALL_TIP2":"O disco será formatado e perderanse todos os datos.#@Continuar? (Confirmación)",
"STR_INSTALL_SUCCESS":"Parabéns!#@Ventoy foi instalado con suceso no dispositivo.",
"STR_INSTALL_FAILED":"Un erro ocorreu durante a instalación. Podes reconectar o dispositivo USB e tentar novamente. Verifica o ficheiro log.txt para máis detalles.",
"STR_UPDATE_SUCCESS":"Parabéns!#@Ventoy foi actualizado con suceso no dispositivo.",
"STR_UPDATE_FAILED":"Un erro ocorreu durante a actualización. Podes reconectar o dispositivo USB e tentar novamente. Verifica o ficheiro log.txt para máis detalles.",
"STR_WAIT_PROCESS":"Un proceso está en execución, por favor espera...",
"STR_MENU_OPTION":"Opción",
"STR_MENU_SECURE_BOOT":"Soporte de arranque seguro",
"STR_MENU_PART_CFG":"Configuración da Partición",
"STR_BTN_OK":"OK",
"STR_BTN_CANCEL":"Cancelar",
"STR_PRESERVE_SPACE":"Preservar algún espazo no final do disco",
"STR_SPACE_VAL_INVALID":"Valor inválido para o espazo reservado",
"STR_MENU_CLEAR":"Remover o Ventoy",
"STR_CLEAR_SUCCESS":"O Ventoy foi removido deste dispositivo con suceso.",
"STR_CLEAR_FAILED":"Un erro ocorreu ao remover o Ventoy do disco. Podes reconectar o dispositivo USB e tentar novamente. Verifica o ficheiro log.txt para máis detalles.",
"STR_MENU_PART_STYLE":"Estilo de Partición",
"STR_DISK_2TB_MBR_ERROR":"Por favor seleciona GPT para discos maiores que 2TB",
"STR_SHOW_ALL_DEV":"Mostrar todos os dispositivos",
"STR_PART_ALIGN_4KB":"Aliñar particións con 4KB",
"STR_WEB_COMMUNICATION_ERR":"Erro de comunicación:",
"STR_WEB_REMOTE_ABNORMAL":"Erro de comunicación: remoto anormal",
"STR_WEB_REQUEST_TIMEOUT":"Erro de comunicación: Tempo de espera esgotado",
"STR_WEB_SERVICE_UNAVAILABLE":"Erro de comunicación: Servizo non dispoñible",
"STR_WEB_TOKEN_MISMATCH":"Estado do daemon actualizado, por favor inténtao máis tarde.",
"STR_WEB_SERVICE_BUSY":"O servizo está ocupado, por favor inténtao máis tarde.",
"STR_MENU_VTSI_CREATE":"Xerar arquivo VTSI",
"STR_VTSI_CREATE_TIP":"Non será grabado no dispositivo, desta vez, apenas se xerará un ficheiro VTSI#@Continuar?",
"STR_VTSI_CREATE_SUCCESS":"Arquivo VTSI creado con suceso!#@Podes usar Rufus(3.15+) para grabalo no dispositivo e completar a instalación do Ventoy.",
"STR_VTSI_CREATE_FAILED":"Erro na creación do arquivo VTSI.",
"STR_MENU_PART_RESIZE":"Instalación non destructiva",
"STR_PART_RESIZE_TIP":"Ventoy tentará unha instalación non destructiva, se é posible.#@Continuar?",
"STR_PART_RESIZE_SUCCESS":"Parabéns!#@Instalación non destructiva do Ventoy concluida con suceso.",
"STR_PART_RESIZE_FAILED":"Erro na instalación non destructiva, revisa o arquivo log.txt para ver os detalles.",
"STR_PART_RESIZE_UNSUPPORTED":"Instalación non destructiva do Ventoy interrompida porque non se poden cumprir algunhas condicións. Revisa o arquivo log.txt para mais detalles.",
"STRXXX":""
}
]

View File

@@ -76,4 +76,3 @@ build_func "gcc -m32" '32' 'i386'
build_func "aarch64-linux-gnu-gcc" 'aa64' 'aarch64'
build_func "mips-linux-gnu-gcc -mips64r2 -mabi=64" 'm64e' 'mips64el'

View File

@@ -17,6 +17,10 @@ if [ -f ./www.tar.xz ]; then
rm -f ./www.tar.xz
fi
[ -f ./www/helplist ] && rm -f ./www/helplist
ls -1 ../INSTALL/grub/help/ | while read line; do
echo -n ${line:0:5} >> ./www/helplist
done
echo -n "$plugson_verion" > ./www/buildtime
tar cf www.tar www

View File

@@ -80,44 +80,6 @@ uint64_t ventoy_get_human_readable_gb(uint64_t SizeBytes)
return (uint64_t)GB;
}
int ventoy_read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen)
{
int FileSize;
FILE *fp = NULL;
void *Data = NULL;
#if defined(_MSC_VER) || defined(WIN32)
fopen_s(&fp, FileName, "rb");
#else
fp = fopen(FileName, "rb");
#endif
if (fp == NULL)
{
vlog("Failed to open file %s", FileName);
return 1;
}
fseek(fp, 0, SEEK_END);
FileSize = (int)ftell(fp);
Data = malloc(FileSize + ExtLen);
if (!Data)
{
fclose(fp);
return 1;
}
fseek(fp, 0, SEEK_SET);
fread(Data, 1, FileSize, fp);
fclose(fp);
*Bufer = Data;
*BufLen = FileSize;
return 0;
}
ventoy_file * ventoy_tar_find_file(const char *path)
{
int i;
@@ -211,6 +173,7 @@ int ventoy_www_init(void)
if (ventoy_decompress_tar(g_tar_buffer, TAR_BUF_MAX, &tarsize))
{
vlog("Failed to decompress tar\n");
return 1;
}

View File

@@ -292,6 +292,41 @@ void ventoy_stop_writeback_thread(void)
}
int ventoy_read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen)
{
int FileSize;
FILE *fp = NULL;
void *Data = NULL;
fp = fopen(FileName, "rb");
if (fp == NULL)
{
vlog("Failed to open file %s", FileName);
return 1;
}
fseek(fp, 0, SEEK_END);
FileSize = (int)ftell(fp);
Data = malloc(FileSize + ExtLen);
if (!Data)
{
fclose(fp);
return 1;
}
fseek(fp, 0, SEEK_SET);
fread(Data, 1, FileSize, fp);
fclose(fp);
*Bufer = Data;
*BufLen = FileSize;
return 0;
}
int ventoy_copy_file(const char *a, const char *b)
{
int len = 0;

View File

@@ -655,33 +655,6 @@ int CheckRuntimeEnvironment(char Letter, ventoy_disk *disk)
}
int ventoy_write_buf_to_file(const char *FileName, void *Bufer, int BufLen)
{
BOOL bRet;
DWORD dwBytes;
HANDLE hFile;
hFile = CreateFileA(FileName, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
vlog("CreateFile %s failed %u\n", FileName, LASTERR);
return 1;
}
bRet = WriteFile(hFile, Bufer, (DWORD)BufLen, &dwBytes, NULL);
if ((!bRet) || ((DWORD)BufLen != dwBytes))
{
vlog("Failed to write file <%s> %u err:%u", FileName, dwBytes, LASTERR);
CloseHandle(hFile);
return 1;
}
FlushFileBuffers(hFile);
CloseHandle(hFile);
return 0;
}
static volatile int g_thread_stop = 0;
static HANDLE g_writeback_thread;
@@ -735,6 +708,85 @@ void ventoy_stop_writeback_thread(void)
CHECK_CLOSE_HANDLE(g_writeback_event);
}
int ventoy_read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen)
{
int UTF8 = 0;
int Size = 0;
BOOL bRet;
DWORD dwBytes;
HANDLE hFile;
char *buffer = NULL;
WCHAR FilePathW[MAX_PATH];
UTF8 = IsUTF8Encode(FileName);
if (UTF8)
{
Utf8ToUtf16(FileName, FilePathW);
hFile = CreateFileW(FilePathW, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
}
else
{
hFile = CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
}
if (hFile == INVALID_HANDLE_VALUE)
{
vlog("Failed to open %s %u\n", FileName, LASTERR);
return 1;
}
Size = (int)GetFileSize(hFile, NULL);
buffer = malloc(Size + ExtLen);
if (!buffer)
{
vlog("Failed to alloc file buffer\n");
CloseHandle(hFile);
return 1;
}
bRet = ReadFile(hFile, buffer, (DWORD)Size, &dwBytes, NULL);
if ((!bRet) || ((DWORD)Size != dwBytes))
{
vlog("Failed to read file <%s> %u err:%u", FileName, dwBytes, LASTERR);
CloseHandle(hFile);
free(buffer);
return 1;
}
*Bufer = buffer;
*BufLen = Size;
CloseHandle(hFile);
return 0;
}
int ventoy_write_buf_to_file(const char *FileName, void *Bufer, int BufLen)
{
BOOL bRet;
DWORD dwBytes;
HANDLE hFile;
hFile = CreateFileA(FileName, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (hFile == INVALID_HANDLE_VALUE)
{
vlog("CreateFile %s failed %u\n", FileName, LASTERR);
return 1;
}
bRet = WriteFile(hFile, Bufer, (DWORD)BufLen, &dwBytes, NULL);
if ((!bRet) || ((DWORD)BufLen != dwBytes))
{
vlog("Failed to write file <%s> %u err:%u", FileName, dwBytes, LASTERR);
CloseHandle(hFile);
return 1;
}
FlushFileBuffers(hFile);
CloseHandle(hFile);
return 0;
}
int ventoy_copy_file(const char *a, const char *b)
{

View File

@@ -60,12 +60,7 @@ static const char *g_ventoy_kbd_layout[] =
NULL
};
static const char *g_ventoy_help_lang[] =
{
"de_DE", "en_US", "fr_FR", "hr_HR", "id_ID", "pt_PT", "sr_CY", "sr_SR", "tr_TR", "zh_CN",
NULL
};
static char g_ventoy_help_lang[MAX_LANGUAGE][8];
static char g_pub_path[2 * MAX_PATH];
static data_control g_data_control[bios_max + 1];
@@ -622,7 +617,7 @@ int ventoy_data_json_control(data_control *ctrl, char *buf, int buflen)
VTOY_JSON_FMT_KEY("help_list");
VTOY_JSON_FMT_ARY_BEGIN();
for (i = 0; g_ventoy_help_lang[i]; i++)
for (i = 0; g_ventoy_help_lang[i][0]; i++)
{
VTOY_JSON_FMT_ITEM(g_ventoy_help_lang[i]);
}
@@ -3839,7 +3834,7 @@ static int ventoy_parse_control(VTOY_JSON *json, void *p)
}
else if (strcmp(child->pcName, "VTOY_HELP_TXT_LANGUAGE") == 0)
{
for (i = 0; g_ventoy_help_lang[i]; i++)
for (i = 0; g_ventoy_help_lang[i][0]; i++)
{
if (strcmp(child->unData.pcStrVal, g_ventoy_help_lang[i]) == 0)
{
@@ -5051,11 +5046,41 @@ int ventoy_http_stop(void)
int ventoy_http_init(void)
{
int i = 0;
#ifdef VENTOY_SIM
char *Buffer = NULL;
int BufLen = 0;
ventoy_read_file_to_buf("www/helplist", 4, (void **)&Buffer, &BufLen);
if (Buffer)
{
for (i = 0; i < BufLen / 5; i++)
{
memcpy(g_ventoy_help_lang[i], Buffer + i * 5, 5);
g_ventoy_help_lang[i][5] = 0;
}
free(Buffer);
}
#else
ventoy_file *file;
file = ventoy_tar_find_file("www/helplist");
if (file)
{
for (i = 0; i < file->size / 5; i++)
{
memcpy(g_ventoy_help_lang[i], (char *)(file->addr) + i * 5, 5);
g_ventoy_help_lang[i][5] = 0;
}
}
#endif
if (!g_pub_json_buffer)
{
g_pub_json_buffer = malloc(JSON_BUF_MAX * 2);
g_pub_save_buffer = g_pub_json_buffer + JSON_BUF_MAX;
}
}
pthread_mutex_init(&g_api_mutex, NULL);
return 0;

View File

@@ -22,6 +22,7 @@
#include <civetweb.h>
#define MAX_LANGUAGE 128
#define L1 " "
#define L2 " "

View File

@@ -468,6 +468,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
{
int rc;
HANDLE hMutex;
WCHAR CurDir[MAX_PATH];
UNREFERENCED_PARAMETER(hPrevInstance);
@@ -489,7 +490,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
return 1;
}
GetCurrentDirectoryA(MAX_PATH, g_cur_dir);
GetCurrentDirectoryW(MAX_PATH, CurDir);
WideCharToMultiByte(CP_UTF8, 0, CurDir, -1, g_cur_dir, MAX_PATH, NULL, 0);
sprintf_s(g_ventoy_dir, sizeof(g_ventoy_dir), "%s", g_cur_dir);
sprintf_s(g_log_file, sizeof(g_log_file), "%s\\%s", g_cur_dir, LOG_FILE);
ventoy_log_init();

View File

@@ -1 +1 @@
20211201 20:08:18
20211203 17:44:10

1
Plugson/www/helplist Normal file
View File

@@ -0,0 +1 @@
de_DEen_USfr_FRhr_HRid_IDja_JPpt_PTsr_CYsr_SRtr_TRzh_CN

View File

@@ -723,7 +723,7 @@
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b id="plugson_build_date">20211201 20:08:18</b>
<b id="plugson_build_date">20211203 17:44:10</b>
</div>
<strong><a href="https://www.ventoy.net" target="_blank">https://www.ventoy.net</a></strong>
</footer>

View File

@@ -169,11 +169,6 @@
}
}
if (extra.indexOf("\"") >= 0) {
Message.error(g_current_language === 'en' ? "Class can not contains double quotes." : "Class 不能包含双引号。");
return;
}
callVtoy({
method : 'class_add',
index: current_tab_index,
@@ -188,6 +183,11 @@
}
function OnAddKeyClass(key, value) {
if (!ventoy_check_file_name_char(key)) {
Message.error(g_current_language === 'en' ? "As part of file name, key can not include invalid characters!" : "作为文件名的一部分key 中不能包含特殊的符号!");
return;
}
AddClassEntry(key, 0, 1, value);
}

View File

@@ -1,3 +1,16 @@
function ventoy_check_file_name_char(path) {
for (var i = 0; i < path.length; i++) {
var cc = path[i];
if (cc === '/' || cc === '\\' || cc === '*' || cc === '?' || cc === '"' || cc === '<' || cc === '>' || cc === '|')
{
return false;
}
}
return true;
}
(function(factory) {
if (typeof define === "function" && define.amd) {
define(["jquery", "../jquery.validate"], factory);
@@ -62,6 +75,14 @@
return true;
}, 'Can not contain double quotes');
$.validator.addMethod('filenamepart', function(value, element, params) {
if (this.optional(element)) {
return true;
}
return ventoy_check_file_name_char(value);
}, 'Invalid characters');
$.validator.addMethod('printascii', function(value, element, params) {

View File

@@ -429,10 +429,10 @@ var g_vtoy_cur_language_en =
"STR_PATH_TOO_LONG": "The path exceeds the maximum supported length, please check!",
"STR_INPUT_TOO_LONG": "The string exceeds the maximum supported length, please check!",
"STR_INVALID_FILE_PATH": "Invalid full file path, please check!",
"STR_INVALID_FILE_PATH1": "The 1st file path is invalid!",
"STR_INVALID_FILE_PATH2": "The 2nd file path is invalid!",
"STR_INVALID_NEW_FILE_PATH": "The full file path of new is invalid, please check!",
"STR_INVALID_FILE_PATH": "Invalid or nonexist full file path, please check!",
"STR_INVALID_FILE_PATH1": "The 1st file path is invalid or nonexist!",
"STR_INVALID_FILE_PATH2": "The 2nd file path is invalid or nonexist!",
"STR_INVALID_NEW_FILE_PATH": "The full file path of new is invalid or nonexist, please check!",
"STR_INVALID_DIR_PATH": "Invalid directory path, please check!",
"STR_INVALID_NUMBER": "Please input valid non-negative integer!",
"STR_INVALID_AUTOSEL": "autosel exceeds the length of the list!",
@@ -446,7 +446,7 @@ var g_vtoy_cur_language_en =
"STR_SET_TIP_FOR_DIR": "Set Menu Tip For Directory",
"STR_SET_INJECTION_FOR_FILE": "[image] Set injection for a file",
"STR_SET_INJECTION_FOR_DIR": "[parent] Set the same injection for all the files under a directory.",
"STR_INVALID_ARCHIVE_PATH": "Invalid archive file path, please check!",
"STR_INVALID_ARCHIVE_PATH": "Invalid or nonexist archive file path, please check!",
"STR_SET_PWD_FOR_FILE": "[file] Set password for a file.",
"STR_SET_PWD_FOR_DIR": "[parent] Set the same password for all the files under a directory.",
"STR_SET_AUTO_INSTALL_FOR_FILE": "[image] Set auto install template for a file",
@@ -563,10 +563,10 @@ var g_vtoy_cur_language_cn =
"STR_PATH_TOO_LONG": "路径超过最大支持长度,请检查!",
"STR_INPUT_TOO_LONG": "字符串超过最大支持长度,请检查!",
"STR_INVALID_FILE_PATH": "文件路径不合法,请检查!",
"STR_INVALID_FILE_PATH1": "第1个文件路径不合法请检查",
"STR_INVALID_FILE_PATH2": "第2个文件路径不合法请检查",
"STR_INVALID_NEW_FILE_PATH": "new 文件路径不合法,请检查!",
"STR_INVALID_FILE_PATH": "文件路径不合法或不存在,请检查!",
"STR_INVALID_FILE_PATH1": "第1个文件路径不合法或不存在,请检查!",
"STR_INVALID_FILE_PATH2": "第2个文件路径不合法或不存在,请检查!",
"STR_INVALID_NEW_FILE_PATH": "new 文件路径不合法或不存在,请检查!",
"STR_INVALID_DIR_PATH": "文件夹路径不合法,请检查!",
"STR_INVALID_NUMBER": "请输入合法的非负整数!",
"STR_INVALID_AUTOSEL": "autosel 的值超过了列表实际长度!",
@@ -580,7 +580,7 @@ var g_vtoy_cur_language_cn =
"STR_SET_TIP_FOR_DIR": "为目录设置菜单提示信息",
"STR_SET_INJECTION_FOR_FILE": "[image] 为某一个文件设置注入",
"STR_SET_INJECTION_FOR_DIR": "[parent] 为某个目录下的所有文件设置相同的注入",
"STR_INVALID_ARCHIVE_PATH": "Archive 文件路径非法,请检查!",
"STR_INVALID_ARCHIVE_PATH": "Archive 文件路径非法或不存在,请检查!",
"STR_SET_PWD_FOR_FILE": "[file] 为指定文件设置密码",
"STR_SET_PWD_FOR_DIR": "[parent] 为某个目录下的所有文件设置相同的密码",
"STR_SET_AUTO_INSTALL_FOR_FILE": "[image] 为某个镜像文件设置自动安装脚本",
@@ -896,6 +896,7 @@ function VtoyCommonChangeLanguage(newlang) {
utfmaxlen: $.validator.format("The string exceeds the maximum supported length"),
start_slash: $.validator.format("Must start with /"),
noquotes: $.validator.format("Can not include double quotes"),
filenamepart:$.validator.format("As part of file name, can not include invalid characters"),
printascii: $.validator.format("Can not include non-ascii characters.")
});
@@ -941,6 +942,7 @@ function VtoyCommonChangeLanguage(newlang) {
utfmaxlen: $.validator.format("超过最大长度"),
start_slash: $.validator.format("必须以反斜杠 / 开头"),
noquotes: $.validator.format("不能包含双引号"),
filenamepart:$.validator.format("作为文件名的一部分,不能包含特殊的符号"),
printascii: $.validator.format("不能包含中文或其他非 ascii 字符。")
});
@@ -1102,7 +1104,8 @@ var g_set_key_validator = $("#SetKeyForm").validate({
},
SetKeyValue : {
required: true,
utfmaxlen: true
utfmaxlen: true,
filenamepart: true
}
},

View File

@@ -25,7 +25,7 @@ Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, WinPE
**Linux**
Debian, Ubuntu, CentOS, RHEL, Deepin, Fedora, Rocky Linux, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, openEuler, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Ubuntu Kylin, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Robolinux, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Refracta, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, ......
Debian, Ubuntu, CentOS, RHEL, Deepin, Fedora, Rocky Linux, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, openEuler, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, MiniOS, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Ubuntu Kylin, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Robolinux, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Refracta, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, ......
**Unix**
DragonFly FreeBSD pfSense GhostBSD FreeNAS TrueNAS XigmaNAS FuryBSD OPNsense HardenedBSD MidnightBSD ClonOS EmergencyBootKit

View File

@@ -1,38 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="amd64"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="arm"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="arm64"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>