mirror of
https://github.com/ventoy/Ventoy.git
synced 2024-11-09 19:11:02 +00:00
1.0.09 release
This commit is contained in:
parent
c84c072209
commit
d0edcc0ef0
@ -1358,6 +1358,17 @@ static grub_err_t ventoy_cmd_dump_menu(grub_extcmd_context_t ctxt, int argc, cha
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static grub_err_t ventoy_cmd_dump_auto_install(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
(void)ctxt;
|
||||||
|
(void)argc;
|
||||||
|
(void)args;
|
||||||
|
|
||||||
|
ventoy_plugin_dump_auto_install();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t ventoy_cmd_check_mode(grub_extcmd_context_t ctxt, int argc, char **args)
|
static grub_err_t ventoy_cmd_check_mode(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
@ -1387,22 +1398,58 @@ static grub_err_t ventoy_cmd_check_mode(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
|
|
||||||
static grub_err_t ventoy_cmd_dynamic_menu(grub_extcmd_context_t ctxt, int argc, char **args)
|
static grub_err_t ventoy_cmd_dynamic_menu(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
|
static int configfile_mode = 0;
|
||||||
char memfile[128] = {0};
|
char memfile[128] = {0};
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
(void)args;
|
(void)args;
|
||||||
|
|
||||||
if (argc == 0)
|
/*
|
||||||
|
* args[0]: 0:normal 1:configfile
|
||||||
|
* args[1]: 0:list_buf 1:tree_buf
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
debug("Invlaid argc %d\n", argc);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[0][0] == '0')
|
||||||
|
{
|
||||||
|
if (args[1][0] == '0')
|
||||||
{
|
{
|
||||||
grub_script_execute_sourcecode(g_list_script_buf);
|
grub_script_execute_sourcecode(g_list_script_buf);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
grub_script_execute_sourcecode(g_tree_script_buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (configfile_mode)
|
||||||
|
{
|
||||||
|
debug("Now already in F3 mode %d\n", configfile_mode);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args[1][0] == '0')
|
||||||
|
{
|
||||||
|
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
|
||||||
|
(ulonglong)(ulong)g_list_script_buf, g_list_script_pos);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
g_ventoy_last_entry = -1;
|
g_ventoy_last_entry = -1;
|
||||||
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
|
grub_snprintf(memfile, sizeof(memfile), "configfile mem:0x%llx:size:%d",
|
||||||
(ulonglong)(ulong)g_tree_script_buf, g_tree_script_pos);
|
(ulonglong)(ulong)g_tree_script_buf, g_tree_script_pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
configfile_mode = 1;
|
||||||
grub_script_execute_sourcecode(memfile);
|
grub_script_execute_sourcecode(memfile);
|
||||||
|
configfile_mode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1567,6 +1614,7 @@ static cmd_para ventoy_cmds[] =
|
|||||||
{ "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL },
|
{ "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL },
|
||||||
{ "vt_dynamic_menu", ventoy_cmd_dynamic_menu, 0, NULL, "", "", NULL },
|
{ "vt_dynamic_menu", ventoy_cmd_dynamic_menu, 0, NULL, "", "", NULL },
|
||||||
{ "vt_check_mode", ventoy_cmd_check_mode, 0, NULL, "", "", NULL },
|
{ "vt_check_mode", ventoy_cmd_check_mode, 0, NULL, "", "", NULL },
|
||||||
|
{ "vt_dump_auto_install", ventoy_cmd_dump_auto_install, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
{ "vt_is_udf", ventoy_cmd_is_udf, 0, NULL, "", "", NULL },
|
{ "vt_is_udf", ventoy_cmd_is_udf, 0, NULL, "", "", NULL },
|
||||||
{ "vt_file_size", ventoy_cmd_file_size, 0, NULL, "", "", NULL },
|
{ "vt_file_size", ventoy_cmd_file_size, 0, NULL, "", "", NULL },
|
||||||
|
@ -418,7 +418,7 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,
|
|||||||
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_valid_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_valid_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
int ventoy_cpio_newc_fill_head(void *buf, int filesize, void *filedata, const char *name);
|
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name);
|
||||||
grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...);
|
grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...);
|
||||||
int ventoy_is_file_exist(const char *fmt, ...);
|
int ventoy_is_file_exist(const char *fmt, ...);
|
||||||
int ventoy_fill_data(grub_uint32_t buflen, char *buffer);
|
int ventoy_fill_data(grub_uint32_t buflen, char *buffer);
|
||||||
@ -550,6 +550,15 @@ typedef struct ventoy_mbr_head
|
|||||||
}ventoy_mbr_head;
|
}ventoy_mbr_head;
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct install_template
|
||||||
|
{
|
||||||
|
char isopath[256];
|
||||||
|
char templatepath[256];
|
||||||
|
|
||||||
|
struct install_template *next;
|
||||||
|
}install_template;
|
||||||
|
|
||||||
extern int g_ventoy_last_entry;
|
extern int g_ventoy_last_entry;
|
||||||
extern int g_ventoy_memdisk_mode;
|
extern int g_ventoy_memdisk_mode;
|
||||||
extern int g_ventoy_iso_raw;
|
extern int g_ventoy_iso_raw;
|
||||||
@ -557,6 +566,10 @@ extern int g_ventoy_iso_uefi_drv;
|
|||||||
|
|
||||||
int ventoy_cmp_img(img_info *img1, img_info *img2);
|
int ventoy_cmp_img(img_info *img1, img_info *img2);
|
||||||
void ventoy_swap_img(img_info *img1, img_info *img2);
|
void ventoy_swap_img(img_info *img1, img_info *img2);
|
||||||
|
char * ventoy_plugin_get_install_template(const char *isopath);
|
||||||
|
void ventoy_plugin_dump_auto_install(void);
|
||||||
|
int ventoy_fill_windows_rtdata(void *buf, char *isopath);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __VENTOY_DEF_H__ */
|
#endif /* __VENTOY_DEF_H__ */
|
||||||
|
|
||||||
|
@ -588,7 +588,7 @@ static void ventoy_cpio_newc_fill_int(grub_uint32_t value, char *buf, int buflen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int ventoy_cpio_newc_fill_head(void *buf, int filesize, void *filedata, const char *name)
|
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name)
|
||||||
{
|
{
|
||||||
int namelen = 0;
|
int namelen = 0;
|
||||||
int headlen = 0;
|
int headlen = 0;
|
||||||
@ -852,18 +852,22 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,
|
|||||||
|
|
||||||
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
grub_uint8_t *buf;
|
char *template_file = NULL;
|
||||||
|
char *template_buf = NULL;
|
||||||
|
grub_uint8_t *buf = NULL;
|
||||||
grub_uint32_t mod;
|
grub_uint32_t mod;
|
||||||
grub_uint32_t headlen;
|
grub_uint32_t headlen;
|
||||||
grub_uint32_t initrd_head_len;
|
grub_uint32_t initrd_head_len;
|
||||||
grub_uint32_t padlen;
|
grub_uint32_t padlen;
|
||||||
grub_uint32_t img_chunk_size;
|
grub_uint32_t img_chunk_size;
|
||||||
|
grub_uint32_t template_size = 0;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
grub_file_t scriptfile;
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 3)
|
||||||
{
|
{
|
||||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s cpiofile\n", cmd_raw_name);
|
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s cpiofile\n", cmd_raw_name);
|
||||||
}
|
}
|
||||||
@ -888,7 +892,30 @@ grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **arg
|
|||||||
g_ventoy_cpio_size = 0;
|
g_ventoy_cpio_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_ventoy_cpio_buf = grub_malloc(file->size + 4096 + img_chunk_size);
|
template_file = ventoy_plugin_get_install_template(args[1]);
|
||||||
|
if (template_file)
|
||||||
|
{
|
||||||
|
debug("auto install template: <%s>\n", template_file);
|
||||||
|
scriptfile = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s%s", args[2], template_file);
|
||||||
|
if (scriptfile)
|
||||||
|
{
|
||||||
|
debug("auto install script size %d\n", (int)scriptfile->size);
|
||||||
|
template_size = scriptfile->size;
|
||||||
|
template_buf = grub_malloc(template_size);
|
||||||
|
if (template_buf)
|
||||||
|
{
|
||||||
|
grub_file_read(scriptfile, template_buf, template_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_file_close(scriptfile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("Failed to open install script %s%s\n", args[2], template_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_ventoy_cpio_buf = grub_malloc(file->size + 4096 + template_size + img_chunk_size);
|
||||||
if (NULL == g_ventoy_cpio_buf)
|
if (NULL == g_ventoy_cpio_buf)
|
||||||
{
|
{
|
||||||
grub_file_close(file);
|
grub_file_close(file);
|
||||||
@ -910,6 +937,12 @@ grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **arg
|
|||||||
headlen = ventoy_cpio_newc_fill_head(buf, img_chunk_size, g_img_chunk_list.chunk, "ventoy/ventoy_image_map");
|
headlen = ventoy_cpio_newc_fill_head(buf, img_chunk_size, g_img_chunk_list.chunk, "ventoy/ventoy_image_map");
|
||||||
buf += headlen + ventoy_align(img_chunk_size, 4);
|
buf += headlen + ventoy_align(img_chunk_size, 4);
|
||||||
|
|
||||||
|
if (template_buf)
|
||||||
|
{
|
||||||
|
headlen = ventoy_cpio_newc_fill_head(buf, template_size, template_buf, "ventoy/autoinstall");
|
||||||
|
buf += headlen + ventoy_align(template_size, 4);
|
||||||
|
}
|
||||||
|
|
||||||
/* step2: insert os param to cpio */
|
/* step2: insert os param to cpio */
|
||||||
headlen = ventoy_cpio_newc_fill_head(buf, 0, NULL, "ventoy/ventoy_os_param");
|
headlen = ventoy_cpio_newc_fill_head(buf, 0, NULL, "ventoy/ventoy_os_param");
|
||||||
padlen = sizeof(ventoy_os_param);
|
padlen = sizeof(ventoy_os_param);
|
||||||
|
@ -38,6 +38,8 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
static install_template *g_install_template_head = NULL;
|
||||||
|
|
||||||
static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
|
static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
|
||||||
{
|
{
|
||||||
const char *value;
|
const char *value;
|
||||||
@ -45,8 +47,16 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
|
|||||||
|
|
||||||
value = vtoy_json_get_string_ex(json->pstChild, "file");
|
value = vtoy_json_get_string_ex(json->pstChild, "file");
|
||||||
if (value)
|
if (value)
|
||||||
|
{
|
||||||
|
if (value[0] == '/')
|
||||||
|
{
|
||||||
|
grub_snprintf(filepath, sizeof(filepath), "%s%s", isodisk, value);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
grub_snprintf(filepath, sizeof(filepath), "%s/ventoy/%s", isodisk, value);
|
grub_snprintf(filepath, sizeof(filepath), "%s/ventoy/%s", isodisk, value);
|
||||||
|
}
|
||||||
|
|
||||||
if (ventoy_is_file_exist(filepath) == 0)
|
if (ventoy_is_file_exist(filepath) == 0)
|
||||||
{
|
{
|
||||||
debug("Theme file %s does not exist\n", filepath);
|
debug("Theme file %s does not exist\n", filepath);
|
||||||
@ -67,9 +77,67 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int ventoy_plugin_auto_install_entry(VTOY_JSON *json, const char *isodisk)
|
||||||
|
{
|
||||||
|
const char *iso = NULL;
|
||||||
|
const char *script = NULL;
|
||||||
|
VTOY_JSON *pNode = NULL;
|
||||||
|
install_template *node = NULL;
|
||||||
|
install_template *next = NULL;
|
||||||
|
|
||||||
|
(void)isodisk;
|
||||||
|
|
||||||
|
if (json->enDataType != JSON_TYPE_ARRAY)
|
||||||
|
{
|
||||||
|
debug("Not array %d\n", json->enDataType);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_install_template_head)
|
||||||
|
{
|
||||||
|
for (node = g_install_template_head; node; node = next)
|
||||||
|
{
|
||||||
|
next = node->next;
|
||||||
|
grub_free(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_install_template_head = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||||
|
{
|
||||||
|
iso = vtoy_json_get_string_ex(pNode->pstChild, "image");
|
||||||
|
if (iso && iso[0] == '/')
|
||||||
|
{
|
||||||
|
script = vtoy_json_get_string_ex(pNode->pstChild, "template");
|
||||||
|
if (script && script[0] == '/')
|
||||||
|
{
|
||||||
|
node = grub_zalloc(sizeof(install_template));
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
grub_snprintf(node->isopath, sizeof(node->isopath), "%s", iso);
|
||||||
|
grub_snprintf(node->templatepath, sizeof(node->templatepath), "%s", script);
|
||||||
|
|
||||||
|
if (g_install_template_head)
|
||||||
|
{
|
||||||
|
node->next = g_install_template_head;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_install_template_head = node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static plugin_entry g_plugin_entries[] =
|
static plugin_entry g_plugin_entries[] =
|
||||||
{
|
{
|
||||||
{ "theme", ventoy_plugin_theme_entry },
|
{ "theme", ventoy_plugin_theme_entry },
|
||||||
|
{ "auto_install", ventoy_plugin_auto_install_entry },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
||||||
@ -149,3 +217,33 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
|
|||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ventoy_plugin_dump_auto_install(void)
|
||||||
|
{
|
||||||
|
install_template *node = NULL;
|
||||||
|
|
||||||
|
for (node = g_install_template_head; node; node = node->next)
|
||||||
|
{
|
||||||
|
grub_printf("IMAGE:<%s>\n", node->isopath);
|
||||||
|
grub_printf("SCRIPT:<%s>\n\n", node->templatepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char * ventoy_plugin_get_install_template(const char *isopath)
|
||||||
|
{
|
||||||
|
install_template *node = NULL;
|
||||||
|
|
||||||
|
for (node = g_install_template_head; node; node = node->next)
|
||||||
|
{
|
||||||
|
if (grub_strcmp(node->isopath, isopath) == 0)
|
||||||
|
{
|
||||||
|
return node->templatepath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -440,14 +440,14 @@ static int ventoy_cat_exe_file_data(grub_uint32_t exe_len, grub_uint8_t *exe_dat
|
|||||||
jump_align = ventoy_align(jump_len, 16);
|
jump_align = ventoy_align(jump_len, 16);
|
||||||
|
|
||||||
g_wim_data.jump_exe_len = jump_len;
|
g_wim_data.jump_exe_len = jump_len;
|
||||||
g_wim_data.bin_raw_len = jump_align + sizeof(ventoy_os_param) + exe_len;
|
g_wim_data.bin_raw_len = jump_align + sizeof(ventoy_os_param) + sizeof(ventoy_windows_data) + exe_len;
|
||||||
g_wim_data.bin_align_len = ventoy_align(g_wim_data.bin_raw_len, 2048);
|
g_wim_data.bin_align_len = ventoy_align(g_wim_data.bin_raw_len, 2048);
|
||||||
|
|
||||||
g_wim_data.jump_bin_data = grub_malloc(g_wim_data.bin_align_len);
|
g_wim_data.jump_bin_data = grub_malloc(g_wim_data.bin_align_len);
|
||||||
if (g_wim_data.jump_bin_data)
|
if (g_wim_data.jump_bin_data)
|
||||||
{
|
{
|
||||||
grub_memcpy(g_wim_data.jump_bin_data, jump_data, jump_len);
|
grub_memcpy(g_wim_data.jump_bin_data, jump_data, jump_len);
|
||||||
grub_memcpy(g_wim_data.jump_bin_data + jump_align + sizeof(ventoy_os_param), exe_data, exe_len);
|
grub_memcpy(g_wim_data.jump_bin_data + jump_align + sizeof(ventoy_os_param) + sizeof(ventoy_windows_data), exe_data, exe_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug("jump_exe_len:%u bin_raw_len:%u bin_align_len:%u\n",
|
debug("jump_exe_len:%u bin_raw_len:%u bin_align_len:%u\n",
|
||||||
@ -456,7 +456,35 @@ static int ventoy_cat_exe_file_data(grub_uint32_t exe_len, grub_uint8_t *exe_dat
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ventoy_update_before_chain(ventoy_os_param *param)
|
int ventoy_fill_windows_rtdata(void *buf, char *isopath)
|
||||||
|
{
|
||||||
|
char *pos = NULL;
|
||||||
|
char *script = NULL;
|
||||||
|
ventoy_windows_data *data = (ventoy_windows_data *)buf;
|
||||||
|
|
||||||
|
grub_memset(data, 0, sizeof(ventoy_windows_data));
|
||||||
|
|
||||||
|
pos = grub_strstr(isopath, "/");
|
||||||
|
if (!pos)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
script = ventoy_plugin_get_install_template(pos);
|
||||||
|
if (script)
|
||||||
|
{
|
||||||
|
debug("auto install script <%s>\n", script);
|
||||||
|
grub_snprintf(data->auto_install_script, sizeof(data->auto_install_script) - 1, "%s", script);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("auto install script not found %p\n", pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ventoy_update_before_chain(ventoy_os_param *param, char *isopath)
|
||||||
{
|
{
|
||||||
grub_uint32_t jump_align = 0;
|
grub_uint32_t jump_align = 0;
|
||||||
wim_lookup_entry *meta_look = NULL;
|
wim_lookup_entry *meta_look = NULL;
|
||||||
@ -469,6 +497,7 @@ static int ventoy_update_before_chain(ventoy_os_param *param)
|
|||||||
if (g_wim_data.jump_bin_data)
|
if (g_wim_data.jump_bin_data)
|
||||||
{
|
{
|
||||||
grub_memcpy(g_wim_data.jump_bin_data + jump_align, param, sizeof(ventoy_os_param));
|
grub_memcpy(g_wim_data.jump_bin_data + jump_align, param, sizeof(ventoy_os_param));
|
||||||
|
ventoy_fill_windows_rtdata(g_wim_data.jump_bin_data + jump_align + sizeof(ventoy_os_param), isopath);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_crypto_hash(GRUB_MD_SHA1, g_wim_data.bin_hash.sha1, g_wim_data.jump_bin_data, g_wim_data.bin_raw_len);
|
grub_crypto_hash(GRUB_MD_SHA1, g_wim_data.bin_hash.sha1, g_wim_data.jump_bin_data, g_wim_data.bin_raw_len);
|
||||||
@ -878,7 +907,7 @@ grub_err_t ventoy_cmd_windows_chain_data(grub_extcmd_context_t ctxt, int argc, c
|
|||||||
|
|
||||||
if (g_wim_data.jump_bin_data && g_wim_data.new_meta_data)
|
if (g_wim_data.jump_bin_data && g_wim_data.new_meta_data)
|
||||||
{
|
{
|
||||||
ventoy_update_before_chain(&(chain->os_param));
|
ventoy_update_before_chain(&(chain->os_param), args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* part 2: chain head */
|
/* part 2: chain head */
|
||||||
|
@ -104,6 +104,15 @@ typedef struct ventoy_os_param
|
|||||||
grub_uint8_t reserved[31];
|
grub_uint8_t reserved[31];
|
||||||
}ventoy_os_param;
|
}ventoy_os_param;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ventoy_windows_data
|
||||||
|
{
|
||||||
|
char auto_install_script[384];
|
||||||
|
grub_uint8_t reserved[128];
|
||||||
|
}ventoy_windows_data;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
// compile assert check : sizeof(ventoy_os_param) must be 512
|
// compile assert check : sizeof(ventoy_os_param) must be 512
|
||||||
|
48
IMG/cpio/ventoy/hook/arch/ventoy-disk.sh
Normal file
48
IMG/cpio/ventoy/hook/arch/ventoy-disk.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/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
|
||||||
|
|
@ -19,16 +19,21 @@
|
|||||||
|
|
||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
# some archlinux initramfs doesn't contain device-mapper udev rules file
|
if $GREP -q '^"$mount_handler"' /init; then
|
||||||
ARCH_UDEV_DIR=$(ventoy_get_udev_conf_dir)
|
echo 'use mount_handler ...' >> $VTLOG
|
||||||
if [ -s "$ARCH_UDEV_DIR/13-dm-disk.rules" ]; then
|
$SED "/^\"\$mount_handler\"/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/arch/ventoy-disk.sh \"\$archisodevice\"" -i /init
|
||||||
echo 'dm-disk rule exist' >> $VTLOG
|
|
||||||
else
|
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
|
echo 'Copy dm-disk rule file' >> $VTLOG
|
||||||
$CAT $VTOY_PATH/hook/default/13-dm-disk.rules > "$ARCH_UDEV_DIR/13-dm-disk.rules"
|
$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
|
fi
|
||||||
|
|
||||||
# use default proc
|
|
||||||
ventoy_systemd_udevd_work_around
|
|
||||||
|
|
||||||
ventoy_add_udev_rule "$VTOY_PATH/hook/default/udev_disk_hook.sh %k"
|
|
||||||
|
@ -24,6 +24,12 @@ if [ -e /init ] && $GREP -q '^mountroot$' /init; then
|
|||||||
$SED "/^mountroot$/i\\export LIVEMEDIA=/dev/mapper/ventoy" -i /init
|
$SED "/^mountroot$/i\\export LIVEMEDIA=/dev/mapper/ventoy" -i /init
|
||||||
$SED "/^mountroot$/i\\export LIVE_MEDIA=/dev/mapper/ventoy" -i /init
|
$SED "/^mountroot$/i\\export 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
|
||||||
|
|
||||||
elif [ -e /init ] && $GREP -q '/start-udev$' /init; then
|
elif [ -e /init ] && $GREP -q '/start-udev$' /init; then
|
||||||
echo "Here use notify ..." >> $VTLOG
|
echo "Here use notify ..." >> $VTLOG
|
||||||
|
|
||||||
@ -35,3 +41,15 @@ else
|
|||||||
ventoy_systemd_udevd_work_around
|
ventoy_systemd_udevd_work_around
|
||||||
ventoy_add_udev_rule "$VTOY_PATH/hook/debian/udev_disk_hook.sh %k"
|
ventoy_add_udev_rule "$VTOY_PATH/hook/debian/udev_disk_hook.sh %k"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||||
|
echo "Do auto install ..." >> $VTLOG
|
||||||
|
|
||||||
|
if $GREP -q "^mount /proc$" /init; then
|
||||||
|
$SED "/^mount \/proc/a export file=$VTOY_PATH/autoinstall; export auto='true'; export priority='critical'" -i /init
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
26
IMG/cpio/ventoy/hook/gobo/ventoy-hook.sh
Normal file
26
IMG/cpio/ventoy/hook/gobo/ventoy-hook.sh
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#!/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 "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE root=live:/dev/mapper/ventoy#" -i /lib/dracut-lib.sh
|
||||||
|
|
||||||
|
ventoy_set_inotify_script gobo/ventoy-inotifyd-hook.sh
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/gobo/ventoy-inotifyd-start.sh /lib/dracut/hooks/pre-udev/01-ventoy-inotifyd-start.sh
|
47
IMG/cpio/ventoy/hook/gobo/ventoy-inotifyd-hook.sh
Normal file
47
IMG/cpio/ventoy/hook/gobo/ventoy-inotifyd-hook.sh
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/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 "##### INOTIFYD: $2/$3 is created ..."
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
if is_inotify_ventoy_part $3; then
|
||||||
|
vtlog "find ventoy partition $3 ..."
|
||||||
|
$BUSYBOX_PATH/sh $VTOY_PATH/hook/default/udev_disk_hook.sh $3 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})
|
||||||
|
#
|
||||||
|
# if [ "$vtDM" = "dm-0" ]; then
|
||||||
|
# vtlog "This is dm-0, OK ..."
|
||||||
|
# else
|
||||||
|
# vtlog "####### This is $vtDM ####### this is abnormal ..."
|
||||||
|
# ventoy_swap_device /dev/dm-0 /dev/$vtDM
|
||||||
|
# fi
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
fi
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
31
IMG/cpio/ventoy/hook/gobo/ventoy-inotifyd-start.sh
Normal file
31
IMG/cpio/ventoy/hook/gobo/ventoy-inotifyd-start.sh
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
vtHook=$($CAT $VTOY_PATH/inotifyd-hook-script.txt)
|
||||||
|
|
||||||
|
vtdisk=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdisk" = "unknown" ]; then
|
||||||
|
vtlog "... start inotifyd listen $vtHook ..."
|
||||||
|
$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"
|
||||||
|
fi
|
42
IMG/cpio/ventoy/hook/guix/ventoy-disk.sh
Normal file
42
IMG/cpio/ventoy/hook/guix/ventoy-disk.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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. /ventoy/hook/ventoy-hook-lib.sh
|
||||||
|
|
||||||
|
if is_ventoy_hook_finished; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
vtlog "##### INOTIFYD: $2/$3 is created ..."
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
if is_inotify_ventoy_part $3; then
|
||||||
|
vtlog "find ventoy partition ..."
|
||||||
|
$BUSYBOX_PATH/sh $VTOY_PATH/hook/default/udev_disk_hook.sh $3
|
||||||
|
|
||||||
|
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 "This is $vtDM ..."
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
fi
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
25
IMG/cpio/ventoy/hook/guix/ventoy-hook.sh
Normal file
25
IMG/cpio/ventoy/hook/guix/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
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
|
$BUSYBOX_PATH/mknode -m 0666 /dev/null c 1 3
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/nohup $VTOY_PATH/hook/guix/ventoy-waitdev.sh &
|
37
IMG/cpio/ventoy/hook/guix/ventoy-waitdev.sh
Normal file
37
IMG/cpio/ventoy/hook/guix/ventoy-waitdev.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
while ! [ -e /dev/null ]; do
|
||||||
|
echo 'xxxxxxxxxx'
|
||||||
|
echo 'xxxxxxxxxx' > /dev/console
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
vtlog "... start inotifyd listen $vtHook ..."
|
||||||
|
$BUSYBOX_PATH/nohup $VTOY_PATH/tool/inotifyd $VTOY_PATH/hook/guix/ventoy-disk.sh /dev:n 2>&- &
|
||||||
|
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
50
IMG/cpio/ventoy/hook/nutyx/ventoy-disk.sh
Normal file
50
IMG/cpio/ventoy/hook/nutyx/ventoy-disk.sh
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
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"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
blkdev_num=$(dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||||
|
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
|
||||||
|
vtlog "link /dev/$vtDM $VTOY_DM_PATH"
|
||||||
|
ln -s /dev/$vtDM $VTOY_DM_PATH
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
22
IMG/cpio/ventoy/hook/nutyx/ventoy-hook.sh
Normal file
22
IMG/cpio/ventoy/hook/nutyx/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 "/find_media$/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/nutyx/ventoy-disk.sh" -i /init
|
@ -22,15 +22,30 @@
|
|||||||
#ventoy_systemd_udevd_work_around
|
#ventoy_systemd_udevd_work_around
|
||||||
#ventoy_add_udev_rule "$VTOY_PATH/hook/default/udev_disk_hook.sh %k noreplace"
|
#ventoy_add_udev_rule "$VTOY_PATH/hook/default/udev_disk_hook.sh %k noreplace"
|
||||||
|
|
||||||
if $GREP -q 'root=live' /proc/cmdline; then
|
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE root=live:/dev/dm-0#" -i /lib/dracut-lib.sh
|
VTKS="inst.ks=file:$VTOY_PATH/autoinstall"
|
||||||
else
|
else
|
||||||
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE inst.stage2=hd:/dev/dm-0#" -i /lib/dracut-lib.sh
|
for vtParam in $($CAT /proc/cmdline); do
|
||||||
|
if echo $vtParam | $GREP -q 'inst.ks=hd:LABEL='; then
|
||||||
|
vtRawKs=$(echo $vtParam | $AWK -F: '{print $NF}')
|
||||||
|
VTKS="inst.ks=hd:/dev/dm-0:$vtRawKs"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "VTKS=$VTKS" >> $VTLOG
|
||||||
|
|
||||||
|
if $GREP -q 'root=live' /proc/cmdline; then
|
||||||
|
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE root=live:/dev/dm-0 $VTKS#" -i /lib/dracut-lib.sh
|
||||||
|
else
|
||||||
|
$SED "s#printf\(.*\)\$CMDLINE#printf\1\$CMDLINE inst.stage2=hd:/dev/dm-0 $VTKS#" -i /lib/dracut-lib.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ventoy_set_inotify_script rhel7/ventoy-inotifyd-hook.sh
|
ventoy_set_inotify_script rhel7/ventoy-inotifyd-hook.sh
|
||||||
|
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-inotifyd-start.sh /lib/dracut/hooks/pre-udev/01-ventoy-inotifyd-start.sh
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-inotifyd-start.sh /lib/dracut/hooks/pre-udev/01-ventoy-inotifyd-start.sh
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/hook/rhel7/ventoy-timeout.sh /lib/dracut/hooks/initqueue/timeout/01-ventoy-timeout.sh
|
||||||
|
|
||||||
# suppress write protected mount warning
|
# suppress write protected mount warning
|
||||||
if [ -e /usr/sbin/anaconda-diskroot ]; then
|
if [ -e /usr/sbin/anaconda-diskroot ]; then
|
||||||
|
@ -41,6 +41,9 @@ if is_inotify_ventoy_part $3; then
|
|||||||
ventoy_swap_device /dev/dm-0 /dev/$vtDM
|
ventoy_swap_device /dev/dm-0 /dev/$vtDM
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
vtlog "set anaconda-diskroot ..."
|
||||||
|
/sbin/initqueue --settled --onetime --name anaconda-diskroot anaconda-diskroot /dev/dm-0
|
||||||
|
|
||||||
set_ventoy_hook_finish
|
set_ventoy_hook_finish
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
32
IMG/cpio/ventoy/hook/rhel7/ventoy-timeout.sh
Normal file
32
IMG/cpio/ventoy/hook/rhel7/ventoy-timeout.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
|
||||||
|
|
||||||
|
vtlog "##### $0 $* ..."
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
blkdev_num=$(dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||||
|
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
|
||||||
|
vtlog "diskroot $vtDM ..."
|
||||||
|
/sbin/initqueue --settled --onetime --name anaconda-diskroot anaconda-diskroot /dev/$vtDM
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
@ -19,6 +19,17 @@
|
|||||||
|
|
||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
ventoy_systemd_udevd_work_around
|
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||||
|
if [ -f /linuxrc.config ]; then
|
||||||
|
echo "AutoYaST: file:///ventoy/autoinstall" >> /info-ventoy
|
||||||
|
$SED "1 iinfo: file:/info-ventoy" -i /linuxrc.config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#echo "Exec: /bin/sh $VTOY_PATH/hook/suse/cdrom-hook.sh" >> /info-ventoy
|
||||||
|
#echo "install: hd:/?device=/dev/mapper/ventoy" >> /info-ventoy
|
||||||
|
#$SED "1 iinfo: file:/info-ventoy" -i /linuxrc.config
|
||||||
|
|
||||||
|
ventoy_systemd_udevd_work_around
|
||||||
ventoy_add_udev_rule "$VTOY_PATH/hook/suse/udev_disk_hook.sh %k"
|
ventoy_add_udev_rule "$VTOY_PATH/hook/suse/udev_disk_hook.sh %k"
|
||||||
|
@ -169,7 +169,20 @@ ventoy_get_os_type() {
|
|||||||
echo 'berry'; return
|
echo 'berry'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'Gobo ' /proc/version; then
|
||||||
|
echo 'gobo'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'NuTyX' /proc/version; then
|
||||||
|
echo 'nutyx'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d /gnu ]; then
|
||||||
|
vtLineNum=$($FIND /gnu/ -name guix | $BUSYBOX_PATH/wc -l)
|
||||||
|
if [ $vtLineNum -gt 0 ]; then
|
||||||
|
echo 'guix'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "default"
|
echo "default"
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -110,6 +110,10 @@ function distro_specify_initrd_file_phase2 {
|
|||||||
vt_linux_specify_initrd_file /boot/initrd.img
|
vt_linux_specify_initrd_file /boot/initrd.img
|
||||||
elif [ -f (loop)/Setup/initrd.gz ]; then
|
elif [ -f (loop)/Setup/initrd.gz ]; then
|
||||||
vt_linux_specify_initrd_file /Setup/initrd.gz
|
vt_linux_specify_initrd_file /Setup/initrd.gz
|
||||||
|
elif [ -f (loop)/isolinux/initramfs ]; then
|
||||||
|
vt_linux_specify_initrd_file /isolinux/initramfs
|
||||||
|
elif [ -f (loop)/boot/iniramfs.igz ]; then
|
||||||
|
vt_linux_specify_initrd_file /boot/iniramfs.igz
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -142,14 +146,14 @@ function uefi_windows_menu_func {
|
|||||||
|
|
||||||
function uefi_linux_menu_func {
|
function uefi_linux_menu_func {
|
||||||
if [ "$ventoy_compatible" = "NO" ]; then
|
if [ "$ventoy_compatible" = "NO" ]; then
|
||||||
vt_load_cpio ${vtoy_path}/ventoy.cpio
|
vt_load_cpio ${vtoy_path}/ventoy.cpio $2 $1
|
||||||
|
|
||||||
vt_linux_clear_initrd
|
vt_linux_clear_initrd
|
||||||
|
|
||||||
if [ -d (loop)/pmagic ]; then
|
if [ -d (loop)/pmagic ]; then
|
||||||
vt_linux_specify_initrd_file /pmagic/initrd.img
|
vt_linux_specify_initrd_file /pmagic/initrd.img
|
||||||
else
|
else
|
||||||
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf"; do
|
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf" "/grub/grub.cfg"; do
|
||||||
if [ -e (loop)/$file ]; then
|
if [ -e (loop)/$file ]; then
|
||||||
vt_linux_parse_initrd_grub file (loop)/$file
|
vt_linux_parse_initrd_grub file (loop)/$file
|
||||||
fi
|
fi
|
||||||
@ -250,9 +254,9 @@ function uefi_iso_menu_func {
|
|||||||
set ventoy_compatible=YES
|
set ventoy_compatible=YES
|
||||||
fi
|
fi
|
||||||
|
|
||||||
uefi_windows_menu_func $1
|
uefi_windows_menu_func $1 ${chosen_path}
|
||||||
else
|
else
|
||||||
uefi_linux_menu_func $1
|
uefi_linux_menu_func $1 ${chosen_path}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
terminal_output gfxterm
|
terminal_output gfxterm
|
||||||
@ -300,8 +304,7 @@ function legacy_windows_menu_func {
|
|||||||
|
|
||||||
function legacy_linux_menu_func {
|
function legacy_linux_menu_func {
|
||||||
if [ "$ventoy_compatible" = "NO" ]; then
|
if [ "$ventoy_compatible" = "NO" ]; then
|
||||||
|
vt_load_cpio $vtoy_path/ventoy.cpio $2 $1
|
||||||
vt_load_cpio $vtoy_path/ventoy.cpio
|
|
||||||
|
|
||||||
vt_linux_clear_initrd
|
vt_linux_clear_initrd
|
||||||
|
|
||||||
@ -392,9 +395,9 @@ function legacy_iso_menu_func {
|
|||||||
set ventoy_compatible=YES
|
set ventoy_compatible=YES
|
||||||
fi
|
fi
|
||||||
|
|
||||||
legacy_windows_menu_func $1
|
legacy_windows_menu_func $1 ${chosen_path}
|
||||||
else
|
else
|
||||||
legacy_linux_menu_func $1
|
legacy_linux_menu_func $1 ${chosen_path}
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +435,13 @@ function common_menuentry {
|
|||||||
#############################################################
|
#############################################################
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
set VENTOY_VERSION="1.0.08"
|
set VENTOY_VERSION="1.0.09"
|
||||||
|
|
||||||
|
|
||||||
|
# Default menu display mode, you can change it as you want.
|
||||||
|
# 0: List mode
|
||||||
|
# 1: TreeView mode
|
||||||
|
set VTOY_DEFAULT_MENU_MODE=0
|
||||||
|
|
||||||
#disable timeout
|
#disable timeout
|
||||||
unset timeout
|
unset timeout
|
||||||
@ -442,9 +451,15 @@ set VTOY_ISO_RAW_STR="ISO RAW"
|
|||||||
set VTOY_ISO_UEFI_DRV_STR="UEFI FS"
|
set VTOY_ISO_UEFI_DRV_STR="UEFI FS"
|
||||||
|
|
||||||
set VTOY_F2_CMD="ventoy_power"
|
set VTOY_F2_CMD="ventoy_power"
|
||||||
set VTOY_F3_CMD="vt_dynamic_menu tree"
|
|
||||||
|
|
||||||
set VTOY_HOTKEY_TIP="F1:Memdisk F2:Power F3:TreeView"
|
if [ $VTOY_DEFAULT_MENU_MODE -eq 0 ]; then
|
||||||
|
set VTOY_F3_CMD="vt_dynamic_menu 1 1"
|
||||||
|
set VTOY_HOTKEY_TIP="F1:Memdisk F2:Power F3:TreeView"
|
||||||
|
else
|
||||||
|
set VTOY_F3_CMD="vt_dynamic_menu 1 0"
|
||||||
|
set VTOY_HOTKEY_TIP="F1:Memdisk F2:Power F3:ListView"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$grub_platform" = "pc" ]; then
|
if [ "$grub_platform" = "pc" ]; then
|
||||||
set VTOY_TEXT_MENU_VER="Ventoy $VENTOY_VERSION BIOS www.ventoy.net"
|
set VTOY_TEXT_MENU_VER="Ventoy $VENTOY_VERSION BIOS www.ventoy.net"
|
||||||
else
|
else
|
||||||
@ -492,7 +507,11 @@ vt_list_img $iso_path ventoy_img_count
|
|||||||
|
|
||||||
#Main menu
|
#Main menu
|
||||||
if [ $ventoy_img_count -gt 0 ]; then
|
if [ $ventoy_img_count -gt 0 ]; then
|
||||||
vt_dynamic_menu
|
if [ $VTOY_DEFAULT_MENU_MODE -eq 0 ]; then
|
||||||
|
vt_dynamic_menu 0 0
|
||||||
|
else
|
||||||
|
vt_dynamic_menu 0 1
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
menuentry "No ISO files found (Press enter to reboot ...)" {
|
menuentry "No ISO files found (Press enter to reboot ...)" {
|
||||||
echo -e "\n Rebooting ... "
|
echo -e "\n Rebooting ... "
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -22,52 +22,6 @@
|
|||||||
#include "Ventoy2Disk.h"
|
#include "Ventoy2Disk.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
|
|
||||||
const TCHAR * g_Str_English[STR_ID_MAX] =
|
|
||||||
{
|
|
||||||
TEXT("Error"),
|
|
||||||
TEXT("Warning"),
|
|
||||||
TEXT("Info"),
|
|
||||||
TEXT("Please run under the correct directory!"),
|
|
||||||
TEXT("Device"),
|
|
||||||
TEXT("Ventoy At Local"),
|
|
||||||
TEXT("Ventoy In Device"),
|
|
||||||
TEXT("Status - READY"),
|
|
||||||
TEXT("Install"),
|
|
||||||
TEXT("Update"),
|
|
||||||
TEXT("Upgrade operation is safe, ISO files will be unchanged.\r\nContinue?"),
|
|
||||||
TEXT("The disk will be formatted and all the data will be lost.\r\nContinue?"),
|
|
||||||
TEXT("The disk will be formatted and all the data will be lost.\r\nContinue? (Double Check)"),
|
|
||||||
TEXT("Congratulations!\r\nVentoy has been successfully installed to the device."),
|
|
||||||
TEXT("An error occurred during the installation. You can replug the USB and try again. Check log.txt for detail."),
|
|
||||||
TEXT("Congratulations!\r\nVentoy has been successfully updated to the device."),
|
|
||||||
TEXT("An error occurred during the update. You can replug the USB and try again. Check log.txt for detail."),
|
|
||||||
|
|
||||||
TEXT("A thread is running, please wait..."),
|
|
||||||
};
|
|
||||||
|
|
||||||
const TCHAR * g_Str_ChineseSimple[STR_ID_MAX] =
|
|
||||||
{
|
|
||||||
TEXT("错误"),
|
|
||||||
TEXT("警告"),
|
|
||||||
TEXT("提醒"),
|
|
||||||
TEXT("请在正确的目录下运行!"),
|
|
||||||
TEXT("设备"),
|
|
||||||
TEXT("安装包内 Ventoy 版本"),
|
|
||||||
TEXT("设备内部 Ventoy 版本"),
|
|
||||||
TEXT("状态 - 准备就绪"),
|
|
||||||
TEXT("安装"),
|
|
||||||
TEXT("升级"),
|
|
||||||
TEXT("升级操作是安全的, ISO文件不会丢失\r\n是否继续?"),
|
|
||||||
TEXT("磁盘会被格式化, 所有数据都会丢失!\r\n是否继续?"),
|
|
||||||
TEXT("磁盘会被格式化, 所有数据都会丢失!\r\n再次确认是否继续?"),
|
|
||||||
TEXT("恭喜你! Ventoy 已经成功安装到此设备中."),
|
|
||||||
TEXT("安装 Ventoy 过程中发生错误. 你可以重新拔插一下U盘然后重试一次, 详细信息请查阅 log.txt 文件."),
|
|
||||||
TEXT("恭喜你! 新版本的 Ventoy 已经成功更新到此设备中."),
|
|
||||||
TEXT("更新 Ventoy 过程中遇到错误. 你可以重新拔插一下U盘然后重试一次, 详细信息请查阅 log.txt 文件."),
|
|
||||||
|
|
||||||
TEXT("当前有任务正在运行, 请等待..."),
|
|
||||||
};
|
|
||||||
|
|
||||||
const TCHAR * GetString(enum STR_ID ID)
|
const TCHAR * GetString(enum STR_ID ID)
|
||||||
{
|
{
|
||||||
return g_cur_lang_data->MsgString[ID];
|
return g_cur_lang_data->MsgString[ID];
|
||||||
|
@ -62,6 +62,7 @@ extern BOOL g_SecureBoot;
|
|||||||
|
|
||||||
#define VENTOY_LANGUAGE_INI TEXT(".\\ventoy\\languages.ini")
|
#define VENTOY_LANGUAGE_INI TEXT(".\\ventoy\\languages.ini")
|
||||||
#define VENTOY_CFG_INI TEXT(".\\Ventoy2Disk.ini")
|
#define VENTOY_CFG_INI TEXT(".\\Ventoy2Disk.ini")
|
||||||
|
#define VENTOY_CFG_INI_A ".\\Ventoy2Disk.ini"
|
||||||
#define VENTOY_MAX_LANGUAGE 200
|
#define VENTOY_MAX_LANGUAGE 200
|
||||||
|
|
||||||
#define GET_INI_STRING(Section, Key, Buf) GetPrivateProfileString(Section, Key, TEXT("#"), Buf, sizeof(Buf), VENTOY_LANGUAGE_INI)
|
#define GET_INI_STRING(Section, Key, Buf) GetPrivateProfileString(Section, Key, TEXT("#"), Buf, sizeof(Buf), VENTOY_LANGUAGE_INI)
|
||||||
|
@ -927,11 +927,20 @@ int VentoyProcSecureBoot(BOOL SecureBoot)
|
|||||||
file = fl_fopen("/EFI/BOOT/BOOTX64.EFI", "wb");
|
file = fl_fopen("/EFI/BOOT/BOOTX64.EFI", "wb");
|
||||||
Log("Open bootx64 efi file %p ", file);
|
Log("Open bootx64 efi file %p ", file);
|
||||||
if (file)
|
if (file)
|
||||||
|
{
|
||||||
|
if (filebuf)
|
||||||
{
|
{
|
||||||
fl_fwrite(filebuf, 1, size, file);
|
fl_fwrite(filebuf, 1, size, file);
|
||||||
|
}
|
||||||
|
|
||||||
fl_fflush(file);
|
fl_fflush(file);
|
||||||
fl_fclose(file);
|
fl_fclose(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (filebuf)
|
||||||
|
{
|
||||||
|
free(filebuf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Binary file not shown.
@ -29,6 +29,7 @@
|
|||||||
#include "fat_filelib.h"
|
#include "fat_filelib.h"
|
||||||
|
|
||||||
static ventoy_os_param g_os_param;
|
static ventoy_os_param g_os_param;
|
||||||
|
static ventoy_windows_data g_windows_data;
|
||||||
static UINT8 g_os_param_reserved[32];
|
static UINT8 g_os_param_reserved[32];
|
||||||
static BOOL g_64bit_system = FALSE;
|
static BOOL g_64bit_system = FALSE;
|
||||||
static ventoy_guid g_ventoy_guid = VENTOY_GUID;
|
static ventoy_guid g_ventoy_guid = VENTOY_GUID;
|
||||||
@ -703,6 +704,40 @@ static int DeleteVentoyPart2MountPoint(DWORD PhyDrive)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ProcessUnattendedInstallation(const char *script)
|
||||||
|
{
|
||||||
|
DWORD dw;
|
||||||
|
HKEY hKey;
|
||||||
|
LSTATUS Ret;
|
||||||
|
CHAR Letter;
|
||||||
|
CHAR CurDir[MAX_PATH];
|
||||||
|
|
||||||
|
Log("Copy unattended XML ...");
|
||||||
|
|
||||||
|
GetCurrentDirectory(sizeof(CurDir), CurDir);
|
||||||
|
Letter = CurDir[0];
|
||||||
|
if ((Letter >= 'A' && Letter <= 'Z') || (Letter >= 'a' && Letter <= 'z'))
|
||||||
|
{
|
||||||
|
Log("Current Drive Letter: %C", Letter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Letter = 'X';
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf_s(CurDir, sizeof(CurDir), "%C:\\Autounattend.xml", Letter);
|
||||||
|
Log("Copy file <%s> --> <%s>", script, CurDir);
|
||||||
|
CopyFile(script, CurDir, FALSE);
|
||||||
|
|
||||||
|
Ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "System\\Setup", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dw);
|
||||||
|
if (ERROR_SUCCESS == Ret)
|
||||||
|
{
|
||||||
|
Ret = RegSetValueEx(hKey, "UnattendFile", 0, REG_SZ, CurDir, (DWORD)(strlen(CurDir) + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int VentoyHook(ventoy_os_param *param)
|
static int VentoyHook(ventoy_os_param *param)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -756,6 +791,24 @@ static int VentoyHook(ventoy_os_param *param)
|
|||||||
rc = DeleteVentoyPart2MountPoint(DiskExtent.DiskNumber);
|
rc = DeleteVentoyPart2MountPoint(DiskExtent.DiskNumber);
|
||||||
Log("Delete ventoy mountpoint: %s", rc == 0 ? "SUCCESS" : "NO NEED");
|
Log("Delete ventoy mountpoint: %s", rc == 0 ? "SUCCESS" : "NO NEED");
|
||||||
|
|
||||||
|
if (g_windows_data.auto_install_script[0])
|
||||||
|
{
|
||||||
|
sprintf_s(IsoPath, sizeof(IsoPath), "%C:%s", Letter, g_windows_data.auto_install_script);
|
||||||
|
if (IsPathExist(FALSE, "%s", IsoPath))
|
||||||
|
{
|
||||||
|
Log("use auto install script %s...", IsoPath);
|
||||||
|
ProcessUnattendedInstallation(IsoPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log("auto install script %s not exist", IsoPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log("auto install no need");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -815,11 +868,12 @@ int VentoyJump(INT argc, CHAR **argv, CHAR *LunchFile)
|
|||||||
for (PeStart = 0; PeStart < FileSize; PeStart += 16)
|
for (PeStart = 0; PeStart < FileSize; PeStart += 16)
|
||||||
{
|
{
|
||||||
if (CheckOsParam((ventoy_os_param *)(Buffer + PeStart)) &&
|
if (CheckOsParam((ventoy_os_param *)(Buffer + PeStart)) &&
|
||||||
CheckPeHead(Buffer + PeStart + sizeof(ventoy_os_param)))
|
CheckPeHead(Buffer + PeStart + sizeof(ventoy_os_param) + sizeof(ventoy_windows_data)))
|
||||||
{
|
{
|
||||||
Log("Find os pararm at %u", PeStart);
|
Log("Find os pararm at %u", PeStart);
|
||||||
|
|
||||||
memcpy(&g_os_param, Buffer + PeStart, sizeof(ventoy_os_param));
|
memcpy(&g_os_param, Buffer + PeStart, sizeof(ventoy_os_param));
|
||||||
|
memcpy(&g_windows_data, Buffer + PeStart + sizeof(ventoy_os_param), sizeof(ventoy_windows_data));
|
||||||
memcpy(g_os_param_reserved, g_os_param.vtoy_reserved, sizeof(g_os_param_reserved));
|
memcpy(g_os_param_reserved, g_os_param.vtoy_reserved, sizeof(g_os_param_reserved));
|
||||||
|
|
||||||
if (g_os_param_reserved[0] == 1)
|
if (g_os_param_reserved[0] == 1)
|
||||||
@ -837,7 +891,7 @@ int VentoyJump(INT argc, CHAR **argv, CHAR *LunchFile)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PeStart += sizeof(ventoy_os_param);
|
PeStart += sizeof(ventoy_os_param) + sizeof(ventoy_windows_data);
|
||||||
sprintf_s(LunchFile, MAX_PATH, "ventoy\\%s", GetFileNameInPath(ExeFileName));
|
sprintf_s(LunchFile, MAX_PATH, "ventoy\\%s", GetFileNameInPath(ExeFileName));
|
||||||
SaveBuffer2File(LunchFile, Buffer + PeStart, FileSize - PeStart);
|
SaveBuffer2File(LunchFile, Buffer + PeStart, FileSize - PeStart);
|
||||||
break;
|
break;
|
||||||
|
@ -65,6 +65,12 @@ typedef struct ventoy_os_param
|
|||||||
UINT8 reserved[31];
|
UINT8 reserved[31];
|
||||||
}ventoy_os_param;
|
}ventoy_os_param;
|
||||||
|
|
||||||
|
typedef struct ventoy_windows_data
|
||||||
|
{
|
||||||
|
char auto_install_script[384];
|
||||||
|
UINT8 reserved[128];
|
||||||
|
}ventoy_windows_data;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user