From 99627752964e77e1e0365cc7395bf9803a7fb93f Mon Sep 17 00:00:00 2001 From: longpanda Date: Thu, 13 Aug 2020 20:20:20 +0800 Subject: [PATCH] update --- FUSEISO/vtoy_fuse_iso.c | 8 +- FUSEISO/vtoy_fuse_iso_32 | Bin 145912 -> 145880 bytes FUSEISO/vtoy_fuse_iso_64 | Bin 1138968 -> 1138968 bytes .../grub-2.04/grub-core/lib/syslinux_parse.c | 10 +- .../grub-2.04/grub-core/loader/i386/linux.c | 132 +++++++++++- .../grub-2.04/grub-core/ventoy/ventoy.c | 189 ++++++++++++++++++ .../grub-2.04/grub-core/ventoy/ventoy_def.h | 2 + GRUB2/MOD_SRC/grub-2.04/install.sh | 4 +- IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh | 8 + IMG/cpio/ventoy/hook/debian/ventoy-hook.sh | 4 + IMG/cpio/ventoy/hook/debian/vyos-disk.sh | 49 +++++ IMG/cpio/ventoy/hook/debian/vyos-hook.sh | 25 +++ IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh | 48 +++++ IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh | 44 ++++ .../ventoy/hook/hyperbola/ventoy-timeout.sh | 36 ++++ IMG/cpio/ventoy/hook/ventoy-hook-lib.sh | 28 ++- IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh | 53 +++++ IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh | 32 +++ IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh | 50 +++++ IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh | 30 +++ IMG/cpio/ventoy/loop/volumio/ventoy-disk.sh | 46 +++++ IMG/cpio/ventoy/loop/volumio/ventoy-hook.sh | 28 +++ IMG/cpio/ventoy/ventoy_chain.sh | 4 + IMG/cpio/ventoy/ventoy_loop.sh | 42 +++- IMG/mkloopex.sh | 27 +++ .../vtloopex/dm-mod/4.14.180/64/dm-mod.ko.xz | Bin 0 -> 68 bytes INSTALL/grub/grub.cfg | 142 ++++++++++++- INSTALL/tool/VentoyWorker.sh | 6 +- INSTALL/ventoy/vtloopex.cpio | Bin 0 -> 1024 bytes LANGUAGES/languages.ini | Bin 110648 -> 114556 bytes VtoyTool/vtoydm.c | 8 +- VtoyTool/vtoytool/00/vtoytool_32 | Bin 61568 -> 61568 bytes VtoyTool/vtoytool/00/vtoytool_64 | Bin 65320 -> 65320 bytes 33 files changed, 1016 insertions(+), 39 deletions(-) create mode 100644 IMG/cpio/ventoy/hook/debian/vyos-disk.sh create mode 100644 IMG/cpio/ventoy/hook/debian/vyos-hook.sh create mode 100644 IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh create mode 100644 IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh create mode 100644 IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh create mode 100644 IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh create mode 100644 IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh create mode 100644 IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh create mode 100644 IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh create mode 100644 IMG/cpio/ventoy/loop/volumio/ventoy-disk.sh create mode 100644 IMG/cpio/ventoy/loop/volumio/ventoy-hook.sh create mode 100644 IMG/mkloopex.sh create mode 100644 IMG/vtloopex/openwrt/vtloopex/dm-mod/4.14.180/64/dm-mod.ko.xz create mode 100644 INSTALL/ventoy/vtloopex.cpio diff --git a/FUSEISO/vtoy_fuse_iso.c b/FUSEISO/vtoy_fuse_iso.c index 0350ea0c..0178c8d9 100644 --- a/FUSEISO/vtoy_fuse_iso.c +++ b/FUSEISO/vtoy_fuse_iso.c @@ -114,11 +114,12 @@ static int ventoy_iso_open(const char *path, struct fuse_file_info *file) 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 leftSec = 0; uint32_t readSec = 0; + off_t offset = 0; dmtable_entry *entry = NULL; 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) 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); readSec = (leftSec > num) ? num : leftSec; - read(g_disk_fd, buf, readSec * 512); + pread(g_disk_fd, buf, readSec * 512, offset); sector += readSec; + buf += readSec * 512; num -= readSec; } } diff --git a/FUSEISO/vtoy_fuse_iso_32 b/FUSEISO/vtoy_fuse_iso_32 index 607ce42a9e161f382c6050ca56f3ad820d96c11b..3227315e3d08d6834eeb1294c5c3a51674ffd1e3 100644 GIT binary patch delta 27866 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%0AA6BJn26heP8s9dqD)M|q8!uv@+ww;M@# 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 = grub_strtoul (line, NULL, 0); - return GRUB_ERR_NONE; } @@ -991,6 +990,7 @@ write_entry (struct output_buffer *outbuf, print_string ("\n"); } + print_string ("boot\n"); } break; case KERNEL_CHAINLOADER: @@ -1433,6 +1433,7 @@ config_file (struct output_buffer *outbuf, const char *fname, struct syslinux_menu *parent, grub_syslinux_flavour_t flav) { + const char *data; grub_err_t err; struct syslinux_menu menu; struct syslinux_menuentry *curentry, *lentry; @@ -1447,6 +1448,13 @@ config_file (struct output_buffer *outbuf, menu.filename = fname; menu.parent = parent; + + data = grub_env_get("vtdebug_flag"); + if (data && data[0]) + { + menu.timeout = 100; + } + err = syslinux_parse_real (&menu); if (err) return err; diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c index 6601d5de..d17eeba1 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c @@ -86,6 +86,9 @@ static int ventoy_debug = 0; static int ventoy_initrd_called = 0; 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_err_t grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]); @@ -427,8 +430,9 @@ static void ventoy_debug_pause(void) static int ventoy_preboot(void) { + int i; + const char *file; char buf[128]; - char *argv[2]; if (ventoy_debug) { @@ -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")); - argv[0] = buf; - argv[1] = NULL; - grub_cmd_initrd(NULL, 1, argv); + 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); + } 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(); } + grub_cmd_initrd(NULL, ventoy_extra_initrd_num, ventoy_extra_initrd_list); + return 0; } @@ -478,6 +494,13 @@ static int ventoy_boot_opt_filter(char *opt) } return 0; } + + if (grub_strncmp(opt, "init=", 5) == 0) + { + opt[0] = 'v'; + opt[1] = 't'; + return 0; + } if (ventoy_debug) { @@ -597,7 +620,7 @@ static int ventoy_bootopt_hook(int argc, char *argv[]) if (ventoy_debug) { - ventoy_linux_args[count++] = grub_strdup("loglevel=10"); + ventoy_linux_args[count++] = grub_strdup("loglevel=7"); } ventoy_linux_argc = count; @@ -663,6 +686,72 @@ grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)), 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 grub_linux_boot (void) @@ -1416,8 +1505,8 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), int argc, char *argv[]) { int i; + const char *file; char buf[64]; - char *newargv[32] = {NULL}; 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)), 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++) { - newargv[i + 1] = argv[i]; + ventoy_extra_initrd_list[ventoy_extra_initrd_num++] = grub_strdup(argv[i]); } ventoy_initrd_called = 1; + + 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, argc + 1, newargv); + 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) { @@ -1457,6 +1564,9 @@ GRUB_MOD_INIT(linux) 0, N_("Load initrd.")); 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_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); diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c index 86ec5d60..51b81e6d 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c @@ -54,6 +54,7 @@ int g_valid_initrd_count = 0; int g_default_menu_mode = 0; int g_filt_dot_underscore_file = 0; static grub_file_t g_old_file; +static int g_ventoy_last_entry_back; char g_iso_path[256]; char g_img_swap_tmp_buf[1024]; @@ -92,6 +93,9 @@ static int g_tree_script_pos = 0; static char *g_list_script_buf = NULL; 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[] = { "vtoyiso", "vtoywim", "vtoyefi", "vtoyimg" @@ -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 fs_type; + int len; grub_uint32_t i = 0; grub_uint32_t sector = 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 } } + 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; } @@ -2498,6 +2524,62 @@ end: 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) { int rc = 1; @@ -2645,6 +2727,108 @@ static grub_err_t ventoy_cmd_img_unhook_root(grub_extcmd_context_t ctxt, int arg 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 size = 0; @@ -2747,6 +2931,7 @@ static int ventoy_env_init(void) 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_list_script_buf = grub_malloc(VTOY_MAX_SCRIPT_BUF); @@ -2785,6 +2970,9 @@ static cmd_para ventoy_cmds[] = { "vt_load_cpio", ventoy_cmd_load_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_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL }, @@ -2834,6 +3022,7 @@ static cmd_para ventoy_cmds[] = { "vt_1st_line", ventoy_cmd_read_1st_line, 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 }, diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h index a514f6b5..79706e22 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h @@ -23,6 +23,8 @@ #define VTOY_MAX_SCRIPT_BUF (4 * 1024 * 1024) +#define VTOY_PART_BUF_LEN (128 * 1024) + #define VTOY_FILT_MIN_FILE_SIZE 32768 #define VTOY_SIZE_1GB 1073741824 diff --git a/GRUB2/MOD_SRC/grub-2.04/install.sh b/GRUB2/MOD_SRC/grub-2.04/install.sh index 446816d5..bca8d669 100644 --- a/GRUB2/MOD_SRC/grub-2.04/install.sh +++ b/GRUB2/MOD_SRC/grub-2.04/install.sh @@ -12,10 +12,10 @@ make install PATH=$PATH:$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/ 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" -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 all_modules="$net_modules_uefi $all_modules_uefi " diff --git a/IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh b/IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh index 8cbda0e5..77ccfba6 100644 --- a/IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh +++ b/IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh @@ -43,6 +43,12 @@ ventoy_os_install_dmsetup() { # install md-modules LINE=$($GREP ' md-modules.*\.udeb' $VTOY_PATH/iso_file_list) 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} fi @@ -83,6 +89,8 @@ 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}" diff --git a/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh b/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh index f23aef65..2186f3c8 100644 --- a/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh +++ b/IMG/cpio/ventoy/hook/debian/ventoy-hook.sh @@ -64,6 +64,10 @@ ventoy_get_debian_distro() { echo 'linuxconsole'; return fi + if $GREP -q 'vyos' /proc/version; then + echo 'vyos'; return + fi + echo 'default' } diff --git a/IMG/cpio/ventoy/hook/debian/vyos-disk.sh b/IMG/cpio/ventoy/hook/debian/vyos-disk.sh new file mode 100644 index 00000000..468adfd9 --- /dev/null +++ b/IMG/cpio/ventoy/hook/debian/vyos-disk.sh @@ -0,0 +1,49 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 diff --git a/IMG/cpio/ventoy/hook/debian/vyos-hook.sh b/IMG/cpio/ventoy/hook/debian/vyos-hook.sh new file mode 100644 index 00000000..007f823b --- /dev/null +++ b/IMG/cpio/ventoy/hook/debian/vyos-hook.sh @@ -0,0 +1,25 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +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 diff --git a/IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh b/IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh new file mode 100644 index 00000000..356c77f8 --- /dev/null +++ b/IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh @@ -0,0 +1,48 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 + diff --git a/IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh b/IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh new file mode 100644 index 00000000..aebe57ad --- /dev/null +++ b/IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh @@ -0,0 +1,44 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. $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 diff --git a/IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh b/IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh new file mode 100644 index 00000000..fec9cc07 --- /dev/null +++ b/IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh @@ -0,0 +1,36 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 + + diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index 2da5f079..c9bf3ae2 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -436,8 +436,14 @@ ventoy_udev_disk_common_hook() { VTDISK="${1:0:-1}" + if [ -e /vtoy/vtoy ]; then + VTRWMOD="" + else + VTRWMOD="--readonly" + fi + # 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 ====" else vtlog "==== create ventoy device mapper failed ====" @@ -453,7 +459,7 @@ ventoy_udev_disk_common_hook() { done 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 ====" else vtlog "==== create ventoy device mapper failed after retry ====" @@ -473,6 +479,24 @@ ventoy_udev_disk_common_hook() { 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() { if echo $1 | $GREP -q "2$"; then diff --git a/IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh b/IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh new file mode 100644 index 00000000..2fa00497 --- /dev/null +++ b/IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh @@ -0,0 +1,53 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 diff --git a/IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh b/IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh new file mode 100644 index 00000000..7310b0d7 --- /dev/null +++ b/IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh @@ -0,0 +1,32 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. $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 + + diff --git a/IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh b/IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh new file mode 100644 index 00000000..722c1ca3 --- /dev/null +++ b/IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh @@ -0,0 +1,50 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 diff --git a/IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh b/IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh new file mode 100644 index 00000000..d9785854 --- /dev/null +++ b/IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh @@ -0,0 +1,30 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. $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 diff --git a/IMG/cpio/ventoy/loop/volumio/ventoy-disk.sh b/IMG/cpio/ventoy/loop/volumio/ventoy-disk.sh new file mode 100644 index 00000000..8b249255 --- /dev/null +++ b/IMG/cpio/ventoy/loop/volumio/ventoy-disk.sh @@ -0,0 +1,46 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. /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 diff --git a/IMG/cpio/ventoy/loop/volumio/ventoy-hook.sh b/IMG/cpio/ventoy/loop/volumio/ventoy-hook.sh new file mode 100644 index 00000000..7b616d29 --- /dev/null +++ b/IMG/cpio/ventoy/loop/volumio/ventoy-hook.sh @@ -0,0 +1,28 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# 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 . +# +#************************************************************************************ + +. $VTOY_PATH/hook/ventoy-os-lib.sh + +$SED "/^CMDLINE=/i $BUSYBOX_PATH/sh $VTOY_PATH/loop/volumio/ventoy-disk.sh" -i /init + +#skip the resizing process +$SED "/^FREESIZE=/a FREESIZE=0" -i /init + +$SED "/exec.*switch_root/i $SED 's@\\\\(.*/boot \\\\)@#\\\\1@' -i /mnt/ext/union/etc/fstab" -i /init + diff --git a/IMG/cpio/ventoy/ventoy_chain.sh b/IMG/cpio/ventoy/ventoy_chain.sh index 2c52e60e..d21d910c 100644 --- a/IMG/cpio/ventoy/ventoy_chain.sh +++ b/IMG/cpio/ventoy/ventoy_chain.sh @@ -227,6 +227,10 @@ ventoy_get_os_type() { echo 'vine'; return fi + if $GREP -q 'hyperbola' /proc/cmdline; then + echo 'hyperbola'; return + fi + echo "default" } diff --git a/IMG/cpio/ventoy/ventoy_loop.sh b/IMG/cpio/ventoy/ventoy_loop.sh index bbb7c259..a1be76dc 100644 --- a/IMG/cpio/ventoy/ventoy_loop.sh +++ b/IMG/cpio/ventoy/ventoy_loop.sh @@ -37,10 +37,30 @@ for i in $vtcmdline; do fi done +#################################################################### +# # +# Step 2 : Process ko # +# # +#################################################################### +$BUSYBOX_PATH/mkdir -p /ventoy/modules +$BUSYBOX_PATH/ls -1a / | $EGREP '\.ko$|\.ko.[gx]z$' | while read vtline; do + if [ "${vtline:0:1}" = "." ]; then + $BUSYBOX_PATH/mv /${vtline} /ventoy/modules/${vtline:1} + else + $BUSYBOX_PATH/mv /${vtline} /ventoy/modules/ + fi +done + +if [ -e /vtloopex.tar.xz ]; then + echo "extract vtloopex ..." >> $VTLOG + $BUSYBOX_PATH/tar -xJf /vtloopex.tar.xz -C $VTOY_PATH/ + $BUSYBOX_PATH/rm -f /vtloopex.tar.xz +fi + #################################################################### # # -# Step 2 : Do OS specific hook # +# Step 3 : Do OS specific hook # # # #################################################################### ventoy_get_os_type() { @@ -56,6 +76,22 @@ ventoy_get_os_type() { echo 'endless'; return fi + if $GREP -q 'OpenWrt' /proc/version; then + echo 'openwrt'; return + fi + + if [ -e /BOOT_SPECS ]; then + if $GREP -q 'easyos' /BOOT_SPECS; then + echo 'easyos'; return + fi + fi + + if [ -e /etc/os-release ]; then + if $GREP -q 'volumio' /etc/os-release; then + echo 'volumio'; return + fi + fi + echo "default" } @@ -68,7 +104,7 @@ fi #################################################################### # # -# Step 3 : Check for debug break # +# Step 4 : Check for debug break # # # #################################################################### if [ "$VTOY_BREAK_LEVEL" = "03" ] || [ "$VTOY_BREAK_LEVEL" = "13" ]; then @@ -85,7 +121,7 @@ fi #################################################################### # # -# Step 3 : Hand over to real init # +# Step 5 : Hand over to real init # # # #################################################################### $BUSYBOX_PATH/umount /proc diff --git a/IMG/mkloopex.sh b/IMG/mkloopex.sh new file mode 100644 index 00000000..6b605b45 --- /dev/null +++ b/IMG/mkloopex.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +VENTOY_PATH=$PWD/../ + +rm -f vtloopex.cpio +cp -a vtloopex vtloopex_tmp +cd vtloopex_tmp + + +for dir in $(ls); do + cd $dir + tar -cJf vtloopex.tar.xz vtloopex + rm -rf vtloopex + cd .. +done + +find . | cpio -o -H newc>../vtloopex.cpio + +cd .. + +rm -rf vtloopex_tmp + +rm -f $VENTOY_PATH/INSTALL/ventoy/vtloopex.cpio +cp -a vtloopex.cpio $VENTOY_PATH/INSTALL/ventoy/ + +echo '======== SUCCESS =============' + diff --git a/IMG/vtloopex/openwrt/vtloopex/dm-mod/4.14.180/64/dm-mod.ko.xz b/IMG/vtloopex/openwrt/vtloopex/dm-mod/4.14.180/64/dm-mod.ko.xz new file mode 100644 index 0000000000000000000000000000000000000000..b201ca3534bace65ad931ea27ce9dc14f8350377 GIT binary patch literal 68 zcmexsUKJ6=z`*kC+7>q^21Q0O1_p)_{ill`FmN-l$1+ItEMWqQFfb_GlTf;|exf-8 VqcTro-^}Uq+dkJaf+ScXqX49Y67T>3 literal 0 HcmV?d00001 diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index 38ab7d4f..b85a31a8 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -206,6 +206,11 @@ function distro_specify_initrd_file_phase2 { if [ -f (loop)/parabola/boot/i686/parabolaiso.img ]; then vt_linux_specify_initrd_file /parabola/boot/i686/parabolaiso.img fi + elif [ -f (loop)/hyperbola/boot/x86_64/hyperiso.img ]; then + vt_linux_specify_initrd_file /hyperbola/boot/x86_64/hyperiso.img + if [ -f (loop)/hyperbola/boot/i686/hyperiso.img ]; then + vt_linux_specify_initrd_file /hyperbola/boot/i686/hyperiso.img + fi elif [ -f (loop)/EFI/BOOT/initrd.img ]; then #Qubes vt_linux_specify_initrd_file /EFI/BOOT/initrd.img @@ -230,6 +235,14 @@ function ventoy_get_ghostbsd_ver { set vt_freebsd_ver=12.x } +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 + fi +} + function ventoy_get_freenas_ver { set vt_freebsd_ver=11.x @@ -250,6 +263,8 @@ function ventoy_freebsd_proc { ventoy_get_ghostbsd_ver $1 ${chosen_path} elif vt_strstr "$vt_volume_id" "FREENAS"; then ventoy_get_freenas_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 @@ -307,7 +322,7 @@ function ventoy_freebsd_proc { fi unset vt_unix_mod_path - for file in "/COPYRIGHT" "/FreeNAS-MANIFEST" "/version"; do + for file in "/COPYRIGHT" "/FreeNAS-MANIFEST" "/version" "/etc/fstab"; do if [ -e (loop)${file} ]; then set vt_unix_mod_path=${file} break @@ -442,6 +457,8 @@ function uefi_linux_menu_func { elif [ -d (loop)/EFI/boot/entries ]; then if [ -f (loop)/parabola/boot/x86_64/parabolaiso.img ]; then vt_add_replace_file 0 "EFI\\parabolaiso\\parabolaiso.img" + elif [ -f (loop)/hyperbola/boot/x86_64/hyperiso.img ]; then + vt_add_replace_file 0 "EFI\\hyperiso\\hyperiso.img" fi elif [ -e (loop)/syslinux/alt0/full.cz ]; then vt_add_replace_file 0 "EFI\\BOOT\\full.cz" @@ -833,20 +850,125 @@ function efi_unsupport_menuentry { common_unsupport_menuentry } +# +#============================================================# +# IMG file boot process # +#============================================================# +# -function ventoy_img_busybox_ver { - set ventoy_busybox_ver=32 + +function ventoy_img_easyos { + vt_load_cpio $vtoy_path/ventoy.cpio ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver" + vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit - if [ -e (vtimghd,2)/etc/openwrt_release ]; then - if vt_file_strstr (vtimghd,2)/etc/openwrt_release x86_64; then - set ventoy_busybox_ver=64 - fi - fi + loopback easysfs (vtimghd,1)/easy.sfs + vt_get_lib_module_ver (easysfs) /lib/modules/ vt_module_ver + + if [ -n "$vt_module_ver" ]; then + for mod in "kernel/drivers/md/dm-mod.ko" "kernel/drivers/dax/dax.ko"; do + vt_img_extra_initrd_append (easysfs)/lib/modules/$vt_module_ver/$mod + done + fi + + ventoy_debug_pause + + #boot image file + vt_set_boot_opt rdinit=/vtoy/vtoy + vt_img_hook_root + + syslinux_configfile (vtimghd,1)/syslinux.cfg + + vt_img_unhook_root + vt_unset_boot_opt + loopback -d easysfs } -function img_common_menuentry { +function ventoy_img_volumio { + vt_load_cpio $vtoy_path/ventoy.cpio ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver" + vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit - echo "To be implement" + ventoy_debug_pause + + #boot image file + vt_set_boot_opt rdinit=/vtoy/vtoy imgpart=/dev/ventoy2 bootpart=/dev/ventoy1 + vt_img_hook_root + + syslinux_configfile (vtimghd,1)/syslinux.cfg + + vt_img_unhook_root + vt_unset_boot_opt +} + +function ventoy_img_fydeos { + + set ventoy_busybox_ver=64 + + vt_load_cpio $vtoy_path/ventoy.cpio ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver" + vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit + + # loopback easysfs (vtimghd,1)/easy.sfs + # vt_get_lib_module_ver (easysfs) /lib/modules/ vt_module_ver + + # if [ -n "$vt_module_ver" ]; then + # for mod in "kernel/drivers/md/dm-mod.ko" "kernel/drivers/dax/dax.ko"; do + # vt_img_extra_initrd_append (easysfs)/lib/modules/$vt_module_ver/$mod + # done + # fi + + ventoy_debug_pause + + #boot image file + vt_set_boot_opt rdinit=/vtoy/vtoy + vt_img_hook_root + + set root=(vtimghd,12) + configfile (vtimghd,12)/efi/boot/grub.cfg + #syslinux_configfile (vtimghd,12)/syslinux/syslinux.cfg + + vt_img_unhook_root + vt_unset_boot_opt +} + + +function img_common_menuentry { + set ventoy_busybox_ver=32 + + vt_chosen_img_path vt_chosen_path vt_chosen_size + + if [ -d (vtimghd)/ ]; then + loopback -d vtimghd + fi + + loopback vtimghd ${vtoy_iso_part}${vt_chosen_path} + vt_img_sector ${vtoy_iso_part}${vt_chosen_path} + + vt_img_part_info (vtimghd) + + set vtback_root=$root + ventoy_cli_console + vt_push_last_entry + + vt_img_extra_initrd_reset + + if [ -e (vtimghd,1)/easy.sfs ]; then + ventoy_img_easyos + elif [ -e (vtimghd,1)/volumio.initrd ]; then + ventoy_img_volumio + elif [ -e (vtimghd,3)/etc/os-release ]; then + if vt_file_strstr (vtimghd,3)/etc/os-release FydeOS; then + ventoy_img_fydeos + fi + + else + echo -e "\n This IMG file is NOT supported now. \n" + echo -e " 当前不支持启动此 IMG 文件 \n" + echo -e "\npress ENTER to exit (请按 回车 键返回) ..." + read vtInputKey + fi + + set root=$vtback_root + vt_pop_last_entry + ventoy_gui_console } function img_unsupport_menuentry { diff --git a/INSTALL/tool/VentoyWorker.sh b/INSTALL/tool/VentoyWorker.sh index ca8bd3fa..10f65643 100644 --- a/INSTALL/tool/VentoyWorker.sh +++ b/INSTALL/tool/VentoyWorker.sh @@ -116,7 +116,7 @@ if [ "$MODE" = "install" ]; then if parted -v > /dev/null 2>&1; then PARTTOOL='parted' else - vterr "parted is not found in the sysstem, Ventoy can't create new partition." + vterr "parted is not found in the system, Ventoy can't create new partition." exit 1 fi else @@ -125,7 +125,7 @@ if [ "$MODE" = "install" ]; then elif fdisk -v >/dev/null 2>&1; then PARTTOOL='fdisk' else - vterr "Both parted and fdisk are not found in the sysstem, Ventoy can't create new partition." + vterr "Both parted and fdisk are not found in the system, Ventoy can't create new partition." exit 1 fi fi @@ -144,7 +144,7 @@ if [ "$MODE" = "install" ]; then disk_sector_num=$(cat /sys/block/${DISK#/dev/}/size) disk_size_gb=$(expr $disk_sector_num / 2097152) - if [ $disk_sector_num -gt 4294967296 ] && [ -z $VTGPT ]; then + if [ $disk_sector_num -gt 4294967296 ] && [ -z "$VTGPT" ]; then vterr "$DISK is over 2TB size, MBR will not work on it." exit 1 fi diff --git a/INSTALL/ventoy/vtloopex.cpio b/INSTALL/ventoy/vtloopex.cpio new file mode 100644 index 0000000000000000000000000000000000000000..aefe96e1d6eaa003a8fbe877df37168f1139065a GIT binary patch literal 1024 zcmXpoH!wFaG%&VsG%z-?FaQD*LpL`NjRhE+x)~c=nj4v+$$|A57#JF&iNm-?Foqrj z&^EYzrsg1VJoXtu?Sq;RGsS?AeQ@>p1*v)EMI{Uj$o85Tg5@m?9ZldSqB0Co>@_ro z$r7*^VlGHA)L#9vlAL@XyF#xdu}H6?3h0i%=2a0<3=AyKu5EE+Vo+oh1B#XCKVAGl z{XfIoSO#lZ&OIw^YDUEM<%GDM|1Q=o z`S|RJE* literal 0 HcmV?d00001 diff --git a/LANGUAGES/languages.ini b/LANGUAGES/languages.ini index ae657056c881ed2f535d80a81a9e2886326e0949..cad4f86e652bf04f39dfb98f52ed550060210ea0 100644 GIT binary patch delta 2192 zcmcgtL2naR5PnNX5v>9;A)yEn`#F|EMXl7{*vZQF+Rg?wMhJ;k63Q4oi48Yp6jAj7I$@N!xG}(k28zj8FTzmYPclx;=}wcAk2>!j_p4Rk5lmZc_M#y1V*iD zcp_E}_YK@vqzQY7E9$PZ6v{sv@_tG|lFt#*O~-E^vDQ1-V)8JZkg1 z=>5?d!IxS5)^NG_tjc9Jhgf7Hge9_8Vl?3&*xL1^3jVhU9;(T_`TKD$)<1Z%uO#N~ zX@7JCWoVVbTT)FbBZ=>}y}}{)CTB}$3nKH&lj6awG^~Y5hGMp#>v(v{^HV9A0pCre z(*#yq%vNqPpN2EDEXbGLJYDXE0cSQytN5oSZ>k)0D`yXCIHy&~{uXhbcVwOk)GbS{ zQ-Rt1^V9g@vNvg(7bTaItQ@ij11lQWu1hwEgDJ=VEPI)15{sR4*mawyR{hQ{=Dh8E z%Vq}+BoU{wA0}3|VJBh~3Zd4if`kXBgGzkoif2be%!BKr@rx_o%#iJxnC6|rjjS!7 zl~Pka*wktoJeH+}#wTdB20))fodr7?{e7E44r#pMTlTa!C)2>yszMb`2oJ{?1?u)mM3ju_{GQqcHG{B}EwkSPEo6n;Wv{fLRbWHE%A1qx!=YoHy!fE0 zim_Zks-gUM^8|K=+uaWS^T+`=XDw5FcG&z?O8duP;}#8Mx^LXw z1ShI2;6wxuY6od;MQL+=z)aSptlY95Q{4O*%2-^Fixr7}b=kf7eRaf!(yoMRt8FGh0 zm%xGh!n|{G-_zhag?7e#J%JuIz{%Ux!rf#x#%5MVkYMt8PGlOOZAI8grAvN6om1bS fV%ON7D%^VGeqnjkTn#}JW_+B9)CqM!ePXXS4HiYc delta 11 ScmezKk8Q^TwuUW?78?L3cm=!w diff --git a/VtoyTool/vtoydm.c b/VtoyTool/vtoydm.c index aa460af0..8e748c25 100644 --- a/VtoyTool/vtoydm.c +++ b/VtoyTool/vtoydm.c @@ -486,8 +486,8 @@ static int vtoydm_print_linear_table(const char *img_map_file, const char *diskn { int i; int len; + uint32_t disk_sector_num; uint32_t sector_start; - uint32_t sector_num; ventoy_img_chunk *chunk = NULL; chunk = vtoydm_get_img_map_data(img_map_file, &len); @@ -499,16 +499,16 @@ static int vtoydm_print_linear_table(const char *img_map_file, const char *diskn for (i = 0; i < len / sizeof(ventoy_img_chunk); i++) { sector_start = chunk[i].img_start_sector; - sector_num = chunk[i].img_end_sector - chunk[i].img_start_sector + 1; + disk_sector_num = (uint32_t)(chunk[i].disk_end_sector + 1 - chunk[i].disk_start_sector); /* TBD: to be more flexible */ #if 0 printf("%u %u linear %s %llu\n", - (sector_start << 2), (sector_num << 2), + (sector_start << 2), disk_sector_num, diskname, (unsigned long long)chunk[i].disk_start_sector); #else printf("%u %u linear %s1 %llu\n", - (sector_start << 2), (sector_num << 2), + (sector_start << 2), disk_sector_num, diskname, (unsigned long long)chunk[i].disk_start_sector - 2048); #endif } diff --git a/VtoyTool/vtoytool/00/vtoytool_32 b/VtoyTool/vtoytool/00/vtoytool_32 index 1f9773b2de7826b88eed4397fc47fc4bea71c240..b923b8b13a7faebabc2b5a03c8e695080405b1e0 100644 GIT binary patch delta 8714 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 SNP3`1b?60k=7Rd6w8?kLc4p3HkvFA}St}sEH!> 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 diff --git a/VtoyTool/vtoytool/00/vtoytool_64 b/VtoyTool/vtoytool/00/vtoytool_64 index 03cfc6ebc91547da90194c622160e315093759b6..bffcf2ec4cfdcc900f1af01f20e268bbaa050402 100644 GIT binary patch delta 7526 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 delta 7573 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