mirror of https://github.com/ventoy/Ventoy.git
support for tails.img
This commit is contained in:
parent
83d91c525f
commit
dce5d1b769
|
@ -304,6 +304,7 @@ static int ventoy_boot_opt_filter(char *opt)
|
||||||
static int ventoy_bootopt_hook(int argc, char *argv[])
|
static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int TmpIdx;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
const char *env;
|
const char *env;
|
||||||
char c;
|
char c;
|
||||||
|
@ -317,10 +318,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the 1st parameter is BOOT_IMAGE=xxxx */
|
/* To avoid --- parameter, we split two parts */
|
||||||
if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
|
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++)
|
for (i = 0; i < ventoy_linux_argc; i++)
|
||||||
|
@ -392,15 +403,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We have processed the 1st parameter before, so start from 1 */
|
while (TmpIdx < argc)
|
||||||
for (i = 1; i < argc; i++)
|
|
||||||
{
|
{
|
||||||
if (ventoy_boot_opt_filter(argv[i]))
|
if (ventoy_boot_opt_filter(argv[TmpIdx]))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_linux_args[count++] = grub_strdup(argv[i]);
|
ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
|
||||||
|
TmpIdx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ventoy_debug)
|
if (ventoy_debug)
|
||||||
|
|
|
@ -530,6 +530,7 @@ static int ventoy_boot_opt_filter(char *opt)
|
||||||
static int ventoy_bootopt_hook(int argc, char *argv[])
|
static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int TmpIdx;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
const char *env;
|
const char *env;
|
||||||
char c;
|
char c;
|
||||||
|
@ -543,10 +544,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the 1st parameter is BOOT_IMAGE=xxxx */
|
/* To avoid --- parameter, we split two parts */
|
||||||
if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
|
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++)
|
for (i = 0; i < ventoy_linux_argc; i++)
|
||||||
|
@ -618,15 +629,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We have processed the 1st parameter before, so start from 1 */
|
while (TmpIdx < argc)
|
||||||
for (i = 1; i < argc; i++)
|
|
||||||
{
|
{
|
||||||
if (ventoy_boot_opt_filter(argv[i]))
|
if (ventoy_boot_opt_filter(argv[TmpIdx]))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_linux_args[count++] = grub_strdup(argv[i]);
|
ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
|
||||||
|
TmpIdx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ventoy_debug)
|
if (ventoy_debug)
|
||||||
|
|
|
@ -252,6 +252,7 @@ static int ventoy_boot_opt_filter(char *opt)
|
||||||
static int ventoy_bootopt_hook(int argc, char *argv[])
|
static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int TmpIdx;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
const char *env;
|
const char *env;
|
||||||
char c;
|
char c;
|
||||||
|
@ -265,10 +266,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the 1st parameter is BOOT_IMAGE=xxxx */
|
/* To avoid --- parameter, we split two parts */
|
||||||
if (argc > 0 && 0 == ventoy_boot_opt_filter(argv[0]))
|
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++)
|
for (i = 0; i < ventoy_linux_argc; i++)
|
||||||
|
@ -340,15 +351,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We have processed the 1st parameter before, so start from 1 */
|
while (TmpIdx < argc)
|
||||||
for (i = 1; i < argc; i++)
|
|
||||||
{
|
{
|
||||||
if (ventoy_boot_opt_filter(argv[i]))
|
if (ventoy_boot_opt_filter(argv[TmpIdx]))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_linux_args[count++] = grub_strdup(argv[i]);
|
ventoy_linux_args[count++] = grub_strdup(argv[TmpIdx]);
|
||||||
|
TmpIdx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ventoy_debug)
|
if (ventoy_debug)
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
#!/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
|
|
@ -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 "/^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
|
|
@ -28,6 +28,13 @@ get_user() {
|
||||||
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)
|
uid=$(id -u)
|
||||||
if [ $uid -ne 0 ]; then
|
if [ $uid -ne 0 ]; then
|
||||||
|
@ -101,7 +108,11 @@ VUSER=$(get_user)
|
||||||
|
|
||||||
LOGFILE=log.txt
|
LOGFILE=log.txt
|
||||||
if [ -e $LOGFILE ]; then
|
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
|
else
|
||||||
su $VUSER -c "touch $LOGFILE"
|
su $VUSER -c "touch $LOGFILE"
|
||||||
fi
|
fi
|
||||||
|
@ -121,15 +132,14 @@ if [ -f ./tool/$TOOLDIR/V2DServer.xz ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf ./*_VTMPDIR
|
rm -rf ./*_VTMPDIR
|
||||||
vtWebTmpDir=$(mktemp -d -p ./ --suffix=_VTMPDIR)
|
vtWebTmpDir=$(su $VUSER -c "mktemp -d -p ./ --suffix=_VTMPDIR")
|
||||||
chown $VUSER $vtWebTmpDir
|
|
||||||
|
|
||||||
|
|
||||||
V2DServer "$HOST" "$PORT" &
|
V2DServer "$HOST" "$PORT" &
|
||||||
V2DPid=$!
|
V2DPid=$!
|
||||||
sleep 1
|
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=$!
|
WebPid=$!
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1480,6 +1480,23 @@ function ventoy_img_batocera {
|
||||||
vt_unset_boot_opt
|
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 {
|
function ventoy_img_memtest86 {
|
||||||
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
|
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
|
||||||
boot
|
boot
|
||||||
|
@ -1518,6 +1535,8 @@ function img_common_menuentry {
|
||||||
set vtback_root=$root
|
set vtback_root=$root
|
||||||
ventoy_cli_console
|
ventoy_cli_console
|
||||||
vt_push_last_entry
|
vt_push_last_entry
|
||||||
|
set vtback_theme=$theme
|
||||||
|
unset theme
|
||||||
|
|
||||||
vt_img_extra_initrd_reset
|
vt_img_extra_initrd_reset
|
||||||
|
|
||||||
|
@ -1544,6 +1563,8 @@ function img_common_menuentry {
|
||||||
ventoy_img_freedombox
|
ventoy_img_freedombox
|
||||||
elif vt_str_begin "$vtImgHd1Label" "BATOCERA"; then
|
elif vt_str_begin "$vtImgHd1Label" "BATOCERA"; then
|
||||||
ventoy_img_batocera
|
ventoy_img_batocera
|
||||||
|
elif vt_str_begin "$vtImgHd1Label" "Tails"; then
|
||||||
|
ventoy_img_tails
|
||||||
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
|
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
|
||||||
ventoy_img_recalbox
|
ventoy_img_recalbox
|
||||||
elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
|
elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
|
||||||
|
@ -1568,6 +1589,7 @@ function img_common_menuentry {
|
||||||
|
|
||||||
set root=$vtback_root
|
set root=$vtback_root
|
||||||
vt_pop_last_entry
|
vt_pop_last_entry
|
||||||
|
set theme=$vtback_theme
|
||||||
ventoy_gui_console
|
ventoy_gui_console
|
||||||
set ventoy_compatible=NO
|
set ventoy_compatible=NO
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -232,6 +232,12 @@ static int ventoy_is_possible_blkdev(const char *name)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* /dev/zramX */
|
||||||
|
if (name[0] == 'z' && name[1] == 'r' && name[2] == 'a' && name[3] == 'm')
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* /dev/loopX */
|
/* /dev/loopX */
|
||||||
if (name[0] == 'l' && name[1] == 'o' && name[2] == 'o' && name[3] == 'p')
|
if (name[0] == 'l' && name[1] == 'o' && name[2] == 'o' && name[3] == 'p')
|
||||||
|
|
Loading…
Reference in New Issue