From 06bd01807a2be875ec5aac17022e9a39f89ef815 Mon Sep 17 00:00:00 2001 From: bart Date: Tue, 20 Oct 2026 22:44:29 +0200 Subject: [PATCH] Add bnhmeijer-ca-certificates package to sources and repository --- .gitea/workflows/build-and-publish.yaml | 11 +++-- README.md | 1 + binaries/index.html | 11 +++++ .../bnhmeijer-ca-certificates-1.0.0_all.deb | Bin 0 -> 2408 bytes .../bnhmeijer_ca_certificates/bin/build.sh | 45 ++++++++++++++++++ .../bnhmeijer-ca-certificates.control | 12 +++++ .../bnhmeijer-ca-certificates/DEBIAN/postinst | 12 +++++ .../bnhmeijer-ca-certificates/DEBIAN/postrm | 12 +++++ .../bnhmeijer/bnhmeijer-root-ca.crt | 31 ++++++++++++ sources/eendoe_hyperdeck/bin/build.sh | 4 ++ sources/eendoe_repository/bin/build.sh | 4 ++ sources/eendoe_srs/bin/build.sh | 4 ++ .../bnhmeijer-ca-certificates-1.0.0_all.deb | Bin 0 -> 2408 bytes 13 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 binaries/pool/main/b/bnhmeijer-ca-certificates/bnhmeijer-ca-certificates-1.0.0_all.deb create mode 100755 sources/bnhmeijer_ca_certificates/bin/build.sh create mode 100644 sources/bnhmeijer_ca_certificates/bnhmeijer-ca-certificates.control create mode 100755 sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postinst create mode 100755 sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postrm create mode 100644 sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/usr/local/share/ca-certificates/bnhmeijer/bnhmeijer-root-ca.crt create mode 100644 staging/bnhmeijer-ca-certificates-1.0.0_all.deb diff --git a/.gitea/workflows/build-and-publish.yaml b/.gitea/workflows/build-and-publish.yaml index 914df52..77e8b9b 100644 --- a/.gitea/workflows/build-and-publish.yaml +++ b/.gitea/workflows/build-and-publish.yaml @@ -82,13 +82,18 @@ jobs: test -d /usr/share/hyperdeck test -f /etc/hyperdeck/config.json test -f /usr/lib/systemd/system/hyperdeck.service - python3 -m py_compile /usr/share/hyperdeck/main.py - echo "eendoe-hyperdeck: OK" + - name: Test install bnhmeijer-ca-certificates + run: | + echo "=== Installing bnhmeijer-ca-certificates ===" + sudo apt-get install -y ./staging/bnhmeijer-ca-certificates-*.deb + dpkg -s bnhmeijer-ca-certificates | grep -q "Status: install ok installed" + test -f /usr/local/share/ca-certificates/bnhmeijer/bnhmeijer-root-ca.crt + echo "bnhmeijer-ca-certificates: OK" - name: Test package uninstall and cleanup run: | echo "=== Testing package removal ===" - sudo apt-get remove -y eendoe-hyperdeck eendoe-srs eendoe-repository + sudo apt-get remove -y eendoe-hyperdeck eendoe-srs eendoe-repository bnhmeijer-ca-certificates echo "Package removal: OK" publish: diff --git a/README.md b/README.md index bb921aa..6d97920 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Debian / APT package repository bronbestanden en build tools voor Eendoe. - **`sources/`**: Bronbestanden, control definities en packaging scripts voor de te bouwen packages: - `eendoe_repository`: Repository configuratie package (`/etc/apt/sources.list.d/`) + - `bnhmeijer_ca_certificates`: Bnhmeijer Homelab Root CA package voor `/usr/local/share/ca-certificates/` - `eendoe_hyperdeck`: Hyperdeck Python service en systemd unit - `eendoe_srs`: SRS streaming server package en systemd unit - **`staging/`**: Bestaande en nieuw gebouwde `.deb` packages (exclusief Oracle database packages). diff --git a/binaries/index.html b/binaries/index.html index d12d50c..2d85664 100644 --- a/binaries/index.html +++ b/binaries/index.html @@ -645,6 +645,17 @@ +
+
+
bnhmeijer-ca-certificates
+
Bnhmeijer Homelab Root CA certificaat. Voegt de root CA automatisch toe aan de OS trust store zodat interne TLS-certificaten direct vertrouwd worden.
+
+ +
+
eendoe-repository
diff --git a/binaries/pool/main/b/bnhmeijer-ca-certificates/bnhmeijer-ca-certificates-1.0.0_all.deb b/binaries/pool/main/b/bnhmeijer-ca-certificates/bnhmeijer-ca-certificates-1.0.0_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..3cf5f712983ef50e22455b1187aff313241e6ce1 GIT binary patch literal 2408 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 literal 0 HcmV?d00001 diff --git a/sources/bnhmeijer_ca_certificates/bin/build.sh b/sources/bnhmeijer_ca_certificates/bin/build.sh new file mode 100755 index 0000000..bd1874a --- /dev/null +++ b/sources/bnhmeijer_ca_certificates/bin/build.sh @@ -0,0 +1,45 @@ +#!/bin/sh +set -e + +CONTROL_FILE=$(ls -1 *.control 2>/dev/null | head -n 1) + +if [ -z "$CONTROL_FILE" ]; then + echo "Fout: Geen .control bestand gevonden in $(pwd)" >&2 + exit 1 +fi + +PACKAGE_NAME=$(awk '/^Package: /{print $NF}' "$CONTROL_FILE") +DETECTED_VERSION=$(awk '/^Version: /{print $NF}' "$CONTROL_FILE") + +# Version resolution: CLI arg > ENV var > .control version > default 0.1.0 +if [ -n "$1" ]; then + VERSION="$1" +elif [ -n "$PACKAGE_VERSION" ]; then + VERSION="$PACKAGE_VERSION" +elif [ -n "$VERSION" ]; then + VERSION="$VERSION" +elif [ "$DETECTED_VERSION" != "{VERSION}" ] && [ -n "$DETECTED_VERSION" ]; then + VERSION="$DETECTED_VERSION" +else + VERSION="0.1.0" +fi + +mkdir -p "packaging/$PACKAGE_NAME/DEBIAN" +sed "s/{VERSION}/${VERSION}/" "$CONTROL_FILE" > "packaging/$PACKAGE_NAME/DEBIAN/control" + +ARCH=$(awk '/^Architecture: /{print $NF}' "packaging/$PACKAGE_NAME/DEBIAN/control") +ARCH="${ARCH:-all}" +DEB_FILENAME="${PACKAGE_NAME}-${VERSION}_${ARCH}.deb" + +echo "Building package: $PACKAGE_NAME ($VERSION) [$ARCH] -> $DEB_FILENAME" + +# Ensure correct Debian directory permissions +find "packaging/$PACKAGE_NAME" -type d -exec chmod 755 {} + +find "packaging/$PACKAGE_NAME/DEBIAN" -type f -exec chmod 755 {} + 2>/dev/null || true + +# Build debian binary package +dpkg-deb --build "packaging/$PACKAGE_NAME" "$DEB_FILENAME" + +# Cleanup temporary control file +rm -f "packaging/$PACKAGE_NAME/DEBIAN/control" +echo "Succesvol gebouwd: $DEB_FILENAME" diff --git a/sources/bnhmeijer_ca_certificates/bnhmeijer-ca-certificates.control b/sources/bnhmeijer_ca_certificates/bnhmeijer-ca-certificates.control new file mode 100644 index 0000000..f864411 --- /dev/null +++ b/sources/bnhmeijer_ca_certificates/bnhmeijer-ca-certificates.control @@ -0,0 +1,12 @@ +Package: bnhmeijer-ca-certificates +Version: 1.0.0 +Section: utils +Priority: optional +Architecture: all +Depends: ca-certificates +Maintainer: Bart Meijer +Description: Bnhmeijer Homelab Root CA certificate + Installs the Bnhmeijer Homelab Root CA certificate into the system trust store + (/usr/local/share/ca-certificates/bnhmeijer/) and updates the CA trust list. + Ensures all homelab internal services (*.lan and *.bnhmeijer.nl) signed by + cert-service are automatically trusted by the OS and browsers. diff --git a/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postinst b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postinst new file mode 100755 index 0000000..08d175e --- /dev/null +++ b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postinst @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +case "$1" in + configure|abort-upgrade) + if command -v update-ca-certificates >/dev/null 2>&1; then + echo "Updating system trusted CA certificates..." + update-ca-certificates >/dev/null 2>&1 || true + fi + ;; +esac +exit 0 diff --git a/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postrm b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postrm new file mode 100755 index 0000000..71dbbcd --- /dev/null +++ b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/DEBIAN/postrm @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +case "$1" in + remove|purge|disappear) + if command -v update-ca-certificates >/dev/null 2>&1; then + echo "Removing certificate from system trust store..." + update-ca-certificates --fresh >/dev/null 2>&1 || true + fi + ;; +esac +exit 0 diff --git a/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/usr/local/share/ca-certificates/bnhmeijer/bnhmeijer-root-ca.crt b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/usr/local/share/ca-certificates/bnhmeijer/bnhmeijer-root-ca.crt new file mode 100644 index 0000000..2556a3b --- /dev/null +++ b/sources/bnhmeijer_ca_certificates/packaging/bnhmeijer-ca-certificates/usr/local/share/ca-certificates/bnhmeijer/bnhmeijer-root-ca.crt @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFZzCCA0+gAwIBAgIRALCvASaMQ9DZPQrGDIYTVkswDQYJKoZIhvcNAQELBQAw +TTEiMCAGA1UEAwwZQm5obWVpamVyIEhvbWVsYWIgUm9vdCBDQTEaMBgGA1UECgwR +Qm5obWVpamVyIEhvbWVsYWIxCzAJBgNVBAYTAk5MMB4XDTI2MTAyMDIwMjQ0OVoX +DTM2MTAxNzIwMjQ0OVowTTEiMCAGA1UEAwwZQm5obWVpamVyIEhvbWVsYWIgUm9v +dCBDQTEaMBgGA1UECgwRQm5obWVpamVyIEhvbWVsYWIxCzAJBgNVBAYTAk5MMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuOKEFT0p9uzcxf5hfPyvjFDd +Fs2GxN3nUNJ+6fzdwR3Bf0yeFYLIHA8C/7hMApt5JGW/ndnYEA7hk0Oj2mbXUo7o +j7zIKke5OALBO3SSvJSywwBOsaZ95sSTfkYvmCOLojH/EUmLA6+MmUtSTWMIm1do +ki2H8BEdXzeE4XtI/Fw8v1kRX0AYA3l4+AB8ejVSHIuhcWgbrwGKkRZFBEAJMXEp +IKkYiYPxAZ4AUy4FJHVJwpdK9JLc6ORQS4kpBWJRGROwSePs2hfMn3tSg3xfyOK/ +c8bOyGTx9O1tjWcfN2cPbGhJ5Uo9j5uyZnAvdkR0mniELB6/G6jM4UzKfmVvQEMt +jH76vowFzJmDiKWRJgmq1rEEdSVPDowateLEac5YkGIc9e+/1G3yKQH+eqcHbGvQ +ORnQF03rB5jNWUHdF5WSbMHPszOndMHnUYMrHC025ApIKXcO8R1/ld0DsMRGY4sS +wQfRQW5oVOOxQkPMk2LcC4v9Gz/ox9DuAhBXpQUpoXkZ/Zdd2zI2eKLnKuYqkiUv +UOUJAUapyztQCCWpxeU9gxTBOrN1g5sSVy3p5lrSWNMQUNXNyOr3ylj3XVQFZxtR +WM64tHb8M4UpHYvLG7Bw7m59BgwgEJP686ShnQg/CpE0XpILU+GH8FPL2k8Zl9RB +H3jJjLrGEjexiv0KdDcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAQYwHQYDVR0OBBYEFH1zTZdKh8Q63s5JV5UwrfHB6rAYMA0GCSqGSIb3 +DQEBCwUAA4ICAQBQmMk725RF2qzN5Me+MuY/N0GdJGNauZ9KvzSybyCIrXfycmid +vwU+g1j3nFwVs2FSH3cU6s06jH1Lr0soz74cEmU/Zn94G3Yp8nMh3Nz+qwmJenD1 +ffF9bTgk2b/jhSRRNU4nDm0HvdfUGLTxgmtAkI45dAmmtynGhKhaFqyxbosxz/Pr +Cqzo6SSrKYx7bHj8Wk2wdB6hDY5UbzOvBVWq8JqZCJiSLNjZNgD64YFUtbBTK3kD +CLJhesuf6Qg8UBUL34NqIHfTC5J6G2AlFOLBi6DKBc7rnTlHCCesUUGZqxQy58nC +MSlRLKRg3tqQq1Hy839Vb/llmpQDujWDaQ7ptN1bn2ATzdruc+PW2pPv6Ffs3lS7 +o+69mk5/NDhkqNCM1EYK2hDEkO1jdiyUgmXi0i7ni7Qea3HSK2WYAtHPTIDHAGCz +O2Lvfbeq70rfGIf2FJRItIqmS8OjOggGp++ED2d49hvw3Tfxnw108SqYFph2QN/d +rt8kvcXkMNGQXE7eIqyY5sgI3tJuYpy2r7BWsg0EFwYVphZ0o/SFZTleSTKSxGpr +NLXKcqxyEYCmZfZLiWRcvTFOkzCqnLQZGJMMdk3Nkq6IwAaZiyRtW6QBHLaIHX/v +UX0C3FD+bSuRfZbZGcTmdHVLKAdCOfMp0w/oW5X4vURcjoGJNbd8z0UU0A== +-----END CERTIFICATE----- diff --git a/sources/eendoe_hyperdeck/bin/build.sh b/sources/eendoe_hyperdeck/bin/build.sh index 00ba7f6..bd1874a 100755 --- a/sources/eendoe_hyperdeck/bin/build.sh +++ b/sources/eendoe_hyperdeck/bin/build.sh @@ -33,6 +33,10 @@ DEB_FILENAME="${PACKAGE_NAME}-${VERSION}_${ARCH}.deb" echo "Building package: $PACKAGE_NAME ($VERSION) [$ARCH] -> $DEB_FILENAME" +# Ensure correct Debian directory permissions +find "packaging/$PACKAGE_NAME" -type d -exec chmod 755 {} + +find "packaging/$PACKAGE_NAME/DEBIAN" -type f -exec chmod 755 {} + 2>/dev/null || true + # Build debian binary package dpkg-deb --build "packaging/$PACKAGE_NAME" "$DEB_FILENAME" diff --git a/sources/eendoe_repository/bin/build.sh b/sources/eendoe_repository/bin/build.sh index 00ba7f6..bd1874a 100755 --- a/sources/eendoe_repository/bin/build.sh +++ b/sources/eendoe_repository/bin/build.sh @@ -33,6 +33,10 @@ DEB_FILENAME="${PACKAGE_NAME}-${VERSION}_${ARCH}.deb" echo "Building package: $PACKAGE_NAME ($VERSION) [$ARCH] -> $DEB_FILENAME" +# Ensure correct Debian directory permissions +find "packaging/$PACKAGE_NAME" -type d -exec chmod 755 {} + +find "packaging/$PACKAGE_NAME/DEBIAN" -type f -exec chmod 755 {} + 2>/dev/null || true + # Build debian binary package dpkg-deb --build "packaging/$PACKAGE_NAME" "$DEB_FILENAME" diff --git a/sources/eendoe_srs/bin/build.sh b/sources/eendoe_srs/bin/build.sh index 00ba7f6..bd1874a 100755 --- a/sources/eendoe_srs/bin/build.sh +++ b/sources/eendoe_srs/bin/build.sh @@ -33,6 +33,10 @@ DEB_FILENAME="${PACKAGE_NAME}-${VERSION}_${ARCH}.deb" echo "Building package: $PACKAGE_NAME ($VERSION) [$ARCH] -> $DEB_FILENAME" +# Ensure correct Debian directory permissions +find "packaging/$PACKAGE_NAME" -type d -exec chmod 755 {} + +find "packaging/$PACKAGE_NAME/DEBIAN" -type f -exec chmod 755 {} + 2>/dev/null || true + # Build debian binary package dpkg-deb --build "packaging/$PACKAGE_NAME" "$DEB_FILENAME" diff --git a/staging/bnhmeijer-ca-certificates-1.0.0_all.deb b/staging/bnhmeijer-ca-certificates-1.0.0_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..3cf5f712983ef50e22455b1187aff313241e6ce1 GIT binary patch literal 2408 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 literal 0 HcmV?d00001