Start here when something isn’t working. Issues are organized by symptom so you can jump to the relevant section.Documentation Index
Fetch the complete documentation index at: https://docs.allthingslinux.org/llms.txt
Use this file to discover all available pages before exploring further.
Quick health check
Run these on the server to get a fast overview:SSH connection issues
“Connection refused” on port 22- Port may be blocked by your ISP or network. Try port 2222:
ssh -p 2222 username@atl.sh - Check the server:
systemctl status sshd
- Passwords are disabled — only key-based auth works
- Verify your key is correct:
ssh -vvv username@atl.shand look for “Offering public key” - Check
~/.ssh/authorized_keyson the server has your public key - Key file permissions must be
600:chmod 600 ~/.ssh/id_ed25519
- SSH keepalive is set to 300s (5 min) with 2 retries. Add to your local
~/.ssh/config:
Web pages (nginx)
403 Forbidden- Home directory must be traversable:
chmod 711 ~ public_htmlmust be readable:chmod 755 ~/public_html- Files must be world-readable:
chmod 644 ~/public_html/index.html - Check:
namei -l ~/public_html/index.html— every directory in the path needsxfor others
- Script must be executable:
chmod +x ~/public_html/script.cgi - Must have a valid shebang:
head -1 ~/public_html/script.cgi - Must output headers correctly — test directly:
~/public_html/script.cgi - Check fcgiwrap:
systemctl status fcgiwrap
- User must exist:
getent passwd username - Directory must exist:
ls -la /home/username/public_html/
Gemini capsules
“51 Not found” for tilde URL- Check the real path:
ls -la /var/gemini/public_gemini/username/ - Verify the symlink:
readlink ~/public_gemini— should be/var/gemini/public_gemini/username - If the symlink is wrong, recreate it (admin): re-run
just create-useror fix manually
- Dev uses self-signed certs — your client must accept them
- The cert must have a SAN extension (Go rejects CN-only). Re-deploy:
just deploy-tag dev services - Check cert:
openssl s_client -connect localhost:1965 -servername atl.sh </dev/null 2>/dev/null | openssl x509 -noout -text | grep -A1 "Subject Alternative"
journalctl -u molly-brown@molly-brown -e- Check key permissions:
ls -la /etc/ssl/private/molly-brown.key— needsroot:ssl-cert 0640
Gopher holes
Empty response or error- Home dir must be
711:chmod 711 ~ public_gophermust be755:chmod 755 ~/public_gopher- Test:
echo "/~username" | nc localhost 70 - Gophermap tabs must be real
\tcharacters, not spaces
systemctl status gophernicus.socketsudo systemctl restart gophernicus.socket
Finger
No output or “no such user”- User must exist:
getent passwd username ~/.planmust exist and be readable:ls -la ~/.plan- Test:
finger username@localhost
- Emoji or non-ASCII in
.plancan cause issues with some finger clients - Stick to ASCII for maximum compatibility
FTP
“530 Login incorrect”- FTP uses PAM password auth. If you only have SSH key auth, use SFTP instead:
sftp username@atl.sh
- Use Explicit TLS (FTPS), not Implicit
- SSLv2 and SSLv3 are disabled — client must support TLSv1+
Disk quota exceeded
Process killed (OOM)
If your process disappears without explanation, it likely hit the 1.5 GB memory limit:Private /tmp confusion
Each SSH session gets an isolated/tmp via pam_namespace. This means:
- Files in
/tmpfrom one session are invisible to other sessions - You can’t use
/tmpfor IPC between users - Use
~/or a socket in your home directory for cross-session communication
Ansible deployment issues
“Failed to connect” duringjust deploy dev
- Is the VM running?
vagrant status - Can you SSH manually?
ssh -i .ssh/dev_key -p 2223 root@127.0.0.1 - Check port:
ss -tlnp | grep 2223
- Handlers run at the end of the play, not immediately. Use
flush_handlersif you need immediate execution. - Handler names are case-sensitive — check for mismatches between
notify:and the handler name
creates:parameter missing oncommand/shelltasks- Template has a timestamp or random value that changes each run