linux-arch-alpine-minimal package-management repositories arch-linux alpine infrastructure

Multi-Repo Management: Private Repositories (Artikel 208)

Strategische Verwaltung von Software-Repositories für Arch und Alpine. Erfahren Sie alles über Mirroring, private Repos und die Absicherung der Paket-Infrastruktur.

# Multi-Repo Strategy: Eigene Software-Quellen sicher betreiben

TL;DR / Management Summary Wer minimalistische Distributionen wie Arch oder Alpine im großen Stil einsetzt, darf nicht von öffentlichen Spiegelservern abhängig sein. Wir benötigen eine eigene Repository-Infrastruktur. In diesem Modul lernen wir, wie wir einen lokalen Mirror aufbauen, um Bandbreite zu sparen, und wie wir Private Repositories für eigene Applikationen erstellen, signieren und über das Netzwerk (HTTP/S) sicher bereitstellen.


# 1. Einführung & Architektur

Die interne Quelle.

Ein lokales Repository schützt vor dem Risiko, dass Pakete plötzlich aus den offiziellen Repos verschwinden oder durch Upstream-Bugs instabil werden.

# Die Infrastruktur-Übersicht (Mermaid)

graph TD
    A[Public: Arch / Alpine Repos] -->|Sync| B[Internal Master Mirror]
    subgraph "Internal Repo Server"
        B --> C[Signing Station: GPG / RSA]
        D[Internal Build: abuild / makepkg] --> C
        C --> E[Web Server: Nginx / Minio]
    end
    E -->|HTTPS| F[Prod Server 1]
    E -->|HTTPS| G[Prod Server 2]
    E -->|HTTPS| H[CI/CD Runners]

# 2. Spiegelserver (Mirroring) einrichten

Den Traffic im Griff.

Nutzen Sie rsync, um einen lokalen Klon der Repositories zu erstellen.

# Beispiel: Alpine Mirror Sync

#!/bin/bash
MIRROR="rsync://rsync.alpinelinux.org/alpine/"
DEST="/srv/http/mirrors/alpine/"
rsync -avz --delete $MIRROR $DEST

# 3. Private Repositories für eigene Software

Eigene Pakete hosten.

# Für Arch Linux (repo-add)

  1. Sammeln Sie alle .pkg.tar.zst Dateien in einem Ordner.
  2. Erstellen Sie die Datenbank:
    repo-add /srv/http/repos/custom.db.tar.gz /srv/http/repos/*.pkg.tar.zst

# Für Alpine Linux (apk index)

  1. Sammeln Sie alle .apk Dateien.
  2. Erstellen Sie den Index (muss signiert sein!):
    apk index -o APKINDEX.tar.gz *.apk
    abuild-sign APKINDEX.tar.gz

# 4. Day-2 Operations: Security & Signing

Vertrauen ist gut, Signatur ist Pflicht.

In einer Enterprise-Umgebung darf kein Server unsignierte Pakete akzeptieren.

# Zertifikats-Verteilung

Verteilen Sie Ihren öffentlichen Key (RSA für Alpine, GPG für Arch) an alle Clients via Ansible:

  • Arch: /etc/pacman.conf -> SigLevel = Required DatabaseOptional
  • Alpine: Key nach /etc/apk/keys/ kopieren.

# 5. Troubleshooting & “War Stories”

Wenn der Mirror hinkt.

# Story 1: “Der inkonsistente Mirror”

Symptom: Ein apk update schlägt fehl, weil der Index neuer ist als die eigentlich verfügbaren .apk Dateien auf dem Spiegelserver. Ursache: Der Sync-Vorgang wurde unterbrochen oder die Reihenfolge war falsch (Index wurde vor den Files kopiert). Lösung: Nutzen Sie beim Sync immer das Flag --delay-updates (rsync), damit neue Dateien erst am Ende des Vorgangs sichtbar werden.

# Story 2: “Das Caching-Problem”

Symptom: Der Admin hat ein neues Paket ins Repo geschoben, aber die Server ziehen immer noch die alte Version. Ursache: Ein Nginx oder Proxy-Server zwischen Client und Repo-Server cached den Index (APKINDEX.tar.gz oder custom.db.tar.gz). Lösung: Deaktivieren Sie das Caching für die Index-Dateien in der Nginx-Konfig:

location ~* \.(tar.gz|db|index)$ {
    expires -1;
    add_header Cache-Control "no-store";
}

# 6. Fazit & Empfehlung

  • Zentralisierung: Betreiben Sie einen zentralen Repo-Server für das gesamte Unternehmen.
  • Signierung: Ein unsigniertes Repository ist eine offene Tür für Supply-Chain-Angriffe.
  • Wahl: Nutzen Sie Nginx als Frontend für Ihre Repositories – es ist leichtgewichtig und lässt sich perfekt für hohe Parallelität optimieren.

# Anhang: Cheatsheet

Aufgabe Arch Befehl Alpine Befehl
Index bauen repo-add <name>.db.tar.gz ... apk index -o APKINDEX.tar.gz ...
Signieren gpg --detach-sign <file> abuild-sign <file>
Repo Pfad /etc/pacman.conf /etc/apk/repositories
Mirror Sync rsync -rtlvH ... rsync -rtlvH ...
Client Refresh pacman -Sy apk update
Key Pfad /etc/pacman.d/gnupg/ /etc/apk/keys/