Eigene Ubuntu-Pakete in reprepro Repository hochladen

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

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

  1. inoticoming Ubuntu-Paket (packages.ubuntu.com)
  2. dupload Ubuntu-Paket (packages.ubuntu.com)


Foto Georg Schönberger.jpg

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.


Das könnte Sie auch interessieren

NetworkManager OpenVPN Plugin in Ubuntu 9.10 nutzen
Ubuntu eingebauten Bildschirm eDP-1 deaktivieren
Ubuntu Installation ubi-console-setup crashed und SQUASHFS error