Make nginx optional modules gracefully skippable on build failure - #104
Merged
Conversation
nginx_installer.ps1 was a PowerShell reimplementation of nginx_installer.sh that only ran on Linux (it hard-checked $IsLinux), duplicating the bash installer for no benefit and doubling the maintenance burden on every version bump. Drop it and the tooling built around syncing it (update-nginx-checksums.sh/.yml, CONTRIBUTING.md). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015JTpvkRWFpJNNhEdHMekLe
zstd, headers-more and ACME are now optional: --skip-acme, --skip-zstd, --skip-headers-more and --skip-modules=a,b,c disable them up front, and any of them is disabled automatically (with a warning) if its download or build fails instead of aborting the whole install — the ACME module in particular used to take the entire script down with it. The generated nginx.conf, required-module checks and dependency install step (cargo/rustup, only needed for ACME) all adapt accordingly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015JTpvkRWFpJNNhEdHMekLe
Adds system/planned_shutdown.sh (Linux, wraps the systemd shutdown command) and windows/Set-PlannedShutdown.ps1 (Windows, wraps shutdown.exe with its own state file since shutdown.exe has no query verb). Both support schedule (--at HH:MM or --delay/-Delay, optional reboot and broadcast message), cancel, and status. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015JTpvkRWFpJNNhEdHMekLe
Reflect the removed nginx PowerShell installer, the new nginx module skip flags, and the new planned-shutdown scripts in README.md and nginx/README.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015JTpvkRWFpJNNhEdHMekLe
This was
linked to
issues
Sep 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refactored the nginx installer to make optional dynamic modules (zstd, headers-more, ACME) gracefully skippable when downloads fail or builds fail, instead of aborting the entire installation. Also removed the PowerShell variant of the nginx installer and added a new standalone planned shutdown script for both Linux and Windows.
Key Changes
nginx/nginx_installer.sh
--skip-acme,--skip-zstd,--skip-headers-moreflags and environment variable equivalents (NGINX_SKIP_*) to allow users to disable modules upfrontGet-OptionalFile()function that returns 1 on download/checksum failure instead of aborting, allowing the installer to skip failed modules with a warningInstall-Rustup()to return 1 on failure instead of stopping the script, enabling ACME module to be skipped if Rust toolchain installation failsRemoved Files
New Files
shutdowncommand. Supports--at HH:MM,--delay N[smh],--reboot, and--messageoptions.Documentation Updates
nginx_installer.shnginx_installer.ps1from path triggersImplementation Details
ACME_MODULE_BUILTvariable tracks whether ACME was actually built, used later to decide whether to load/require it