Persist CA bundle configuration on CentOS for Nix and HTTPS tools
Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
Move CA bundle detection from the Docker entrypoint to CentOS dependencies and persist it system-wide. This ensures Nix, Git, curl, and Python HTTPS access works in virgin environments by configuring `/etc/profile.d` and `/etc/nix/nix.conf`. Removes runtime-only CA exports from the container entrypoint and makes the setup reproducible and distro-correct. https://chatgpt.com/share/693c5ddf-3260-800f-ac94-38c635dba307
This commit is contained in:
@@ -1,53 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# Detect and export a valid CA bundle so Nix, Git, curl and Python tooling
|
|
||||||
# can successfully perform HTTPS requests on all distros (Debian, Ubuntu,
|
|
||||||
# Fedora, RHEL, CentOS, etc.)
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
detect_ca_bundle() {
|
|
||||||
# Common CA bundle locations across major Linux distributions
|
|
||||||
local candidates=(
|
|
||||||
/etc/ssl/certs/ca-certificates.crt # Debian/Ubuntu
|
|
||||||
/etc/ssl/cert.pem # Some distros
|
|
||||||
/etc/pki/tls/certs/ca-bundle.crt # Fedora/RHEL/CentOS
|
|
||||||
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem # CentOS/RHEL extracted bundle
|
|
||||||
/etc/ssl/ca-bundle.pem # Generic fallback
|
|
||||||
)
|
|
||||||
|
|
||||||
for path in "${candidates[@]}"; do
|
|
||||||
if [[ -f "$path" ]]; then
|
|
||||||
echo "$path"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use existing NIX_SSL_CERT_FILE if provided, otherwise auto-detect
|
|
||||||
CA_BUNDLE="${NIX_SSL_CERT_FILE:-}"
|
|
||||||
|
|
||||||
if [[ -z "${CA_BUNDLE}" ]]; then
|
|
||||||
CA_BUNDLE="$(detect_ca_bundle || true)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -n "${CA_BUNDLE}" ]]; then
|
|
||||||
# Export for Nix (critical)
|
|
||||||
export NIX_SSL_CERT_FILE="${CA_BUNDLE}"
|
|
||||||
|
|
||||||
# Export for Git, Python requests, curl, etc.
|
|
||||||
export SSL_CERT_FILE="${CA_BUNDLE}"
|
|
||||||
export REQUESTS_CA_BUNDLE="${CA_BUNDLE}"
|
|
||||||
export GIT_SSL_CAINFO="${CA_BUNDLE}"
|
|
||||||
|
|
||||||
echo "[docker] Using CA bundle: ${CA_BUNDLE}"
|
|
||||||
else
|
|
||||||
echo "[docker] WARNING: No CA certificate bundle found."
|
|
||||||
echo "[docker] HTTPS access for Nix flakes and other tools may fail."
|
|
||||||
fi
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
|
||||||
echo "[docker] Starting package-manager container"
|
echo "[docker] Starting package-manager container"
|
||||||
|
|||||||
@@ -13,10 +13,64 @@ dnf -y install \
|
|||||||
bash \
|
bash \
|
||||||
curl-minimal \
|
curl-minimal \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
python3.11 \
|
python3 \
|
||||||
sudo \
|
sudo \
|
||||||
xz
|
xz
|
||||||
|
|
||||||
dnf clean all
|
dnf clean all
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Persist CA bundle configuration system-wide (virgin-compatible)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
detect_ca_bundle() {
|
||||||
|
local candidates=(
|
||||||
|
/etc/pki/tls/certs/ca-bundle.crt
|
||||||
|
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
|
||||||
|
/etc/ssl/certs/ca-certificates.crt
|
||||||
|
/etc/ssl/cert.pem
|
||||||
|
/etc/ssl/ca-bundle.pem
|
||||||
|
)
|
||||||
|
|
||||||
|
for path in "${candidates[@]}"; do
|
||||||
|
if [[ -f "$path" ]]; then
|
||||||
|
echo "$path"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
CA_BUNDLE="$(detect_ca_bundle || true)"
|
||||||
|
|
||||||
|
if [[ -n "${CA_BUNDLE}" ]]; then
|
||||||
|
echo "[centos/dependencies] Persisting CA bundle: ${CA_BUNDLE}"
|
||||||
|
|
||||||
|
# 1) Make it available for login shells
|
||||||
|
cat >/etc/profile.d/pkgmgr-ca.sh <<EOF
|
||||||
|
# Generated by package-manager
|
||||||
|
export NIX_SSL_CERT_FILE="${CA_BUNDLE}"
|
||||||
|
export SSL_CERT_FILE="${CA_BUNDLE}"
|
||||||
|
export REQUESTS_CA_BUNDLE="${CA_BUNDLE}"
|
||||||
|
export GIT_SSL_CAINFO="${CA_BUNDLE}"
|
||||||
|
EOF
|
||||||
|
chmod 0644 /etc/profile.d/pkgmgr-ca.sh
|
||||||
|
|
||||||
|
# 2) Ensure Nix uses it even without environment variables
|
||||||
|
mkdir -p /etc/nix
|
||||||
|
if [[ -f /etc/nix/nix.conf ]]; then
|
||||||
|
# Replace existing ssl-cert-file or append it
|
||||||
|
if grep -qE '^\s*ssl-cert-file\s*=' /etc/nix/nix.conf; then
|
||||||
|
sed -i "s|^\s*ssl-cert-file\s*=.*|ssl-cert-file = ${CA_BUNDLE}|" /etc/nix/nix.conf
|
||||||
|
else
|
||||||
|
echo "ssl-cert-file = ${CA_BUNDLE}" >>/etc/nix/nix.conf
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ssl-cert-file = ${CA_BUNDLE}" >/etc/nix/nix.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "[centos/dependencies] WARNING: No CA bundle found after installing ca-certificates."
|
||||||
|
fi
|
||||||
|
|
||||||
echo "[centos/dependencies] Done."
|
echo "[centos/dependencies] Done."
|
||||||
|
|||||||
Reference in New Issue
Block a user