shadow's commonio_open() refuses to modify a user/group database whose
last line has no trailing newline, failing with a misleading
"cannot open /etc/passwd". Under 'set -e' this aborted the whole setup
at the fish step (and would later break docker's groupadd/usermod too).
- add ensure_db_trailing_newlines() to normalize /etc/passwd, /etc/group
and /etc/shadow before any user/group modification
- switch default shell via 'usermod -s' with a 'chsh' fallback, warning
instead of aborting the script on failure
Detect insufficient swap from RAM heuristics, suggest additional size,
and let the user create a persistent /swapfile during server setup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Run visudo validation and sudoers.d checks with sudo so Debian no longer
fails with a false validation error. Prompt before installing Docker and
move AOSC Docker packages into the same optional install path.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ubuntu 26.04+ ships Docker in its own repositories, so install
docker.io, docker-compose-v2, and docker-buildx directly from apt
instead of adding Docker's official repository. Falls back to the
official repo method for older Ubuntu versions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split curl download from bash execution so network errors are caught
explicitly. Add post-install verification that brew is actually
available before reporting success.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>