Lokales Repository

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiGrundsatzfragen ‹ Lokales Repository


Hier wird beschrieben, wie man ein lokales Repository auf seinem Rechner anlegt. Um Programme die nicht in den Debianrepositorys verfügbar sind, über das Advanced Packaging Tool zu installieren. Im Gegensatz zur Lösung mit dpkg, werden so auch Abhängigkeiten automatisch aufgelöst.

Repository anlegen

Wurzelverzeichnis erstellen

Das Repository wird in einem normalen Verzeichnis verwaltet.

Verzeichnis anlegen, welches das Repository darstellt.

root@debian:~# mkdir /var/local/repository

Paket-Index erzeugen

Es fehlt jetzt noch der Paket-Index, die sog. Packages-Datei (Ggf. komprimiert als .gz- und/oder .bz2-Datei) im Wurzelverzeichnis des Repositorys.

Dieser Index muss immer dann, wenn im Repository Pakete geändert oder neue hinzugefügt wurden, neu erstellt werden. Das hierfür benötigte Programm dpkg-scanpackages befindet sich im Paket Debianpackage.png dpkg-dev.

root@debian:~# cd /var/local/repository # ins Repository wechseln, weil der Index relativ ist
root@debian:~# dpkg-scanpackages ./ > Packages && gzip -k -f Packages

Für den Source-Index gibt es analog das dpkg-scansources-Programm.

Hinweis.png Hinweis: Für den lokalen Zugriff ist das Komprimieren unwesentlich. In der Manpage zu dpkg-scanpackages steht unter anderem: APT ignoriert - abgesehen von lokalem Zugriff (d.h. über file://-Quellen) - unkomprimierte Packages-Dateien.


Pakete im Repository ablegen

In diesem doch sehr einfachen Repository reicht es, die gewünschten Pakete (.deb-Dateien) nach /var/local/repository zu verschieben und den Index zu erneuern.

Hier sollte man jedoch beachten, das kopieren von Paketen ins Repository root vorzubehalten und auch die Dateirechte sollten so gesetzt sein, das diese nur von root und ggf. noch der Gruppe staff verwaltet werden können.

sources.list anpassen

Die folgende Zeile zur /etc/apt/sources.list hinzufügen, um APT das eigene Repository bekannt zu machen:

deb file:///var/local/repository ./

Dann noch die Liste der verfügbaren Pakete erneuern.

Hinweis.png Hinweis:

Die Option trusted=yes kann gesetzt werden, um anzuzeigen, dass Pakete aus dieser Quelle immer authentifiziert sind, sogar, falls die Datei Release nicht signiert ist oder die Signatur nicht geprüft werden kann. Dies deaktiviert Teile von apt-secure(8) und sollte daher nur in lokalem und vertrauenswürdigem Kontext benutzt werden.

Beispiel mit gesetzter Option trusted=yes:

deb [ trusted=yes ] file:///var/local/repository ./


Das Repository Signieren

Soll die Integrität und Herkunft der Pakete sichergestellt werden, nutzt man Debianpackage.png GnuPG um das Repository zu signieren und importiert den öffentlichen Schlüssel lokal nach Debianpackage.png apt-key (das APT-Schlüsselverwaltungsdienstprogramm).

Hinweis.png Hinweis: Will man ein anderes Schlüsselbund als das von Root verwenden, kann man mit dem gpg Schalter --homedir auch ein anderes .gnupg Verzeichnis angeben.


Schlüssel erstellen

root@debian:~# gpg --gen-key # Wichtig: ID merken! gpg --list-keys listet alle Schlüssel auf

öffentlichen Schlüssel importieren

Der öffentliche Schlüssel muss zu apt-key hinzugefügt werden.

Wenn man unter Root mehr als nur diesen Schlüssel im Schlüsselring hat, muss zum Schalter --export noch explizit die Schlüssel-ID vom Schlüssel für das Repository mit angeben werden.

root@debian:~# gpg -a --export <Schlüssel-ID oder Name> | apt-key add -
Hinweis.png Hinweis: Will man sein Repository veröffentlichen muss man den öffentlichen Schlüssel aus dem keyring expotieren und bspw. im Repository oder auf der Website veröffentlichen. (Man kann diesen auch in einem Debian-Paket ausliefern.)
root@debian:~# gpg -a --output <Dateiname> --export <Schlüssel-ID oder Name>


Das Signieren

Auch hier gilt, sind mehr als nur der Schlüssel für das Repository im Schlüsselbund von Root, muss der richtig mit dem Schalter --local-user angegeben werden. Sonst kann der Schalter auch weggelassen werden, und es wird der Standard-Schlüssel genutzt.

root@debian:~# cd /var/local/repository # ins Repository wechseln
root@debian:~# apt-ftparchive release . > Release # Release-Datei generieren lassen
root@debian:~# gpg -a --yes --output Release.gpg --local-user <Schlüssel-ID oder Name> --detach-sign Release # und signieren

Das generieren der Release-Datei und das Signieren müssen, wie auch das anlegen des Paketindex, immer dann wiederholt werden, wenn sich das Repository verändert hat.

Das Repository Strukturieren

Hier soll versucht werden, zu beschreiben wie die Verzeichnisstruktur und der daraus folgende sources.list-Eintrag zusammenhängt.

Wem ein einfaches, aber eben auch unsortiertes Archiv ausreicht. Der packt alle Pakete in ein Verzeichnis (wie oben beschrieben). Dabei ist es egal ob die Pakte auf weitere Unterverzeichnisse verteilt sind. Wichtig ist nur das sich die Index- und Release-Datei im Wurzelverzeichnis befinden.

Um das Repository sauber in freie, unfreie und von unfreie Software abhängige Pakete zu sortieren und nach Architektur zu trennen. Baut man sich folgende Verzeichnisstruktur und sortiert die Pakete in die entsprechenden Zweige. Wichtig ist hier, für jedes binary-Verzeichnis eine eigene Index- und Release-Datei zu erstellen.

$ tree /var/local/repository
/var/local/repository
└── dists
    └── stable
        ├── contrib
        │   └── binary-amd64
        │       ├── *.deb
        │       ├── Packages.gz
        │       └── Release
        ├── main
        │   └── binary-amd64
        │       ├── *.deb
        │       ├── Packages.gz
        │       └── Release
        └── non-free
            └── binary-amd64
                ├── *.deb
                ├── Packages.gz
                └── Release

In der sources.list ist dann folgender Eintrag hinterlegt.

deb file:///var/local/repository stable main contrib non-free

Will man solche ein Repository skripten hilft vlt. der Schlater --arch von apt-ftparchive, dpkg-scanpackage und dpkg-scansources, womit nach Architektur gefiltert werden kann. Um den Index usw. zu erstellen.

Links


Migriert.png Migration abgeschlossen: Dieser Artikel wurde vollständig aus dem alten Wiki migriert.