mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-06-14 20:36:59 +00:00
update beta 1.2.2.2
This commit is contained in:
67
scripts/backup_restore/collectors/collect_kernel.sh
Normal file
67
scripts/backup_restore/collectors/collect_kernel.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==========================================================
|
||||
# ProxMenux backup manifest collector — kernel_params
|
||||
# ==========================================================
|
||||
# /proc/cmdline (filtered to user-meaningful extras), /etc/modules,
|
||||
# and /etc/modprobe.d/ files with custom directives. Read-only.
|
||||
# Schema: scripts/backup_restore/schema/manifest.schema.json
|
||||
# ==========================================================
|
||||
set -euo pipefail
|
||||
|
||||
# ── cmdline_extra ──
|
||||
# /proc/cmdline contains the kernel command line the bootloader passed.
|
||||
# We strip the boring boilerplate (BOOT_IMAGE, initrd, root, ro, rw, quiet,
|
||||
# splash, boot=zfs, rootflags) so the manifest captures only the user-
|
||||
# meaningful tweaks (intel_iommu, iommu=pt, hugepages, pcie_acs_override,
|
||||
# acpi=off, etc.). These are the bits a restore wizard cares about.
|
||||
cmdline_extra='[]'
|
||||
if [[ -r /proc/cmdline ]]; then
|
||||
raw_cmdline="$(cat /proc/cmdline)"
|
||||
for token in $raw_cmdline; do
|
||||
case "$token" in
|
||||
BOOT_IMAGE=*|initrd=*|root=*|ro|rw|quiet|splash|boot=*|rootflags=*)
|
||||
;; # boilerplate, drop
|
||||
*)
|
||||
cmdline_extra="$(jq --argjson acc "$cmdline_extra" --arg t "$token" -n '$acc + [$t]')"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
# ── modules_loaded_at_boot ──
|
||||
# /etc/modules lists modules systemd-modules-load.service inserts on boot.
|
||||
modules_at_boot='[]'
|
||||
if [[ -r /etc/modules ]]; then
|
||||
while IFS= read -r mod; do
|
||||
# Strip comments and inline comments
|
||||
mod="${mod%%#*}"
|
||||
mod="$(printf '%s' "$mod" | xargs)"
|
||||
[[ -z "$mod" ]] && continue
|
||||
modules_at_boot="$(jq --argjson acc "$modules_at_boot" --arg m "$mod" -n '$acc + [$m]')"
|
||||
done < /etc/modules
|
||||
fi
|
||||
|
||||
# ── modprobe_d_files ──
|
||||
# /etc/modprobe.d/*.conf files. We emit the path of every file that
|
||||
# contains at least one `options`, `blacklist`, `install`, `alias`, or
|
||||
# `softdep` directive — i.e. anything that has actual effect. Files that
|
||||
# are empty or pure comments aren't worth tracking.
|
||||
modprobe_files='[]'
|
||||
if [[ -d /etc/modprobe.d ]]; then
|
||||
for f in /etc/modprobe.d/*.conf; do
|
||||
[[ -r "$f" ]] || continue
|
||||
if grep -qE '^[[:space:]]*(options|blacklist|install|alias|softdep)[[:space:]]' "$f" 2>/dev/null; then
|
||||
modprobe_files="$(jq --argjson acc "$modprobe_files" --arg p "$f" -n '$acc + [$p]')"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
jq -n \
|
||||
--argjson cmdline_extra "$cmdline_extra" \
|
||||
--argjson modules_loaded "$modules_at_boot" \
|
||||
--argjson modprobe_files "$modprobe_files" \
|
||||
'{
|
||||
cmdline_extra: $cmdline_extra,
|
||||
modules_loaded_at_boot: $modules_loaded,
|
||||
modprobe_d_files: $modprobe_files
|
||||
}'
|
||||
Reference in New Issue
Block a user