Apt Mirror

Vorbereitung

Apt Mirror synchronisiert die konfigurierten Paketquellen vollständig. Von daher muss für ausreichend Platz auf dem System gesorgt werden.

Beispiel: Für die offiziellen Paketquellen von Ubuntu 20.04 (Focal Fossa) benötigt man, für die Architekturen i386 und AMD64 und ohne Quellcode-Pakete, etwa 80 GiB.

Von daher ist zu empfehlen, eine separate Partition zu erstellen und entsprechend zu mounten. (Mehr zum Mountpoint unten)

Installation und Konfiguration

apt install apt-mirror

In der Konfigdatei können die Paketquellen angegeben werden, welche synchronisiert werden sollen. In diesem Beispiel wurden die Paketquellen für Bionic Beaver und Focal Fossa konfiguriert. Es können aber ebenso Paketquellen für Debian angegeben werden.

Ausserdem kann es sinnvoll sein, den base_path anzupassen. Dies ist der Pfad wo die Paketquellen abgelegt werden. Auf diesen Pfad sollte die oben erwähnte Partition gemountet werden. Achtung: Die von apt-mirror erstellten Verzeichnisse und Dateien müssen nach dem Mounten vorhanden sein.

/etc/apt/mirror.list
############# config ##################
#
set base_path    /data/nfs/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 defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############

# --- Debian 11 (bullseye) ---
deb https://deb.debian.org/debian/ bullseye main
deb-src https://deb.debian.org/debian/ bullseye main

deb https://security.debian.org/debian-security bullseye-security main
deb-src https://security.debian.org/debian-security bullseye-security main

deb https://deb.debian.org/debian/ bullseye-updates main
deb-src https://deb.debian.org/debian/ bullseye-updates main

# Icinga Packages
deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bullseye main
deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bullseye main

# Linuxfabrik Monitoring-Plugins
deb [signed-by=/etc/apt/trusted.gpg.d/linuxfabrik.asc] https://repo.linuxfabrik.ch/monitoring-plugins/debian/ bullseye-release main

# MongoDB
deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main

# PHP Packages
deb https://packages.sury.org/php/ bullseye main



# --- Debian 12 (bookworm) ---
deb https://deb.debian.org/debian bookworm main
deb-src https://deb.debian.org/debian bookworm main

deb https://security.debian.org/debian-security bookworm-security main
deb-src https://security.debian.org/debian-security bookworm-security main

deb https://deb.debian.org/debian bookworm-updates main
deb-src https://deb.debian.org/debian bookworm-updates main

deb https://deb.debian.org/debian bookworm-backports main
deb-src https://deb.debian.org/debian bookworm-backports main

# Icinga Packages
deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bookworm main
deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-bookworm main

# Linuxfabrik Monitoring-Plugins
deb [signed-by=/etc/apt/trusted.gpg.d/linuxfabrik.asc] https://repo.linuxfabrik.ch/monitoring-plugins/debian/ bookworm-release main

# MongoDB
deb http://repo.mongodb.org/apt/debian bookworm/mongodb-org/6.0 main

# PHP Packages
deb https://packages.sury.org/php/ bookworm main



# --- Generic ---
# Graylog
deb https://packages.graylog2.org/repo/debian/ stable 5.0

# InfluxDB
deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main

# OpenSearch
deb https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main


# --- Clean instructions ---
# These remove all the files that were not newly downloaded, thereby cleaning up old files
# Note that you either have to call the cleanscript manually, or add run it via the postmirror_script
clean http://deb.debian.org/debian
clean http://repo.mongodb.org/apt/debian
clean https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt
clean https://deb.debian.org/debian
clean https://deb.debian.org/debian/
clean https://packages.graylog2.org/repo/debian/
clean https://packages.icinga.com/debian
clean https://packages.sury.org/php/
clean https://repo.linuxfabrik.ch/monitoring-plugins/debian/
clean https://repos.influxdata.com/debian
clean https://security.debian.org/debian-security

Berechtigungen einmalig anpassen:

chgrp -R www-data /data/nfs/mirror

Und im postmirror.sh eintragen:

/data/nfs/mirror/var/postmirror.sh
chgrp -R www-data /data/nfs/mirror

Synchronisieren

apt-mirror

Es ist leider nicht möglich, manuell ein einzelnes Repo zu synchronisieren. Als Workaround kann man alle anderen Repos in der Config auskommentieren.

Für das automatische Synchronisieren kann ein Cronjob verwendet werden, zB jeden Sonntag um 1 Uhr.

/etc/cron.d/apt-mirror
0 1 * * sun     root      /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

Paketquellen verfügbar machen

Um die Paketquellen nun im Netz verfügbar zu machen, brauchen wir einen Webserver. Zum Beispiel Apache.

Siehe auch

Wenn der Webserver verfügbar ist, kann nun ein Link zu den Paketquellen ins DocumentRoot des Webservers erstellt werden:

ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu /var/www/html/ubuntu

Es empfiehlt sich auch, per RewriteRule die URLs zu kürzen:

RewriteRule ^/debian/(.*) /mirror/deb.debian.org/debian/$1 [passthrough]
RewriteRule ^/debian-security/(.*) /mirror/security.debian.org/debian-security/$1 [passthrough]

Auf dem Client

Jetzt muss der Mirror Server nur noch auf dem Client konfiguriert werden: /etc/apt/sources.list

deb http://<IP des Servers>/ubuntu focal main restricted