fix(runtime): verify tty and devpts before running guix

This commit is contained in:
vxtls 2026-03-08 19:59:37 -04:00
parent 2b16d6d531
commit 4e12d7a4bb
2 changed files with 39 additions and 5 deletions

View file

@ -32,6 +32,23 @@ have_user() {
fi 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 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 /proc ' >/dev/null 2>&1 || mount -t proc proc /proc
mount | grep ' on /sys ' >/dev/null 2>&1 || mount -t sysfs sysfs /sys 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 mkdir -p /dev/pts
mount -t devpts devpts /dev/pts mount -t devpts devpts /dev/pts
fi 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 if ! have_group guixbuild; then
groupadd --system guixbuild groupadd --system guixbuild

View file

@ -82,6 +82,15 @@ setup_kernel_devices() {
test -c /dev/ttyS0 || mknod -m 666 /dev/ttyS0 c 4 64 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() { verify_kernel_devices() {
mount | grep ' on /dev ' &> /dev/null && mount | grep ' on /dev ' &> /dev/null &&
mount | grep ' on /proc ' &> /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/pts ' &> /dev/null &&
mount | grep ' on /dev/shm ' &> /dev/null && mount | grep ' on /dev/shm ' &> /dev/null &&
test -c /dev/console && test -c /dev/console &&
test -c /dev/tty &&
test -c /dev/ptmx && test -c /dev/ptmx &&
test -c /dev/tty0 && test -c /dev/pts/ptmx &&
test -c /dev/tty1 && have_tty_device
test -c /dev/tty2 &&
test -c /dev/ttyS0
} }
setup_kernel_devices setup_kernel_devices