Eigene Ubuntu-Pakete in reprepro Repository hochladen
Der folgende Artikel zeigt das Hochladen von eigenen Ubuntu-Paketen in ein reprepro Repository. Die Pakete werden mit dupload über scp in einen Ordner am Repository-Server übertragen und dort über einen inoticoming-Job von reprepro verarbeitet. Bei den gezeigten Beispielen handelt es sich beim Client um ein Ubuntu 12.10, am Server um ein Ubuntu 12.04.2 mit Kernel 3.2.0-38-generic.
Wie ein reprepro Repository erzeugt werden kann wird im Artikel Eigenes apt-Repository mit reprepro unter Ubuntu erstellen geschildert.
Installation
Am Repository-Server
inoticoming
[1] triggered Aktionen, wenn Dateien in einem Ordner eintreffen.
:~$ sudo apt-get install inoticoming
Am Client
dupload
[2] lädt die Ubuntu-Pakete in jenen Ordner am Repository-Server, der von inoticoming überwacht wird.
:~$ sudo apt-get install dupload
Konfiguration
Am Server
Die Konfigurations-Datei incoming
bestimmt die Regeln und Ordner beim Upload von neuen Paketen ins reprepro Repository. Die Konfigurations-Datei incoming
befindet sich im /conf
Ordner des verwendeten reprepro Repos.
:~$ vi packages/conf/incoming Name: incoming IncomingDir: /home/repository/incoming Allow: precise Cleanup: on_deny on_error Tempdir: /home/repository/incoming_tmp LogDir: /home/repository/incoming_log
Über inoticoming
wird die incoming
Regel von reprepro aufgerufen:
:~$ inoticoming --logfile /home/repository/incoming_log/upload.log /home/repository/incoming/ \ > --stderr-to-log --stdout-to-log --suffix '.changes' \ > reprepro --waitforlock 100 processincoming incoming {} \;
Es dabei darauf geachtet werden, dass inoticoming
unter jenem User läuft, unter dem das Repo verwaltet wird und der die Pakete hoch lädt. Dann ist sicher gestellt, dass die Dateien und Ordner erstellt werden dürfen und die richtigen Rechte besitzen.
:~$ ps -u repository PID TTY TIME CMD [...] 3098 ? 00:00:00 inoticoming
Am Client
Im ersten Schritt wir ein ssh-Key auf den Server für die Authentifizierung übertragen:
:~$ ssh-copy-id -i .ssh/key_rsa.pub repository@192.168.56.102
Die dupload-Konfiguration spezifiziert, wie die Pakete ins Repo geladen werden:
:~$ vi .dupload.conf package config; $default_host = "tkpack"; $cfg{'tkpack'} = { fqdn => "192.168.56.102", method => "scp", login => "repository", incoming => "/home/repository/incoming/", # files pass on to dinstall which sends emails itself dinstall_runs => 1, };
Pakete ins Repository hochladen
Daraufhin kann mit dupload
vom Client aus (hier ohne aussenden von Benachrichtigungs-Mails) ein Paket ins Repo geladen werden:
:~$ dupload -f --nomail -t tkpack tkmon_0.0.1-1_amd64.changes dupload warning: mail options disabled, can't run `/usr/sbin/sendmail': No such file or directory dupload note: no announcement will be sent. Uploading (scp) to 192.168.56.102:/home/repository/incoming/ [ job tkmon_0.0.1-1_amd64 from tkmon_0.0.1-1_amd64.changes tkmon_0.0.1-1.dsc, size ok, md5sum ok, sha1sum ok, sha256sum ok tkmon_0.0.1-1.debian.tar.gz, size ok, md5sum ok, sha1sum ok, sha256sum ok tkmon_0.0.1.orig.tar.gz, size ok, md5sum ok, sha1sum ok, sha256sum ok tkmon_0.0.1-1_all.deb, size ok, md5sum ok, sha1sum ok, sha256sum ok tkmon_0.0.1-1_amd64.changes ok ] Uploading (scp) to tkpack (192.168.56.102) [ Uploading job tkmon_0.0.1-1_amd64 tkmon_0.0.1-1.dsc 0.8 kB, ok (0 s, 0.81 kB/s) tkmon_0.0.1-1.debian.tar.gz 6.1 kB, ok (0 s, 6.07 kB/s) tkmon_0.0.1.orig.tar.gz 720.0 kB, ok (1 s, 720.00 kB/s) tkmon_0.0.1-1_all.deb 701.7 kB, ok (1 s, 701.66 kB/s) tkmon_0.0.1-1_amd64.changes 1.4 kB, ok (0 s, 1.43 kB/s) ]
Am Server spielt inoticoming
die Paket mit reprepro ins Repository:
:~/incoming_log$ cat upload.log Will call action reprepro for: tkmon_0.0.1-1_amd64.changes Exporting indices... :~/incoming_log$ reprepro list precise precise|main|i386: tkmon 0.0.1-1 precise|main|amd64: tkmon 0.0.1-1 precise|main|source: tkmon 0.0.1-1
Fehler-Diagnose
Der folgende Fehler tritt mit der eigentlich in der dupload man-Page empfohlenen Upload-Methode scpb
auf:
[...] chmod: cannot access `tkmon_0.0.1-1.dsc': No such file or directory chmod: cannot access `tkmon_0.0.1-1.debian.tar.gz': No such file or directory chmod: cannot access `tkmon_0.0.1.orig.tar.gz': No such file or directory chmod: cannot access `tkmon_0.0.1-1_all.deb': No such file or directory chmod: cannot access `tkmon_0.0.1-1_amd64.changes': No such file or directory dupload fatal error: ssh -x -l repository 192.168.56.102 'cd /home/repository/incoming/;chmod 0644 tkmon_0.0.1-1.dsc tkmon_0.0.1-1.debian.tar.gz tkmon_0.0.1.orig.tar.gz tkmon_0.0.1-1_all.deb tkmon_0.0.1-1_amd64.changes ;' failed at /usr/bin/dupload line 662
Dieser Fehler tritt aufgrund einer zu schnellen Verarbeitung der hoch geladenen Pakete durch inoticoming
auf. Die Pakete wurden bereits durch reprepro
ins Repository verschoben, dupload
kann daher kein chmod
mehr durchführen.
Work-around
Mittels preupload-hook können vor dem hochladen auch die richtigen Rechte gesetzt werden. Damit funktioniert auch ein hoch laden mit scpb
.
[...] $preupload{'file'} = 'chmod 644 %1', $preupload{'deb'} = 'chmod 644 %1', $cfg{'tkpack'} = { fqdn => "192.168.56.102", method => "scpb", login => "repository", [...]
Einzelnachweise
- ↑ inoticoming Ubuntu-Paket (packages.ubuntu.com)
- ↑ dupload Ubuntu-Paket (packages.ubuntu.com)
Autor: Georg Schönberger Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.
|