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, aktualisieren oder einen Cron-Job damit beauftragen.
Generieren Sie einige Signaturschlüssel
Zuerst müssen Sie einen gpg
Signaturschlüssel für Pakete und Ihr Repository erstellen . Legen Sie einen (4) RSA-Signaturschlüssel und kein Kennwort fest und geben Sie ihm eine eindeutige Bezeichnung, $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 /apt/
Repository-Verzeichnis auf Ihrem Webserver hoch, löschen Sie den secret.gpg
Schlüssel jedoch nach 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 gpg
Zeilen müssen nur einmal ausgeführt werden, um das GPG-Setup in einem Verzeichnis $GNUPGHOME
(oberhalb des Dokumentstamms) zu initialisieren . Löschen Sie nur die secret.gpg
nach Erfolg.
Eine einzigartige Eigenschaft 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 Options FollowSymLinks
eventuell .htaccess .)
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, muss der folgende apt-sources.list
Eintrag eingegeben werden:
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 benötigt für apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Verwenden Sie die trusted=yes
Flagge jedoch nicht für alle Zwecke , oder wenn Sie sich über die Herkunft des Pakets nicht sicher sind.
Für die Benutzerfreundlichkeit
Legen Sie für Endbenutzer einfach a HEADER.html
im Repository-Verzeichnis ab. Apachen mod_auto_index
werden 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.) - Es ist am besten per installiert gem install prm
.
Und ich habe auch ein kleines Skript geschrieben, um dies auf ähnliche Weise zu automatisieren: http://apt.include-once.org/apt-phparchive - Bitte nicht, dass es nicht übermäßig robust und in PHP geschrieben ist (dies ist 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 meine persönliche Seite: XPM (faulerer Ansatz zum Packen von Skriptsprachen-Apps.)