Commit 99627752 authored by longpanda's avatar longpanda
Browse files

update

parent 062f8160
...@@ -114,11 +114,12 @@ static int ventoy_iso_open(const char *path, struct fuse_file_info *file) ...@@ -114,11 +114,12 @@ static int ventoy_iso_open(const char *path, struct fuse_file_info *file)
return 0; return 0;
} }
static int ventoy_read_iso_sector(uint32_t sector, uint32_t num, void *buf) static int ventoy_read_iso_sector(uint32_t sector, uint32_t num, char *buf)
{ {
uint32_t i = 0; uint32_t i = 0;
uint32_t leftSec = 0; uint32_t leftSec = 0;
uint32_t readSec = 0; uint32_t readSec = 0;
off_t offset = 0;
dmtable_entry *entry = NULL; dmtable_entry *entry = NULL;
for (i = 0; i < g_disk_entry_num && num > 0; i++) for (i = 0; i < g_disk_entry_num && num > 0; i++)
...@@ -127,14 +128,15 @@ static int ventoy_read_iso_sector(uint32_t sector, uint32_t num, void *buf) ...@@ -127,14 +128,15 @@ static int ventoy_read_iso_sector(uint32_t sector, uint32_t num, void *buf)
if (sector >= entry->isoSector && sector < entry->isoSector + entry->sectorNum) if (sector >= entry->isoSector && sector < entry->isoSector + entry->sectorNum)
{ {
lseek(g_disk_fd, (entry->diskSector + (sector - entry->isoSector)) * 512, SEEK_SET); offset = (entry->diskSector + (sector - entry->isoSector)) * 512;
leftSec = entry->sectorNum - (sector - entry->isoSector); leftSec = entry->sectorNum - (sector - entry->isoSector);
readSec = (leftSec > num) ? num : leftSec; readSec = (leftSec > num) ? num : leftSec;
read(g_disk_fd, buf, readSec * 512); pread(g_disk_fd, buf, readSec * 512, offset);
sector += readSec; sector += readSec;
buf += readSec * 512;
num -= readSec; num -= readSec;
} }
} }
......
No preview for this file type
No preview for this file type
...@@ -423,7 +423,6 @@ static grub_err_t ...@@ -423,7 +423,6 @@ static grub_err_t
cmd_timeout (const char *line, struct syslinux_menu *menu) cmd_timeout (const char *line, struct syslinux_menu *menu)
{ {
menu->timeout = grub_strtoul (line, NULL, 0); menu->timeout = grub_strtoul (line, NULL, 0);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
...@@ -991,6 +990,7 @@ write_entry (struct output_buffer *outbuf, ...@@ -991,6 +990,7 @@ write_entry (struct output_buffer *outbuf,
print_string ("\n"); print_string ("\n");
} }
print_string ("boot\n");
} }
break; break;
case KERNEL_CHAINLOADER: case KERNEL_CHAINLOADER:
...@@ -1433,6 +1433,7 @@ config_file (struct output_buffer *outbuf, ...@@ -1433,6 +1433,7 @@ config_file (struct output_buffer *outbuf,
const char *fname, struct syslinux_menu *parent, const char *fname, struct syslinux_menu *parent,
grub_syslinux_flavour_t flav) grub_syslinux_flavour_t flav)
{ {
const char *data;
grub_err_t err; grub_err_t err;
struct syslinux_menu menu; struct syslinux_menu menu;
struct syslinux_menuentry *curentry, *lentry; struct syslinux_menuentry *curentry, *lentry;
...@@ -1447,6 +1448,13 @@ config_file (struct output_buffer *outbuf, ...@@ -1447,6 +1448,13 @@ config_file (struct output_buffer *outbuf,
menu.filename = fname; menu.filename = fname;
menu.parent = parent; menu.parent = parent;
data = grub_env_get("vtdebug_flag");
if (data && data[0])
{
menu.timeout = 100;
}
err = syslinux_parse_real (&menu); err = syslinux_parse_real (&menu);
if (err) if (err)
return err; return err;
......
...@@ -86,6 +86,9 @@ static int ventoy_debug = 0; ...@@ -86,6 +86,9 @@ static int ventoy_debug = 0;
static int ventoy_initrd_called = 0; static int ventoy_initrd_called = 0;
static int ventoy_linux_argc = 0; static int ventoy_linux_argc = 0;
static char **ventoy_linux_args = NULL; static char **ventoy_linux_args = NULL;
static int ventoy_extra_initrd_num = 0;
static char *ventoy_extra_initrd_list[256];
static grub_err_t static grub_err_t
grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]); grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]);
...@@ -427,8 +430,9 @@ static void ventoy_debug_pause(void) ...@@ -427,8 +430,9 @@ static void ventoy_debug_pause(void)
static int ventoy_preboot(void) static int ventoy_preboot(void)
{ {
int i;
const char *file;
char buf[128]; char buf[128];
char *argv[2];
if (ventoy_debug) if (ventoy_debug)
{ {
...@@ -449,16 +453,28 @@ static int ventoy_preboot(void) ...@@ -449,16 +453,28 @@ static int ventoy_preboot(void)
grub_snprintf(buf, sizeof(buf), "mem:%s:size:%s", grub_env_get("ventoy_cpio_addr"), grub_env_get("ventoy_cpio_size")); grub_snprintf(buf, sizeof(buf), "mem:%s:size:%s", grub_env_get("ventoy_cpio_addr"), grub_env_get("ventoy_cpio_size"));
argv[0] = buf; ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(buf);
argv[1] = NULL;
grub_cmd_initrd(NULL, 1, argv); file = grub_env_get("vtoy_img_part_file");
if (file)
{
ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(file);
}
if (ventoy_debug) if (ventoy_debug)
{ {
grub_printf("add initrd %s\n", buf); grub_printf("========== initrd list ==========\n");
for (i = 0; i < ventoy_extra_initrd_num; i++)
{
grub_printf("%s\n", ventoy_extra_initrd_list[i]);
}
grub_printf("=================================\n");
ventoy_debug_pause(); ventoy_debug_pause();
} }
grub_cmd_initrd(NULL, ventoy_extra_initrd_num, ventoy_extra_initrd_list);
return 0; return 0;
} }
...@@ -479,6 +495,13 @@ static int ventoy_boot_opt_filter(char *opt) ...@@ -479,6 +495,13 @@ static int ventoy_boot_opt_filter(char *opt)
return 0; return 0;
} }
if (grub_strncmp(opt, "init=", 5) == 0)
{
opt[0] = 'v';
opt[1] = 't';
return 0;
}
if (ventoy_debug) if (ventoy_debug)
{ {
if (grub_strcmp(opt, "quiet") == 0) if (grub_strcmp(opt, "quiet") == 0)
...@@ -597,7 +620,7 @@ static int ventoy_bootopt_hook(int argc, char *argv[]) ...@@ -597,7 +620,7 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
if (ventoy_debug) if (ventoy_debug)
{ {
ventoy_linux_args[count++] = grub_strdup("loglevel=10"); ventoy_linux_args[count++] = grub_strdup("loglevel=7");
} }
ventoy_linux_argc = count; ventoy_linux_argc = count;
...@@ -663,6 +686,72 @@ grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)), ...@@ -663,6 +686,72 @@ grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)),
return 0; return 0;
} }
static grub_err_t
grub_cmd_extra_initrd_append (grub_command_t cmd __attribute__ ((unused)),
int argc, char *argv[])
{
int newclen = 0;
char *pos = NULL;
char *end = NULL;
char buf[256] = {0};
if (argc != 1)
{
return 1;
}
for (pos = argv[0]; *pos; pos++)
{
if (*pos == '/')
{
end = pos;
}
}
if (end)
{
/* grub2 newc bug workaround */
newclen = (int)grub_strlen(end + 1);
if ((110 + newclen) % 4 == 0)
{
grub_snprintf(buf, sizeof(buf), "newc:.%s:%s", end + 1, argv[0]);
}
else
{
grub_snprintf(buf, sizeof(buf), "newc:%s:%s", end + 1, argv[0]);
}
if (ventoy_extra_initrd_num < 256)
{
ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(buf);
}
}
return 0;
}
static grub_err_t
grub_cmd_extra_initrd_reset (grub_command_t cmd __attribute__ ((unused)),
int argc, char *argv[])
{
int i;
(void)argc;
(void)argv;
for (i = 0; i < ventoy_extra_initrd_num; i++)
{
if (ventoy_extra_initrd_list[i])
{
grub_free(ventoy_extra_initrd_list[i]);
}
}
grub_memset(ventoy_extra_initrd_list, 0, sizeof(ventoy_extra_initrd_list));
return 0;
}
static grub_err_t static grub_err_t
grub_linux_boot (void) grub_linux_boot (void)
...@@ -1416,8 +1505,8 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), ...@@ -1416,8 +1505,8 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
int argc, char *argv[]) int argc, char *argv[])
{ {
int i; int i;
const char *file;
char buf[64]; char buf[64];
char *newargv[32] = {NULL};
if (ventoy_debug) grub_printf("ventoy_cmd_initrd %d\n", ventoy_linux_argc); if (ventoy_debug) grub_printf("ventoy_cmd_initrd %d\n", ventoy_linux_argc);
...@@ -1430,19 +1519,37 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), ...@@ -1430,19 +1519,37 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
if (ventoy_debug) grub_printf("membuf=%s\n", buf); if (ventoy_debug) grub_printf("membuf=%s\n", buf);
newargv[0] = buf; ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(buf);
file = grub_env_get("vtoy_img_part_file");
if (file)
{
ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(file);
}
for (i = 0; i < argc; i++) for (i = 0; i < argc; i++)
{ {
newargv[i + 1] = argv[i]; ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(argv[i]);
} }
ventoy_initrd_called = 1; ventoy_initrd_called = 1;
return grub_cmd_initrd(cmd, argc + 1, newargv); if (ventoy_debug)
{
grub_printf("========== initrd list ==========\n");
for (i = 0; i < ventoy_extra_initrd_num; i++)
{
grub_printf("%s\n", ventoy_extra_initrd_list[i]);
}
grub_printf("=================================\n");
}
return grub_cmd_initrd(cmd, ventoy_extra_initrd_num, ventoy_extra_initrd_list);
} }
static grub_command_t cmd_linux, cmd_initrd, cmd_linuxefi, cmd_initrdefi, cmd_set_bootopt, cmd_unset_bootopt; 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;
GRUB_MOD_INIT(linux) GRUB_MOD_INIT(linux)
{ {
...@@ -1458,6 +1565,9 @@ GRUB_MOD_INIT(linux) ...@@ -1458,6 +1565,9 @@ GRUB_MOD_INIT(linux)
cmd_set_bootopt = grub_register_command ("vt_set_boot_opt", grub_cmd_set_boot_opt, 0, N_("set ext boot opt")); cmd_set_bootopt = grub_register_command ("vt_set_boot_opt", grub_cmd_set_boot_opt, 0, N_("set ext boot opt"));
cmd_unset_bootopt = grub_register_command ("vt_unset_boot_opt", grub_cmd_unset_boot_opt, 0, N_("unset ext boot opt")); cmd_unset_bootopt = grub_register_command ("vt_unset_boot_opt", grub_cmd_unset_boot_opt, 0, N_("unset ext boot opt"));
cmd_extra_initrd_append = grub_register_command ("vt_img_extra_initrd_append", grub_cmd_extra_initrd_append, 0, N_(""));
cmd_extra_initrd_reset = grub_register_command ("vt_img_extra_initrd_reset", grub_cmd_extra_initrd_reset, 0, N_(""));
ventoy_linux_args = grub_zalloc(sizeof(char *) * LINUX_MAX_ARGC); ventoy_linux_args = grub_zalloc(sizeof(char *) * LINUX_MAX_ARGC);
my_mod = mod; my_mod = mod;
......
...@@ -54,6 +54,7 @@ int g_valid_initrd_count = 0; ...@@ -54,6 +54,7 @@ int g_valid_initrd_count = 0;
int g_default_menu_mode = 0; int g_default_menu_mode = 0;
int g_filt_dot_underscore_file = 0; int g_filt_dot_underscore_file = 0;
static grub_file_t g_old_file; static grub_file_t g_old_file;
static int g_ventoy_last_entry_back;
char g_iso_path[256]; char g_iso_path[256];
char g_img_swap_tmp_buf[1024]; char g_img_swap_tmp_buf[1024];
...@@ -92,6 +93,9 @@ static int g_tree_script_pos = 0; ...@@ -92,6 +93,9 @@ static int g_tree_script_pos = 0;
static char *g_list_script_buf = NULL; static char *g_list_script_buf = NULL;
static int g_list_script_pos = 0; static int g_list_script_pos = 0;
static char *g_part_list_buf = NULL;
static int g_part_list_pos = 0;
static const char *g_menu_class[] = static const char *g_menu_class[] =
{ {
"vtoyiso", "vtoywim", "vtoyefi", "vtoyimg" "vtoyiso", "vtoywim", "vtoyefi", "vtoyimg"
...@@ -1812,6 +1816,7 @@ int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, ...@@ -1812,6 +1816,7 @@ int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist,
int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start) int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start)
{ {
int fs_type; int fs_type;
int len;
grub_uint32_t i = 0; grub_uint32_t i = 0;
grub_uint32_t sector = 0; grub_uint32_t sector = 0;
grub_uint32_t count = 0; grub_uint32_t count = 0;
...@@ -1856,6 +1861,27 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr ...@@ -1856,6 +1861,27 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
} }
} }
len = (int)grub_strlen(file->name);
if (grub_strncasecmp(file->name + len - 4, ".img", 4) == 0)
{
for (i = 0; i < chunklist->cur_chunk; i++)
{
count = chunklist->chunk[i].disk_end_sector + 1 - chunklist->chunk[i].disk_start_sector;
if (count < 4)
{
count = 1;
}
else
{
count >>= 2;
}
chunklist->chunk[i].img_start_sector = sector;
chunklist->chunk[i].img_end_sector = sector + count - 1;
sector += count;
}
}
return 0; return 0;
} }
...@@ -2498,6 +2524,62 @@ end: ...@@ -2498,6 +2524,62 @@ end:
return 0; return 0;
} }
static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_partition_t partition, void *data)
{
(void)disk;
(void)data;
g_part_list_pos += grub_snprintf(g_part_list_buf + g_part_list_pos, VTOY_MAX_SCRIPT_BUF - g_part_list_pos,
"0 %llu linear /dev/ventoy %llu\n",
(ulonglong)partition->len, (ulonglong)partition->start);
return 0;
}
static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc, char **args)
{
char *device_name = NULL;
grub_device_t dev = NULL;
char buf[64];
(void)ctxt;
g_part_list_pos = 0;
grub_env_unset("vtoy_img_part_file");
if (argc != 1)
{
return 1;
}
device_name = grub_file_get_device_name(args[0]);
if (!device_name)
{
debug("ventoy_cmd_img_part_info failed, %s\n", args[0]);
goto end;
}
dev = grub_device_open(device_name);
if (!dev)
{
debug("grub_device_open failed, %s\n", device_name);
goto end;
}
grub_partition_iterate(dev->disk, ventoy_img_partition_callback, NULL);
grub_snprintf(buf, sizeof(buf), "newc:vtoy_dm_table:mem:0x%llx:size:%d", (ulonglong)(ulong)g_part_list_buf, g_part_list_pos);
grub_env_set("vtoy_img_part_file", buf);
end:
check_free(device_name, grub_free);
check_free(dev, grub_device_close);
return 0;
}
static grub_err_t ventoy_cmd_file_strstr(grub_extcmd_context_t ctxt, int argc, char **args) static grub_err_t ventoy_cmd_file_strstr(grub_extcmd_context_t ctxt, int argc, char **args)
{ {
int rc = 1; int rc = 1;
...@@ -2645,6 +2727,108 @@ static grub_err_t ventoy_cmd_img_unhook_root(grub_extcmd_context_t ctxt, int arg ...@@ -2645,6 +2727,108 @@ static grub_err_t ventoy_cmd_img_unhook_root(grub_extcmd_context_t ctxt, int arg
return 0; return 0;
} }
static grub_err_t ventoy_cmd_push_last_entry(grub_extcmd_context_t ctxt, int argc, char **args)
{
(void)ctxt;
(void)argc;
(void)args;
g_ventoy_last_entry_back = g_ventoy_last_entry;
g_ventoy_last_entry = -1;
return 0;
}
static grub_err_t ventoy_cmd_pop_last_entry(grub_extcmd_context_t ctxt, int argc, char **args)
{
(void)ctxt;
(void)argc;
(void)args;
g_ventoy_last_entry = g_ventoy_last_entry_back;
return 0;
}
static int ventoy_lib_module_callback(const char *filename, const struct grub_dirhook_info *info, void *data)
{
const char *pos = filename + 1;
if (info->dir)
{
while (*pos)
{
if (*pos == '.')
{
if ((*(pos - 1) >= '0' && *(pos - 1) <= '9') && (*(pos + 1) >= '0' && *(pos + 1) <= '9'))
{
grub_strncpy((char *)data, filename, 128);
return 1;
}
}
pos++;
}
}
return 0;
}
static grub_err_t ventoy_cmd_lib_module_ver(grub_extcmd_context_t ctxt, int argc, char **args)
{
int rc = 1;
char *device_name = NULL;
grub_device_t dev = NULL;
grub_fs_t fs = NULL;
char buf[128] = {0};
(void)ctxt;
if (argc != 3)
{
debug("ventoy_cmd_lib_module_ver, invalid param num %d\n", argc);
return 1;
}
debug("ventoy_cmd_lib_module_ver %s %s %s\n", args[0], args[1], args[2]);
device_name = grub_file_get_device_name(args[0]);
if (!device_name)
{
debug("grub_file_get_device_name failed, %s\n", args[0]);
goto end;
}
dev = grub_device_open(device_name);
if (!dev)
{
debug("grub_device_open failed, %s\n", device_name);
goto end;
}
fs = grub_fs_probe(dev);
if (!fs)
{
debug("grub_fs_probe failed, %s\n", device_name);
goto end;
}
fs->fs_dir(dev, args[1], ventoy_lib_module_callback, buf);
if (buf[0])
{
ventoy_set_env(args[2], buf);
}
rc = 0;
end:
check_free(device_name, grub_free);
check_free(dev, grub_device_close);
return rc;
}
grub_uint64_t ventoy_grub_get_file_size(const char *fmt, ...) grub_uint64_t ventoy_grub_get_file_size(const char *fmt, ...)
{ {
grub_uint64_t size = 0; grub_uint64_t size = 0;
...@@ -2747,6 +2931,7 @@ static int ventoy_env_init(void) ...@@ -2747,6 +2931,7 @@ static int ventoy_env_init(void)
grub_env_set("vtdebug_flag", ""); grub_env_set("vtdebug_flag", "");
g_part_list_buf = grub_malloc(VTOY_PART_BUF_LEN);
g_tree_script_buf = grub_malloc(VTOY_MAX_SCRIPT_BUF); g_tree_script_buf = grub_malloc(VTOY_MAX_SCRIPT_BUF);
g_list_script_buf = grub_malloc(VTOY_MAX_SCRIPT_BUF); g_list_script_buf = grub_malloc(VTOY_MAX_SCRIPT_BUF);
...@@ -2785,6 +2970,9 @@ static cmd_para ventoy_cmds[] = ...@@ -2785,6 +2970,9 @@ static cmd_para ventoy_cmds[] =
{ "vt_load_cpio", ventoy_cmd_load_cpio, 0, NULL, "", "", NULL }, { "vt_load_cpio", ventoy_cmd_load_cpio, 0, NULL, "", "", NULL },
{ "vt_trailer_cpio", ventoy_cmd_trailer_cpio, 0, NULL, "", "", NULL }, { "vt_trailer_cpio", ventoy_cmd_trailer_cpio, 0, NULL, "", "", NULL },
{ "vt_push_last_entry", ventoy_cmd_push_last_entry, 0, NULL, "", "", NULL },
{ "vt_pop_last_entry", ventoy_cmd_pop_last_entry, 0, NULL, "", "", NULL },
{ "vt_get_lib_module_ver", ventoy_cmd_lib_module_ver, 0, NULL, "", "", NULL },
{ "vt_find_first_bootable_hd", ventoy_cmd_find_bootable_hdd, 0, NULL, "", "", NULL }, { "vt_find_first_bootable_hd", ventoy_cmd_find_bootable_hdd, 0, NULL, "", "", NULL },
{ "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL }, { "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL },
...@@ -2834,6 +3022,7 @@ static cmd_para ventoy_cmds[] = ...@@ -2834,6 +3022,7 @@ static cmd_para ventoy_cmds[] =
{ "vt_1st_line", ventoy_cmd_read_1st_line, 0, NULL, "", "", NULL }, { "vt_1st_line", ventoy_cmd_read_1st_line, 0, NULL, "", "", NULL },
{ "vt_file_strstr", ventoy_cmd_file_strstr, 0, NULL, "", "", NULL }, { "vt_file_strstr", ventoy_cmd_file_strstr, 0, NULL, "", "", NULL },
{ "vt_img_part_info", ventoy_cmd_img_part_info, 0, NULL, "", "", NULL },
{ "vt_parse_iso_volume", ventoy_cmd_parse_volume, 0, NULL, "", "", NULL }, { "vt_parse_iso_volume", ventoy_cmd_parse_volume, 0, NULL, "", "", NULL },
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#define VTOY_MAX_SCRIPT_BUF (4 * 1024 * 1024) #define VTOY_MAX_SCRIPT_BUF (4 * 1024 * 1024)
#define VTOY_PART_BUF_LEN (128 * 1024)
#define VTOY_FILT_MIN_FILE_SIZE 32768 #define VTOY_FILT_MIN_FILE_SIZE 32768
#define VTOY_SIZE_1GB 1073741824 #define VTOY_SIZE_1GB 1073741824
......
...@@ -12,10 +12,10 @@ make install ...@@ -12,10 +12,10 @@ make install
PATH=$PATH:$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/ PATH=$PATH:$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/
net_modules_legacy="net tftp http" net_modules_legacy="net tftp http"
all_modules_legacy="date drivemap blocklist vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu" all_modules_legacy="date drivemap blocklist newc vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu"
net_modules_uefi="efinet net tftp http" net_modules_uefi="efinet net tftp http"
all_modules_uefi="blocklist ventoy test search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu" all_modules_uefi="blocklist ventoy test newc search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu"
if [ "$1" = "uefi" ]; then if [ "$1" = "uefi" ]; then
all_modules="$net_modules_uefi $all_modules_uefi " all_modules="$net_modules_uefi $all_modules_uefi "
......
...@@ -43,6 +43,12 @@ ventoy_os_install_dmsetup() { ...@@ -43,6 +43,12 @@ ventoy_os_install_dmsetup() {
# install md-modules # install md-modules
LINE=$($GREP ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list) LINE=$($GREP ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list)
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
LINTCNT=$($GREP -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 ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list | $GREP $VER)
fi
install_udeb_from_line "$LINE" ${vt_usb_disk} install_udeb_from_line "$LINE" ${vt_usb_disk}
fi fi
...@@ -83,6 +89,8 @@ if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then ...@@ -83,6 +89,8 @@ if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then
exit 0 exit 0
fi fi
vtlog "==== $0 $* ===="
dmsetup_path=$(ventoy_find_bin_path dmsetup) dmsetup_path=$(ventoy_find_bin_path dmsetup)
if [ -z "$dmsetup_path" ]; then if [ -z "$dmsetup_path" ]; then
ventoy_os_install_dmsetup "/dev/${1:0:-1}" ventoy_os_install_dmsetup "/dev/${1:0:-1}"
......
...@@ -64,6 +64,10 @@ ventoy_get_debian_distro() { ...@@ -64,6 +64,10 @@ ventoy_get_debian_distro() {
echo 'linuxconsole'; return echo 'linuxconsole'; return
fi fi
if $GREP -q 'vyos' /proc/version; then
echo 'vyos'; return
fi
echo 'default' echo 'default'
} }
......
#!/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
mkdir -p /live/vtoyfuse /live/vtoyiso
modprobe fuse
vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $vtdiskname > $VTOY_PATH/ventoy_dm_table
vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m /live/vtoyfuse
mount -t iso9660 /live/vtoyfuse/ventoy.iso /live/vtoyiso
PATH=$VTPATH_OLD
set_ventoy_hook_finish
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
if [ -e /init ] && $GREP -q '^mountroot$' /init; then
echo "Here before mountroot ..." >> $VTLOG
$SED "/^mountroot$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/vyos-disk.sh" -i /init
$SED "/^mountroot$/i\\export LIVE_MEDIA=/live/vtoyiso" -i /init
#$SED "/^mountroot$/i\\exec /ventoy/busybox/sh" -i /init
fi
#!/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"
if [ -n "$1" ]; 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})
vtlog "ln -s /dev/$vtDM $1"
ln -s /dev/$vtDM "$1"
fi
# OK finish
set_ventoy_hook_finish
#!/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
if $GREP -q '^"$mount_handler"' /init; then
echo 'use mount_handler ...' >> $VTLOG
$SED "/^\"\$mount_handler\"/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/hyperbola/ventoy-disk.sh \"\$hyperisodevice\"" -i /init
if [ -f /hooks/parabolaiso ]; then
$SED '/while ! poll_device "${dev}"/a\ if /ventoy/busybox/sh /ventoy/hook/hyperbola/ventoy-timeout.sh ${dev}; then break; fi' -i /hooks/hyperiso
fi
else
# some archlinux initramfs doesn't contain device-mapper udev rules file
ARCH_UDEV_DIR=$(ventoy_get_udev_conf_dir)
if [ -s "$ARCH_UDEV_DIR/13-dm-disk.rules" ]; then
echo 'dm-disk rule exist' >> $VTLOG
else
echo 'Copy dm-disk rule file' >> $VTLOG
$CAT $VTOY_PATH/hook/default/13-dm-disk.rules > "$ARCH_UDEV_DIR/13-dm-disk.rules"
fi
# use default proc
ventoy_systemd_udevd_work_around
ventoy_add_udev_rule "$VTOY_PATH/hook/default/udev_disk_hook.sh %k"
fi
#!/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 $* ############"
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})
if [ -b /dev/$vtDM ]; then
vtlog "ln -s /dev/$vtDM $1"
ln -s /dev/$vtDM "$1"
exit 0
else
vtlog "Device-mapper not found"
exit 1
fi
...@@ -436,8 +436,14 @@ ventoy_udev_disk_common_hook() { ...@@ -436,8 +436,14 @@ ventoy_udev_disk_common_hook() {
VTDISK="${1:0:-1}" VTDISK="${1:0:-1}"
if [ -e /vtoy/vtoy ]; then
VTRWMOD=""
else
VTRWMOD="--readonly"
fi
# create device mapper for iso image file # create device mapper for iso image file
if create_ventoy_device_mapper "/dev/$VTDISK" --readonly; then if create_ventoy_device_mapper "/dev/$VTDISK" $VTRWMOD; then
vtlog "==== create ventoy device mapper success ====" vtlog "==== create ventoy device mapper success ===="
else else
vtlog "==== create ventoy device mapper failed ====" vtlog "==== create ventoy device mapper failed ===="
...@@ -453,7 +459,7 @@ ventoy_udev_disk_common_hook() { ...@@ -453,7 +459,7 @@ ventoy_udev_disk_common_hook() {
done done
fi fi
if create_ventoy_device_mapper "/dev/$VTDISK" --readonly; then if create_ventoy_device_mapper "/dev/$VTDISK" $VTRWMOD; then
vtlog "==== create ventoy device mapper success after retry ====" vtlog "==== create ventoy device mapper success after retry ===="
else else
vtlog "==== create ventoy device mapper failed after retry ====" vtlog "==== create ventoy device mapper failed after retry ===="
...@@ -473,6 +479,24 @@ ventoy_udev_disk_common_hook() { ...@@ -473,6 +479,24 @@ ventoy_udev_disk_common_hook() {
fi fi
} }
ventoy_create_dev_ventoy_part() {
blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
$BUSYBOX_PATH/mknod -m 0666 /dev/ventoy b $blkdev_num
if [ -e /vtoy_dm_table ]; then
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}
blkdev_num=$($VTOY_PATH/tool/dmsetup ls | $GREP ventoy${vtPartid} | $SED 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
$BUSYBOX_PATH/mknod -m 0666 /dev/ventoy${vtPartid} b $blkdev_num
vtPartid=$(expr $vtPartid + 1)
done
fi
}
is_inotify_ventoy_part() { is_inotify_ventoy_part() {
if echo $1 | $GREP -q "2$"; then if echo $1 | $GREP -q "2$"; then
......
#!/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
$BUSYBOX_PATH/insmod $VTOY_PATH/modules/dax.ko
$BUSYBOX_PATH/insmod $VTOY_PATH/modules/dm-mod.ko
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"
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 -n $vtDM > /ventoy/vtDM
ventoy_create_dev_ventoy_part
mdev -s
PATH=$VTPATH_OLD
set_ventoy_hook_finish
#!/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 "/find drives/i $BUSYBOX_PATH/sh $VTOY_PATH/loop/easyos/ventoy-disk.sh; vtDM=\$(cat /ventoy/vtDM)" -i /init
$SED "1a boot_dev=ventoy1;wkg_dev=ventoy2" -i /init
#check for ssd will read /sys/block/ventoy, will no exist, need a workaround
$SED "s#/sys/block/\${WKG_DRV}/#/sys/block/\$vtDM/#g" -i /init
#skip the resizing process, can't resizing partition
$SED "s#640M#0M#g" -i /init
#!/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"
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 -n $vtDM > /ventoy/vtDM
ventoy_create_dev_ventoy_part
mdev -s
PATH=$VTPATH_OLD
set_ventoy_hook_finish
#!/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
$BUSYBOX_PATH/mkdir /sys
$BUSYBOX_PATH/mount -t proc proc /proc
$BUSYBOX_PATH/mount -t sysfs sys /sys
$BUSYBOX_PATH/mdev -s
#$BUSYBOX_PATH/sh $VTOY_PATH/loop/openwrt/ventoy-disk.sh
exec $BUSYBOX_PATH/sh
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment