Apt Mirror

Siehe auch

Verwandte Artikel
Offizielle Dokumentation
  • man apt-mirror

apt-mirror spiegelt Debian- und Ubuntu-Paketquellen vollständig auf einen lokalen Server. Clients beziehen ihre Pakete anschliessend über einen Webserver vom Spiegel statt direkt aus dem Internet. Das spart Bandbreite und funktioniert auch in abgeschotteten Netzen ohne direkten Internetzugang.

Vorbereitung

apt-mirror zieht die konfigurierten Paketquellen komplett, das braucht entsprechend Platz. Je nach Suites und Architekturen kommen schnell mehrere zehn Gigabyte zusammen, grob 80 GiB für i386 und amd64 ohne Quellcode-Pakete. Darum gehört der Spiegel auf eine eigene Partition, gemountet auf den base_path.

Installation und Konfiguration

apt install apt-mirror

In /etc/apt/mirror.list stehen die zu spiegelnden Paketquellen, hier Debian 11 (bullseye), 12 (bookworm) und 13 (trixie). Ubuntu-Quellen funktionieren genauso.

Der base_path bestimmt, wo die Spiegel landen (Default /var/spool/apt-mirror). Auf diesen Pfad gehört die separate Partition gemountet. 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/keyrings/linuxfabrik.asc] https://repo.linuxfabrik.ch/monitoring-plugins/debian/ bullseye-release main

# MongoDB (bullseye: max. 7.0)
deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/7.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/keyrings/linuxfabrik.asc] https://repo.linuxfabrik.ch/monitoring-plugins/debian/ bookworm-release main

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

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


# --- Debian 13 (trixie) ---
deb https://deb.debian.org/debian trixie main
deb-src https://deb.debian.org/debian trixie main

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

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

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

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

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

# MongoDB
deb http://repo.mongodb.org/apt/debian trixie/mongodb-org/8.0 main

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


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

# InfluxDB
deb [signed-by=/etc/apt/keyrings/influxdata-archive.asc] https://repos.influxdata.com/debian stable main

# OpenSearch
deb https://artifacts.opensearch.org/releases/bundle/opensearch/3.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/3.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

Ein einzelnes Repo lässt sich nicht gezielt synchronisieren. Workaround: alle anderen Repos in der Config deaktivieren.

Das automatische Synchronisieren übernimmt ein Cronjob. Das Paket liefert dafür ein deaktiviertes /etc/cron.d/apt-mirror mit. Beispiel für einen Lauf jeden Sonntag um 1 Uhr:

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

Paketquellen verfügbar machen

Um die Paketquellen im Netz verfügbar zu machen, wird ein Webserver benötigt, zum Beispiel Apache (siehe Apache httpd). Anschliessend wird ein Link zu den Paketquellen ins DocumentRoot des Webservers erstellt:

ln -s /data/nfs/mirror/mirror/deb.debian.org/debian /var/www/html/debian

Mit einer RewriteRule lassen sich die URLs 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

Zuletzt wird der Mirror-Server auf dem Client eingetragen:

/etc/apt/sources.list
deb http://<IP des Servers>/debian bookworm main