static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
+ int TmpIdx;
int count = 0;
const char *env;
char c;
return 0;
}
- /* the 1st parameter is BOOT_IMAGE=xxxx */
- if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
+ /* To avoid --- parameter, we split two parts */
+ for (TmpIdx = 0; TmpIdx < argc; TmpIdx++)
{
- ventoy_linux_args[count++] = grub_strdup(argv[0]);
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
+ {
+ continue;
+ }
+
+ if (grub_strncmp(argv[TmpIdx], "--", 2) == 0)
+ {
+ break;
+ }
+
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
}
for (i = 0; i < ventoy_linux_argc; i++)
}
}
- /* We have processed the 1st parameter before, so start from 1 */
- for (i = 1; i < argc; i++)
+ while (TmpIdx < argc)
{
- if (ventoy_boot_opt_filter(argv[i]))
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
{
continue;
}
- ventoy_linux_args[count++] = grub_strdup(argv[i]);
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
+ TmpIdx++;
}
if (ventoy_debug)
static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
+ int TmpIdx;
int count = 0;
const char *env;
char c;
return 0;
}
- /* the 1st parameter is BOOT_IMAGE=xxxx */
- if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
+ /* To avoid --- parameter, we split two parts */
+ for (TmpIdx = 0; TmpIdx < argc; TmpIdx++)
{
- ventoy_linux_args[count++] = grub_strdup(argv[0]);
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
+ {
+ continue;
+ }
+
+ if (grub_strncmp(argv[TmpIdx], "--", 2) == 0)
+ {
+ break;
+ }
+
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
}
for (i = 0; i < ventoy_linux_argc; i++)
}
}
- /* We have processed the 1st parameter before, so start from 1 */
- for (i = 1; i < argc; i++)
+ while (TmpIdx < argc)
{
- if (ventoy_boot_opt_filter(argv[i]))
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
{
continue;
}
- ventoy_linux_args[count++] = grub_strdup(argv[i]);
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
+ TmpIdx++;
}
if (ventoy_debug)
static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
+ int TmpIdx;
int count = 0;
const char *env;
char c;
return 0;
}
- /* the 1st parameter is BOOT_IMAGE=xxxx */
- if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
+ /* To avoid --- parameter, we split two parts */
+ for (TmpIdx = 0; TmpIdx < argc; TmpIdx++)
{
- ventoy_linux_args[count++] = grub_strdup(argv[0]);
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
+ {
+ continue;
+ }
+
+ if (grub_strncmp(argv[TmpIdx], "--", 2) == 0)
+ {
+ break;
+ }
+
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
}
for (i = 0; i < ventoy_linux_argc; i++)
}
}
- /* We have processed the 1st parameter before, so start from 1 */
- for (i = 1; i < argc; i++)
+ while (TmpIdx < argc)
{
- if (ventoy_boot_opt_filter(argv[i]))
+ if (ventoy_boot_opt_filter(argv[TmpIdx]))
{
continue;
}
- ventoy_linux_args[count++] = grub_strdup(argv[i]);
+ ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
+ TmpIdx++;
}
if (ventoy_debug)
--- /dev/null
+#!/ventoy/busybox/sh
+#************************************************************************************
+# Copyright (c) 2020, longpanda <admin@ventoy.net>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+#************************************************************************************
+
+. /ventoy/hook/ventoy-hook-lib.sh
+
+if is_ventoy_hook_finished; then
+ exit 0
+fi
+
+vtlog "####### $0 $* ########"
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+wait_for_usb_disk_ready
+
+vtdiskname=$(get_ventoy_disk_name)
+if [ "$vtdiskname" = "unknown" ]; then
+ vtlog "ventoy disk not found"
+ PATH=$VTPATH_OLD
+ exit 0
+fi
+
+modprobe dm-mod
+
+ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
+
+ventoy_create_dev_ventoy_part
+
+if [ -n "${FSUUID}" ]; then
+ vtPartid=0
+ MaxPart=$(cat /vtoy_dm_table|wc -l)
+
+ while [ $vtPartid -le $MaxPart ]; do
+ if blkid /dev/dm-${vtPartid} | grep -q "${FSUUID}"; then
+ ln -s ../../dm-${vtPartid} "/dev/disk/by-uuid/${FSUUID}"
+ break
+ fi
+ vtPartid=$(expr $vtPartid + 1)
+ done
+fi
+
+
+PATH=$VTPATH_OLD
+
+set_ventoy_hook_finish
--- /dev/null
+#!/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 "/^mount_premount$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/loop/tails/ventoy-disk.sh" -i /init
+
+if [ -f /scripts/init-premount/partitioning ]; then
+ $SED "1a exit 0" -i /scripts/init-premount/partitioning
+fi
fi
}
+get_browser_cmd() {
+ if uos-browser --version > /dev/null 2>&1; then
+ echo "uos-browser"; return
+ else
+ echo "browser"
+ fi
+}
uid=$(id -u)
if [ $uid -ne 0 ]; then
LOGFILE=log.txt
if [ -e $LOGFILE ]; then
- chown $VUSER $LOGFILE
+ LogGroup=$(stat -c '%G' $LOGFILE)
+ if [ "$LogGroup" = "root" ]; then
+ rm -f $LOGFILE
+ su $VUSER -c "touch $LOGFILE"
+ fi
else
su $VUSER -c "touch $LOGFILE"
fi
fi
rm -rf ./*_VTMPDIR
-vtWebTmpDir=$(mktemp -d -p ./ --suffix=_VTMPDIR)
-chown $VUSER $vtWebTmpDir
-
+vtWebTmpDir=$(su $VUSER -c "mktemp -d -p ./ --suffix=_VTMPDIR")
V2DServer "$HOST" "$PORT" &
V2DPid=$!
sleep 1
-su $VUSER -c "browser --window-size=550,400 --app=\"http://${HOST}:${PORT}/index.html?chrome-app\" --user-data-dir=$vtWebTmpDir >> $LOGFILE 2>&1" &
+browsercmd=$(get_browser_cmd)
+su $VUSER -c "$browsercmd --window-size=550,400 --app=\"http://${HOST}:${PORT}/index.html?chrome-app\" --user-data-dir=$vtWebTmpDir >> $LOGFILE 2>&1" &
WebPid=$!
vt_unset_boot_opt
}
+function ventoy_img_tails {
+ vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+ vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
+
+ ventoy_debug_pause
+
+ #boot image file
+ vt_set_boot_opt rdinit=/vtoy/vtoy live-media=/dev/dm-1 ventoyos=tails
+ vt_img_hook_root
+
+ set root=(vtimghd,1)
+ configfile (vtimghd,1)/efi/debian/grub.cfg
+
+ vt_img_unhook_root
+ vt_unset_boot_opt
+}
+
function ventoy_img_memtest86 {
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
boot
set vtback_root=$root
ventoy_cli_console
vt_push_last_entry
+ set vtback_theme=$theme
+ unset theme
vt_img_extra_initrd_reset
ventoy_img_freedombox
elif vt_str_begin "$vtImgHd1Label" "BATOCERA"; then
ventoy_img_batocera
+ elif vt_str_begin "$vtImgHd1Label" "Tails"; then
+ ventoy_img_tails
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
ventoy_img_recalbox
elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
set root=$vtback_root
vt_pop_last_entry
+ set theme=$vtback_theme
ventoy_gui_console
set ventoy_compatible=NO
}
{
return 0;
}
+
+ /* /dev/zramX */
+ if (name[0] == 'z' && name[1] == 'r' && name[2] == 'a' && name[3] == 'm')
+ {
+ return 0;
+ }
/* /dev/loopX */
if (name[0] == 'l' && name[1] == 'o' && name[2] == 'o' && name[3] == 'p')