Kategorien

DIY (3) Gnome Extension (3) Laptop (1) Linux (8) Server (2) Windows (1)

11 Juli 2016

Debian Repository auf der FritzBox

Eigentlich könnte ich dem Server diesen Dienst aufbrummen und 24/7 das Repository verfügbar machen. Unter der Woche jedoch ist es mir lieber wenn dieser seinen Schlaf verrichtet und dann meist nur auf bedarf angeschaltet wird, am Wochenende jedoch ist er durchweg online.

Da aber mein lokales Debian Repository dauerhaft erreichbar sein soll, habe ich mir eine alternative überlegt und bin schlussendlich auf die FritzBox (funktioniert aber auch mit jedem anderen Router der USB und FTP Unterstützung hat) gekommen. Da diese ja eh 24/7/365 online ist und nie abgeschaltet wird, bot sich das Szenario als perfekt an. Auf der Box (6490 Cable) läuft jedoch kein Freetz oder dergleichen, so griff ich zu einer etwas anderen Methode.

Ich richtete auf dem Server ein lokales Debian Repository mit reprepro ein. Entsprechende Tutorials zu reprepro gibt es hier, hier und hier.

Die Verzeichnisse "dists" und "pool" sollten klar sein, unter "config" werden die reprepro spezifischen config Dateien abgelegt. Einmal die "options":
verbose
basedir /srv/repository
outdir /srv/repository/public
dbdir /srv/repository/database
logdir /srv/repository/log
morguedir /srv/repository/deleted
"basedir", "outdir", "logdir" sowie "dbdir" sollten bekannt sein. Zusätzlich habe ich noch "morguedir" angegeben, aus dem Repository entfernte Pakete werden dann nach "morguedir" verschoben anstatt direkt gelöscht. Die config Datei "distributions":
Origin: LocalRepository 
Label: LocalRepository 
Suite: stable
Codename: stretch
Architectures: amd64
Components: main non-free contrib
Description: LocalRepository
Tracking: minimal
SignWith: KeyID
SignWith sollte die ID eures Schlüssels haben, den ihr benötigt um euer Repository zu signieren. Wie man auf dem Bild erkennt, habe ich den Öffentlichen Teil des Schlüssels ebenfalls im "config" Verzeichnis. Die Dateien "incoming" und "expect_reprepro.ex" sind nur Überbleibsel aus vergangenen Experimenten, also zu vernachlässigen.
Um dann ein Debian Paket hinzuzufügen, führe ich folgenden Befehl aus:
reprepro --confdir "/srv/repository/config" includedeb stretch "/Pfad/Zum/Debian/Paket"
Und um es wieder zu entfernen:
reprepro --confdir "/srv/repository/config" remove stretch "Paketname"
Anschließend synchronisiert das Programm lftp das lokale Repository über FTP mit dem USB Stick am Router.
lftp -c "set ftp:ssl-allow no set ftp:list-options -a;
open 'ftp://BENUTZERNAME:PASSWORT@FTP-ADRESSE';
glob -f rm -r ./dists;
lcd /srv/repository/public;
mirror --reverse --delete --delete-first --verbose;
bye" > "/srv/repository/log/last_sync.FTP.log" 2>&1
Zu guter letzt, muss nur noch der frei gegebene USB Stick des Routers auf den Clients als Paketarchiv eingebunden werden. Die Datei "/etc/apt/sources.list.d/ownrepo.list
deb ftp://BENUTZERNAME:PASSWORT@IP-ADRESSE stretch main contrib non-free

Automatisiert sieht das nun wie folgt aus: Sobald ein Debian Paket im "incoming" Verzeichnis kopiert wird, fügt reprepro das Paket dem Repository zu. Anschließend synchronisiert lftp das lokale Paketarchiv mit dem USB Stick an dem Router. Sobald dann die Clients die Paketliste aktualisieren, ist das neu eingefügte Paket auf allen Clients verfügbar.

Dadurch das der Server auch regelmäßig nach aktuellen Kernel Versionen auf Kernel.org schaut, sofern er dann auch online ist, diese ggf. herunter lädt, anschließend kompiliert und dann im "incoming" Ordner schiebt, sind diese Pakete jederzeit lokal von meiner FritzBox abrufbar für alle Rechner im Netzwerk. Auch habe ich mit dieser Methode dann nicht das Problem, dass apt meckert weil das Repository nicht erreichbar ist, wenn der Server mal nicht läuft.

Keine Kommentare: