Wie kann man mit einer Debian-basierten Linux-Distribution schnell ein lokales Apt-Repository für zufällige Pakete erstellen?

20

In einigen Situationen muss ein lokales Paket manuell mithilfe von installiert werden dpkg -i <packagename>. Manchmal kann es weiter nützlich sein, die Funktionalität aptdieses Pakets zu nutzen, sodass die Frage lautet:

Wie kann man mit einer Debian-basierten Linux-Distribution - wie Xubuntu 13.04 / Ubuntu - schnell ein lokales Repository für zufällige Pakete erstellen?


quelle
Nur zur Info. Die übliche Sache ist, dpkg -i <packagename>mit apt-get -f installzu folgen , um erforderliche Pakete einzuziehen. Die übliche Sache, um ein passendes Repo für Debian zu erstellen, ist reprepro.
Faheem Mitha
Ich fand reprepro hilfreich
Gilles '
Vielen Dank für Ihre Kommentare. @Faheem Mitha: Können Sie bitte kurz erläutern, warum das Ausführen von aptmit --fix-brokennach der Installation eines lokalen Pakets mit erforderlich wäre dpkg -i? Würde sich dpkg nicht darum kümmern? Ich habe gelesen, dass es erforderlich sein kann, wenn apt zum ersten Mal ausgeführt wird. @ FM & Gilles: Über reprepro . Scheint nützlich, wenn ich es zum Laufen bringen könnte (nicht sicher über dir struct, Inhalt von 3 Dateien oder Parameter zur Laufzeit). Versuche es erneut und aktualisiere oder poste die vollständige Frage.
1
@ illuminÉ: dpkglöst Abhängigkeiten nicht auf, apttut es aber . dpkgwarnt vor kaputten Abhängigkeiten, ist aber auf niedrigem Niveau, versucht also nicht, diese zu beheben. Das dpkg -i *.debgefolgt von apt-get -f installist Standardverfahren. Es gibt einen Fehler in der Wunschliste, der aptsich um die Installation lokaler Pakete kümmert, und ich glaube, es gibt sogar einen Patch, der jedoch noch nicht implementiert wurde. Siehe apt-get install könnte auch lokale Paketdateien installieren , die ursprünglich im Jahr 1999 eingereicht wurden.
Faheem Mitha
@ illuminÉ Das Interesse an dieser Funktion wird nicht schaden. Ich denke, je mehr Menschen (höflich) Interesse bekunden, desto wahrscheinlicher ist es, dass es umgesetzt wird. Beachten Sie auch, dass gdebi eine Alternative ist, wie im Fehlerbericht angegeben. Das ist einer der Gründe, warum es meiner Meinung nach nicht implementiert wurde. Obwohl es besser wäre, einen solchen Kernfunktionalitätsteil von apt zu haben, als diese Funktionalität als Teil eines anderen Pakets.
Faheem Mitha

Antworten:

29

Dies sollte von der Situation unterschieden werden, in der Sie versuchen, einen vollständigen Paketbaum aus einem offiziellen Repository zu replizieren und die Priorität der Quellen zu optimieren . Zufällige Pakete sind virtuelle Pakete, Pakete, die zu Testzwecken lokal kompiliert oder stückweise kopiert werden. Hier ist ein einfaches Setup, das auf veralteter Dokumentation basiert .

Erstellen Sie zunächst ein Verzeichnis zum Hosten der Pakete:

mkdir <packagedir>

Verschieben Sie dann Ihre .deb-Paketdateien dorthin. Führen Sie diesen Befehl aus dem Verzeichnis über dem gerade erstellten aus (stellen Sie sicher, dass die Berechtigungen dies zulassen!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Erstellen Sie nun eine Datei mit der Endung .listin /etc/apt/sources.list.d/mit dem Inhalt:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

und aktualisiere die apt Datenbank:

apt-get update

Zu diesem Zeitpunkt können die Pakete in unserem lokalen Repository wie jedes andere Paket mit installiert werden apt-get install <packagename>. Wenn dem lokalen Repository neue Pakete hinzugefügt werden, dpkg-scanpackagesmuss der vorgeschriebene Befehl erneut ausgegeben werden, um die Datei Packages.gzapt zu aktualisieren. Er muss aktualisiert werden, bevor die neuen Pakete verfügbar gemacht werden. Hoffentlich kann dies zu Testzwecken nützlich sein.

user44370
quelle
6
Mit dem neuen Apt 1.1 muss man [trusted=yes]zwischendurch debdie file:///URI (siehe sources.list(5)Manpage), sonst apt-get updatescheitert es an der fehlenden Signatur.
vinc17
2

Wenn Sie ein Repo mit der vollständigen Struktur erstellen möchten, die Sie für Tools wie Debootstrap benötigen, ist der einfachste Weg, den ich gefunden habe:

  1. Erstellen Sie ein Repository-Verzeichnis.

    # mkdir -p /opt/debian
    
  2. Erstellen Sie ein conf-Unterverzeichnis.

    # mkdir /opt/debian/conf
    
  3. Erstellen Sie eine / opt / debian / conf / distributions-Datei mit dem folgenden Inhalt (passen Sie ihn an die von Ihnen verwendete Distribution an):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Importieren Sie Ihr Paket mit reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Importieren Sie eine Reihe von Paketen mit einer Shell-for-Schleife, z. B. alles aus Ihrem APT-Cache:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Dadurch wird ein nicht signiertes Archiv erstellt. Es kann mit debootstrap mit der Option --no-check-gpg verwendet werden.

Andrew Klaassen
quelle