Package-Preload (Beispiel): Unterschied zwischen den Versionen
Tuxnix (Diskussion | Beiträge) |
Dirk (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(9 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{inuse|Tuxnix}} | |||
{{righttoc}} | {{righttoc}} | ||
Zeile 5: | Zeile 6: | ||
=== Der Server für das Package-Preload: === | === Der Server für das Package-Preload: === | ||
Ein Rechner wird als Server für das automatische Herunterladen der aktuellen Pakete bestimmt | Ein Rechner wird als Server für das automatische Herunterladen der aktuellen Pakete bestimmt. Er sammelt für alle anderen Rechner die jeweiligen Paket Upgrades. | ||
==== Einrichtung des nfs Servers ==== | ==== Einrichtung des nfs Servers ==== | ||
Im Unterschied zu dem Beispiel im Wiki-Artikel [[Network_File_System|nfs Server]] wird in der Datei /etc/exports folgende Zeile hinzugefügt. | Im Unterschied zu dem Beispiel im Wiki-Artikel [[Network_File_System|nfs Server]] wird in der Datei /etc/exports folgende Zeile hinzugefügt. | ||
/var/cache/pacman | /var/cache/pacman <client>(rw,sync,no_root_squash) | ||
Für <client> ist hier der entsprechende hostname des zugreifenden Rechners zu setzen. Für den Zugriff von weiteren Rechnern kann jeweils eine neue Zeile angelegt werden. | Für <client> ist hier der entsprechende hostname des zugreifenden Rechners zu setzen. Für den Zugriff von weiteren Rechnern kann jeweils eine neue Zeile angelegt werden. | ||
==== Sync-Datenbank ==== | |||
Ein Verzeichnis mit dem Rechnernamen wird angelegt und der lokale Teil der Paketdatenbank darauf symbolisch verlinkt. | |||
mkdir /var/cache/pacman/preload-${HOSTNAME} | |||
ln -s /var/lib/pacman/local/ /var/cache/pacman/preload-${HOSTNAME} | |||
==== pkgpreload.sh ==== | ==== pkgpreload.sh ==== | ||
#!/usr/bin/env bash | #!/usr/bin/env bash | ||
# file-> /usr/local/bin/pkgpreload.sh | # file-> /usr/local/bin/pkgpreload.sh | ||
Zeile 29: | Zeile 29: | ||
fi | fi | ||
for i in /var/cache/pacman/preload-*; do /usr/bin/pacman -Syuw --noconfirm --dbpath ${i}; done | |||
Die Datei pkgpreload.sh nach /usr/local/bin/pkgpreload.sh abspeichern und mit dem folgen Befehl ausführbar machen | Die Datei pkgpreload.sh nach /usr/local/bin/pkgpreload.sh abspeichern und mit dem folgen Befehl ausführbar machen: | ||
chmod +x /usr/local/bin/pkgpreload.sh | chmod +x /usr/local/bin/pkgpreload.sh | ||
Zusätzlich wäre zu überlegen, den Befehl [[Pacman#Paccache|paccache]] ins script | Tipp: Zusätzlich wäre zu überlegen, den Befehl [[Pacman#Paccache|paccache]] mit ins script aufzunehmen um den Vorrat an alten Paketen im cache zu limitieren. | ||
==== systemd.service ==== | ==== systemd.service ==== | ||
Ein entsprechender Service ist anzulegen. | |||
# file-> /etc/systemd/system/pkgpreload.service | # file-> /etc/systemd/system/pkgpreload.service | ||
Zeile 65: | Zeile 53: | ||
==== systemd.timer ==== | ==== systemd.timer ==== | ||
Einen Timer erstellen, der den Service in den gewünschten Intervallen auslöst. | |||
Für mögliche Zeitintervalle siehe: [[Systemd/Timers|Systemd/Timers]] | |||
# file-> /etc/systemd/system/pkgpreload.timer | # file-> /etc/systemd/system/pkgpreload.timer | ||
Zeile 76: | Zeile 67: | ||
[Install] | [Install] | ||
WantedBy=basic.target | WantedBy=basic.target | ||
Timer unter /etc/systemd/system/pkgpreload.timer abspeichern und danach aktivieren | Timer unter /etc/systemd/system/pkgpreload.timer abspeichern und danach aktivieren: | ||
systemctl enable --now pkgpreload.timer | systemctl enable --now pkgpreload.timer | ||
=== Für alle anderen Rechner: === | === Für alle anderen Rechner: === | ||
Zeile 87: | Zeile 76: | ||
pacman -S nfs-utils | pacman -S nfs-utils | ||
Danach ist der /etc/fstab Datei die folgende Zeile anzufügen. | Danach ist der /etc/fstab Datei die folgende Zeile anzufügen. | ||
<server>:/var/cache/pacman | <server>:/var/cache/pacman /var/cache/pacman rw,nofail 0 0 | ||
Der Ausdruck <server> ist hier durch den hostname des Servers zu ersetzen. | Der Ausdruck <server> ist hier durch den hostname des Servers zu ersetzen. | ||
Nach einem {{ic|reboot}} sollte die Verbindung stehen. | Nach einem {{ic|reboot}} sollte die Verbindung stehen. | ||
==== pacman Hook ==== | ==== pacman Hook ==== | ||
Ein Verzeichnis hooks anlegen | Falls noch nicht geschehen das Paket rsync installieren: | ||
pacman -S rsync | |||
Ein Verzeichnis hooks anlegen: | |||
mkdir /etc/pacman.d/hooks | mkdir /etc/pacman.d/hooks | ||
Und die folgende pkglist.hook Datei dort abspeichern | Und die folgende pkglist.hook Datei dort abspeichern | ||
Zeile 99: | Zeile 90: | ||
[Trigger] | [Trigger] | ||
Type = Package | Type = Package | ||
Operation = Upgrade | |||
Operation = Install | Operation = Install | ||
Operation = Remove | Operation = Remove | ||
Zeile 104: | Zeile 96: | ||
[Action] | [Action] | ||
Description = | Description = Updating packagelist... | ||
When = PostTransaction | When = PostTransaction | ||
Exec = /bin/sh -c 'pacman | Exec = /bin/sh -c '/usr/bin/rsync --mkpath --delete -r --ignore-existing /var/lib/pacman/local/ /var/cache/pacman/preload-${HOSTNAME}/local' | ||
=== Siehe auch === | === Siehe auch === | ||
=== Weblinks === | === Weblinks === | ||
[[Kategorie:Systemverwaltung]] |
Aktuelle Version vom 29. November 2022, 15:28 Uhr
„Package-Preload (Beispiel)“ wurde von Tuxnix als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Tuxnix bitte, bevor du den Artikel bearbeitest.
Das folgende Beispiel zeigt die Möglichkeit auf den Download von neuen Paketen auf einem zentalen Rechner automatisch durchzuführen und die Pakete von dort aus auf alle anderen Rechner zu verteilen.
Um die Gefahr eines partiellen Upgrades, das die Konsistenz des Systems bei einen unbedachten pacman -S foobar
beschädigen könnte zu vermeiden, wird eine separate Sync-DB genutzt. Somit bleibt die originäre Paketdatenbank unangetastet und kann weiterhin den realen Stand des Systems wiedergeben. Das Upgrade des Systems wird wie bisher mit dem Befehl pacman -Syu
auf jedem Rechner einzeln durchgeführt. Die Installation der neuen Pakete läuft entsprechend schneller ab, da die meisten Pakete schon vorab in den gemeinsam genutzten Paket-Cache geladen wurden.
Der Server für das Package-Preload:
Ein Rechner wird als Server für das automatische Herunterladen der aktuellen Pakete bestimmt. Er sammelt für alle anderen Rechner die jeweiligen Paket Upgrades.
Einrichtung des nfs Servers
Im Unterschied zu dem Beispiel im Wiki-Artikel nfs Server wird in der Datei /etc/exports folgende Zeile hinzugefügt.
/var/cache/pacman <client>(rw,sync,no_root_squash)
Für <client> ist hier der entsprechende hostname des zugreifenden Rechners zu setzen. Für den Zugriff von weiteren Rechnern kann jeweils eine neue Zeile angelegt werden.
Sync-Datenbank
Ein Verzeichnis mit dem Rechnernamen wird angelegt und der lokale Teil der Paketdatenbank darauf symbolisch verlinkt.
mkdir /var/cache/pacman/preload-${HOSTNAME} ln -s /var/lib/pacman/local/ /var/cache/pacman/preload-${HOSTNAME}
pkgpreload.sh
#!/usr/bin/env bash # file-> /usr/local/bin/pkgpreload.sh # Proof if root if (( `id -u` != 0 )); then echo "Sorry, you must be root." exit fi for i in /var/cache/pacman/preload-*; do /usr/bin/pacman -Syuw --noconfirm --dbpath ${i}; done
Die Datei pkgpreload.sh nach /usr/local/bin/pkgpreload.sh abspeichern und mit dem folgen Befehl ausführbar machen:
chmod +x /usr/local/bin/pkgpreload.sh
Tipp: Zusätzlich wäre zu überlegen, den Befehl paccache mit ins script aufzunehmen um den Vorrat an alten Paketen im cache zu limitieren.
systemd.service
Ein entsprechender Service ist anzulegen.
# file-> /etc/systemd/system/pkgpreload.service [Unit] Description=preloads packages After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/pkgpreload.sh [Install] WantedBy=basic.target
Den Service unter /etc/systemd/system/pkgpreload.service abspeichern.
systemd.timer
Einen Timer erstellen, der den Service in den gewünschten Intervallen auslöst. Für mögliche Zeitintervalle siehe: Systemd/Timers
# file-> /etc/systemd/system/pkgpreload.timer [Unit] Description=preloads packages [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=basic.target
Timer unter /etc/systemd/system/pkgpreload.timer abspeichern und danach aktivieren:
systemctl enable --now pkgpreload.timer
Für alle anderen Rechner:
Den nfs Client einrichten
Wie beim server ist auch hier das Paket nfs-utils zu installieren.
pacman -S nfs-utils
Danach ist der /etc/fstab Datei die folgende Zeile anzufügen.
<server>:/var/cache/pacman /var/cache/pacman rw,nofail 0 0
Der Ausdruck <server> ist hier durch den hostname des Servers zu ersetzen.
Nach einem reboot
sollte die Verbindung stehen.
pacman Hook
Falls noch nicht geschehen das Paket rsync installieren:
pacman -S rsync
Ein Verzeichnis hooks anlegen:
mkdir /etc/pacman.d/hooks
Und die folgende pkglist.hook Datei dort abspeichern
# file->/etc/pacman.d/hooks/pkglist.hook [Trigger] Type = Package Operation = Upgrade Operation = Install Operation = Remove Target = * [Action] Description = Updating packagelist... When = PostTransaction Exec = /bin/sh -c '/usr/bin/rsync --mkpath --delete -r --ignore-existing /var/lib/pacman/local/ /var/cache/pacman/preload-${HOSTNAME}/local'