> Plusz az efistub nem tud normál ELF meg PE kerneleket tölteni Multiboot2-vel ;-)
Úgy értettem,hogy nekem mivel lenne jobb :) A backup egyszerűbb indítása már előny!
> Nagyszerű, köszönöm! Ezt érdemes lenne valahogy berakni a repóba, ha hozzájárulsz. Attribution requirements?
Előbb legyen egy 0.0.1-es verzió, mint mérföldkő és mellette a -9999 git verzió, aztán mehet. Csak git verzió azért nem jó, mert ha épp egy olyan pillanatban készül bináris ami eltörik, nincsen hová visszalépni és úgy sosem kerülhet be a hivatalos repóba.
> Félreérted, a generálandó lemezképen nincs elég hely! Alapból 33 Mb-sre csinálja (a lehető legkissebb FAT32, ami létrehozható). Add meg "-p <mb>" kapcsolóval megabájtban, hogy mekkora boot partíciót szeretnél. (Ez azért kell, mert előre, még a másolás elkezdése előtt tudni kell, mekkora területet fog lefoglalni a FAT tábla.)
Ahh... :) Szóval csak optimalizálni kell valahogyan az initrd generálást, a dracut legutóbbi initrd-je 60+ Mb.
Épp dolgozom egy minimalizált hypervisoron gentoo alapokon. A képességei az összes járatos konténer technika és virtualizáció telepítésének lehetősége, de választhatóan: egyik vagy másik konténer, minden konténer akár, virtualizációval vagy nélküle. A telepítőt írom éppen és mivel a minimalizált helyfoglalás a célom, a projekted nagyon is beleillik! Egyelőre a rootfs-el voltam elfoglalva, kicsit ránézek az initrd generálásra, mert ez eddig fel sem tűnt, hogy ekkora bazi nagy és ezt a szálat követem.
Szerk: közben látom, hogy 6 órája megszületett a 0.0.1-es verzió, így a módosított ebuild a következő:
# Copyright 2023 .....
# Distributed under the terms of the GNU General Public License v2
EAPI=7
DESCRIPTION="Dependency-free, suckless bootable disk image creator"
HOMEPAGE="https://gitlab.com/bztsrc/simpleboot"
LICENSE="MIT"
SLOT="0"
IUSE="rebuild"
# If PV starts with 9999, use git-r3 for version control
if [[ ${PV} == 9999* ]]; then
inherit git-r3
EGIT_REPO_URI='https://gitlab.com/bztsrc/simpleboot.git'
else
inherit vcs-snapshot
EGIT_COMMIT="28164466"
SRC_URI="https://gitlab.com/bztsrc/simpleboot/-/archive/${EGIT_COMMIT}/simpleboot-${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
KEYWORDS="~amd64 ~x86"
fi
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}"
# Calculate the size of the latest kernel file
local latest_kernel_file="${EROOT}/boot/vmlinuz-${latest_kernel_version}"
local latest_kernel_size=0
if [[ -f "${latest_kernel_file}" ]]; then
latest_kernel_size=$(stat -c %s "${latest_kernel_file}")
fi
# Calculate the size of related initramfs and splash files
local initramfs_file="${EROOT}/boot/initramfs-${latest_kernel_version}.img"
local initramfs_size=0
if [[ -f "${initramfs_file}" ]]; then
initramfs_size=$(stat -c %s "${initramfs_file}")
fi
local splash_file="${EROOT}/boot/splash.tga"
local splash_size=0
if [[ -f "${splash_file}" ]]; then
splash_size=$(stat -c %s "${splash_file}")
fi
# Calculate the total size of the latest files
local latest_total_size=$((latest_kernel_size + initramfs_size + splash_size))
# Calculate the size of the oldest kernel file
local oldest_kernel_file="${EROOT}/boot/vmlinuz-${oldest_kernel_version}"
local oldest_kernel_size=0
if [[ -f "${oldest_kernel_file}" ]]; then
oldest_kernel_size=$(stat -c %s "${oldest_kernel_file}")
fi
# Calculate the size of related backup initramfs and splash files
local backup_initramfs_file="${EROOT}/boot/initramfs-${oldest_kernel_version}.img"
local backup_initramfs_size=0
if [[ -f "${backup_initramfs_file}" ]]; then
backup_initramfs_size=$(stat -c %s "${backup_initramfs_file}")
fi
local backup_splash_file="${EROOT}/boot/backup_splash.tga"
local backup_splash_size=0
if [[ -f "${backup_splash_file}" ]]; then
backup_splash_size=$(stat -c %s "${backup_splash_file}")
fi
# Calculate the total size of the oldest files
local oldest_total_size=$((oldest_kernel_size + backup_initramfs_size + backup_splash_size))
# Calculate the overall total size
local overall_total_size=$((latest_total_size + oldest_total_size))
# Print the sizes of the latest and oldest files
einfo "Size of the latest files: ${latest_total_size} bytes"
einfo "Size of the oldest files: ${oldest_total_size} bytes"
# Check if the total size is too large
if [[ ${overall_total_size} -gt 33000000 ]]; then
ewarn "Total size of related files is too large (${overall_total_size} bytes). The generated image exceeds the allowed 33 MB size."
fi
# 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
}
ezt kell menteni simpleboot-9999.ebuild néven majd másolni a simpleboot-0.0.1.ebuild fájlba. Ezen a ponton a 28164466 Commit lesz a 0.0.1-es verzió amíg nem lesz egy hivatalos letölthető 0.0.1 kiadás. Egyúttal a --config kiírja a konzolra az méreteket is és figyelmeztet ha a méret túl nagy.
A telepítés menetét is beleteheted a doksiba ha gondolod.
Saját repo létrehozása után a fájlokat a repo alatt a sys-boot/simpleboot mappába kell helyezni, majd
ebuild simpleboot-0.0.1.ebuild digest
parancs ami létrehozza a Manifest fájlt. Ezután a
echo "sys-boot/simpleboot ~amd64" >> /etc/portage/package.accept_keywords/sys-boot
engedélyezi a nem stabilnak kikiáltott csomagunkat és így telepíthető a
emerge -pv sys-boot/simpleboot
emerge -pv =sys-boot/simpleboot-9999
USE="rebuild" emerge -pv sys-boot/simpleboot
parancsok valamelyikével (a -p elhagyása után települ, így csak megmutatja, hogy mi történne ha...)
PS: az EGIT_COMMIT="28164466" helyett jobban tetszene egy kiadott verzió, egyszerűbben karbantartható az ebuild, mert akkor nem commit alapján kezeljük a verziót, hanem kiadás alapján.