]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
1.0.45 release v1.0.45
authorlongpanda <admin@ventoy.net>
Sat, 29 May 2021 11:42:16 +0000 (19:42 +0800)
committerlongpanda <admin@ventoy.net>
Sat, 29 May 2021 11:42:16 +0000 (19:42 +0800)
13 files changed:
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
INSTALL/ExtendPersistentImg.sh [new file with mode: 0644]
INSTALL/README
INSTALL/grub/arm64-efi/moddep.lst
INSTALL/grub/grub.cfg
INSTALL/grub/i386-efi/moddep.lst
INSTALL/grub/i386-pc/moddep.lst
INSTALL/grub/mips64el-efi/moddep.lst
INSTALL/grub/x86_64-efi/moddep.lst
INSTALL/plugin/ventoy/theme/theme.txt
INSTALL/ventoy_pack.sh

index 6383c94497902cf04acda80c7cea8d5c39a9ac3b..6826e25f00f9212af46726c71800460609e9be15 100644 (file)
@@ -4573,6 +4573,7 @@ static cmd_para ventoy_cmds[] =
     { "vt_is_pe64", ventoy_cmd_is_pe64, 0, NULL, "", "", NULL },
     { "vt_sel_wimboot", ventoy_cmd_sel_wimboot, 0, NULL, "", "", NULL },
     { "vt_set_wim_load_prompt", ventoy_cmd_set_wim_prompt, 0, NULL, "", "", NULL },
     { "vt_is_pe64", ventoy_cmd_is_pe64, 0, NULL, "", "", NULL },
     { "vt_sel_wimboot", ventoy_cmd_sel_wimboot, 0, NULL, "", "", NULL },
     { "vt_set_wim_load_prompt", ventoy_cmd_set_wim_prompt, 0, NULL, "", "", NULL },
+    { "vt_set_theme", ventoy_cmd_set_theme, 0, NULL, "", "", NULL },
 
 };
 
 
 };
 
index eebfce9252a45a37bd72957c7a71966bb0ae5dbb..600198409021e7fb8546a292ad7da0f9cad02be1 100644 (file)
@@ -778,6 +778,12 @@ typedef struct file_fullpath
     char path[256];
 }file_fullpath;
 
     char path[256];
 }file_fullpath;
 
+typedef struct theme_list
+{
+    file_fullpath theme;
+    struct theme_list *next;
+}theme_list;
+
 #define auto_install_type_file   0
 #define auto_install_type_parent 1
 typedef struct install_template
 #define auto_install_type_file   0
 #define auto_install_type_parent 1
 typedef struct install_template
@@ -999,6 +1005,7 @@ int ventoy_plugin_load_dud(dud *node, const char *isopart);
 int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
 int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
 void ventoy_plugin_dump_persistence(void);
 int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
 int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
 void ventoy_plugin_dump_persistence(void);
