Ubuntu Offline Mirror Repository erstellen
Aus znilwiki
Changelog:
- 08.02.2024 erste funktionierende Version
Vorwort
Wie das so ist habe ich mehrere Anläufe gebaucht bis ich das ganz zum laufen bekommen habe. Unter anderem hatte ich Probleme das mir die Festplatte immer wieder vollgelaufen ist weil er schon vorhandenen Downloads ignorierte, Dinge die nach den Downloads fehlten und wie ich die Quellen auf dem anderen Ubuntu-Servern einstelle.
Klar gibt es viele Anleitungen im Internet, die von mir genutzten habe ich weiter unten auch verlinkt. Aber ohne Anpassungen hatte keine richtig funktioniert.
Die Anleitung unter https://www.linuxtechi.com/setup-local-apt-repository-server-ubuntu/ ist zum Beispiel eigentlich nicht schlecht, die Pfade sind dort aber durcheinander gewürfelt und die Skripte funktionieren nicht wenn man diese einfach nur kopiert. Also habe ich hier meine eigene Version der Anleitung gebaut.
Insbesondere da ich ja verschiedene Paketquellen einbinden wollte.
Grundinstallation
Ihr installiert einen Ubuntu-Server nach dieser Anleitung: Zabbix Server + Agent unter Ubuntu 22.04 LTS installieren
Befolgt die Anleitung bis zu dem Punkt 1.15 Automatische Updates deaktivieren
Achtet darauf das die VM genug Speicherplatz hat. Die obige Anleitung nutzt die ganze Festplatte. Diese lässt sich später (z.B. unter VMware) im laufenden Betrieb erweitern. Die Anleitung dazu findet Ihr auf der gleichen Seite am Ende.
Ich würde mindestens 500GiB Festplattenplatz empfehlen! Stand 18.05.2024 verbrauchte der Mirror 382GiB, mit Betriebssystem, Google Chrome und Zabbix Repo etc. waren dann noch 81GiB frei auf der Festplatte.
sudo -i
könnte Ihr dauerhaft zum root wechseln. Oder immer schön sudo
davor schreiben.Apache 2 Webserver
Damit später andere Server das Repo nutzen können braucht es einen Webserver.
Ich nehme den Apache2:
apt install php libapache2-mod-php
Das installiert diesen inklusive PHP-Unterstützung. PHP wird hier im ersten Moment nicht gebraucht aber ich wollte es für später haben.
==Quellen von Zabbix hinzufügen (bei Bedarf)
Ich will darüber auch die Zabbix-Repo-Pakete zur Verfügung stellen.
Also binde ich diese Quellen auch ein:
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-3+ubuntu22.04_all.deb dpkg -i zabbix-release_6.0-3+ubuntu22.04_all.deb apt update && apt upgrade -y rm zabbix-release_*
Mirror installieren
Keine Angst, der lädt nach der Installation noch nicht gleich die Daten herunter:
apt install apt-mirror
Der Standard-Downloadpfad ist /var/spool/apt-mirror
den wir aber ändern.
Wir bearbeiten die Datei /etc/apt/mirror.list
, weiter unten findet Ihr einmal die komplette Datei falls Ihr einfach alles austauschen wollt!
Tipp: F9 löscht Zeilen, F10 fügt die zuvor am Stück gelöschten Zeilen wieder ein.
nano /etc/apt/mirror.list
In der Datei sind auch die Paketquellen die er runterladen soll hinterlegt.
Per Default sind das die für Ubuntu 17.10 (artful)
Das müssen wir ändern! Löscht alle Zeilen unterhalb von
############# end config ##############
und fügt das hier ein für Ubuntu 22.04 (jammy):
# jammy = Ubuntu 22.04 LTS deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu jammy-proposed main restricted universe multiverse #deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu jammy-proposed main restricted universe multiverse #deb-src http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
Für Zabbix hängen wir noch diese Zeilen mit dran:
# Zabbix main repository deb https://repo.zabbix.com/zabbix/6.0/ubuntu jammy main # deb-src https://repo.zabbix.com/zabbix/6.0/ubuntu jammy main deb [arch=amd64] https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main # deb-src [arch=amd64] https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main
Wie Ihr sicher bemerkt habt, habe ich alle Source-Code Quellen auskommentiert. Falls Ihr später doch davon etwas brauchen solltet könnte Ihr bei den betreffenden Quellen den Kommentar wieder entfernen.
Zusätzlich ändern wir den Download-Pfad:
set base_path /var/www/html/ubuntu
Hier noch einmal die ganze Datei nach den Änderungen, das da viel auskommentiert ist, ist Absicht!:
############# 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 defaultarch <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set base_path /var/www/html/ubuntu
set nthreads 20
set _tilde 0
#set limit_rate 10K
#
############# end config ##############
# jammy = Ubuntu 22.04 LTS
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
#deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-proposed main restricted universe multiverse
#deb [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
#deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
#deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
#deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
#deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-proposed main restricted universe multiverse
#deb-src [arch=amd64] http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse
# Zabbix main repository
deb https://repo.zabbix.com/zabbix/6.0/ubuntu jammy main
#deb-src https://repo.zabbix.com/zabbix/6.0/ubuntu jammy main
deb [arch=amd64] https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main
#deb-src [arch=amd64] https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main
#clean http://archive.ubuntu.com/ubuntu
#clean https://repo.zabbix.com/zabbix/6.0/ubuntu
#clean https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu
Das die clean
am Ende auskommentiert ist Absicht! Das sabotiert scheinbar die manuelle Reparatur welche weiter unten in diesem Artikel erfolgt.
Zielordner erstellen
Der Webserver sollte schon laufen, das Zielverzeichnis fehlt aber noch:
mkdir -p /var/www/html/ubuntu chown www-data:www-data /var/www/html/ubuntu
Post-Skript erstellen
Damit es am Ende des Downloads keine Fehlermeldung gibt erstellen wir das postmirror.sh
-Skript. Das ruft auch gleich die clean.sh
auf die nicht mehr notwendige Dateien löscht:
nano /var/www/html/ubuntu/var/postmirror.sh
#!/bin/bash -e
## Anything in this file gets run AFTER the mirror has been run.
## Put your custom post mirror operations in here (like rsyncing the installer
## files and running clean.sh automatically)!
/var/www/html/ubuntu/var/clean.sh
Und noch ausführbar machen:
chmod +x /var/www/html/ubuntu/var/postmirror.sh
Download starten
Das geht per
apt-mirror
und dann warten.
Da kommt drei Zeilen wie folgt:
Processing indexes: [SSSPPP] 273.5 GiB will be downloaded into archive.
Wenn Ihr das Abrechen wollt um z.B. doch noch an den Repos zu schrauben könnte ihr den Mirror-Cache einfach löschen und neu Anfangen:
rm -R /var/www/html/ubuntu*
Neu anfangen heißt dabei alles neu herunterladen ... also um die 300GiB
Fehlende Dateien holen
apt-mirror.list
die clean Option aktiviert müsstet Ihr es nach jedem Update wiederholen
Ein Hürde war das der apt-mirror
Befehl unter Ubuntu 22.04 leider nicht alles herunterlädt was im Repository hinterlegt sein muss.
Zum Beispiel fehlen die notwendigen cnf
Unterverzeichnisse.
Unter https://www.linuxtechi.com/setup-local-apt-repository-server-ubuntu/ findet man ein Skript welches das korrigiert. Das Skript von dort funktioniert so nicht, hier ist meine abgewandelte Version welche auch mit den obigen Pfaden zusammenarbeitet:
nano /root/fix-apt-mirror-errors.sh
#!/bin/bash
# Original von: https://www.linuxtechi.com/setup-local-apt-repository-server-ubuntu/#4_Configure_Apt-Mirror
cd /var/www/html/ubuntu/mirror/archive.ubuntu.com/ubuntu/dists
for dist in jammy jammy-updates jammy-security jammy-backports; do
for comp in main multiverse universe; do
for size in 48 64 128; do
wget http://archive.ubuntu.com/ubuntu/dists/$dist/$comp/dep11/icons-${size}x${size}@2.tar.gz -O $dist/$comp/dep11/icons-${size}x${size}@2.tar.gz;
done
done
done
cd /var/tmp
for p in "${1:-jammy}"{,-{security,updates,backports}}/{main,restricted,universe,multiverse};do >&2 echo "${p}"
wget -q -c -r -np -R "index.html*" "http://archive.ubuntu.com/ubuntu/dists/${p}/cnf/Commands-amd64.xz"
wget -q -c -r -np -R "index.html*" "http://archive.ubuntu.com/ubuntu/dists/${p}/cnf/Commands-i386.xz"
wget -q -c -r -np -R "index.html*" "http://archive.ubuntu.com/ubuntu/dists/${p}/binary-i386/"
done
cp -av /var/tmp/archive.ubuntu.com/ubuntu/ /var/www/html/ubuntu/mirror/archive.ubuntu.com
Danach machen wir das Skript ausführbar und starten es einmal:
chmod +x /root/fix-apt-mirror-errors.sh
und ausführen:
/root/fix-apt-mirror-errors.sh
Es wird ein paar Fehlermeldungen geben beim herunterladen die Icons, er wird manche 48, 64 und 128 Auflösungen nicht finden - das ignoriert Ihr einfach.
Am Ende kommt ganz viel Text wenn er die cnf
-Ordner kopiert (weil das cp das v
-Flag gesetzt hat, also Verbose).
Manuelle Prüfung
Wenn Ihr nun in einem Webbrowser die IP-Adresse eures eigenen Repo-Servers + /ubuntu
eingebt solltet Ihr das Repo sehen können:
http://IP-Eures-Repos/Ubuntu
Im Unterordner mirror
finden wir die beiden Paketquellen die wir für Ubuntu und Zabbix angegeben haben:
Und in den entsprechenden Unterordnern sind z.B. nun auch die cnf
-Vezeichnisse vorhanden:
Automatisches Update von apt-mirror
Damit er die Paketquellen automatisch auf Stand hält bauen wir - als Benutzer root - einen Cronjob:
crontab -e
und fügen folgende Zeile ein:
0 1 * * * /usr/bin/apt-mirror 2>&1 >/var/log/apt-mirror-cron.log
Nun wird jede Nacht um 01:00 Uhr nach Updates gesucht.
Das Ergebnis schreibt er dabei in eine Logdatei die wir ggf. auf Fehler kontrollieren können:
cat /var/log/apt-mirror-cron.log
Der Inhalt sollte wie folgt aussehen
Downloading 142 index files using 20 threads...
Begin time: Thu Feb 8 12:06:28 2024
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Thu Feb 8 12:06:29 2024
Processing translation indexes: [TTTTT]
Downloading 558 translation files using 20 threads...
Begin time: Thu Feb 8 12:06:29 2024
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Thu Feb 8 12:06:32 2024
Processing DEP-11 indexes: [DDDDD]
Downloading 64 dep11 files using 20 threads...
Begin time: Thu Feb 8 12:06:32 2024
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Thu Feb 8 12:06:33 2024
Processing indexes: [PPPPP]
0 bytes will be downloaded into archive.
Downloading 0 archive files using 0 threads...
Begin time: Thu Feb 8 12:06:37 2024
[0]...
End time: Thu Feb 8 12:06:37 2024
0 bytes in 0 files and 0 directories can be freed.
Run /var/www/html/ubuntu/var/clean.sh for this purpose.
Running the Post Mirror script ...
(/var/www/html/ubuntu/var/postmirror.sh)
Post Mirror script has completed. See above output for any possible errors.
Bearbeiten der Paketquellen auf dem Client
Um nun unsere internes Repository nutzen zu können müssen wir den Quellen überall ein
http://192.168.157.19/ubuntu/mirror/
voranstellen - die IP-Adresse müsst Ihr natürlich an eure Adresse anpassen.
Aus
http://archive.ubuntu.com/ubuntu/
wird also
http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/
Zusätzlich stellen wir überall ein
[trusted=yes]
voran - damit unterbinden wir Signaturprüfungen und lassen diese Quelle als sicher aktzeptieren.
Zuerst bearbeiten die Quellen für Ubuntu:
nano /etc/apt/sources.list
# newer versions of the distribution.
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy main restricted
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates main restricted
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy universe
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy universe
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates universe
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy multiverse
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy multiverse
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates multiverse
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-updates multiverse
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security main restricted
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security main restricted
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security universe
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security universe
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security multiverse
# deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/archive.ubuntu.com/ubuntu/ jammy-security multiverse
Alle Vorkommen von 192.168.157.19
müsst Ihr dabei mit der IP-Adresse eures Repo-Servers ersetzen.
Nun das gleiche noch für die Zabbix-Quellen:
nano /etc/apt/sources.list.d/zabbix.list
# Zabbix main repository
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/repo.zabbix.com/zabbix/6.0/ubuntu jammy main
#deb-src [trusted=yes] http://192.168.157.19/ubuntu/mirror/repo.zabbix.com/zabbix/6.0/ubuntu jammy main
und die Plugins des Zabbix-Agent2:
nano /etc/apt/sources.list.d/zabbix-agent2-plugins.list
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main
#deb-src [arch=amd64] https://repo.zabbix.com/zabbix-agent2-plugins/1/ubuntu jammy main
Wenn Ihr jetzt ein
apt update
eingebt, sollte er sich die Daten von der internen Quelle holen.
Eventuelle Ign:
/ Ignore-Meldungen könnt Ihr ignorieren, bei einem 2. Aufruf sollten diese verschwinden. Diese werden aber immer wenn es neue Updates gibt einmal wieder auftauchen. Daran arbeite ich noch, der Funktion tut es aber keinen Abbruch.
Je nachdem wie der Client vorher installiert wurde gibt es ggf. noch andere Fehlermeldungen beim ersten mal:
E: Einige Indexdateien konnten nicht heruntergeladen werden. Sie wurden ignoriert oder alte an ihrer Stelle eingesetzt
Wiederholt den apt update
ggf. mehrmals bis keine Fehler mehr kommen.
Weitere Quellen hinzufügen
Google Chrome
Wer nach meiner Anleitung den Zabbix-Server installiert, hat auch den Google-Chrome-Browser für die Zabbix-Reporting-Services installiert (der Browser wird per Kommandozeile von Zabbix benutzt um die PDFs zu erstellen).
Bei der Installation wird dann auch gleich das Repository dafür mit installiert damit der Browser auch Updates erhält.
Deshalb füge ich auf dem Repo-Server die Quellen auch hinzu:
Zuerst laden wir den Signierungsschlüssel herunter und installieren diesen damit wir der Quelle später vertrauen:
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
Dann erstellen wir ein passende Source-Datei für Ubuntu (vermutlich könnten wir diesen Schritt auch weglassen):
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
Mit einem
apt update
könnt Ihr testen ob die Quelle funktioniert (ohne das etwas installiert wird).
In unserer mirror.list
fügen wir die Quelle ebenfalls hinzu:
/etc/apt/mirror.list
und hängt unten die beiden folgenden Zeilen an:
# Google Chrome Repository
deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main
Mittels
apt-mirror
sollte er zusätzliche 300 bis 400 MByte finden die er herunterlädt.
Auf dem Client konfigurieren wie die Quelle wie folgt:
nano /etc/apt/sources.list.d/chrome.list
Inhalt:
deb [trusted=yes] http://192.168.157.19/ubuntu/mirror/dl.google.com/linux/chrome/deb/ stable main
Jetzt solltet Ihr auf dem Client einmal ein
apt update
ausführen. Wenn er für Chrome ein Update findet und ihr es per apt upgrade
installiert, kann es sein das er bei der Installation die Datei
/etc/apt/sources.list.d/google-chrome.list
erstellt. Bearbeitet diese und kommentiert den Eintrag aus. Das sollte er sich merken und nicht mehr versuchen direkt herunterzuladen.
Linksammlung
Quellen die ich verwendet habe:
- https://www.linuxtechi.com/setup-local-apt-repository-server-ubuntu/
- https://wiki.ubuntuusers.de/apt-mirror/
- https://awerner.myhome-server.de/doku.php?id=it-artikel:linux:how-to-make-an-ubuntu-or-debian-apt-repository-locally-available-as-an-emergency-offline-fallback
- https://computingforgeeks.com/creating-ubuntu-mirrors-using-apt-mirror/
- https://linux.how2shout.com/2-ways-to-install-chrome-browser-on-ubuntu-22-04-20-04-linux/