mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-16 17:11:13 +00:00
Compare commits
96 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
67d7091255 | ||
|
2ab1474694 | ||
|
aa7a77df5a | ||
|
4790dedbb1 | ||
|
de085ba086 | ||
|
bb94ec6d6f | ||
|
b9892660b5 | ||
|
0e9d34422a | ||
|
c7c9c62ec7 | ||
|
9e13955af1 | ||
|
2dafe75509 | ||
|
6fbc08cfcb | ||
|
6034b25cba | ||
|
c5fd64d21c | ||
|
32fac72b5b | ||
|
022322c8fa | ||
|
96f11252d9 | ||
|
004ad27e0d | ||
|
9a8dc42d93 | ||
|
6166a813ea | ||
|
786a9ec678 | ||
|
0600576c78 | ||
|
72b722c86c | ||
|
bea5607ea5 | ||
|
b3c2bcf58f | ||
|
4e8d8b2e19 | ||
|
60d88cb7b1 | ||
|
f7e6bbc70c | ||
|
ee994a0569 | ||
|
966ed21de7 | ||
|
ff7ee9c10e | ||
|
f43461a16c | ||
|
377e3fb7bc | ||
|
f62bd1be14 | ||
|
b11c38779d | ||
|
f202542c62 | ||
|
279491a36a | ||
|
cb209f9b9e | ||
|
b7b2f6a5c1 | ||
|
3967fb5fb5 | ||
|
a2ad95792d | ||
|
791308d2ce | ||
|
0ffb1b15ef | ||
|
d6e1730ca0 | ||
|
4d55f505f9 | ||
|
30a61ac5c4 | ||
|
9b79831516 | ||
|
af2d6bc247 | ||
|
d8ae740427 | ||
|
b685157ae3 | ||
|
3f6ddb6fb6 | ||
|
b8838b305d | ||
|
00de8b932d | ||
|
1e49dbe957 | ||
|
580416facc | ||
|
75cf728fa9 | ||
|
8723aeb4cc | ||
|
dc9a99bb20 | ||
|
a40456d9d2 | ||
|
bdab55e8aa | ||
|
1b2483ec14 | ||
|
c16e76130b | ||
|
d672af4819 | ||
|
712f10e86a | ||
|
2be340d2e8 | ||
|
b77ef718b4 | ||
|
72f5710b88 | ||
|
ee7da60d88 | ||
|
44fb9f4564 | ||
|
3f65f0ef03 | ||
|
4faa5e4344 | ||
|
c7693d4ecd | ||
|
4527e1db79 | ||
|
757cacf274 | ||
|
39703cabb7 | ||
|
854d17a4e9 | ||
|
a326b13fc3 | ||
|
3ff1867a2a | ||
|
7f63a1c327 | ||
|
d617985093 | ||
|
605da1ba94 | ||
|
c8dc36a5c3 | ||
|
689f7df902 | ||
|
a9d53e7448 | ||
|
46061bcd41 | ||
|
01b0de7811 | ||
|
2fee243a56 | ||
|
d0e10f8e48 | ||
|
7ff243f9bb | ||
|
f8811a4656 | ||
|
0ce90ad9b9 | ||
|
5bfddae81d | ||
|
2991f097fb | ||
|
986835338d | ||
|
f2562fecb9 | ||
|
529541f218 |
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
@@ -21,7 +21,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Ventoy Version
|
label: Ventoy Version
|
||||||
description: What version of ventoy are you running?
|
description: What version of ventoy are you running?
|
||||||
placeholder: 1.0.91
|
placeholder: 1.0.96
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
|
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@@ -13,25 +13,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Run docker-compose up
|
- name: Run docker compose up
|
||||||
run: docker-compose up
|
run: docker compose up
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-windows
|
name: ventoy-windows
|
||||||
path: INSTALL/ventoy-*windows*
|
path: INSTALL/ventoy-*windows*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-linux
|
name: ventoy-linux
|
||||||
path: INSTALL/ventoy-*linux*
|
path: INSTALL/ventoy-*linux*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-livecd
|
name: ventoy-livecd
|
||||||
path: INSTALL/ventoy-*livecd*
|
path: INSTALL/ventoy-*livecd*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: SHA256SUM
|
name: SHA256SUM
|
||||||
path: INSTALL/sha256.txt
|
path: INSTALL/sha256.txt
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: xxx-build-log
|
name: xxx-build-log
|
||||||
path: DOC/build.log
|
path: DOC/build.log
|
||||||
|
193
BLOB_List.md
Normal file
193
BLOB_List.md
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>BLOB</th>
|
||||||
|
<th>File Source</th>
|
||||||
|
<th>Desc</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod32</td> <td rowspan=5>build</td> <td rowspan=5>Build Instructions:<br/> ./BUSYBOX/chmod/build.sh</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod64</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod64_musl</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmodaa64</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmodm64e</td> </tr>
|
||||||
|
<tr> <td>./cryptsetup/veritysetup32</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/> ./cryptsetup/cryptsetup-build.txt</td> </tr>
|
||||||
|
<tr> <td>./cryptsetup/veritysetup64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetup32</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/> ./DMSETUP/build.txt</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetup64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetupaa64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetupm64e</td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/> ./FUSEISO/build.sh<br/>./FUSEISO/build_aarch64.sh<br/>./FUSEISO/build_libfuse.sh<br/>./FUSEISO/build_libfuse_aarch64.sh </td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_64</td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_aa64</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/a64</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/vtchmodaa64</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmodaa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/xzminidecaa64</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.17</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/tool/lz4cataa64</td> <td>build</td> <td>Same with ./LZIP/lz4cataa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/tool/zstdcataa64</td> <td>build</td> <td>Same with ./ZSTD/zstdcataa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/m64</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/vtchmodm64e</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmodm64e<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/xzminidecm64e</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.18</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/tool/lz4catm64e</td> <td>build</td> <td>Same with ./LZIP/lz4catm64e<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/64h</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/ash</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.4</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod32</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod32<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod64</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod64_musl</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod64_musl<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec32</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.15</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec64</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.16</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec64_musl</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.16</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/ar</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.2</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/inotifyd</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.3</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/lz4cat</td> <td>upstream</td> <td>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.1</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/lz4cat64</td> <td>build</td> <td>Build Instructions:<br/>./LZIP/buildlz4.txt</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/zstdcat</td> <td>build</td> <td>Same with ./ZSTD/zstdcat<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/zstdcat64</td> <td>build</td> <td>Same with ./ZSTD/zstdcat64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTAA64.EFI</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/> ./DOC/BuildVentoyFromSource.txt 4.1-Build grub2</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTMIPS.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubia32_real.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubx64_real.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grub.efi</td> <td rowspan=6>upstream</td> <td rowspan=6>https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk </td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTIA32.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTX64.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/mmia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/MokManager.efi</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/ash</td> <td rowspan=12>build</td> <td rowspan=12>Build Instructions:<br/>./DOC/BUSYBOX/build.txt</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Ventoy2Disk.gtk3</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./LinuxGUI/build_gtk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.gtk2</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.gtk2</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Ventoy2Disk.qt5</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build_qt.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Plugson</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Plugson/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/V2DServer</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=8>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/vlnk</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Vlnk/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/vtoycli</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./vtoycli/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.cpl</td> <td rowspan=6>upstream</td> <td rowspan=6>Download from imdisk project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.8</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.sys</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.cpl</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.sys</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_aa64.efi</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.17</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_aa64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.aarch64</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build_gtk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.i386</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.mips64el</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.x86_64</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk.exe</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Ventoy2Disk/Ventoy2Disk.sln</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_ARM.exe</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_ARM64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_X64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyjump32.exe</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./vtoyjump/vtoyjump.sln</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyjump64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_aa64.efi</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./EDK2/buildedk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_aa64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ipxe.krn</td> <td>build</td> <td>Build Instructions:<br/>./IPXE/buildipxe.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/memdisk</td> <td>upstream</td> <td>Download from syslinux project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.9</td> </tr>
|
||||||
|
<tr> <td>./LiveCD/ISO/EFI/boot/vmlinuz64</td> <td>upstream</td> <td>Download from TinyLinux website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.14</td> </tr>
|
||||||
|
<tr> <td>./LiveCDGUI/EXT/busybox-x86_64</td> <td>build</td> <td>Same with ./IMG/cpio_x86/ventoy/busybox/busybox64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./LiveCDGUI/GRUB/bootx64.efi</td> <td rowspan=2>build</td> <td rowspan=2>./DOC/BuildVentoyFromSource.txt 4.1-Build grub2</td> </tr>
|
||||||
|
<tr> <td>./LiveCD/GRUB/bootx64.efi</td>
|
||||||
|
<tr> <td>./LZIP/lunzip32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.19</td> </tr>
|
||||||
|
<tr> <td>./LZIP/lunzip64</td>
|
||||||
|
<tr> <td>./LZIP/lunzipaa64</td>
|
||||||
|
<tr> <td>./LZIP/lz4cat64</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./LZIP/buildlz4.txt</td> </tr>
|
||||||
|
<tr> <td>./LZIP/lz4cataa64</td>
|
||||||
|
<tr> <td>./LZIP/lz4catm64e</td>
|
||||||
|
<tr> <td>./Plugson/vs/VentoyPlugson/Release/VentoyPlugson.exe</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./Plugson/vs/VentoyPlugson/VentoyPlugson.sln</td> </tr>
|
||||||
|
<tr> <td>./Plugson/vs/VentoyPlugson/x64/Release/VentoyPlugson_X64.exe</td>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./SQUASHFS/build.sh</td> </tr>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_64</td>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_aa64</td>
|
||||||
|
<tr> <td>./Unix/ventoy_unix/DragonFly/sbin/dmsetup</td> <td>upstream</td> <td>Get from DragonFly ISO.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.13</td> </tr>
|
||||||
|
<tr> <td>./Unix/ventoy_unix/DragonFly/sbin/init</td> <td>build</td> <td>Build Instructions:<br/>./Unix/ventoy_unix_src/DragonFly/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./VBLADE/vblade-master/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_64</td>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_aa64</td>
|
||||||
|
<tr> <td>./Vlnk/vs/VentoyVlnk/Release/VentoyVlnk.exe</td> <td>build</td> <td>Build Instructions:<br/>./Vlnk/vs/VentoyVlnk/VentoyVlnk.sln</td> </tr>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_32</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./VtoyTool/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_aa64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_m64e</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/01/vtoytool_64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/02/vtoytool_64</td>
|
||||||
|
<tr> <td>./ZSTD/zstdcat</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./ZSTD/build.txt</td> </tr>
|
||||||
|
<tr> <td>./ZSTD/zstdcat64</td>
|
||||||
|
<tr> <td>./ZSTD/zstdcataa64</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/busybox32</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./BUSYBOX/build.txt full busybox</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/busybox64</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzcat32_musl</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzcat64_musl</td>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/busyboxaa64</td>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/busyboxm64e</td>
|
||||||
|
<tr> <td>ISNTALL/ventoy/7z/64/7za.exe</td> <td rowspan=2>upstream</td> <td>Download from 7z project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.12</td> </tr>
|
||||||
|
<tr> <td>ISNTALL/ventoy/7z/32/7za.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/wimboot.i386.efi</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./wimboot/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/wimboot.x86_64</td>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/ClonOS/geom_ventoy_ko/13.x/64/geom_ventoy.ko</td> <td rowspan=18>build</td> <td rowspan=18>Build Instructions:<br/>./Unix/BuildUnixKmod.txt</td> </tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/10.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/10.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/11.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/11.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/12.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/12.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/14.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/14.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/9.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/9.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/11.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/11.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/2.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/2.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/pfSense/geom_ventoy_ko/14.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
@@ -53,6 +53,12 @@ typedef struct ko_param
|
|||||||
unsigned long sym_put_size;
|
unsigned long sym_put_size;
|
||||||
unsigned long kv_major;
|
unsigned long kv_major;
|
||||||
unsigned long ibt;
|
unsigned long ibt;
|
||||||
|
unsigned long kv_minor;
|
||||||
|
unsigned long blkdev_get_addr;
|
||||||
|
unsigned long blkdev_put_addr;
|
||||||
|
unsigned long bdev_open_addr;
|
||||||
|
unsigned long kv_subminor;
|
||||||
|
unsigned long bdev_file_open_addr;
|
||||||
unsigned long padding[1];
|
unsigned long padding[1];
|
||||||
}ko_param;
|
}ko_param;
|
||||||
|
|
||||||
@@ -79,14 +85,24 @@ static volatile ko_param g_ko_param =
|
|||||||
#define CODE_MATCH2(code, i) \
|
#define CODE_MATCH2(code, i) \
|
||||||
(code[i] == 0x0C && code[i + 1] == 0x80 && code[i + 2] == 0x89 && code[i + 3] == 0xC6)
|
(code[i] == 0x0C && code[i + 1] == 0x80 && code[i + 2] == 0x89 && code[i + 3] == 0xC6)
|
||||||
|
|
||||||
|
#define PATCH_OP_POS3 4
|
||||||
|
#define CODE_MATCH3(code, i) \
|
||||||
|
(code[i] == 0x44 && code[i + 1] == 0x89 && code[i + 2] == 0xe8 && code[i + 3] == 0x0c && code[i + 4] == 0x80)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#elif defined(CONFIG_X86_32)
|
#elif defined(CONFIG_X86_32)
|
||||||
#define PATCH_OP_POS1 2
|
#define PATCH_OP_POS1 2
|
||||||
#define CODE_MATCH1(code, i) \
|
#define CODE_MATCH1(code, i) \
|
||||||
(code[i] == 0x80 && code[i + 1] == 0xca && code[i + 2] == 0x80 && code[i + 3] == 0xe8)
|
(code[i] == 0x80 && code[i + 1] == 0xca && code[i + 2] == 0x80 && code[i + 3] == 0xe8)
|
||||||
|
|
||||||
#define PATCH_OP_POS2 2
|
#define PATCH_OP_POS2 PATCH_OP_POS1
|
||||||
#define CODE_MATCH2(code, i) \
|
#define CODE_MATCH2 CODE_MATCH1
|
||||||
(code[i] == 0x80 && code[i + 1] == 0xca && code[i + 2] == 0x80 && code[i + 3] == 0xe8)
|
#define PATCH_OP_POS3 PATCH_OP_POS1
|
||||||
|
#define CODE_MATCH3 CODE_MATCH1
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "unsupported arch"
|
#error "unsupported arch"
|
||||||
@@ -140,10 +156,31 @@ static volatile ko_param g_ko_param =
|
|||||||
|
|
||||||
#define vdebug(fmt, args...) if(kprintf) kprintf(KERN_ERR fmt, ##args)
|
#define vdebug(fmt, args...) if(kprintf) kprintf(KERN_ERR fmt, ##args)
|
||||||
|
|
||||||
|
static unsigned int g_claim_ptr = 0;
|
||||||
static unsigned char *g_get_patch[MAX_PATCH] = { NULL };
|
static unsigned char *g_get_patch[MAX_PATCH] = { NULL };
|
||||||
static unsigned char *g_put_patch[MAX_PATCH] = { NULL };
|
static unsigned char *g_put_patch[MAX_PATCH] = { NULL };
|
||||||
|
|
||||||
static void notrace dmpatch_restore_code(unsigned char *opCode)
|
static int notrace dmpatch_kv_above(unsigned long Major, unsigned long Minor, unsigned long SubMinor)
|
||||||
|
{
|
||||||
|
if (g_ko_param.kv_major != Major)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_major > Major) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_ko_param.kv_minor != Minor)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_minor > Minor) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_ko_param.kv_subminor != SubMinor)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_subminor > SubMinor) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void notrace dmpatch_restore_code(int bytes, unsigned char *opCode, unsigned int code)
|
||||||
{
|
{
|
||||||
unsigned long align;
|
unsigned long align;
|
||||||
|
|
||||||
@@ -151,7 +188,14 @@ static void notrace dmpatch_restore_code(unsigned char *opCode)
|
|||||||
{
|
{
|
||||||
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
set_mem_rw(align, 1);
|
set_mem_rw(align, 1);
|
||||||
*opCode = 0x80;
|
if (bytes == 1)
|
||||||
|
{
|
||||||
|
*opCode = (unsigned char)code;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(unsigned int *)opCode = code;
|
||||||
|
}
|
||||||
set_mem_ro(align, 1);
|
set_mem_ro(align, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +217,7 @@ static int notrace dmpatch_replace_code
|
|||||||
|
|
||||||
vdebug("patch for %s style[%d] 0x%lx %d\n", desc, style, addr, (int)size);
|
vdebug("patch for %s style[%d] 0x%lx %d\n", desc, style, addr, (int)size);
|
||||||
|
|
||||||
for (i = 0; i < (int)size - 4; i++)
|
for (i = 0; i < (int)size - 8; i++)
|
||||||
{
|
{
|
||||||
if (style == 1)
|
if (style == 1)
|
||||||
{
|
{
|
||||||
@@ -183,7 +227,7 @@ static int notrace dmpatch_replace_code
|
|||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (style == 2)
|
||||||
{
|
{
|
||||||
if (CODE_MATCH2(opCode, i) && cnt < MAX_PATCH)
|
if (CODE_MATCH2(opCode, i) && cnt < MAX_PATCH)
|
||||||
{
|
{
|
||||||
@@ -191,7 +235,19 @@ static int notrace dmpatch_replace_code
|
|||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (style == 3)
|
||||||
|
{
|
||||||
|
if (CODE_MATCH3(opCode, i) && cnt < MAX_PATCH)
|
||||||
|
{
|
||||||
|
patch[cnt] = opCode + i + PATCH_OP_POS3;
|
||||||
|
cnt++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (cnt != expect || cnt >= MAX_PATCH)
|
if (cnt != expect || cnt >= MAX_PATCH)
|
||||||
{
|
{
|
||||||
@@ -213,6 +269,148 @@ static int notrace dmpatch_replace_code
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned long notrace dmpatch_find_call_offset(unsigned long addr, unsigned long size, unsigned long func)
|
||||||
|
{
|
||||||
|
unsigned long i = 0;
|
||||||
|
unsigned long dest;
|
||||||
|
unsigned char *opCode = NULL;
|
||||||
|
unsigned char aucOffset[8] = { 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||||
|
|
||||||
|
opCode = (unsigned char *)addr;
|
||||||
|
|
||||||
|
for (i = 0; i + 4 < size; i++)
|
||||||
|
{
|
||||||
|
if (opCode[i] == 0xE8)
|
||||||
|
{
|
||||||
|
aucOffset[0] = opCode[i + 1];
|
||||||
|
aucOffset[1] = opCode[i + 2];
|
||||||
|
aucOffset[2] = opCode[i + 3];
|
||||||
|
aucOffset[3] = opCode[i + 4];
|
||||||
|
|
||||||
|
dest = addr + i + 5 + *(unsigned long *)aucOffset;
|
||||||
|
if (dest == func)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int notrace dmpatch_patch_claim_ptr(void)
|
||||||
|
{
|
||||||
|
unsigned long i = 0;
|
||||||
|
unsigned long t = 0;
|
||||||
|
unsigned long offset1 = 0;
|
||||||
|
unsigned long offset2 = 0;
|
||||||
|
unsigned long align = 0;
|
||||||
|
unsigned char *opCode = NULL;
|
||||||
|
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
vdebug("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
|
||||||
|
opCode[i + 0], opCode[i + 1], opCode[i + 2], opCode[i + 3],
|
||||||
|
opCode[i + 4], opCode[i + 5], opCode[i + 6], opCode[i + 7],
|
||||||
|
opCode[i + 8], opCode[i + 9], opCode[i + 10], opCode[i + 11],
|
||||||
|
opCode[i + 12], opCode[i + 13], opCode[i + 14], opCode[i + 15]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 7, 0)) /* >= 6.7 kernel */
|
||||||
|
{
|
||||||
|
vdebug("Get addr: 0x%lx %lu open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
||||||
|
if (offset1 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call bdev_open_addr Not found\n");
|
||||||
|
|
||||||
|
vdebug("Get addr: 0x%lx %lu file_open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
||||||
|
if (offset1 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call bdev_file_open_addr Not found\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vdebug("Get addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
||||||
|
vdebug("Put addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
||||||
|
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
||||||
|
offset2 = dmpatch_find_call_offset(g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
||||||
|
if (offset1 == 0 || offset2 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call blkdev_get or blkdev_put Not found, %lu %lu\n", offset1, offset2);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
vdebug("call addr1:0x%lx call addr2:0x%lx\n",
|
||||||
|
g_ko_param.sym_get_addr + offset1,
|
||||||
|
g_ko_param.sym_put_addr + offset2);
|
||||||
|
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
||||||
|
for (i = offset1 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
||||||
|
{
|
||||||
|
/* rdx */
|
||||||
|
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc2)
|
||||||
|
{
|
||||||
|
g_claim_ptr = *(unsigned int *)(opCode + i + 3);
|
||||||
|
g_get_patch[0] = opCode + i + 3;
|
||||||
|
vdebug("claim_ptr(%08X) found at get addr 0x%lx\n", g_claim_ptr, g_ko_param.sym_get_addr + i + 3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_claim_ptr == 0)
|
||||||
|
{
|
||||||
|
vdebug("Claim_ptr not found in get\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
align = (unsigned long)g_get_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
|
set_mem_rw(align, 1);
|
||||||
|
*(unsigned int *)(g_get_patch[0]) = 0;
|
||||||
|
set_mem_ro(align, 1);
|
||||||
|
|
||||||
|
|
||||||
|
if (offset2 > 0)
|
||||||
|
{
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_put_addr;
|
||||||
|
for (i = offset2 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
||||||
|
{
|
||||||
|
/* rsi */
|
||||||
|
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc6)
|
||||||
|
{
|
||||||
|
if (*(unsigned int *)(opCode + i + 3) == g_claim_ptr)
|
||||||
|
{
|
||||||
|
vdebug("claim_ptr found at put addr 0x%lx\n", g_ko_param.sym_put_addr + i + 3);
|
||||||
|
g_put_patch[0] = opCode + i + 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_put_patch[0] == 0)
|
||||||
|
{
|
||||||
|
vdebug("Claim_ptr not found in put\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
align = (unsigned long)g_put_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
|
set_mem_rw(align, 1);
|
||||||
|
*(unsigned int *)(g_put_patch[0]) = 0;
|
||||||
|
set_mem_ro(align, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef VTOY_IBT
|
#ifdef VTOY_IBT
|
||||||
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
||||||
{
|
{
|
||||||
@@ -234,7 +432,7 @@ static __always_inline void dmpatch_wrmsr(unsigned int msr, u32 low, u32 high)
|
|||||||
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 dmpatch_ibt_save(void)
|
static u64 notrace dmpatch_ibt_save(void)
|
||||||
{
|
{
|
||||||
u64 msr = 0;
|
u64 msr = 0;
|
||||||
u64 val = 0;
|
u64 val = 0;
|
||||||
@@ -246,7 +444,7 @@ static u64 dmpatch_ibt_save(void)
|
|||||||
return msr;
|
return msr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmpatch_ibt_restore(u64 save)
|
static void notrace dmpatch_ibt_restore(u64 save)
|
||||||
{
|
{
|
||||||
u64 msr;
|
u64 msr;
|
||||||
|
|
||||||
@@ -258,13 +456,86 @@ static void dmpatch_ibt_restore(u64 save)
|
|||||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static u64 dmpatch_ibt_save(void) { return 0; }
|
static u64 notrace dmpatch_ibt_save(void) { return 0; }
|
||||||
static void dmpatch_ibt_restore(u64 save) { (void)save; }
|
static void notrace dmpatch_ibt_restore(u64 save) { (void)save; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int notrace dmpatch_process(unsigned long a, unsigned long b, unsigned long c)
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
int rc = 0;
|
||||||
|
unsigned long kv_major = 0;
|
||||||
|
unsigned long kv_minor = 0;
|
||||||
|
unsigned long kv_subminor = 0;
|
||||||
|
|
||||||
|
vdebug("dmpatch_process as KV %d.%d.%d ...\n", (int)a, (int)b, (int)c);
|
||||||
|
|
||||||
|
kv_major = g_ko_param.kv_major;
|
||||||
|
kv_minor = g_ko_param.kv_minor;
|
||||||
|
kv_subminor = g_ko_param.kv_subminor;
|
||||||
|
|
||||||
|
g_ko_param.kv_major = a;
|
||||||
|
g_ko_param.kv_minor = b;
|
||||||
|
g_ko_param.kv_subminor = c;
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 5, 0)) /* >= kernel 6.5 */
|
||||||
|
{
|
||||||
|
vdebug("new interface patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_patch_claim_ptr();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = dmpatch_replace_code(1, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
||||||
|
if (r && g_ko_param.kv_major >= 5)
|
||||||
|
{
|
||||||
|
vdebug("new2 patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_replace_code(2, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r && g_ko_param.kv_major >= 5)
|
||||||
|
{
|
||||||
|
vdebug("new3 patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_replace_code(3, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r)
|
||||||
|
{
|
||||||
|
rc = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
vdebug("patch dm_get_table_device success\n");
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 5, 0))
|
||||||
|
{
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = dmpatch_replace_code(1, g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
||||||
|
if (r)
|
||||||
|
{
|
||||||
|
rc = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
vdebug("patch dm_put_table_device success\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
vdebug("#####################################\n");
|
||||||
|
vdebug("######## dm patch success ###########\n");
|
||||||
|
vdebug("#####################################\n");
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
g_ko_param.kv_major = kv_major;
|
||||||
|
g_ko_param.kv_minor = kv_minor;
|
||||||
|
g_ko_param.kv_subminor = kv_subminor;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static int notrace dmpatch_init(void)
|
static int notrace dmpatch_init(void)
|
||||||
{
|
{
|
||||||
int r = 0;
|
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u64 msr = 0;
|
u64 msr = 0;
|
||||||
|
|
||||||
@@ -275,7 +546,8 @@ static int notrace dmpatch_init(void)
|
|||||||
|
|
||||||
kprintf = (printk_pf)(g_ko_param.printk_addr);
|
kprintf = (printk_pf)(g_ko_param.printk_addr);
|
||||||
|
|
||||||
vdebug("dmpatch_init start pagesize=%lu ...\n", g_ko_param.pgsize);
|
vdebug("dmpatch_init start pagesize=%lu kernel=%lu.%lu.%lu ...\n",
|
||||||
|
g_ko_param.pgsize, g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
||||||
|
|
||||||
if (g_ko_param.struct_size != sizeof(ko_param))
|
if (g_ko_param.struct_size != sizeof(ko_param))
|
||||||
{
|
{
|
||||||
@@ -294,39 +566,24 @@ static int notrace dmpatch_init(void)
|
|||||||
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
||||||
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
||||||
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
rc = dmpatch_process(g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
||||||
if (r && g_ko_param.kv_major >= 5)
|
if (rc)
|
||||||
{
|
{
|
||||||
vdebug("new patch dm_get_table_device...\n");
|
if (g_ko_param.kv_major >= 5)
|
||||||
r = dmpatch_replace_code(2, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r)
|
|
||||||
{
|
{
|
||||||
rc = -EINVAL;
|
rc = dmpatch_process(6, 5, 0);
|
||||||
goto out;
|
if (rc)
|
||||||
}
|
|
||||||
vdebug("patch dm_get_table_device success\n");
|
|
||||||
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
|
||||||
if (r)
|
|
||||||
{
|
{
|
||||||
rc = -EINVAL;
|
rc = dmpatch_process(6, 7, 0);
|
||||||
goto out;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
vdebug("patch dm_put_table_device success\n");
|
|
||||||
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
vdebug("######## dm patch success ###########\n");
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
if (g_ko_param.ibt == 0x8888)
|
||||||
{
|
{
|
||||||
dmpatch_ibt_restore(msr);
|
dmpatch_ibt_restore(msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,10 +597,21 @@ static void notrace dmpatch_exit(void)
|
|||||||
msr = dmpatch_ibt_save();
|
msr = dmpatch_ibt_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_claim_ptr)
|
||||||
|
{
|
||||||
|
dmpatch_restore_code(4, g_get_patch[0], g_claim_ptr);
|
||||||
|
if (g_put_patch[0])
|
||||||
|
{
|
||||||
|
dmpatch_restore_code(4, g_put_patch[0], g_claim_ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
for (i = 0; i < MAX_PATCH; i++)
|
for (i = 0; i < MAX_PATCH; i++)
|
||||||
{
|
{
|
||||||
dmpatch_restore_code(g_get_patch[i]);
|
dmpatch_restore_code(1, g_get_patch[i], 0x80);
|
||||||
dmpatch_restore_code(g_put_patch[i]);
|
dmpatch_restore_code(1, g_put_patch[i], 0x80);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vdebug("dmpatch_exit success\n");
|
vdebug("dmpatch_exit success\n");
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
1. install ubuntu 21.10
|
1. install ubuntu 22.04 5.15.0-25
|
||||||
2. apt-get install build-essential flex libncurses-dev linux-headers-generic linux-source libssl-dev ...... and so on
|
2. apt-get install build-essential flex libncurses-dev linux-headers-generic linux-source libssl-dev bison yacc vim libelf-dev ...... and so on
|
||||||
3. cp /lib/modules/5.13.0-23-generic/build/Module.symvers ./
|
3. cp /lib/modules/5.15.0-25-generic/build/Module.symvers ./
|
||||||
4. /boot/config-5.13.0-23-generic as .config make oldconfig
|
4. /boot/config-5.15.0-25-generic as .config make oldconfig
|
||||||
5. make menuconfig
|
5. make menuconfig
|
||||||
1. close CONFIG_STACKPROTECTOR
|
1. close CONFIG_STACKPROTECTOR
|
||||||
2. close CONFIG_RETPOLINE
|
2. close CONFIG_RETPOLINE
|
||||||
|
3. close CONFIG_UBSAN_BOUNDS
|
||||||
|
4. close CONFIG_UBSAN_ENUM
|
||||||
|
|
||||||
6. modify ./scripts/mod/modpost.c
|
6. modify ./scripts/mod/modpost.c
|
||||||
1. skip add_srcversion (just return)
|
1. skip add_srcversion (just return)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
FTPIP=168.0.0.209
|
FTPIP=192.168.44.1
|
||||||
FTPUSR='a:a'
|
FTPUSR='a:a'
|
||||||
|
|
||||||
rm -f dmpatch.c Makefile Makefile_IBT
|
rm -f dmpatch.c Makefile Makefile_IBT
|
||||||
@@ -27,7 +27,7 @@ mkdir ./aa
|
|||||||
cp -a *.c aa/
|
cp -a *.c aa/
|
||||||
cp -a Makefile aa/
|
cp -a Makefile aa/
|
||||||
|
|
||||||
cd /home/panda/linux-source-5.13.0
|
cd /home/panda/linux-source-5.15.0
|
||||||
make modules M=/home/panda/build/aa/
|
make modules M=/home/panda/build/aa/
|
||||||
strip --strip-debug /home/panda/build/aa/dm_patch.ko
|
strip --strip-debug /home/panda/build/aa/dm_patch.ko
|
||||||
cd -
|
cd -
|
||||||
@@ -43,7 +43,7 @@ mkdir ./aa
|
|||||||
cp -a *.c aa/
|
cp -a *.c aa/
|
||||||
cp -a Makefile_IBT aa/Makefile
|
cp -a Makefile_IBT aa/Makefile
|
||||||
|
|
||||||
cd /home/panda/linux-source-5.13.0
|
cd /home/panda/linux-source-5.15.0
|
||||||
make modules M=/home/panda/build/aa/
|
make modules M=/home/panda/build/aa/
|
||||||
strip --strip-debug /home/panda/build/aa/dm_patch_ibt.ko
|
strip --strip-debug /home/panda/build/aa/dm_patch_ibt.ko
|
||||||
cd -
|
cd -
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
1. Compile Environment
|
1. Compile Environment
|
||||||
==========================================
|
==========================================
|
||||||
My build environment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
|
My build environment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
|
||||||
Because Ventoy is based on many open source projects, so the environment is important. I suggest you test it on a virtual machine firstly.
|
Ventoy is based on many open source projects, so the build environment is important. I suggest you first test it on a virtual machine.
|
||||||
|
|
||||||
1.1 Install CentOS 7.8
|
1.1 Install CentOS 7.8
|
||||||
I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
|
I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
|
||||||
@@ -21,10 +21,10 @@
|
|||||||
==========================================
|
==========================================
|
||||||
2. Download Source Code
|
2. Download Source Code
|
||||||
==========================================
|
==========================================
|
||||||
2.1 Download Ventoy source code from github and decompress it.
|
2.1 Download Ventoy source code from GitHub and decompress it.
|
||||||
Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory layout).
|
Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory layout).
|
||||||
|
|
||||||
2.2 Download third-part source code and tool
|
2.2 Download third-party source code and tool
|
||||||
|
|
||||||
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz ===> /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
|
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz ===> /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
|
||||||
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9 ===> /home/Ventoy-master/ExFAT/libfuse-fuse-2.9.9.zip
|
https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9 ===> /home/Ventoy-master/ExFAT/libfuse-fuse-2.9.9.zip
|
||||||
https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz ===> /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
|
https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz ===> /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
|
||||||
https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
||||||
http://ftp.loongnix.cn/toolchain/gcc/release/mips/gcc7/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz ===> /opt/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz
|
https://github.com/ventoy/vtoytoolchain/releases/download/1.0/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz ===> /opt/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz
|
||||||
https://github.com/ventoy/musl-cross-make/releases/download/latest/output.tar.bz2 ===> /opt/output.tar.bz2
|
https://github.com/ventoy/musl-cross-make/releases/download/latest/output.tar.bz2 ===> /opt/output.tar.bz2
|
||||||
|
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
|
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
|
||||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz
|
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz
|
||||||
|
|
||||||
2.3 Prepare third-part tools
|
2.3 Prepare third-party tools
|
||||||
cd /home/Ventoy-master/DOC/
|
cd /home/Ventoy-master/DOC/
|
||||||
tar xf musl-1.2.1.tar.gz
|
tar xf musl-1.2.1.tar.gz
|
||||||
cd musl-1.2.1
|
cd musl-1.2.1
|
||||||
@@ -62,21 +62,21 @@
|
|||||||
==========================================
|
==========================================
|
||||||
3. All in one script
|
3. All in one script
|
||||||
==========================================
|
==========================================
|
||||||
I have made a all_in_one.sh, you can run this script to build and pack ventoy.
|
I have made an all-in-one script `all_in_one.sh`. You can run this script to build and pack ventoy.
|
||||||
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
||||||
|
|
||||||
cd /home/Ventoy-master/INSTALL
|
cd /home/Ventoy-master/INSTALL
|
||||||
sh all_in_one.sh
|
sh all_in_one.sh
|
||||||
|
|
||||||
It should be noted that:
|
It should be noted that:
|
||||||
1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other part contains the binaries and are few modified, so will no be recompiled everytime.
|
1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other parts contain binaries and are rarely modified, so will not be recompiled everytime.
|
||||||
You can rebuild these parts separately if you want.
|
You can rebuild these parts separately if you want.
|
||||||
|
|
||||||
2. some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
2. Some parts of Ventoy have a 32-bit and 64-bit version (like 4.9, 4.10, 4.11 follows)
|
||||||
all_in_one.sh only build 64bit version of them, if you want to rebuild the 32bit verison. You should create a 32bit CentOS environment and build them.
|
all_in_one.sh only builds the 64bit version of them. If you want to rebuild the 32bit verison, you should create a 32-bit CentOS environment and build them.
|
||||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
Fortunately these parts are rarely modified, so you only need to build once or you can directly use the binaries I have built.
|
||||||
|
|
||||||
Besides, after a fully compile and pack, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
|
Besides, after a full compile and packaging, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
|
||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
4. Build every part of Ventoy
|
4. Build every part of Ventoy
|
||||||
@@ -122,14 +122,14 @@
|
|||||||
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
||||||
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
||||||
|
|
||||||
Use the same build step to build exfat-util 32bit in a 32bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
Use the same build step to build exfat-util 32-bit in a 32-bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
||||||
|
|
||||||
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
||||||
cd /home/Ventoy-master/FUSEISO
|
cd /home/Ventoy-master/FUSEISO
|
||||||
sh build_libfuse.sh
|
sh build_libfuse.sh
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
Use the same build step to build in a 32bit CentOS system and get vtoy_fuse_iso_32
|
Use the same build step to build in a 32-bit CentOS system and get vtoy_fuse_iso_32
|
||||||
|
|
||||||
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
||||||
cd /home/Ventoy-master/SQUASHFS/SRC
|
cd /home/Ventoy-master/SQUASHFS/SRC
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
Use the same build step to build in a 32bit CentOS system and get unsquashfs_32
|
Use the same build step to build in a 32-bit CentOS system and get unsquashfs_32
|
||||||
|
|
||||||
4.12 == Build vblade_64/vblade_32 ==
|
4.12 == Build vblade_64/vblade_32 ==
|
||||||
cd /home/Ventoy-master/VBLADE/vblade-master
|
cd /home/Ventoy-master/VBLADE/vblade-master
|
||||||
@@ -159,12 +159,12 @@
|
|||||||
make -f ventoy_makefile
|
make -f ventoy_makefile
|
||||||
strip --strip-all xzminidec
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
4.16 == Build xzminidec64 ==
|
4.16 == Build xzminidec64/xzminidec64_musl ==
|
||||||
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
make -f ventoy_makefile64
|
make -f ventoy_makefile64 or make -f ventoy_makefile64_musl
|
||||||
strip --strip-all xzminidec
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
4.17 == Build iso9660_x64.efi ==
|
4.17 == Build iso9660_x64.efi/udf_x64.efi/iso9660_ia32.efi/udf_ia32.efi/iso9660_aa64.efi/udf_aa64.efi/ ==
|
||||||
This efi driver is from https://github.com/pbatard/efifs
|
This efi driver is from https://github.com/pbatard/efifs
|
||||||
Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)
|
Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)
|
||||||
|
|
||||||
@@ -185,6 +185,16 @@
|
|||||||
make
|
make
|
||||||
aarch64-buildroot-linux-uclibc-strip --strip-all lunzip
|
aarch64-buildroot-linux-uclibc-strip --strip-all lunzip
|
||||||
|
|
||||||
|
4.17 == Build xzminidecaa64 ==
|
||||||
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
|
make -f ventoy_makefileaa64
|
||||||
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
|
4.18 == Build xzminidecm64e ==
|
||||||
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
|
make -f ventoy_makefilem64e
|
||||||
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
@@ -256,5 +266,11 @@
|
|||||||
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
||||||
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
||||||
|
|
||||||
|
5.13 ./Ventoy/Unix/ventoy_unix/DragonFly/sbin/dmsetup
|
||||||
|
download from https://cdimage.debian.org/mirror/dragonflybsd.org/iso-images/dfly-x86_64-5.8.3_REL.iso.bz2
|
||||||
|
extract from the ISO file sbin/dmsetup
|
||||||
|
dmsetup SHA-256: bedcf26650e87edfe961e33bae20d832bce73efd4b6239f9a6a5785661e4e698
|
||||||
|
|
||||||
|
5.14 ./LiveCD/ISO/EFI/boot/vmlinuz64
|
||||||
|
download from http://www.tinycorelinux.net/11.x/x86_64/archive/11.0/distribution_files/vmlinuz64
|
||||||
|
vmlinuz64 SHA-256: 641077fc1f9914af244c248453005f56536ba9e7f54ba3e52402f26709ddb8a5
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
FROM centos:7
|
FROM centos:7
|
||||||
|
|
||||||
RUN yum -y -q install \
|
RUN sed -i \
|
||||||
|
-e 's/^mirrorlist/#mirrorlist/' \
|
||||||
|
-e 's/^#baseurl/baseurl/' \
|
||||||
|
-e 's/mirror\.centos\.org/vault.centos.org/' \
|
||||||
|
/etc/yum.repos.d/*.repo && \
|
||||||
|
yum -y -q install \
|
||||||
libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
|
libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
|
||||||
mpfr.i686 mpfr-devel.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
mpfr.i686 mpfr-devel.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
||||||
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
||||||
|
@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
||||||
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
||||||
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
||||||
|
#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
|
||||||
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
||||||
|
|
||||||
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
||||||
@@ -123,9 +124,16 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
* mmp: Not really back-incompatible - was added as such to
|
* mmp: Not really back-incompatible - was added as such to
|
||||||
* avoid multiple read-write mounts. Safe to ignore for this
|
* avoid multiple read-write mounts. Safe to ignore for this
|
||||||
* RO driver.
|
* RO driver.
|
||||||
|
* checksum seed: Not really back-incompatible - was added to allow tools
|
||||||
|
* such as tune2fs to change the UUID on a mounted metadata
|
||||||
|
* checksummed filesystem. Safe to ignore for now since the
|
||||||
|
* driver doesn't support checksum verification. But it must
|
||||||
|
* be removed from this list if that support is added later.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
||||||
| EXT4_FEATURE_INCOMPAT_MMP)
|
| EXT4_FEATURE_INCOMPAT_MMP \
|
||||||
|
| EXT4_FEATURE_INCOMPAT_CSUM_SEED)
|
||||||
|
|
||||||
|
|
||||||
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
||||||
@@ -723,10 +731,11 @@ grub_ext2_read_symlink (grub_fshelp_node_t node)
|
|||||||
if (! symlink)
|
if (! symlink)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* If the filesize of the symlink is bigger than
|
/*
|
||||||
60 the symlink is stored in a separate block,
|
* If the filesize of the symlink is equal to or bigger than 60 the symlink
|
||||||
otherwise it is stored in the inode. */
|
* is stored in a separate block, otherwise it is stored in the inode.
|
||||||
if (grub_le_to_cpu32 (diro->inode.size) <= sizeof (diro->inode.symlink))
|
*/
|
||||||
|
if (grub_le_to_cpu32 (diro->inode.size) < sizeof (diro->inode.symlink))
|
||||||
grub_memcpy (symlink,
|
grub_memcpy (symlink,
|
||||||
diro->inode.symlink,
|
diro->inode.symlink,
|
||||||
grub_le_to_cpu32 (diro->inode.size));
|
grub_le_to_cpu32 (diro->inode.size));
|
||||||
|
@@ -23,11 +23,25 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
|
#include <grub/time.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/fshelp.h>
|
#include <grub/fshelp.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
#define NSEC_PER_SEC ((grub_int64_t) 1000000000)
|
||||||
|
|
||||||
|
// GRUB 2.04 doesn't have safemath.h
|
||||||
|
// #include <grub/safemath.h>
|
||||||
|
|
||||||
|
// gcc < 5.1 doesn't support __builtin_add_overflow and __builtin_mul_overflow
|
||||||
|
// #define grub_add(a, b, res) __builtin_add_overflow(a, b, res)
|
||||||
|
// #define grub_mul(a, b, res) __builtin_mul_overflow(a, b, res)
|
||||||
|
// Warning: This is unsafe!
|
||||||
|
#define grub_add(a, b, res) ({ *(res) = (a) + (b); 0; })
|
||||||
|
|
||||||
|
#define grub_mul(a, b, res) ({ *(res) = (a) * (b); 0; })
|
||||||
|
|
||||||
#define XFS_INODE_EXTENTS 9
|
#define XFS_INODE_EXTENTS 9
|
||||||
|
|
||||||
#define XFS_INODE_FORMAT_INO 1
|
#define XFS_INODE_FORMAT_INO 1
|
||||||
@@ -74,10 +88,22 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
XFS_SB_VERSION2_PROJID32BIT | \
|
XFS_SB_VERSION2_PROJID32BIT | \
|
||||||
XFS_SB_VERSION2_FTYPE)
|
XFS_SB_VERSION2_FTYPE)
|
||||||
|
|
||||||
|
/* Inode flags2 flags */
|
||||||
|
#define XFS_DIFLAG2_BIGTIME_BIT 3
|
||||||
|
#define XFS_DIFLAG2_BIGTIME (1 << XFS_DIFLAG2_BIGTIME_BIT)
|
||||||
|
#define XFS_DIFLAG2_NREXT64_BIT 4
|
||||||
|
#define XFS_DIFLAG2_NREXT64 (1 << XFS_DIFLAG2_NREXT64_BIT)
|
||||||
|
|
||||||
/* incompat feature flags */
|
/* incompat feature flags */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_BIGTIME (1 << 3) /* large timestamps */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR (1 << 4) /* needs xfs_repair */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_NREXT64 (1 << 5) /* large extent counters */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_EXCHRANGE (1 << 6) /* exchangerange supported */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_PARENT (1 << 7) /* parent pointers */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_METADIR (1 << 8) /* metadata dir tree */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Directory entries with ftype are explicitly handled by GRUB code.
|
* Directory entries with ftype are explicitly handled by GRUB code.
|
||||||
@@ -87,11 +113,26 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
*
|
*
|
||||||
* We do not currently verify metadata UUID, so it is safe to read filesystems
|
* We do not currently verify metadata UUID, so it is safe to read filesystems
|
||||||
* with the XFS_SB_FEAT_INCOMPAT_META_UUID feature.
|
* with the XFS_SB_FEAT_INCOMPAT_META_UUID feature.
|
||||||
|
*
|
||||||
|
* We do not currently replay the log, so it is safe to read filesystems
|
||||||
|
* with the XFS_SB_FEAT_INCOMPAT_EXCHRANGE feature.
|
||||||
|
*
|
||||||
|
* We do not currently read directory parent pointers, so it is safe to read
|
||||||
|
* filesystems with the XFS_SB_FEAT_INCOMPAT_PARENT feature.
|
||||||
|
*
|
||||||
|
* We do not currently look at realtime or quota metadata, so it is safe to
|
||||||
|
* read filesystems with the XFS_SB_FEAT_INCOMPAT_METADIR feature.
|
||||||
*/
|
*/
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
||||||
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
||||||
XFS_SB_FEAT_INCOMPAT_SPINODES | \
|
XFS_SB_FEAT_INCOMPAT_SPINODES | \
|
||||||
XFS_SB_FEAT_INCOMPAT_META_UUID)
|
XFS_SB_FEAT_INCOMPAT_META_UUID | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_BIGTIME | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_NREXT64 | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_EXCHRANGE | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_PARENT | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_METADIR)
|
||||||
|
|
||||||
struct grub_xfs_sblock
|
struct grub_xfs_sblock
|
||||||
{
|
{
|
||||||
@@ -176,33 +217,49 @@ struct grub_xfs_btree_root
|
|||||||
grub_uint64_t keys[1];
|
grub_uint64_t keys[1];
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
struct grub_xfs_time
|
struct grub_xfs_time_legacy
|
||||||
{
|
{
|
||||||
grub_uint32_t sec;
|
grub_uint32_t sec;
|
||||||
grub_uint32_t nanosec;
|
grub_uint32_t nanosec;
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The struct grub_xfs_inode layout was taken from the
|
||||||
|
* struct xfs_dinode_core which is described here:
|
||||||
|
* https://mirrors.edge.kernel.org/pub/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf
|
||||||
|
*/
|
||||||
struct grub_xfs_inode
|
struct grub_xfs_inode
|
||||||
{
|
{
|
||||||
grub_uint8_t magic[2];
|
grub_uint8_t magic[2];
|
||||||
grub_uint16_t mode;
|
grub_uint16_t mode;
|
||||||
grub_uint8_t version;
|
grub_uint8_t version;
|
||||||
grub_uint8_t format;
|
grub_uint8_t format;
|
||||||
grub_uint8_t unused2[26];
|
grub_uint8_t unused2[18];
|
||||||
struct grub_xfs_time atime;
|
grub_uint64_t nextents_big;
|
||||||
struct grub_xfs_time mtime;
|
grub_uint64_t atime;
|
||||||
struct grub_xfs_time ctime;
|
grub_uint64_t mtime;
|
||||||
|
grub_uint64_t ctime;
|
||||||
grub_uint64_t size;
|
grub_uint64_t size;
|
||||||
grub_uint64_t nblocks;
|
grub_uint64_t nblocks;
|
||||||
grub_uint32_t extsize;
|
grub_uint32_t extsize;
|
||||||
grub_uint32_t nextents;
|
grub_uint32_t nextents;
|
||||||
grub_uint16_t unused3;
|
grub_uint16_t unused3;
|
||||||
grub_uint8_t fork_offset;
|
grub_uint8_t fork_offset;
|
||||||
grub_uint8_t unused4[17];
|
grub_uint8_t unused4[17]; /* Last member of inode v2. */
|
||||||
|
grub_uint8_t unused5[20]; /* First member of inode v3. */
|
||||||
|
grub_uint64_t flags2;
|
||||||
|
grub_uint8_t unused6[48]; /* Last member of inode v3. */
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
#define XFS_V2_INODE_SIZE sizeof(struct grub_xfs_inode)
|
#define XFS_V3_INODE_SIZE sizeof(struct grub_xfs_inode)
|
||||||
#define XFS_V3_INODE_SIZE (XFS_V2_INODE_SIZE + 76)
|
/* Size of struct grub_xfs_inode v2, up to unused4 member included. */
|
||||||
|
#define XFS_V2_INODE_SIZE (XFS_V3_INODE_SIZE - 76)
|
||||||
|
|
||||||
|
struct grub_xfs_dir_leaf_entry
|
||||||
|
{
|
||||||
|
grub_uint32_t hashval;
|
||||||
|
grub_uint32_t address;
|
||||||
|
} GRUB_PACKED;
|
||||||
|
|
||||||
struct grub_xfs_dirblock_tail
|
struct grub_xfs_dirblock_tail
|
||||||
{
|
{
|
||||||
@@ -220,6 +277,7 @@ struct grub_fshelp_node
|
|||||||
|
|
||||||
struct grub_xfs_data
|
struct grub_xfs_data
|
||||||
{
|
{
|
||||||
|
grub_size_t data_size;
|
||||||
struct grub_xfs_sblock sblock;
|
struct grub_xfs_sblock sblock;
|
||||||
grub_disk_t disk;
|
grub_disk_t disk;
|
||||||
int pos;
|
int pos;
|
||||||
@@ -232,8 +290,6 @@ struct grub_xfs_data
|
|||||||
|
|
||||||
static grub_dl_t my_mod;
|
static grub_dl_t my_mod;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int grub_xfs_sb_hascrc(struct grub_xfs_data *data)
|
static int grub_xfs_sb_hascrc(struct grub_xfs_data *data)
|
||||||
{
|
{
|
||||||
return (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) ==
|
return (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) ==
|
||||||
@@ -296,9 +352,21 @@ static int grub_xfs_sb_valid(struct grub_xfs_data *data)
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "unsupported XFS filesystem version");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
grub_xfs_sb_needs_repair (struct grub_xfs_data *data)
|
||||||
|
{
|
||||||
|
return ((data->sblock.version &
|
||||||
|
grub_cpu_to_be16_compile_time (XFS_SB_VERSION_NUMBITS)) ==
|
||||||
|
grub_cpu_to_be16_compile_time (XFS_SB_VERSION_5) &&
|
||||||
|
(data->sblock.sb_features_incompat &
|
||||||
|
grub_cpu_to_be32_compile_time (XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR)));
|
||||||
|
}
|
||||||
|
|
||||||
/* Filetype information as used in inodes. */
|
/* Filetype information as used in inodes. */
|
||||||
#define FILETYPE_INO_MASK 0170000
|
#define FILETYPE_INO_MASK 0170000
|
||||||
#define FILETYPE_INO_REG 0100000
|
#define FILETYPE_INO_REG 0100000
|
||||||
@@ -354,7 +422,6 @@ GRUB_XFS_EXTENT_SIZE (struct grub_xfs_extent *exts, int ex)
|
|||||||
return (grub_be_to_cpu32 (exts[ex].raw[3]) & ((1 << 21) - 1));
|
return (grub_be_to_cpu32 (exts[ex].raw[3]) & ((1 << 21) - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline grub_uint64_t
|
static inline grub_uint64_t
|
||||||
grub_xfs_inode_block (struct grub_xfs_data *data,
|
grub_xfs_inode_block (struct grub_xfs_data *data,
|
||||||
grub_uint64_t ino)
|
grub_uint64_t ino)
|
||||||
@@ -489,7 +556,7 @@ grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
|
|||||||
grub_uint64_t block = grub_xfs_inode_block (data, ino);
|
grub_uint64_t block = grub_xfs_inode_block (data, ino);
|
||||||
int offset = grub_xfs_inode_offset (data, ino);
|
int offset = grub_xfs_inode_offset (data, ino);
|
||||||
|
|
||||||
grub_dprintf("xfs", "Reading inode (%"PRIuGRUB_UINT64_T") - %"PRIuGRUB_UINT64_T", %d\n",
|
grub_dprintf("xfs", "Reading inode (%" PRIuGRUB_UINT64_T ") - %" PRIuGRUB_UINT64_T ", %d\n",
|
||||||
ino, block, offset);
|
ino, block, offset);
|
||||||
/* Read the inode. */
|
/* Read the inode. */
|
||||||
if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
||||||
@@ -509,11 +576,26 @@ get_fsb (const void *keys, int idx)
|
|||||||
return grub_be_to_cpu64 (grub_get_unaligned64 (p));
|
return grub_be_to_cpu64 (grub_get_unaligned64 (p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
grub_xfs_inode_has_large_extent_counts (const struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return inode->version >= 3 &&
|
||||||
|
(inode->flags2 & grub_cpu_to_be64_compile_time (XFS_DIFLAG2_NREXT64));
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_uint64_t
|
||||||
|
grub_xfs_get_inode_nextents (struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return (grub_xfs_inode_has_large_extent_counts (inode)) ?
|
||||||
|
grub_be_to_cpu64 (inode->nextents_big) :
|
||||||
|
grub_be_to_cpu32 (inode->nextents);
|
||||||
|
}
|
||||||
|
|
||||||
static grub_disk_addr_t
|
static grub_disk_addr_t
|
||||||
grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
||||||
{
|
{
|
||||||
struct grub_xfs_btree_node *leaf = 0;
|
struct grub_xfs_btree_node *leaf = 0;
|
||||||
int ex, nrec;
|
grub_uint64_t ex, nrec;
|
||||||
struct grub_xfs_extent *exts;
|
struct grub_xfs_extent *exts;
|
||||||
grub_uint64_t ret = 0;
|
grub_uint64_t ret = 0;
|
||||||
|
|
||||||
@@ -538,7 +620,18 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
/ (2 * sizeof (grub_uint64_t));
|
/ (2 * sizeof (grub_uint64_t));
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int i;
|
grub_uint64_t i;
|
||||||
|
grub_addr_t keys_end, data_end;
|
||||||
|
|
||||||
|
if (grub_mul (sizeof (grub_uint64_t), nrec, &keys_end) ||
|
||||||
|
grub_add ((grub_addr_t) keys, keys_end, &keys_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, node->data->data_size, &data_end) ||
|
||||||
|
keys_end > data_end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid number of XFS root keys");
|
||||||
|
grub_free (leaf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < nrec; i++)
|
for (i = 0; i < nrec; i++)
|
||||||
{
|
{
|
||||||
@@ -556,7 +649,10 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
if (grub_disk_read (node->data->disk,
|
if (grub_disk_read (node->data->disk,
|
||||||
GRUB_XFS_FSB_TO_BLOCK (node->data, get_fsb (keys, i - 1 + recoffset)) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS),
|
GRUB_XFS_FSB_TO_BLOCK (node->data, get_fsb (keys, i - 1 + recoffset)) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS),
|
||||||
0, node->data->bsize, leaf))
|
0, node->data->bsize, leaf))
|
||||||
|
{
|
||||||
|
grub_free (leaf);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if ((!node->data->hascrc &&
|
if ((!node->data->hascrc &&
|
||||||
grub_strncmp ((char *) leaf->magic, "BMAP", 4)) ||
|
grub_strncmp ((char *) leaf->magic, "BMAP", 4)) ||
|
||||||
@@ -579,8 +675,20 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
}
|
}
|
||||||
else if (node->inode.format == XFS_INODE_FORMAT_EXT)
|
else if (node->inode.format == XFS_INODE_FORMAT_EXT)
|
||||||
{
|
{
|
||||||
nrec = grub_be_to_cpu32 (node->inode.nextents);
|
grub_addr_t exts_end = 0;
|
||||||
|
grub_addr_t data_end = 0;
|
||||||
|
|
||||||
|
nrec = grub_xfs_get_inode_nextents (&node->inode);
|
||||||
exts = (struct grub_xfs_extent *) grub_xfs_inode_data(&node->inode);
|
exts = (struct grub_xfs_extent *) grub_xfs_inode_data(&node->inode);
|
||||||
|
|
||||||
|
if (grub_mul (sizeof (struct grub_xfs_extent), nrec, &exts_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, exts_end, &exts_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, node->data->data_size, &data_end) ||
|
||||||
|
exts_end > data_end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid number of XFS extents");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -634,6 +742,7 @@ static char *
|
|||||||
grub_xfs_read_symlink (grub_fshelp_node_t node)
|
grub_xfs_read_symlink (grub_fshelp_node_t node)
|
||||||
{
|
{
|
||||||
grub_ssize_t size = grub_be_to_cpu64 (node->inode.size);
|
grub_ssize_t size = grub_be_to_cpu64 (node->inode.size);
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
if (size < 0)
|
if (size < 0)
|
||||||
{
|
{
|
||||||
@@ -655,7 +764,12 @@ grub_xfs_read_symlink (grub_fshelp_node_t node)
|
|||||||
if (node->data->hascrc)
|
if (node->data->hascrc)
|
||||||
off = 56;
|
off = 56;
|
||||||
|
|
||||||
symlink = grub_malloc (size + 1);
|
if (grub_add (size, 1, &sz))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE, N_("symlink size overflow"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
symlink = grub_malloc (sz);
|
||||||
if (!symlink)
|
if (!symlink)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -705,8 +819,15 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename,
|
|||||||
{
|
{
|
||||||
struct grub_fshelp_node *fdiro;
|
struct grub_fshelp_node *fdiro;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
fdiro = grub_malloc (grub_xfs_fshelp_size(ctx->diro->data) + 1);
|
if (grub_add (grub_xfs_fshelp_size(ctx->diro->data), 1, &sz))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE, N_("directory data size overflow"));
|
||||||
|
grub_print_error ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
fdiro = grub_malloc (sz);
|
||||||
if (!fdiro)
|
if (!fdiro)
|
||||||
{
|
{
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
@@ -722,6 +843,7 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename,
|
|||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
|
grub_free (fdiro);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -764,12 +886,20 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
if (iterate_dir_call_hook (parent, "..", &ctx))
|
if (iterate_dir_call_hook (parent, "..", &ctx))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < head->count; i++)
|
for (i = 0; i < head->count &&
|
||||||
|
(grub_uint8_t *) de < ((grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data)); i++)
|
||||||
{
|
{
|
||||||
grub_uint64_t ino;
|
grub_uint64_t ino;
|
||||||
grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de);
|
grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de);
|
||||||
grub_uint8_t c;
|
grub_uint8_t c;
|
||||||
|
|
||||||
|
if ((inopos + (smallino ? 4 : 8)) > (grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS inode");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* inopos might be unaligned. */
|
/* inopos might be unaligned. */
|
||||||
if (smallino)
|
if (smallino)
|
||||||
ino = (((grub_uint32_t) inopos[0]) << 24)
|
ino = (((grub_uint32_t) inopos[0]) << 24)
|
||||||
@@ -824,24 +954,49 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
{
|
{
|
||||||
struct grub_xfs_dir2_entry *direntry =
|
struct grub_xfs_dir2_entry *direntry =
|
||||||
grub_xfs_first_de(dir->data, dirblock);
|
grub_xfs_first_de(dir->data, dirblock);
|
||||||
int entries;
|
int entries = -1;
|
||||||
struct grub_xfs_dirblock_tail *tail =
|
char *end = dirblock + dirblk_size;
|
||||||
grub_xfs_dir_tail(dir->data, dirblock);
|
grub_uint32_t magic;
|
||||||
|
|
||||||
numread = grub_xfs_read_file (dir, 0, 0,
|
numread = grub_xfs_read_file (dir, 0, 0,
|
||||||
blk << dirblk_log2,
|
blk << dirblk_log2,
|
||||||
dirblk_size, dirblock, 0);
|
dirblk_size, dirblock, 0);
|
||||||
if (numread != dirblk_size)
|
if (numread != dirblk_size)
|
||||||
|
{
|
||||||
|
grub_free (dirblock);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
entries = (grub_be_to_cpu32 (tail->leaf_count)
|
/*
|
||||||
- grub_be_to_cpu32 (tail->leaf_stale));
|
* If this data block isn't actually part of the extent list then
|
||||||
|
* grub_xfs_read_file() returns a block of zeros. So, if the magic
|
||||||
|
* number field is all zeros then this block should be skipped.
|
||||||
|
*/
|
||||||
|
magic = *(grub_uint32_t *)(void *) dirblock;
|
||||||
|
if (!magic)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Leaf and tail information are only in the data block if the number
|
||||||
|
* of extents is 1.
|
||||||
|
*/
|
||||||
|
if (grub_xfs_get_inode_nextents (&dir->inode) == 1)
|
||||||
|
{
|
||||||
|
struct grub_xfs_dirblock_tail *tail = grub_xfs_dir_tail (dir->data, dirblock);
|
||||||
|
|
||||||
|
end = (char *) tail;
|
||||||
|
|
||||||
|
/* Subtract the space used by leaf nodes. */
|
||||||
|
end -= grub_be_to_cpu32 (tail->leaf_count) * sizeof (struct grub_xfs_dir_leaf_entry);
|
||||||
|
|
||||||
|
entries = grub_be_to_cpu32 (tail->leaf_count) - grub_be_to_cpu32 (tail->leaf_stale);
|
||||||
|
|
||||||
if (!entries)
|
if (!entries)
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Iterate over all entries within this block. */
|
/* Iterate over all entries within this block. */
|
||||||
while ((char *)direntry < (char *)tail)
|
while ((char *) direntry < (char *) end)
|
||||||
{
|
{
|
||||||
grub_uint8_t *freetag;
|
grub_uint8_t *freetag;
|
||||||
char *filename;
|
char *filename;
|
||||||
@@ -861,6 +1016,12 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
}
|
}
|
||||||
|
|
||||||
filename = (char *)(direntry + 1);
|
filename = (char *)(direntry + 1);
|
||||||
|
if (filename + direntry->len + 1 > (char *) end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS directory entry");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* The byte after the filename is for the filetype, padding, or
|
/* The byte after the filename is for the filetype, padding, or
|
||||||
tag, which is not used by GRUB. So it can be overwritten. */
|
tag, which is not used by GRUB. So it can be overwritten. */
|
||||||
filename[direntry->len] = '\0';
|
filename[direntry->len] = '\0';
|
||||||
@@ -872,11 +1033,17 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if last direntry in this block is
|
/*
|
||||||
reached. */
|
* The expected number of directory entries is only tracked for the
|
||||||
|
* single extent case.
|
||||||
|
*/
|
||||||
|
if (grub_xfs_get_inode_nextents (&dir->inode) == 1)
|
||||||
|
{
|
||||||
|
/* Check if last direntry in this block is reached. */
|
||||||
entries--;
|
entries--;
|
||||||
if (!entries)
|
if (!entries)
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Select the next directory entry. */
|
/* Select the next directory entry. */
|
||||||
direntry = grub_xfs_next_de(dir->data, direntry);
|
direntry = grub_xfs_next_de(dir->data, direntry);
|
||||||
@@ -899,11 +1066,14 @@ static struct grub_xfs_data *
|
|||||||
grub_xfs_mount (grub_disk_t disk)
|
grub_xfs_mount (grub_disk_t disk)
|
||||||
{
|
{
|
||||||
struct grub_xfs_data *data = 0;
|
struct grub_xfs_data *data = 0;
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
data = grub_zalloc (sizeof (struct grub_xfs_data));
|
data = grub_zalloc (sizeof (struct grub_xfs_data));
|
||||||
if (!data)
|
if (!data)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
data->data_size = sizeof (struct grub_xfs_data);
|
||||||
|
|
||||||
grub_dprintf("xfs", "Reading sb\n");
|
grub_dprintf("xfs", "Reading sb\n");
|
||||||
/* Read the superblock. */
|
/* Read the superblock. */
|
||||||
if (grub_disk_read (disk, 0, 0,
|
if (grub_disk_read (disk, 0, 0,
|
||||||
@@ -913,14 +1083,19 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
if (!grub_xfs_sb_valid(data))
|
if (!grub_xfs_sb_valid(data))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
data = grub_realloc (data,
|
if (grub_xfs_sb_needs_repair (data))
|
||||||
sizeof (struct grub_xfs_data)
|
grub_dprintf ("xfs", "XFS filesystem needs repair, boot may fail\n");
|
||||||
- sizeof (struct grub_xfs_inode)
|
|
||||||
+ grub_xfs_inode_size(data) + 1);
|
if (grub_add (grub_xfs_inode_size (data),
|
||||||
|
sizeof (struct grub_xfs_data) - sizeof (struct grub_xfs_inode) + 1, &sz))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
data = grub_realloc (data, sz);
|
||||||
|
|
||||||
if (! data)
|
if (! data)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
data->data_size = sz;
|
||||||
data->diropen.data = data;
|
data->diropen.data = data;
|
||||||
data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino);
|
data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino);
|
||||||
data->diropen.inode_read = 1;
|
data->diropen.inode_read = 1;
|
||||||
@@ -931,7 +1106,7 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
|
|
||||||
data->disk = disk;
|
data->disk = disk;
|
||||||
data->pos = 0;
|
data->pos = 0;
|
||||||
grub_dprintf("xfs", "Reading root ino %"PRIuGRUB_UINT64_T"\n",
|
grub_dprintf("xfs", "Reading root ino %" PRIuGRUB_UINT64_T "\n",
|
||||||
grub_cpu_to_be64(data->sblock.rootino));
|
grub_cpu_to_be64(data->sblock.rootino));
|
||||||
|
|
||||||
grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode);
|
grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode);
|
||||||
@@ -939,7 +1114,7 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
return data;
|
return data;
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_OUT_OF_RANGE)
|
if (grub_errno == GRUB_ERR_OUT_OF_RANGE || grub_errno == GRUB_ERR_NONE)
|
||||||
grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem");
|
grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem");
|
||||||
|
|
||||||
grub_free (data);
|
grub_free (data);
|
||||||
@@ -947,7 +1122,6 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Context for grub_xfs_dir. */
|
/* Context for grub_xfs_dir. */
|
||||||
struct grub_xfs_dir_ctx
|
struct grub_xfs_dir_ctx
|
||||||
{
|
{
|
||||||
@@ -955,6 +1129,27 @@ struct grub_xfs_dir_ctx
|
|||||||
void *hook_data;
|
void *hook_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Bigtime inodes helpers. */
|
||||||
|
#define XFS_BIGTIME_EPOCH_OFFSET (-(grub_int64_t) GRUB_INT32_MIN)
|
||||||
|
|
||||||
|
static int grub_xfs_inode_has_bigtime (const struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return inode->version >= 3 &&
|
||||||
|
(inode->flags2 & grub_cpu_to_be64_compile_time (XFS_DIFLAG2_BIGTIME));
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_int64_t
|
||||||
|
grub_xfs_get_inode_time (struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
struct grub_xfs_time_legacy *lts;
|
||||||
|
|
||||||
|
if (grub_xfs_inode_has_bigtime (inode))
|
||||||
|
return grub_divmod64 (grub_be_to_cpu64 (inode->mtime), NSEC_PER_SEC, NULL) - XFS_BIGTIME_EPOCH_OFFSET;
|
||||||
|
|
||||||
|
lts = (struct grub_xfs_time_legacy *) &inode->mtime;
|
||||||
|
return grub_be_to_cpu32 (lts->sec);
|
||||||
|
}
|
||||||
|
|
||||||
/* Helper for grub_xfs_dir. */
|
/* Helper for grub_xfs_dir. */
|
||||||
static int
|
static int
|
||||||
grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
||||||
@@ -967,7 +1162,7 @@ grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
|||||||
if (node->inode_read)
|
if (node->inode_read)
|
||||||
{
|
{
|
||||||
info.mtimeset = 1;
|
info.mtimeset = 1;
|
||||||
info.mtime = grub_be_to_cpu32 (node->inode.mtime.sec);
|
info.mtime = grub_xfs_get_inode_time (&node->inode);
|
||||||
}
|
}
|
||||||
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
|
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
|
||||||
grub_free (node);
|
grub_free (node);
|
||||||
@@ -1132,8 +1327,6 @@ grub_xfs_uuid (grub_device_t device, char **uuid)
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static struct grub_fs grub_xfs_fs =
|
static struct grub_fs grub_xfs_fs =
|
||||||
{
|
{
|
||||||
.name = "xfs",
|
.name = "xfs",
|
||||||
@@ -1152,6 +1345,7 @@ static struct grub_fs grub_xfs_fs =
|
|||||||
|
|
||||||
GRUB_MOD_INIT(xfs)
|
GRUB_MOD_INIT(xfs)
|
||||||
{
|
{
|
||||||
|
//grub_xfs_fs.mod = mod;
|
||||||
grub_fs_register (&grub_xfs_fs);
|
grub_fs_register (&grub_xfs_fs);
|
||||||
my_mod = mod;
|
my_mod = mod;
|
||||||
}
|
}
|
||||||
|
@@ -342,11 +342,13 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
|||||||
if (len == 0)
|
if (len == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (file->name) {
|
||||||
if (grub_strncmp(file->name, GRUB_MEMFILE_MEM, grub_strlen(GRUB_MEMFILE_MEM)) == 0) {
|
if (grub_strncmp(file->name, GRUB_MEMFILE_MEM, grub_strlen(GRUB_MEMFILE_MEM)) == 0) {
|
||||||
grub_memcpy(buf, (grub_uint8_t *)(file->data) + file->offset, len);
|
grub_memcpy(buf, (grub_uint8_t *)(file->data) + file->offset, len);
|
||||||
file->offset += len;
|
file->offset += len;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
read_hook = file->read_hook;
|
read_hook = file->read_hook;
|
||||||
read_hook_data = file->read_hook_data;
|
read_hook_data = file->read_hook_data;
|
||||||
|
@@ -128,11 +128,22 @@ insert_dir (const char *name, struct dir **root,
|
|||||||
n->name = grub_strndup (cb, ce - cb);
|
n->name = grub_strndup (cb, ce - cb);
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
grub_dprintf ("linux", "Creating directory %s, %s\n", name, ce);
|
/*
|
||||||
ptr = make_header (ptr, name, ce - name,
|
* Create the substring with the trailing NUL byte
|
||||||
040777, 0);
|
* to be included in the cpio header.
|
||||||
|
*/
|
||||||
|
char *tmp_name = grub_strndup (name, ce - name);
|
||||||
|
if (!tmp_name) {
|
||||||
|
grub_free (n->name);
|
||||||
|
grub_free (n);
|
||||||
|
return grub_errno;
|
||||||
}
|
}
|
||||||
size += ALIGN_UP ((ce - (char *) name)
|
grub_dprintf ("linux", "Creating directory %s, %s\n", name, ce);
|
||||||
|
ptr = make_header (ptr, tmp_name, ce - name + 1,
|
||||||
|
040777, 0);
|
||||||
|
grub_free (tmp_name);
|
||||||
|
}
|
||||||
|
size += ALIGN_UP ((ce - (char *) name + 1)
|
||||||
+ sizeof (struct newc_head), 4);
|
+ sizeof (struct newc_head), 4);
|
||||||
*head = n;
|
*head = n;
|
||||||
cur = n;
|
cur = n;
|
||||||
@@ -183,7 +194,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
}
|
}
|
||||||
initrd_ctx->size
|
initrd_ctx->size
|
||||||
+= ALIGN_UP (sizeof (struct newc_head)
|
+= ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ grub_strlen (initrd_ctx->components[i].newc_name),
|
+ grub_strlen (initrd_ctx->components[i].newc_name) + 1,
|
||||||
4);
|
4);
|
||||||
initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name,
|
initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name,
|
||||||
&root, 0);
|
&root, 0);
|
||||||
@@ -194,7 +205,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
else if (newc)
|
else if (newc)
|
||||||
{
|
{
|
||||||
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
+ sizeof ("TRAILER!!!"), 4);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
newc = 0;
|
newc = 0;
|
||||||
@@ -217,7 +228,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
{
|
{
|
||||||
initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4);
|
initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4);
|
||||||
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
+ sizeof ("TRAILER!!!"), 4);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
}
|
}
|
||||||
@@ -269,14 +280,14 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
|
|||||||
ptr += insert_dir (initrd_ctx->components[i].newc_name,
|
ptr += insert_dir (initrd_ctx->components[i].newc_name,
|
||||||
&root, ptr);
|
&root, ptr);
|
||||||
ptr = make_header (ptr, initrd_ctx->components[i].newc_name,
|
ptr = make_header (ptr, initrd_ctx->components[i].newc_name,
|
||||||
grub_strlen (initrd_ctx->components[i].newc_name),
|
grub_strlen (initrd_ctx->components[i].newc_name) + 1,
|
||||||
0100777,
|
0100777,
|
||||||
initrd_ctx->components[i].size);
|
initrd_ctx->components[i].size);
|
||||||
newc = 1;
|
newc = 1;
|
||||||
}
|
}
|
||||||
else if (newc)
|
else if (newc)
|
||||||
{
|
{
|
||||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1,
|
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!"),
|
||||||
0, 0);
|
0, 0);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
@@ -308,7 +319,7 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
|
|||||||
{
|
{
|
||||||
grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
|
grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
|
||||||
ptr += ALIGN_UP_OVERHEAD (cursize, 4);
|
ptr += ALIGN_UP_OVERHEAD (cursize, 4);
|
||||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1, 0, 0);
|
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!"), 0, 0);
|
||||||
}
|
}
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
|
@@ -244,6 +244,15 @@ static int ventoy_browser_valid_dirname(const char *name, int len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_filt_trash_dir)
|
||||||
|
{
|
||||||
|
if (0 == grub_strncmp(name, ".trash-", 7) ||
|
||||||
|
0 == grub_strcmp(name, ".Trashes"))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (name[0] == '$')
|
if (name[0] == '$')
|
||||||
{
|
{
|
||||||
if (0 == grub_strncmp(name, "$RECYCLE.BIN", 12) ||
|
if (0 == grub_strncmp(name, "$RECYCLE.BIN", 12) ||
|
||||||
|
@@ -65,6 +65,7 @@ int g_initrd_img_count = 0;
|
|||||||
int g_valid_initrd_count = 0;
|
int g_valid_initrd_count = 0;
|
||||||
int g_default_menu_mode = 0;
|
int g_default_menu_mode = 0;
|
||||||
int g_filt_dot_underscore_file = 0;
|
int g_filt_dot_underscore_file = 0;
|
||||||
|
int g_filt_trash_dir = 1;
|
||||||
int g_sort_case_sensitive = 0;
|
int g_sort_case_sensitive = 0;
|
||||||
int g_tree_view_menu_style = 0;
|
int g_tree_view_menu_style = 0;
|
||||||
static grub_file_t g_old_file;
|
static grub_file_t g_old_file;
|
||||||
@@ -1568,19 +1569,25 @@ int ventoy_cmp_img(img_info *img1, img_info *img2)
|
|||||||
|
|
||||||
static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
||||||
{
|
{
|
||||||
char *s1, *s2;
|
int i = 0;
|
||||||
int c1 = 0;
|
int c1 = 0;
|
||||||
int c2 = 0;
|
int c2 = 0;
|
||||||
|
int len = 0;
|
||||||
|
char *s1, *s2;
|
||||||
|
|
||||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||||
{
|
{
|
||||||
return (node1->plugin_list_index - node2->plugin_list_index);
|
return (node1->plugin_list_index - node2->plugin_list_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (s1 = node1->dir, s2 = node2->dir; *s1 && *s2; s1++, s2++)
|
s1 = node1->dir;
|
||||||
|
s2 = node2->dir;
|
||||||
|
len = grub_min(node1->dirlen, node2->dirlen);
|
||||||
|
|
||||||
|
for (i = 0; i < len - 1; i++)
|
||||||
{
|
{
|
||||||
c1 = *s1;
|
c1 = *s1++;
|
||||||
c2 = *s2;
|
c2 = *s2++;
|
||||||
|
|
||||||
if (0 == g_sort_case_sensitive)
|
if (0 == g_sort_case_sensitive)
|
||||||
{
|
{
|
||||||
@@ -1597,10 +1604,20 @@ static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
|||||||
|
|
||||||
if (c1 != c2)
|
if (c1 != c2)
|
||||||
{
|
{
|
||||||
break;
|
return (c1 - c2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (len == node1->dirlen)
|
||||||
|
{
|
||||||
|
c1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len == node2->dirlen)
|
||||||
|
{
|
||||||
|
c2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return (c1 - c2);
|
return (c1 - c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1900,10 +1917,15 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename[0] == '$' && 0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
if (g_filt_trash_dir)
|
||||||
|
{
|
||||||
|
if (0 == grub_strncmp(filename, ".trash-", 7) ||
|
||||||
|
0 == grub_strcmp(filename, ".Trashes") ||
|
||||||
|
0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||||
{
|
{
|
||||||
@@ -2832,6 +2854,12 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
g_filt_dot_underscore_file = 1;
|
g_filt_dot_underscore_file = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strdata = ventoy_get_env("VTOY_FILT_TRASH_DIR");
|
||||||
|
if (strdata && strdata[0] == '0' && strdata[1] == 0)
|
||||||
|
{
|
||||||
|
g_filt_trash_dir = 0;
|
||||||
|
}
|
||||||
|
|
||||||
strdata = ventoy_get_env("VTOY_SORT_CASE_SENSITIVE");
|
strdata = ventoy_get_env("VTOY_SORT_CASE_SENSITIVE");
|
||||||
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
||||||
{
|
{
|
||||||
|
@@ -862,6 +862,7 @@ typedef struct vhd_footer_t
|
|||||||
}vhd_footer_t;
|
}vhd_footer_t;
|
||||||
|
|
||||||
#define VDI_IMAGE_FILE_INFO "<<< Oracle VM VirtualBox Disk Image >>>\n"
|
#define VDI_IMAGE_FILE_INFO "<<< Oracle VM VirtualBox Disk Image >>>\n"
|
||||||
|
#define VDI_IMAGE_FILE_INFO2 "<<< Oracle VirtualBox Disk Image >>>\n"
|
||||||
|
|
||||||
/** Image signature. */
|
/** Image signature. */
|
||||||
#define VDI_IMAGE_SIGNATURE (0xbeda107f)
|
#define VDI_IMAGE_SIGNATURE (0xbeda107f)
|
||||||
@@ -1298,6 +1299,7 @@ extern int g_tree_view_menu_style;
|
|||||||
extern int g_sort_case_sensitive;
|
extern int g_sort_case_sensitive;
|
||||||
extern int g_wimboot_enable;
|
extern int g_wimboot_enable;
|
||||||
extern int g_filt_dot_underscore_file;
|
extern int g_filt_dot_underscore_file;
|
||||||
|
extern int g_filt_trash_dir;
|
||||||
extern int g_vtoy_file_flt[VTOY_FILE_FLT_BUTT];
|
extern int g_vtoy_file_flt[VTOY_FILE_FLT_BUTT];
|
||||||
extern const char *g_menu_class[img_type_max];
|
extern const char *g_menu_class[img_type_max];
|
||||||
extern char g_iso_path[256];
|
extern char g_iso_path[256];
|
||||||
|
@@ -1099,6 +1099,7 @@ static grub_err_t ventoy_linux_locate_initrd(int filt, int *filtcnt)
|
|||||||
if (filtbysize
|
if (filtbysize
|
||||||
&& (NULL == grub_strstr(node->name, "minirt.gz"))
|
&& (NULL == grub_strstr(node->name, "minirt.gz"))
|
||||||
&& (NULL == grub_strstr(node->name, "initrd.xz"))
|
&& (NULL == grub_strstr(node->name, "initrd.xz"))
|
||||||
|
&& (NULL == grub_strstr(node->name, "initrd.gz"))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (filt > 0 && file->size <= g_ventoy_cpio_size + 2048)
|
if (filt > 0 && file->size <= g_ventoy_cpio_size + 2048)
|
||||||
|
@@ -504,7 +504,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
vhd_footer_t vhdfoot;
|
vhd_footer_t vhdfoot;
|
||||||
VDIPREHEADER vdihdr;
|
VDIPREHEADER vdihdr;
|
||||||
char type[16] = {0};
|
char type[16] = {0};
|
||||||
ventoy_gpt_info *gpt;
|
ventoy_gpt_info *gpt = NULL;
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
|
|
||||||
@@ -536,12 +536,25 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
{
|
{
|
||||||
grub_file_seek(file, 0);
|
grub_file_seek(file, 0);
|
||||||
grub_file_read(file, &vdihdr, sizeof(vdihdr));
|
grub_file_read(file, &vdihdr, sizeof(vdihdr));
|
||||||
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE &&
|
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE)
|
||||||
grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO, grub_strlen(VDI_IMAGE_FILE_INFO)) == 0)
|
{
|
||||||
|
grub_snprintf(type, sizeof(type), "vdi");
|
||||||
|
if (grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO, grub_strlen(VDI_IMAGE_FILE_INFO)) == 0)
|
||||||
{
|
{
|
||||||
offset = 2 * 1048576;
|
offset = 2 * 1048576;
|
||||||
g_img_trim_head_secnum = offset / 512;
|
g_img_trim_head_secnum = offset / 512;
|
||||||
grub_snprintf(type, sizeof(type), "vdi");
|
debug("VDI V1\n");
|
||||||
|
}
|
||||||
|
else if (grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO2, grub_strlen(VDI_IMAGE_FILE_INFO2)) == 0)
|
||||||
|
{
|
||||||
|
offset = 2 * 1048576;
|
||||||
|
g_img_trim_head_secnum = offset / 512;
|
||||||
|
debug("VDI V2\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("invalid file info <%s>\n", vdihdr.szFileInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -568,7 +581,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
if (gpt->MBR.Byte55 != 0x55 || gpt->MBR.ByteAA != 0xAA)
|
if (gpt->MBR.Byte55 != 0x55 || gpt->MBR.ByteAA != 0xAA)
|
||||||
{
|
{
|
||||||
grub_env_set(args[1], "unknown");
|
grub_env_set(args[1], "unknown");
|
||||||
debug("invalid mbr signature: 0x%x 0x%x\n", gpt->MBR.Byte55, gpt->MBR.ByteAA);
|
debug("invalid mbr signature: 0x%x 0x%x offset=%d\n", gpt->MBR.Byte55, gpt->MBR.ByteAA, offset);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
$BUSYBOX_PATH/mkdir /dev
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
$BUSYBOX_PATH/mknod -m 660 /dev/console b 5 1
|
$BUSYBOX_PATH/mknod -m 660 /dev/console c 5 1
|
||||||
|
|
||||||
$SED "/for device in/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/aryalinux/disk_hook.sh" -i /init
|
$SED "/for device in/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/aryalinux/disk_hook.sh" -i /init
|
||||||
#$SED "/for device in/i exec $BUSYBOX_PATH/sh" -i /init
|
#$SED "/for device in/i exec $BUSYBOX_PATH/sh" -i /init
|
||||||
|
@@ -40,13 +40,13 @@ ventoy_os_install_dmsetup_by_unsquashfs() {
|
|||||||
|
|
||||||
dmModPath="/usr/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
dmModPath="/usr/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
||||||
echo $dmModPath > $VTOY_PATH/fsextract
|
echo $dmModPath > $VTOY_PATH/fsextract
|
||||||
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk 2>>$VTLOG
|
||||||
|
|
||||||
if ! [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
if ! [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
||||||
rm -rf $VTOY_PATH/sqfs
|
rm -rf $VTOY_PATH/sqfs
|
||||||
dmModPath="/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
dmModPath="/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
||||||
echo $dmModPath > $VTOY_PATH/fsextract
|
echo $dmModPath > $VTOY_PATH/fsextract
|
||||||
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk 2>>$VTLOG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
if [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
||||||
|
43
IMG/cpio/ventoy/hook/debian/devuan-disk.sh
Normal file
43
IMG/cpio/ventoy/hook/debian/devuan-disk.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
if is_ventoy_hook_finished; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
vtlog "####### $0 $* ########"
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
21
IMG/cpio/ventoy/hook/debian/devuan-hook.sh
Normal file
21
IMG/cpio/ventoy/hook/debian/devuan-hook.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
$SED "/Mount.*cdrom/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/devuan-disk.sh" -i /init
|
||||||
|
|
@@ -37,12 +37,20 @@ ventoy_os_install_dmsetup_by_fuse() {
|
|||||||
|
|
||||||
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
||||||
|
|
||||||
|
if ls $VTOY_PATH/mnt/iso/zdrv_*.sfs 2>/dev/null; then
|
||||||
|
sfsfile=$(ls $VTOY_PATH/mnt/iso/zdrv_*.sfs)
|
||||||
|
else
|
||||||
sfsfile=$(ls $VTOY_PATH/mnt/iso/*.sfs)
|
sfsfile=$(ls $VTOY_PATH/mnt/iso/*.sfs)
|
||||||
|
fi
|
||||||
|
|
||||||
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
||||||
|
|
||||||
kVer=$(uname -r)
|
kVer=$(uname -r)
|
||||||
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$kVer/kernel/drivers/md/dm-mod.ko*)
|
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$kVer/kernel/drivers/md/dm-mod.ko*)
|
||||||
|
if [ -z "$KoName" ]; then
|
||||||
|
KoName=$(ls $VTOY_PATH/mnt/squashfs/usr/lib/modules/$kVer/kernel/drivers/md/dm-mod.ko*)
|
||||||
|
fi
|
||||||
|
|
||||||
vtlog "insmod $KoName"
|
vtlog "insmod $KoName"
|
||||||
insmod $KoName
|
insmod $KoName
|
||||||
|
|
||||||
|
25
IMG/cpio/ventoy/hook/debian/truenas-bottom.sh
Normal file
25
IMG/cpio/ventoy/hook/debian/truenas-bottom.sh
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/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 "mount ventoy.iso"
|
||||||
|
mkdir -p /root/cdrom >>$VTLOG 2>&1
|
||||||
|
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso /root/cdrom >>$VTLOG 2>&1
|
||||||
|
|
52
IMG/cpio/ventoy/hook/debian/truenas-disk.sh
Normal file
52
IMG/cpio/ventoy/hook/debian/truenas-disk.sh
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/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_run_fuse() {
|
||||||
|
vtlog "ventoy_run_fuse $*"
|
||||||
|
|
||||||
|
mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_run_fuse $vtdiskname
|
||||||
|
|
||||||
|
if [ -f /ventoy/autoinstall ]; then
|
||||||
|
sh /ventoy/hook/default/auto_install_varexp.sh /ventoy/autoinstall
|
||||||
|
fi
|
27
IMG/cpio/ventoy/hook/debian/truenas-hook.sh
Normal file
27
IMG/cpio/ventoy/hook/debian/truenas-hook.sh
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/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 [ -e /init ] && $GREP -q '^mountroot$' /init; then
|
||||||
|
echo "Here before mountroot ..." >> $VTLOG
|
||||||
|
$SED "/^mountroot$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/truenas-disk.sh" -i /init
|
||||||
|
$SED "/^mountroot$/i\\export LIVEMEDIA=/dev/mapper/ventoy" -i /init
|
||||||
|
$SED "/^mountroot$/i\\export LIVE_MEDIA=/dev/mapper/ventoy" -i /init
|
||||||
|
$SED "/^mountroot$/i\\export FROMISO=$VTOY_PATH/mnt/fuse/ventoy.iso" -i /init
|
||||||
|
$SED "/exec *run-init/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/truenas-bottom.sh" -i /init
|
||||||
|
fi
|
@@ -28,6 +28,7 @@ vtlog "####### $0 $* ########"
|
|||||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
ventoy_os_install_dmsetup_by_fuse() {
|
ventoy_os_install_dmsetup_by_fuse() {
|
||||||
|
local drvdir=""
|
||||||
vtlog "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
|
mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
|
||||||
@@ -37,11 +38,13 @@ ventoy_os_install_dmsetup_by_fuse() {
|
|||||||
|
|
||||||
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
||||||
|
|
||||||
|
|
||||||
for sfsfile in $(ls $VTOY_PATH/mnt/iso/*drv_veket*.sfs); do
|
for sfsfile in $(ls $VTOY_PATH/mnt/iso/*drv_veket*.sfs); do
|
||||||
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
||||||
if [ -d $VTOY_PATH/mnt/squashfs/lib/modules ]; then
|
if [ -d $VTOY_PATH/mnt/squashfs/lib/modules ]; then
|
||||||
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
|
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
|
||||||
if [ -n "$KoName" -a -f $KoName ]; then
|
if [ -n "$KoName" -a -f $KoName ]; then
|
||||||
|
drvdir=$VTOY_PATH/mnt/squashfs/lib/modules/$2
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -49,11 +52,29 @@ ventoy_os_install_dmsetup_by_fuse() {
|
|||||||
umount $VTOY_PATH/mnt/squashfs
|
umount $VTOY_PATH/mnt/squashfs
|
||||||
done
|
done
|
||||||
|
|
||||||
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/dax/dax.ko*)
|
|
||||||
|
if [ -z "$drvdir" ]; then
|
||||||
|
vtlog "retry for usr/lib dir"
|
||||||
|
for sfsfile in $(ls $VTOY_PATH/mnt/iso/*drv_veket*.sfs); do
|
||||||
|
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
||||||
|
if [ -d $VTOY_PATH/mnt/squashfs/usr/lib/modules ]; then
|
||||||
|
KoName=$(ls $VTOY_PATH/mnt/squashfs/usr/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
|
||||||
|
if [ -n "$KoName" -a -f $KoName ]; then
|
||||||
|
drvdir=$VTOY_PATH/mnt/squashfs/usr/lib/modules/$2
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
umount $VTOY_PATH/mnt/squashfs
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
KoName=$(ls $drvdir/kernel/drivers/dax/dax.ko*)
|
||||||
vtlog "insmod $KoName"
|
vtlog "insmod $KoName"
|
||||||
insmod $KoName
|
insmod $KoName
|
||||||
|
|
||||||
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
|
KoName=$(ls $drvdir/kernel/drivers/md/dm-mod.ko*)
|
||||||
vtlog "insmod $KoName"
|
vtlog "insmod $KoName"
|
||||||
insmod $KoName
|
insmod $KoName
|
||||||
|
|
||||||
|
@@ -49,6 +49,8 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'mll'; return
|
echo 'mll'; return
|
||||||
elif $GREP -m1 -q 'stratodesk.com' /init; then
|
elif $GREP -m1 -q 'stratodesk.com' /init; then
|
||||||
echo 'stratodesk'; return
|
echo 'stratodesk'; return
|
||||||
|
elif $GREP -q "\bPVE\b" /init; then
|
||||||
|
echo 'pve'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -108,6 +110,14 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'pyabr'; return
|
echo 'pyabr'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e /devuan-logo.txt ]; then
|
||||||
|
echo 'devuan'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'truenas' /proc/version; then
|
||||||
|
echo 'truenas'; return
|
||||||
|
fi
|
||||||
|
|
||||||
echo 'default'
|
echo 'default'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
75
IMG/cpio/ventoy/hook/ewe/ventoy-disk.sh
Normal file
75
IMG/cpio/ventoy/hook/ewe/ventoy-disk.sh
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/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 $* ############"
|
||||||
|
|
||||||
|
if is_ventoy_hook_finished; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
|
blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||||
|
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
vtlog "blkdev_num=$blkdev_num vtDM=$vtDM ..."
|
||||||
|
|
||||||
|
while [ -n "Y" ]; do
|
||||||
|
if [ -b /dev/$vtDM ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
sleep 0.3
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
vtlog "ln -s /dev/$vtDM $1"
|
||||||
|
|
||||||
|
if [ -e "$1" ]; then
|
||||||
|
vtlog "$1 already exist"
|
||||||
|
else
|
||||||
|
ln -s /dev/$vtDM "$1"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
vtLABEL=$($BUSYBOX_PATH/blkid /dev/$vtDM | $SED 's/.*LABEL="\([^"]*\)".*/\1/')
|
||||||
|
vtlog "vtLABEL is $vtLABEL"
|
||||||
|
|
||||||
|
if [ -z "$vtLABEL" ]; then
|
||||||
|
vtLABEL=$($SED "s/.*label=\([^ ]*\)/\1/" /proc/cmdline)
|
||||||
|
vtlog "vtLABEL is $vtLABEL from cmdline"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "/dev/disk/by-label/$vtLABEL" ]; then
|
||||||
|
vtlog "$1 already exist"
|
||||||
|
else
|
||||||
|
ln -s /dev/$vtDM "/dev/disk/by-label/$vtLABEL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# OK finish
|
||||||
|
set_ventoy_hook_finish
|
25
IMG/cpio/ventoy/hook/ewe/ventoy-hook.sh
Normal file
25
IMG/cpio/ventoy/hook/ewe/ventoy-hook.sh
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
|
echo "hook live.init" >> $VTLOG
|
||||||
|
|
||||||
|
$SED "1i $BUSYBOX_PATH/sh $VTOY_PATH/hook/ewe/ventoy-disk.sh" -i /lib/tinyramfs/hook.d/live/live.init
|
||||||
|
|
@@ -54,6 +54,21 @@ if [ -z "$dmsetup_path" ]; then
|
|||||||
ventoy_os_install_dmsetup "/dev/${1:0:-1}"
|
ventoy_os_install_dmsetup "/dev/${1:0:-1}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f /proc/devices ]; then
|
||||||
|
vtlog "/proc/devices exist OK"
|
||||||
|
else
|
||||||
|
for i in 1 2 3 4 5 6 7 8 9; do
|
||||||
|
if [ -f /proc/devices ]; then
|
||||||
|
vtlog "/proc/devices exist OK now"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
vtlog "/proc/devices NOT exist, wait $i"
|
||||||
|
$BUSYBOX_PATH/sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook $*
|
ventoy_udev_disk_common_hook $*
|
||||||
|
|
||||||
# OK finish
|
# OK finish
|
||||||
|
@@ -26,6 +26,12 @@ if [ -f $VTOY_PATH/autoinstall ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'rdinit=/vtoy/vtoy' /proc/cmdline; then
|
||||||
|
echo "remove rdinit param" >> $VTLOG
|
||||||
|
echo "ptoptions=+rdinit" >> /linuxrc.config
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if $BUSYBOX_PATH/ls $VTOY_PATH | $GREP -q 'ventoy_dud[0-9]'; then
|
if $BUSYBOX_PATH/ls $VTOY_PATH | $GREP -q 'ventoy_dud[0-9]'; then
|
||||||
if [ -f /linuxrc.config ]; then
|
if [ -f /linuxrc.config ]; then
|
||||||
vtKerVer=$($BUSYBOX_PATH/uname -r)
|
vtKerVer=$($BUSYBOX_PATH/uname -r)
|
||||||
@@ -60,7 +66,7 @@ fi
|
|||||||
if [ -e /etc/initrd.functions ] && $GREP -q 'HPIP' /etc/initrd.functions; then
|
if [ -e /etc/initrd.functions ] && $GREP -q 'HPIP' /etc/initrd.functions; then
|
||||||
echo "HPIP" >> $VTLOG
|
echo "HPIP" >> $VTLOG
|
||||||
$BUSYBOX_PATH/mkdir /dev
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
$BUSYBOX_PATH/mknod -m 660 /dev/console b 5 1
|
$BUSYBOX_PATH/mknod -m 660 /dev/console c 5 1
|
||||||
$SED "/CD_DEVICES=/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/suse/disk_hook.sh" -i /etc/initrd.functions
|
$SED "/CD_DEVICES=/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/suse/disk_hook.sh" -i /etc/initrd.functions
|
||||||
$SED "/CD_DEVICES=/a CD_DEVICES=\"/dev/ventoy \$CD_DEVICES\"" -i /etc/initrd.functions
|
$SED "/CD_DEVICES=/a CD_DEVICES=\"/dev/ventoy \$CD_DEVICES\"" -i /etc/initrd.functions
|
||||||
elif [ -f /scripts/udev_setup ]; then
|
elif [ -f /scripts/udev_setup ]; then
|
||||||
|
@@ -45,6 +45,13 @@ fi
|
|||||||
# TinyCore linux distro doesn't contain dmsetup, we use aoe here
|
# TinyCore linux distro doesn't contain dmsetup, we use aoe here
|
||||||
sudo modprobe aoe aoe_iflist=lo
|
sudo modprobe aoe aoe_iflist=lo
|
||||||
if [ -e /sys/module/aoe ]; then
|
if [ -e /sys/module/aoe ]; then
|
||||||
|
|
||||||
|
if ! [ -d /lib64 ]; then
|
||||||
|
vtlog "link lib64"
|
||||||
|
NEED_UNLIB64=1
|
||||||
|
ln -s /lib /lib64
|
||||||
|
fi
|
||||||
|
|
||||||
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
||||||
|
|
||||||
sudo nohup $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "$vtdiskname" > /dev/null &
|
sudo nohup $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "$vtdiskname" > /dev/null &
|
||||||
@@ -57,6 +64,11 @@ if [ -e /sys/module/aoe ]; then
|
|||||||
|
|
||||||
sudo cp -a /dev/etherd/e9.0 "$vPart"
|
sudo cp -a /dev/etherd/e9.0 "$vPart"
|
||||||
|
|
||||||
|
if [ -n "$NEED_UNLIB64" ]; then
|
||||||
|
vtlog "unlink lib64"
|
||||||
|
unlink /lib64
|
||||||
|
fi
|
||||||
|
|
||||||
ventoy_find_bin_run rebuildfstab
|
ventoy_find_bin_run rebuildfstab
|
||||||
else
|
else
|
||||||
vterr "aoe driver module load failed..."
|
vterr "aoe driver module load failed..."
|
||||||
|
@@ -64,6 +64,12 @@ is_ventoy_hook_finished() {
|
|||||||
|
|
||||||
set_ventoy_hook_finish() {
|
set_ventoy_hook_finish() {
|
||||||
echo 'Y' > $VTOY_PATH/hook_finish
|
echo 'Y' > $VTOY_PATH/hook_finish
|
||||||
|
|
||||||
|
if [ -f /ventoy/ventoy_iso_part_dm_cmd ]; then
|
||||||
|
echo "### create iso part raw dm" >> $VTLOG
|
||||||
|
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
|
||||||
|
$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
get_ventoy_disk_name() {
|
get_ventoy_disk_name() {
|
||||||
@@ -209,8 +215,17 @@ ventoy_check_dm_module() {
|
|||||||
vtlog "modprobe failed, now try to insmod ko..."
|
vtlog "modprobe failed, now try to insmod ko..."
|
||||||
|
|
||||||
$FIND /lib/modules/ -name "dm-mod.ko*" | while read vtline; do
|
$FIND /lib/modules/ -name "dm-mod.ko*" | while read vtline; do
|
||||||
vtlog "insmode $vtline "
|
vtlog "insmod $vtline "
|
||||||
$BUSYBOX_PATH/insmod $vtline >>$VTLOG 2>&1
|
$BUSYBOX_PATH/insmod $vtline >>$VTLOG 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
vtlog "insmod success"
|
||||||
|
else
|
||||||
|
vtlog "insmod failed, try decompress"
|
||||||
|
if echo $vtline | $GREP -q "\.zst"; then
|
||||||
|
$VTOY_PATH/tool/zstdcat $vtline > $VTOY_PATH/extract_dm_mod.ko
|
||||||
|
$BUSYBOX_PATH/insmod $VTOY_PATH/extract_dm_mod.ko >>$VTLOG 2>&1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -223,211 +238,6 @@ ventoy_check_dm_module() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_need_proc_ibt() {
|
|
||||||
vtKv=$($BUSYBOX_PATH/uname -r)
|
|
||||||
vtMajor=$(echo $vtKv | $AWK -F. '{print $1}')
|
|
||||||
vtMinor=$(echo $vtKv | $AWK -F. '{print $2}')
|
|
||||||
|
|
||||||
#ibt was supported since linux kernel 5.18
|
|
||||||
if [ $vtMajor -lt 5 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
elif [ $vtMajor -eq 5 ]; then
|
|
||||||
if [ $vtMajor -lt 18 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q ' ibt=off' /proc/cmdline; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
#hardware CPU doesn't support IBT
|
|
||||||
if $VTOY_PATH/tool/vtoykmod -I; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
#dot.CONFIG not enabled
|
|
||||||
if $GREP -q ' ibt_restore$' /proc/kallsyms; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
$BUSYBOX_PATH/true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ventoy_need_dm_patch() {
|
|
||||||
if [ "$VTOY_LINUX_REMOUNT" != "01" ]; then
|
|
||||||
if $GREP -q 'VTOY_LINUX_REMOUNT=1' /proc/cmdline; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'device-mapper' /proc/devices; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
vtMajorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $1}')
|
|
||||||
vtMinorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $2}')
|
|
||||||
|
|
||||||
if [ $vtMajorVer -lt 3 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
elif [ $vtMajorVer -eq 3 -a $vtMinorVer -lt 10 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
$BUSYBOX_PATH/true
|
|
||||||
}
|
|
||||||
|
|
||||||
ventoy_dm_patch() {
|
|
||||||
vtMType=$($BUSYBOX_PATH/uname -m)
|
|
||||||
|
|
||||||
vtlog "######### ventoy_dm_patch ############"
|
|
||||||
|
|
||||||
if echo $vtMType | $EGREP -i -q "x86.64|amd64"; then
|
|
||||||
vtKoName=dm_patch_64.ko
|
|
||||||
elif echo $vtMType | $EGREP -i -q "i[3-6]86"; then
|
|
||||||
vtKoName=dm_patch_32.ko
|
|
||||||
else
|
|
||||||
vtlog "unsupported machine type $vtMType"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ventoy_need_proc_ibt; then
|
|
||||||
vtlog "need to proc IBT"
|
|
||||||
vtKoName=dm_patch_ibt_64.ko
|
|
||||||
vtIBT='0x8888'
|
|
||||||
else
|
|
||||||
vtlog "NO need to proc IBT"
|
|
||||||
vtIBT='0'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/tool/$vtKoName ]; then
|
|
||||||
vtlog "/ventoy/tool/$vtKoName exist OK"
|
|
||||||
else
|
|
||||||
vtlog "/ventoy/tool/$vtKoName NOT exist"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
$CAT /proc/kallsyms | $BUSYBOX_PATH/sort > $VTOY_PATH/kallsyms
|
|
||||||
|
|
||||||
if $GREP -m1 -q 'open_table_device.isra' $VTOY_PATH/kallsyms; then
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym open_table_device.isra $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get open_table_device.isra address $vtLine"
|
|
||||||
else
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym dm_get_table_device $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get dm_get_table_device address $vtLine"
|
|
||||||
fi
|
|
||||||
get_addr=$(echo $vtLine | $AWK '{print $1}')
|
|
||||||
get_size=$(echo $vtLine | $AWK '{print $2}')
|
|
||||||
|
|
||||||
if $GREP -m1 -q 'close_table_device.isra' $VTOY_PATH/kallsyms; then
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym close_table_device.isra $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get close_table_device.isra address $vtLine"
|
|
||||||
else
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym dm_put_table_device $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get dm_put_table_device address $vtLine"
|
|
||||||
fi
|
|
||||||
put_addr=$(echo $vtLine | $AWK '{print $1}')
|
|
||||||
put_size=$(echo $vtLine | $AWK '{print $2}')
|
|
||||||
|
|
||||||
ro_addr=$($GREP ' set_memory_ro$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
rw_addr=$($GREP ' set_memory_rw$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
kprobe_reg_addr=$($GREP ' register_kprobe$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
kprobe_unreg_addr=$($GREP ' unregister_kprobe$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
|
|
||||||
if [ "$VTOY_DEBUG_LEVEL" = "01" ]; then
|
|
||||||
printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
if [ -z "$printk_addr" ]; then
|
|
||||||
printk_addr=$($GREP ' _printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
fi
|
|
||||||
vtDebug="-v"
|
|
||||||
else
|
|
||||||
printk_addr=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
#vtDebug="-v"
|
|
||||||
|
|
||||||
vtlog get_addr=$get_addr get_size=$get_size
|
|
||||||
vtlog put_addr=$put_addr put_size=$put_size
|
|
||||||
vtlog kprobe_reg_addr=$kprobe_reg_addr kprobe_unreg_addr=$kprobe_unreg_addr
|
|
||||||
vtlog ro_addr=$ro_addr rw_addr=$rw_addr printk_addr=$printk_addr
|
|
||||||
|
|
||||||
if [ "$get_addr" = "0" -o "$put_addr" = "0" ]; then
|
|
||||||
vtlog "Invalid symbol address"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if [ "$ro_addr" = "0" -o "$rw_addr" = "0" ]; then
|
|
||||||
vtlog "Invalid symbol address"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
vtKv=$($BUSYBOX_PATH/uname -r)
|
|
||||||
|
|
||||||
if [ ! -d /lib/modules/$vtKv ]; then
|
|
||||||
vtlog "No modules directory found"
|
|
||||||
return
|
|
||||||
elif [ -d /lib/modules/$vtKv/kernel/fs ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1)
|
|
||||||
else
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$vtModPath" ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "*.ko*" | $HEAD -n1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
vtModName=$($BUSYBOX_PATH/basename $vtModPath)
|
|
||||||
|
|
||||||
vtlog "template module is $vtModPath $vtModName"
|
|
||||||
|
|
||||||
if [ -z "$vtModPath" ]; then
|
|
||||||
vtlog "No template module found"
|
|
||||||
return
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko$"; then
|
|
||||||
$BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then
|
|
||||||
$BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko[.]gz$"; then
|
|
||||||
$BUSYBOX_PATH/zcat $vtModPath > $VTOY_PATH/$vtModName
|
|
||||||
else
|
|
||||||
vtlog "unsupport module type"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#step1: modify vermagic/mod crc/relocation
|
|
||||||
vtlog "$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug"
|
|
||||||
$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug
|
|
||||||
|
|
||||||
#step2: fill parameters
|
|
||||||
vtPgsize=$($VTOY_PATH/tool/vtoyksym -p)
|
|
||||||
vtlog "$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtKv $vtIBT $vtDebug"
|
|
||||||
$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtKv $vtIBT $vtDebug
|
|
||||||
|
|
||||||
$BUSYBOX_PATH/insmod $VTOY_PATH/tool/$vtKoName
|
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
echo "done" > $VTOY_PATH/dm_patch_done
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
create_ventoy_device_mapper() {
|
create_ventoy_device_mapper() {
|
||||||
vtlog "create_ventoy_device_mapper $*"
|
vtlog "create_ventoy_device_mapper $*"
|
||||||
@@ -447,17 +257,7 @@ create_ventoy_device_mapper() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
|
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
|
||||||
|
$VTOY_PATH/tool/vtoydm -r -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_raw_table
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if ventoy_need_dm_patch; then
|
|
||||||
ventoy_dm_patch
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$2" ]; then
|
if [ -z "$2" ]; then
|
||||||
$VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||||
@@ -465,10 +265,8 @@ create_ventoy_device_mapper() {
|
|||||||
$VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ventoy_need_dm_patch; then
|
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
|
||||||
#recover printk level
|
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
create_persistent_device_mapper() {
|
create_persistent_device_mapper() {
|
||||||
@@ -489,23 +287,7 @@ create_persistent_device_mapper() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table
|
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table
|
||||||
|
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
$VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#recover printk level
|
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -799,11 +581,6 @@ ventoy_udev_disk_common_hook() {
|
|||||||
create_persistent_device_mapper "/dev/$VTDISK"
|
create_persistent_device_mapper "/dev/$VTDISK"
|
||||||
ventoy_create_persistent_link
|
ventoy_create_persistent_link
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
vtlog "remove dm_patch module."
|
|
||||||
$BUSYBOX_PATH/rmmod dm_patch
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_create_dev_ventoy_part() {
|
ventoy_create_dev_ventoy_part() {
|
||||||
@@ -812,16 +589,6 @@ ventoy_create_dev_ventoy_part() {
|
|||||||
|
|
||||||
if [ -e /vtoy_dm_table ]; then
|
if [ -e /vtoy_dm_table ]; then
|
||||||
vtPartid=1
|
vtPartid=1
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
$CAT /vtoy_dm_table | while read vtline; do
|
$CAT /vtoy_dm_table | while read vtline; do
|
||||||
echo $vtline > /ventoy/dm_table_part${vtPartid}
|
echo $vtline > /ventoy/dm_table_part${vtPartid}
|
||||||
$VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
|
$VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
|
||||||
@@ -831,11 +598,6 @@ ventoy_create_dev_ventoy_part() {
|
|||||||
|
|
||||||
vtPartid=$(expr $vtPartid + 1)
|
vtPartid=$(expr $vtPartid + 1)
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#recover printk level
|
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -73,7 +73,12 @@ ventoy_unpack_initramfs() {
|
|||||||
for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat' '4C5A lunzip -c'; do
|
for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat' '4C5A lunzip -c'; do
|
||||||
if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
|
if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
|
||||||
echo "vtx=$vtx" >> $VTLOG
|
echo "vtx=$vtx" >> $VTLOG
|
||||||
if [ $vtskip -eq 0 ]; then
|
if [ $vtskip -ne 0 ]; then
|
||||||
|
dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none > ${vtfile}.skip
|
||||||
|
rm -f $vtfile
|
||||||
|
mv ${vtfile}.skip $vtfile
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "${vtx:5}" = "xzcat" ]; then
|
if [ "${vtx:5}" = "xzcat" ]; then
|
||||||
rm -f $VTOY_PATH/xzlog
|
rm -f $VTOY_PATH/xzlog
|
||||||
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
@@ -90,9 +95,6 @@ ventoy_unpack_initramfs() {
|
|||||||
else
|
else
|
||||||
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none | ${vtx:5} | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
|
||||||
fi
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -112,6 +114,28 @@ ventoy_unpack_initrd() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vtfile_head_zero() {
|
||||||
|
local vsize
|
||||||
|
local voffset
|
||||||
|
local vfile
|
||||||
|
local vzero
|
||||||
|
local vdump
|
||||||
|
|
||||||
|
voffset=0
|
||||||
|
vfile=$1
|
||||||
|
vsize=$(stat -c '%s' ${vfile})
|
||||||
|
vzero=$(hexdump -n 512 -e '512/1 "%02X"' $vfile)
|
||||||
|
|
||||||
|
while [ $voffset -lt $vsize ]; do
|
||||||
|
vdump=$(hexdump -s $voffset -n 512 -e '512/1 "%02X"' $vfile)
|
||||||
|
if [ "$vdump" != "$vzero" ]; then
|
||||||
|
echo $voffset
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
voffset=$($BUSYBOX_PATH/expr $voffset + 512)
|
||||||
|
done
|
||||||
|
echo 0
|
||||||
|
}
|
||||||
|
|
||||||
# This export is for busybox cpio command
|
# This export is for busybox cpio command
|
||||||
export EXTRACT_UNSAFE_SYMLINKS=1
|
export EXTRACT_UNSAFE_SYMLINKS=1
|
||||||
@@ -131,14 +155,23 @@ for vtfile in $(ls /initrd*); do
|
|||||||
#only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
|
#only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
|
||||||
while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
|
while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
|
||||||
mv ${vtfile}_tmp $vtfile
|
mv ${vtfile}_tmp $vtfile
|
||||||
|
|
||||||
vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
|
vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
|
||||||
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
||||||
let vtoffset="(${#vtdump}-${#vtmagic})/2"
|
let vtoffset="(${#vtdump}-${#vtmagic})/2"
|
||||||
|
|
||||||
if [ -z "$vtmagic" ]; then
|
if [ -z "$vtmagic" ]; then
|
||||||
|
vtHeadZero=$(vtfile_head_zero $vtfile)
|
||||||
|
if [ $vtHeadZero -gt 0 ]; then
|
||||||
|
vtdump=$(hexdump -s $vtHeadZero -n 512 -e '512/1 "%02X"' $vtfile)
|
||||||
|
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
||||||
|
let vtoffset="(${#vtdump}-${#vtmagic})/2+$vtHeadZero"
|
||||||
|
echo "skip head $vtHeadZero zeros with magic ${vtmagic:0:4}" >> $VTLOG
|
||||||
|
else
|
||||||
echo "terminate with all zero data file" >> $VTLOG
|
echo "terminate with all zero data file" >> $VTLOG
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
|
ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
|
||||||
done
|
done
|
||||||
|
@@ -39,35 +39,6 @@ fi
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
ventoy_create_dev_ventoy_part
|
ventoy_create_dev_ventoy_part
|
||||||
|
|
||||||
if ventoy_need_dm_patch; then
|
|
||||||
vtlog "extract a ko file"
|
|
||||||
|
|
||||||
mkdir -p /ventoy/tmpmnt1 /ventoy/tmpmnt2
|
|
||||||
mount /dev/ventoy1 /ventoy/tmpmnt1
|
|
||||||
mount /ventoy/tmpmnt1/boot/batocera /ventoy/tmpmnt2
|
|
||||||
vtKV=$(uname -r)
|
|
||||||
|
|
||||||
mkdir -p /lib/modules/$vtKV/kernel/
|
|
||||||
vtKO=$(find "/ventoy/tmpmnt2/lib/modules/$vtKV/kernel/fs/" -name "*.ko*" | head -n1)
|
|
||||||
cp -a $vtKO /lib/modules/$vtKV/kernel/
|
|
||||||
|
|
||||||
vtlog "vtKV=$vtKV vtKO=$vtKO"
|
|
||||||
|
|
||||||
umount /ventoy/tmpmnt2
|
|
||||||
umount /ventoy/tmpmnt1
|
|
||||||
|
|
||||||
vtPartid=1
|
|
||||||
cat /vtoy_dm_table | while read vtline; do
|
|
||||||
dmsetup remove ventoy$vtPartid
|
|
||||||
vtPartid=$(expr $vtPartid + 1)
|
|
||||||
done
|
|
||||||
dmsetup remove ventoy
|
|
||||||
|
|
||||||
vtlog "Recreate device-mapper"
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
|
||||||
ventoy_create_dev_ventoy_part
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
@@ -52,6 +52,11 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Parted Magic
|
||||||
|
if [ -d /pmagic ]; then
|
||||||
|
echo 'pmagic'; return
|
||||||
|
fi
|
||||||
|
|
||||||
# PrimeOS :
|
# PrimeOS :
|
||||||
if $GREP -q 'PrimeOS' /proc/version; then
|
if $GREP -q 'PrimeOS' /proc/version; then
|
||||||
echo 'primeos'; return
|
echo 'primeos'; return
|
||||||
@@ -237,10 +242,6 @@ ventoy_get_os_type() {
|
|||||||
echo 'adelie'; return
|
echo 'adelie'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'pmagic' /proc/version; then
|
|
||||||
echo 'pmagic'; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'CDlinux' /proc/cmdline; then
|
if $GREP -q 'CDlinux' /proc/cmdline; then
|
||||||
echo 'cdlinux'; return
|
echo 'cdlinux'; return
|
||||||
fi
|
fi
|
||||||
@@ -377,6 +378,20 @@ ventoy_get_os_type() {
|
|||||||
echo 'chimera'; return
|
echo 'chimera'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if $GREP -q '4.19.' /proc/version; then
|
||||||
|
if [ -d /lib/dracut/hooks ]; then
|
||||||
|
echo 'openEuler'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/tinyramfs/config ]; then
|
||||||
|
if $GREP -q 'EWE_ISO' /etc/tinyramfs/config; then
|
||||||
|
echo "ewe"; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "default"
|
echo "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -101,6 +101,11 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Parted Magic
|
||||||
|
if [ -d /pmagic ]; then
|
||||||
|
echo 'pmagic'; return
|
||||||
|
fi
|
||||||
|
|
||||||
# rhel5/CentOS5 and all other distributions based on them
|
# rhel5/CentOS5 and all other distributions based on them
|
||||||
if $GREP -q 'el5' /proc/version; then
|
if $GREP -q 'el5' /proc/version; then
|
||||||
echo 'rhel5'; return
|
echo 'rhel5'; return
|
||||||
@@ -269,10 +274,6 @@ ventoy_get_os_type() {
|
|||||||
echo 'adelie'; return
|
echo 'adelie'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'pmagic' /proc/version; then
|
|
||||||
echo 'pmagic'; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'CDlinux' /proc/cmdline; then
|
if $GREP -q 'CDlinux' /proc/cmdline; then
|
||||||
echo 'cdlinux'; return
|
echo 'cdlinux'; return
|
||||||
fi
|
fi
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,8 +4,9 @@ print_usage() {
|
|||||||
echo 'Usage: ExtendPersistentImg.sh file size'
|
echo 'Usage: ExtendPersistentImg.sh file size'
|
||||||
echo ' file persistent dat file'
|
echo ' file persistent dat file'
|
||||||
echo ' size extend size in MB'
|
echo ' size extend size in MB'
|
||||||
echo 'Example:'
|
echo 'Examples:'
|
||||||
echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048'
|
echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048 - This command would extend ubuntu.dat by 2048MB (2GB)'
|
||||||
|
echo ' sh ExtendPersistentImg.sh ubuntu.dat -2048 - This command reduces ubuntu.dat by 2048MB (-2GB)'
|
||||||
echo ''
|
echo ''
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,6 +20,11 @@ if [ -z "$2" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
uid=$(id -u)
|
||||||
|
if [ $uid -ne 0 ]; then
|
||||||
|
print_err "Please use sudo or run the script as root."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$1" = "__vbash__" ]; then
|
if [ "$1" = "__vbash__" ]; then
|
||||||
shift
|
shift
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -196,7 +196,7 @@ fi
|
|||||||
|
|
||||||
#change current directory to Ventoy disk
|
#change current directory to Ventoy disk
|
||||||
cd "$mtpnt"
|
cd "$mtpnt"
|
||||||
$OLDDIR/tool/$TOOLDIR/Plugson "$HOST" "$PORT" "$OLDDIR" "$DISK" $version "$fstype" $partstyle $secureboot &
|
"$OLDDIR/tool/$TOOLDIR/Plugson" "$HOST" "$PORT" "$OLDDIR" "$DISK" $version "$fstype" $partstyle $secureboot &
|
||||||
wID=$!
|
wID=$!
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -21,15 +21,6 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "[ $VTOY_LINUX_REMOUNT ] $VTLANG_LINUX_REMOUNT" --class=debug_temp_linux_remount --class=debug_temp_set --class=F5tool \
|
|
||||||
VTOY_RUN_SET2 {
|
|
||||||
if [ "$VTOY_LINUX_REMOUNT" = "0" ]; then
|
|
||||||
set VTOY_LINUX_REMOUNT=1
|
|
||||||
else
|
|
||||||
set VTOY_LINUX_REMOUNT=0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
||||||
VTOY_RUN_SET3 {
|
VTOY_RUN_SET3 {
|
||||||
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
||||||
|
@@ -33,6 +33,21 @@ function ventoy_debug_pause {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ventoy_max_resolution {
|
||||||
|
#Skip this for VirtualBox
|
||||||
|
smbios -t 1 -s 0x05 --set=system_product;
|
||||||
|
if vt_str_casebegin "$system_product" "VirtualBox"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
vt_enum_video_mode
|
||||||
|
vt_get_video_mode 0 vtCurMode
|
||||||
|
terminal_output console
|
||||||
|
set gfxmode=$vtCurMode
|
||||||
|
terminal_output gfxterm
|
||||||
|
}
|
||||||
|
|
||||||
function ventoy_cli_console {
|
function ventoy_cli_console {
|
||||||
if [ -z "$vtoy_display_mode" ]; then
|
if [ -z "$vtoy_display_mode" ]; then
|
||||||
terminal_output console
|
terminal_output console
|
||||||
@@ -403,10 +418,14 @@ function distro_specify_initrd_file_phase2 {
|
|||||||
vt_linux_specify_initrd_file /images/pxeboot/initrd.img
|
vt_linux_specify_initrd_file /images/pxeboot/initrd.img
|
||||||
elif [ -f (loop)/live/initrd ]; then
|
elif [ -f (loop)/live/initrd ]; then
|
||||||
vt_linux_specify_initrd_file /live/initrd
|
vt_linux_specify_initrd_file /live/initrd
|
||||||
|
elif [ -f (loop)/initramfs-linux.img ]; then
|
||||||
|
vt_linux_specify_initrd_file /initramfs-linux.img
|
||||||
|
elif [ -f (loop)/boot/isolinux/initrd.gz ]; then
|
||||||
|
vt_linux_specify_initrd_file /boot/isolinux/initrd.gz
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function ventoy_get_ghostbsd_ver {
|
function ventoy_get_ghostbsd_ver {
|
||||||
# fallback to parse version from elf /boot/kernel/kernel
|
# fallback to parse version from elf /boot/kernel/kernel
|
||||||
set vt_freebsd_ver=xx
|
set vt_freebsd_ver=xx
|
||||||
@@ -514,6 +533,13 @@ function ventoy_freebsd_proc {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$vt_freebsd_ver" = "14.x" ]; then
|
||||||
|
if [ -e (loop)/boot/lua/brand-pfSense.lua ]; then
|
||||||
|
set vtFreeBsdDistro=pfSense
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -n "${vtdebug_flag}" ]; then
|
if [ -n "${vtdebug_flag}" ]; then
|
||||||
echo "This is $vtFreeBsdDistro $vt_freebsd_ver ${vt_freebsd_bit}bit"
|
echo "This is $vtFreeBsdDistro $vt_freebsd_ver ${vt_freebsd_bit}bit"
|
||||||
fi
|
fi
|
||||||
@@ -620,7 +646,7 @@ function uefi_windows_menu_func {
|
|||||||
|
|
||||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||||
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
||||||
ventoy_cli_console
|
ventoy_max_resolution
|
||||||
chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.efi env_param=${env_param} isoefi=${LoadIsoEfiDriver} iso_${ventoy_fs_probe} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.efi env_param=${env_param} isoefi=${LoadIsoEfiDriver} iso_${ventoy_fs_probe} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||||
boot
|
boot
|
||||||
else
|
else
|
||||||
@@ -662,7 +688,7 @@ function uefi_linux_menu_func {
|
|||||||
if [ -d (loop)/pmagic ]; then
|
if [ -d (loop)/pmagic ]; then
|
||||||
vt_linux_specify_initrd_file /pmagic/initrd.img
|
vt_linux_specify_initrd_file /pmagic/initrd.img
|
||||||
else
|
else
|
||||||
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf" "/grub/grub.cfg"; do
|
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf" "/grub/grub.cfg" "EFI/BOOT/grub/grub.cfg"; do
|
||||||
if [ -e (loop)/$file ]; then
|
if [ -e (loop)/$file ]; then
|
||||||
vt_linux_parse_initrd_grub file (loop)/$file
|
vt_linux_parse_initrd_grub file (loop)/$file
|
||||||
fi
|
fi
|
||||||
@@ -1411,6 +1437,8 @@ function ventoy_iso_busybox_ver {
|
|||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
|
elif vt_str_begin "$vt_volume_id" "KAOS_"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -1889,6 +1917,12 @@ function ventoy_img_volumio {
|
|||||||
function ventoy_img_openelec {
|
function ventoy_img_openelec {
|
||||||
elec_ver=$1
|
elec_ver=$1
|
||||||
|
|
||||||
|
if [ "$elec_ver" = "LibreELEC" ]; then
|
||||||
|
if vt_strstr "$vt_chosen_name" "x86_64"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
|
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
|
||||||
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
|
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
|
||||||
|
|
||||||
@@ -2285,6 +2319,8 @@ function img_common_menuentry {
|
|||||||
if [ -z "$vtImgHd1Label" ]; then
|
if [ -z "$vtImgHd1Label" ]; then
|
||||||
if [ -d (vtimghd,2)/efi ]; then
|
if [ -d (vtimghd,2)/efi ]; then
|
||||||
vt_get_fs_label (vtimghd,3) vtImgHd3Label
|
vt_get_fs_label (vtimghd,3) vtImgHd3Label
|
||||||
|
elif [ -d (vtimghd,12)/efi ]; then
|
||||||
|
vt_get_fs_label (vtimghd,3) vtImgHd3Label
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2395,7 +2431,7 @@ function mimg_common_menuentry {
|
|||||||
#############################################################
|
#############################################################
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
set VENTOY_VERSION="1.0.93"
|
set VENTOY_VERSION="1.1.06"
|
||||||
|
|
||||||
#ACPI not compatible with Window7/8, so disable by default
|
#ACPI not compatible with Window7/8, so disable by default
|
||||||
set VTOY_PARAM_NO_ACPI=1
|
set VTOY_PARAM_NO_ACPI=1
|
||||||
|
@@ -1,19 +1,19 @@
|
|||||||
L - Nyelv kiválasztása
|
L - Nyelv kiválasztása
|
||||||
F1 - Jelenítse meg ezt a súgóinformációt
|
F1 - Súgóinformációk megjelenítése
|
||||||
F2 - A helyi lemezen lévő fájlok böngészése és indítása
|
F2 - Helyi lemezen lévő fájlok tallózása és indítása
|
||||||
F3 - Menü mód váltása Fanézet <-> Listanézet között
|
F3 - Menü mód váltása fanézet <-> listanézet között
|
||||||
F4 - Windows/Linux indítása helyi lemezről
|
F4 - Windows/Linux indítása a helyi lemezről
|
||||||
F5 - Segédprogramok
|
F5 - Segédprogramok
|
||||||
F6 - Egyéni Grub2 menü betöltése
|
F6 - Egyéni Grub2 menü betöltése
|
||||||
F7 - Váltás Grafikus mód <-> Szövege mód között
|
F7 - Váltás grafikus mód <-> szöveges mód között
|
||||||
|
|
||||||
m/Ctrl+m - Image fájlok ell.összege (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Lemezképfájlok ellenőrzőösszege (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Memdisk mód (Csak kis WinPE/LiveCD ISO/IMG esetén)
|
d/Ctrl+d - Memórialemez mód (csak kis WinPE/LiveCD ISO/IMG esetén)
|
||||||
w/Ctrl+w - WIMBOOT mód (Csak Windows/WinPE ISO esetében)
|
w/Ctrl+w - WIMBOOT mód (csak Windows/WinPE ISO esetén)
|
||||||
r/Ctrl+r - Grub2 mód (Csak néhány Linux disztró esetében)
|
r/Ctrl+r - Grub2 mód (csak néhány Linux disztribúció esetén)
|
||||||
i/Ctrl+i - Kompatibilis mód (Csak hibakeresésre)
|
i/Ctrl+i - Kompatibilis mód (csak hibakereséshez)
|
||||||
u/Ctrl+u - ISO efi driver betöltés (Csak hibakeresésre, hivatalosan nem használható.)
|
u/Ctrl+u - ISO EFI illesztőprogram betöltés (csak hibakereséshez, hivatalosan nem használható)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Nyomjon ESC-et a visszatéréshez ......
|
Nyomja meg az ESC billentyűt a visszalépéshez ......
|
19
INSTALL/grub/help/it_IT.txt
Normal file
19
INSTALL/grub/help/it_IT.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Selezione lingua interfaccia
|
||||||
|
F1 - Visualizza informazioni Aiuto (questa guida)
|
||||||
|
F2 - Sfoglia e avvia file nel disco locale
|
||||||
|
F3 - Cambia modalità menu tra VistaStruttura <-> VistaElenco
|
||||||
|
F4 - Avvia Windows/Linux dal disco locale
|
||||||
|
F5 - Utilità
|
||||||
|
F6 - Carica il menu Grub2 personalizzato
|
||||||
|
F7 - Cambia modalità GUI <-> modalità TESTO
|
||||||
|
|
||||||
|
m/Ctrl+m - Checksum file immagine (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Modalità Memdisk (solo per i file ISO/IMG WinPE/LiveCD piccoli)
|
||||||
|
w/Ctrl+w - Modalità WIMBOOT (solo per i file ISO Windows/WinPE)
|
||||||
|
r/Ctrl+r - Modalità Grub2 (solo per alcune distro Linux)
|
||||||
|
i/Ctrl+i - Modalità Compatibile (solo per debugging)
|
||||||
|
u/Ctrl+u - Carica driver EFI ISO (solo per debugging, non usato ufficialmente)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Premi 'ESC' per continuare...
|
19
INSTALL/grub/help/pt_BR.txt
Normal file
19
INSTALL/grub/help/pt_BR.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Sele<6C><65>o de Idiomas
|
||||||
|
F1 - Exibir informa<6D><61>es de ajuda
|
||||||
|
F2 - Explorar e inicializar os arquivos no disco local
|
||||||
|
F3 - Trocar o modo do menu entre Visualiza<7A><61>o em <20>rvore <-> Visualiza<7A><61>o em Lista
|
||||||
|
F4 - Inicializar o Windows/Linux no disco local
|
||||||
|
F5 - Utilit<69>rios
|
||||||
|
F6 - Carregar o Menu Personalizado do Grub2
|
||||||
|
F7 - Trocar entre o Modo GUI <-> Modo TEXTO
|
||||||
|
|
||||||
|
m/Ctrl+m - Checksum dos arquivos de imagem (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Modo Memdisk (S<> pros pequenos WinPE/LiveCD ISO/IMG)
|
||||||
|
w/Ctrl+w - Modo WIMBOOT (S<> pra arquivos ISO do Windows/WinPE)
|
||||||
|
r/Ctrl+r - Modo Grub2 (S<> pra algumas distros do Linux)
|
||||||
|
i/Ctrl+i - Modo Compat<61>vel (S<> pra debugging)
|
||||||
|
u/Ctrl+u - Carregar o driver EFI da ISO (S<> pra debugging, n<>o pode ser usado oficialmente)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pressione ESC pra retornar...
|
@@ -1,19 +1,19 @@
|
|||||||
L - Dil Seçimi
|
L - Dil Seçimi
|
||||||
F1 - Yardım bilgilerini göster
|
F1 - Yardım bilgilerini göster
|
||||||
F2 - Yerel diskteki önyükleme dosyalarına GÖZAT ve Önyükleme yap
|
F2 - Yerel diskteki önyükleme dosyalarına göz at ve önyükleme yap
|
||||||
F3 - Menü modunu Ağaç Görünümü <-> Liste Görünümü arasında değiştir
|
F3 - Menü modunu Ağaç Görünümü <-> Liste Görünümü arasında değiştir
|
||||||
F4 - Windows & Linux'u yerel diskten önyükle
|
F4 - Windows & Linux'u yerel diskten önyükle
|
||||||
F5 - Ventoy Araçlar menüsü
|
F5 - Ventoy araçlar menüsü
|
||||||
F6 - Özelleştirilmiş Grub2 menüsünü yükle
|
F6 - Özelleştirilmiş Grub2 menüsünü yükle
|
||||||
F7 - Grafik(GUI) <--> Metin(Text) modları arasında geçiş yap
|
F7 - Grafik(GUI) <--> Metin(Text) modları arasında geçiş yap
|
||||||
|
|
||||||
m/Ctrl+m - Görüntü dosyalarını sağlama toplamı (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Görüntü dosyalarının sağlama toplamını al (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Memdisk Modu başlat(Yalnızca küçük WinPE/LiveCD ISO/IMG ler için)
|
d/Ctrl+d - Memdisk Modunu başlat(Yalnızca küçük WinPE/LiveCD ISO/IMG'ler için)
|
||||||
w/Ctrl+w - WIMBOOT Modu başlat(Yalnızca normal Windows/WinPE ISO ları için)
|
w/Ctrl+w - WIMBOOT Modunu başlat(Yalnızca normal Windows/WinPE ISO'ları için)
|
||||||
r/Ctrl+r - Grub2 Modu başlat (Yalnızca bazı Linux dağıtımları için)
|
r/Ctrl+r - Grub2 Modunu başlat (Yalnızca bazı Linux dağıtımları için)
|
||||||
i/Ctrl+i - Uyumluluk Modu (Yalnızca hata ayıklama için )
|
i/Ctrl+i - Uyumluluk Modu (Yalnızca hata ayıklama için)
|
||||||
u/Ctrl+u - ISO efi sürücüsünü yükle (Saedece hata ayıklama için, resmi olarak kullanılamaz)
|
u/Ctrl+u - ISO EFI sürücüsünü yükle (Sadece hata ayıklama için, resmi olarak kullanılamaz)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Geriye dönmek için ESC tuşuna basınız......
|
Geri dönmek için ESC tuşuna basınız ......
|
||||||
|
@@ -7,12 +7,12 @@ F5 - Інструменти
|
|||||||
F6 - Завантажити Custom Grub2 меню
|
F6 - Завантажити Custom Grub2 меню
|
||||||
F7 - Переключитись між графічним інтерфейсом <-> текстовим інтерфейсом
|
F7 - Переключитись між графічним інтерфейсом <-> текстовим інтерфейсом
|
||||||
|
|
||||||
m/Ctrl+m - Контрольна сума образу диску (md5/sha1/sha256/sha512)
|
m/Ctrl + m - Контрольна сума образу диску (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Режим Memdisk (Тільки для невеликих образів WinPE/LiveCD ISO/IMG)
|
d/Ctrl + d - Режим Memdisk (Тільки для невеликих образів WinPE/LiveCD ISO/IMG)
|
||||||
w/Ctrl+w - Режим WIMBOOT (Тільки для ISO-файлів Windows/WinPE)
|
w/Ctrl + w - Режим WIMBOOT (Тільки для ISO-файлів Windows/WinPE)
|
||||||
r/Ctrl+r - Режим Grub2 (Тільки для деяких дистрибутивів Linux)
|
r/Ctrl + r - Режим Grub2 (Тільки для деяких дистрибутивів Linux)
|
||||||
i/Ctrl+i - Сумісний режим (Тільки для зневадження)
|
i/Ctrl + i - Сумісний режим (Тільки для зневадження)
|
||||||
u/Ctrl+u - Завантажити драйвер ISO EFI (Тільки для зневадження, не офіційно)
|
u/Ctrl + u - Завантажити драйвер ISO EFI (Тільки для зневадження, не офіційно)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
19
INSTALL/grub/help/vi_VN.txt
Normal file
19
INSTALL/grub/help/vi_VN.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Lựa chọn ngôn ngữ
|
||||||
|
F1 - Hiển thị thông tin trợ giúp
|
||||||
|
F2 - Duyệt tìm và khởi động tệp từ ổ đĩa trên máy
|
||||||
|
F3 - Chuyển đổi chế độ bảng chọn giữa dạng cây <-> dạng danh sách.
|
||||||
|
F4 - Khởi động Windows hoặc GNU/Linux trên đĩa cục bộ
|
||||||
|
F5 - Các tiện ích
|
||||||
|
F6 - Tải menu GRUB2 tuỳ chọn
|
||||||
|
F7 - Chuyển giữa giao diện đồ hoạ <-> giao diện văn bản
|
||||||
|
|
||||||
|
m/Ctrl+m - Checksum các tệp ảnh đĩa (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Chế độ Memdisk (Chỉ dùng cho các tệp ISO/IMG WinPE/LiveCD có kích thước nhỏ)
|
||||||
|
w/Ctrl+w - Chế độ WIMBOOT (Chỉ dùng cho các tệp ISO Windows/WinPE)
|
||||||
|
r/Ctrl+r - Chế độ Grub2 (Chỉ dùng cho một vài bản phân phối của GNU/Linux)
|
||||||
|
i/Ctrl+i - Chế độ tương thích (Chỉ dùng cho việc sửa lỗi)
|
||||||
|
u/Ctrl+u - Tải ISO của một driver EFI (Chỉ dùng cho việc sửa lỗi, không thể dùng chính thức)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Nhấn ESC để quay lại ......
|
@@ -201,7 +201,7 @@ cbmemc: cbtable normal terminfo
|
|||||||
hfsplus: fshelp
|
hfsplus: fshelp
|
||||||
gcry_cast5: crypto
|
gcry_cast5: crypto
|
||||||
extcmd:
|
extcmd:
|
||||||
squash4: fshelp lzopio zfs xzio gzio
|
squash4: fshelp zstd lzopio zfs xzio gzio
|
||||||
part_plan:
|
part_plan:
|
||||||
minix_be:
|
minix_be:
|
||||||
gcry_whirlpool: crypto
|
gcry_whirlpool: crypto
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -83,7 +83,7 @@ gfxterm_background: video_colors bitmap_scale gfxterm extcmd video bitmap
|
|||||||
search_fs_uuid:
|
search_fs_uuid:
|
||||||
gcry_dsa: pgp mpi
|
gcry_dsa: pgp mpi
|
||||||
keystatus: extcmd
|
keystatus: extcmd
|
||||||
linux: ventoy verifiers normal vbe video boot relocator mmap
|
linux: ventoy verifiers vbe normal video boot relocator mmap
|
||||||
geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
|
geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
|
||||||
cmdline_cat_test: font functional_test normal procfs video_fb
|
cmdline_cat_test: font functional_test normal procfs video_fb
|
||||||
rdmsr: extcmd
|
rdmsr: extcmd
|
||||||
@@ -124,7 +124,7 @@ crypto:
|
|||||||
part_bsd: part_msdos
|
part_bsd: part_msdos
|
||||||
cs5536: pci
|
cs5536: pci
|
||||||
biosdisk:
|
biosdisk:
|
||||||
ventoy: ext2 fshelp elf btrfs crypto font gcry_md5 exfat udf div extcmd datetime normal video gcry_sha1 iso9660 acpi
|
ventoy: ext2 fshelp elf btrfs crypto font gcry_md5 exfat udf div extcmd datetime normal video gcry_sha1 iso9660 reboot acpi
|
||||||
lsapm:
|
lsapm:
|
||||||
gcry_sha512: crypto
|
gcry_sha512: crypto
|
||||||
password: crypto normal
|
password: crypto normal
|
||||||
@@ -208,7 +208,7 @@ cmosdump:
|
|||||||
hfsplus: fshelp
|
hfsplus: fshelp
|
||||||
gcry_cast5: crypto
|
gcry_cast5: crypto
|
||||||
extcmd:
|
extcmd:
|
||||||
squash4: fshelp lzopio zfs xzio gzio
|
squash4: fshelp zstd lzopio zfs xzio gzio
|
||||||
part_plan:
|
part_plan:
|
||||||
minix_be:
|
minix_be:
|
||||||
gcry_whirlpool: crypto
|
gcry_whirlpool: crypto
|
||||||
|
Binary file not shown.
@@ -1,12 +1,14 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Arabic (العربية)",
|
"VTLANG_LANGUAGE_NAME": "Arabic (العربية)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L: لغه F1: مساعدة F2: تصفح F3: عرض قائمه F4: اقلا محلي F5: أدوات F6: عوده",
|
"VTLANG_STR_HOTKEY_LIST": "L: لغة F1: مساعدة F2: تصفح F3: عرض لائحي F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L: لغه F1: مساعدة F2: تصفح F3: عرض تصنيف F4: اقلاع محلي F5: أدوات F6: عوده",
|
"VTLANG_STR_HOTKEY_TREE": "L: لغة F1: مساعدة F2: تصفح F3: عرض شجري F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||||
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
||||||
|
|
||||||
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
||||||
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز",
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على Windows",
|
||||||
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
||||||
"VTLANG_LB_SBOOT_HDD1": "الإقلاع على القرص المحلي الأول",
|
"VTLANG_LB_SBOOT_HDD1": "الإقلاع على القرص المحلي الأول",
|
||||||
"VTLANG_LB_SBOOT_HDD2": "الإقلاع على القرص المحلي الثاني",
|
"VTLANG_LB_SBOOT_HDD2": "الإقلاع على القرص المحلي الثاني",
|
||||||
@@ -15,32 +17,39 @@
|
|||||||
"VTLANG_LB_SBOOT_IA32EFI": "البحث والإقلاع على BOOTIA32.EFI",
|
"VTLANG_LB_SBOOT_IA32EFI": "البحث والإقلاع على BOOTIA32.EFI",
|
||||||
"VTLANG_LB_SBOOT_AA64EFI": "البحث والإقلاع على BOOTAA64.EFI",
|
"VTLANG_LB_SBOOT_AA64EFI": "البحث والإقلاع على BOOTAA64.EFI",
|
||||||
"VTLANG_LB_SBOOT_XORBOOT": "البحث والإقلاع على xorboot",
|
"VTLANG_LB_SBOOT_XORBOOT": "البحث والإقلاع على xorboot",
|
||||||
"VTLANG_FILE_CHKSUM": "مجموعة التحقق من الملفات",
|
|
||||||
"VTLANG_CHKSUM_MD5_CALC": "حساب md5sum",
|
"VTLANG_FILE_CHKSUM": "تدقيق المجموع للملف",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC": "حساب sha1sum",
|
"VTLANG_CHKSUM_MD5_CALC": "احسب md5sum",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC": "حساب sha256sum",
|
"VTLANG_CHKSUM_SHA1_CALC": "احسب sha1sum",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC": "حساب sha512sum",
|
"VTLANG_CHKSUM_SHA256_CALC": "احسب sha256sum",
|
||||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "حساب وتحقق md5sum",
|
"VTLANG_CHKSUM_SHA512_CALC": "احسب sha512sum",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "حساب وتحقق sha1sum",
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "احسب وتحقق md5sum",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "حساب وتحقق sha256sum",
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "احسب وتحقق sha1sum",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "حساب وتحقق sha512sum",
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "احسب وتحقق sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "احسب وتحقق sha512sum",
|
||||||
|
|
||||||
"VTLANG_POWER": "الطاقة",
|
"VTLANG_POWER": "الطاقة",
|
||||||
"VTLANG_POWER_REBOOT": "إعادة التشغيل",
|
"VTLANG_POWER_REBOOT": "إعادة التشغيل",
|
||||||
"VTLANG_POWER_HALT": "إيقاف",
|
"VTLANG_POWER_HALT": "إيقاف",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "إعادة التشغيل إلى إعداد EFI",
|
"VTLANG_POWER_BOOT_EFIFW": "إعادة التشغيل إلى إعداد EFI",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "تخطيطات لوحة المفاتيح",
|
"VTLANG_KEYBRD_LAYOUT": "تخطيطات لوحة المفاتيح",
|
||||||
"VTLANG_HWINFO": "معلومات الأجهزة الأساسية",
|
"VTLANG_HWINFO": "معلومات حول العتاد",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "تكوين الدقة",
|
"VTLANG_RESOLUTION_CFG": "تكوين الدقة",
|
||||||
"VTLANG_SCREEN_MODE": "وضع عرض الشاشة",
|
"VTLANG_SCREEN_MODE": "وضع عرض الشاشة",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "القيام بتحديد وضع النص",
|
"VTLANG_SCREEN_TEXT_MODE": "فرض تحديد وضع النص",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "القيام بتحديد وضع الرسومات",
|
"VTLANG_SCREEN_GUI_MODE": "فرض تحديد وضع الرسومات",
|
||||||
"VTLANG_THEME_SELECT": "اختيار الموضوع",
|
|
||||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
"VTLANG_THEME_SELECT": "اختر السمة",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "أدوات Ventoy UEFI المساعدة",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "عرض برامج تشغيل EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "عرض برامج تشغيل EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "إصلاح فشل تهيئة Windows BlinitializeLibrary",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "إصلاح فشل تهيئة Windows BlinitializeLibrary",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "التحقق من تكوين json للبرنامج الإضافي (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "التحقق من تكوين json للبرنامج الإضافي (ventoy.json)",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "التحقق من تكوين برنامج الإضافي العام للتحكم",
|
"VTLANG_JSON_CHK_CONTROL": "التحقق من تكوين برنامج الإضافي العام للتحكم",
|
||||||
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالموضوع",
|
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالسمة",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "التحقق من تكوين برنامج الإضافي للتثبيت التلقائي",
|
"VTLANG_JSON_CHK_AUTOINS": "التحقق من تكوين برنامج الإضافي للتثبيت التلقائي",
|
||||||
"VTLANG_JSON_CHK_PERSIST": "التحقق من تكوين برنامج الإضافي المستمر",
|
"VTLANG_JSON_CHK_PERSIST": "التحقق من تكوين برنامج الإضافي المستمر",
|
||||||
"VTLANG_JSON_CHK_MENU_ALIAS": "التحقق من تكوين برنامج الإضافي الخاص بالقائمة المستعارة",
|
"VTLANG_JSON_CHK_MENU_ALIAS": "التحقق من تكوين برنامج الإضافي الخاص بالقائمة المستعارة",
|
||||||
@@ -53,27 +62,32 @@
|
|||||||
"VTLANG_JSON_CHK_CONF_REPLACE": "التحقق من تكوين برنامج الإضافي الخاص باستبدال ملف التكوين للإقلاع",
|
"VTLANG_JSON_CHK_CONF_REPLACE": "التحقق من تكوين برنامج الإضافي الخاص باستبدال ملف التكوين للإقلاع",
|
||||||
"VTLANG_JSON_CHK_DUD": "التحقق من تكوين برنامج الإضافي الخاص بـ dud",
|
"VTLANG_JSON_CHK_DUD": "التحقق من تكوين برنامج الإضافي الخاص بـ dud",
|
||||||
"VTLANG_JSON_CHK_PASSWORD": "التحقق من تكوين برنامج الإضافي الخاص بكلمة المرور",
|
"VTLANG_JSON_CHK_PASSWORD": "التحقق من تكوين برنامج الإضافي الخاص بكلمة المرور",
|
||||||
|
|
||||||
"VTLANG_NORMAL_MODE": "الإقلاع في الوضع العادي",
|
"VTLANG_NORMAL_MODE": "الإقلاع في الوضع العادي",
|
||||||
"VTLANG_WIMBOOT_MODE": "الإقلاع في وضع wimboot",
|
"VTLANG_WIMBOOT_MODE": "الإقلاع في وضع wimboot",
|
||||||
"VTLANG_GRUB2_MODE": "الإقلاع في وضع grub2",
|
"VTLANG_GRUB2_MODE": "الإقلاع في وضع grub2",
|
||||||
"VTLANG_MEMDISK_MODE": "الإقلاع في وضع memdisk",
|
"VTLANG_MEMDISK_MODE": "الإقلاع في وضع memdisk",
|
||||||
|
|
||||||
"VTLANG_RET_TO_LISTVIEW": "العودة إلى ListView",
|
"VTLANG_RET_TO_LISTVIEW": "العودة إلى ListView",
|
||||||
"VTLANG_RET_TO_TREEVIEW": "العودة إلى TreeView",
|
"VTLANG_RET_TO_TREEVIEW": "العودة إلى TreeView",
|
||||||
|
|
||||||
"VTLANG_NO_AUTOINS_SCRIPT": "الإقلاع بدون قالب التثبيت التلقائي",
|
"VTLANG_NO_AUTOINS_SCRIPT": "الإقلاع بدون قالب التثبيت التلقائي",
|
||||||
"VTLANG_AUTOINS_USE": "الإقلاع مع",
|
"VTLANG_AUTOINS_USE": "الإقلاع مع",
|
||||||
|
|
||||||
"VTLANG_NO_PERSIST": "الإقلاع بدون الاستمرارية",
|
"VTLANG_NO_PERSIST": "الإقلاع بدون الاستمرارية",
|
||||||
"VTLANG_PERSIST_USE": "الإقلاع مع",
|
"VTLANG_PERSIST_USE": "الإقلاع مع",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "العودة",
|
"VTLANG_BROWER_RETURN": "العودة",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "اضغط على مفتاح Enter للخروج",
|
"VTLANG_ENTER_EXIT": "اضغط على مفتاح Enter للخروج",
|
||||||
"VTLANG_ENTER_REBOOT": "اضغط على مفتاح Enter لإعادة التشغيل",
|
"VTLANG_ENTER_REBOOT": "اضغط على مفتاح Enter لإعادة التشغيل",
|
||||||
"VTLANG_ENTER_CONTINUE": "اضغط على مفتاح Enter للمتابعة",
|
"VTLANG_ENTER_CONTINUE": "اضغط على مفتاح Enter للمتابعة",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
"VTLANG_CTRL_TEMP_SET": "إعدادات التحكم المؤقتة",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "تجاوز فحص CPU/TPM/SecureBoot عند تثبيت Windows 11",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@
|
|||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Afficher les pilotes EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Afficher les pilotes EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Contourner l’échec de Windows BlinitializeLibrary",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Contourner l’échec de Windows BlinitializeLibrary",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "Afficher le fichiers de configuration (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "Afficher le fichier de configuration (ventoy.json)",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "Afficher la configuration du plugin de contrôle global",
|
"VTLANG_JSON_CHK_CONTROL": "Afficher la configuration du plugin de contrôle global",
|
||||||
"VTLANG_JSON_CHK_THEME": "Afficher la configuration du plugin de thème",
|
"VTLANG_JSON_CHK_THEME": "Afficher la configuration du plugin de thème",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "Afficher la configuration du plugin d’installation automatique",
|
"VTLANG_JSON_CHK_AUTOINS": "Afficher la configuration du plugin d’installation automatique",
|
||||||
|
@@ -1,93 +1,93 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Hungarian (Magyar)",
|
"VTLANG_LANGUAGE_NAME": "Magyar (Hungarian)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallóz F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
"VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallózás F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallóz F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
"VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallózás F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
||||||
"VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "Vissza az előző menübe",
|
"VTLANG_RETURN_PRV_NOESC": "Vissza az előző menübe",
|
||||||
|
|
||||||
"VTLANG_MENU_LANG": "Menü nyelv kiválasztás",
|
"VTLANG_MENU_LANG": "Menü nyelvének kiválasztása",
|
||||||
|
|
||||||
"VTLANG_LB_SBOOT_WINDOWS": "Keresés és indítás - Windows",
|
"VTLANG_LB_SBOOT_WINDOWS": "Windows keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_G4D": "Keresés és indítás - Grub4dos",
|
"VTLANG_LB_SBOOT_G4D": "Grub4dos keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_HDD1": "Indítás az 1. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD1": "Indítás az 1. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_HDD2": "Indítás az 2. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD2": "Indítás a 2. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_HDD3": "Indítás az 3. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD3": "Indítás a 3. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_X64EFI": "Keresés és indítás - BOOTX64.EFI",
|
"VTLANG_LB_SBOOT_X64EFI": "BOOTX64.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_IA32EFI": "Keresés és indítás - BOOTIA32.EFI",
|
"VTLANG_LB_SBOOT_IA32EFI": "BOOTIA32.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_AA64EFI": "Keresés és indítás - BOOTAA64.EFI",
|
"VTLANG_LB_SBOOT_AA64EFI": "BOOTAA64.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_XORBOOT": "Keresés és indítás - xorboot",
|
"VTLANG_LB_SBOOT_XORBOOT": "xorboot keresése és indítása",
|
||||||
|
|
||||||
"VTLANG_FILE_CHKSUM": "Fájl ell.összeg",
|
"VTLANG_FILE_CHKSUM": "Fájl ellenőrzőösszege",
|
||||||
"VTLANG_CHKSUM_MD5_CALC": "Számítás - md5sum",
|
"VTLANG_CHKSUM_MD5_CALC": "md5sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC": "Számítás - sha1sum",
|
"VTLANG_CHKSUM_SHA1_CALC": "sha1sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC": "Számítás - sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC": "sha256sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC": "Számítás - sha512sum",
|
"VTLANG_CHKSUM_SHA512_CALC": "sha512sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "Számítás és ellenőrzés - md5sum",
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "md5sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Számítás és ellenőrzés - sha1sum",
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "sha1sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Számítás és ellenőrzés - sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "sha256sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Számítás és ellenőrzés - sha512sum",
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "sha512sum kiszámítása és ellenőrzése",
|
||||||
|
|
||||||
"VTLANG_POWER": "Energia",
|
"VTLANG_POWER": "Főkapcsoló",
|
||||||
"VTLANG_POWER_REBOOT": "Újraindítás",
|
"VTLANG_POWER_REBOOT": "Újraindítás",
|
||||||
"VTLANG_POWER_HALT": "Leállítás",
|
"VTLANG_POWER_HALT": "Leállítás",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "Újraindítás - EFI setup",
|
"VTLANG_POWER_BOOT_EFIFW": "Újraindítás EFI beállításba",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "Billentyű kiosztások",
|
"VTLANG_KEYBRD_LAYOUT": "Billentyűzetkiosztások",
|
||||||
"VTLANG_HWINFO": "Hardver információ",
|
"VTLANG_HWINFO": "Hardverinformációk",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "Felbontás konfigurációja",
|
"VTLANG_RESOLUTION_CFG": "Felbontás beállítása",
|
||||||
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési mód",
|
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési módja",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "Kénysz. szöveges mód",
|
"VTLANG_SCREEN_TEXT_MODE": "Szöveges mód kényszerítése",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Kénysz. grafikus mód",
|
"VTLANG_SCREEN_GUI_MODE": "Grafikus mód kényszerítése",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Téma kiválasztása",
|
"VTLANG_THEME_SELECT": "Téma kiválasztása",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
"VTLANG_UEFI_UTIL": "Ventoy UEFI-segédprogramok",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI driverek megjelenítése",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI-illesztőprogramok megjelenítése",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "A Windows BlinitializeLibrary hibájának javítása",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "A Windows BlinitializeLibrary hibájának javítása",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "Ellenőrizze a plugin json konfigurációt (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "A bővítmény JSON-beállításának (ventoy.json) ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "Ellenőrizze a globális vezérlő plugin konfigurációt",
|
"VTLANG_JSON_CHK_CONTROL": "A globális vezérlőbővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_THEME": "Ellenőrizze a téma plugin konfigurációt",
|
"VTLANG_JSON_CHK_THEME": "A téma bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "Ellenőrizze az auto. telepítő plugin konfigurációt",
|
"VTLANG_JSON_CHK_AUTOINS": "Az automatikus telepítés bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_PERSIST": "A persistence plugin konfigurációjának ellenőrzése",
|
"VTLANG_JSON_CHK_PERSIST": "Az állandóság bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Ellenőrizze a menü alias plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_ALIAS": "A menüálnév bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_TIP": "Ellenőrizze a menü tipp plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_TIP": "A menütipp bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_CLASS": "Ellenőrizze a menü osztály plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_CLASS": "A menüosztály bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_INJECTION": "Injekciós plugin konfiguráció ellenőrzése",
|
"VTLANG_JSON_CHK_INJECTION": "A befecskendezés bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Auto. memdisk plugin konfiguráció ellenőrzése",
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Az automatikus memórialemez bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_IMG_LIST": "Ellenőrizze a képlista plugin beállításait",
|
"VTLANG_JSON_CHK_IMG_LIST": "A lemezképlista bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_IMG_BLIST": "Ellenőrizze a kép feketelista plugin konfigurációt",
|
"VTLANG_JSON_CHK_IMG_BLIST": "A lemezkép-tiltólista bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Check boot conf cserélje ki a plugin konfigurációt",
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Az indítási beállítás csere bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_DUD": "Ellenőrizze a dud plugin konfigurációt",
|
"VTLANG_JSON_CHK_DUD": "A dud bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_PASSWORD": "Ellenőrizze a jelszó plugin konfigurációját",
|
"VTLANG_JSON_CHK_PASSWORD": "A jelszó bővítmény beállításnak ellenőrzése",
|
||||||
|
|
||||||
"VTLANG_NORMAL_MODE": "Indítás normál módban",
|
"VTLANG_NORMAL_MODE": "Indítás normál módban",
|
||||||
"VTLANG_WIMBOOT_MODE": "Indítás wimboot módban",
|
"VTLANG_WIMBOOT_MODE": "Indítás wimboot módban",
|
||||||
"VTLANG_GRUB2_MODE": "Indítás grub2 módban",
|
"VTLANG_GRUB2_MODE": "Indítás grub2 módban",
|
||||||
"VTLANG_MEMDISK_MODE": "Indítás memdisk módban",
|
"VTLANG_MEMDISK_MODE": "Indítás memórialemez módban",
|
||||||
|
|
||||||
"VTLANG_RET_TO_LISTVIEW": "Vissza a Listanézethez",
|
"VTLANG_RET_TO_LISTVIEW": "Vissza a listanézethez",
|
||||||
"VTLANG_RET_TO_TREEVIEW": "Vissza a Fanézethez",
|
"VTLANG_RET_TO_TREEVIEW": "Vissza a fanézethez",
|
||||||
|
|
||||||
"VTLANG_NO_AUTOINS_SCRIPT": "Indítás auto. telepítési sablon nélkül",
|
"VTLANG_NO_AUTOINS_SCRIPT": "Indítás automatikus telepítési sablon nélkül",
|
||||||
"VTLANG_AUTOINS_USE": "Indítás ezzel",
|
"VTLANG_AUTOINS_USE": "Indítás ezzel:",
|
||||||
|
|
||||||
"VTLANG_NO_PERSIST": "Indítás perzisztencia nélkül",
|
"VTLANG_NO_PERSIST": "Indítás állandóság nélkül",
|
||||||
"VTLANG_PERSIST_USE": "Indítás ezzel",
|
"VTLANG_PERSIST_USE": "Indítás ezzel:",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "Vissza",
|
"VTLANG_BROWER_RETURN": "Vissza",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "nyomja meg az Enter billentyűt a kilépéshez",
|
"VTLANG_ENTER_EXIT": "nyomja meg az Enter billentyűt a kilépéshez",
|
||||||
"VTLANG_ENTER_REBOOT": "nyomja meg az Enter billentyűt az újraindításhoz",
|
"VTLANG_ENTER_REBOOT": "nyomja meg az Enter billentyűt az újraindításhoz",
|
||||||
"VTLANG_ENTER_CONTINUE": "a folytatáshoz nyomja meg az Enter billentyűt",
|
"VTLANG_ENTER_CONTINUE": "nyomja meg az Enter billentyűt a folytatáshoz",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
"VTLANG_CTRL_TEMP_SET": "Ideiglenes vezérlési beállítások",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "CPU/TPM/SecureBoot ellenőrzés megkerülése Windows 11 telepítésekor",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
93
INSTALL/grub/menu/it_IT.json
Normal file
93
INSTALL/grub/menu/it_IT.json
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "Italiano (Italian)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaElenco F4:BootLocale F5:Strumenti F6:MenuEx",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaStruttura F4:BootLocale F5:Strumenti F6:MenuEx",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "Torna al menu precedente [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "Torna al menu precedente",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "Selezione lingua interfaccia",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "Cerca e avvia Windows",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "Cerca e avvia Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "Avvia il 1° disco locale",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "Avvia il 2° disco locale",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "Avvia il 3° disco locale",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "Cerca e avvia BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "Cerca e avvia BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "Cerca e avvia BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "Cerca e avvia xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "File checksum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "Calcola md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "Calcola sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "Calcola sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "Calcola sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "Calcola e controlla md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Calcola e controlla sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calcola e controlla sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calcola e controlla sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "Spegni il computer",
|
||||||
|
"VTLANG_POWER_REBOOT": "Riavvia il computer",
|
||||||
|
"VTLANG_POWER_HALT": "Arresta il computer",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "Riavvia il computer nell'impostazione EFI",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "Layout tastiera",
|
||||||
|
"VTLANG_HWINFO": "Informazioni hardware computer",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "Imposta risoluzione schermo",
|
||||||
|
"VTLANG_SCREEN_MODE": "Modalità schermo (testo/grafica)",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "Forza modalità testo schermo",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "Forza modalità grafica schermo",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "Seleziona tema interfaccia",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "Utilità UEFI Ventoy",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Visualizza driver EFI",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Correzione fallimento BlinitializeLibrary di Windows",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "Modifica file .json plugin (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "Modifica controllo globale della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "Modifica tema configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "Modifica installazione automatica della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "Modifica persistenza della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Modifica l'alias del menu della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "Modifica suggerimento del menu della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "Modifica classe menu configurazione plugin",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "Modifica injection della configurazione plugin",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Modifica memdisk automatico della configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "Modifica elenco immagini configurazione plugin",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "Modifica elenco immagini vietate configurazione plugin",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Modifica sostituzione configurazione di avvio configurazione dei plugin",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "Modifica dud configurazione plugin",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "Modifica password configurazione plugin",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "Avvia in modalità normale",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "Avvia in modalità wimboot",
|
||||||
|
"VTLANG_GRUB2_MODE": "Avvia in modalità grub2",
|
||||||
|
"VTLANG_MEMDISK_MODE": "Avvia in modalità memdisk",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "Torna alla VistaElenco",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "Torna alla VistaStruttura",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "Avvia senza il modello installazione automatica",
|
||||||
|
"VTLANG_AUTOINS_USE": "Avvia con",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "Avvia senza persistenza",
|
||||||
|
"VTLANG_PERSIST_USE": "Avvia con",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "Indietro",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "Premi il tasto 'Invio' per uscire",
|
||||||
|
"VTLANG_ENTER_REBOOT": "Premi il tasto 'Invio' per riavviare",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "Premi il tasto 'Invio' per continuare",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "Impostazioni controllo temporaneo",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "Durante l'installazione di Windows 11 bypassa il controllo CPU/TPM/SecureBoot ",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "Durante l'installazione di Windows 11 bypassa il requisito di un account online ",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "Dopo l'avvio di Linux monta la partizione Ventoy ",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "Visualizza menu di avvio secondario",
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
@@ -78,12 +78,13 @@
|
|||||||
"VTLANG_PERSIST_USE": "부팅 대상",
|
"VTLANG_PERSIST_USE": "부팅 대상",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "돌아가기",
|
"VTLANG_BROWER_RETURN": "돌아가기",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "종료하려면 Enter 키를 누르십시오",
|
"VTLANG_ENTER_EXIT": "종료하려면 Enter 키를 누르십시오",
|
||||||
"VTLANG_ENTER_REBOOT": "다시 시작하려면 Enter 키를 누르십시오",
|
"VTLANG_ENTER_REBOOT": "다시 시작하려면 Enter 키를 누르십시오",
|
||||||
"VTLANG_ENTER_CONTINUE": "계속하려면 Enter 키를 누르십시오",
|
"VTLANG_ENTER_CONTINUE": "계속하려면 Enter 키를 누르십시오",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "임시 제어 설정",
|
"VTLANG_CTRL_TEMP_SET": "임시 제어 설정",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Windows 11 설치 시 CPU/TPM/Secure Boot 검사 회피",
|
"VTLANG_WIN11_BYPASS_CHECK": "Windows 11 설치 시 CPU/TPM/SecureBoot 검사 회피",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
|
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
|
||||||
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
|
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
|
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
|
||||||
|
93
INSTALL/grub/menu/pt_BR.json
Normal file
93
INSTALL/grub/menu/pt_BR.json
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "Brazilian Portuguese (Português Brasileiro)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:Idioma F1:Ajuda F2:Explorar F3:Visualização em Lista F4:Inicialização Local F5:Ferramentas F6:Sair",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:Idioma F1:Ajuda F2:Explorar F3:Visualização em Árvore F4:Inicialização Local F5:Ferramentas F6:Sair",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "Retornar ao menu anterior [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "Retornar ao menu anterior",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "Menu de Seleção dos Idiomas",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "Procurar e iniciar o Windows",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "Procurar e iniciar o Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "Iniciar o 1º disco local",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "Iniciar o 2º disco local",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "Iniciar o 3º disco local",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "Procurar e iniciar o BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "Procurar e iniciar o BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "Procurar e iniciar o BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "Procurar e iniciar o xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "Checksum do arquivo",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "Calcular o md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "Calcular o sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "Calcular o sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "Calcular o sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "Calcular e verificar o md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Calcular e verificar o sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calcular e verificar o sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calcular e verificar o sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "Energia",
|
||||||
|
"VTLANG_POWER_REBOOT": "Reiniciar",
|
||||||
|
"VTLANG_POWER_HALT": "Desligar",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "Reiniciar com a configuração do EFI",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "Esquemas do Teclado",
|
||||||
|
"VTLANG_HWINFO": "Informações do Hardware",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "Configuração da Resolução",
|
||||||
|
"VTLANG_SCREEN_MODE": "Modo de Exibição da Tela",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "Forçar o Modo Texto",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "Forçar o Modo Gráfico",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "Seleção de Tema",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "Utilitários UEFI do Ventoy",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Mostrar os Drivers EFI",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Consertar a Falha BlinitializeLibrary do Windows",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "Verificar a configuração do plugin json (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "Verificar a configuração do plugin de controle global",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "Verificar a configuração do plugin dos temas",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "Verificar a configuração do plugin de instalação automática",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "Verificar a configuração do plugin de persistência",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Verificar a configuração do plugin do menu alias",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "Verificar a configuração do plugin do menu das dicas",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "Verificar a configuração do plugin do menu classe",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "Verificar a configuração do plugin de injeção",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Verificar a configuração do plugin automático do memdisk",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "Verificar a configuração do plugin da lista de imagens",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "Verificar a configuração do plugin da lista negra de imagens",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Verificar a configuração do plugin de substituição da configuração de inicialização",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "Verificar a configuração do plugin dud",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "Verificar a configuração do plugin das senhas",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "Iniciar no modo normal",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "Iniciar no modo wimboot",
|
||||||
|
"VTLANG_GRUB2_MODE": "Iniciar no modo grub2",
|
||||||
|
"VTLANG_MEMDISK_MODE": "Iniciar no modo memdisk",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "Retornar pra Visualização em Lista",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "Retornar para Visualização em Árvore",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "Iniciar sem modelo de instalação automática",
|
||||||
|
"VTLANG_AUTOINS_USE": "Iniciar com",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "Iniciar sem persistência",
|
||||||
|
"VTLANG_PERSIST_USE": "Iniciar com",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "Retornar",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "Pressione a tecla Enter pra sair",
|
||||||
|
"VTLANG_ENTER_REBOOT": "Pressione a tecla Enter pra reiniciar",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "Pressione a tecla Enter pra continuar",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "Configurações do Controle Temporário",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "Ignorar a verificação da CPU/TPM/SecureBoot quando instalar o Windows 11",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "Ignorar o requerimento de conta online quanto instalar o Windows 11",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "Montar a partição do Ventoy após iniciar o Linux",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar o menu secundário da inicialização",
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Russian (Русский)",
|
"VTLANG_LANGUAGE_NAME": "Russian (Русский)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Просмотр F3:ВидСписком F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
|
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Обзор F3:ВидСписок F4:ЛокалЗагрузка F5:Сервис F6:РасширМеню",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Просмотр F3:ВидДревом F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
|
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Обзор F3:ВидДерево F4:ЛокалЗагрузка F5:Сервис F6:РасширМеню",
|
||||||
"VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
|
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
|
||||||
|
|
||||||
@@ -30,20 +30,20 @@
|
|||||||
|
|
||||||
"VTLANG_POWER": "Питание",
|
"VTLANG_POWER": "Питание",
|
||||||
"VTLANG_POWER_REBOOT": "Перезагрузить",
|
"VTLANG_POWER_REBOOT": "Перезагрузить",
|
||||||
"VTLANG_POWER_HALT": "Завершить роботу",
|
"VTLANG_POWER_HALT": "Завершить работу",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "Перезагрузиться в настройку EFI",
|
"VTLANG_POWER_BOOT_EFIFW": "Перезагрузиться в настройку EFI",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "Раскладки клавиатуры",
|
"VTLANG_KEYBRD_LAYOUT": "Раскладки клавиатуры",
|
||||||
"VTLANG_HWINFO": "Сведения об оборудовании",
|
"VTLANG_HWINFO": "Сведения об оборудовании",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
|
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
|
||||||
"VTLANG_SCREEN_MODE": "Режим Screen Display",
|
"VTLANG_SCREEN_MODE": "Режим отображения экрана",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "Выбрать текстовый режим",
|
"VTLANG_SCREEN_TEXT_MODE": "Выбрать текстовый режим",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Выбрать графический режим",
|
"VTLANG_SCREEN_GUI_MODE": "Выбрать графический режим",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Выбор темы",
|
"VTLANG_THEME_SELECT": "Выбор темы",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "UEFI утилиты Ventoy",
|
"VTLANG_UEFI_UTIL": "Утилиты UEFI Ventoy",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку Windows «BlinitializeLibrary»",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку Windows «BlinitializeLibrary»",
|
||||||
|
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
"VTLANG_POWER": "Живлення",
|
"VTLANG_POWER": "Живлення",
|
||||||
"VTLANG_POWER_REBOOT": "Перезавантажити",
|
"VTLANG_POWER_REBOOT": "Перезавантажити",
|
||||||
"VTLANG_POWER_HALT": "Завершити роботу",
|
"VTLANG_POWER_HALT": "Завершити роботу",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "Перезавантажитись до налаштувань EFI",
|
"VTLANG_POWER_BOOT_EFIFW": "Перезавантажитись до налаштувань UEFI/BIOS",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "Розкладка клавіатури",
|
"VTLANG_KEYBRD_LAYOUT": "Розкладка клавіатури",
|
||||||
"VTLANG_HWINFO": "Відомості про пристрій",
|
"VTLANG_HWINFO": "Відомості про пристрій",
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
"VTLANG_SCREEN_TEXT_MODE": "Перейти до текстового інтерфейсу",
|
"VTLANG_SCREEN_TEXT_MODE": "Перейти до текстового інтерфейсу",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Перейти до графічного інтерфейсу",
|
"VTLANG_SCREEN_GUI_MODE": "Перейти до графічного інтерфейсу",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Обрати тему",
|
"VTLANG_THEME_SELECT": "Теми",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "Утиліти Ventoy UEFI",
|
"VTLANG_UEFI_UTIL": "Утиліти Ventoy UEFI",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Показати драйвери EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Показати драйвери EFI",
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"VTLANG_ENTER_REBOOT": "натисніть Enter для перезавантаження",
|
"VTLANG_ENTER_REBOOT": "натисніть Enter для перезавантаження",
|
||||||
"VTLANG_ENTER_CONTINUE": "натисніть Enter для продовження",
|
"VTLANG_ENTER_CONTINUE": "натисніть Enter для продовження",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Налаштування тимчасового контролю",
|
"VTLANG_CTRL_TEMP_SET": "Різні налаштування",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Обійти перевірку CPU/TPM/SecureBoot під час інсталяції Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "Обійти перевірку CPU/TPM/SecureBoot під час інсталяції Windows 11",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Обійти вимогу онлайн-аккаунту під час інсталяції Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Обійти вимогу онлайн-аккаунту під час інсталяції Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Монтувати розділ Ventoy після завантаження Linux",
|
"VTLANG_LINUX_REMOUNT": "Монтувати розділ Ventoy після завантаження Linux",
|
||||||
|
93
INSTALL/grub/menu/vi_VN.json
Normal file
93
INSTALL/grub/menu/vi_VN.json
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "Vietnamese (Tiếng Việt)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:Ngôn ngữ F1:Trợ giúp F2:Duyệt F3:ListView F4:Khởi động cục bộ F5:Công cụ F6:ExMenu",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:Ngôn ngữ F1:Trợ giúp F2:Duyệt F3:TreeView F4:Khởi động cục bộ F5:Công cụ F6:ExMenu",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "Trở về menu trước [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "Trở về menu trước",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "Chọn ngôn ngữ menu",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "Tìm kiếm và khởi động Windows",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "Tìm kiếm và khởi động Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "Khởi động từ ổ đĩa thứ 1 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "Khởi động từ ổ đĩa thứ 2 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "Khởi động từ ổ đĩa thứ 3 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "Tìm kiếm và khởi động BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "Tìm kiếm và khởi động BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "Tìm kiếm và khởi động BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "Tìm kiếm và khởi động xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "Checksum tệp",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "Tính md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "Tính sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "Tính sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "Tính sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "Tính và kiểm tra md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Tính và kiểm tra sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Tính và kiểm tra sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Tính và kiểm tra sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "Nguồn điện",
|
||||||
|
"VTLANG_POWER_REBOOT": "Khởi động lại",
|
||||||
|
"VTLANG_POWER_HALT": "Tắt máy",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "Khởi động lại vào cài đặt UEFI",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "Bố cục bàn phím",
|
||||||
|
"VTLANG_HWINFO": "Thông tin phần cứng",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "Cấu hình độ phân giải",
|
||||||
|
"VTLANG_SCREEN_MODE": "Chế độ hiển thị",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "Bắt buộc giao diện văn bản",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "Bắt buộc giao diện đồ hoạ",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "Chọn chủ đề",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "Các tiện ích UEFI Ventoy",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Hiển thị các driver EFI",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Sửa lỗi BlinitializeLibrary của Windows",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "Kiểm tra cấu hình plugin json (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "Kiểm tra cấu hình plugin điều khiển toàn cục",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "Kiểm tra cấu hình plugin chủ đề",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "Kiểm tra cấu hình plugin tự động cài đặt",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "Kiểm tra cấu hình plugin persistence",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Kiểm tra cấu hình plugin alias menu",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "Kiểm tra cấu hình plugin tip menu",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "Kiểm tra cấu hình plugin lớp menu",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "Kiểm tra cấu hình plugin injection",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Kiểm tra cấu hình plugin auto memdisk",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "Kiểm tra cấu hình plugin danh sách ảnh đĩa",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "Kiểm tra cấu hình plugin danh sách đen ảnh đĩa",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Kiểm tra cấu hình plugin boot replace conf",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "Kiểm tra cấu hình plugin dud",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "Kiểm tra cấu hình plugin mật khẩu",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "Khởi động ở chế độ bình thường",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "Khởi động ở chế độ wimboot",
|
||||||
|
"VTLANG_GRUB2_MODE": "Khởi động ở chế độ GRUB2",
|
||||||
|
"VTLANG_MEMDISK_MODE": "Khởi động ở chế độ memdisk",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "Trở về ListView",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "Trở về TreeView",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "Khởi động không dùng mẫu cài đặt",
|
||||||
|
"VTLANG_AUTOINS_USE": "Khởi động với",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "Khởi động không có persistence",
|
||||||
|
"VTLANG_PERSIST_USE": "Khởi động với",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "Trở về",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "nhấn Enter để thoát",
|
||||||
|
"VTLANG_ENTER_REBOOT": "nhấn Enter để khởi động lại",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "nhấn enter để tiếp tục",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "Cài đặt điều khiển tạm",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "Bỏ qua kiểm tra CPU/TPM/SecureBoot khi cài đặt Windows 11",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "Bỏ qua yêu cầu tài khoản trực tuyến khi cài đặt Windows 11",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "Gắn phân vùng Ventoy sau khi khởi động GNU/Linux",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "Hiện menu khởi động thứ cấp`",
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -26,7 +26,7 @@ sfs: fshelp
|
|||||||
reiserfs: fshelp
|
reiserfs: fshelp
|
||||||
part_sunpc:
|
part_sunpc:
|
||||||
zstd:
|
zstd:
|
||||||
gfxmenu: video_colors trig gfxterm bitmap_scale font normal video bitmap
|
gfxmenu: video_colors trig bitmap_scale gfxterm font normal video bitmap
|
||||||
backtrace:
|
backtrace:
|
||||||
jfs:
|
jfs:
|
||||||
help: extcmd normal
|
help: extcmd normal
|
||||||
@@ -121,7 +121,7 @@ ehci: cs5536 usb boot
|
|||||||
crypto:
|
crypto:
|
||||||
part_bsd: part_msdos
|
part_bsd: part_msdos
|
||||||
cs5536:
|
cs5536:
|
||||||
ventoy: ext2 fshelp elf btrfs font crypto gcry_md5 exfat udf div extcmd datetime normal video gcry_sha1 mmap iso9660
|
ventoy: ext2 fshelp elf btrfs crypto font gcry_md5 exfat udf datetime div extcmd normal video gcry_sha1 mmap iso9660
|
||||||
gcry_sha512: crypto
|
gcry_sha512: crypto
|
||||||
password: crypto normal
|
password: crypto normal
|
||||||
fshelp:
|
fshelp:
|
||||||
@@ -202,7 +202,7 @@ cbmemc: cbtable normal terminfo
|
|||||||
hfsplus: fshelp
|
hfsplus: fshelp
|
||||||
gcry_cast5: crypto
|
gcry_cast5: crypto
|
||||||
extcmd:
|
extcmd:
|
||||||
squash4: fshelp lzopio zfs xzio gzio
|
squash4: fshelp zstd lzopio zfs xzio gzio
|
||||||
part_plan:
|
part_plan:
|
||||||
minix_be:
|
minix_be:
|
||||||
gcry_whirlpool: crypto
|
gcry_whirlpool: crypto
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -195,7 +195,7 @@ if [ "$MODE" = "install" -a -z "$NONDESTRUCTIVE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$PARTTOOL" = "parted" ]; then
|
if [ "$PARTTOOL" = "parted" ]; then
|
||||||
if parted $DISK p | grep -i -q 'sector size.*4096.*4096'; then
|
if parted -s $DISK p 2>&1 | grep -i -q 'sector size.*4096.*4096'; then
|
||||||
vterr "Currently Ventoy does not support 4K native device."
|
vterr "Currently Ventoy does not support 4K native device."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -626,6 +626,14 @@ else
|
|||||||
vtoycli partresize -s $DISK $part2_start
|
vtoycli partresize -s $DISK $part2_start
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$PART1_TYPE" = "EE" ]; then
|
||||||
|
vtinfo "update esp partition attribute"
|
||||||
|
vtoycli gpt -f $DISK
|
||||||
|
sync
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
vtinfo "Update Ventoy on $DISK successfully finished."
|
vtinfo "Update Ventoy on $DISK successfully finished."
|
||||||
echo ""
|
echo ""
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -19,5 +19,34 @@
|
|||||||
"condition": "equal",
|
"condition": "equal",
|
||||||
"expression": "ukui",
|
"expression": "ukui",
|
||||||
"gui": "gtk3"
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "cinnamon",
|
||||||
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "gnome",
|
||||||
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "plasma",
|
||||||
|
"gui": "qt5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "xfce",
|
||||||
|
"gui": "gtk3"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -92,6 +92,10 @@ get_disk_part_name() {
|
|||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
|
elif echo $DISK | grep -q "/dev/zd[0-9]"; then
|
||||||
|
echo ${DISK}p${2}
|
||||||
|
elif echo $DISK | grep -q "/dev/md[0-9]"; then
|
||||||
|
echo ${DISK}p${2}
|
||||||
else
|
else
|
||||||
echo ${DISK}${2}
|
echo ${DISK}${2}
|
||||||
fi
|
fi
|
||||||
@@ -209,14 +213,14 @@ get_disk_ventoy_version() {
|
|||||||
wait_and_create_part() {
|
wait_and_create_part() {
|
||||||
vPART1=$1
|
vPART1=$1
|
||||||
vPART2=$2
|
vPART2=$2
|
||||||
echo 'Wait for partitions ...'
|
echo 'Wait for partitions $vPART1 and $vPART2 ...'
|
||||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
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 $vPART1 2>/dev/null | grep -q '^b'; then
|
||||||
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
|
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Wait for $vPART1/$vPART2 ..."
|
echo "Wait for $vPART1 and $vPART2 ..."
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -445,7 +449,6 @@ format_ventoy_disk_gpt() {
|
|||||||
mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \
|
mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \
|
||||||
mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \
|
mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \
|
||||||
$vt_set_efi_type \
|
$vt_set_efi_type \
|
||||||
set 2 hidden on \
|
|
||||||
quit
|
quit
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user