Amikor először láttam ezt a szálat, meg akartam kérdezni, hogy mivel lenne ez jobb az efistub-nál amit most használok, de már látom :) A Backup indítás egyszerűsítésének lehetősége felvillanyozott, írtam hozzá egy ebuildet gentoo-ra:
sys-boot/simpleboot-9999.ebuild
# Copyright 2023 ......
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit git-r3
DESCRIPTION="Dependency-free, suckless bootable disk image creator"
HOMEPAGE="https://gitlab.com/bztsrc/simpleboot"
EGIT_REPO_URI="${HOMEPAGE}.git"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="rebuild"
BDEPEND="
rebuild? (
dev-lang/fasm
sys-devel/llvm
sys-devel/lld
)
"
src_prepare() {
default
# Nothing specific to prepare
}
src_compile() {
if use rebuild; then
emake -C src distclean || die "Failed to execute 'make -C src distclean'"
fi
emake -C src -j1 || die "Failed to build simpleboot"
}
src_install() {
dobin src/simpleboot || die "Failed to install simpleboot"
# Create the /etc/simpleboot directory if it does not exist
dodir /etc/simpleboot
# Copy the example/simpleboot.cfg as simpleboot.cfg to /etc/simpleboot
insinto /etc/simpleboot
newins example/simpleboot.cfg simpleboot.cfg.example || die "Failed to copy simpleboot.cfg"
}
pkg_config() {
einfo "Creating Simpleboot configuration file in /etc/simpleboot directory..."
# Simpleboot configuration file creation in the /etc/simpleboot directory
local simpleboot_cfg="${EROOT}/etc/simpleboot/simpleboot.cfg"
local kernel_list=("${EROOT}"/boot/vmlinuz-*)
# Find the latest and oldest kernel version
local latest_kernel_version=""
local oldest_kernel_version=""
for kernel_file in "${kernel_list[@]}"; do
kernel_version=$(basename "${kernel_file}" | cut -d- -f2-)
if [[ -z "${latest_kernel_version}" ]] || [[ "${kernel_version}" > "${latest_kernel_version}" ]]; then
latest_kernel_version="${kernel_version}"
fi
if [[ -z "${oldest_kernel_version}" ]] || [[ "${kernel_version}" < "${oldest_kernel_version}" ]]; then
oldest_kernel_version="${kernel_version}"
fi
done
echo "# New" > "${simpleboot_cfg}"
echo "verbose 2" >> "${simpleboot_cfg}"
echo "kernel vmlinuz-${latest_kernel_version}" >> "${simpleboot_cfg}"
echo "module initramfs-${latest_kernel_version}.img" >> "${simpleboot_cfg}"
echo "framebuffer 1920 1080 32" >> "${simpleboot_cfg}"
echo "bootsplash #af00d7 splash.tga" >> "${simpleboot_cfg}"
echo "" >> "${simpleboot_cfg}"
echo "# Backup" >> "${simpleboot_cfg}"
echo "verbose 3" >> "${simpleboot_cfg}"
echo "backupkernel vmlinuz-${oldest_kernel_version}" >> "${simpleboot_cfg}"
echo "backupmodule initramfs-${oldest_kernel_version}.img" >> "${simpleboot_cfg}"
echo "backupframebuffer 640 480 32" >> "${simpleboot_cfg}"
echo "backupbootsplash #af00d7 backup_splash.tga" >> "${simpleboot_cfg}"
# Print the content of the configuration file
einfo "Content of Simpleboot configuration file:"
cat "${simpleboot_cfg}"
# Check if the configuration file exists in /etc/simpleboot
if [[ -e "${EROOT}/etc/simpleboot/simpleboot.cfg" ]]; then
einfo "Configuration file successfully copied to /etc/simpleboot."
else
ewarn "Failed to copy configuration file to /etc/simpleboot."
fi
}
A használata: emerge -av sys-boot/simpleboot vagy USE="rebuild" sys-boot/simpleboot. Ez utóbbi a distclean-t valósítja meg. Ezen túl az emerge --config sys-boot/simpleboot kikeresei a két legutóbbi bejegyzést a /boot alatt és elmenti a /etc/simpleboot/simpleboot.cfg-ba a találtakat és a régebbit beállítja backupnak.
Eddig működik is, de az optimalizációm nem teljes és a dracut initrd-je túl nagynak bizonyul, mert miután másolom a cfg-t a boot-ba és elindítom, akkor az eredmény:
$ simpleboot -vv ./ /simpleboot.img
Adding: initramfs-6.3.5-gentoo-dist.img
simpleboot: not enough space
Hely van bőven, nem az a baj! A fordítás gcc-vel megy, az llvm és az fasm csak akkor kerül képbe ha a rebuild jelző be van állítva.
Az ebuild használható, hátha valaki kipróbálná, az initrd-n még dolgozom, mert a firmware csomagot érzésem szerint teljesen belerakja a dracut. Ha esetleg van valami a dracut helyett ami ajánlott és használjátok, szívesen kipróbálnám.