static char *g_part_list_buf = NULL;
static int g_part_list_pos = 0;
+static grub_uint64_t g_part_end_max = 0;
static int g_video_mode_max = 0;
static int g_video_mode_num = 0;
static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_partition_t partition, void *data)
{
+ grub_uint64_t end_max = 0;
int *pCnt = (int *)data;
(void)disk;
g_part_list_pos += grub_snprintf(g_part_list_buf + g_part_list_pos, VTOY_MAX_SCRIPT_BUF - g_part_list_pos,
"0 %llu linear /dev/ventoy %llu\n",
(ulonglong)partition->len, (ulonglong)partition->start);
+
+ end_max = (partition->len + partition->start) * 512;
+ if (end_max > g_part_end_max)
+ {
+ g_part_end_max = end_max;
+ }
return 0;
}
(void)ctxt;
g_part_list_pos = 0;
+ g_part_end_max = 0;
grub_env_unset("vtoy_img_part_file");
if (argc != 1)
grub_snprintf(buf, sizeof(buf), "%d", cnt);
grub_env_set("vtoy_img_part_cnt", buf);
+
+ grub_snprintf(buf, sizeof(buf), "%llu", (ulonglong)g_part_end_max);
+ grub_env_set("vtoy_img_max_part_end", buf);
end:
vtKv=$($BUSYBOX_PATH/uname -r)
- if [ -d /lib/modules/$vtKv/kernel/fs ]; then
+ if [ ! -d /lib/modules/$vtKv ]; then
+ vtlog "No modules directory found"
+ return
+ elif [ -d /lib/modules/$vtKv/kernel/fs ]; then
vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1)
else
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
vtlog "template module is $vtModPath $vtModName"
- if echo $vtModPath | $GREP -q "[.]ko$"; then
+ if [ -z "$vtModPath" ]; then
+ vtlog "No template module found"
+ return
+ elif echo $vtModPath | $GREP -q "[.]ko$"; then
$BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName
elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then
$BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName
--- /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
+
+VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
+
+if [ -f /vtoy_dm_table ]; then
+ vtPartCnt=$(cat /vtoy_dm_table | wc -l)
+ if [ $vtPartCnt -ne 1 ]; then
+ exit 0
+ fi
+else
+ exit 0
+fi
+
+vtlog "try patch init script"
+
+if [ -f /new_root/etc/init.d/S11share ]; then
+ cp -a /new_root/etc/init.d/S11share /new_root/overlay/S11share
+ sed "/^ *createMissingPartitions *$/r $VTOY_PATH/loop/recalbox/ventoy-share.sh" -i /new_root/overlay/S11share
+
+ vtFile=$(ls -1 /new_root/etc/init.d/ | grep -m1 S01)
+
+ mount --bind /new_root/overlay/S11share /new_root/etc/init.d/$vtFile
+ vtlog "patch S11share to $vtFile"
+fi
+
+PATH=$VTPATH_OLD
exit 0
fi
+if [ -f $VTOY_PATH/modules/dm-mod.ko ]; then
+ insmod $VTOY_PATH/modules/dm-mod.ko
+fi
+
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
ventoy_create_dev_ventoy_part
+
PATH=$VTPATH_OLD
set_ventoy_hook_finish
. $VTOY_PATH/hook/ventoy-os-lib.sh
$SED "/mount.*devtmpfs/a\ $BUSYBOX_PATH/sh $VTOY_PATH/loop/recalbox/ventoy-disk.sh" -i /init
+$SED "/switch_root/i\ $BUSYBOX_PATH/sh $VTOY_PATH/loop/recalbox/ventoy-create-part.sh" -i /init
+#$SED "/switch_root/i\ exec /ventoy/busybox/sh" -i /init
--- /dev/null
+echo '#################################################' > /dev/console
+echo '#################################################' > /dev/console
+echo '### PLEASE REBOOT AND BOOT FROM VENTOY AGAIN ###' > /dev/console
+echo '#################################################' > /dev/console
+echo '#################################################' > /dev/console
+
+echo '#################################################' > /dev/tty0
+echo '#################################################' > /dev/tty0
+echo '### PLEASE REBOOT AND BOOT FROM VENTOY AGAIN ###' > /dev/tty0
+echo '#################################################' > /dev/tty0
+echo '#################################################' > /dev/tty0
+
+
+sync
+sleep 3600
}
function ventoy_img_recalbox {
+ if [ $vtoy_img_max_part_end -gt $vt_chosen_size ]; then
+ echo -e "\nPlease extend the img file size before boot it. \n"
+ ventoy_pause
+ return
+ fi
+
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
+ if [ -e (vtimghd,1)/boot/recalbox ]; then
+ loopback recalbox (vtimghd,1)/boot/recalbox
+ vt_get_lib_module_ver (recalbox) /lib/modules/ vt_module_ver
+ if [ -n "$vt_module_ver" ]; then
+ vt_img_extra_initrd_append (recalbox)/lib/modules/$vt_module_ver/kernel/drivers/md/dm-mod.ko
+ fi
+ fi
+
ventoy_debug_pause
#boot image file
ventoy_img_batocera
elif vt_str_begin "$vtImgHd1Label" "Tails"; then
ventoy_img_tails
- elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
+ elif [ "$vtImgHd2Label" = "RECALBOX" -o "$vtImgHd1Label" = "RECALBOX" ]; then
ventoy_img_recalbox
elif [ "$vtImgHd1Label" = "ESYSRESCUE" ]; then
ventoy_img_esysrescue