mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-16 17:11:13 +00:00
Compare commits
153 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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 | ||
|
430f81ac49 | ||
|
038c0533d9 | ||
|
102b179cd9 | ||
|
6785f5d049 | ||
|
0c812ed5e9 | ||
|
9f2b9b0867 | ||
|
c79b072680 | ||
|
6b4509a550 | ||
|
feea11e2bb | ||
|
35c952d891 | ||
|
82053680bf | ||
|
6d5de12f52 | ||
|
84b2ee7ee3 | ||
|
da1b306e81 | ||
|
0961ce5624 | ||
|
07574f0379 | ||
|
142aa47944 | ||
|
11739fa9d0 | ||
|
9fc85051a7 | ||
|
b9e82bcf16 | ||
|
cff3a01289 | ||
|
0f90149c4e | ||
|
8ef9732931 | ||
|
b32eda4262 | ||
|
e743f7c15f | ||
|
652475f1ef | ||
|
abfc2a6343 | ||
|
e73ac04cb6 | ||
|
8727e63880 | ||
|
2d281d7dee | ||
|
385c806adf | ||
|
e869bc2386 | ||
|
b47aa1abc7 | ||
|
d8698b2194 | ||
|
7fa4724743 | ||
|
2717405a7a | ||
|
d494007df9 | ||
|
bc9e3f641b | ||
|
9f02d37001 | ||
|
fa1461bac7 | ||
|
3d56c3fa17 | ||
|
a7e3d78d14 | ||
|
879a7592bd | ||
|
5a433f49f7 | ||
|
0cce956c54 | ||
|
0b6372857c | ||
|
028663de9a | ||
|
5feb3f7b4b | ||
|
7035787f38 | ||
|
7dd0f509f5 | ||
|
15947caea2 | ||
|
6aeba8f8b4 | ||
|
fd46b2c3c3 | ||
|
e502f4291e | ||
|
9c59c27eff | ||
|
daeb96ce80 | ||
|
b7e878c466 | ||
|
b76ebf5b07 | ||
|
9532776f39 | ||
|
d8e81d41e4 | ||
|
fa3aa3b36f | ||
|
e717d00d53 | ||
|
6bcaf19a1a | ||
|
bcbe8835d4 | ||
|
ed746ce13e | ||
|
07a790fc6a | ||
|
fd393a02fd | ||
|
0501d03dbb | ||
|
c9939a8cfc | ||
|
5067020a61 | ||
|
4f5334026e | ||
|
3e34dd8514 | ||
|
4df793e021 | ||
|
e0132ac4b5 | ||
|
2b3192b098 | ||
|
7ee3a6d9f8 | ||
|
e1d3ca9fc4 | ||
|
8653832551 | ||
|
c308892db0 | ||
|
1300f7f4f1 | ||
|
d9182dbfa4 | ||
|
e988c0dfe2 | ||
|
0714971f8c |
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
@@ -21,7 +21,7 @@ body:
|
||||
attributes:
|
||||
label: Ventoy Version
|
||||
description: What version of ventoy are you running?
|
||||
placeholder: 1.0.87
|
||||
placeholder: 1.0.96
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
@@ -12,26 +12,26 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run docker-compose up
|
||||
run: docker-compose up
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: Run docker compose up
|
||||
run: docker compose up
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ventoy-windows
|
||||
path: INSTALL/ventoy-*windows*
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ventoy-linux
|
||||
path: INSTALL/ventoy-*linux*
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ventoy-livecd
|
||||
path: INSTALL/ventoy-*livecd*
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: SHA256SUM
|
||||
path: INSTALL/sha256.txt
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: xxx-build-log
|
||||
path: DOC/build.log
|
||||
|
7
DMPATCH/Makefile_IBT
Normal file
7
DMPATCH/Makefile_IBT
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
obj-m += dm_patch_ibt.o
|
||||
|
||||
EXTRA_CFLAGS := -Wall -DVTOY_IBT -fcf-protection=branch -mindirect-branch-register
|
||||
|
||||
dm_patch_ibt-objs := dmpatch.o
|
||||
|
@@ -51,7 +51,15 @@ typedef struct ko_param
|
||||
unsigned long sym_get_size;
|
||||
unsigned long sym_put_addr;
|
||||
unsigned long sym_put_size;
|
||||
unsigned long padding[3];
|
||||
unsigned long kv_major;
|
||||
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];
|
||||
}ko_param;
|
||||
|
||||
#pragma pack()
|
||||
@@ -69,23 +77,110 @@ static volatile ko_param g_ko_param =
|
||||
};
|
||||
|
||||
#if defined(CONFIG_X86_64)
|
||||
#define PATCH_OP_POS 3
|
||||
#define CODE_MATCH(code, i) \
|
||||
#define PATCH_OP_POS1 3
|
||||
#define CODE_MATCH1(code, i) \
|
||||
(code[i] == 0x40 && code[i + 1] == 0x80 && code[i + 2] == 0xce && code[i + 3] == 0x80)
|
||||
|
||||
#define PATCH_OP_POS2 1
|
||||
#define CODE_MATCH2(code, i) \
|
||||
(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)
|
||||
#define PATCH_OP_POS 2
|
||||
#define CODE_MATCH(code, i) \
|
||||
#define PATCH_OP_POS1 2
|
||||
#define CODE_MATCH1(code, i) \
|
||||
(code[i] == 0x80 && code[i + 1] == 0xca && code[i + 2] == 0x80 && code[i + 3] == 0xe8)
|
||||
|
||||
#define PATCH_OP_POS2 PATCH_OP_POS1
|
||||
#define CODE_MATCH2 CODE_MATCH1
|
||||
#define PATCH_OP_POS3 PATCH_OP_POS1
|
||||
#define CODE_MATCH3 CODE_MATCH1
|
||||
|
||||
|
||||
#else
|
||||
#error "unsupported arch"
|
||||
#endif
|
||||
|
||||
#ifdef VTOY_IBT
|
||||
#ifdef CONFIG_X86_64
|
||||
/* Using 64-bit values saves one instruction clearing the high half of low */
|
||||
#define DECLARE_ARGS(val, low, high) unsigned long low, high
|
||||
#define EAX_EDX_VAL(val, low, high) ((low) | (high) << 32)
|
||||
#define EAX_EDX_RET(val, low, high) "=a" (low), "=d" (high)
|
||||
#else
|
||||
#define DECLARE_ARGS(val, low, high) unsigned long long val
|
||||
#define EAX_EDX_VAL(val, low, high) (val)
|
||||
#define EAX_EDX_RET(val, low, high) "=A" (val)
|
||||
#endif
|
||||
|
||||
#define EX_TYPE_WRMSR 8
|
||||
#define EX_TYPE_RDMSR 9
|
||||
#define MSR_IA32_S_CET 0x000006a2 /* kernel mode cet */
|
||||
#define CET_ENDBR_EN (1ULL << 2)
|
||||
|
||||
/* Exception table entry */
|
||||
#ifdef __ASSEMBLY__
|
||||
|
||||
#define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||
.pushsection "__ex_table","a" ; \
|
||||
.balign 4 ; \
|
||||
.long (from) - . ; \
|
||||
.long (to) - . ; \
|
||||
.long type ; \
|
||||
.popsection
|
||||
|
||||
#else /* ! __ASSEMBLY__ */
|
||||
|
||||
#define _ASM_EXTABLE_TYPE(from, to, type) \
|
||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
||||
" .balign 4\n" \
|
||||
" .long (" #from ") - .\n" \
|
||||
" .long (" #to ") - .\n" \
|
||||
" .long " __stringify(type) " \n" \
|
||||
" .popsection\n"
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* VTOY_IBT */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#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_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;
|
||||
|
||||
@@ -93,13 +188,21 @@ static void notrace dmpatch_restore_code(unsigned char *opCode)
|
||||
{
|
||||
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||
set_mem_rw(align, 1);
|
||||
*opCode = 0x80;
|
||||
if (bytes == 1)
|
||||
{
|
||||
*opCode = (unsigned char)code;
|
||||
}
|
||||
else
|
||||
{
|
||||
*(unsigned int *)opCode = code;
|
||||
}
|
||||
set_mem_ro(align, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static int notrace dmpatch_replace_code
|
||||
(
|
||||
int style,
|
||||
unsigned long addr,
|
||||
unsigned long size,
|
||||
int expect,
|
||||
@@ -112,17 +215,40 @@ static int notrace dmpatch_replace_code
|
||||
unsigned long align;
|
||||
unsigned char *opCode = (unsigned char *)addr;
|
||||
|
||||
vdebug("patch for %s 0x%lx %d\n", desc, 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 (CODE_MATCH(opCode, i) && cnt < MAX_PATCH)
|
||||
if (style == 1)
|
||||
{
|
||||
patch[cnt] = opCode + i + PATCH_OP_POS;
|
||||
cnt++;
|
||||
if (CODE_MATCH1(opCode, i) && cnt < MAX_PATCH)
|
||||
{
|
||||
patch[cnt] = opCode + i + PATCH_OP_POS1;
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
else if (style == 2)
|
||||
{
|
||||
if (CODE_MATCH2(opCode, i) && cnt < MAX_PATCH)
|
||||
{
|
||||
patch[cnt] = opCode + i + PATCH_OP_POS2;
|
||||
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)
|
||||
{
|
||||
vdebug("patch error: cnt=%d expect=%d\n", cnt, expect);
|
||||
@@ -143,14 +269,285 @@ static int notrace dmpatch_replace_code
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int notrace dmpatch_init(void)
|
||||
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
|
||||
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
||||
{
|
||||
DECLARE_ARGS(val, low, high);
|
||||
|
||||
asm volatile("1: rdmsr\n"
|
||||
"2:\n"
|
||||
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_RDMSR)
|
||||
: EAX_EDX_RET(val, low, high) : "c" (msr));
|
||||
|
||||
return EAX_EDX_VAL(val, low, high);
|
||||
}
|
||||
|
||||
static __always_inline void dmpatch_wrmsr(unsigned int msr, u32 low, u32 high)
|
||||
{
|
||||
asm volatile("1: wrmsr\n"
|
||||
"2:\n"
|
||||
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_WRMSR)
|
||||
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
||||
}
|
||||
|
||||
static u64 notrace dmpatch_ibt_save(void)
|
||||
{
|
||||
u64 msr = 0;
|
||||
u64 val = 0;
|
||||
|
||||
msr = dmpatch_rdmsr(MSR_IA32_S_CET);
|
||||
val = msr & ~CET_ENDBR_EN;
|
||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(val & 0xffffffffULL), (u32)(val >> 32));
|
||||
|
||||
return msr;
|
||||
}
|
||||
|
||||
static void notrace dmpatch_ibt_restore(u64 save)
|
||||
{
|
||||
u64 msr;
|
||||
|
||||
msr = dmpatch_rdmsr(MSR_IA32_S_CET);
|
||||
|
||||
msr &= ~CET_ENDBR_EN;
|
||||
msr |= (save & CET_ENDBR_EN);
|
||||
|
||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
||||
}
|
||||
#else
|
||||
static u64 notrace dmpatch_ibt_save(void) { return 0; }
|
||||
static void notrace dmpatch_ibt_restore(u64 save) { (void)save; }
|
||||
#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)
|
||||
{
|
||||
int rc = 0;
|
||||
u64 msr = 0;
|
||||
|
||||
if (g_ko_param.ibt == 0x8888)
|
||||
{
|
||||
msr = dmpatch_ibt_save();
|
||||
}
|
||||
|
||||
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))
|
||||
{
|
||||
@@ -169,42 +566,60 @@ static int notrace dmpatch_init(void)
|
||||
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
||||
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
||||
|
||||
r = dmpatch_replace_code(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
||||
if (r)
|
||||
rc = dmpatch_process(g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
||||
if (rc)
|
||||
{
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
if (g_ko_param.kv_major >= 5)
|
||||
{
|
||||
rc = dmpatch_process(6, 5, 0);
|
||||
if (rc)
|
||||
{
|
||||
rc = dmpatch_process(6, 7, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
vdebug("patch dm_get_table_device success\n");
|
||||
|
||||
r = dmpatch_replace_code(g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
||||
if (r)
|
||||
if (g_ko_param.ibt == 0x8888)
|
||||
{
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
dmpatch_ibt_restore(msr);
|
||||
}
|
||||
vdebug("patch dm_put_table_device success\n");
|
||||
|
||||
vdebug("#####################################\n");
|
||||
vdebug("######## dm patch success ###########\n");
|
||||
vdebug("#####################################\n");
|
||||
|
||||
out:
|
||||
|
||||
return rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void notrace dmpatch_exit(void)
|
||||
{
|
||||
int i = 0;
|
||||
u64 msr;
|
||||
|
||||
for (i = 0; i < MAX_PATCH; i++)
|
||||
if (g_ko_param.ibt == 0x8888)
|
||||
{
|
||||
dmpatch_restore_code(g_get_patch[i]);
|
||||
dmpatch_restore_code(g_put_patch[i]);
|
||||
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++)
|
||||
{
|
||||
dmpatch_restore_code(1, g_get_patch[i], 0x80);
|
||||
dmpatch_restore_code(1, g_put_patch[i], 0x80);
|
||||
}
|
||||
}
|
||||
|
||||
vdebug("dmpatch_exit success\n");
|
||||
|
||||
if (g_ko_param.ibt == 0x8888)
|
||||
{
|
||||
dmpatch_ibt_restore(msr);
|
||||
}
|
||||
}
|
||||
|
||||
module_init(dmpatch_init);
|
||||
|
@@ -1,10 +1,12 @@
|
||||
1. install ubuntu 21.10
|
||||
2. apt-get install build-essential flex libncurses-dev linux-headers-generic linux-source libssl-dev ...... and so on
|
||||
3. cp /lib/modules/5.13.0-23-generic/build/Module.symvers ./
|
||||
4. /boot/config-5.13.0-23-generic as .config make oldconfig
|
||||
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 bison yacc vim libelf-dev ...... and so on
|
||||
3. cp /lib/modules/5.15.0-25-generic/build/Module.symvers ./
|
||||
4. /boot/config-5.15.0-25-generic as .config make oldconfig
|
||||
5. make menuconfig
|
||||
1. close CONFIG_STACKPROTECTOR
|
||||
2. close CONFIG_RETPOLINE
|
||||
3. close CONFIG_UBSAN_BOUNDS
|
||||
4. close CONFIG_UBSAN_ENUM
|
||||
|
||||
6. modify ./scripts/mod/modpost.c
|
||||
1. skip add_srcversion (just return)
|
||||
|
65
DMPATCH/ubuntu_build.sh
Normal file
65
DMPATCH/ubuntu_build.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
FTPIP=192.168.44.1
|
||||
FTPUSR='a:a'
|
||||
|
||||
rm -f dmpatch.c Makefile Makefile_IBT
|
||||
|
||||
for f in dmpatch.c Makefile Makefile_IBT; do
|
||||
curl -s -u $FTPUSR ftp://$FTPIP/$f -o $f
|
||||
if [ -f $f ]; then
|
||||
echo "download $f OK ..."
|
||||
else
|
||||
echo "download $f FAILED ..."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
|
||||
rm -f *.ko
|
||||
|
||||
|
||||
echo "build dm_patch.ko ..."
|
||||
rm -rf ./aa
|
||||
mkdir ./aa
|
||||
|
||||
cp -a *.c aa/
|
||||
cp -a Makefile aa/
|
||||
|
||||
cd /home/panda/linux-source-5.15.0
|
||||
make modules M=/home/panda/build/aa/
|
||||
strip --strip-debug /home/panda/build/aa/dm_patch.ko
|
||||
cd -
|
||||
|
||||
cp -a aa/dm_patch.ko ./
|
||||
|
||||
|
||||
|
||||
echo "build dm_patch_ibt.ko ..."
|
||||
rm -rf ./aa
|
||||
mkdir ./aa
|
||||
|
||||
cp -a *.c aa/
|
||||
cp -a Makefile_IBT aa/Makefile
|
||||
|
||||
cd /home/panda/linux-source-5.15.0
|
||||
make modules M=/home/panda/build/aa/
|
||||
strip --strip-debug /home/panda/build/aa/dm_patch_ibt.ko
|
||||
cd -
|
||||
|
||||
cp -a aa/dm_patch_ibt.ko ./
|
||||
|
||||
rm -rf ./aa
|
||||
|
||||
|
||||
curl -s -T dm_patch.ko -u $FTPUSR ftp://$FTPIP/dm_patch_64.ko || exit 1
|
||||
curl -s -T dm_patch_ibt.ko -u $FTPUSR ftp://$FTPIP/dm_patch_ibt_64.ko || exit 1
|
||||
|
||||
|
||||
if [ -f ./dm_patch.ko -a -f ./dm_patch_ibt.ko ]; then
|
||||
echo -e "\n\n=============== SUCCESS =============\n\n"
|
||||
else
|
||||
echo -e "\n\n=============== FAILED ==============\n\n"
|
||||
fi
|
||||
|
@@ -5,7 +5,7 @@ use an old version of dmsetup
|
||||
http://vault.centos.org/5.3/os/SRPMS/device-mapper-1.02.28-2.el5.src.rpm
|
||||
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz
|
||||
|
||||
======== Build Envrioment ========
|
||||
======== Build Environment ========
|
||||
build for 32bit, static linked with dietlibc
|
||||
1. install centos 6.10 i386 with CentOS-6.10-i386-bin-DVD1.iso
|
||||
2. yum install gcc kernel-devel package
|
||||
|
@@ -1,9 +1,9 @@
|
||||
|
||||
==========================================
|
||||
1. Compile Enviroment
|
||||
1. Compile Environment
|
||||
==========================================
|
||||
My build envrioment 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.
|
||||
My build environment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
|
||||
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
|
||||
I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
|
||||
@@ -21,10 +21,10 @@
|
||||
==========================================
|
||||
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).
|
||||
|
||||
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://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://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
|
||||
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
|
||||
|
||||
|
||||
@@ -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/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/
|
||||
tar xf musl-1.2.1.tar.gz
|
||||
cd musl-1.2.1
|
||||
@@ -54,7 +54,7 @@
|
||||
mv /opt/output /opt/mips64el-linux-musl-gcc730
|
||||
|
||||
|
||||
2.4 Set PATH envrioment
|
||||
2.4 Set PATH environment
|
||||
export PATH=$PATH:/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin:/opt/aarch64--uclibc--stable-2020.08-1/bin:/opt/mips64el-linux-musl-gcc730/bin
|
||||
better to add this line to /root/.bashrc and relogin as root
|
||||
|
||||
@@ -62,21 +62,21 @@
|
||||
==========================================
|
||||
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.
|
||||
|
||||
cd /home/Ventoy-master/INSTALL
|
||||
sh all_in_one.sh
|
||||
|
||||
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.
|
||||
|
||||
2. some part of Ventoy has 32bit&64bit 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.
|
||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
||||
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 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 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
|
||||
@@ -122,14 +122,14 @@
|
||||
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
|
||||
|
||||
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 ==
|
||||
cd /home/Ventoy-master/FUSEISO
|
||||
sh build_libfuse.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 ==
|
||||
cd /home/Ventoy-master/SQUASHFS/SRC
|
||||
@@ -141,7 +141,7 @@
|
||||
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||
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 ==
|
||||
cd /home/Ventoy-master/VBLADE/vblade-master
|
||||
|
@@ -1,6 +1,11 @@
|
||||
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 \
|
||||
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-* \
|
||||
|
@@ -1533,7 +1533,7 @@ module = {
|
||||
name = squash4;
|
||||
common = fs/squash4.c;
|
||||
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
|
||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -I$(srcdir)/lib/zstd -DMINILZO_HAVE_CONFIG_H';
|
||||
};
|
||||
|
||||
module = {
|
||||
|
@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
||||
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
||||
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
||||
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
||||
#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
|
||||
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
||||
|
||||
/* 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
|
||||
* avoid multiple read-write mounts. Safe to ignore for this
|
||||
* 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 \
|
||||
| EXT4_FEATURE_INCOMPAT_MMP)
|
||||
| EXT4_FEATURE_INCOMPAT_MMP \
|
||||
| EXT4_FEATURE_INCOMPAT_CSUM_SEED)
|
||||
|
||||
|
||||
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
||||
@@ -723,10 +731,11 @@ grub_ext2_read_symlink (grub_fshelp_node_t node)
|
||||
if (! symlink)
|
||||
return 0;
|
||||
|
||||
/* If the filesize of the symlink is bigger than
|
||||
60 the symlink 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 the filesize of the symlink is equal to or bigger than 60 the symlink
|
||||
* 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))
|
||||
grub_memcpy (symlink,
|
||||
diro->inode.symlink,
|
||||
grub_le_to_cpu32 (diro->inode.size));
|
||||
|
@@ -889,6 +889,7 @@ grub_ntfs_mount (grub_disk_t disk)
|
||||
struct grub_ntfs_bpb bpb;
|
||||
struct grub_ntfs_data *data = 0;
|
||||
grub_uint32_t spc;
|
||||
grub_uint32_t sectors_per_cluster;
|
||||
|
||||
if (!disk)
|
||||
goto fail;
|
||||
@@ -903,14 +904,18 @@ grub_ntfs_mount (grub_disk_t disk)
|
||||
if (grub_disk_read (disk, 0, 0, sizeof (bpb), &bpb))
|
||||
goto fail;
|
||||
|
||||
sectors_per_cluster = bpb.sectors_per_cluster;
|
||||
if (sectors_per_cluster > 0x80)
|
||||
sectors_per_cluster = 1U << (256U - bpb.sectors_per_cluster);
|
||||
|
||||
if (grub_memcmp ((char *) &bpb.oem_name, "NTFS", 4) != 0
|
||||
|| bpb.sectors_per_cluster == 0
|
||||
|| (bpb.sectors_per_cluster & (bpb.sectors_per_cluster - 1)) != 0
|
||||
|| sectors_per_cluster == 0
|
||||
|| (sectors_per_cluster & (sectors_per_cluster - 1)) != 0
|
||||
|| bpb.bytes_per_sector == 0
|
||||
|| (bpb.bytes_per_sector & (bpb.bytes_per_sector - 1)) != 0)
|
||||
goto fail;
|
||||
|
||||
spc = (((grub_uint32_t) bpb.sectors_per_cluster
|
||||
spc = (((grub_uint32_t) sectors_per_cluster
|
||||
* (grub_uint32_t) grub_le_to_cpu16 (bpb.bytes_per_sector))
|
||||
>> GRUB_NTFS_BLK_SHR);
|
||||
if (spc == 0)
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include <grub/fshelp.h>
|
||||
#include <grub/deflate.h>
|
||||
#include <minilzo.h>
|
||||
#include <zstd.h>
|
||||
|
||||
#include "xz.h"
|
||||
#include "xz_stream.h"
|
||||
@@ -184,6 +185,7 @@ enum
|
||||
COMPRESSION_LZO = 3,
|
||||
COMPRESSION_XZ = 4,
|
||||
COMPRESSION_LZ4 = 5,
|
||||
COMPRESSION_ZSTD = 6,
|
||||
};
|
||||
|
||||
|
||||
@@ -398,6 +400,25 @@ static grub_ssize_t lz4_decompress_wrap(char *inbuf, grub_size_t insize, grub_of
|
||||
return len;
|
||||
}
|
||||
|
||||
static grub_ssize_t zstd_decompress_wrap(char *inbuf, grub_size_t insize, grub_off_t off,
|
||||
char *outbuf, grub_size_t len, struct grub_squash_data *data)
|
||||
{
|
||||
char *udata = NULL;
|
||||
int usize = data->blksz;
|
||||
if (usize < 8192)
|
||||
usize = 8192;
|
||||
|
||||
udata = grub_malloc (usize);
|
||||
if (!udata)
|
||||
return -1;
|
||||
|
||||
ZSTD_decompress(udata, usize, inbuf, insize);
|
||||
grub_memcpy(outbuf, udata + off, len);
|
||||
grub_free(udata);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
static struct grub_squash_data *
|
||||
squash_mount (grub_disk_t disk)
|
||||
{
|
||||
@@ -447,6 +468,9 @@ squash_mount (grub_disk_t disk)
|
||||
case grub_cpu_to_le16_compile_time (COMPRESSION_LZ4):
|
||||
data->decompress = lz4_decompress_wrap;
|
||||
break;
|
||||
case grub_cpu_to_le16_compile_time (COMPRESSION_ZSTD):
|
||||
data->decompress = zstd_decompress_wrap;
|
||||
break;
|
||||
case grub_cpu_to_le16_compile_time (COMPRESSION_XZ):
|
||||
data->decompress = xz_decompress;
|
||||
data->xzbuf = grub_malloc (XZBUFSIZ);
|
||||
@@ -519,7 +543,7 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir,
|
||||
break;
|
||||
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_DIR):
|
||||
off = grub_le_to_cpu16 (dir->ino.long_dir.offset);
|
||||
endoff = grub_le_to_cpu16 (dir->ino.long_dir.size) + off - 3;
|
||||
endoff = grub_le_to_cpu32 (dir->ino.long_dir.size) + off - 3;
|
||||
chunk = grub_le_to_cpu32 (dir->ino.long_dir.chunk);
|
||||
break;
|
||||
default:
|
||||
|
@@ -734,6 +734,11 @@ read_property (struct parsebuf *p)
|
||||
"%s:%d:%d property value invalid; "
|
||||
"enclose literal values in quotes (\")",
|
||||
p->filename, p->line_num, p->col_num);
|
||||
|
||||
grub_printf("File: %s\nLine:%d Column:%d\n"
|
||||
"property value invalid; enclose literal values in quotes (\")\n\n",
|
||||
p->filename, p->line_num, p->col_num);
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@@ -342,10 +342,12 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
|
||||
if (len == 0)
|
||||
return 0;
|
||||
|
||||
if (grub_strncmp(file->name, GRUB_MEMFILE_MEM, grub_strlen(GRUB_MEMFILE_MEM)) == 0) {
|
||||
if (file->name) {
|
||||
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);
|
||||
file->offset += len;
|
||||
return len;
|
||||
}
|
||||
}
|
||||
|
||||
read_hook = file->read_hook;
|
||||
|
@@ -229,10 +229,7 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
|
||||
if (! file)
|
||||
goto fail;
|
||||
|
||||
/* Get the root device's device path. */
|
||||
dev = grub_device_open (0);
|
||||
if (! dev)
|
||||
goto fail;
|
||||
dev = file->device;
|
||||
|
||||
if (dev->disk)
|
||||
dev_handle = grub_efidisk_get_device_handle (dev->disk);
|
||||
@@ -257,16 +254,13 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
|
||||
if (dev_handle)
|
||||
dp = grub_efi_get_device_path (dev_handle);
|
||||
|
||||
if (! dp)
|
||||
if (dp != NULL)
|
||||
{
|
||||
grub_error (GRUB_ERR_BAD_DEVICE, "not a valid root device");
|
||||
goto fail;
|
||||
file_path = make_file_path (dp, filename);
|
||||
if (! file_path)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
file_path = make_file_path (dp, filename);
|
||||
if (! file_path)
|
||||
goto fail;
|
||||
|
||||
//grub_printf ("file path: ");
|
||||
//grub_efi_print_device_path (file_path);
|
||||
|
||||
@@ -390,16 +384,12 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
|
||||
}
|
||||
|
||||
grub_file_close (file);
|
||||
grub_device_close (dev);
|
||||
|
||||
grub_loader_set (grub_chainloader_boot, grub_chainloader_unload, 0);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
|
||||
if (dev)
|
||||
grub_device_close (dev);
|
||||
|
||||
if (file)
|
||||
grub_file_close (file);
|
||||
|
||||
|
@@ -88,6 +88,8 @@ static int ventoy_linux_argc = 0;
|
||||
static char **ventoy_linux_args = NULL;
|
||||
static int ventoy_extra_initrd_num = 0;
|
||||
static char *ventoy_extra_initrd_list[256];
|
||||
static grub_command_func_t ventoy_linux16_func = NULL;
|
||||
static grub_command_func_t ventoy_initrd16_func = NULL;
|
||||
static grub_err_t
|
||||
grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]);
|
||||
|
||||
@@ -667,54 +669,6 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_set_boot_opt (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
const char *vtdebug;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
ventoy_linux_args[ventoy_linux_argc + (LINUX_MAX_ARGC / 2) ] = grub_strdup(argv[i]);
|
||||
ventoy_linux_argc++;
|
||||
}
|
||||
|
||||
vtdebug = grub_env_get("vtdebug_flag");
|
||||
if (vtdebug && vtdebug[0])
|
||||
{
|
||||
ventoy_debug = 1;
|
||||
}
|
||||
|
||||
if (ventoy_debug) grub_printf("ventoy set boot opt %d\n", ventoy_linux_argc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
for (i = 0; i < LINUX_MAX_ARGC; i++)
|
||||
{
|
||||
if (ventoy_linux_args[i])
|
||||
{
|
||||
grub_free(ventoy_linux_args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ventoy_debug = 0;
|
||||
ventoy_linux_argc = 0;
|
||||
ventoy_initrd_called = 0;
|
||||
grub_memset(ventoy_linux_args, 0, sizeof(char *) * LINUX_MAX_ARGC);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_extra_initrd_append (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
@@ -1576,6 +1530,92 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
return grub_cmd_initrd(cmd, ventoy_extra_initrd_num, ventoy_extra_initrd_list);
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_set_boot_opt (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
const char *vtdebug;
|
||||
grub_command_t regcmd;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
ventoy_linux_args[ventoy_linux_argc + (LINUX_MAX_ARGC / 2) ] = grub_strdup(argv[i]);
|
||||
ventoy_linux_argc++;
|
||||
}
|
||||
|
||||
vtdebug = grub_env_get("vtdebug_flag");
|
||||
if (vtdebug && vtdebug[0])
|
||||
{
|
||||
ventoy_debug = 1;
|
||||
}
|
||||
|
||||
if (ventoy_debug) grub_printf("ventoy set boot opt %d\n", ventoy_linux_argc);
|
||||
|
||||
ventoy_linux16_func = ventoy_initrd16_func = NULL;
|
||||
regcmd = grub_command_find("linux16");
|
||||
if (regcmd)
|
||||
{
|
||||
ventoy_linux16_func = regcmd->func;
|
||||
regcmd->func = grub_cmd_linux;
|
||||
}
|
||||
|
||||
regcmd = grub_command_find("initrd16");
|
||||
if (regcmd)
|
||||
{
|
||||
ventoy_initrd16_func = regcmd->func;
|
||||
regcmd->func = ventoy_cmd_initrd;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
grub_command_t regcmd;
|
||||
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
for (i = 0; i < LINUX_MAX_ARGC; i++)
|
||||
{
|
||||
if (ventoy_linux_args[i])
|
||||
{
|
||||
grub_free(ventoy_linux_args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
ventoy_debug = 0;
|
||||
ventoy_linux_argc = 0;
|
||||
ventoy_initrd_called = 0;
|
||||
grub_memset(ventoy_linux_args, 0, sizeof(char *) * LINUX_MAX_ARGC);
|
||||
|
||||
if (ventoy_linux16_func)
|
||||
{
|
||||
regcmd = grub_command_find("linux16");
|
||||
if (regcmd)
|
||||
{
|
||||
regcmd->func = ventoy_linux16_func;
|
||||
}
|
||||
ventoy_linux16_func = NULL;
|
||||
}
|
||||
|
||||
if (ventoy_initrd16_func)
|
||||
{
|
||||
regcmd = grub_command_find("initrd16");
|
||||
if (regcmd)
|
||||
{
|
||||
regcmd->func = ventoy_initrd16_func;
|
||||
}
|
||||
ventoy_initrd16_func = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static grub_command_t cmd_linux, cmd_initrd, cmd_linuxefi, cmd_initrdefi;
|
||||
static grub_command_t cmd_set_bootopt, cmd_unset_bootopt, cmd_extra_initrd_append, cmd_extra_initrd_reset;
|
||||
|
@@ -128,11 +128,22 @@ insert_dir (const char *name, struct dir **root,
|
||||
n->name = grub_strndup (cb, ce - cb);
|
||||
if (ptr)
|
||||
{
|
||||
/*
|
||||
* Create the substring with the trailing NUL byte
|
||||
* 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;
|
||||
}
|
||||
grub_dprintf ("linux", "Creating directory %s, %s\n", name, ce);
|
||||
ptr = make_header (ptr, name, ce - name,
|
||||
ptr = make_header (ptr, tmp_name, ce - name + 1,
|
||||
040777, 0);
|
||||
grub_free (tmp_name);
|
||||
}
|
||||
size += ALIGN_UP ((ce - (char *) name)
|
||||
size += ALIGN_UP ((ce - (char *) name + 1)
|
||||
+ sizeof (struct newc_head), 4);
|
||||
*head = n;
|
||||
cur = n;
|
||||
@@ -183,7 +194,7 @@ grub_initrd_init (int argc, char *argv[],
|
||||
}
|
||||
initrd_ctx->size
|
||||
+= ALIGN_UP (sizeof (struct newc_head)
|
||||
+ grub_strlen (initrd_ctx->components[i].newc_name),
|
||||
+ grub_strlen (initrd_ctx->components[i].newc_name) + 1,
|
||||
4);
|
||||
initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name,
|
||||
&root, 0);
|
||||
@@ -194,7 +205,7 @@ grub_initrd_init (int argc, char *argv[],
|
||||
else if (newc)
|
||||
{
|
||||
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
||||
+ sizeof ("TRAILER!!!"), 4);
|
||||
free_dir (root);
|
||||
root = 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 (sizeof (struct newc_head)
|
||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
||||
+ sizeof ("TRAILER!!!"), 4);
|
||||
free_dir (root);
|
||||
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,
|
||||
&root, ptr);
|
||||
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,
|
||||
initrd_ctx->components[i].size);
|
||||
newc = 1;
|
||||
}
|
||||
else if (newc)
|
||||
{
|
||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1,
|
||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!"),
|
||||
0, 0);
|
||||
free_dir (root);
|
||||
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));
|
||||
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);
|
||||
root = 0;
|
||||
|
@@ -951,12 +951,12 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
|
||||
menu_fini ();
|
||||
if (g_ventoy_terminal_output == 0)
|
||||
{
|
||||
grub_script_execute_sourcecode("terminal_output console");
|
||||
grub_script_execute_sourcecode("vt_push_menu_lang en_US\nterminal_output console");
|
||||
g_ventoy_terminal_output = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_script_execute_sourcecode("terminal_output gfxterm");
|
||||
grub_script_execute_sourcecode("terminal_output gfxterm\nvt_pop_menu_lang");
|
||||
g_ventoy_terminal_output = 0;
|
||||
}
|
||||
goto refresh;
|
||||
|
@@ -244,6 +244,15 @@ static int ventoy_browser_valid_dirname(const char *name, int len)
|
||||
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 (0 == grub_strncmp(name, "$RECYCLE.BIN", 12) ||
|
||||
@@ -392,6 +401,11 @@ static int ventoy_browser_iterate_dir(const char *filename, const struct grub_di
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (grub_file_is_vlnk_suffix(filename, len))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
node = grub_zalloc(sizeof(browser_node));
|
||||
if (!node)
|
||||
{
|
||||
|
@@ -65,6 +65,7 @@ int g_initrd_img_count = 0;
|
||||
int g_valid_initrd_count = 0;
|
||||
int g_default_menu_mode = 0;
|
||||
int g_filt_dot_underscore_file = 0;
|
||||
int g_filt_trash_dir = 1;
|
||||
int g_sort_case_sensitive = 0;
|
||||
int g_tree_view_menu_style = 0;
|
||||
static grub_file_t g_old_file;
|
||||
@@ -158,7 +159,9 @@ const char *g_menu_prefix[img_type_max] =
|
||||
"iso", "wim", "efi", "img", "vhd", "vtoy"
|
||||
};
|
||||
|
||||
static const char *g_lower_chksum_name[] = { "md5", "sha1", "sha256", "sha512" };
|
||||
static const char *g_lower_chksum_name[VTOY_CHKSUM_NUM] = { "md5", "sha1", "sha256", "sha512" };
|
||||
static int g_lower_chksum_namelen[VTOY_CHKSUM_NUM] = { 3, 4, 6, 6 };
|
||||
static int g_chksum_retlen[VTOY_CHKSUM_NUM] = { 32, 40, 64, 128 };
|
||||
|
||||
static int g_vtoy_secondary_need_recover = 0;
|
||||
|
||||
@@ -1765,6 +1768,10 @@ static int ventoy_check_vlnk_data(ventoy_vlnk *vlnk, int print, char *dst, int s
|
||||
cur->fs->fs_close(&file);
|
||||
grub_snprintf(dst, size - 1, "(%s)%s", cur->device, vlnk->filepath);
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_errno = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1894,9 +1901,14 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (filename[0] == '$' && 0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
||||
if (g_filt_trash_dir)
|
||||
{
|
||||
return 0;
|
||||
if (0 == grub_strncmp(filename, ".trash-", 7) ||
|
||||
0 == grub_strcmp(filename, ".Trashes") ||
|
||||
0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||
@@ -2825,6 +2837,12 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
||||
{
|
||||
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");
|
||||
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
||||
@@ -6305,36 +6323,6 @@ static grub_err_t ventoy_cmd_load_menu_lang(grub_extcmd_context_t ctxt, int argc
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_vtoychksum_exist(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int cnt;
|
||||
char c;
|
||||
char *pos = NULL;
|
||||
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
|
||||
cnt = ventoy_str_chrcnt(args[1], '/');
|
||||
if (cnt > 1)
|
||||
{
|
||||
pos = grub_strrchr(args[1], '/');
|
||||
c = *pos;
|
||||
*pos = 0;
|
||||
if (ventoy_check_file_exist("%s%s/VENTOY_CHECKSUM", args[0], args[1]))
|
||||
{
|
||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
*pos = c;
|
||||
}
|
||||
|
||||
if (ventoy_check_file_exist("%s/VENTOY_CHECKSUM", args[0]))
|
||||
{
|
||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ventoy_chksum_pathcmp(int chktype, char *rlpath, char *rdpath)
|
||||
{
|
||||
char *pos1 = NULL;
|
||||
@@ -6485,13 +6473,12 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
|
||||
char fchksum[64];
|
||||
char readchk[256] = {0};
|
||||
char filebuf[512] = {0};
|
||||
int retlen[] = { 32, 40, 64, 128 };
|
||||
char uchkname[16];
|
||||
|
||||
(void)ctxt;
|
||||
|
||||
index = (int)grub_strtol(args[0], NULL, 10);
|
||||
if (argc != 2 || index < 0 || index >= (int)ARRAY_SIZE(retlen))
|
||||
if (argc != 2 || index < 0 || index >= VTOY_CHKSUM_NUM)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@@ -6519,17 +6506,17 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
|
||||
if (pos)
|
||||
{
|
||||
VTOY_SKIP_SPACE_NEXT(pos, 1);
|
||||
grub_memcpy(readchk, pos, retlen[index]);
|
||||
grub_memcpy(readchk, pos, g_chksum_retlen[index]);
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_memcpy(readchk, filebuf, retlen[index]);
|
||||
grub_memcpy(readchk, filebuf, g_chksum_retlen[index]);
|
||||
}
|
||||
}
|
||||
else if (chktype == 3 || chktype == 4)
|
||||
{
|
||||
grub_snprintf(fchksum, sizeof(fchksum), "global VENTOY_CHECKSUM");
|
||||
ventoy_find_checksum(file, uchkname, retlen[index], args[1], chktype, readchk);
|
||||
ventoy_find_checksum(file, uchkname, g_chksum_retlen[index], args[1], chktype, readchk);
|
||||
if (readchk[0] == 0)
|
||||
{
|
||||
grub_printf("\n\n%s value not found in %s.\n", uchkname, fchksum);
|
||||
@@ -6539,7 +6526,7 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
|
||||
else
|
||||
{
|
||||
grub_snprintf(fchksum, sizeof(fchksum), "local VENTOY_CHECKSUM");
|
||||
ventoy_find_checksum(file, uchkname, retlen[index], args[1], chktype, readchk);
|
||||
ventoy_find_checksum(file, uchkname, g_chksum_retlen[index], args[1], chktype, readchk);
|
||||
if (readchk[0] == 0)
|
||||
{
|
||||
grub_file_close(file);
|
||||
@@ -6547,7 +6534,7 @@ static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc,
|
||||
if (file)
|
||||
{
|
||||
grub_snprintf(fchksum, sizeof(fchksum), "global VENTOY_CHECKSUM");
|
||||
ventoy_find_checksum(file, uchkname, retlen[index], args[1], 3, readchk);
|
||||
ventoy_find_checksum(file, uchkname, g_chksum_retlen[index], args[1], 3, readchk);
|
||||
if (readchk[0] == 0)
|
||||
{
|
||||
grub_printf("\n\n%s value not found in both local and global VENTOY_CHECKSUM.\n", uchkname);
|
||||
@@ -6573,6 +6560,181 @@ end:
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
static int ventoy_find_all_checksum
|
||||
(
|
||||
grub_file_t file,
|
||||
char *path,
|
||||
int chktype,
|
||||
int exists[VTOY_CHKSUM_NUM],
|
||||
int *ptotexist
|
||||
)
|
||||
{
|
||||
int i;
|
||||
int ulen;
|
||||
int tot = 0;
|
||||
char c = 0;
|
||||
char *pos = NULL;
|
||||
char *pos1 = NULL;
|
||||
char *pos2 = NULL;
|
||||
char *buf = NULL;
|
||||
char *currline = NULL;
|
||||
char *nextline = NULL;
|
||||
const char *uname = NULL;
|
||||
|
||||
tot = *ptotexist;
|
||||
|
||||
/* read file to buffer */
|
||||
buf = grub_malloc(file->size + 4);
|
||||
if (!buf)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
grub_file_read(file, buf, file->size);
|
||||
buf[file->size] = 0;
|
||||
|
||||
/* parse each line */
|
||||
for (currline = buf; currline; currline = nextline)
|
||||
{
|
||||
nextline = ventoy_get_line(currline);
|
||||
VTOY_SKIP_SPACE(currline);
|
||||
|
||||
for (i = 0; i < VTOY_CHKSUM_NUM; i++)
|
||||
{
|
||||
if (exists[i])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
uname = g_lower_chksum_name[i];
|
||||
ulen = g_lower_chksum_namelen[i];
|
||||
|
||||
if (grub_strncasecmp(currline, uname, ulen) == 0)
|
||||
{
|
||||
pos = grub_strchr(currline, '=');
|
||||
pos1 = grub_strchr(currline, '(');
|
||||
pos2 = grub_strchr(currline, ')');
|
||||
|
||||
if (pos && pos1 && pos2)
|
||||
{
|
||||
c = *pos2;
|
||||
*pos2 = 0;
|
||||
if (ventoy_chksum_pathcmp(chktype, path, pos1 + 1) == 0)
|
||||
{
|
||||
exists[i] = 1;
|
||||
tot++;
|
||||
}
|
||||
*pos2 = c;
|
||||
}
|
||||
}
|
||||
else if (ventoy_str_len_alnum(currline, g_chksum_retlen[i]))
|
||||
{
|
||||
VTOY_SKIP_SPACE_NEXT_EX(pos, currline, g_chksum_retlen[i]);
|
||||
if (ventoy_chksum_pathcmp(chktype, path, pos) == 0)
|
||||
{
|
||||
exists[i] = 1;
|
||||
tot++;
|
||||
}
|
||||
}
|
||||
|
||||
if (tot >= VTOY_CHKSUM_NUM)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
*ptotexist = tot;
|
||||
grub_free(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_vtoychksum_exist(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int i = 0;
|
||||
int cnt = 0;
|
||||
char c = 0;
|
||||
int tip = 0;
|
||||
char *pos = NULL;
|
||||
grub_file_t file = NULL;
|
||||
const char *isopart = NULL;
|
||||
int exists[VTOY_CHKSUM_NUM] = { 0, 0, 0, 0 };
|
||||
int totexist = 0;
|
||||
|
||||
(void)argc;
|
||||
(void)ctxt;
|
||||
|
||||
isopart = grub_env_get("vtoy_iso_part");
|
||||
|
||||
for (i = 0; i < VTOY_CHKSUM_NUM; i++)
|
||||
{
|
||||
if (ventoy_check_file_exist("%s%s.%s", isopart, args[0], g_lower_chksum_name[i]))
|
||||
{
|
||||
exists[i] = 1;
|
||||
totexist++;
|
||||
}
|
||||
}
|
||||
|
||||
if (totexist == VTOY_CHKSUM_NUM)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
cnt = ventoy_str_chrcnt(args[0], '/');
|
||||
if (cnt > 1)
|
||||
{
|
||||
pos = grub_strrchr(args[0], '/');
|
||||
c = *pos;
|
||||
*pos = 0;
|
||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s%s/VENTOY_CHECKSUM", isopart, args[0]);
|
||||
*pos = c;
|
||||
|
||||
if (file)
|
||||
{
|
||||
if (tip == 0 && file->size > (32 * VTOY_SIZE_1KB))
|
||||
{
|
||||
tip = 1;
|
||||
grub_printf("Reading checksum file...\n");
|
||||
grub_refresh();
|
||||
}
|
||||
|
||||
debug("parse local VENTOY_CHECKSUM\n");
|
||||
ventoy_find_all_checksum(file, args[0], 2, exists, &totexist);
|
||||
grub_file_close(file);
|
||||
}
|
||||
}
|
||||
|
||||
if (totexist == VTOY_CHKSUM_NUM)
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s/VENTOY_CHECKSUM", isopart);
|
||||
if (file)
|
||||
{
|
||||
if (tip == 0 && file->size > (32 * VTOY_SIZE_1KB))
|
||||
{
|
||||
tip = 1;
|
||||
grub_printf("Reading checksum file...\n");
|
||||
grub_refresh();
|
||||
}
|
||||
|
||||
debug("parse global VENTOY_CHECKSUM\n");
|
||||
ventoy_find_all_checksum(file, args[0], (cnt > 1) ? 3 : 4, exists, &totexist);
|
||||
grub_file_close(file);
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
ventoy_env_int_set("VT_EXIST_MD5", exists[0]);
|
||||
ventoy_env_int_set("VT_EXIST_SHA1", exists[1]);
|
||||
ventoy_env_int_set("VT_EXIST_SHA256", exists[2]);
|
||||
ventoy_env_int_set("VT_EXIST_SHA512", exists[3]);
|
||||
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
static const char * ventoy_menu_lang_read_hook(struct grub_env_var *var, const char *val)
|
||||
{
|
||||
@@ -6805,6 +6967,8 @@ static cmd_para ventoy_cmds[] =
|
||||
{ "vt_cur_menu_lang", ventoy_cmd_cur_menu_lang, 0, NULL, "", "", NULL },
|
||||
{ "vt_vtoychksum_exist", ventoy_cmd_vtoychksum_exist, 0, NULL, "", "", NULL },
|
||||
{ "vt_cmp_checksum", ventoy_cmd_cmp_checksum, 0, NULL, "", "", NULL },
|
||||
{ "vt_push_menu_lang", ventoy_cmd_push_menulang, 0, NULL, "", "", NULL },
|
||||
{ "vt_pop_menu_lang", ventoy_cmd_pop_menulang, 0, NULL, "", "", NULL },
|
||||
|
||||
};
|
||||
|
||||
|
@@ -62,6 +62,8 @@
|
||||
|
||||
#define VTOY_WARNING "!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!"
|
||||
|
||||
#define VTOY_CHKSUM_NUM 4
|
||||
|
||||
#define VTOY_PLAT_I386_UEFI 0x49413332
|
||||
#define VTOY_PLAT_ARM64_UEFI 0x41413634
|
||||
#define VTOY_PLAT_X86_64_UEFI 0x55454649
|
||||
@@ -859,7 +861,8 @@ typedef struct vhd_footer_t
|
||||
grub_uint8_t savedst; // Saved state
|
||||
}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. */
|
||||
#define VDI_IMAGE_SIGNATURE (0xbeda107f)
|
||||
@@ -1296,6 +1299,7 @@ extern int g_tree_view_menu_style;
|
||||
extern int g_sort_case_sensitive;
|
||||
extern int g_wimboot_enable;
|
||||
extern int g_filt_dot_underscore_file;
|
||||
extern int g_filt_trash_dir;
|
||||
extern int g_vtoy_file_flt[VTOY_FILE_FLT_BUTT];
|
||||
extern const char *g_menu_class[img_type_max];
|
||||
extern char g_iso_path[256];
|
||||
@@ -1311,6 +1315,8 @@ grub_err_t ventoy_cmd_cur_menu_lang(grub_extcmd_context_t ctxt, int argc, char *
|
||||
extern int ventoy_menu_push_key(int code);
|
||||
int ventoy_ctrl_var_init(void);
|
||||
int ventoy_global_var_init(void);
|
||||
grub_err_t ventoy_cmd_push_menulang(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||
grub_err_t ventoy_cmd_pop_menulang(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||
|
||||
#endif /* __VENTOY_DEF_H__ */
|
||||
|
||||
|
@@ -1099,6 +1099,7 @@ static grub_err_t ventoy_linux_locate_initrd(int filt, int *filtcnt)
|
||||
if (filtbysize
|
||||
&& (NULL == grub_strstr(node->name, "minirt.gz"))
|
||||
&& (NULL == grub_strstr(node->name, "initrd.xz"))
|
||||
&& (NULL == grub_strstr(node->name, "initrd.gz"))
|
||||
)
|
||||
{
|
||||
if (filt > 0 && file->size <= g_ventoy_cpio_size + 2048)
|
||||
|
@@ -66,6 +66,7 @@ static theme_list *g_theme_head = NULL;
|
||||
static int g_theme_random = vtoy_theme_random_boot_second;
|
||||
static char g_theme_single_file[256];
|
||||
static char g_cur_menu_language[32] = {0};
|
||||
static char g_push_menu_language[32] = {0};
|
||||
|
||||
static int ventoy_plugin_is_parent(const char *pat, int patlen, const char *isopath)
|
||||
{
|
||||
@@ -3624,3 +3625,33 @@ grub_err_t ventoy_cmd_cur_menu_lang(grub_extcmd_context_t ctxt, int argc, char *
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
grub_err_t ventoy_cmd_push_menulang(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
(void)argc;
|
||||
(void)ctxt;
|
||||
|
||||
if (g_push_menu_language[0] == 0)
|
||||
{
|
||||
grub_memcpy(g_push_menu_language, g_cur_menu_language, sizeof(g_push_menu_language));
|
||||
ventoy_plugin_load_menu_lang(0, args[0]);
|
||||
}
|
||||
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
grub_err_t ventoy_cmd_pop_menulang(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
(void)argc;
|
||||
(void)ctxt;
|
||||
(void)args;
|
||||
|
||||
if (g_push_menu_language[0])
|
||||
{
|
||||
ventoy_plugin_load_menu_lang(0, g_push_menu_language);
|
||||
g_push_menu_language[0] = 0;
|
||||
}
|
||||
|
||||
VENTOY_CMD_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -262,6 +262,10 @@ static int ventoy_vhd_patch_disk(const char *vhdpath, ventoy_patch_vhd *patch1,
|
||||
}
|
||||
else
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
offset = gpt->MBR.PartTbl[partIndex].StartSectorId;
|
||||
}
|
||||
offset *= 512;
|
||||
debug("MBR disk signature: %02x%02x%02x%02x Part(%d) offset:%llu\n",
|
||||
gpt->MBR.BootCode[0x1b8 + 0], gpt->MBR.BootCode[0x1b8 + 1],
|
||||
@@ -500,7 +504,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
||||
vhd_footer_t vhdfoot;
|
||||
VDIPREHEADER vdihdr;
|
||||
char type[16] = {0};
|
||||
ventoy_gpt_info *gpt;
|
||||
ventoy_gpt_info *gpt = NULL;
|
||||
|
||||
(void)ctxt;
|
||||
|
||||
@@ -532,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_read(file, &vdihdr, sizeof(vdihdr));
|
||||
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE &&
|
||||
grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO, grub_strlen(VDI_IMAGE_FILE_INFO)) == 0)
|
||||
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE)
|
||||
{
|
||||
offset = 2 * 1048576;
|
||||
g_img_trim_head_secnum = offset / 512;
|
||||
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;
|
||||
g_img_trim_head_secnum = offset / 512;
|
||||
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
|
||||
{
|
||||
@@ -564,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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
BIN
ICON/filechecksum.gif
Normal file
BIN
ICON/filechecksum.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 437 KiB |
@@ -20,7 +20,7 @@
|
||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||
|
||||
$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 exec $BUSYBOX_PATH/sh" -i /init
|
||||
|
32
IMG/cpio/ventoy/hook/chimera/disk_hook.sh
Normal file
32
IMG/cpio/ventoy/hook/chimera/disk_hook.sh
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/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
|
||||
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
vtdiskname=$(get_ventoy_disk_name)
|
||||
if [ "$vtdiskname" = "unknown" ]; then
|
||||
vtlog "wait for disk ..."
|
||||
$SLEEP 3
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
22
IMG/cpio/ventoy/hook/chimera/ventoy-hook.sh
Normal file
22
IMG/cpio/ventoy/hook/chimera/ventoy-hook.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/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
|
||||
|
||||
$SED "/maybe_break *premount/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/chimera/disk_hook.sh" -i /init
|
@@ -40,13 +40,13 @@ ventoy_os_install_dmsetup_by_unsquashfs() {
|
||||
|
||||
dmModPath="/usr/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
||||
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
|
||||
rm -rf $VTOY_PATH/sqfs
|
||||
dmModPath="/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
||||
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
|
||||
|
||||
if [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
||||
|
@@ -37,12 +37,20 @@ ventoy_os_install_dmsetup_by_fuse() {
|
||||
|
||||
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
||||
|
||||
sfsfile=$(ls $VTOY_PATH/mnt/iso/*.sfs)
|
||||
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)
|
||||
fi
|
||||
|
||||
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
||||
|
||||
kVer=$(uname -r)
|
||||
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"
|
||||
insmod $KoName
|
||||
|
||||
|
@@ -28,6 +28,7 @@ vtlog "####### $0 $* ########"
|
||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||
|
||||
ventoy_os_install_dmsetup_by_fuse() {
|
||||
local drvdir=""
|
||||
vtlog "ventoy_os_install_dmsetup_by_fuse $*"
|
||||
|
||||
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
|
||||
|
||||
|
||||
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/lib/modules ]; then
|
||||
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$2/kernel/drivers/md/dm-mod.ko*)
|
||||
if [ -n "$KoName" -a -f $KoName ]; then
|
||||
drvdir=$VTOY_PATH/mnt/squashfs/lib/modules/$2
|
||||
break
|
||||
fi
|
||||
fi
|
||||
@@ -49,11 +52,29 @@ ventoy_os_install_dmsetup_by_fuse() {
|
||||
umount $VTOY_PATH/mnt/squashfs
|
||||
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"
|
||||
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"
|
||||
insmod $KoName
|
||||
|
||||
|
@@ -26,6 +26,10 @@ ventoy_get_debian_distro() {
|
||||
if $EGREP -q "ID=.*antix|ID=.*mx" /etc/initrd-release; then
|
||||
echo 'antix'; return
|
||||
fi
|
||||
elif [ -e /etc/initrd_release ]; then
|
||||
if $EGREP -q "ID=.*antix|ID=.*mx" /etc/initrd_release; then
|
||||
echo 'antix'; return
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -e /DISTRO_SPECS ]; then
|
||||
@@ -45,6 +49,8 @@ ventoy_get_debian_distro() {
|
||||
echo 'mll'; return
|
||||
elif $GREP -m1 -q 'stratodesk.com' /init; then
|
||||
echo 'stratodesk'; return
|
||||
elif $GREP -q "\bPVE\b" /init; then
|
||||
echo 'pve'; return
|
||||
fi
|
||||
fi
|
||||
|
||||
|
40
IMG/cpio/ventoy/hook/deepin/disk_mount_hook.sh
Normal file
40
IMG/cpio/ventoy/hook/deepin/disk_mount_hook.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/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
|
||||
|
||||
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
|
||||
|
||||
vtlog "${vtdiskname#/dev/}2 found..."
|
||||
$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/udev_disk_hook.sh "${vtdiskname#/dev/}2"
|
||||
|
||||
if [ -f /ventoy/autoinstall ]; then
|
||||
sh /ventoy/hook/default/auto_install_varexp.sh /ventoy/autoinstall
|
||||
fi
|
151
IMG/cpio/ventoy/hook/deepin/udev_disk_hook.sh
Normal file
151
IMG/cpio/ventoy/hook/deepin/udev_disk_hook.sh
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/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
|
||||
|
||||
ventoy_os_install_dmsetup() {
|
||||
|
||||
vtlog "ventoy_os_install_dmsetup $1 ..."
|
||||
|
||||
vt_usb_disk=$1
|
||||
|
||||
# dump iso file location
|
||||
$VTOY_PATH/tool/vtoydm -i -f $VTOY_PATH/ventoy_image_map -d ${vt_usb_disk} > $VTOY_PATH/iso_file_list
|
||||
|
||||
# install dmsetup
|
||||
LINE=$($GREP ' dmsetup.*\.udeb' $VTOY_PATH/iso_file_list)
|
||||
if [ $? -eq 0 ]; then
|
||||
install_udeb_from_line "$LINE" ${vt_usb_disk}
|
||||
fi
|
||||
|
||||
# install libdevmapper
|
||||
LINE=$($GREP ' libdevmapper.*\.udeb' $VTOY_PATH/iso_file_list)
|
||||
if [ $? -eq 0 ]; then
|
||||
install_udeb_from_line "$LINE" ${vt_usb_disk}
|
||||
fi
|
||||
|
||||
# install md-modules
|
||||
LINE=$($GREP -i ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list)
|
||||
if [ $? -eq 0 ]; then
|
||||
LINTCNT=$($GREP -i -c ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list)
|
||||
if [ $LINTCNT -gt 1 ]; then
|
||||
vtlog "more than one pkgs, need to filter..."
|
||||
VER=$($BUSYBOX_PATH/uname -r)
|
||||
|
||||
LINE=$($GREP -i ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list | $GREP -i $VER)
|
||||
LINTCNT=$($GREP -i ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list | $GREP -i -c $VER)
|
||||
if [ $LINTCNT -gt 1 ]; then
|
||||
vtlog "Still more than one pkgs, use the first one..."
|
||||
LINE=$($GREP -i ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list | $GREP -i -m1 $VER)
|
||||
fi
|
||||
fi
|
||||
install_udeb_from_line "$LINE" ${vt_usb_disk}
|
||||
fi
|
||||
|
||||
# insmod md-mod if needed
|
||||
if $GREP -q 'device-mapper' /proc/devices; then
|
||||
vtlog "device mapper module is loaded"
|
||||
else
|
||||
vtlog "device mapper module is NOT loaded, now load it..."
|
||||
|
||||
VER=$($BUSYBOX_PATH/uname -r)
|
||||
KO=$($FIND /lib/modules/$VER/kernel/drivers/md -name "dm-mod*")
|
||||
vtlog "KO=$KO"
|
||||
|
||||
insmod $KO
|
||||
fi
|
||||
|
||||
vtlog "dmsetup install finish, now check it..."
|
||||
if dmsetup info >> $VTLOG 2>&1; then
|
||||
vtlog "dmsetup work ok"
|
||||
else
|
||||
vtlog "dmsetup not work, now try to load eglibc ..."
|
||||
|
||||
# install eglibc (some ubuntu 32 bit version need it)
|
||||
LINE=$($GREP 'libc6-.*\.udeb' $VTOY_PATH/iso_file_list)
|
||||
if [ $? -eq 0 ]; then
|
||||
install_udeb_from_line "$LINE" ${vt_usb_disk}
|
||||
fi
|
||||
|
||||
if dmsetup info >> $VTLOG 2>&1; then
|
||||
vtlog "dmsetup work ok after retry"
|
||||
else
|
||||
vtlog "dmsetup still not work after retry"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
vtlog "==== $0 $* ===="
|
||||
|
||||
dmsetup_path=$(ventoy_find_bin_path dmsetup)
|
||||
if [ -z "$dmsetup_path" ]; then
|
||||
ventoy_os_install_dmsetup "/dev/${1:0:-1}"
|
||||
fi
|
||||
|
||||
if ! $GREP -q 'device-mapper' /proc/devices; then
|
||||
ventoy_os_install_dmsetup "/dev/${1:0:-1}"
|
||||
fi
|
||||
|
||||
ventoy_udev_disk_common_hook $*
|
||||
|
||||
#
|
||||
# Some distro default only accept usb partitions as install medium.
|
||||
# So if ventoy is installed on a non-USB device, we just mount /cdrom here except
|
||||
# for these has boot=live or boot=casper parameter in cmdline
|
||||
#
|
||||
VT_BUS_USB=""
|
||||
if [ -n "$ID_BUS" ]; then
|
||||
if echo $ID_BUS | $GREP -q -i usb; then
|
||||
VT_BUS_USB="YES"
|
||||
fi
|
||||
else
|
||||
if $BUSYBOX_PATH/ls -l /sys/class/block/${1:0:-1} | $GREP -q -i usb; then
|
||||
VT_BUS_USB="YES"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$VT_BUS_USB" ]; then
|
||||
vtlog "$1 is USB device"
|
||||
echo /dev/$1 > /ventoy/list-devices-usb-part
|
||||
else
|
||||
vtlog "$1 is NOT USB device (bus $ID_BUS)"
|
||||
|
||||
if $EGREP -q 'boot=|casper' /proc/cmdline; then
|
||||
vtlog "boot=, or casper, don't mount"
|
||||
else
|
||||
vtlog "No boot param, need to mount"
|
||||
echo /dev/$1 > /ventoy/list-devices-usb-part
|
||||
fi
|
||||
fi
|
||||
|
||||
#special process for Linx
|
||||
if $BUSYBOX_PATH/uname -r | $GREP -q "^2\.6"; then
|
||||
if $GREP -q "linx" /proc/version; then
|
||||
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})
|
||||
echo "/dev/$vtDM" > /ventoy/list-devices-usb-part
|
||||
fi
|
||||
fi
|
||||
|
||||
# OK finish
|
||||
set_ventoy_hook_finish
|
42
IMG/cpio/ventoy/hook/deepin/ventoy-hook.sh
Normal file
42
IMG/cpio/ventoy/hook/deepin/ventoy-hook.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/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/deepin/disk_mount_hook.sh" -i /init
|
||||
$SED "/^mountroot$/i\\export LIVEMEDIA=/dev/mapper/ventoy" -i /init
|
||||
$SED "/^mountroot$/i\\export LIVE_MEDIA=/dev/mapper/ventoy" -i /init
|
||||
|
||||
if $GREP -q 'live-media=' /proc/cmdline; then
|
||||
if [ -f /scripts/casper ] && $GREP -q '^ *LIVEMEDIA=' /scripts/casper; then
|
||||
$SED "s#^ *LIVEMEDIA=.*#LIVEMEDIA=/dev/mapper/ventoy#" -i /scripts/casper
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Here use udev hook ..." >> $VTLOG
|
||||
ventoy_systemd_udevd_work_around
|
||||
ventoy_add_udev_rule "$VTOY_PATH/hook/deepin/udev_disk_hook.sh %k"
|
||||
fi
|
||||
|
||||
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||
echo "Do auto install ..." >> $VTLOG
|
||||
$SED '/maybe_break[[:space:]]*init/i\/ventoy/busybox/sh /ventoy/hook/deepin/ventoy_autoinstall.sh >>/ventoy/autoinstall.log 2>&1' -i /init
|
||||
fi
|
122
IMG/cpio/ventoy/hook/deepin/ventoy_autoinstall.sh
Normal file
122
IMG/cpio/ventoy/hook/deepin/ventoy_autoinstall.sh
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/ventoy/busybox/sh
|
||||
|
||||
. /ventoy/hook/ventoy_hook_lib.sh
|
||||
|
||||
change_var_value() {
|
||||
local vfile=$1
|
||||
local vkey=$2
|
||||
local vVal=$3
|
||||
local quote=$4
|
||||
local vline
|
||||
|
||||
if [ $quote -eq 0 ]; then
|
||||
vline="$vkey = $vVal"
|
||||
else
|
||||
vline="$vkey = \"$vVal\""
|
||||
fi
|
||||
|
||||
if grep -q -m1 "^$vkey[[:space:]]*=" $vfile; then
|
||||
sed "s#^$vkey[[:space:]]*=.*#$vline#g" -i $vfile
|
||||
else
|
||||
echo "$vline" >> $vfile
|
||||
fi
|
||||
}
|
||||
|
||||
setting_script_process() {
|
||||
local sfile=$1
|
||||
local vItem
|
||||
local vB64Item
|
||||
|
||||
vItem=$(grep '^language[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
change_var_value $sfile 'select_language_default_locale' "$vItem" 0
|
||||
fi
|
||||
|
||||
vItem=$(grep '^timezone[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
change_var_value $sfile 'timezone_default' "$vItem" 0
|
||||
fi
|
||||
|
||||
vItem=$(grep '^hostname[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
change_var_value $sfile 'system_info_default_hostname' "$vItem" 1
|
||||
change_var_value $sfile 'DI_HOSTNAME' "$vItem" 1
|
||||
fi
|
||||
|
||||
vItem=$(grep '^root_password[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
vB64Item=$(echo -n "$vItem" | base64)
|
||||
change_var_value $sfile 'system_info_default_root_password' "$vB64Item" 1
|
||||
change_var_value $sfile 'DI_ROOTPASSWORD' "$vB64Item" 1
|
||||
fi
|
||||
|
||||
vItem=$(grep '^default_username[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
change_var_value $sfile 'system_info_default_username' "$vItem" 1
|
||||
change_var_value $sfile 'DI_USERNAME' "$vItem" 1
|
||||
fi
|
||||
|
||||
vItem=$(grep '^default_password[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
change_var_value $sfile 'system_info_default_password' "$vItem" 1
|
||||
change_var_value $sfile 'DI_PASSWORD' "$vItem" 1
|
||||
fi
|
||||
|
||||
vItem=$(grep '^install_disk[[:space:]]*=' /ventoy/autoinstall | awk '{print $3}')
|
||||
if [ -n "$vItem" ]; then
|
||||
echo "DI_FULLDISK_MULTIDISK_DEVICE = $vItem" >> $sfile
|
||||
echo "DI_ROOTDISK = $vItem" >> $sfile
|
||||
echo "DI_BOOTLOADER = $vItem" >> $sfile
|
||||
fi
|
||||
|
||||
change_var_value $sfile 'skip_virtual_machine_page' 'true' 0
|
||||
change_var_value $sfile 'skip_select_language_page' 'true' 0
|
||||
change_var_value $sfile 'skip_select_language_page_on_first_boot' 'true' 0
|
||||
change_var_value $sfile 'skip_system_keyboard_page' 'true' 0
|
||||
change_var_value $sfile 'skip_system_info_page' 'true' 0
|
||||
change_var_value $sfile 'skip_qr_code_system_info_page' 'true' 0
|
||||
change_var_value $sfile 'skip_timezone_page' 'true' 0
|
||||
change_var_value $sfile 'skip_partition_page' 'true' 0
|
||||
change_var_value $sfile 'system_info_password_validate_required' '0' 0
|
||||
change_var_value $sfile 'system_info_password_strong_check' 'false' 0
|
||||
change_var_value $sfile 'partition_do_auto_part' 'true' 0
|
||||
change_var_value $sfile 'system_info_disable_license' 'true' 0
|
||||
change_var_value $sfile 'system_info_disable_experience' 'true' 0
|
||||
change_var_value $sfile 'system_info_disable_privacy_license' 'true' 0
|
||||
|
||||
#filesystem.squashfs search ini
|
||||
#first_page_state=0,表示不跳过首页,展示首页让用户自己选择
|
||||
#first_page_state=1,表示跳过首页,并且自动点击一键安装
|
||||
#first_page_state=2,表示跳过首页,并且自动点击自定义安装
|
||||
#first_page_state=3,表示跳过首页,并且直接以全盘安装方式自动安装
|
||||
change_var_value $sfile 'first_page_state' '3' 0
|
||||
}
|
||||
|
||||
update_settings() {
|
||||
local script=$1
|
||||
local newscript
|
||||
|
||||
echo "update_settings for $script ..."
|
||||
|
||||
newscript=$(basename $script)
|
||||
cp -a $script /ventoy/vini_${newscript}
|
||||
setting_script_process /ventoy/vini_${newscript}
|
||||
|
||||
rm -f $script
|
||||
cp -a /ventoy/vini_${newscript} $script
|
||||
}
|
||||
|
||||
sh /ventoy/hook/common/auto_install_varexp.sh /ventoy/autoinstall
|
||||
|
||||
update_settings /root/usr/share/deepin-installer/resources/default_settings.ini
|
||||
|
||||
ls -1 /root/usr/share/deepin-installer/resources/override/ | while read line; do
|
||||
update_settings /root/usr/share/deepin-installer/resources/override/$line
|
||||
done
|
||||
|
||||
ls -1 /root/usr/share/deepin-installer/resources/oem/ | while read line; do
|
||||
update_settings /root/usr/share/deepin-installer/resources/oem/$line
|
||||
done
|
||||
|
||||
|
||||
|
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
|
||||
|
@@ -24,6 +24,7 @@
|
||||
|
||||
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||
VTKS="inst.ks=file:$VTOY_PATH/autoinstall"
|
||||
cp -a $VTOY_PATH/hook/rhel7/ventoy-autoexp.sh /lib/dracut/hooks/pre-mount/99-ventoy-autoexp.sh
|
||||
else
|
||||
for vtParam in $($CAT /proc/cmdline); do
|
||||
if echo $vtParam | $GREP -q 'ks=file:/'; then
|
||||
@@ -90,23 +91,7 @@ if ls $VTOY_PATH | $GREP -q 'ventoy_dud[0-9]'; then
|
||||
fi
|
||||
echo "vtInstDD=$vtInstDD" >> $VTLOG
|
||||
|
||||
if $GREP -q 'root=live' /proc/cmdline; then
|
||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE root=live:/dev/ventoy $VTKS $VTOVERLAY $vtInstDD#" -i /lib/dracut-lib.sh
|
||||
else
|
||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE inst.stage2=hd:/dev/ventoy $VTKS $VTOVERLAY $vtInstDD#" -i /lib/dracut-lib.sh
|
||||
fi
|
||||
|
||||
ventoy_set_inotify_script rhel7/ventoy-inotifyd-hook.sh
|
||||
|
||||
#Fedora
|
||||
if $BUSYBOX_PATH/which dmsquash-live-root > /dev/null; then
|
||||
vtPriority=99
|
||||
else
|
||||
vtPriority=01
|
||||
fi
|
||||
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-inotifyd-start.sh /lib/dracut/hooks/pre-udev/${vtPriority}-ventoy-inotifyd-start.sh
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-timeout.sh /lib/dracut/hooks/initqueue/timeout/${vtPriority}-ventoy-timeout.sh
|
||||
|
||||
vtNeedRepo=
|
||||
if [ -f /etc/system-release ]; then
|
||||
@@ -125,12 +110,61 @@ if $GREP -i -q Fedora /proc/version; then
|
||||
fi
|
||||
fi
|
||||
|
||||
if $GREP -i -q Fedora /etc/os-release; then
|
||||
if $GREP -q 'Server Edition' /etc/os-release; then
|
||||
vtNeedRepo="yes"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "vtNeedRepo=$vtNeedRepo" >> $VTLOG
|
||||
|
||||
if [ "$vtNeedRepo" = "yes" ]; then
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-repo.sh /lib/dracut/hooks/pre-pivot/99-ventoy-repo.sh
|
||||
fi
|
||||
|
||||
|
||||
#iso-scan (currently only for Fedora)
|
||||
if $GREP -q Fedora /etc/os-release; then
|
||||
if /ventoy/tool/vtoydump -a /ventoy/ventoy_os_param; then
|
||||
if ventoy_iso_scan_check; then
|
||||
echo "iso_scan process ..." >> $VTLOG
|
||||
|
||||
vtIsoPath=$(/ventoy/tool/vtoydump -p /ventoy/ventoy_os_param)
|
||||
VTISO_SCAN="iso-scan/filename=$vtIsoPath"
|
||||
echo -n $vtIsoPath > /ventoy/vtoy_iso_scan
|
||||
|
||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE $VTISO_SCAN $VTKS $VTOVERLAY $vtInstDD#" -i /lib/dracut-lib.sh
|
||||
if [ "$VTOY_LINUX_REMOUNT" = "01" -a "$vtNeedRepo" != "yes" ]; then
|
||||
ventoy_rw_iso_scan
|
||||
fi
|
||||
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo "common process ..." >> $VTLOG
|
||||
if $GREP -q 'root=live' /proc/cmdline; then
|
||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE root=live:/dev/ventoy $VTKS $VTOVERLAY $VTISO_SCAN $vtInstDD#" -i /lib/dracut-lib.sh
|
||||
else
|
||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE inst.stage2=hd:/dev/ventoy $VTKS $VTOVERLAY $VTISO_SCAN $vtInstDD#" -i /lib/dracut-lib.sh
|
||||
fi
|
||||
|
||||
|
||||
ventoy_set_inotify_script rhel7/ventoy-inotifyd-hook.sh
|
||||
|
||||
#Fedora
|
||||
if $BUSYBOX_PATH/which dmsquash-live-root > /dev/null; then
|
||||
vtPriority=99
|
||||
else
|
||||
vtPriority=01
|
||||
fi
|
||||
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-inotifyd-start.sh /lib/dracut/hooks/pre-udev/${vtPriority}-ventoy-inotifyd-start.sh
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-timeout.sh /lib/dracut/hooks/initqueue/timeout/${vtPriority}-ventoy-timeout.sh
|
||||
|
||||
|
||||
if [ -e /sbin/dmsquash-live-root ]; then
|
||||
echo "patch /sbin/dmsquash-live-root ..." >> $VTLOG
|
||||
$SED "1 a $BUSYBOX_PATH/sh $VTOY_PATH/hook/rhel7/ventoy-make-link.sh" -i /sbin/dmsquash-live-root
|
||||
@@ -147,10 +181,6 @@ if $GREP -i -q 'fedora.*coreos' /etc/os-release; then
|
||||
cp -a $VTOY_PATH/hook/rhel7/ventoy-make-link.sh /lib/dracut/hooks/pre-mount/99-ventoy-premount-mklink.sh
|
||||
fi
|
||||
|
||||
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||
cp -a $VTOY_PATH/hook/rhel7/ventoy-autoexp.sh /lib/dracut/hooks/pre-mount/99-ventoy-autoexp.sh
|
||||
fi
|
||||
|
||||
|
||||
#special distro magic
|
||||
$BUSYBOX_PATH/mkdir -p $VTOY_PATH/distmagic
|
||||
|
26
IMG/cpio/ventoy/hook/rhel7/ventoy-inotifyd-call.sh
Normal file
26
IMG/cpio/ventoy/hook/rhel7/ventoy-inotifyd-call.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/ventoy/busybox/sh
|
||||
#************************************************************************************
|
||||
# Copyright (c) 2023, 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
|
||||
|
||||
vtHook=$($CAT $VTOY_PATH/inotifyd-hook-script.txt)
|
||||
|
||||
vtdisk=$(get_ventoy_disk_name)
|
||||
vtlog "... $vtdisk already exist ..."
|
||||
$BUSYBOX_PATH/sh $vtHook n /dev "${vtdisk#/dev/}2"
|
@@ -27,5 +27,8 @@ if [ "$vtdisk" = "unknown" ]; then
|
||||
$BUSYBOX_PATH/nohup $VTOY_PATH/tool/inotifyd $vtHook /dev:n 2>&- &
|
||||
else
|
||||
vtlog "... $vtdisk already exist ..."
|
||||
$BUSYBOX_PATH/sh $vtHook n /dev "${vtdisk#/dev/}2"
|
||||
|
||||
#don't call it too early issue 2225
|
||||
#$BUSYBOX_PATH/sh $vtHook n /dev "${vtdisk#/dev/}2"
|
||||
cp -a $VTOY_PATH/hook/rhel7/ventoy-inotifyd-call.sh /lib/dracut/hooks/initqueue/settled/90-ventoy-inotifyd-call.sh
|
||||
fi
|
||||
|
@@ -23,7 +23,18 @@ vtlog "##### $0 $* ..."
|
||||
|
||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||
|
||||
repodev=$(ls $VTOY_PATH/dev_backup*)
|
||||
echo "inst.repo=hd:/dev/${repodev#*dev_backup_}" >> /sysroot/etc/cmdline
|
||||
if [ -f /ventoy/vtoy_iso_scan ]; then
|
||||
repopath=$(cat /ventoy/vtoy_iso_scan)
|
||||
repodev=$(vtoydump -f /ventoy/ventoy_os_param | awk -F'#' '{print $1}')
|
||||
if echo $repodev | egrep -q "nvme|mmc|nbd"; then
|
||||
vtpart1=${repodev}p1
|
||||
else
|
||||
vtpart1=${repodev}1
|
||||
fi
|
||||
echo "inst.repo=hd:${vtpart1}:${repopath}" >> /sysroot/etc/cmdline
|
||||
else
|
||||
repodev=$(ls $VTOY_PATH/dev_backup*)
|
||||
echo "inst.repo=hd:/dev/${repodev#*dev_backup_}" >> /sysroot/etc/cmdline
|
||||
fi
|
||||
|
||||
PATH=$VTPATH_OLD
|
||||
|
@@ -54,6 +54,21 @@ if [ -z "$dmsetup_path" ]; then
|
||||
ventoy_os_install_dmsetup "/dev/${1:0:-1}"
|
||||
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 $*
|
||||
|
||||
# OK finish
|
||||
|
@@ -60,7 +60,7 @@ fi
|
||||
if [ -e /etc/initrd.functions ] && $GREP -q 'HPIP' /etc/initrd.functions; then
|
||||
echo "HPIP" >> $VTLOG
|
||||
$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 CD_DEVICES=\"/dev/ventoy \$CD_DEVICES\"" -i /etc/initrd.functions
|
||||
elif [ -f /scripts/udev_setup ]; then
|
||||
|
@@ -209,11 +209,20 @@ ventoy_check_dm_module() {
|
||||
vtlog "modprobe failed, now try to insmod ko..."
|
||||
|
||||
$FIND /lib/modules/ -name "dm-mod.ko*" | while read vtline; do
|
||||
vtlog "insmode $vtline "
|
||||
vtlog "insmod $vtline "
|
||||
$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
|
||||
fi
|
||||
|
||||
|
||||
if $GREP -q 'device-mapper' /proc/devices; then
|
||||
vtlog "device-mapper found in /proc/devices after retry"
|
||||
$BUSYBOX_PATH/true; return
|
||||
@@ -223,160 +232,6 @@ ventoy_check_dm_module() {
|
||||
fi
|
||||
}
|
||||
|
||||
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 [ -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}')
|
||||
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 $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 $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() {
|
||||
vtlog "create_ventoy_device_mapper $*"
|
||||
@@ -396,28 +251,16 @@ create_ventoy_device_mapper() {
|
||||
fi
|
||||
|
||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_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 ventoy_need_dm_patch; then
|
||||
ventoy_dm_patch
|
||||
#suppress printk message
|
||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
||||
fi
|
||||
$VTOY_PATH/tool/vtoydm -r -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_raw_table
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
$VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||
else
|
||||
$VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||
fi
|
||||
|
||||
if ventoy_need_dm_patch; then
|
||||
#recover printk level
|
||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
||||
fi
|
||||
|
||||
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
|
||||
$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table >>$VTLOG 2>&1
|
||||
}
|
||||
|
||||
create_persistent_device_mapper() {
|
||||
@@ -437,24 +280,8 @@ create_persistent_device_mapper() {
|
||||
vterr "Error: no dm module avaliable"
|
||||
fi
|
||||
|
||||
$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
|
||||
|
||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
||||
#recover printk level
|
||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
||||
fi
|
||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table
|
||||
$VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
|
||||
}
|
||||
|
||||
|
||||
@@ -747,12 +574,7 @@ ventoy_udev_disk_common_hook() {
|
||||
if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
|
||||
create_persistent_device_mapper "/dev/$VTDISK"
|
||||
ventoy_create_persistent_link
|
||||
fi
|
||||
|
||||
if $GREP -q 'dm_patch' /proc/modules; then
|
||||
vtlog "remove dm_patch module."
|
||||
$BUSYBOX_PATH/rmmod dm_patch
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
ventoy_create_dev_ventoy_part() {
|
||||
@@ -760,17 +582,7 @@ ventoy_create_dev_ventoy_part() {
|
||||
$BUSYBOX_PATH/mknod -m 0666 /dev/ventoy b $blkdev_num
|
||||
|
||||
if [ -e /vtoy_dm_table ]; then
|
||||
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
|
||||
|
||||
vtPartid=1
|
||||
$CAT /vtoy_dm_table | while read vtline; do
|
||||
echo $vtline > /ventoy/dm_table_part${vtPartid}
|
||||
$VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
|
||||
@@ -780,11 +592,6 @@ ventoy_create_dev_ventoy_part() {
|
||||
|
||||
vtPartid=$(expr $vtPartid + 1)
|
||||
done
|
||||
|
||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
||||
#recover printk level
|
||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
@@ -121,3 +121,53 @@ ventoy_check_mount() {
|
||||
$BUSYBOX_PATH/mount $1 $2
|
||||
fi
|
||||
}
|
||||
|
||||
ventoy_has_exfat_ko() {
|
||||
vtExfat=''
|
||||
vtKerVer=$($BUSYBOX_PATH/uname -r)
|
||||
if [ -d /lib/modules/$vtKerVer/kernel/fs/exfat ]; then
|
||||
vtExfat=$(ls /lib/modules/$vtKerVer/kernel/fs/exfat/)
|
||||
fi
|
||||
[ -n "$vtExfat" ]
|
||||
}
|
||||
|
||||
ventoy_is_exfat_part() {
|
||||
$VTOY_PATH/tool/vtoydump -s /ventoy/ventoy_os_param | $GREP -q exfat
|
||||
}
|
||||
|
||||
ventoy_iso_scan_path() {
|
||||
if [ -f /sbin/iso-scan ]; then
|
||||
echo -n '/sbin/iso-scan'
|
||||
elif [ -f /bin/iso-scan ]; then
|
||||
echo -n '/bin/iso-scan'
|
||||
else
|
||||
echo -n ''
|
||||
fi
|
||||
}
|
||||
|
||||
ventoy_has_iso_scan() {
|
||||
vtScanPath=$(ventoy_iso_scan_path)
|
||||
[ -n "$vtScanPath" ]
|
||||
}
|
||||
|
||||
ventoy_rw_iso_scan() {
|
||||
vtScanPath=$(ventoy_iso_scan_path)
|
||||
if [ -n "$vtScanPath" ]; then
|
||||
if $GREP -q 'mount.* ro .*isoscan' $vtScanPath; then
|
||||
$SED -i 's/\(mount.*-o.*\) ro /\1 rw /' $vtScanPath
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
ventoy_iso_scan_check() {
|
||||
vtCheckOk=0
|
||||
if ventoy_is_exfat_part; then
|
||||
if ventoy_has_exfat_ko; then
|
||||
if ventoy_has_iso_scan; then
|
||||
vtCheckOk=1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
[ $vtCheckOk -eq 1 ]
|
||||
}
|
||||
|
@@ -72,27 +72,29 @@ 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
|
||||
if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
|
||||
echo "vtx=$vtx" >> $VTLOG
|
||||
if [ $vtskip -eq 0 ]; then
|
||||
if [ "${vtx:5}" = "xzcat" ]; then
|
||||
rm -f $VTOY_PATH/xzlog
|
||||
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
|
||||
echo 'xzcat failed, now try xzminidec...' >> $VTLOG
|
||||
rm -f $VTOY_PATH/xzlog
|
||||
cat $vtfile | xzminidec 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
echo "vtx=$vtx" >> $VTLOG
|
||||
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 grep -q 'limit' $VTOY_PATH/xzlog; then
|
||||
echo 'xzminidec failed, now try xzcat_musl ...' >> $VTLOG
|
||||
xzcat_musl $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
fi
|
||||
if [ "${vtx:5}" = "xzcat" ]; then
|
||||
rm -f $VTOY_PATH/xzlog
|
||||
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
|
||||
echo 'xzcat failed, now try xzminidec...' >> $VTLOG
|
||||
rm -f $VTOY_PATH/xzlog
|
||||
cat $vtfile | xzminidec 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
|
||||
if grep -q 'limit' $VTOY_PATH/xzlog; then
|
||||
echo 'xzminidec failed, now try xzcat_musl ...' >> $VTLOG
|
||||
xzcat_musl $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
fi
|
||||
else
|
||||
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
fi
|
||||
else
|
||||
dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none | ${vtx:5} | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
fi
|
||||
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
@@ -112,6 +114,28 @@ ventoy_unpack_initrd() {
|
||||
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
|
||||
export EXTRACT_UNSAFE_SYMLINKS=1
|
||||
@@ -131,13 +155,22 @@ for vtfile in $(ls /initrd*); do
|
||||
#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
|
||||
mv ${vtfile}_tmp $vtfile
|
||||
|
||||
vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
|
||||
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
||||
let vtoffset="(${#vtdump}-${#vtmagic})/2"
|
||||
|
||||
if [ -z "$vtmagic" ]; then
|
||||
echo "terminate with all zero data file" >> $VTLOG
|
||||
break
|
||||
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
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
||||
ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
|
||||
|
@@ -34,9 +34,12 @@ else
|
||||
vtBit=32
|
||||
fi
|
||||
|
||||
xz -d $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz
|
||||
insmod $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko
|
||||
|
||||
if [ -f $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz ]; then
|
||||
xz -d $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz
|
||||
insmod $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko
|
||||
elif [ -f $VTOY_PATH/modules/dm-mod.ko ]; then
|
||||
insmod $VTOY_PATH/modules/dm-mod.ko
|
||||
fi
|
||||
|
||||
wait_for_usb_disk_ready
|
||||
|
||||
|
@@ -39,35 +39,6 @@ fi
|
||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||
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
|
||||
|
||||
|
46
IMG/cpio/ventoy/loop/fwts/ventoy-disk.sh
Normal file
46
IMG/cpio/ventoy/loop/fwts/ventoy-disk.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/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" "noreplace"
|
||||
|
||||
ventoy_create_dev_ventoy_part
|
||||
mdev -s
|
||||
|
||||
PATH=$VTPATH_OLD
|
||||
|
||||
set_ventoy_hook_finish
|
23
IMG/cpio/ventoy/loop/fwts/ventoy-hook.sh
Normal file
23
IMG/cpio/ventoy/loop/fwts/ventoy-hook.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/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
|
||||
|
||||
$SED "/^mountroot$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/loop/fwts/ventoy-disk.sh" -i /init
|
||||
#$SED "/^mountroot$/i\\export ROOT=/dev/mapper/ventoy" -i /init
|
@@ -64,9 +64,9 @@ ventoy_get_os_type() {
|
||||
elif $GREP -q '[Uu]buntu' /proc/version; then
|
||||
echo 'debian'; return
|
||||
|
||||
# Deepin : do the same process with debian
|
||||
# Deepin :
|
||||
elif $GREP -q '[Dd]eepin' /proc/version; then
|
||||
echo 'debian'; return
|
||||
echo 'deepin'; return
|
||||
|
||||
# rhel5/CentOS5 and all other distributions based on them
|
||||
elif $GREP -q 'el5' /proc/version; then
|
||||
@@ -169,9 +169,9 @@ ventoy_get_os_type() {
|
||||
elif $GREP -q 'fuyu' /etc/os-release; then
|
||||
echo 'openEuler'; return
|
||||
elif $GREP -q 'deepin' /etc/os-release; then
|
||||
echo 'debian'; return
|
||||
echo 'deepin'; return
|
||||
elif $GREP -q 'chinauos' /etc/os-release; then
|
||||
echo 'debian'; return
|
||||
echo 'deepin'; return
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -229,6 +229,10 @@ ventoy_get_os_type() {
|
||||
echo 'android'; return
|
||||
fi
|
||||
|
||||
if $GREP -q 'android.google' /proc/version; then
|
||||
echo 'android'; return
|
||||
fi
|
||||
|
||||
if $GREP -q 'adelielinux' /proc/version; then
|
||||
echo 'adelie'; return
|
||||
fi
|
||||
@@ -369,6 +373,23 @@ ventoy_get_os_type() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if $GREP -q 'chimera' /proc/version; then
|
||||
echo 'chimera'; return
|
||||
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"
|
||||
}
|
||||
|
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 ' file persistent dat file'
|
||||
echo ' size extend size in MB'
|
||||
echo 'Example:'
|
||||
echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048'
|
||||
echo 'Examples:'
|
||||
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 ''
|
||||
}
|
||||
|
||||
@@ -19,6 +20,11 @@ if [ -z "$2" ]; then
|
||||
exit 1
|
||||
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
|
||||
shift
|
||||
|
Binary file not shown.
Binary file not shown.
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
|
||||
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=$!
|
||||
sleep 1
|
||||
|
||||
|
@@ -3,7 +3,7 @@
|
||||
VTOY_PATH=$PWD/..
|
||||
|
||||
date +"%Y/%m/%d %H:%M:%S"
|
||||
echo downloading envrionment ...
|
||||
echo downloading environment ...
|
||||
|
||||
wget -q -P $VTOY_PATH/DOC/ https://github.com/ventoy/vtoytoolchain/releases/download/1.0/dietlibc-0.34.tar.xz
|
||||
wget -q -P $VTOY_PATH/DOC/ https://github.com/ventoy/vtoytoolchain/releases/download/1.0/musl-1.2.1.tar.gz
|
||||
@@ -14,6 +14,6 @@ wget -q -P /opt/ https://github.com/ventoy/vtoytoolchain/releases/download/1.0/a
|
||||
wget -q -P /opt/ https://github.com/ventoy/vtoytoolchain/releases/download/1.0/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz
|
||||
|
||||
date +"%Y/%m/%d %H:%M:%S"
|
||||
echo downloading envrionment finish...
|
||||
echo downloading environment finish...
|
||||
|
||||
sh all_in_one.sh CI
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +1,8 @@
|
||||
|
||||
unset vtchkdef
|
||||
vt_vtoychksum_exist "${vtoy_iso_part}" "${VTOY_CHKSUM_FILE_PATH}"
|
||||
set vtchksumfile=$?
|
||||
vt_vtoychksum_exist "${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ "$VT_EXIST_MD5" = "1" ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=0
|
||||
set vtchkdef=1
|
||||
@@ -24,7 +23,7 @@ else
|
||||
}
|
||||
fi
|
||||
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ "$VT_EXIST_SHA1" = "1" ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=1
|
||||
set vtchkdef=1
|
||||
@@ -47,7 +46,7 @@ fi
|
||||
|
||||
|
||||
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ "$VT_EXIST_SHA256" = "1" ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=2
|
||||
set vtchkdef=1
|
||||
@@ -70,7 +69,7 @@ fi
|
||||
|
||||
|
||||
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ "$VT_EXIST_SHA512" = "1" ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=3
|
||||
set vtchkdef=1
|
||||
|
@@ -19,16 +19,7 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
||||
else
|
||||
set VTOY_WIN11_BYPASS_NRO=0
|
||||
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 \
|
||||
VTOY_RUN_SET3 {
|
||||
@@ -83,10 +74,12 @@ submenu "$VTLANG_RESOLUTION_CFG" --class=debug_resolution --class=F5tool {
|
||||
|
||||
submenu "$VTLANG_SCREEN_MODE" --class=debug_screen_mode --class=F5tool {
|
||||
menuentry "$VTLANG_SCREEN_TEXT_MODE" --class=debug_text_mode --class=debug_screen_mode --class=F5tool {
|
||||
vt_push_menu_lang en_US
|
||||
terminal_output console
|
||||
}
|
||||
menuentry "$VTLANG_SCREEN_GUI_MODE" --class=debug_gui_mode --class=debug_screen_mode --class=F5tool {
|
||||
terminal_output gfxterm
|
||||
vt_pop_menu_lang
|
||||
}
|
||||
menuentry "$VTLANG_RETURN_PREVIOUS" --class=vtoyret VTOY_RET {
|
||||
echo "Return ..."
|
||||
|
15
INSTALL/grub/distro/fwts.cfg
Normal file
15
INSTALL/grub/distro/fwts.cfg
Normal file
@@ -0,0 +1,15 @@
|
||||
set label="writable"
|
||||
|
||||
menuentry 'Firmware Test Suite' --class ubuntu --class gnu-linux --class gnu --class os {
|
||||
set root='vtimghd,4'
|
||||
linux /boot/vmlinuz root=LABEL=$label ro console=tty1 console=ttyS0 quiet
|
||||
initrd /boot/initrd.img
|
||||
}
|
||||
|
||||
menuentry 'Firmware Test Suite (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
|
||||
set root='vtimghd,4'
|
||||
echo 'Loading Linux ...'
|
||||
linux /boot/vmlinuz root=LABEL=$label ro recovery nomodeset
|
||||
echo 'Loading initial ramdisk ...'
|
||||
initrd /boot/initrd.img
|
||||
}
|
@@ -119,7 +119,7 @@ function ventoy_show_help {
|
||||
}
|
||||
|
||||
function ventoy_load_menu_lang_file {
|
||||
vt_load_file_to_mem "auto" $vtoy_efi_part/grub/menu.tar.gz vtoy_menu_lang_mem
|
||||
vt_load_file_to_mem "auto" $prefix/menu.tar.gz vtoy_menu_lang_mem
|
||||
loopback vt_menu_tarfs mem:${vtoy_menu_lang_mem_addr}:size:${vtoy_menu_lang_mem_size}
|
||||
}
|
||||
|
||||
@@ -401,20 +401,23 @@ function distro_specify_initrd_file_phase2 {
|
||||
vt_linux_specify_initrd_file /boot/full.cz
|
||||
elif [ -f (loop)/images/pxeboot/initrd.img ]; then
|
||||
vt_linux_specify_initrd_file /images/pxeboot/initrd.img
|
||||
|
||||
elif [ -f (loop)/live/initrd ]; then
|
||||
vt_linux_specify_initrd_file /live/initrd
|
||||
elif [ -f (loop)/initramfs-linux.img ]; then
|
||||
vt_linux_specify_initrd_file /initramfs-linux.img
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function ventoy_get_ghostbsd_ver {
|
||||
# fallback to parse version from elf /boot/kernel/kernel
|
||||
set vt_freebsd_ver=xx
|
||||
}
|
||||
|
||||
function ventoy_get_furybsd_ver {
|
||||
if regexp "13\.[0-9]" "$2"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
else
|
||||
set vt_freebsd_ver=12.x
|
||||
set vt_freebsd_ver=12.x
|
||||
if regexp --set 1:vtFuryVer "(14|13)\.[0-9]" "$2"; then
|
||||
set vt_freebsd_ver=${vtFuryVer}.x
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -423,12 +426,8 @@ function ventoy_get_freenas_ver {
|
||||
|
||||
if [ -e (loop)/FreeNAS-MANIFEST ]; then
|
||||
vt_parse_freenas_ver (loop)/FreeNAS-MANIFEST vt_freenas_ver
|
||||
if regexp "^13\.[0-9]" "$vt_freenas_ver"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
elif regexp "^12\.[0-9]" "$vt_freenas_ver"; then
|
||||
set vt_freebsd_ver=12.x
|
||||
elif regexp "^11\.[0-9]" "$vt_freenas_ver"; then
|
||||
set vt_freebsd_ver=11.x
|
||||
if regexp --set 1:vtNasVer "^(14|13|12|11)\.[0-9]" "$vt_freenas_ver"; then
|
||||
set vt_freebsd_ver=${vtNasVer}.x
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -438,12 +437,8 @@ function ventoy_get_truenas_ver {
|
||||
|
||||
if [ -e (loop)/TrueNAS-MANIFEST ]; then
|
||||
vt_parse_freenas_ver (loop)/TrueNAS-MANIFEST vt_truenas_ver
|
||||
if regexp "^13\.[0-9]" "$vt_truenas_ver"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
elif regexp "^12\.[0-9]" "$vt_truenas_ver"; then
|
||||
set vt_freebsd_ver=12.x
|
||||
elif regexp "^11\.[0-9]" "$vt_truenas_ver"; then
|
||||
set vt_freebsd_ver=11.x
|
||||
if regexp --set 1:vtTNasVer "^(14|13|12|11)\.[0-9]" "$vt_truenas_ver"; then
|
||||
set vt_freebsd_ver=${vtTNasVer}.x
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -475,49 +470,25 @@ function ventoy_freebsd_proc {
|
||||
ventoy_get_truenas_ver "$1" "${chosen_path}"
|
||||
elif vt_strstr "$vt_volume_id" "FURYBSD"; then
|
||||
ventoy_get_furybsd_ver "$1" "${chosen_path}"
|
||||
elif regexp "^13_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
elif regexp "^12_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=12.x
|
||||
elif regexp "^11_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=11.x
|
||||
elif regexp "^10_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=10.x
|
||||
elif regexp "^9_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=9.x
|
||||
elif regexp --set 1:vtBsdVerNum "^(14|13|12|11|10|9)_[0-9]" "$vt_volume_id"; then
|
||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||
elif [ -d (loop)/usr/midnightbsd-dist ]; then
|
||||
ventoy_get_midnightbsd_ver "$1" "${chosen_path}"
|
||||
set vtFreeBsdDistro=MidnightBSD
|
||||
elif [ -e (loop)/bin/freebsd-version ]; then
|
||||
vt_unix_parse_freebsd_ver (loop)/bin/freebsd-version vt_userland_ver
|
||||
if regexp "\"13\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
elif regexp "\"12\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=12.x
|
||||
elif regexp "\"11\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=11.x
|
||||
elif regexp "\"10\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=10.x
|
||||
elif regexp "\"9\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=9.x
|
||||
fi
|
||||
vt_unix_parse_freebsd_ver (loop)/bin/freebsd-version vt_userland_ver
|
||||
if regexp --set 1:vtBsdVerNum "\"(14|13|12|11|10|9)\.[0-9]-" "$vt_userland_ver"; then
|
||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||
fi
|
||||
elif [ -e (loop)/README.TXT ]; then
|
||||
vt_1st_line (loop)/README.TXT vt_freebsd_line1
|
||||
if regexp "FreeBSD 13\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=13.x
|
||||
elif regexp "FreeBSD 12\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=12.x
|
||||
elif regexp "FreeBSD 11\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=11.x
|
||||
elif regexp "FreeBSD 10\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=10.x
|
||||
elif regexp "FreeBSD 9\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=9.x
|
||||
if regexp --set 1:vtBsdVerNum "FreeBSD (14|13|12|11|10|9)\.[0-9]-" "$vt_freebsd_line1"; then
|
||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||
fi
|
||||
elif vt_strstr "${chosen_path}" "MidnightBSD"; then
|
||||
set vt_freebsd_ver=9.x
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if [ -e (loop)/usr/freebsd-dist/cloninst.sh ]; then
|
||||
set vtFreeBsdDistro=ClonOS
|
||||
@@ -541,7 +512,7 @@ function ventoy_freebsd_proc {
|
||||
fi
|
||||
|
||||
if [ "$vt_freebsd_ver" = "xx" ]; then
|
||||
set vt_freebsd_ver=13.x
|
||||
set vt_freebsd_ver=14.x
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -1442,6 +1413,8 @@ function ventoy_iso_busybox_ver {
|
||||
set ventoy_busybox_ver=64
|
||||
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
||||
set ventoy_busybox_ver=64
|
||||
elif vt_str_begin "$vt_volume_id" "KAOS_"; then
|
||||
set ventoy_busybox_ver=64
|
||||
|
||||
fi
|
||||
fi
|
||||
@@ -1926,6 +1899,20 @@ function ventoy_img_openelec {
|
||||
loopback vtloopex $vtoy_efi_part/ventoy/vtloopex.cpio
|
||||
vt_img_extra_initrd_append (vtloopex)/$elec_ver/vtloopex.tar.xz
|
||||
|
||||
if [ "$elec_ver" = "LibreELEC" ]; then
|
||||
if [ -f (vtimghd,1)/system ]; then
|
||||
loopback elecsfs (vtimghd,1)/system
|
||||
vt_get_lib_module_ver (elecsfs) /usr/lib/kernel-overlays/base/lib/modules/ vt_module_ver
|
||||
if [ -n "$vt_module_ver" ]; then
|
||||
for mod in "kernel/drivers/md/dm-mod.ko"; do
|
||||
if [ -e (elecsfs)/usr/lib/kernel-overlays/base/lib/modules/$vt_module_ver/$mod ]; then
|
||||
vt_img_extra_initrd_append (elecsfs)/usr/lib/kernel-overlays/base/lib/modules/$vt_module_ver/$mod
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
ventoy_debug_pause
|
||||
|
||||
#boot image file
|
||||
@@ -1938,6 +1925,7 @@ function ventoy_img_openelec {
|
||||
vt_img_unhook_root
|
||||
vt_unset_boot_opt
|
||||
loopback -d vtloopex
|
||||
loopback -d elecsfs
|
||||
}
|
||||
|
||||
|
||||
@@ -2216,6 +2204,23 @@ function ventoy_img_cloudready {
|
||||
unset linuxpartB
|
||||
}
|
||||
|
||||
|
||||
function ventoy_img_fwts {
|
||||
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
|
||||
|
||||
ventoy_debug_pause
|
||||
|
||||
#boot image file
|
||||
vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=fwts
|
||||
vt_img_hook_root
|
||||
|
||||
configfile $prefix/distro/fwts.cfg
|
||||
|
||||
vt_img_unhook_root
|
||||
vt_unset_boot_opt
|
||||
}
|
||||
|
||||
function ventoy_img_memtest86 {
|
||||
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
|
||||
boot
|
||||
@@ -2281,6 +2286,14 @@ function img_common_menuentry {
|
||||
vt_get_fs_label (vtimghd,2) vtImgHd2Label
|
||||
fi
|
||||
|
||||
if [ -z "$vtImgHd1Label" ]; then
|
||||
if [ -d (vtimghd,2)/efi ]; then
|
||||
vt_get_fs_label (vtimghd,3) vtImgHd3Label
|
||||
elif [ -d (vtimghd,12)/efi ]; then
|
||||
vt_get_fs_label (vtimghd,3) vtImgHd3Label
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -e (vtimghd,1)/etc/hostname ]; then
|
||||
vt_1st_line (vtimghd,1)/etc/hostname vtImgHostname
|
||||
fi
|
||||
@@ -2298,6 +2311,8 @@ function img_common_menuentry {
|
||||
elif [ -f (vtimghd,3)/etc/chrome_dev.conf ]; then
|
||||
ventoy_img_cloudready
|
||||
fi
|
||||
elif vt_str_begin "$vtImgHd3Label" "fwts-result"; then
|
||||
ventoy_img_fwts
|
||||
elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then
|
||||
ventoy_img_openelec lakka
|
||||
elif vt_str_begin "$vtImgHd1Label" "LIBREELEC"; then
|
||||
@@ -2386,7 +2401,7 @@ function mimg_common_menuentry {
|
||||
#############################################################
|
||||
#############################################################
|
||||
|
||||
set VENTOY_VERSION="1.0.87"
|
||||
set VENTOY_VERSION="1.1.02"
|
||||
|
||||
#ACPI not compatible with Window7/8, so disable by default
|
||||
set VTOY_PARAM_NO_ACPI=1
|
||||
|
19
INSTALL/grub/help/cs_CZ.txt
Normal file
19
INSTALL/grub/help/cs_CZ.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
L - Výběr jazyka
|
||||
F1 - Zobrazení nápovědy
|
||||
F2 - Procházet spouštět soubory na disku
|
||||
F3 - Přepínat mezi zobrazením stromu a seznamu
|
||||
F4 - Spustit Windows/Linux na disku
|
||||
F5 - Nástroje
|
||||
F6 - Nahrát vlastní Grub2 nabídku
|
||||
F7 - Přepínat mezi grafickým a textovým režimem
|
||||
|
||||
m/Ctrl+m - Kontrolní součky obrazů (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Memdisk režim (pouze pro malé WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl+w - WIMBOOT režim (pouze pro Windows/WinPE ISO soubory)
|
||||
r/Ctrl+r - Grub2 režim (pouze pro některé linuxové distribuce)
|
||||
i/Ctrl+i - Režim kompatibility (pouze pro ladění)
|
||||
u/Ctrl+u - Nahrát ISO EFI ovladač (pouze pro ladění, oficiálně nejde použít)
|
||||
|
||||
|
||||
|
||||
Stiskněte ESC pro návrat ......
|
19
INSTALL/grub/help/el_GR.txt
Normal file
19
INSTALL/grub/help/el_GR.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
L - Επιλογή Γλώσσας
|
||||
F1 - Εμφάνιση πληροφοριών βοήθειας
|
||||
F2 - Περιήγηση και εκκίνηση αρχείων στον τοπικό δίσκο
|
||||
F3 - Εναλλαγή λειτουργίας μενού μεταξύ Προβολής Δένδρου <-> Προβολή Λίστας
|
||||
F4 - Εκκίνηση Windows/Linux στον τοπικό δίσκο
|
||||
F5 - Εργαλεία
|
||||
F6 - Φόρτωση προσαρμοσμένου μενού Grub2
|
||||
F7 - Εναλλαγή μεταξύ Λειτουργίας GUI <-> Λειτουργίας ΚΕΙΜΕΝΟΥ
|
||||
|
||||
m/Ctrl+m - Αρχεία εικόνας Checksum (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Λειτουργία Memdisk (Μόνο για μικρά WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl+w - Λειτουργία WIMBOOT (Μόνο για αρχεία ISO Windows/WinPE)
|
||||
r/Ctrl+r - Λειτουργία Grub2 (Μόνο για ορισμένες διανομές Linux)
|
||||
i/Ctrl+i - Λειτουργία Συμβατότητας (Μόνο για εντοπισμό σφαλμάτων - debugging)
|
||||
u/Ctrl+u - Φόρτωση προγράμματος οδήγησης ISO EFI (Μόνο για εντοπισμό σφαλμάτων - debugging, δεν μπορεί να χρησιμοποιηθεί επίσημα)
|
||||
|
||||
|
||||
|
||||
Πατήστε ESC για επιστροφή ......
|
@@ -1,19 +1,19 @@
|
||||
L - Nyelv kiválasztása
|
||||
F1 - Jelenítse meg ezt a súgóinformációt
|
||||
F2 - A helyi lemezen lévő fájlok böngészése és indítása
|
||||
F3 - Menü mód váltása Fanézet <-> Listanézet között
|
||||
F4 - Windows/Linux indítása helyi lemezről
|
||||
F1 - Súgóinformációk megjelenítése
|
||||
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
|
||||
F4 - Windows/Linux indítása a helyi lemezről
|
||||
F5 - Segédprogramok
|
||||
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)
|
||||
d/Ctrl+d - Memdisk mód (Csak kis WinPE/LiveCD ISO/IMG esetén)
|
||||
w/Ctrl+w - WIMBOOT mód (Csak Windows/WinPE ISO esetében)
|
||||
r/Ctrl+r - Grub2 mód (Csak néhány Linux disztró esetében)
|
||||
i/Ctrl+i - Kompatibilis mód (Csak hibakeresésre)
|
||||
u/Ctrl+u - ISO efi driver betöltés (Csak hibakeresésre, hivatalosan nem használható.)
|
||||
m/Ctrl+m - Lemezképfájlok ellenőrzőösszege (md5/sha1/sha256/sha512)
|
||||
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én)
|
||||
r/Ctrl+r - Grub2 mód (csak néhány Linux disztribúció esetén)
|
||||
i/Ctrl+i - Kompatibilis mód (csak hibakereséshez)
|
||||
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...
|
@@ -1,17 +1,17 @@
|
||||
L - 언어 선택
|
||||
F1 - 이 도움말 정보 표시
|
||||
F2 - 로컬 디스크에서 파일 찾아보기 및 부트
|
||||
F2 - 로컬 디스크에서 파일 찾아보기 및 부팅
|
||||
F3 - 트리보기 <-> 목록보기 간에 메뉴 모드 전환
|
||||
F4 - 로컬 디스크에서 Windows/Linux 부트
|
||||
F4 - 로컬 디스크에서 Windows/Linux 부팅
|
||||
F5 - 유틸리티
|
||||
F6 - 사용자 지정 Grub2 메뉴 불러오기
|
||||
F7 - GUI 모드 <-> TEXT 모드 간에 전환
|
||||
F7 - 그래픽 모드 <-> 텍스트 모드 간에 전환
|
||||
|
||||
m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG 전용)
|
||||
w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO 전용)
|
||||
r/Ctrl+r - Grub2 모드 (일부 Linux 배포판에만 해당)
|
||||
i/Ctrl+i - 호환 모드 (디버그 전용)
|
||||
i/Ctrl+i - 호환 모드 (디버그 전용, 공식적으로 사용할 수 없음)
|
||||
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)
|
||||
|
||||
|
||||
|
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,8 +1,8 @@
|
||||
L - Выбор языка
|
||||
F1 - Показать эти справочные сведения
|
||||
F2 - Просмотр и загрузка файлов на локальном диске
|
||||
F3 - Переключить режим меню между «ВидДревом» <-> «ВидСписком»
|
||||
F4 - Загрузка винды/линукса с локального диска
|
||||
F3 - Переключить режим меню между «Вид древом» <-> «Вид списком»
|
||||
F4 - Загрузка Windows/Linux с локального диска
|
||||
F5 - Утилиты
|
||||
F6 - Загрузить пользовательское меню Grub2
|
||||
F7 - Переключиться между графическим режимом <-> текстовым режимом
|
||||
@@ -10,7 +10,7 @@ F7 - Переключиться между графическим режимом
|
||||
m/Ctrl+m - Проверить контрольную сумму файлов образа диска (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Режим Memdisk (только для небольших WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl+w - Режим WIMBOOT (только для Windows/WinPE ISO)
|
||||
r/Ctrl+r - Режим Grub2 (только для некоторых сборок линукса)
|
||||
r/Ctrl+r - Режим Grub2 (только для некоторых дистрибутивов Linux)
|
||||
i/Ctrl+i - Совместимый режим (только для отладки)
|
||||
u/Ctrl+u - Загрузить драйвер ISO EFI (только для отладки, нельзя использовать официально)
|
||||
|
||||
|
@@ -1,19 +1,19 @@
|
||||
L - Dil Seçimi
|
||||
F1 - Yardım bilgilerini göster
|
||||
F2 - Yerel diskteki önyükleme dosyalarına GÖZAT ve yerel diskten Önyükleme yap
|
||||
F3 - Ventoy Menü modu olarak,Klasör görünümü(Treeview) ile Liste görünümü(ListView) arasında geçiş yapmayı sağlar.
|
||||
F4 - Bilgisayarınızda yüklü olan Windows yada Linux işletim sistemini, sabit diskten başlatır.
|
||||
F5 - Ventoy Araçlar menüsü
|
||||
F6 - Özelleştirilmiş Grub2 menüsünü yükler
|
||||
F7 - Grafik Modu(GUI Mode) <--> Metin Modu(Text Mode) arasında geçiş yapmayı sağlar
|
||||
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
|
||||
F4 - Windows & Linux'u yerel diskten önyükle
|
||||
F5 - Ventoy araçlar menüsü
|
||||
F6 - Özelleştirilmiş Grub2 menüsünü yükle
|
||||
F7 - Grafik(GUI) <--> Metin(Text) modları arasında geçiş yap
|
||||
|
||||
m/Ctrl+m - İndirilen imaj dosyalarının hatasız indirildiğini teyit etmek için "md5/sha1/sha256/sha512" değerlerini kontrol etmeyi sağlar
|
||||
d/Ctrl+d - Memdisk Modu başlatır(Yalnızca küçük WinPE/LiveCD ISO/IMG ler için bu modu kullanabilirsiniz)
|
||||
w/Ctrl+w - WIMBOOT Modu çalıştırmayı sağlar(Sadece normal Windows/WinPE ISO ları için)
|
||||
r/Ctrl+r - Grub2 Modu çalıştırmayı sağlar (Sadece bazı Linux dağıtımları için)
|
||||
i/Ctrl+i - Uyumluluk Modu'nu (Compatible Mode) çalıştırmayı sağlar (Sadece hata ayıklama için bu modu kullanabilirsiniz)
|
||||
u/Ctrl+u - ISO efi sürücüsünü yükler(Sadece hata ayıklama için bu mod kullanılabilir, resmi olarak kullanılamaz)
|
||||
m/Ctrl+m - Görüntü dosyalarının sağlama toplamını al (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Memdisk Modunu başlat(Yalnızca küçük WinPE/LiveCD ISO/IMG'ler için)
|
||||
w/Ctrl+w - WIMBOOT Modunu başlat(Yalnızca normal Windows/WinPE ISO'ları 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)
|
||||
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 ......
|
||||
|
19
INSTALL/grub/help/uk_UA.txt
Normal file
19
INSTALL/grub/help/uk_UA.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
L - Обрати мову
|
||||
F1 - Показати довідку
|
||||
F2 - Переглянути та завантажити файли з локального диску
|
||||
F3 - Переключитись між видами деревом <-> списком
|
||||
F4 - Завантажити Windows/Linux з локального диску
|
||||
F5 - Інструменти
|
||||
F6 - Завантажити Custom Grub2 меню
|
||||
F7 - Переключитись між графічним інтерфейсом <-> текстовим інтерфейсом
|
||||
|
||||
m/Ctrl + m - Контрольна сума образу диску (md5/sha1/sha256/sha512)
|
||||
d/Ctrl + d - Режим Memdisk (Тільки для невеликих образів WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl + w - Режим WIMBOOT (Тільки для ISO-файлів Windows/WinPE)
|
||||
r/Ctrl + r - Режим Grub2 (Тільки для деяких дистрибутивів Linux)
|
||||
i/Ctrl + i - Сумісний режим (Тільки для зневадження)
|
||||
u/Ctrl + u - Завантажити драйвер ISO EFI (Тільки для зневадження, не офіційно)
|
||||
|
||||
|
||||
|
||||
Натисність ESC для того, щоб повернутися ......
|
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
|
||||
gcry_cast5: crypto
|
||||
extcmd:
|
||||
squash4: fshelp lzopio zfs xzio gzio
|
||||
squash4: fshelp zstd lzopio zfs xzio gzio
|
||||
part_plan:
|
||||
minix_be:
|
||||
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:
|
||||
gcry_dsa: pgp mpi
|
||||
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
|
||||
cmdline_cat_test: font functional_test normal procfs video_fb
|
||||
rdmsr: extcmd
|
||||
@@ -124,7 +124,7 @@ crypto:
|
||||
part_bsd: part_msdos
|
||||
cs5536: pci
|
||||
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:
|
||||
gcry_sha512: crypto
|
||||
password: crypto normal
|
||||
@@ -208,7 +208,7 @@ cmosdump:
|
||||
hfsplus: fshelp
|
||||
gcry_cast5: crypto
|
||||
extcmd:
|
||||
squash4: fshelp lzopio zfs xzio gzio
|
||||
squash4: fshelp zstd lzopio zfs xzio gzio
|
||||
part_plan:
|
||||
minix_be:
|
||||
gcry_whirlpool: crypto
|
||||
|
Binary file not shown.
@@ -163,7 +163,6 @@ else
|
||||
terminal_output console
|
||||
chainloader /vtefi/boot/bootaa64.efi
|
||||
boot
|
||||
else
|
||||
else
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "BOOTAA64.EFI NOT found ..."
|
||||
|
@@ -1,12 +1,14 @@
|
||||
{
|
||||
"VTLANG_LANGUAGE_NAME": "Arabic (العربية)",
|
||||
|
||||
"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_LIST": "L: لغة F1: مساعدة F2: تصفح F3: عرض لائحي F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L: لغة F1: مساعدة F2: تصفح F3: عرض شجري F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
||||
|
||||
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على Windows",
|
||||
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
||||
"VTLANG_LB_SBOOT_HDD1": "الإقلاع على القرص المحلي الأول",
|
||||
"VTLANG_LB_SBOOT_HDD2": "الإقلاع على القرص المحلي الثاني",
|
||||
@@ -15,32 +17,39 @@
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "البحث والإقلاع على BOOTIA32.EFI",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "البحث والإقلاع على BOOTAA64.EFI",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "البحث والإقلاع على xorboot",
|
||||
"VTLANG_FILE_CHKSUM": "مجموعة التحقق من الملفات",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "حساب md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "حساب sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "حساب sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "حساب sha512sum",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "حساب وتحقق md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "حساب وتحقق sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "حساب وتحقق sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "حساب وتحقق sha512sum",
|
||||
|
||||
"VTLANG_FILE_CHKSUM": "تدقيق المجموع للملف",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "احسب md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "احسب sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "احسب sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "احسب sha512sum",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "احسب وتحقق md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "احسب وتحقق sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "احسب وتحقق sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "احسب وتحقق sha512sum",
|
||||
|
||||
"VTLANG_POWER": "الطاقة",
|
||||
"VTLANG_POWER_REBOOT": "إعادة التشغيل",
|
||||
"VTLANG_POWER_HALT": "إيقاف",
|
||||
"VTLANG_POWER_BOOT_EFIFW": "إعادة التشغيل إلى إعداد EFI",
|
||||
|
||||
"VTLANG_KEYBRD_LAYOUT": "تخطيطات لوحة المفاتيح",
|
||||
"VTLANG_HWINFO": "معلومات الأجهزة الأساسية",
|
||||
"VTLANG_HWINFO": "معلومات حول العتاد",
|
||||
|
||||
"VTLANG_RESOLUTION_CFG": "تكوين الدقة",
|
||||
"VTLANG_SCREEN_MODE": "وضع عرض الشاشة",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "القيام بتحديد وضع النص",
|
||||
"VTLANG_SCREEN_GUI_MODE": "القيام بتحديد وضع الرسومات",
|
||||
"VTLANG_THEME_SELECT": "اختيار الموضوع",
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "فرض تحديد وضع النص",
|
||||
"VTLANG_SCREEN_GUI_MODE": "فرض تحديد وضع الرسومات",
|
||||
|
||||
"VTLANG_THEME_SELECT": "اختر السمة",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "أدوات Ventoy UEFI المساعدة",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "عرض برامج تشغيل EFI",
|
||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "إصلاح فشل تهيئة Windows BlinitializeLibrary",
|
||||
|
||||
"VTLANG_JSON_CHK_JSON": "التحقق من تكوين json للبرنامج الإضافي (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "التحقق من تكوين برنامج الإضافي العام للتحكم",
|
||||
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالموضوع",
|
||||
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالسمة",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "التحقق من تكوين برنامج الإضافي للتثبيت التلقائي",
|
||||
"VTLANG_JSON_CHK_PERSIST": "التحقق من تكوين برنامج الإضافي المستمر",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "التحقق من تكوين برنامج الإضافي الخاص بالقائمة المستعارة",
|
||||
@@ -53,27 +62,32 @@
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "التحقق من تكوين برنامج الإضافي الخاص باستبدال ملف التكوين للإقلاع",
|
||||
"VTLANG_JSON_CHK_DUD": "التحقق من تكوين برنامج الإضافي الخاص بـ dud",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "التحقق من تكوين برنامج الإضافي الخاص بكلمة المرور",
|
||||
|
||||
"VTLANG_NORMAL_MODE": "الإقلاع في الوضع العادي",
|
||||
"VTLANG_WIMBOOT_MODE": "الإقلاع في وضع wimboot",
|
||||
"VTLANG_GRUB2_MODE": "الإقلاع في وضع grub2",
|
||||
"VTLANG_MEMDISK_MODE": "الإقلاع في وضع memdisk",
|
||||
|
||||
"VTLANG_RET_TO_LISTVIEW": "العودة إلى ListView",
|
||||
"VTLANG_RET_TO_TREEVIEW": "العودة إلى TreeView",
|
||||
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "الإقلاع بدون قالب التثبيت التلقائي",
|
||||
"VTLANG_AUTOINS_USE": "الإقلاع مع",
|
||||
|
||||
"VTLANG_NO_PERSIST": "الإقلاع بدون الاستمرارية",
|
||||
"VTLANG_PERSIST_USE": "الإقلاع مع",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "العودة",
|
||||
|
||||
"VTLANG_ENTER_EXIT": "اضغط على مفتاح Enter للخروج",
|
||||
"VTLANG_ENTER_REBOOT": "اضغط على مفتاح Enter لإعادة التشغيل",
|
||||
"VTLANG_ENTER_CONTINUE": "اضغط على مفتاح Enter للمتابعة",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||
"VTLANG_CTRL_TEMP_SET": "إعدادات التحكم المؤقتة",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "تجاوز فحص CPU/TPM/SecureBoot عند تثبيت Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
||||
|
93
INSTALL/grub/menu/cs_CZ.json
Normal file
93
INSTALL/grub/menu/cs_CZ.json
Normal file
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"VTLANG_LANGUAGE_NAME": "Czech (Čeština)",
|
||||
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:Jazyk F1:Nápověda F2:Procházet F3:Seznam F4:Místní boot F5:Nástroje F6:Rozšířená nabídka",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:Jazyk F1:Nápověda F2:Procházet F3:Strom F4:Místní boot F5:Nástroje F6:Rozšířená nabídka",
|
||||
"VTLANG_RETURN_PREVIOUS": "Vrátit do předchozí nabídky [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "Vrátit do předchozí nabídky",
|
||||
|
||||
"VTLANG_MENU_LANG": "Výběrt jazyka nabídel",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Najít a spustit Windows",
|
||||
"VTLANG_LB_SBOOT_G4D": "Najít a spustit Grub4dos",
|
||||
"VTLANG_LB_SBOOT_HDD1": "Spustit 1. místní disk",
|
||||
"VTLANG_LB_SBOOT_HDD2": "Spustit 2. místní disk",
|
||||
"VTLANG_LB_SBOOT_HDD3": "Spustit 3. místní disk",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "Najít a spustit BOOTX64.EFI",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "Najít a spustit BOOTIA32.EFI",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "Najít a spustit BOOTAA64.EFI",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "Najít a spustit xorboot",
|
||||
|
||||
"VTLANG_FILE_CHKSUM": "Kontrolní součet souboru",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "Spočítat md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "Spočítat sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "Spočítat sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "Spočítat sha512sum",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "Spočítat a ověřit md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Spočítat a ověřit sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Spočítat a ověřit sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Spočítat a ověřit sha512sum",
|
||||
|
||||
"VTLANG_POWER": "Napájení",
|
||||
"VTLANG_POWER_REBOOT": "Restartovat",
|
||||
"VTLANG_POWER_HALT": "Vypnout",
|
||||
"VTLANG_POWER_BOOT_EFIFW": "Restartovat do EFI nastavení",
|
||||
|
||||
"VTLANG_KEYBRD_LAYOUT": "Rozložení klávesnice",
|
||||
"VTLANG_HWINFO": "Informace o hardwaru",
|
||||
|
||||
"VTLANG_RESOLUTION_CFG": "Nastavení rolišení",
|
||||
"VTLANG_SCREEN_MODE": "Nastavení režimu zobrazení",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "Vynutit textový režim",
|
||||
"VTLANG_SCREEN_GUI_MODE": "Vynutit grafický režim",
|
||||
|
||||
"VTLANG_THEME_SELECT": "Výběr motivu",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI nástroje",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Zobrazit EFI ovladače",
|
||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Opravit chybu Windows BlinitializeLibrary",
|
||||
|
||||
"VTLANG_JSON_CHK_JSON": "Zkontrolovat json konfiguraci zásuvných modulů (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "Zkontrolovat konfiguraci hlavního zásuvného modulu",
|
||||
"VTLANG_JSON_CHK_THEME": "Zkontrolovat konfiguraci zásuvného modulu motivů",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "Zkontrolovat konfiguraci zásuvného modulu automatické instalace",
|
||||
"VTLANG_JSON_CHK_PERSIST": "Zkontrolovat konfiguraci zásuvného modulu perzistence",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Zkontrolovat konfiguraci zásuvného modulu aliasů",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "Zkontrolovat konfiguraci zásuvného modulu tip",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "Zkontrolovat konfiguraci zásuvného modulu tříd",
|
||||
"VTLANG_JSON_CHK_INJECTION": "Zkontrolovat konfiguraci zásuvného modulu injekcí",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Zkontrolovat konfiguraci zásuvného modulu automatického memdisku",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "Zkontrolovat konfiguraci zásuvného modulu seznamu obrazů",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "Zkontrolovat konfiguraci zásuvného modulu černé listiny obrazů",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Zkontrolovat konfiguraci zásuvného modulu nahrazení konfigurace spouštění",
|
||||
"VTLANG_JSON_CHK_DUD": "Zkontrolovat konfiguraci zásuvného modulu dud",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "Zkontrolovat konfiguraci zásuvného modulu hesla",
|
||||
|
||||
"VTLANG_NORMAL_MODE": "Spustit normálně",
|
||||
"VTLANG_WIMBOOT_MODE": "Spustit v režimu wimboot",
|
||||
"VTLANG_GRUB2_MODE": "Spustit v režimu grub2",
|
||||
"VTLANG_MEMDISK_MODE": "Spustit v režimu memdisk",
|
||||
|
||||
"VTLANG_RET_TO_LISTVIEW": "Vrátis do zobrazení seznamu",
|
||||
"VTLANG_RET_TO_TREEVIEW": "Vrátit do zobrazení stromu",
|
||||
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "Spustit bez šablony automatické instalace",
|
||||
"VTLANG_AUTOINS_USE": "Spustit s",
|
||||
|
||||
"VTLANG_NO_PERSIST": "Spustit bez perzistence",
|
||||
"VTLANG_PERSIST_USE": "Spustit s",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "Vrátit",
|
||||
|
||||
"VTLANG_ENTER_EXIT": "zmáčkněte Enter pro ukončení",
|
||||
"VTLANG_ENTER_REBOOT": "zmáčkněte Enter pro restart",
|
||||
"VTLANG_ENTER_CONTINUE": "zmáčkněte enter pro pokračování",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Dočasné řídící nastavení",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Obejít CPU/TPM/SecureBoot kontrolu při instalaci Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Obejít požadování online účtu při instalaci Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Připojit Ventoy oddíl po spuštění Linuxu",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Zobrazit druhou spouštěcí nabídku",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
93
INSTALL/grub/menu/el_GR.json
Normal file
93
INSTALL/grub/menu/el_GR.json
Normal file
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"VTLANG_LANGUAGE_NAME": "Greek (Ελληνικά)",
|
||||
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:Γλώσσα F1:Βοήθεια F2:Περιήγηση F3:Προβολή Λίστας F4:Εκκίνηση από τοπικό δίσκο F5:Εργαλεία F6:Προσ. Μενού",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:Γλώσσα F1:Βοήθεια F2:Περιήγηση F3:Προβολή Δένδρου F4:Εκκίνηση από τοπικό δίσκο F5:Εργαλεία F6:Προσ. Μενού",
|
||||
"VTLANG_RETURN_PREVIOUS": "Επιστροφή στο προηγούμενο μενού [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "Επιστροφή στο προηγούμενο μενού",
|
||||
|
||||
"VTLANG_MENU_LANG": "Επιλογή Γλώσσας Μενού",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Αναζήτηση και εκκίνηση των Windows",
|
||||
"VTLANG_LB_SBOOT_G4D": "Αναζήτηση και εκκίνηση του Grub4dos",
|
||||
"VTLANG_LB_SBOOT_HDD1": "Εκκίνηση του 1ου τοπικού δίσκου",
|
||||
"VTLANG_LB_SBOOT_HDD2": "Εκκίνηση του 2ου τοπικού δίσκου",
|
||||
"VTLANG_LB_SBOOT_HDD3": "Εκκίνηση του 3ου τοπικού δίσκου",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "Αναζήτηση και εκκίνηση του BOOTX64.EFI",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "Αναζήτηση και εκκίνηση του BOOTIA32.EFI",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "Αναζήτηση και εκκίνηση του BOOTAA64.EFI",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "Αναζήτηση και εκκίνηση του xorboot",
|
||||
|
||||
"VTLANG_FILE_CHKSUM": "Αρχείο checksum",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "Υπολογισμός md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "Υπολογισμός sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "Υπολογισμός sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "Υπολογισμός sha512sum",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "Υπολογισμός και έλεγχος md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Υπολογισμός και έλεγχος sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Υπολογισμός και έλεγχος sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Υπολογισμός και έλεγχος sha512sum",
|
||||
|
||||
"VTLANG_POWER": "Λειτουργία",
|
||||
"VTLANG_POWER_REBOOT": "Επανεκκίνηση",
|
||||
"VTLANG_POWER_HALT": "Απενεργοποίηση",
|
||||
"VTLANG_POWER_BOOT_EFIFW": "Επανεκκίνηση σε EFI setup",
|
||||
|
||||
"VTLANG_KEYBRD_LAYOUT": "Διατάξεις Πληκτρολογίου",
|
||||
"VTLANG_HWINFO": "Πληροφορίες υλικού",
|
||||
|
||||
"VTLANG_RESOLUTION_CFG": "Διαμόρφωση ανάλυσης",
|
||||
"VTLANG_SCREEN_MODE": "Λειτουργία Προβολής Οθόνης",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "Επιβολή λειτουργίας κειμένου",
|
||||
"VTLANG_SCREEN_GUI_MODE": "Επιβολή λειτουργίας Γραφικών (GUI)",
|
||||
|
||||
"VTLANG_THEME_SELECT": "Επιλογή Θέματος",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "Εργαλεία Ventoy UEFI",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Προβολή EFI Drivers",
|
||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Διόρθωση αποτυχίας Windows BlinitializeLibrary",
|
||||
|
||||
"VTLANG_JSON_CHK_JSON": "Ελεγχος διαμόρφωσης json πρόσθετων (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "Ελεγχος διαμόρφωσης του πρόσθετου καθολικού ελέγχου",
|
||||
"VTLANG_JSON_CHK_THEME": "Ελεγχος διαμόρφωσης του πρόσθετου θέματος",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "Ελεγχος διαμόρφωσης του πρόσθετου αυτόματης εγκατάστασης",
|
||||
"VTLANG_JSON_CHK_PERSIST": "Ελεγχος διαμόρφωσης του πρόσθετου επιμονής",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Ελεγχος διαμόρφωσης του πρόσθετου ψευδώνυμου μενού",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "Ελεγχος διαμόρφωσης του πρόσθετου συμβουλών μενού",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "Ελεγχος διαμόρφωσης του πρόσθετου κατηγορίας μενού",
|
||||
"VTLANG_JSON_CHK_INJECTION": "Ελεγχος διαμόρφωσης του πρόσθετου injection",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Ελεγχος διαμόρφωσης του πρόσθετου auto memdisk",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "Ελεγχος διαμόρφωσης του πρόσθετου Λίστα images",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "Ελεγχος διαμόρφωσης του πρόσθετου Μαύρη λίστα images",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Ελεγχος διαμόρφωσης του πρόσθετου Αντικατάσταση διαμόρφ. εκκίνησης",
|
||||
"VTLANG_JSON_CHK_DUD": "Ελεγχος διαμόρφωσης του πρόσθετου dud",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "Ελεγχος διαμόρφωσης του πρόσθετου Κωδικός πρόσβασης",
|
||||
|
||||
"VTLANG_NORMAL_MODE": "Κανονική εκκίνηση",
|
||||
"VTLANG_WIMBOOT_MODE": "Εκκίνηση σε λειτουργία wimboot",
|
||||
"VTLANG_GRUB2_MODE": "Εκκίνηση σε λειτουργία grub2",
|
||||
"VTLANG_MEMDISK_MODE": "Εκκίνηση σε λειτουργία memdisk",
|
||||
|
||||
"VTLANG_RET_TO_LISTVIEW": "Επιστροφή σε Προβολή Λίστας",
|
||||
"VTLANG_RET_TO_TREEVIEW": "Επιστροφή σε Προβολή Δένδρου",
|
||||
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "Εκκίνηση χωρίς πρότυπο αυτόματης εγκατάστασης",
|
||||
"VTLANG_AUTOINS_USE": "Εκκίνηση",
|
||||
|
||||
"VTLANG_NO_PERSIST": "Εκκίνηση χωρίς επιμονή",
|
||||
"VTLANG_PERSIST_USE": "Εκκίνηση",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "Επιστροφή",
|
||||
|
||||
"VTLANG_ENTER_EXIT": "πατήστε το πλήκτρο Enter για έξοδο",
|
||||
"VTLANG_ENTER_REBOOT": "πατήστε το πλήκτρο Enter για επανεκκίνηση",
|
||||
"VTLANG_ENTER_CONTINUE": "πατήστε το πλήκτρο Enter για να συνεχίσετε",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Προσωρινές ρυθμίσεις ελέγχου",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Παράκαμψη ελέγχου CPU/TPM/SecureBoot κατά την εγκατάσταση των Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Παράκαμψη της απαίτησης online λογαριασμού κατά την εγκατάσταση των Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Προσάρτηση διαμερίσματος Ventoy μετά την εκκίνηση του Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Εμφάνιση δευτερεύοντος μενού εκκίνησης",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
@@ -47,7 +47,7 @@
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Afficher les pilotes EFI",
|
||||
"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_THEME": "Afficher la configuration du plugin de thème",
|
||||
"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_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_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á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_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_G4D": "Keresés és indítás - Grub4dos",
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Windows keresése és indítása",
|
||||
"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_HDD2": "Indítás az 2. helyi lemezről",
|
||||
"VTLANG_LB_SBOOT_HDD3": "Indítás az 3. helyi lemezről",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "Keresés és indítás - BOOTX64.EFI",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "Keresés és indítás - BOOTIA32.EFI",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "Keresés és indítás - BOOTAA64.EFI",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "Keresés és indítás - xorboot",
|
||||
"VTLANG_LB_SBOOT_HDD2": "Indítás a 2. helyi lemezről",
|
||||
"VTLANG_LB_SBOOT_HDD3": "Indítás a 3. helyi lemezről",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "BOOTX64.EFI keresése és indítása",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "BOOTIA32.EFI keresése és indítása",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "BOOTAA64.EFI keresése és indítása",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "xorboot keresése és indítása",
|
||||
|
||||
"VTLANG_FILE_CHKSUM": "Fájl ell.összeg",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "Számítás - md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "Számítás - sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "Számítás - sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "Számítás - sha512sum",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "Számítás és ellenőrzés - md5sum",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Számítás és ellenőrzés - sha1sum",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Számítás és ellenőrzés - sha256sum",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Számítás és ellenőrzés - sha512sum",
|
||||
"VTLANG_FILE_CHKSUM": "Fájl ellenőrzőösszege",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "md5sum kiszámítása",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "sha1sum kiszámítása",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "sha256sum kiszámítása",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "sha512sum kiszámítása",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "md5sum kiszámítása és ellenőrzése",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "sha1sum kiszámítása és ellenőrzése",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "sha256sum kiszámítása és ellenőrzése",
|
||||
"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_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_HWINFO": "Hardver információ",
|
||||
"VTLANG_KEYBRD_LAYOUT": "Billentyűzetkiosztások",
|
||||
"VTLANG_HWINFO": "Hardverinformációk",
|
||||
|
||||
"VTLANG_RESOLUTION_CFG": "Felbontás konfigurációja",
|
||||
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési mód",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "Kénysz. szöveges mód",
|
||||
"VTLANG_SCREEN_GUI_MODE": "Kénysz. grafikus mód",
|
||||
"VTLANG_RESOLUTION_CFG": "Felbontás beállítása",
|
||||
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési módja",
|
||||
"VTLANG_SCREEN_TEXT_MODE": "Szöveges mód kényszerítése",
|
||||
"VTLANG_SCREEN_GUI_MODE": "Grafikus mód kényszerítése",
|
||||
|
||||
"VTLANG_THEME_SELECT": "Téma kiválasztása",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI driverek megjelenítése",
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI-segédprogramok",
|
||||
"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_JSON_CHK_JSON": "Ellenőrizze a plugin json konfigurációt (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "Ellenőrizze a globális vezérlő plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_THEME": "Ellenőrizze a téma plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "Ellenőrizze az auto. telepítő plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_PERSIST": "A persistence plugin konfigurációjának ellenőrzése",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Ellenőrizze a menü alias plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "Ellenőrizze a menü tipp plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "Ellenőrizze a menü osztály plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_INJECTION": "Injekciós plugin konfiguráció ellenőrzése",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Auto. memdisk plugin konfiguráció ellenőrzése",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "Ellenőrizze a képlista plugin beállításait",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "Ellenőrizze a kép feketelista plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Check boot conf cserélje ki a plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_DUD": "Ellenőrizze a dud plugin konfigurációt",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "Ellenőrizze a jelszó plugin konfigurációját",
|
||||
"VTLANG_JSON_CHK_JSON": "A bővítmény JSON-beállításának (ventoy.json) ellenőrzése",
|
||||
"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": "A téma bővítmény beállításnak ellenőrzése",
|
||||
"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": "Az állandóság bővítmény beállításának ellenőrzése",
|
||||
"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": "A menütipp bővítmény beállításának ellenőrzése",
|
||||
"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": "A befecskendezés bővítmény beállításnak 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": "A lemezképlista bővítmény beállításnak ellenőrzése",
|
||||
"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": "Az indítási beállítás csere bővítmény beállításnak ellenőrzése",
|
||||
"VTLANG_JSON_CHK_DUD": "A dud bővítmény beállításnak ellenőrzése",
|
||||
"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_WIMBOOT_MODE": "Indítás wimboot 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_TREEVIEW": "Vissza a Fanézethez",
|
||||
"VTLANG_RET_TO_LISTVIEW": "Vissza a listané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_AUTOINS_USE": "Indítás ezzel",
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "Indítás automatikus telepítési sablon nélkül",
|
||||
"VTLANG_AUTOINS_USE": "Indítás ezzel:",
|
||||
|
||||
"VTLANG_NO_PERSIST": "Indítás perzisztencia nélkül",
|
||||
"VTLANG_PERSIST_USE": "Indítás ezzel",
|
||||
"VTLANG_NO_PERSIST": "Indítás állandóság nélkül",
|
||||
"VTLANG_PERSIST_USE": "Indítás ezzel:",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "Vissza",
|
||||
|
||||
"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_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_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||
"VTLANG_CTRL_TEMP_SET": "Ideiglenes vezérlési beállítások",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "CPU/TPM/SecureBoot ellenőrzés megkerülése Windows 11 telepítésekor",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
|
||||
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
|
||||
|
||||
"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": ""
|
||||
}
|
@@ -1,37 +1,37 @@
|
||||
{
|
||||
"VTLANG_LANGUAGE_NAME": "Korean (한국어)",
|
||||
|
||||
"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_LIST": " L:언어 F1:도움말 F2:찾아보기 F3:목록 보기 F4:로컬 부팅 F5:도구 F6:확장 메뉴",
|
||||
"VTLANG_STR_HOTKEY_TREE": " L:언어 F1:도움말 F2:찾아보기 F3:트리 보기 F4:로컬 부팅 F5:도구 F6:확장 메뉴",
|
||||
"VTLANG_RETURN_PREVIOUS": "이전 메뉴로 돌아가기 [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "이전 메뉴로 돌아가기",
|
||||
|
||||
"VTLANG_MENU_LANG": "메뉴 언어 선택",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Windows 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_G4D": "Grub4dos 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_HDD1": "첫 번째 로컬 디스크 부트",
|
||||
"VTLANG_LB_SBOOT_HDD2": "두 번째 로컬 디스크 부트",
|
||||
"VTLANG_LB_SBOOT_HDD3": "세 번째 로컬 디스크 부트",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "BOOTX64.EFI 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "BOOTIA32.EFI 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "BOOTAA64.EFI 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "xorboot 검색 및 부트",
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Windows 검색 및 부팅",
|
||||
"VTLANG_LB_SBOOT_G4D": "Grub4dos 검색 및 부팅",
|
||||
"VTLANG_LB_SBOOT_HDD1": "첫 번째 로컬 디스크 부팅",
|
||||
"VTLANG_LB_SBOOT_HDD2": "두 번째 로컬 디스크 부팅",
|
||||
"VTLANG_LB_SBOOT_HDD3": "세 번째 로컬 디스크 부팅",
|
||||
"VTLANG_LB_SBOOT_X64EFI": "BOOTX64.EFI 검색 및 부팅",
|
||||
"VTLANG_LB_SBOOT_IA32EFI": "BOOTIA32.EFI 검색 및 부팅",
|
||||
"VTLANG_LB_SBOOT_AA64EFI": "BOOTAA64.EFI 검색 및 부팅",
|
||||
"VTLANG_LB_SBOOT_XORBOOT": "xorboot 검색 및 부팅",
|
||||
|
||||
"VTLANG_FILE_CHKSUM": "파일 체크섬",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "md5sum 계산",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "sha1sum 계산",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "sha256sum 계산",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "sha512sum 계산",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "md5sum 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "sha1sum 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "sha256sum 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "sha512sum 계산 및 확인",
|
||||
"VTLANG_CHKSUM_MD5_CALC": "md5 검사값 계산",
|
||||
"VTLANG_CHKSUM_SHA1_CALC": "sha1 검사값 계산",
|
||||
"VTLANG_CHKSUM_SHA256_CALC": "sha256 검사값 계산",
|
||||
"VTLANG_CHKSUM_SHA512_CALC": "sha512 검사값 계산",
|
||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "md5 검사값 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "sha1 검사값 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "sha256 검사값 계산 및 확인",
|
||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "sha512 검사값 계산 및 확인",
|
||||
|
||||
"VTLANG_POWER": "전원",
|
||||
"VTLANG_POWER_REBOOT": "다시 부트",
|
||||
"VTLANG_POWER_HALT": "끄기",
|
||||
"VTLANG_POWER_BOOT_EFIFW": "EFI 설정으로 재부트",
|
||||
"VTLANG_POWER_REBOOT": "다시 시작",
|
||||
"VTLANG_POWER_HALT": "전원 끄기",
|
||||
"VTLANG_POWER_BOOT_EFIFW": "UEFI 설정으로 다시 시작",
|
||||
|
||||
"VTLANG_KEYBRD_LAYOUT": "키보드 레이아웃",
|
||||
"VTLANG_HWINFO": "하드웨어 정보",
|
||||
@@ -44,14 +44,14 @@
|
||||
"VTLANG_THEME_SELECT": "테마 선택",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI 유틸리티",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI 드라이버 표시",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "UEFI 드라이버 표시",
|
||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Windows 초기화 라이브러리 오류 복구",
|
||||
|
||||
"VTLANG_JSON_CHK_JSON": "플러그인 json 구성 확인 (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_JSON": "플러그인 파일 구성 확인 (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "전역 제어 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_THEME": "테마 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "자동 설치 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_PERSIST": "지속성 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_PERSIST": "영구화 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "메뉴 별칭 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "메뉴 팁 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "메뉴 클래스 플러그인 구성 확인",
|
||||
@@ -60,34 +60,34 @@
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "이미지 목록 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "이미지 블랙리스트 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "부팅 구성 대체 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_DUD": "드라이버 디스크 업데이트 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_DUD": "드라이버 업데이트 디스크 플러그인 구성 확인",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "암호 플러그인 구성 확인",
|
||||
|
||||
"VTLANG_NORMAL_MODE": "정상 모드로 부트",
|
||||
"VTLANG_WIMBOOT_MODE": "wimboot 모드로 부트",
|
||||
"VTLANG_NORMAL_MODE": "일반 모드로 부팅",
|
||||
"VTLANG_WIMBOOT_MODE": "wimboot 모드로 부팅",
|
||||
"VTLANG_GRUB2_MODE": "grub2 모드로 부팅",
|
||||
"VTLANG_MEMDISK_MODE": "memdisk 모드로 부트",
|
||||
"VTLANG_MEMDISK_MODE": "메모리 디스크 모드로 부팅",
|
||||
|
||||
"VTLANG_RET_TO_LISTVIEW": "목록 보기로 돌아가기",
|
||||
"VTLANG_RET_TO_TREEVIEW": "트리 보기로 돌아가기",
|
||||
"VTLANG_RET_TO_LISTVIEW": "목록보기로 돌아가기",
|
||||
"VTLANG_RET_TO_TREEVIEW": "트리보기로 돌아가기",
|
||||
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "자동 설치 템플릿 없이 부트",
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "자동 설치 스크립트 사용 안 함",
|
||||
"VTLANG_AUTOINS_USE": "부팅 대상",
|
||||
|
||||
"VTLANG_NO_PERSIST": "지속성 없는 부트",
|
||||
"VTLANG_PERSIST_USE": "부트 대상",
|
||||
"VTLANG_NO_PERSIST": "영구화된 데이터 파일 사용 안 함",
|
||||
"VTLANG_PERSIST_USE": "부팅 대상",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "돌아가기",
|
||||
|
||||
"VTLANG_ENTER_EXIT": "Enter 키를 눌러 종료",
|
||||
"VTLANG_ENTER_REBOOT": "Enter 키를 눌러 재부팅",
|
||||
"VTLANG_ENTER_EXIT": "종료하려면 Enter 키를 누르십시오",
|
||||
"VTLANG_ENTER_REBOOT": "다시 시작하려면 Enter 키를 누르십시오",
|
||||
"VTLANG_ENTER_CONTINUE": "계속하려면 Enter 키를 누르십시오",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "임시 제어 설정",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Windows 11을 설치할 때 우회 점검",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 우회",
|
||||
"VTLANG_LINUX_REMOUNT": "Linux 부트 후 Ventoy 파티션 마운트",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "보조 부트 메뉴 표시",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Windows 11 설치 시 CPU/TPM/SecureBoot 검사 회피",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
|
||||
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user