Eigenen Mirror erstellen: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) K →Synchronisationsscript: neue Mailadresse |
Dirk (Diskussion | Beiträge) K Verschiebung community -> extra |
||
(22 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
Ein Großteil aller Arch-Nutzer wird dies nie benötigen. Es ist nur sinnvoll, einen eigenen Mirror zu betrieben, wenn man sehr viele Arch-Installationen versorgen will, oder wenn man selbst einen eigenen, offiziellen Mirror anbieten möchte. | Ein Großteil aller Arch-Nutzer wird dies nie benötigen. Es ist nur sinnvoll, einen eigenen Mirror zu betrieben, wenn man sehr viele Arch-Installationen versorgen will, oder wenn man selbst einen eigenen, offiziellen Mirror anbieten möchte. | ||
Für den Heimgebrauch mit nur wenigen Rechnern eignet sich ein im Netzwerk geteilter Pacman-Cache eventuell besser. Auch existiert mit [ | Für den Heimgebrauch mit nur wenigen Rechnern eignet sich ein im Netzwerk geteilter Pacman-Cache eventuell besser. Auch existiert mit [https://xyne.dev/projects/pacserve/ pacserve] {{sprache|en}} eine einfache Möglichkeit, den Cache im LAN zu verteilen, ohne einen zentralen Cache verwalten zu müssen. | ||
Aufgrund der Tatsache, dass das Synchronisieren eines kompletten Repositorys viel Traffic verursacht, ist es nur offiziellen Mirrors gestattet, direkt von rsync.archlinux.org zu synchronisieren. Will man einen offiziellen Mirror betreiben, muss man sich auf der Arch-Mailingliste melden. | Aufgrund der Tatsache, dass das Synchronisieren eines kompletten Repositorys viel Traffic verursacht, ist es nur offiziellen Mirrors gestattet, direkt von rsync.archlinux.org zu synchronisieren. Will man einen offiziellen Mirror betreiben, muss man sich auf der Arch-Mailingliste melden. | ||
Zeile 14: | Zeile 14: | ||
rsync ist im „extra“-Repository enthalten und kann aus diesem mittels Pacman installiert werden. Will man den Mirror tatsächlich (im LAN) anbieten, benötigt man noch einen FTP-Server. in dieserm Artikel wird hierfür vsftpd verwendet, der ebenfalls in „extra“ zu finden ist. | rsync ist im „extra“-Repository enthalten und kann aus diesem mittels Pacman installiert werden. Will man den Mirror tatsächlich (im LAN) anbieten, benötigt man noch einen FTP-Server. in dieserm Artikel wird hierfür vsftpd verwendet, der ebenfalls in „extra“ zu finden ist. | ||
pacman - | pacman -S rsync vsftpd | ||
Damit vsftpd nicht mit den normalen Userrechten, oder gar als root läuft, ist es sinnvoll, hier einen eigenen User anzulegen. | Damit vsftpd nicht mit den normalen Userrechten, oder gar als root läuft, ist es sinnvoll, hier einen eigenen User anzulegen. | ||
Zeile 29: | Zeile 29: | ||
# chown mirror:users scripts files logs | # chown mirror:users scripts files logs | ||
Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf | Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf {{ic|/home/mirror/}}. Zudem wird weiterhin als root gearbeitet. | ||
== Synchronisationsscript == | == Synchronisationsscript == | ||
Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter | Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter {{ic|scripts/mirrorsync.sh}} gespeichert und ausführbar gemacht. | ||
#!/bin/bash | #!/bin/bash | ||
Zeile 51: | Zeile 51: | ||
# Auswahl der zu synchronisierenden Repositorys | # Auswahl der zu synchronisierenden Repositorys | ||
# Gültige Optionen sind: core, extra, testing | # Gültige Optionen sind: core, extra, testing, iso | ||
# Leer lassen, um den gesammten Mirror zu synchronisieren | # Leer lassen, um den gesammten Mirror zu synchronisieren | ||
# SYNC_REPO=(core extra testing | # SYNC_REPO=(core extra testing iso) | ||
SYNC_REPO=() | SYNC_REPO=() | ||
Zeile 59: | Zeile 59: | ||
# Nur offizielle, öffentliche Mirrors dürfen rsync.archlinux.org verwenden | # Nur offizielle, öffentliche Mirrors dürfen rsync.archlinux.org verwenden | ||
# SYNC_SERVER=rsync.archlinux.org::ftp | # SYNC_SERVER=rsync.archlinux.org::ftp | ||
SYNC_SERVER= | # Der selvnet.de Server kann nicht aufgelößt werden. | ||
# SYNC_SERVER=rsync.selfnet.de::archlinux | |||
# Daher nun der erste rsync Server von folgender Liste: https://www.archlinux.org/mirrors/status/ | |||
# Funktioniert Stand 04.10.2020 | |||
SYNC_SERVER=rsync://mirror.liteserver.nl/archlinux/ | |||
# An dieser Stelle weicht die Lokalisierte Version des Scripts von der | |||
# Originalversion ab, da der Mirror in der Originalversion seit einigen | |||
# Tagen nicht mehr synchronisiert wurde, und daher nur alte Pakete | |||
# bereit stellte. Selfnet hat eine Quota von 50 GB fullspeed am Tag, und | |||
# wird danach auf 16 KByte/s runtergestuft. | |||
# Format des Logfile-Namens | # Format des Logfile-Namens | ||
# Das beispiel gibt etwas wie „sync_20091019-3.log“ aus | # Das beispiel gibt etwas wie „sync_20091019-3.log“ aus | ||
LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log" | LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log" | ||
# Logfile anlegen und Timestamp einfügen | # Logfile anlegen und Timestamp einfügen | ||
Zeile 86: | Zeile 84: | ||
rsync -rptlv \ | rsync -rptlv \ | ||
--delete-after \ | --delete-after \ | ||
--safe-links \ | |||
--max-delete=1000 \ | |||
--copy-links \ | |||
--delay-updates $SYNC_SERVER "$SYNC_FILES" \ | --delay-updates $SYNC_SERVER "$SYNC_FILES" \ | ||
>> "$SYNC_LOGS/$LOG_FILE" | >> "$SYNC_LOGS/$LOG_FILE" | ||
Zeile 106: | Zeile 107: | ||
rsync -rptlv \ | rsync -rptlv \ | ||
--delete-after \ | --delete-after \ | ||
--safe-links \ | |||
--max-delete=1000 \ | |||
--copy-links \ | |||
--delay-updates $SYNC_SERVER/$repo "$SYNC_FILES" \ | --delay-updates $SYNC_SERVER/$repo "$SYNC_FILES" \ | ||
>> "$SYNC_LOGS/$LOG_FILE" | >> "$SYNC_LOGS/$LOG_FILE" | ||
Zeile 134: | Zeile 138: | ||
exit 0 | exit 0 | ||
Das Script muss natürlich an die eigenen Bedürfnisse angepasst werden. Gerade bei der Auswahl der Architekturen und Repositorys sollte man tatsächlich auch nur das angeben, was man selbst wirklich benötigt. Ein x86_64-Mirror mit den Repositorys „core“ | Das Script muss natürlich an die eigenen Bedürfnisse angepasst werden. Gerade bei der Auswahl der Architekturen und Repositorys sollte man tatsächlich auch nur das angeben, was man selbst wirklich benötigt. Ein x86_64-Mirror mit den Repositorys „core“ und „extra“ umfasst etwa 15 Gigabyte. | ||
Für jeden Mirror-Vorgang wird ein Logfile angelegt. Damit die Logfiles nicht überhand nehmen, sollte man zum beispiel LogRotate einrichten, oder aber ein Aufräumscript laufen lassen, wenn man sich nicht manuell | Für jeden Mirror-Vorgang wird ein Logfile angelegt. Damit die Logfiles nicht überhand nehmen, sollte man zum beispiel LogRotate einrichten, oder aber ein Aufräumscript laufen lassen, wenn man sich nicht manuell um die Logfiles kümmern möchte. | ||
== Regelmäßiges Synchronisieren == | == Regelmäßiges Synchronisieren == | ||
{{ | Um den Mirror regelmäßig zu synchronisieren kommt [[Systemd]] zum Einsatz. Hierzu erstellt mane ine Service-Datei mit entsprechendem Inhalt. | ||
{{hc|1=/etc/systemd/system/archmirror.service|2= | |||
[Unit] | |||
Description=running archmirror sync | |||
[Service] | |||
User=mirror | |||
Type=simple | |||
ExecStart=/home/mirror/scripts/mirrorsync.sh | |||
[Install] | |||
WantedBy=multi-user.target}} | |||
Hier muss eventuell der User oder der Ort des Skriptes angepasst werden. | |||
Zusätzlich wird ein Systemd-Timer benötigt, der das Script in regelmäßigen Abständen ausführt. | |||
{{hc|1=/etc/systemd/system/archmirror.timer|2= | |||
[Unit] | |||
Description=run archmirror sync every hour | |||
[Timer] | |||
OnBootSec=10min | |||
OnUnitActiveSec=1h | |||
Unit=archmirror.service | |||
[Install] | |||
WantedBy=multi-user.target}} | |||
Zehn Minuten nach dem Start des System beginnt der erste Durchlauf. Sobald das Skript beendet wurde beginnt der Countdown von einer Stunde. | |||
Nachdem die Systemd-Dateien angelegt wurden muss einmalig {{ic|systemctl daemon-reload}} ausgeführt werden um die Änderungen einzulesen. Dies muss auch nach Änderungen an schon bestehenden Dateien durchgeführt werden. | |||
Der aktuelle Status wird mittels {{ic|systemctl list-timers}} angezeigt. Dies liefert uns eine Ausgabe die, je nach System und Anzahl der Timer wie folgt aussieht. | |||
NEXT LEFT LAST PASSED UNIT ACTIVATES | |||
Sa 2015-10-31 11:15:09 UTC 41min left Sa 2015-10-31 10:15:09 UTC 18min ago archmirror.timer archmirror.service | |||
Wenn | Mit {{ic|systemctl status archmirror}} kann man sich eine kurze Statusübersicht anzeigen lassen. Wenn man ausführlichere Informationen über den Status des Timers erfahren möchte, verwendet man {{ic|journalctl -u archmirror}}. | ||
== Konfiguration von Pacman == | == Konfiguration von Pacman == | ||
Je nachdem, ob man den eigenen Mirror nur Lokal verwenden möchte, oder ob man einen | Je nachdem, ob man den eigenen Mirror nur Lokal verwenden möchte, oder ob man einen Server im Netz stehen hat, auf dem der Mirror läuft, und man diesen verwenden möchte, gibt es zwei Wege, die man beschreiten kann. | ||
=== Rein lokaler Mirror === | === Rein lokaler Mirror === | ||
Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei | Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei {{ic|/etc/pacman.d/mirrorlist}} anpassen. | ||
Server = file:///home/mirror/files/$repo/os/x86_64 | Server = file:///home/mirror/files/$repo/os/x86_64 | ||
Zeile 188: | Zeile 215: | ||
data_connection_timeout=30 | data_connection_timeout=30 | ||
Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). | Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). Einschränken kann man den Zugriff beispielsweise über die Datei {{ic|/etc/hosts.allow}} oder Portforwarding-Regeln auf dem Router. | ||
Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt. | Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt. | ||
Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei | Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei {{ic|/etc/hosts.allow}} anpassen. | ||
vsftpd : ALL : ALL | vsftpd : ALL : ALL | ||
{{hinweis|Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe | {{hinweis|Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe {{ic|man hosts.allow}} oder bei den Weblinks}} | ||
Wenn alles soweit konfiguriert wurde, kann man vsftpd starten. | Wenn alles soweit konfiguriert wurde, kann man vsftpd starten. | ||
Zeile 202: | Zeile 229: | ||
/etc/rc.d/vsftpd start | /etc/rc.d/vsftpd start | ||
Nun kann man in der Datei | Nun kann man in der Datei {{ic|/etc/pacman.d/mirrorlist}}, je nachdem, ob der Server im DNS vorhanden ist, oder nicht, den eigenen Mirror ganz normal als Quelle hinzufügen. | ||
Server = ftp://192.168.1.21/$repo/os/x86_64 | Server = ftp://192.168.1.21/$repo/os/x86_64 | ||
Zeile 215: | Zeile 242: | ||
su -c "mirror /home/mirror/scripts/mirrorsync.sh" | su -c "mirror /home/mirror/scripts/mirrorsync.sh" | ||
Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des | Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des {{ic|tail}}-Befehls. | ||
tail -f logs/pkgsync_20091015-7.log | tail -f logs/pkgsync_20091015-7.log | ||
Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: | Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: {{ic|logs/pkgsync_YYMMDD-HH}}. | ||
Nach dem ersten Synchronisieren sollte man ein Mal | Nach dem ersten Synchronisieren sollte man ein Mal {{ic|pacman -Sy}} ausführen, um zu überprüfen, ob der Mirror ordungsgemäß funktioniert. | ||
== Siehe auch == | == Siehe auch == | ||
* [[Eigene Repositories erstellen]] | |||
* Wiki-Artikel zur Funktionsweise von [[rsync]] | * Wiki-Artikel zur Funktionsweise von [[rsync]] | ||
* Der Paketmanager [[Pacman]] | * Der Paketmanager [[Pacman]] | ||
Zeile 236: | Zeile 263: | ||
[[Kategorie:Server]] | [[Kategorie:Server]] | ||
[[Kategorie:Installation]] | [[Kategorie:Installation]] | ||
[[en:Local Mirror]] |
Aktuelle Version vom 24. Mai 2023, 18:36 Uhr
Dieser Artikel beschreibt, wie man sich einen eigenen Arch-Mirror anlegt, und diesen mit einem anderen Mirror synchronisiert.
Ein Großteil aller Arch-Nutzer wird dies nie benötigen. Es ist nur sinnvoll, einen eigenen Mirror zu betrieben, wenn man sehr viele Arch-Installationen versorgen will, oder wenn man selbst einen eigenen, offiziellen Mirror anbieten möchte.
Für den Heimgebrauch mit nur wenigen Rechnern eignet sich ein im Netzwerk geteilter Pacman-Cache eventuell besser. Auch existiert mit pacserve eine einfache Möglichkeit, den Cache im LAN zu verteilen, ohne einen zentralen Cache verwalten zu müssen.
Aufgrund der Tatsache, dass das Synchronisieren eines kompletten Repositorys viel Traffic verursacht, ist es nur offiziellen Mirrors gestattet, direkt von rsync.archlinux.org zu synchronisieren. Will man einen offiziellen Mirror betreiben, muss man sich auf der Arch-Mailingliste melden.
In der Mirrorliste sind alle offiziellen Mirrors verzeichnet. Bei vielen besteht auch die Möglichkeit, mittels rsync zu synchronisieren.
Vorbereitungen
Damit man einen Mirror betreiben kann, benötigt man ein Tool, um den eigenen Datenbestand mit einem anderen Mirror zu synchronisieren. Dieser Artikel basiert auf einer rsync-Lösung.
rsync ist im „extra“-Repository enthalten und kann aus diesem mittels Pacman installiert werden. Will man den Mirror tatsächlich (im LAN) anbieten, benötigt man noch einen FTP-Server. in dieserm Artikel wird hierfür vsftpd verwendet, der ebenfalls in „extra“ zu finden ist.
pacman -S rsync vsftpd
Damit vsftpd nicht mit den normalen Userrechten, oder gar als root läuft, ist es sinnvoll, hier einen eigenen User anzulegen.
useradd -m -s /bin/false mirror
Dieser User kann sich nicht einloggen, dies ist also deutlich sicherer, als ein User, der zum Beispiel die bash als Shell definiert hat.
Es müssen zudem Verzeichnisse angelegt werden, in denen Dateien abgelegt werden, die für den Synchronisationsprozess benötigt werden.
$ cd /home/mirror $ su # mkdir scripts files logs # chown mirror:users scripts files logs
Alle weiteren Dateinamens-Angaben beziehen sich, wenn nicht anders angegeben auf /home/mirror/
. Zudem wird weiterhin als root gearbeitet.
Synchronisationsscript
Das Synchronisieren des eigenen Mirrors mit einem anderen Mirror wird mittels eines Bash-Scriptes vorgenommen. Nachfolgendes script wird unter scripts/mirrorsync.sh
gespeichert und ausführbar gemacht.
#!/bin/bash # # The script to sync a local mirror of the Arch Linux repositories and ISOs # # Copyright (C) 2007 Woody Gilk <woody@archlinux.org> # Modifications by Dale Blount <dale@archlinux.org> # and Roman Kyrylych <roman@archlinux.org> # Comments translated to German by Dirk Sohler <dirk@0x7be.de> # Licensed under the GNU GPL (version 2) # Speicherorte für den Synchronisationsvorgang SYNC_HOME="/home/mirror" SYNC_LOGS="$SYNC_HOME/logs" SYNC_FILES="$SYNC_HOME/files" SYNC_LOCK="$SYNC_HOME/mirrorsync.lck" # Auswahl der zu synchronisierenden Repositorys # Gültige Optionen sind: core, extra, testing, iso # Leer lassen, um den gesammten Mirror zu synchronisieren # SYNC_REPO=(core extra testing iso) SYNC_REPO=() # Server, von dem synchronisiert werden soll # Nur offizielle, öffentliche Mirrors dürfen rsync.archlinux.org verwenden # SYNC_SERVER=rsync.archlinux.org::ftp # Der selvnet.de Server kann nicht aufgelößt werden. # SYNC_SERVER=rsync.selfnet.de::archlinux # Daher nun der erste rsync Server von folgender Liste: https://www.archlinux.org/mirrors/status/ # Funktioniert Stand 04.10.2020 SYNC_SERVER=rsync://mirror.liteserver.nl/archlinux/ # An dieser Stelle weicht die Lokalisierte Version des Scripts von der # Originalversion ab, da der Mirror in der Originalversion seit einigen # Tagen nicht mehr synchronisiert wurde, und daher nur alte Pakete # bereit stellte. Selfnet hat eine Quota von 50 GB fullspeed am Tag, und # wird danach auf 16 KByte/s runtergestuft. # Format des Logfile-Namens # Das beispiel gibt etwas wie „sync_20091019-3.log“ aus LOG_FILE="pkgsync_$(date +%Y%m%d-%H).log" # Logfile anlegen und Timestamp einfügen touch "$SYNC_LOGS/$LOG_FILE" echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE" echo ">> Starting sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE" echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE" if [ -z $SYNC_REPO ]; then # Sync a complete mirror rsync -rptlv \ --delete-after \ --safe-links \ --max-delete=1000 \ --copy-links \ --delay-updates $SYNC_SERVER "$SYNC_FILES" \ >> "$SYNC_LOGS/$LOG_FILE" else # Alle Repositorys synchronisieren, die in $SYNC_REPO angegeben wurden for repo in ${SYNC_REPO[@]}; do repo=$(echo $repo | tr [:upper:] [:lower:]) echo ">> Syncing $repo to $SYNC_FILES/$repo" >> "$SYNC_LOGS/$LOG_FILE" # Wenn man nur i686-Pakete synchronisieren will, kann man in dem # rsync-Aufruf dies nach „--delete-after“ inzufügen: # „ --exclude=os/x86_64“ # # Will man stattdessen nur die x86_64-Pakete synchronisieren, verwendet # man stattdessen „--exclude=os/i686“ # # Will man beide Architekturen auf dem eigenen Mirror anbieten, lässt # den rsync-Aufruf einfach, wie er ist # rsync -rptlv \ --delete-after \ --safe-links \ --max-delete=1000 \ --copy-links \ --delay-updates $SYNC_SERVER/$repo "$SYNC_FILES" \ >> "$SYNC_LOGS/$LOG_FILE" # Erstellt eine Datei „$repo.lastsync“, die den Timestamp der synchronisation # beinhaltet (z. B. „2009-10-19 03:14:28+02:00“). Dies kann nützlich sein, # um einen Hinweis darauf zu haben, wann der eigene Mirror zuletzt mit # dem angegebenen Mirror abgeglichen wurde. Zum Verwenden einkommentieren. # date --rfc-3339=seconds > "$SYNC_FILES/$repo.lastsync" # Nach jedem Repository fünf Sekunden warten, um zu viele gleichzeitige # Verbindungen zum rsync-Server zu verhindern, fall die Verbindung nach # dem synchronisieren des vorherigen Repositorys vom Server nicht # zeitig geschlossen wurde sleep 5 done fi # Weiteren Timestamp ins Logfile schreiben, und es schließen echo ">> ---" >> "$SYNC_LOGS/$LOG_FILE" echo ">> Finished sync on $(date --rfc-3339=seconds)" >> "$SYNC_LOGS/$LOG_FILE" echo "=============================================" >> "$SYNC_LOGS/$LOG_FILE" echo "" >> "$SYNC_LOGS/$LOG_FILE" # Die lock-Datei zum Sperren des Script-Durchlaufs löschen und das # Script beenden rm -f "$SYNC_LOCK" exit 0
Das Script muss natürlich an die eigenen Bedürfnisse angepasst werden. Gerade bei der Auswahl der Architekturen und Repositorys sollte man tatsächlich auch nur das angeben, was man selbst wirklich benötigt. Ein x86_64-Mirror mit den Repositorys „core“ und „extra“ umfasst etwa 15 Gigabyte.
Für jeden Mirror-Vorgang wird ein Logfile angelegt. Damit die Logfiles nicht überhand nehmen, sollte man zum beispiel LogRotate einrichten, oder aber ein Aufräumscript laufen lassen, wenn man sich nicht manuell um die Logfiles kümmern möchte.
Regelmäßiges Synchronisieren
Um den Mirror regelmäßig zu synchronisieren kommt Systemd zum Einsatz. Hierzu erstellt mane ine Service-Datei mit entsprechendem Inhalt.
/etc/systemd/system/archmirror.service
[Unit] Description=running archmirror sync [Service] User=mirror Type=simple ExecStart=/home/mirror/scripts/mirrorsync.sh [Install] WantedBy=multi-user.target
Hier muss eventuell der User oder der Ort des Skriptes angepasst werden.
Zusätzlich wird ein Systemd-Timer benötigt, der das Script in regelmäßigen Abständen ausführt.
/etc/systemd/system/archmirror.timer
[Unit] Description=run archmirror sync every hour [Timer] OnBootSec=10min OnUnitActiveSec=1h Unit=archmirror.service [Install] WantedBy=multi-user.target
Zehn Minuten nach dem Start des System beginnt der erste Durchlauf. Sobald das Skript beendet wurde beginnt der Countdown von einer Stunde.
Nachdem die Systemd-Dateien angelegt wurden muss einmalig systemctl daemon-reload
ausgeführt werden um die Änderungen einzulesen. Dies muss auch nach Änderungen an schon bestehenden Dateien durchgeführt werden.
Der aktuelle Status wird mittels systemctl list-timers
angezeigt. Dies liefert uns eine Ausgabe die, je nach System und Anzahl der Timer wie folgt aussieht.
NEXT LEFT LAST PASSED UNIT ACTIVATES Sa 2015-10-31 11:15:09 UTC 41min left Sa 2015-10-31 10:15:09 UTC 18min ago archmirror.timer archmirror.service
Mit systemctl status archmirror
kann man sich eine kurze Statusübersicht anzeigen lassen. Wenn man ausführlichere Informationen über den Status des Timers erfahren möchte, verwendet man journalctl -u archmirror
.
Konfiguration von Pacman
Je nachdem, ob man den eigenen Mirror nur Lokal verwenden möchte, oder ob man einen Server im Netz stehen hat, auf dem der Mirror läuft, und man diesen verwenden möchte, gibt es zwei Wege, die man beschreiten kann.
Rein lokaler Mirror
Wenn der Mirror nur lokal verwendet werden soll (wenn also der Server und der Client identisch sind), kann man dies direkt tun, ohne noch etwas an der Mirror-Konfiguration anpassen zu müssen. Man muss lediglich die Datei /etc/pacman.d/mirrorlist
anpassen.
Server = file:///home/mirror/files/$repo/os/x86_64
Dies schreibt man in die este Zeile der Mirror-Liste. Wenn man nicht alle Repositorys synchronisiert, sollte man nach dieser Zeile weitere Mirrors angeben. Pacman geht die Liste so lange durch, bis es einen Server gefunden hat, auf dem das benötigte Paket vorhanden ist.
Mirror auf eigenem Server
Wenn der eigene Mirror sich auf einem anderen Rechner befindet, als der, der diesen Mirror benutzen soll (wenn man also einen Mirror in einem Netzwerk anbieten will), dann bedarf es noch der Einrichtung eines FTP-Servers auf dem Mirror-Server. Hierzu wird in diesem Artikel vsftpd verwendet.
Nach der Installation dieses Servers (siehe oben) wird er wie folgt konfiguriert.
# User, mit dessen Rechten der Server laufen soll nopriv_user=mirror # Username für den anonymen Login, identisch mit nopriv_user ftp_username=mirror # Das Startverzeichnis für den anonymen User anon_root=/home/mirror/files
# Weitere Konfiguration listen=YES tcp_wrappers=YES use_localtime=YES hide_ids=YES anonymous_enable=YES no_anon_password=YES ls_recurse_enable=YES idle_session_timeout=120 data_connection_timeout=30
Der so konfigurierte Server ist sehr sicher. Man braucht für den zugriff kein Passwort, und sollte daher nicht öffentlich zugänglich sein (außer, das ist beabsichtigt, weil man einen öffentlichen Mirror anbieten will). Einschränken kann man den Zugriff beispielsweise über die Datei /etc/hosts.allow
oder Portforwarding-Regeln auf dem Router.
Der Passwortschutz für den FTP-Zugang zum Mirror bei gleichzeitiger Funktionalität als normaler, mit Pacman abrufbarer Mirror wird in diesem Artikel nicht behandelt.
Um den Zugriff auf den Mirror von anderen Rechnern aus zu ermöglichen muss man jetzt nur noch die Datei /etc/hosts.allow
anpassen.
vsftpd : ALL : ALL
Hinweis: Mit dieser einstellung darf jeder von dem Mirror herunterladen. dies ist allerdings konfigurierbar, siehe man hosts.allow
oder bei den Weblinks
Wenn alles soweit konfiguriert wurde, kann man vsftpd starten.
/etc/rc.d/vsftpd start
Nun kann man in der Datei /etc/pacman.d/mirrorlist
, je nachdem, ob der Server im DNS vorhanden ist, oder nicht, den eigenen Mirror ganz normal als Quelle hinzufügen.
Server = ftp://192.168.1.21/$repo/os/x86_64 # Server = ftp://hostname/$repo/os/x86_64 # Server = ftp://localhost/$repo/os/x86_64
Im Beispiel wird der Server über seine IP angesprochen. Auskommentiert sind das ansprechen über den im DNS vorhandenen Hostname, sowie das ansprechen des Mirrors über localhost. Wenn man die IP verwendet, sollte man dafür Sorge tragen, dass der Server immer über die Selbe IP erreichbar ist.
Die erste Synchronisation
Wenn man den eigenen Mirror das erste Mal mit einem anderen Mirror synchronisiert, dauert dies, abhängig von der Internetverbindung, mehrere Stunden. Jedes weitere synchronisieren geht schneller, da nur jeweils aktualisierte Pakete übertragen werden. Man kann wahlweise bis zum in der Crontab angegebenen Zeitpunkt warten, oder das Synchronisieren, zum beispiel in einer screen-Session oder mit nohup manuell starten.
su -c "mirror /home/mirror/scripts/mirrorsync.sh"
Es wird nichts ausgegeben, da das Script auch als Cronjob läuft, und dann jedes mal unnötig System-Mails generiert werden würden. Will man trotzdem einen Status sehen, kann man dies mittels des tail
-Befehls.
tail -f logs/pkgsync_20091015-7.log
Der Dateiname richtet sich bei der Konfiguration nach in diesem Artikel nach folgendem Schema: logs/pkgsync_YYMMDD-HH
.
Nach dem ersten Synchronisieren sollte man ein Mal pacman -Sy
ausführen, um zu überprüfen, ob der Mirror ordungsgemäß funktioniert.
Siehe auch
- Eigene Repositories erstellen
- Wiki-Artikel zur Funktionsweise von rsync
- Der Paketmanager Pacman
Weblinks
Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar. |