APT für die Produktion auf Debian/Ubuntu: Pinning, signierte Repositories, Spiegel und Caching im Deep Dive

In modernen Produktionsumgebungen sind Debian und Ubuntu die Arbeitspferde unzähliger Container, VMs und Bare-Metal-Server. Wer Paket- und Repository-Management nur mit den Standarddefaults betreibt, verschenkt Stabilität, Sicherheit und Performance. In diesem Tutorial steigen wir tief in die fortgeschrittene APT-Nutzung ein: Sie lernen Pinning, sauber signierte Repositories ohne legacy apt-key, lokale Caching-Proxies, Private-Repos mit Snapshots, gespiegelte Upstream-Repositories und Automatisierung. Zudem zeigen wir, wie sich das meiste in grafischen UIs auf Ubuntu nachvollziehen lässt.

Die Zielgruppe sind fortgeschrittene Linux- und DevOps-Professionals, die reproduzierbare Builds, sicheres Patch-Management und kontrollierte Rollouts über viele Systeme hinweg sicherstellen müssen. Der Fokus liegt auf Debian und Ubuntu (Server/Cloud & Desktop) mit Beispielen für CLI, Konfigurationen und passende UI-Schritte.

Voraussetzungen

Sie benötigen Root- oder Sudo-Rechte auf einem Debian- oder Ubuntu-System. Kenntnisse in Linux-Netzwerkgrundlagen, systemd, grundlegender GPG-Nutzung und Git/CI sind hilfreich. Für einige Abschnitte wie private Repos setzen wir Basiskenntnisse in HTTP-Serving (Nginx/Apache) voraus.

Hintergrund: Wie APT Vertrauensketten und Repositories verwaltet

APT aggregiert Paketquellen (sources.list und *.list in sources.list.d), lädt Indexdaten (Packages, Release) und validiert Signaturen. Das Vertrauensmodell von APT basiert auf mit GPG signierten Release-Dateien der Repositories. Das sorgt dafür, dass nur Pakete aus Quellen installiert werden, deren Release-Dateien mit einem Ihnen bekannten Schlüssel signiert wurden.

Wichtig: Der historische Weg über apt-key ist deprecatiert. Moderne Setups verwenden per-Repository-Keyrings und das signed-by-Attribut in der APT-Source. Das reduziert die Vertrauensfläche und verhindert, dass ein einzelner globaler Schlüssel alle Repos autorisiert. Weitere Details finden Sie in den offiziellen Manpages und Howtos: apt-secure(8) und sources.list(5) auf manpages.debian.org und manpages.ubuntu.com.

Trust-Links: apt-secure(8), apt_preferences(5), Debian Wiki: Secure APT, Ubuntu Server: Package Management.

Schritt 1: Ist-Stand analysieren

Bevor Sie etwas ändern, verschaffen Sie sich einen Überblick über Quellen, Prioritäten und aktive Policies.

sudo apt-get update
apt-cache policy
apt-cache policy <paketname>

Mit apt-cache policy sehen Sie die Herkunft (Origin, Suite, Version) und die eingestellten Prioritäten. Notieren Sie, welche Repositories aktiv sind und woher kritische Pakete stammen.

Listen Sie Ihre Sources auf:

grep -R "^deb" /etc/apt/sources.list /etc/apt/sources.list.d/ | sed 's/#.*$//' | sed '/^\s*$/d'

Und prüfen Sie globale APT-Konfigurationen:

grep -R . /etc/apt/apt.conf.d/ | sed 's/#.*$//'

Schritt 2: Sauberes Key-Management mit signed-by (ohne apt-key)

apt-key ist veraltet, weil es Schlüssel global in trusted.gpg einträgt. Best Practice ist, für jedes Repo einen separaten Keyring in /usr/share/keyrings abzulegen und die Source mit signed-by zu binden. So minimieren Sie die Vertrauensdomäne eines Schlüssels.

Beispiel: Einbinden eines Drittanbieter-Repos mit signiertem Keyring.

# 1) Key herunterladen und als dearmored GPG-Keyring ablegen
curl -fsSL https://example.com/repo-signing-key.gpg | \
  sudo gpg --dearmor -o /usr/share/keyrings/example-archive-keyring.gpg

