feat(niri-live): dual-kernel boot menu, audio fix, elogind fix, rsync optimization
- Add kernel 7 (linux-mainline) as primary boot entry - Add kernel 6 (linux) as secondary fallback boot entry - Simplified boot menu: single entry per kernel, no failsafe variants - Add snd-intel-dspcfg.dsp_driver=1 + snd_hda_intel.dmic_detect=0 to BOOT_CMDLINE - Fix elogind sv: dual D-Bus + PID check to suppress already-running warnings - Replace cp -rfpPv with rsync -aHX in copy_include_directories (nixpkgs speed fix) - Fix trailing slash bash glob bug in mklive.sh and postsetup-nvidia.sh - Add -v linux-mainline to _inner-build-niri-live.sh for correct primary kernel
This commit is contained in:
@@ -205,25 +205,52 @@ install -d -m 0755 "$INCLUDE_DIR/etc/sv/elogind"
|
||||
cat > "$INCLUDE_DIR/etc/sv/elogind/run" <<'EOF'
|
||||
#!/bin/sh
|
||||
exec 2>&1
|
||||
# If elogind is already running (e.g. from a previous attempt), stay up
|
||||
# permanently rather than letting runit restart the wrapper every 3 s.
|
||||
if [ -f /run/elogind.pid ] && kill -0 "$(cat /run/elogind.pid 2>/dev/null)" 2>/dev/null; then
|
||||
echo "elogind-sv: already running (PID $(cat /run/elogind.pid)), yielding"
|
||||
|
||||
# Helper: is elogind's login1 D-Bus name already registered on the system bus?
|
||||
_login1_on_dbus() {
|
||||
dbus-send --system --print-reply --dest=org.freedesktop.DBus \
|
||||
/org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner \
|
||||
string:org.freedesktop.login1 >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Helper: is elogind process alive via its PID file?
|
||||
_elogind_alive() {
|
||||
for _pf in /run/elogind.pid /run/elogind/elogind.pid; do
|
||||
[ -f "$_pf" ] && kill -0 "$(cat "$_pf" 2>/dev/null)" 2>/dev/null && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
# If elogind is already running (process alive or D-Bus name taken), yield
|
||||
# permanently so runit does not spam restarts.
|
||||
if _elogind_alive || _login1_on_dbus; then
|
||||
echo "elogind-sv: already running — yielding to avoid restart spam"
|
||||
exec tail -f /dev/null
|
||||
fi
|
||||
|
||||
# Wait for dbus socket — poll every second, up to 30s
|
||||
i=0
|
||||
while [ $i -lt 30 ] && [ ! -S /run/dbus/system_bus_socket ]; do
|
||||
sleep 1; i=$((i+1))
|
||||
done
|
||||
|
||||
exec /usr/libexec/elogind/elogind.wrapper
|
||||
EOF
|
||||
chmod 0755 "$INCLUDE_DIR/etc/sv/elogind/run"
|
||||
|
||||
# finish: rate-limit restarts to avoid "already running" spam
|
||||
# finish: rate-limit restarts; if the run was very short (elogind crashed or
|
||||
# reported "already running" before our detection), back off longer.
|
||||
cat > "$INCLUDE_DIR/etc/sv/elogind/finish" <<'EOF'
|
||||
#!/bin/sh
|
||||
sleep 3
|
||||
# $1=exitcode, $2=signal (or -1)
|
||||
exitcode="$1"
|
||||
# Non-zero exit with no signal = elogind bailed out (e.g. "already running").
|
||||
# Sleep longer to avoid log spam; next run will yield via the D-Bus/PID check.
|
||||
if [ "$exitcode" != "0" ] && [ "$2" = "-1" ]; then
|
||||
sleep 10
|
||||
else
|
||||
sleep 3
|
||||
fi
|
||||
EOF
|
||||
chmod 0755 "$INCLUDE_DIR/etc/sv/elogind/finish"
|
||||
|
||||
@@ -832,7 +859,7 @@ ISO_PKGS=$(grep -vE '^\s*(#|$)' \
|
||||
| tr '\n' ' ')
|
||||
TS="$(date -u +%Y%m%d)"
|
||||
OUT_ISO="${OUTPUT_ISO:-$OUT_DIR/void-live-niri-${TS}.iso}"
|
||||
BOOT_CMDLINE="${BOOT_CMDLINE:-live.user=${LIVE_USER} console=tty0 console=ttyS0,115200 nvidia-drm.modeset=1 rd.driver.blacklist=nouveau modprobe.blacklist=nouveau btusb.enable_autosuspend=0}"
|
||||
BOOT_CMDLINE="${BOOT_CMDLINE:-live.user=${LIVE_USER} console=tty0 console=ttyS0,115200 nvidia-drm.modeset=1 rd.driver.blacklist=nouveau modprobe.blacklist=nouveau btusb.enable_autosuspend=0 snd-intel-dspcfg.dsp_driver=1 snd_hda_intel.dmic_detect=0}"
|
||||
|
||||
echo ">>> running mklive.sh inside docker — output: $OUT_ISO"
|
||||
"$DOCKER" run --rm --privileged \
|
||||
|
||||
Reference in New Issue
Block a user