Archived
Two bugs found running scripts/create-proxmox-resource.sh against a real Proxmox node for the first time: - The Nix installer's single-user root path still shells out to `sudo` to create /nix even though it already detected it's running as root, which fails outright on a minimal, sudo-less Debian/Proxmox node. codex-setup.sh now pre-creates /nix itself so that branch of the installer is skipped. - ensure_remote_repo() only ran scripts/codex-setup.sh right after a fresh git clone, so a bootstrap that cloned the repo but then failed installing Nix (exactly the failure above) left every subsequent run silently building with a `nix` that was never actually installed, since the repo already existing skipped tooling setup entirely. It now checks `command -v nix` (via the same ensure_nix_profile used elsewhere, since a non-interactive ssh session won't otherwise have a single-user install on PATH) on every run and re-bootstraps if it's missing. Both remote build heredocs also now source scripts/lib/nix-bootstrap.sh themselves for the same PATH reason. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
95 lines
2.4 KiB
Bash
Executable File
95 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=lib/nix-bootstrap.sh
|
|
source "${script_dir}/lib/nix-bootstrap.sh"
|
|
# shellcheck source=lib/nix-eval.sh
|
|
source "${script_dir}/lib/nix-eval.sh"
|
|
|
|
install_nix_if_missing() {
|
|
if command -v nix >/dev/null 2>&1; then
|
|
return
|
|
fi
|
|
|
|
echo "Nix not found. Installing Nix..."
|
|
|
|
if [ "$(id -u)" -eq 0 ]; then
|
|
echo "Running as root; preparing nixbld users for container/Codex environment..."
|
|
|
|
if ! getent group nixbld >/dev/null; then
|
|
groupadd -r nixbld
|
|
fi
|
|
|
|
for i in $(seq 1 10); do
|
|
if ! id "nixbld$i" >/dev/null 2>&1; then
|
|
useradd \
|
|
-r \
|
|
-g nixbld \
|
|
-G nixbld \
|
|
-d /var/empty \
|
|
-s /usr/sbin/nologin \
|
|
"nixbld$i" || true
|
|
fi
|
|
done
|
|
|
|
mkdir -p /etc/nix
|
|
cat > /etc/nix/nix.conf <<'EOF'
|
|
experimental-features = nix-command flakes
|
|
accept-flake-config = false
|
|
warn-dirty = false
|
|
build-users-group = nixbld
|
|
EOF
|
|
|
|
# The official installer's single-user root path still shells out to
|
|
# `sudo` to create /nix even though it already knows it's running as
|
|
# root -- confirmed live against a sudo-less minimal Debian/Proxmox
|
|
# node, where it fails with "sudo: not found" and prints this exact
|
|
# mkdir/chown as the manual fix. Pre-create it so that branch of the
|
|
# installer is skipped entirely.
|
|
if [ ! -d /nix ]; then
|
|
mkdir -m 0755 /nix
|
|
chown root /nix
|
|
fi
|
|
|
|
sh <(curl -L https://nixos.org/nix/install) --no-daemon
|
|
else
|
|
sh <(curl -L https://nixos.org/nix/install) --no-daemon
|
|
fi
|
|
|
|
ensure_nix_profile
|
|
}
|
|
|
|
install_nix_if_missing
|
|
ensure_nix_profile
|
|
|
|
mkdir -p "$HOME/.config/nix"
|
|
cat > "$HOME/.config/nix/nix.conf" <<'EOF'
|
|
experimental-features = nix-command flakes
|
|
accept-flake-config = false
|
|
warn-dirty = false
|
|
EOF
|
|
|
|
echo "Nix version:"
|
|
nix --version
|
|
|
|
echo "Enabling tracked git hooks (pre-commit secret scan)..."
|
|
git config core.hooksPath .githooks
|
|
|
|
echo "Installing jq if unavailable..."
|
|
if ! command -v jq >/dev/null 2>&1; then
|
|
nix profile install nixpkgs#jq
|
|
fi
|
|
|
|
echo "Available NixOS hosts:"
|
|
hosts="$(list_flake_targets .)"
|
|
echo "$hosts"
|
|
|
|
echo "Evaluating all host toplevel derivations..."
|
|
for host in $hosts; do
|
|
echo "==> Evaluating $host"
|
|
nix eval --raw "${NIX_EVAL_FLAGS[@]}" ".#nixosConfigurations.${host}.config.system.build.toplevel.drvPath"
|
|
done
|
|
|
|
echo "Codex setup complete."
|