+grub_err_t ventoy_cmd_set_theme(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_check_password(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_linux_get_main_initrd_index(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_check_password(grub_extcmd_context_t ctxt, int argc, char **args);
 grub_err_t ventoy_cmd_linux_get_main_initrd_index(grub_extcmd_context_t ctxt, int argc, char **args);
@@ -1036,5 +1043,9 @@ int ventoy_chain_file_read(const char *path, int offset, int len, void *buf);
 
 #define VTOY_CMD_CHECK(a) if (33554432 != g_ventoy_disk_part_size[a]) ventoy_syscall0(exit)
 
 
 #define VTOY_CMD_CHECK(a) if (33554432 != g_ventoy_disk_part_size[a]) ventoy_syscall0(exit)
 
+#define vtoy_theme_random_boot_second  0
+#define vtoy_theme_random_boot_day     1
+#define vtoy_theme_random_boot_month   2
+
 #endif /* __VENTOY_DEF_H__ */
 
 #endif /* __VENTOY_DEF_H__ */
 
index 20cd0c715288b1a06c98a7814da0dc7cdc4feb20..fc56936f53c5947f7bfd28db559bdb13100ab3a8 100644 (file)
@@ -56,6 +56,11 @@ static auto_memdisk *g_auto_memdisk_head = NULL;
 static image_list *g_image_list_head = NULL;
 static conf_replace *g_conf_replace_head = NULL;
 
 static image_list *g_image_list_head = NULL;
 static conf_replace *g_conf_replace_head = NULL;
 
+static int g_theme_num = 0;
+static theme_list *g_theme_head = NULL;
+static int g_theme_random = vtoy_theme_random_boot_second;
+static char g_theme_single_file[256];
+
 static int ventoy_plugin_is_parent(const char *pat, int patlen, const char *isopath)
 {
     if (patlen > 1)
 static int ventoy_plugin_is_parent(const char *pat, int patlen, const char *isopath)
 {
     if (patlen > 1)
@@ -177,6 +182,38 @@ static int ventoy_plugin_theme_check(VTOY_JSON *json, const char *isodisk)
             return 1;
         }
     }
             return 1;
         }
     }
+    else
+    {
+        node = vtoy_json_find_item(json->pstChild, JSON_TYPE_ARRAY, "file");
+        if (node)
+        {
+            for (node = node->pstChild; node; node = node->pstNext)
+            {
+                value = node->unData.pcStrVal;
+                grub_printf("file: %s\n", value);
+                if (value[0] == '/')
+                {
+                    exist = ventoy_is_file_exist("%s%s", isodisk, value);
+                }
+                else
+                {
+                    exist = ventoy_is_file_exist("%s/ventoy/%s", isodisk, value);
+                }
+
+                if (exist == 0)
+                {
+                    grub_printf("Theme file %s does NOT exist\n", value);
+                    return 1;
+                }
+            }
+
+            value = vtoy_json_get_string_ex(json->pstChild, "random");
+            if (value)
+            {
+                grub_printf("random: %s\n", value);
+            }
+        }
+    }
     
     value = vtoy_json_get_string_ex(json->pstChild, "gfxmode");
     if (value)
     
     value = vtoy_json_get_string_ex(json->pstChild, "gfxmode");
     if (value)
@@ -244,8 +281,10 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
 {
     const char *value;
     char filepath[256];
 {
     const char *value;
     char filepath[256];
-    VTOY_JSON *node;
-    
+    VTOY_JSON *node = NULL;
+    theme_list *tail = NULL;
+    theme_list *themenode = NULL;
+
     value = vtoy_json_get_string_ex(json->pstChild, "file");
     if (value)
     {
     value = vtoy_json_get_string_ex(json->pstChild, "file");
     if (value)
     {
@@ -258,7 +297,7 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
             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_check_file_exist(filepath) == 0)
         {
             debug("Theme file %s does not exist\n", filepath);
             return 0;
         {
             debug("Theme file %s does not exist\n", filepath);
             return 0;
@@ -266,6 +305,65 @@ static int ventoy_plugin_theme_entry(VTOY_JSON *json, const char *isodisk)
 
         debug("vtoy_theme %s\n", filepath);
         grub_env_set("vtoy_theme", filepath);
 
         debug("vtoy_theme %s\n", filepath);
         grub_env_set("vtoy_theme", filepath);
+        grub_snprintf(g_theme_single_file, sizeof(g_theme_single_file), "%s", filepath);
+    }
+    else
+    {
+        node = vtoy_json_find_item(json->pstChild, JSON_TYPE_ARRAY, "file");
+        if (node)
+        {
+            for (node = node->pstChild; node; node = node->pstNext)
+            {
+                value = node->unData.pcStrVal;
+                if (value[0] == '/')
+                {
+                    grub_snprintf(filepath, sizeof(filepath), "%s%s", isodisk, value);
+                }
+                else
+                {
+                    grub_snprintf(filepath, sizeof(filepath), "%s/ventoy/%s", isodisk, value);
+                }
+
+                if (ventoy_check_file_exist(filepath) == 0)
+                {
+                    continue;
+                }
+
+                themenode = grub_zalloc(sizeof(theme_list));
+                if (themenode)
+                {
+                    grub_snprintf(themenode->theme.path, sizeof(themenode->theme.path), "%s", filepath);
+                    if (g_theme_head)
+                    {
+                        tail->next = themenode;
+                    }
+                    else
+                    {
+                        g_theme_head = themenode;
+                    }
+                    tail = themenode;
+                    g_theme_num++;
+                }
+            }
+
+            grub_env_set("vtoy_theme", "random");
+            value = vtoy_json_get_string_ex(json->pstChild, "random");
+            if (value)
+            {
+                if (grub_strcmp(value, "boot_second") == 0)
+                {
+                    g_theme_random = vtoy_theme_random_boot_second;
+                }
+                else if (grub_strcmp(value, "boot_day") == 0)
+                {
+                    g_theme_random = vtoy_theme_random_boot_day;
+                }
+                else if (grub_strcmp(value, "boot_month") == 0)
+                {
+                    g_theme_random = vtoy_theme_random_boot_month;
+                }
+            }
+        }
     }
     
     value = vtoy_json_get_string_ex(json->pstChild, "gfxmode");
     }
     
     value = vtoy_json_get_string_ex(json->pstChild, "gfxmode");
@@ -2816,3 +2914,62 @@ end:
     return 0;
 }
 
     return 0;
 }
 
+grub_err_t ventoy_cmd_set_theme(grub_extcmd_context_t ctxt, int argc, char **args)
+{
+    grub_uint32_t i = 0;
+    grub_uint32_t mod = 0;
+    theme_list *node = g_theme_head;
+    struct grub_datetime datetime;
+    
+    (void)argc;
+    (void)args;
+    (void)ctxt;
+
+    if (g_theme_single_file[0])
+    {
+        debug("single theme %s\n", g_theme_single_file);
+        grub_env_set("theme", g_theme_single_file);
+        goto end;
+    }
+
+    debug("g_theme_num = %d\n", g_theme_num);
+    
+    if (g_theme_num == 0)
+    {
+        goto end;
+    }
+
+    grub_memset(&datetime, 0, sizeof(datetime));
+    grub_get_datetime(&datetime);
+
+    if (g_theme_random == vtoy_theme_random_boot_second)
+    {
+        grub_divmod32((grub_uint32_t)datetime.second, (grub_uint32_t)g_theme_num, &mod);
+    }
+    else if (g_theme_random == vtoy_theme_random_boot_day)
+    {
+        grub_divmod32((grub_uint32_t)datetime.day, (grub_uint32_t)g_theme_num, &mod);
+    }
+    else if (g_theme_random == vtoy_theme_random_boot_month)
+    {
+        grub_divmod32((grub_uint32_t)datetime.month, (grub_uint32_t)g_theme_num, &mod);
+    }
+
+    debug("%04d/%02d/%02d %02d:%02d:%02d radom:%d mod:%d\n",
+          datetime.year, datetime.month, datetime.day,
+          datetime.hour, datetime.minute, datetime.second,
+          g_theme_random, mod);
+
+    for (i = 0; i < mod && node; i++)
+    {
+        node = node->next;
+    }
+
+    debug("random theme %s\n", node->theme.path);
+    grub_env_set("theme", node->theme.path);
+
+end:
+    VENTOY_CMD_RETURN(GRUB_ERR_NONE);
+}
+
+
diff --git a/INSTALL/ExtendPersistentImg.sh b/INSTALL/ExtendPersistentImg.sh
new file mode 100644 (file)
index 0000000..21c8435
--- /dev/null
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+print_usage() {
+    echo 'Usage:  ExtendPersistentImg.sh file size'
+    echo '   file   persistent dat file'
+    echo '   size   extend size in MB'
+    echo 'Example:'
+    echo '   sh ExtendPersistentImg.sh ubuntu.dat 2048'
+    echo ''
+}
+
+if [ -z "$1" -o "$1" = "-h" ]; then
+    print_usage
+    exit 1
+fi
+
+if [ -z "$2" ]; then
+    print_usage
+    exit 1
+fi
+
+file=$1
+size=$2
+
+if [ ! -f "$file" ]; then
+    echo "$file not exist."
+    exit 1
+fi
+
+if echo $size | grep -q "[^0-9]"; then
+    print_usage
+    exit 1
+fi
+
+fsize=$(stat -c '%s' $file)
+
+fsmod=$(expr $fsize % 1024)
+if [ $fsmod -ne 0 ]; then
+    echo "File size of $file is not aligned by 1MB, please check."
+    exit 1
+fi
+
+
+fsMB=$(expr $fsize / 1024 / 1024)
+total=$(expr $fsMB + $size)
+
+magic=$(hexdump -n3 -e  '3/1 "%02X"' $file)
+if [ "$magic" = "584653" ]; then
+    if which xfs_growfs >/dev/null 2>&1; then
+        cmd=xfs_growfs
+    else
+        echo 'xfs_growfs not found, please install xfsprogs first'
+        exit 1
+    fi
+else
+    if which resize2fs >/dev/null 2>&1; then
+        cmd=resize2fs
+    else
+        echo 'resize2fs not found, please install e2fsprogs first'
+        exit 1
+    fi
+fi
+
+
+echo "Extend dat file... (current is ${fsMB}MB, append ${size}MB, total ${total}MB)"
+dd if=/dev/zero bs=1M count=$size status=none >> "$file"
+sync
+
+freeloop=$(losetup -f)
+losetup $freeloop "$file"
+
+if [ "$cmd" = "resize2fs" ]; then    
+    echo "Extend ext filesystem by resize2fs ..."
+    echo "resize2fs $freeloop ${total}M"
+    e2fsck -f $freeloop
+    resize2fs $freeloop ${total}M
+    ret=$?
+else
+    echo "Extend xfs filesystem by xfs_growfs ..."
+
+    tmpdir=$(mktemp -d)
+    mount $freeloop $tmpdir
+    xfs_growfs $freeloop
+    ret=$?
+    umount $tmpdir && rm -rf $tmpdir
+fi
+
+losetup -d $freeloop
+
+echo ""
+if [ $ret -eq 0 ]; then
+    echo "======= SUCCESS ========="
+else
+    echo "======= FAILED ========="
+fi
+echo ""
+
index c90d18963bdd78ec8185ec849b79553d2f674879..645703eb6d8e0c6710fb1e1dc22e86c45e1985cc 100644 (file)
@@ -38,5 +38,12 @@ Please refer https://www.ventoy.net/en/plugin_persistence.html for details.
 
 
 
 
 
 
+========== ExtendPersistentImg.sh ===============
+sudo sh ExtendPersistentImg.sh  file size   
+For example:
+sh ExtendPersistentImg.sh persistence.dat 2048  ---->  Extend persistence.dat by 2048MB
+That is to say, persistence.dat file will grow to 3GB size (assume that it is 1GB size before extend)
+
+Please refer https://www.ventoy.net/en/plugin_persistence.html for details.
 
 
 
 
index 2c8eba2463903651be3c1e763e69017641e3953f..bc26700b56ce491f01996f39db2d7daacc6f6025 100644 (file)
@@ -68,7 +68,7 @@ gfxterm_background: video_colors bitmap_scale gfxterm extcmd video bitmap
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
-linux: verifiers boot fdt
+linux: ventoy verifiers boot fdt
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 part_sun:
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 part_sun:
@@ -93,7 +93,7 @@ terminal:
 div:
 crypto:
 part_bsd: part_msdos
 div:
 crypto:
 part_bsd: part_msdos
-ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd normal video gcry_sha1 iso9660
+ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd datetime div normal video gcry_sha1 iso9660
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
index 21b7116fdaf606e84bddff50feaa8fcc95febd4f..8f231a2390f511109991475ffd260811cf380ae2 100644 (file)
@@ -1796,7 +1796,7 @@ function img_unsupport_menuentry {
 #############################################################
 #############################################################
 
 #############################################################
 #############################################################
 
-set VENTOY_VERSION="1.0.44"
+set VENTOY_VERSION="1.0.45"
 
 #ACPI not compatible with Window7/8, so disable by default
 set VTOY_PARAM_NO_ACPI=1
 
 #ACPI not compatible with Window7/8, so disable by default
 set VTOY_PARAM_NO_ACPI=1
@@ -1932,7 +1932,7 @@ elif [ "$vtoy_display_mode" = "serial_console" ]; then
     terminal_output  serial console    
 else    
     if [ -n "$vtoy_theme" ]; then
     terminal_output  serial console    
 else    
     if [ -n "$vtoy_theme" ]; then
-        set theme=$vtoy_theme
+        vt_set_theme
     else
         set theme=$prefix/themes/ventoy/theme.txt
     fi
     else
         set theme=$prefix/themes/ventoy/theme.txt
     fi
index f101a8fef7122141de677bff66f1cadf9a724c45..970ddfd3545b233047998c9cabe86ee5712cf64b 100644 (file)
@@ -82,7 +82,7 @@ gfxterm_background: video_colors bitmap_scale gfxterm extcmd video bitmap
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
-linux: verifiers video boot relocator mmap
+linux: ventoy verifiers video boot relocator mmap
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
@@ -120,7 +120,7 @@ ehci: cs5536 usb boot
 crypto:
 part_bsd: part_msdos
 cs5536:
 crypto:
 part_bsd: part_msdos
 cs5536:
-ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd normal video gcry_sha1 iso9660
+ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd datetime div normal video gcry_sha1 iso9660
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
index 08cc536ac514720a110448240e0509a5c9fbce08..ce643787aa0516e428739572c03e41de2e7d1b31 100644 (file)
@@ -82,7 +82,7 @@ gfxterm_background: video_colors bitmap_scale gfxterm extcmd video bitmap
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
-linux: verifiers normal vbe video boot relocator mmap
+linux: ventoy verifiers normal vbe video boot relocator mmap
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
@@ -123,7 +123,7 @@ crypto:
 part_bsd: part_msdos
 cs5536: pci
 biosdisk:
 part_bsd: part_msdos
 cs5536: pci
 biosdisk:
-ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd normal video gcry_sha1 iso9660 acpi
+ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf datetime div extcmd normal video gcry_sha1 iso9660 acpi
 lsapm:
 gcry_sha512: crypto
 password: crypto normal
 lsapm:
 gcry_sha512: crypto
 password: crypto normal
index 3164b81bdde85057f809838b048465bfee360238..916d5bd4d6fdf0e73d9d1b154b238d2d5fdf3281 100644 (file)
Binary files a/INSTALL/grub/mips64el-efi/moddep.lst and b/INSTALL/grub/mips64el-efi/moddep.lst differ
index 602117232f40b8aebbb224be20ccd257c06c0dfc..2f7f9af5cf71055723204e8a065ddf4901248422 100644 (file)
@@ -81,7 +81,7 @@ gfxterm_background: video_colors bitmap_scale gfxterm extcmd video bitmap
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
 search_fs_uuid:
 gcry_dsa: pgp mpi
 keystatus: extcmd
-linux: verifiers video boot relocator mmap
+linux: ventoy verifiers video boot relocator mmap
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
 geli: cryptodisk crypto gcry_sha512 pbkdf2 gcry_sha256
 cmdline_cat_test: font functional_test normal procfs video_fb
 rdmsr: extcmd
@@ -120,7 +120,7 @@ ehci: cs5536 usb boot
 crypto:
 part_bsd: part_msdos
 cs5536:
 crypto:
 part_bsd: part_msdos
 cs5536:
-ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd normal video gcry_sha1 iso9660
+ventoy: elf fshelp ext2 btrfs font crypto gcry_md5 exfat udf extcmd datetime div normal video gcry_sha1 iso9660
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
 gcry_sha512: crypto
 password: crypto normal
 fshelp:
index dda7f27fda80a99fa17a874d793b2ab19abb935e..f8815065f9d43d8fdeed40c1e2e254e5ace6781f 100644 (file)
@@ -70,6 +70,22 @@ terminal-box: "terminal_box_*.png"
 }
 
 
 }
 
 
++ hbox{ 
+    left = 30%+200
+    top = 95%-50
+    width = 10%
+    height = 25
+    + label {text = "@VTOY_GRUB2_MODE@" color = "red" align = "left"} 
+}
+
++ hbox{ 
+    left = 30%+200
+    top = 95%-25
+    width = 10%
+    height = 25
+    + label {text = "@VTOY_WIMBOOT_MODE@" color = "red" align = "left"} 
+}
+
 + hbox{ 
     left = 90%
     top = 55 
 + hbox{ 
     left = 90%
     top = 55 
index 11b2a289861571e8553e135b75488602494d7f4a..08e2121d9f4449034039d406f3b8f743defe367d 100644 (file)
@@ -106,11 +106,13 @@ cp $OPT VentoyWebDeepin.sh $tmpdir/
 cp $OPT README $tmpdir/
 cp $OPT plugin $tmpdir/
 cp $OPT CreatePersistentImg.sh $tmpdir/
 cp $OPT README $tmpdir/
 cp $OPT plugin $tmpdir/
 cp $OPT CreatePersistentImg.sh $tmpdir/
+cp $OPT ExtendPersistentImg.sh $tmpdir/
 dos2unix -q $tmpdir/Ventoy2Disk.sh
 dos2unix -q $tmpdir/VentoyWeb.sh
 dos2unix -q $tmpdir/VentoyWebDeepin.sh
 #dos2unix -q $tmpdir/Ventoy.desktop
 dos2unix -q $tmpdir/CreatePersistentImg.sh
 dos2unix -q $tmpdir/Ventoy2Disk.sh
 dos2unix -q $tmpdir/VentoyWeb.sh
 dos2unix -q $tmpdir/VentoyWebDeepin.sh
 #dos2unix -q $tmpdir/Ventoy.desktop
 dos2unix -q $tmpdir/CreatePersistentImg.sh
+dos2unix -q $tmpdir/ExtendPersistentImg.sh
 
 cp $OPT ../LinuxGUI/WebUI $tmpdir/
 sed 's/.*SCRIPT_DEL_THIS \(.*\)/\1/g' -i $tmpdir/WebUI/index.html
 
 cp $OPT ../LinuxGUI/WebUI $tmpdir/
 sed 's/.*SCRIPT_DEL_THIS \(.*\)/\1/g' -i $tmpdir/WebUI/index.html