support for tails.img

This commit is contained in:
longpanda 2021-03-09 17:17:46 +08:00
parent 83d91c525f
commit dce5d1b769
13 changed files with 184 additions and 26 deletions

View File

@ -304,6 +304,7 @@ static int ventoy_boot_opt_filter(char *opt)
static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
int TmpIdx;
int count = 0;
const char *env;
char c;
@ -317,10 +318,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
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++)
@ -392,15 +403,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
}
}
/* 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)

View File

@ -530,6 +530,7 @@ static int ventoy_boot_opt_filter(char *opt)
static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
int TmpIdx;
int count = 0;
const char *env;
char c;
@ -543,10 +544,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
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++)
@ -618,15 +629,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
}
}
/* 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)

View File

@ -252,6 +252,7 @@ static int ventoy_boot_opt_filter(char *opt)
static int ventoy_bootopt_hook(int argc, char *argv[])
{
int i;
int TmpIdx;
int count = 0;
const char *env;
char c;
@ -265,10 +266,20 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
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++)
@ -340,15 +351,15 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
}
}
/* 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)

View File

@ -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

View 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 "/^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

View File

@ -28,6 +28,13 @@ get_user() {
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
@ -101,7 +108,11 @@ VUSER=$(get_user)
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
@ -121,15 +132,14 @@ if [ -f ./tool/$TOOLDIR/V2DServer.xz ]; then
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=$!

View File

@ -1480,6 +1480,23 @@ function ventoy_img_batocera {
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
@ -1518,6 +1535,8 @@ function img_common_menuentry {
set vtback_root=$root
ventoy_cli_console
vt_push_last_entry
set vtback_theme=$theme
unset theme
vt_img_extra_initrd_reset
@ -1544,6 +1563,8 @@ function img_common_menuentry {
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
@ -1568,6 +1589,7 @@ function img_common_menuentry {
set root=$vtback_root
vt_pop_last_entry
set theme=$vtback_theme
ventoy_gui_console
set ventoy_compatible=NO
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -233,6 +233,12 @@ static int ventoy_is_possible_blkdev(const char *name)
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')
{