Safer installers: the one-line installer never deletes or takes over a folder, install.sh keeps the service's account, uninstall.sh --purge removes everything Aerodrome created and nothing else, and the "Sudoers update required" command now works wherever an update was staged.
Fixed
- The one-line installer never deletes or takes over a folder. A
--prefixpointing at your home folder or a system folder (such as/optor/usr/local) is now refused before anything is downloaded, with a suggested<folder>/aerodromeinstead. A folder that already has files in it (or that it can't list) and isn't an Aerodrome install is refused instead of being offered for deletion, and an existing folder you can't write to is refused instead of having its owner changed — the installer prints the one command to run if you do want to use it. Paths a service definition can't use — containing",\,$,%, a control character such as a tab, or ending in a space — are refused up front too. - Running the installer on a machine that already has Aerodrome reliably stops. It could occasionally miss the existing service, set up a second copy and move the service to it. It now always stops and points you at the Updates page, and re-running it at a folder that already holds Aerodrome (for example after
uninstall.sh --purge, which keeps the program files) explains how to reinstall there. - An install that stops part-way tells you how to undo it. If the setup step fails after the service was registered, the installer now points you at the install's own
uninstall.shbefore suggesting you delete the folder, and if the folder is already gone, re-running the installer prints the commands that remove the leftover service and its permissions instead of a dead end. - The one-line installer piped into
bashwithout--yesstops before downloading anything and explains how to run it, instead of stopping silently half-way through setup. - The one-line installer says so when GitHub's hourly limit is used up. GitHub answers only so many release lookups an hour from one network, and every device sharing its public IP address counts toward that, including an installed Aerodrome checking for updates. When the limit ran out, the installer only said it couldn't fetch the release info and to check your network connection or pin a version. It now says the limit is used up, when it resets if GitHub reports that, and that
--version vX.Y.Zinstalls that version without the lookup. - Less common Linux distributions that use apt, dnf, pacman or zypper now install with
--force: the installer uses whichever of those package managers it finds instead of stopping with an error. install.shshows why a package install failed. If the system package manager fails you now see the end of its output and where the full log is, instead of the script stopping without a word. When Python, its venv module and curl are already installed it skips the package manager altogether, so a re-run no longer fails on a broken third-party package repository.- Install folders with spaces in their path work.
- Commands Aerodrome prints for you to copy work when the install folder's path has spaces.
- Accounts whose main group isn't named after the user get a running service.
- Installing for another account sets the service up for that account. Running the installer as another account from your own — for example
sudo -iu <account> bash install.sh, or the one-line installer the same way — set the service up for your account instead, so it couldn't read its own files and kept restarting. It now runs as the account the installer runs as;sudo bash install.shstill sets it up for the account that typedsudo. uninstall.sh --purgeremoves everything Aerodrome created. That now includes backups and the backup zips you made in the web UI (copy any you want to keep out of.backups/first), pre-restore copies, update snapshots, staged updates, configuration backups, and a database stored outside the install folder.uninstall.shnever removes other programs' files. It only runs from inside the install it removes: a copy kept somewhere else, the copy inside a staged update, or an install placed directly in a system or home folder is refused with nothing changed (a symlink to the real one works). From a log folder outside the install folder only Aerodrome's own log files are removed, so anything else there is left alone, and a database file outside it is removed only if it really is an SQLite database. System and home folders are never touched, whatever the configuration says.uninstall.shno longer stops at the firewall question, and closes port 8000 only if Aerodrome's installer opened it; otherwise it prints the command to close it yourself. Run without--purgeor--keep, it asks one question per kind of data and shows what it found and how big it is.uninstall.shalways removes Aerodrome's system permission rules, on every distribution and whichever way you run it, including any left by an interrupted install.uninstall.shno longer suggests removing your system's Python. Its closing note offered a package-manager command to remove Python packages — risky on distributions whose own tools need Python, and the package names didn't match every distribution. The note is gone; Aerodrome never removes system packages.- The installer removes its temporary download, and stops with a clear message if unpacking or moving the files fails (for example, a full disk) instead of carrying on with a half-copied install.
- The one-line installer with
--yesbut no receiver address now stops with a clear message (add--receiver-ip, or--demo) instead of waiting forever, and it finishes cleanly on systems that lack theiporhostname -Icommands. - When an update needs new system permissions, the Updates page now shows one command that works, wherever the update was staged, including from the upload card. Running it only refreshes Aerodrome's permissions: it doesn't reinstall or restart anything, it keeps the account Aerodrome runs as, and it never replaces newer permission rules with older ones — or rules it can't read. After a deliberate rollback it prints the exact command that puts the older rules back.
- Re-running install.sh on an existing install keeps the service's account. Run from a different account without sudo, it now stops with a clear message instead of moving the service.
- Directory logins with fully qualified names (
name@example.com) work as the service account for the permissions refresh, and a re-run stops with a clear message, instead of switching to another account, when the service's account can't be looked up.
Behind the scenes
- Aerodrome's permission (sudoers) rules are checked before they take effect and swapped in all at once, so a rule that fails the check never reaches the system and the previous rules stay exactly as they were. Their content is unchanged, so this release shows no "Sudoers update required" prompt.
scripts/recover-sudoers.shno longer carries its own copy of the rules: it hands off to the installer's new permissions-only mode (install.sh --privileges-only), so the rules live in one place.- The one-line installer and the permissions script are safe to pipe from a download that gets cut off: a partial script runs nothing.
- The one-line installer gives a new install folder to your account by numeric user and group ID, so an account whose main group has no name no longer sees a stray
id: cannot find name for groupline. - Every release now also checks the installer scripts for shell pipelines that can fail at random, that they go by the account that typed
sudoonly when they really run as root, that the permissions script really hands off to the installer, and thatuninstall.shstill removes the notification server's message cache. - The install, one-line install and uninstall scripts now have automated tests that run them against stand-in system tools.