fi
done
-ventoy_extract_vtloopex ${vtdiskname}2 crux
+# no need since 3.6.1
+$BUSYBOX_PATH/modprobe dax > /dev/null 2>&1
+$BUSYBOX_PATH/modprobe dm-mod > /dev/null 2>&1
+if $GREP -q 'device-mapper' /proc/devices; then
+ vtlog "dm-mod module check success ..."
+else
+ vtlog "Need to load dm-mod module ..."
+ ventoy_extract_vtloopex ${vtdiskname}2 crux
-vtKver=$(uname -r)
-vtLoopExDir=$VTOY_PATH/vtloopex/crux/vtloopex
+ vtKver=$(uname -r)
+ vtLoopExDir=$VTOY_PATH/vtloopex/crux/vtloopex
-ventoy_check_install_module_xz $vtLoopExDir/dm-mod/$vtKver/64/dax.ko
-ventoy_check_install_module_xz $vtLoopExDir/dm-mod/$vtKver/64/dm-mod.ko
+ ventoy_check_install_module_xz $vtLoopExDir/dm-mod/$vtKver/64/dax.ko
+ ventoy_check_install_module_xz $vtLoopExDir/dm-mod/$vtKver/64/dm-mod.ko
+fi
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
# Tested Image Report
[【How to report a successfully tested image file】](https://github.com/ventoy/Ventoy/issues/1195)
-
+# VentoyPlugson
+A GUI Ventoy plugin configurator. [VentoyPlugson](https://www.ventoy.net/en/plugin_plugson.html)
+
# Features
* 100% open source
* Simple to use
* Not only boot but also complete installation process
* Menu dynamically switchable between List/TreeView mode
* "Ventoy Compatible" concept
-* Plugin Framework
+* Plugin Framework and GUI plugin configurator
* Injection files to runtime environment
* Boot configuration file dynamically replacement
* Highly customizable theme and menu
return fd;
}
-static void ventoy_init(char **argv_orig)
+static void ventoy_init(void)
{
pid_t pid, wpid;
int status, error;
/* step 7: swich_root */
vdebug("[VTOY] step 7: switch root ...\n");
- error = chdir("/new_root");
+}
+
+int main(int argc __unused, char **argv)
+{
+ pid_t pid, wpid;
+ int status, error;
+ size_t varsize = sizeof(int);
+
+ /* Dispose of random users. */
+ if (getuid() != 0)
+ errx(1, "%s", strerror(EPERM));
+
+ /* Init is not allowed to die, it would make the kernel panic */
+ signal(SIGTERM, SIG_IGN);
+
+ if ((pid = fork()) == 0) {
+
+ setctty(_PATH_CONSOLE);
+ sysctlbyname("debug.bootverbose", &boot_verbose, &varsize, NULL, 0);
+
+ vdebug("======= Ventoy Init Start ========\n");
+
+ ventoy_init();
+ exit(1); /* force single user mode */
+ }
+
+ do {
+ wpid = waitpid(-1, &status, WUNTRACED);
+ } while (wpid != pid);
+
+ error = chdir("/new_root");
if (error)
- {
- printf("[VTOY] chdir /new_root failed %d\n", error);
goto chroot_failed;
- }
error = chroot_kernel("/new_root");
if (error)
- {
- printf("[VTOY] chroot_kernel /new_root failed %d\n", error);
goto chroot_failed;
- }
error = chroot("/new_root");
if (error)
- {
- printf("[VTOY] chroot /new_root failed %d\n", error);
goto chroot_failed;
- }
- vdebug("[VTOY] step 8: now run /sbin/init ...\n");
- execv("/sbin/init", __DECONST(char **, argv_orig));
+ execv("/sbin/init", __DECONST(char **, argv));
/* We failed to exec /sbin/init in the chroot, sleep forever */
chroot_failed:
- printf("[VTOY] ################### DEAD ################\n");
while(1) {
sleep(3);
};
-}
-
-int main(int argc __unused, char **argv)
-{
- size_t varsize = sizeof(int);
-
- /* Dispose of random users. */
- if (getuid() != 0)
- errx(1, "%s", strerror(EPERM));
-
- /* Init is not allowed to die, it would make the kernel panic */
- signal(SIGTERM, SIG_IGN);
-
- setctty(_PATH_CONSOLE);
-
- sysctlbyname("debug.bootverbose", &boot_verbose, &varsize, NULL, 0);
-
- vdebug("======= Ventoy Init Start ========\n");
-
- ventoy_init(argv);
return 1;
}