|
|
|
|
@@ -516,12 +516,12 @@ validate_iso_live_boot_entries() {
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
grep -q 'menuentry "EASY-BEE"' "$grub_cfg" || {
|
|
|
|
|
grep -q 'menuentry "EASY-BEE v' "$grub_cfg" || {
|
|
|
|
|
echo "ERROR: GRUB default EASY-BEE entry is missing" >&2
|
|
|
|
|
rm -f "$grub_cfg" "$isolinux_cfg"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
grep -q 'menuentry "EASY-BEE -- load to RAM (toram)"' "$grub_cfg" || {
|
|
|
|
|
grep -q 'menuentry "EASY-BEE v.* -- load to RAM (toram)"' "$grub_cfg" || {
|
|
|
|
|
echo "ERROR: GRUB toram entry is missing" >&2
|
|
|
|
|
rm -f "$grub_cfg" "$isolinux_cfg"
|
|
|
|
|
exit 1
|
|
|
|
|
@@ -562,40 +562,38 @@ validate_iso_live_boot_entries() {
|
|
|
|
|
echo "=== live boot validation OK ==="
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validate_iso_grub_theme_assets() {
|
|
|
|
|
validate_iso_grub_assets() {
|
|
|
|
|
iso_path="$1"
|
|
|
|
|
echo "=== validating GRUB theme assets in ISO ==="
|
|
|
|
|
echo "=== validating GRUB assets in ISO ==="
|
|
|
|
|
|
|
|
|
|
[ -f "$iso_path" ] || {
|
|
|
|
|
echo "ERROR: ISO not found for GRUB theme validation: $iso_path" >&2
|
|
|
|
|
echo "ERROR: ISO not found for GRUB asset validation: $iso_path" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
require_iso_reader "$iso_path" >/dev/null 2>&1 || {
|
|
|
|
|
echo "ERROR: ISO reader unavailable for GRUB theme validation" >&2
|
|
|
|
|
echo "ERROR: ISO reader unavailable for GRUB asset validation" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iso_files="$(mktemp)"
|
|
|
|
|
iso_list_files "$iso_path" > "$iso_files" || {
|
|
|
|
|
echo "ERROR: failed to list ISO files for GRUB theme validation" >&2
|
|
|
|
|
echo "ERROR: failed to list ISO files for GRUB asset validation" >&2
|
|
|
|
|
rm -f "$iso_files"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for required in \
|
|
|
|
|
boot/grub/config.cfg \
|
|
|
|
|
boot/grub/theme.cfg \
|
|
|
|
|
boot/grub/live-theme/theme.txt \
|
|
|
|
|
boot/grub/live-theme/bee-logo.tga; do
|
|
|
|
|
boot/grub/grub.cfg; do
|
|
|
|
|
grep -q "^${required}$" "$iso_files" || {
|
|
|
|
|
echo "ERROR: missing GRUB theme asset in ISO: ${required}" >&2
|
|
|
|
|
echo "ERROR: missing GRUB asset in ISO: ${required}" >&2
|
|
|
|
|
rm -f "$iso_files"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
rm -f "$iso_files"
|
|
|
|
|
echo "=== GRUB theme validation OK ==="
|
|
|
|
|
echo "=== GRUB asset validation OK ==="
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
validate_iso_nvidia_runtime() {
|
|
|
|
|
@@ -610,29 +608,37 @@ validate_iso_nvidia_runtime() {
|
|
|
|
|
|
|
|
|
|
squashfs_tmp="$(mktemp)"
|
|
|
|
|
squashfs_list="$(mktemp)"
|
|
|
|
|
iso_read_member "$iso_path" live/filesystem.squashfs "$squashfs_tmp" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
nvidia_runtime_fail "failed to extract live/filesystem.squashfs from ISO"
|
|
|
|
|
}
|
|
|
|
|
unsquashfs -ll "$squashfs_tmp" > "$squashfs_list" 2>/dev/null || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
nvidia_runtime_fail "failed to inspect filesystem.squashfs from ISO"
|
|
|
|
|
iso_files="$(mktemp)"
|
|
|
|
|
iso_list_files "$iso_path" > "$iso_files" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "failed to list ISO files for NVIDIA runtime validation"
|
|
|
|
|
}
|
|
|
|
|
grep '^live/.*\.squashfs$' "$iso_files" | while IFS= read -r squashfs_member; do
|
|
|
|
|
iso_read_member "$iso_path" "$squashfs_member" "$squashfs_tmp" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "failed to extract $squashfs_member from ISO"
|
|
|
|
|
}
|
|
|
|
|
unsquashfs -ll "$squashfs_tmp" >> "$squashfs_list" 2>/dev/null || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "failed to inspect $squashfs_member from ISO"
|
|
|
|
|
}
|
|
|
|
|
: > "$squashfs_tmp"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
grep -Eq 'usr/bin/dcgmi$' "$squashfs_list" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "dcgmi missing from final NVIDIA ISO"
|
|
|
|
|
}
|
|
|
|
|
grep -Eq 'usr/bin/nv-hostengine$' "$squashfs_list" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "nv-hostengine missing from final NVIDIA ISO"
|
|
|
|
|
}
|
|
|
|
|
grep -Eq 'usr/bin/dcgmproftester([0-9]+)?$' "$squashfs_list" || {
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
nvidia_runtime_fail "dcgmproftester missing from final NVIDIA ISO"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list"
|
|
|
|
|
rm -f "$squashfs_tmp" "$squashfs_list" "$iso_files"
|
|
|
|
|
echo "=== NVIDIA runtime validation OK ==="
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -726,21 +732,22 @@ write_canonical_grub_cfg() {
|
|
|
|
|
kernel="$2"
|
|
|
|
|
append_live="$3"
|
|
|
|
|
initrd="$4"
|
|
|
|
|
version_label="${PROJECT_VERSION_EFFECTIVE}"
|
|
|
|
|
|
|
|
|
|
cat > "$cfg" <<EOF
|
|
|
|
|
source /boot/grub/config.cfg
|
|
|
|
|
|
|
|
|
|
menuentry "EASY-BEE" {
|
|
|
|
|
menuentry "EASY-BEE v${version_label}" {
|
|
|
|
|
linux ${kernel} ${append_live} nomodeset bee.nvidia.mode=normal pci=realloc net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
menuentry "EASY-BEE -- load to RAM (toram)" {
|
|
|
|
|
menuentry "EASY-BEE v${version_label} -- load to RAM (toram)" {
|
|
|
|
|
linux ${kernel} ${append_live} toram nomodeset bee.nvidia.mode=normal pci=realloc net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
menuentry "EASY-BEE -- no GUI / no X11" {
|
|
|
|
|
menuentry "EASY-BEE v${version_label} -- no GUI / no X11" {
|
|
|
|
|
linux ${kernel} ${append_live} nomodeset bee.gui=off bee.nvidia.mode=gsp-off pci=realloc net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
}
|
|
|
|
|
@@ -768,23 +775,24 @@ write_canonical_isolinux_cfg() {
|
|
|
|
|
kernel="$2"
|
|
|
|
|
initrd="$3"
|
|
|
|
|
append_live="$4"
|
|
|
|
|
version_label="${PROJECT_VERSION_EFFECTIVE}"
|
|
|
|
|
|
|
|
|
|
cat > "$cfg" <<EOF
|
|
|
|
|
label live-@FLAVOUR@-normal
|
|
|
|
|
menu label ^EASY-BEE
|
|
|
|
|
menu label ^EASY-BEE v${version_label}
|
|
|
|
|
linux ${kernel}
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
append ${append_live} nomodeset bee.nvidia.mode=normal net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
|
|
|
|
|
label live-@FLAVOUR@-toram
|
|
|
|
|
menu label EASY-BEE (^load to RAM)
|
|
|
|
|
menu label EASY-BEE v${version_label} (^load to RAM)
|
|
|
|
|
menu default
|
|
|
|
|
linux ${kernel}
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
append ${append_live} toram nomodeset bee.nvidia.mode=normal net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
|
|
|
|
|
label live-@FLAVOUR@-console
|
|
|
|
|
menu label EASY-BEE (^no GUI / no X11)
|
|
|
|
|
menu label EASY-BEE v${version_label} (^no GUI / no X11)
|
|
|
|
|
linux ${kernel}
|
|
|
|
|
initrd ${initrd}
|
|
|
|
|
append ${append_live} nomodeset bee.gui=off bee.nvidia.mode=gsp-off net.ifnames=0 biosdevname=0 mitigations=off transparent_hugepage=always numa_balancing=disable pcie_aspm=off intel_idle.max_cstate=1 processor.max_cstate=1 nowatchdog nosoftlockup
|
|
|
|
|
@@ -832,10 +840,7 @@ enforce_live_build_bootloader_assets() {
|
|
|
|
|
|
|
|
|
|
if [ -f "$grub_cfg" ]; then
|
|
|
|
|
if extract_live_grub_entry "$grub_cfg"; then
|
|
|
|
|
mkdir -p "$grub_dir/live-theme"
|
|
|
|
|
cp "${BUILDER_DIR}/config/bootloaders/grub-efi/config.cfg" "$grub_dir/config.cfg"
|
|
|
|
|
cp "${BUILDER_DIR}/config/bootloaders/grub-efi/theme.cfg" "$grub_dir/theme.cfg"
|
|
|
|
|
cp -R "${BUILDER_DIR}/config/bootloaders/grub-efi/live-theme/." "$grub_dir/live-theme/"
|
|
|
|
|
write_canonical_grub_cfg "$grub_cfg" "$grub_kernel" "${live_build_append:-$grub_append}" "$grub_initrd"
|
|
|
|
|
echo "bootloader sync: rewrote binary/boot/grub/grub.cfg with canonical EASY-BEE menu"
|
|
|
|
|
else
|
|
|
|
|
@@ -891,6 +896,11 @@ needs_full_build() {
|
|
|
|
|
[ -f "${FULL_BUILD_MARKER}" ] || return 0
|
|
|
|
|
[ -f "${BUILD_WORK_DIR}/binary/live/filesystem.squashfs" ] || return 0
|
|
|
|
|
[ -f "${BUILD_WORK_DIR}/live-image-amd64.hybrid.iso" ] || return 0
|
|
|
|
|
_extra_sq=$(find "${BUILD_WORK_DIR}/binary/live" -maxdepth 1 -type f -name '*.squashfs' ! -name 'filesystem.squashfs' 2>/dev/null | head -1)
|
|
|
|
|
if [ -n "$_extra_sq" ]; then
|
|
|
|
|
echo "=== full build required: multi-squashfs live image present ==="
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_heavy=$(find \
|
|
|
|
|
"${BUILDER_DIR}/VERSIONS" \
|
|
|
|
|
@@ -947,6 +957,65 @@ fast_path_rebuild_iso() {
|
|
|
|
|
echo "=== fast-path: ISO rebuilt ==="
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dir_has_entries() {
|
|
|
|
|
_dir="$1"
|
|
|
|
|
[ -d "$_dir" ] || return 1
|
|
|
|
|
find "$_dir" -mindepth 1 -print -quit 2>/dev/null | grep -q .
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
move_tree_to_layer() {
|
|
|
|
|
_src_root="$1"
|
|
|
|
|
_rel="$2"
|
|
|
|
|
_dst_root="$3"
|
|
|
|
|
[ -e "${_src_root}/${_rel}" ] || return 0
|
|
|
|
|
mkdir -p "${_dst_root}/$(dirname "$_rel")"
|
|
|
|
|
mv "${_src_root}/${_rel}" "${_dst_root}/${_rel}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
split_live_squashfs_layers() {
|
|
|
|
|
lb_dir="$1"
|
|
|
|
|
live_dir="${lb_dir}/binary/live"
|
|
|
|
|
base_sq="${live_dir}/filesystem.squashfs"
|
|
|
|
|
usr_sq="${live_dir}/10-usr.squashfs"
|
|
|
|
|
fw_sq="${live_dir}/20-firmware.squashfs"
|
|
|
|
|
|
|
|
|
|
[ -f "$base_sq" ] || return 0
|
|
|
|
|
command -v unsquashfs >/dev/null 2>&1 || return 0
|
|
|
|
|
command -v mksquashfs >/dev/null 2>&1 || return 0
|
|
|
|
|
|
|
|
|
|
tmp_root="$(mktemp -d)"
|
|
|
|
|
tmp_usr="$(mktemp -d)"
|
|
|
|
|
tmp_fw="$(mktemp -d)"
|
|
|
|
|
trap 'rm -rf "$tmp_root" "$tmp_usr" "$tmp_fw"' RETURN
|
|
|
|
|
|
|
|
|
|
echo "=== splitting live squashfs into smaller layers ==="
|
|
|
|
|
unsquashfs -d "$tmp_root/root" "$base_sq" >/dev/null
|
|
|
|
|
mkdir -p "$tmp_usr/root" "$tmp_fw/root"
|
|
|
|
|
|
|
|
|
|
move_tree_to_layer "$tmp_root/root" "usr" "$tmp_usr/root"
|
|
|
|
|
move_tree_to_layer "$tmp_root/root" "lib/firmware" "$tmp_fw/root"
|
|
|
|
|
move_tree_to_layer "$tmp_root/root" "usr/lib/firmware" "$tmp_fw/root"
|
|
|
|
|
move_tree_to_layer "$tmp_root/root" "boot/firmware" "$tmp_fw/root"
|
|
|
|
|
|
|
|
|
|
rm -f "$usr_sq" "$fw_sq"
|
|
|
|
|
mksquashfs "$tmp_root/root" "${base_sq}.new" -comp zstd -b 1048576 -noappend -no-progress >/dev/null
|
|
|
|
|
mv "${base_sq}.new" "$base_sq"
|
|
|
|
|
|
|
|
|
|
if dir_has_entries "$tmp_usr/root"; then
|
|
|
|
|
mksquashfs "$tmp_usr/root" "${usr_sq}.new" -comp zstd -b 1048576 -noappend -no-progress >/dev/null
|
|
|
|
|
mv "${usr_sq}.new" "$usr_sq"
|
|
|
|
|
fi
|
|
|
|
|
if dir_has_entries "$tmp_fw/root"; then
|
|
|
|
|
mksquashfs "$tmp_fw/root" "${fw_sq}.new" -comp zstd -b 1048576 -noappend -no-progress >/dev/null
|
|
|
|
|
mv "${fw_sq}.new" "$fw_sq"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "=== live squashfs layers ==="
|
|
|
|
|
find "$live_dir" -maxdepth 1 -type f -name '*.squashfs' -exec du -sh {} \; | sort
|
|
|
|
|
rm -rf "$tmp_root" "$tmp_usr" "$tmp_fw"
|
|
|
|
|
trap - RETURN
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
recover_iso_memtest() {
|
|
|
|
|
lb_dir="$1"
|
|
|
|
|
iso_path="$2"
|
|
|
|
|
@@ -1595,7 +1664,7 @@ if ! needs_full_build; then
|
|
|
|
|
fast_path_rebuild_iso
|
|
|
|
|
ISO_RAW="${LB_DIR}/live-image-amd64.hybrid.iso"
|
|
|
|
|
validate_iso_live_boot_entries "$ISO_RAW"
|
|
|
|
|
validate_iso_grub_theme_assets "$ISO_RAW"
|
|
|
|
|
validate_iso_grub_assets "$ISO_RAW"
|
|
|
|
|
validate_iso_nvidia_runtime "$ISO_RAW"
|
|
|
|
|
cp "$ISO_RAW" "$ISO_OUT"
|
|
|
|
|
echo ""
|
|
|
|
|
@@ -1618,6 +1687,7 @@ run_step_sh "live-build clean" "80-lb-clean" "lb clean --all 2>&1 | tail -3"
|
|
|
|
|
run_step_sh "live-build config" "81-lb-config" "lb config 2>&1 | tail -5"
|
|
|
|
|
dump_memtest_debug "pre-build" "${LB_DIR}"
|
|
|
|
|
run_step_sh "live-build build" "90-lb-build" "lb build 2>&1"
|
|
|
|
|
split_live_squashfs_layers "${LB_DIR}"
|
|
|
|
|
echo "=== enforcing canonical bootloader assets ==="
|
|
|
|
|
enforce_live_build_bootloader_assets "${LB_DIR}"
|
|
|
|
|
reset_live_build_stage "${LB_DIR}" "binary_checksums"
|
|
|
|
|
@@ -1651,7 +1721,7 @@ if [ -f "$ISO_RAW" ]; then
|
|
|
|
|
fi
|
|
|
|
|
validate_iso_memtest "$ISO_RAW"
|
|
|
|
|
validate_iso_live_boot_entries "$ISO_RAW"
|
|
|
|
|
validate_iso_grub_theme_assets "$ISO_RAW"
|
|
|
|
|
validate_iso_grub_assets "$ISO_RAW"
|
|
|
|
|
validate_iso_nvidia_runtime "$ISO_RAW"
|
|
|
|
|
cp "$ISO_RAW" "$ISO_OUT"
|
|
|
|
|
touch "${FULL_BUILD_MARKER}"
|
|
|
|
|
|