mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-10-26 21:17:13 +09:00
`apt-get install -y` answers apt's own prompts but NOT debconf's. tzdata, keyboard-configuration and friends still open an interactive dialog and block forever. pkg_add captures apt's output, so the installer hangs in complete silence — no prompt, no progress, nothing to diagnose. Observed, not theorised: ubuntu:22.04 sat for 60 minutes on 39 bytes of output, stuck in tzdata.postinst -> debconf frontend. Real Debian/Ubuntu servers are exposed to the same stall; a container is just where it showed up. Under `curl | bash` it is worse still, because stdin is the installer script itself, so debconf can consume installer source as its answers. DEBIAN_FRONTEND was set NOWHERE in install.sh, scripts/lib/pkg.sh or update.sh. Every other manager was already guarded (dnf/yum -y, zypper --non-interactive, pacman --noconfirm) — apt was the only unguarded one, and pkg.sh's own docstring already claimed the whole function was non-interactive. In pkg.sh it goes in ARGV as `env DEBIAN_FRONTEND=noninteractive …`, not an export: _pkg_sudo runs plain `sudo "$@"` and sudo's env_reset would drop an exported variable before apt saw it. --force-confold/--force-confdef cover the other prompt class (modified conffiles), which DEBIAN_FRONTEND does not suppress. Tests: pkg_install must be non-interactive for every manager, and pkg_add's apt branch is guarded statically. Three existing assertions pinned the exact apt argv (`install -y <pkg>`) and now match the package instead — a flag added to pkg_add should not fail tests whose subject is which package got installed. Verified across the whole distro matrix: ubuntu:22.04 went from a 60-minute hang to 7 passed in minutes; debian:13/12, ubuntu:24.04, fedora:40, rockylinux:9 and opensuse/leap:15.5 all 7 passed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>