# 2) Repository-Datei erstellen (Anpassen: Suite & Archs)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/example-archive-keyring.gpg] \
https://repo.example.com/debian stable main" | \
  sudo tee /etc/apt/sources.list.d/example.list

# 3) Aktualisieren und testen
sudo apt-get update
apt-cache policy | grep -A2 example.com

Vermeiden Sie apt-key add <key>. Sie erweitern sonst die globale Trust-List. Prüfen Sie die offizielle Empfehlung in den Manpages: apt-key(8) weist explizit auf die Deprecation hin.

Optional: Halten Sie Keyrings unter Versionskontrolle (z. B. in einem Konfigurations-Repo) und verteilen Sie sie mit Ihrem CM-Tool (Ansible, Puppet, Chef). Damit dokumentieren und auditieren Sie den Trust-State Ihrer Flotte.

Schritt 3: APT Pinning gezielt einsetzen

Mit apt Pinning steuern Sie, aus welchem Repository welche Version bevorzugt wird. Das ist essenziell, wenn Sie Backports, PPAs oder mehrere Suiten (z. B. bionic, bionic-updates, bionic-security) parallel nutzen. Pinning wird über /etc/apt/preferences(.d/*.pref) gesteuert.

Wichtige Eckpunkte:

  • APT-Prioritäten (Pin-Priority) bestimmen die Auswahl. Werte < 0 verhindern Installationen, 100 bis 500 setzen normale Präferenzen, > 1000 erzwingen Downgrades.
  • Gepinnt wird auf Release-Felder (o=Origin, a=Suite/Archive z. B. stable, bullseye-backports, n=Codename, l=Label) oder Paketmuster.
  • apt-cache policy zeigt die resultierenden Prioritäten und welche Version installiert würde.

Beispiel: Debian Backports nur auf Nachfrage erlauben (empfohlen), aber nicht automatisch bevorzugen:

sudo tee /etc/apt/preferences.d/99-backports.pref >/dev/null <<'EOF'
Package: *
Pin: release a=bullseye-backports
Pin-Priority: 100
EOF

# Nutzung für einzelnes Paket:
sudo apt-get -t bullseye-backports install <paket>

Beispiel: Bevorzugen von Security-Updates gegenüber -updates und -proposed:

sudo tee /etc/apt/preferences.d/90-security.pref >/dev/null <<'EOF'
Package: *
Pin: release a=jammy-security
Pin-Priority: 990

Package: *
Pin: release a=jammy-updates
Pin-Priority: 500

Package: *
Pin: release a=jammy-proposed
Pin-Priority: 100
EOF

Beispiel: PPA streng einschränken, nur für ein konkretes Paket erlauben:

# 1) PPA hinzufügen (siehe nächster Abschnitt für sichere Key-Verwaltung)
# 2) Nur Paket foo darf aus dem PPA installiert werden
sudo tee /etc/apt/preferences.d/50-ppa-foo.pref >/dev/null <<'EOF'
Package: *
Pin: origin ppa.launchpad.net
Pin-Priority: 100

Package: foo
Pin: origin ppa.launchpad.net
Pin-Priority: 700
EOF

Tipp: Nutzen Sie apt-cache policy foo, um zu prüfen, ob Ihr Pinning greift. Beachten Sie, dass Origin/Suite je nach Repo variieren. Lesen Sie die Release-Dateien mit apt-cache policy oder apt-cache madison.

Schritt 4: PPAs unter Ubuntu – sicher und kontrolliert

PPAs (Personal Package Archives) sind bei Ubuntu verbreitet, bringen aber Risiken. Verwenden Sie PPAs sparsam, pinnen Sie strikt und setzen Sie Repository-spezifische Keyrings. Offizielle PPA-Dokumentation: Launchpad PPA.

CLI-Variante mit add-apt-repository und modernem Keyring-Ansatz:

# Beispiel-PPA: ppa:mozillateam/ppa (als Platzhalter)
# 1) Key herunterladen und binden
UBU_CODENAME=$( . /etc/os-release && echo "$UBUNTU_CODENAME" )
PPA_PATH="https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu"
curl -fsSL "${PPA_PATH}/dists/${UBU_CODENAME}/Release.gpg" | \
  sudo gpg --dearmor -o /usr/share/keyrings/mozillateam-ppa.gpg

# 2) Source anlegen (mit signed-by)
echo "deb [signed-by=/usr/share/keyrings/mozillateam-ppa.gpg] ${PPA_PATH} ${UBU_CODENAME} main" | \
  sudo tee /etc/apt/sources.list.d/mozillateam-ppa.list

sudo apt-get update

UI-Variante auf Ubuntu Desktop: Öffnen Sie „Software & Aktualisierungen“ → Reiter „Andere Software“ → „Hinzufügen“. Tragen Sie die APT-Zeile z. B. „deb https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu jammy main“ ein. Der grafische Dialog verwaltet standardmäßig Schlüssel globaler – kombinieren Sie das mit manueller signed-by-Pflege für bestmögliche Sicherheit.

Pinning für PPAs ist Pflicht in Produktivumgebungen, um unbeabsichtigte Massenupdates zu verhindern. Siehe Beispiel im vorherigen Abschnitt.

Schritt 5: Paket-Holds, Version Freezes und geplante Upgrades

Neben Pinning sind Holds nützlich, um Upgrades temporär zu blockieren. Verwenden Sie apt-mark hold, um kritische Services zu stabilisieren, etwa vor großen Events:

sudo apt-mark hold nginx
apt-mark showhold

Downgrades sind mit apt-Prioritäten > 1000 möglich, sollten aber mit Vorsicht genutzt werden. Regeln Sie Freigaben über Metriken (Canary Hosts) und rollen Sie erst danach flächig aus. In CI/CD können Sie Versionsstrings festschreiben und mit dpkg –compare-versions testen.

Schritt 6: Lokalen APT-Cache-Proxy mit apt-cacher-ng einrichten

Ein Cache-Proxy reduziert Bandbreite, beschleunigt Deployments und stabilisiert Updates bei Netzproblemen. apt-cacher-ng ist dafür ein bewährter, leichter Dienst.

Installation auf einem dedizierten Host (z. B. cache.internal):

sudo apt-get update
sudo apt-get install -y apt-cacher-ng

Standardmäßig lauscht apt-cacher-ng auf Port 3142. Prüfen Sie die Konfiguration in /etc/apt-cacher-ng/acng.conf. Hilfreiche Optionen sind ReportPage, Remap-Parameter und Exclude-Listen. Offizielle Doku: apt-cacher-ng.

Clients konfigurieren Sie via APT-Proxy:

echo 'Acquire::http::Proxy "http://cache.internal:3142";' | sudo tee /etc/apt/apt.conf.d/01proxy

Für HTTPS-Repos nutzt apt-cacher-ng ein spezielles Remapping (Es wird der Host im Pfad codiert). Testen Sie Updates:

sudo apt-get update

In großen Umgebungen empfiehlt sich die zentrale Verteilung der Proxy-Konfiguration via Cloud-Init, Ansible oder System-Image-Builds. Für Fallbacks können Sie Acquire::http::ProxyAutoDetect nutzen.

Schritt 7: Private, signierte APT-Repositories mit Snapshots (aptly)

Für reproduzierbare Builds und kontrollierte Rollouts sind private Repositories mit Snapshots ideal. aptly ist ein beliebtes Tool, um Repos zu aggregieren, zu snapshotten und zu veröffentlichen – lokal oder auf S3/HTTP. Doku: aptly.

Installation:

sudo apt-get install -y gnupg2 aptly

GPG-Schlüssel erstellen (oder vorhandenen verwenden):

gpg --quick-gen-key "Repo Signing (Company) <[email protected]>" rsa4096 sign 2y
KEYID=$(gpg --list-keys --with-colons | awk -F: '/^pub/ {print $5; exit}')

Lokales Repo anlegen und Pakete einspielen:

# Neues Repo anlegen
aptly repo create -comment="internal base repo" -distribution=stable -component=main internal-base

# .deb-Pakete hinzufügen (eigene Builds oder fremde Artefakte)
aptly repo add internal-base /path/to/*.deb

# Snapshot erstellen
aptly snapshot create internal-2025-08-01 from repo internal-base

Snapshot veröffentlichen (signiert) und via Nginx servieren:

aptly publish snapshot -gpg-key="${KEYID}" internal-2025-08-01

# Standardpfad: ~/.aptly/public
# Nginx-Snippet
sudo tee /etc/nginx/sites-available/aptly.conf >/dev/null <<'EOF'
server {
    listen 80;
    server_name repo.internal;
    root /home/aptly/.aptly/public;
    location / {
        autoindex on;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/aptly.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Clients binden den Repo-Key (dearmored) und die Source ein:

curl -fsSL http://repo.internal/public/keyring.gpg | \
  sudo gpg --dearmor -o /usr/share/keyrings/internal-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/internal-archive-keyring.gpg] \
http://repo.internal stable main" | sudo tee /etc/apt/sources.list.d/internal.list

sudo apt-get update

Mit aptly-Snapshots können Sie Releases einfrieren, testen und anschließend promote-publishen, ohne dass sich der Inhalt ändert. Sie können auch Remote-Repos spiegeln und daraus Subsets publizieren, inklusive Filters. Für produktive Pipelines lohnt sich die Kombination mit CI (GitHub Actions/GitLab CI) und S3-Backends.

Schritt 8: Offizielle Repositories spiegeln (debmirror) – Edge-Kontrolle und Offline-Ready

Für Standorte mit schwacher Konnektivität oder Compliance-Anforderungen können Sie offizielle Debian/Ubuntu-Repos mit debmirror spiegeln. Das ist schwergewichtiger als Caching, bietet aber vollständige Kontrolle und Planbarkeit. Debian Anleitung: Debian Mirroring.

Beispiel: Teilspiegel für Ubuntu jammy amd64 (main, universe):

sudo apt-get install -y debmirror gnupg
sudo mkdir -p /srv/mirror/ubuntu
sudo debmirror --arch=amd64 \
  --section=main,universe \
  --dist=jammy,jammy-updates,jammy-security \
  --method=http --host=archive.ubuntu.com --root=ubuntu \
  --progress --i18n --passive \
  --ignore-release-gpg --nosource \
  /srv/mirror/ubuntu

Validieren Sie Signaturen und konfigurieren Sie GPG-Keys für die Release-Prüfung (ignorerelated Flags oben sind nur für initiale Tests). Stellen Sie den Mirror per Nginx bereit und referenzieren Sie ihn in Ihren clientspezifischen sources.list-Dateien. Für Debian tauschen Sie Host/Root/Suites entsprechend aus.

Schritt 9: Automatisierung mit Ansible – Idempotente Repos und Pins

Für Flottenverwaltung sind deklarative Playbooks unverzichtbar. Ab Ansible 2.10 sollten Sie apt_key nicht mehr nutzen, sondern Keyrings manuell bereitstellen und signed-by referenzieren.

Beispiel-Playbook: Repository mit Keyring und Pinning:

---
- hosts: all
  become: true
  tasks:
    - name: Deploy repo keyring
      get_url:
        url: https://repo.example.com/keys/example.gpg
        dest: /usr/share/keyrings/example-archive-keyring.gpg
        mode: '0644'
      register: key

    - name: Configure APT source
      copy:
        dest: /etc/apt/sources.list.d/example.list
        content: |
          deb [arch=amd64 signed-by=/usr/share/keyrings/example-archive-keyring.gpg] \
          https://repo.example.com/debian stable main
      notify: apt update cache

    - name: Pin repo selectively
      copy:
        dest: /etc/apt/preferences.d/50-example.pref
        content: |
          Package: *
          Pin: origin repo.example.com
          Pin-Priority: 100

          Package: myapp
          Pin: origin repo.example.com
          Pin-Priority: 800

  handlers:
    - name: apt update cache
      apt:
        update_cache: yes

Für Proxy-Settings definieren Sie Acquire::http::Proxy via ansible.builtin.copy oder template und verteilen sie zentral.

Schritt 10: APT in Containern und CI/CD – reproduzierbare, schlanke Images

Beim Bau von Container-Images ist APT-Handling oft ausschlaggebend für Größe, Sicherheit und Reproduzierbarkeit. Best Practices:

  • Verwenden Sie no-install-recommends, um Paketballast zu vermeiden.
  • Führen Sie apt-get update und install in einer Schicht aus und löschen Sie /var/lib/apt/lists/* im selben Layer.
  • Pinning und eigene Repos erlauben Ihnen, exakt getestete Versionen zu bauen.
  • Validieren Sie Checksums von heruntergeladenen Artefakten zusätzlich.

Beispiel-Dockerfile (Ubuntu):

FROM ubuntu:22.04
SHELL ["/bin/bash", "-euxo", "pipefail", "-c"]
RUN echo 'Acquire::Retries "3";' > /etc/apt/apt.conf.d/80-retries \
 && apt-get update \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
      ca-certificates curl \
 && rm -rf /var/lib/apt/lists/*

Für private Repos im Build: Binden Sie Keyrings read-only ein, nutzen Sie Build Secrets oder ARGs für temporäre Token. Entfernen Sie sensible Dateien vor dem finalen Layer (Multi-Stage Builds).

Schritt 11: Arbeiten mit grafischen UIs (Ubuntu Desktop)

Auch wenn Server headless sind, hilft es, UI-Pfade zu kennen – etwa für Entwickler-Workstations.

Repos verwalten:

  • Öffnen Sie „Software & Aktualisierungen“.
  • Reiter „Ubuntu-Software“: Schalten Sie Komponenten (main, universe, restricted, multiverse) und Quellen (CD, Server) um.
  • Reiter „Aktualisierungen“: Wählen Sie Kanäle (Sicherheitsupdates, vorgeschlagene Updates), Update-Häufigkeit und LTS-Punktreleases.
  • Reiter „Andere Software“: Fügen Sie benutzerdefinierte APT-Zeilen hinzu oder entfernen Sie sie.

PPAs: Über „Andere Software“ können Sie PPAs hinzufügen. Achten Sie darauf, die resultierenden .list-Dateien und Schlüssel anschließend manuell zu härten (signed-by, Pinning). Verbinden Sie das mit CLI-Praktiken aus diesem Tutorial.

Synaptic (optional): Mit Synaptic sehen Sie unter „Ursprung/Origin“ schnell, aus welchem Repo eine Version stammt, und können gezielt Versionen auswählen. Für Pinning bleibt die CLI maßgeblich.

Schritt 12: Troubleshooting und fortgeschrittene Konfiguration

Fehler „NO_PUBKEY“ oder „The following signatures couldn’t be verified“:

  • Der passende GPG-Key fehlt oder ist abgelaufen. Laden Sie den korrekten Key, dearmoren Sie ihn und referenzieren Sie ihn via signed-by in der entsprechenden .list-Datei.
  • Prüfen Sie, ob die Release-Datei noch gültig ist (Valid-Until). Bei Offline-Spiegeln kann sie ablaufen. Workaround (mit Bedacht):
echo 'Acquire::Check-Valid-Until "false";' | sudo tee /etc/apt/apt.conf.d/99no-check-valid-until

Dieser Workaround schwächt die Sicherheitsgarantien und sollte nur temporär genutzt werden, bis der Mirror aktualisiert ist.

Proxy-Probleme: Wenn apt-get update bei HTTPS-Repos hinter einem strengen Proxy hängt, setzen Sie Acquire::https::Proxy analog zu http. Beispiel:

sudo tee /etc/apt/apt.conf.d/01proxy >/dev/null <<'EOF'
Acquire::http::Proxy "http://proxy.internal:3128";
Acquire::https::Proxy "http://proxy.internal:3128";
EOF

Langsame Update-Läufe: Aktivieren Sie pipelining und Retries vorsichtig, beachten Sie Upstream-Kompatibilität:

sudo tee /etc/apt/apt.conf.d/80-tuning >/dev/null <<'EOF'
Acquire::Retries "3";
Acquire::CompressionTypes::Order { "gz"; };
APT::Get::Assume-Yes "false";
APT::Install-Recommends "false";
EOF

Konflikte bei gemischten Suiten: Nutzen Sie apt-cache policy und apt-get -s install <paket> zur Simulation. Pinnen Sie restriktiver und reduzieren Sie die Anzahl der aktiven Fremdrepos.

Fehleranalyse auf Paketebene: Lesen Sie /var/log/apt/term.log und /var/log/dpkg.log. Für Pre-/Postinst-Hooks nutzen Sie systemctl status, journalctl -u apt-daily.service und prüfen Trigger in /var/lib/dpkg/info/.

Schritt 13: Security- und Change-Transparenz: apt-listbugs und apt-listchanges

Für produktionskritische Systeme lohnt es, kritische Bugs und Changelogs vor der Installation einzusehen. apt-listbugs warnt vor RC-Bugs, apt-listchanges zeigt Changelogs an.

sudo apt-get install -y apt-listbugs apt-listchanges

Konfiguration erfolgt über Debconf bzw. /etc/apt/listchanges.conf. Für Non-Interactive-Umgebungen können Sie Mails versenden lassen oder die Ausgabe in CI-Pipelines escapen.

Trust-Links: Debian Wiki: apt-listbugs, apt-listchanges(1).

Schritt 14: Release-Kanäle auf Ubuntu und Debian strategisch einsetzen

Ubuntu:

  • -security: Sicherheitsupdates mit hoher Priorität
  • -updates: Reguläre stabile Updates
  • -backports: Neuere Pakete rückportiert, standardmäßig nicht auto-bevorzugt
  • -proposed: Kandidaten für -updates, nur für Tests

Debian:

  • stable, stable-updates, stable-security
  • backports: analog Ubuntu
  • testing/unstable: für Entwickler-Workstations gedacht, nicht für Produktion

Best Practice: Security hoch priorisieren, Backports nur gezielt pinnen, proposed/testing nur selektiv und kurzzeitig einsetzen. Dokumentieren Sie Ihre Kanalstrategie, um Überraschungen in Wartungsfenstern zu vermeiden.

Schritt 15: Governance, Compliance und Auditing

Verwenden Sie per-Repo Keyrings, führen Sie Schlüsselrotationen geplant durch und versionieren Sie alle APT-Konfigurationen. Auditieren Sie regelmäßig /etc/apt/sources.list.d auf Sprawl. Nutzen Sie CI-Checks, die unerwünschte Origins in Pull Requests blockieren.

Ergänzen Sie Compliance durch eine Positivliste erlaubter Repos in Ihrer CM-Engine und verifizieren Sie auf Hosts mit einem Compliance-Agent oder OSQuery. Für verteilte Teams kann eine interne Dokumentation mit generierten apt policy Snapshots pro Environment helfen.

Nächste Schritte: Zusammenführen zur produktionsreifen Pipeline

Fassen Sie die Punkte in einer Pipeline zusammen:

  • Build: Eigene Pakete bauen, signieren, nach aptly pushen, Snapshot erstellen.
  • Test: Snapshot in Staging publizieren, Integrationstests ausführen, CVE-Scanner laufen lassen.
  • Promote: Snapshot nach Produktion promoten (immutabler Inhalt), Clients via Ansible auf neue Distribution umstellen.
  • Operate: apt-cacher-ng/Mirror betreiben, Metriken sammeln (Hits, Bandbreite), Schlüsselrotationen planen.

Mit diesem Setup erhalten Sie reproduzierbare, kontrollierte und auditierbare Paketflüsse, die auch bei großen Flotten und mehreren Standorten skalieren.

Referenzen und weiterführende Links

Offizielle Dokumentation:

Tools und Projekte:

Fazit

APT ist weit mehr als apt-get install. Wer Debian/Ubuntu produktionsreif betreiben will, braucht kontrollierte Vertrauensketten, präzises Pinning, reproduzierbare Repos mit Snapshots sowie performante Verteilung via Caching oder Spiegel. Mit per-Repo signed-by-Keyrings reduzieren Sie Risiko, mit Pinning und Holds beherrschen Sie Rollouts, und mit aptly plus apt-cacher-ng skalieren Sie die Versorgung ganzer Flotten. Ergänzen Sie das Ganze durch klare Governance, Automatisierung und Monitoring – und Sie heben Ihr Paketmanagement auf Enterprise-Niveau.

Wenn Sie diese Bausteine schrittweise umsetzen, profitieren Sie von kürzeren Deployments, weniger Überraschungen bei Updates und einer nachvollziehbaren Supply-Chain für Systempakete. Der nächste Schritt ist, Ihre bestehende Umgebung zu inventarisieren, einen Proof of Concept für Keyring/Signed-By und Pinning aufzusetzen und anschließend Caching sowie private Repos einzuführen. So schaffen Sie eine solide Basis für sichere, schnelle und reproduzierbare Releases auf Debian und Ubuntu.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert