diff options
| author | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-03 12:06:45 +0200 |
|---|---|---|
| committer | Nippy <nippy@Nippy-Mac-mini.local> | 2026-10-03 12:07:08 +0200 |
| commit | 1861e3ec6dd9a7de234d2f9a1aaba30ddfe3fe04 (patch) | |
| tree | 6f73be4d78990b15b34a6f49fb4146b6b10c1375 /raveos-calamares-theme/etc/calamares/modules | |
| parent | ae2eb9d0881e3ef8317fb5476e03b9e599439660 (diff) | |
| download | RaveOS-PKGBUILD-1861e3ec6dd9a7de234d2f9a1aaba30ddfe3fe04.tar.gz RaveOS-PKGBUILD-1861e3ec6dd9a7de234d2f9a1aaba30ddfe3fe04.zip | |
bootentry fix
Diffstat (limited to 'raveos-calamares-theme/etc/calamares/modules')
| -rw-r--r-- | raveos-calamares-theme/etc/calamares/modules/calamares-fix-bootentry.sh | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/raveos-calamares-theme/etc/calamares/modules/calamares-fix-bootentry.sh b/raveos-calamares-theme/etc/calamares/modules/calamares-fix-bootentry.sh index f49e1d0..3735524 100644 --- a/raveos-calamares-theme/etc/calamares/modules/calamares-fix-bootentry.sh +++ b/raveos-calamares-theme/etc/calamares/modules/calamares-fix-bootentry.sh @@ -6,45 +6,52 @@ echo ">>> [fix-bootentry] Running INSIDE target system" ENTRYDIR="/boot/loader/entries" [ -d "${ENTRYDIR}" ] || { echo ">>> [fix-bootentry] No ${ENTRYDIR}, skipping."; exit 0; } -# 95-raveos.install (kernel-install hook, fired during pacstrap/mkinitcpio) -# detects the root device via findmnt at hook-time. Depending on the -# chroot/mount-namespace context that detection can silently come back -# empty, producing a loader entry with no "root=" in its options line -# (system then drops to an emergency shell on boot: "Failed to mount '' -# on real root"). On btrfs it can also come back in findmnt's bracket form -# ("/dev/vda2[/@]"), which blkid cannot resolve -- that produces a -# syntactically present but unusable root= (emergency shell: "Failed to -# mount '/dev/vda2[/@]' on real root"). By this point in the install -# sequence /etc/fstab is already correctly generated, so use it as the -# authoritative source and patch both the missing and malformed cases. - ROOT_UUID="$(findmnt -no UUID / || true)" if [ -z "${ROOT_UUID}" ]; then ROOT_UUID="$(awk '$2 == "/" && $1 ~ /^UUID=/ {print $1; exit}' /etc/fstab | sed 's/^UUID=//')" fi if [ -z "${ROOT_UUID}" ]; then - echo ">>> [fix-bootentry] Could not determine root UUID from findmnt or fstab, leaving entries untouched." + echo ">>> [fix-bootentry] Could not determine root UUID, leaving entries untouched." exit 0 fi -echo ">>> [fix-bootentry] Root UUID: ${ROOT_UUID}" +SWAP_UUID="$(awk '$3 == "swap" && $1 ~ /^UUID=/ {print $1; exit}' /etc/fstab | sed 's/^UUID=//')" +ROOT_OPTS="$(awk '$2 == "/" {print $4; exit}' /etc/fstab)" +SUBVOL="$(echo "$ROOT_OPTS" | tr ',' '\n' | grep '^subvol=' | head -1 || true)" + +echo ">>> [fix-bootentry] root UUID: ${ROOT_UUID} | swap UUID: ${SWAP_UUID:-nincs} | subvol: ${SUBVOL:-nincs}" for f in "${ENTRYDIR}"/*.conf; do [ -f "$f" ] || continue + grep -qE '^options[[:space:]]' "$f" || continue if grep -qE '^options[[:space:]].*\broot=' "$f"; then - if grep -qE 'root=[^[:space:]]*\[' "$f"; then - echo ">>> [fix-bootentry] Fixing malformed (findmnt-style) root= in: $f" - sed -i -E "s#root=[^[:space:]]*\[[^]]*\]#root=UUID=${ROOT_UUID}#" "$f" - continue + sed -i -E "s#root=[^[:space:]]*#root=UUID=${ROOT_UUID}#" "$f" + else + sed -i -E "s#^options[[:space:]]+#options root=UUID=${ROOT_UUID} #" "$f" + fi + + if [ -n "${SWAP_UUID}" ]; then + if grep -qE '\bresume=' "$f"; then + sed -i -E "s#resume=[^[:space:]]*#resume=UUID=${SWAP_UUID}#" "$f" + else + sed -i -E "s#^(options[[:space:]].*)#\1 resume=UUID=${SWAP_UUID}#" "$f" + fi + else + sed -i -E "s#[[:space:]]+resume=[^[:space:]]*##g" "$f" + fi + + if [ -n "${SUBVOL}" ]; then + if grep -qE '\brootflags=subvol=' "$f"; then + sed -i -E "s#rootflags=subvol=[^[:space:]]*#rootflags=${SUBVOL}#" "$f" + else + sed -i -E "s#^(options[[:space:]].*)#\1 rootflags=${SUBVOL}#" "$f" fi - echo ">>> [fix-bootentry] Already has root=, skipping: $f" - continue fi - echo ">>> [fix-bootentry] Patching missing root= in: $f" - sed -i -E "s#^options[[:space:]]+#options root=UUID=${ROOT_UUID} #" "$f" + echo ">>> [fix-bootentry] Fixed: $f" done echo ">>> [fix-bootentry] Done." +exit 0 |