( dzsolt | 2023. 07. 21., p – 22:23 )

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.