From 4e12d7a4bbb40ddc03bf1d9638723b7e1816e69b Mon Sep 17 00:00:00 2001 From: vxtls <187420201+vxtls@users.noreply.github.com> Date: Sun, 8 Mar 2026 19:59:37 -0400 Subject: [PATCH] fix(runtime): verify tty and devpts before running guix --- steps-guix/improve/guix-daemon-and-pull.sh | 28 ++++++++++++++++++++++ steps/improve/make_bootable.sh | 16 +++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/steps-guix/improve/guix-daemon-and-pull.sh b/steps-guix/improve/guix-daemon-and-pull.sh index 466e14c8..e2ace3c7 100644 --- a/steps-guix/improve/guix-daemon-and-pull.sh +++ b/steps-guix/improve/guix-daemon-and-pull.sh @@ -32,6 +32,23 @@ have_user() { fi } +have_tty_device() { + for dev in /dev/tty /dev/tty[0-9]* /dev/ttyS*; do + if [ -c "${dev}" ]; then + return 0 + fi + done + return 1 +} + +verify_terminal_devices() { + mount | grep ' on /dev ' >/dev/null 2>&1 && + mount | grep ' on /dev/pts ' >/dev/null 2>&1 && + test -c /dev/ptmx && + test -c /dev/pts/ptmx && + have_tty_device +} + mkdir -p /proc /sys /dev "${guix_localstate_dir}/daemon-socket" /var/lib/guix /root/.config/guix mount | grep ' on /proc ' >/dev/null 2>&1 || mount -t proc proc /proc mount | grep ' on /sys ' >/dev/null 2>&1 || mount -t sysfs sysfs /sys @@ -40,6 +57,17 @@ if ! mount | grep ' on /dev/pts ' >/dev/null 2>&1; then mkdir -p /dev/pts mount -t devpts devpts /dev/pts fi +test -c /dev/tty || mknod -m 666 /dev/tty c 5 0 +test -c /dev/ptmx || mknod -m 666 /dev/ptmx c 5 2 +test -c /dev/tty0 || mknod -m 666 /dev/tty0 c 4 0 +test -c /dev/tty1 || mknod -m 666 /dev/tty1 c 4 1 +test -c /dev/tty2 || mknod -m 666 /dev/tty2 c 4 2 +test -c /dev/ttyS0 || mknod -m 666 /dev/ttyS0 c 4 64 + +if ! verify_terminal_devices; then + echo "Missing terminal devices required for Guix: /dev/ptmx, /dev/pts/ptmx, or /dev/tty*" >&2 + exit 1 +fi if ! have_group guixbuild; then groupadd --system guixbuild diff --git a/steps/improve/make_bootable.sh b/steps/improve/make_bootable.sh index f8cfba34..8737e13b 100644 --- a/steps/improve/make_bootable.sh +++ b/steps/improve/make_bootable.sh @@ -82,6 +82,15 @@ setup_kernel_devices() { test -c /dev/ttyS0 || mknod -m 666 /dev/ttyS0 c 4 64 } +have_tty_device() { + for dev in /dev/tty /dev/tty[0-9]* /dev/ttyS*; do + if [ -c "${dev}" ]; then + return 0 + fi + done + return 1 +} + verify_kernel_devices() { mount | grep ' on /dev ' &> /dev/null && mount | grep ' on /proc ' &> /dev/null && @@ -90,12 +99,9 @@ verify_kernel_devices() { mount | grep ' on /dev/pts ' &> /dev/null && mount | grep ' on /dev/shm ' &> /dev/null && test -c /dev/console && - test -c /dev/tty && test -c /dev/ptmx && - test -c /dev/tty0 && - test -c /dev/tty1 && - test -c /dev/tty2 && - test -c /dev/ttyS0 + test -c /dev/pts/ptmx && + have_tty_device } setup_kernel_devices