Um nicht abhängig von der Verfügbarkeit externer Paketquellen zu sein und/oder die Verteilung von Paketen an viele Clients bei beschränkter Bandbreite der Internetanbindung zu beschleunigen, kann ein lokaler Mirror der benötigten Paketquellen eingerichtet werden.
Diese Anleitung beschreibt die Einrichtung eines Mirrors für Ubuntu Personal Package Archives (PPA) mit apt-mirror.
Vorbereitung
Bitte prüfen Sie die vorbereitenden Schritte bevor Sie versuchen einzelne Teile der Anleitung durchzuführen.
In der Regel müssen diese Voraussetzungen für ein sinnvolles Umsetzen der Anleitung erfüllt sein.
Voraussetzungen
Es werden Kenntnisse im Umgang mit Linux und der APT-Paketverwaltung vorausgesetzt.
Pakete
Die folgender Pakete müssen installiert werden.
Ubuntu
bash$ sudo apt-get install apt-mirror
Einrichtung
Nach der Installation der Pakete müssen lediglich die zu spiegelnden PPAs konfiguriert werden.
Um Zugriff auf den Mirror durch die Clients zur Verfügung zu stellen wird ebenfalls ein Webserver, wie z.B. Apache oder Nginx benötigt.
Siehe auch https://wiki.ubuntuusers.de/apt-mirror/ für weitere Informationen.
Konfiguration von apt-mirror
Die Konfiguration wird am Beispiel des PHP PPAs von Ondřej Surý durchgeführt und kann leicht auf weitere PPAs erweitert werden.
bash$ cat /etc/apt/mirror.list ############# config ################## set base_path /var/spool/apt-mirror set mirror_path $base_path/mirror set skel_path $base_path/skel set var_path $base_path/var set cleanscript $var_path/clean.sh #set postmirror_script $var_path/postmirror.sh #set run_postmirror 0 set limit_rate 500K # 10 * 500K = 5000K = 5M => 50MBit set nthreads 10 set _tilde 0 ############# end config ############## # PHP deb http://ppa.launchpad.net/ondrej/php/ubuntu xenial main deb http://ppa.launchpad.net/ondrej/php/ubuntu trusty main deb http://ppa.launchpad.net/ondrej/php/ubuntu bionic main clean http://ppa.launchpad.net/ondrej/php/ubuntu
Automatische Synchronisation per Cronjob
Das apt-mirror Paket liefert gleich einen passenden Cronjob mit, der nur noch aktiviert werden muss.
bash$ cat /etc/cron.d/apt-mirror # # Regular cron jobs for the apt-mirror package # 0 4 * * * apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
Bereitstellen der Pakete
Damit Clients den Mirror nutzen können muss serverseitig die Pakete per HTTP freigegeben werden (z.B. mittels Apache oder Nginx).
Die Installation des entsprechenden Webservers vorausgesetzt ist hierfür nur noch ein entsprechender Symlink notwendig.
Zum Beispiel
bash$ ln -s /var/spool/apt-mirror/mirror/ /var/www/html/
Einbinden auf den Clients
Um den Mirror zu nutzen, kann eine entsprechende Datei unter /etc/apt/sources.list.d/
erstellt werden.
Wegen https://bugs.launchpad.net/ubuntu/+source/apt-mirror/+bug/1586573 muss (sofern der Bug noch besteht) auf das hashbasierte Abrufen der Pakete verzichtet werden.
bash$ cat /etc/apt/sources.list.d/mirror-php.list deb [arch=amd64 by-hash=no] http://[your-server]/mirror/ppa.launchpad.net/ondrej/php/ubuntu bionic main
Test
Die Synchronisation kann zum Test jederzeit manuell gestartet werden.
bash$ sudo -u apt-mirror apt-mirror
Downloading 42 index files using 10 threads... Begin time: Thu Nov 15 12:02:43 2018 [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... End time: Thu Nov 15 12:02:43 2018 Processing translation indexes: [TTT] Downloading 9 translation files using 9 threads... Begin time: Thu Nov 15 12:02:43 2018 [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]... End time: Thu Nov 15 12:02:43 2018 Processing DEP-11 indexes: [DDD] Downloading 0 dep11 files using 0 threads... Begin time: Thu Nov 15 12:02:43 2018 [0]... End time: Thu Nov 15 12:02:43 2018 Processing indexes: [PPP] 0 bytes will be downloaded into archive. Downloading 0 archive files using 0 threads... Begin time: Thu Nov 15 12:02:43 2018 [0]... End time: Thu Nov 15 12:02:43 2018 0 bytes in 0 files and 0 directories can be freed. Run /var/spool/apt-mirror/var/clean.sh for this purpose. Running the Post Mirror script ... (/var/spool/apt-mirror/var/postmirror.sh) Post Mirror script has completed. See above output for any possible errors.
Problembehebung
Falsche Dateirechte nach Ausführung als root
APT-mirror legt beim Aufruf verschiedene Dateien mit den Rechten des aufrufenden Benutzers an. Da der Cronjob allerdings als Benutzer apt-mirror
läuft klappt der Zugriff im Anschluss nicht mehr.
Zur Behebung kann man sich ein kleines Bash Script anlegen, dass man im Anschluss ausführt.
bash$ cat /root/fix-apt-mirror-permissions.sh #!/bin/bash chown -R apt-mirror:apt-mirror /var/spool/apt-mirror/ chmod -R u=rwX,g=rwX,o=rX /var/spool/apt-mirror/