it-swarm-eu.dev

Wie richte ich ein APT Repository ein?

Ich möchte ein Repository APT auf einem Server einrichten, der einige Pakete bereitstellt.

Gibt es eine Möglichkeit, eine einzurichten, ohne Software auf dem Server zu installieren?

Wie müssen die Dateien organisiert werden?


Edit: Ich muss etwas falsch machen ... kann mir bitte jemand helfen? Ich habe das Repository unter http://quickmediasolutions.com/apt/dists

Ich bin nicht sicher, wo oder was, aber etwas ist falsch konfiguriert. Ich habe derzeit nur ein Paket und es ist für alle Architekturen.

Folgendes wurde meinem /etc/apt/sources.list hinzugefügt:

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

Das Einrichten eines trivialen Repositorys ist mit dpkg-scanpackages sehr einfach. Diese Seite erklärt, wie man ein triviales Repo einrichtet, und Diese Seite erklärt, wie man es benutzt (scrollen Sie nach unten zu Beispiel 4).

26

Richten Sie einfach ein einfaches, aber signiertes Repository auf einem Webserver ein. Da die meisten anderen Tutorials etwas veraltet oder umständlich sind, werde ich versuchen, das Verfahren hier zu wiederholen. Die Erstkonfiguration ist etwas aufwändig, aber das einfache Build-Skript erleichtert die Verwaltung. Und Sie können einfach neue *.deb -Dateien einfügen, diese dann aktualisieren oder einen Cron-Job damit beauftragen.

Generieren Sie einige Signaturschlüssel

Zuerst müssen Sie einen Signierschlüssel gpg für Pakete und Ihr Repository erstellen. Machen Sie daraus einen (4) RSA-Signaturschlüssel, kein Passwort, und geben Sie ihm einen eindeutigen $KEYNAME, wenn Sie dazu aufgefordert werden. (Weitere Beispiele setzen "dpkg1" als Schlüsselnamen voraus.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Ich sagte kein Passwort, weil Ihr Webserver keinen eingebauten Affen hat, der es wiederholt eintippen kann. Und die signierten Pakete und das Repository sollen nur die Beschwerden der Update-Manager befriedigen. Laden Sie einfach beide Schlüssel in das neue Repository-Verzeichnis /apt/ auf Ihrem Webserver hoch, löschen Sie jedoch den Schlüssel secret.gpgnach der Initialisierung.

CGI-Skript aktualisieren

Dies ist das einfache Update-Shell/CGI-Skript dafür:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

Die drei Zeilen gpg müssen nur einmal ausgeführt werden, um das GPG-Setup in einem Verzeichnis $GNUPGHOME (über dem Dokumentstamm) zu initialisieren. Löschen Sie nach Erfolg nur den secret.gpg.

Ein einzigartiges Merkmal dieses kleinen Shell-Skripts ist, dass es alle *.deb-Dateien akzeptiert, die Sie ablegen, aber auch rekursiv (ab einer Ebene) nach anderen sucht und diese mit Symbolen verknüpft. (Benötigt .htaccess Options FollowSymLinks schließlich.)

Sie können dieses Skript entweder manuell als CGI oder per Cron-Job ausführen. Aber verstecken Sie es, oder verschieben Sie es besser noch aus dem Dokumentenstamm.

Da es sich um ein "triviales" Apt-Repository handelt, ist der folgende Eintrag für apt-sources.list erforderlich:

deb http://example.org/deb/  ./    # Simple signed repo

Dies ist für Repositorys mit einer einzigen Architektur geeignet, und wenn Sie nicht mit Hunderten von Paketen rechnen.

Paketsignierung

Das Signieren Ihrer individuellen Pakete ist ebenfalls trivial, sobald Sie Ihre gpg-Schlüssel eingerichtet haben:

dpkg-sig -k dpkg1 -s builder *.deb

(Dies sollte auf der Workstation erfolgen, auf der Pakete erstellt werden, nicht auf dem Repository-Webserver.)

Nicht signiertes Repository

Wenn Sie keine signierten Pakete benötigen, können Sie das Update-Skript auf Folgendes reduzieren:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Was immer noch von durchschnittlichen Benutzern verwendet werden kann, aber ein benutzerdefiniertes Flag für apt.sources benötigt:

deb [trusted=yes] http://apt.example.org/deb/ ./

Verwenden Sie das Flag trusted=yes jedoch nicht für alles, oder wenn Sie sich über das Paket Origin nicht sicher sind.

Für die Benutzerfreundlichkeit

Legen Sie für Endbenutzer einfach einen HEADER.html im Repository-Verzeichnis ab. Apaches mod_auto_index wird diesen Hinweis voranstellen:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | Sudo apt-key add -</kbd>
</dl>

Alternativen

Es gibt heutzutage einige Tools zur Automatisierung der Repository-Verwaltung. Und es gibt sogar Repository-Online-Hoster und Paket-Build-Services ( gemfury , packagecloud , bintray usw.)

  • Eine recht bequeme Alternative ist prm . Es ist ein Ruby Skript, das komplexe APT und YUM-Repos erstellt. (Aber hoffen wir einfach, dass RPM irgendwann bald aussterben wird.) - Am besten wird es per gem install prm installiert.

  • Und ich habe auch ein kleines Skript geschrieben, um dies ähnlich zu automatisieren: http://apt.include-once.org/apt-phparchive - Bitte nicht, dass es nicht übermäßig robust und in PHP (ausnahmsweise zufällig) und war ursprünglich für DEB-, RPM-over-APT- und Phar-Bundles gedacht.

Da dies eng mit der ursprünglichen Frage zusammenhängt, gibt es auch Werkzeuge, um Debian-Pakete einfacher zu erstellen. Etwas veraltet: EPM . Viel zeitgemäßer: FPM . Und mein persönlicher Fork davon: XPM (Faulerer Ansatz zum Packen von Skriptsprachen-Apps.)

40
mario

Ja. Du kannst das. Sie müssen nur die Dateien richtig organisieren und die Indexdateien erstellen. Wenn Sie die Verzeichnisstruktur im Dokumentenstamm Ihres Webservers ablegen, können die Pakete nur über den Webserver aufgerufen werden.

hier ist eine detaillierte Beschreibung, wie die Dateien organisiert werden müssen und wie die Indexdateien erstellt werden.

Sie können auch ein Tool namens reprepro verwenden, wenn Sie bereit sind, dieses eine Paket zu installieren. Dadurch wird die Administration etwas komfortabler.

7
txwikinger

Sie können vielleicht auch ein Launchpad PPA in Betracht ziehen

2
ups

Für alle, die mit diesem Fehler konfrontiert sind, nachdem sie die Antwort von Mario befolgt haben:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

mach Folgendes:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Ich habe meine *.deb Dateien in den debs Ordner gelegt.

0
theeminence