|
|
(16 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| Entwurf: Package-Preload (Beispiel)
| | {{SEITENTITEL:sway}}{{righttoc}} |
|
| |
|
| 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 andere Rechner zu verteilen.
| | <u>Erzeugen einer Schlüsseldatei zur Vermeidung einer zweiten Eingabe des Verschlüsselungspassworts:</u><br> |
| Um die Gefahr eines [partielles Upgrades](https://wiki.archlinux.de/title/Pacman#Keine_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, damit die vorhandene Paketdatenbank weiterhin den jeweiligen Stand der Aktualität des Systems wiedergibt. Die Installation, der auf diese Weise vorab heruntergeladenen Pakete, wird dabei wie bisher mit dem Befehl `pacman -Syu` auf jedem Rechner einzeln durchgeführt. Das upgrade läuft entsprechend schneller ab, da für bereits heruntergeladene Pakete auf den gemeinsam genutzten Paket Cache zugegriffen wird.
| | <code style=font-size:12px>dd bs=512 count=4 if=/dev/urandom of=/keyfile.bin</code><br> |
| | <code style=font-size:12px>cryptsetup luksAddKey /dev/disk/by-label/ROOT /keyfile.bin</code><br> |
| | <code style=font-size:12px>chmod 000 /keyfile.bin</code><br><br> |
|
| |
|
| ## Für den Rechner (server) der das Package-Preload durchführen soll:
| | <code style=font-size:12px>nano /etc/mkinitcpio.conf</code><br> |
| | | <u>'/keyfile.bin' zu Files hinzufuegen:</u><br> |
| ### Vorbereitung
| | <code style=font-size:12px>FILES=(/keyfile.bin)</code><br> |
| Für die separate Sync-Datenbank wird ein Verzeichnis angelegt und der Ordner local symbolisch darauf verlinkt.
| |
| ```
| |
| mkdir /var/lib/preload
| |
| ln -s /var/lib/pacman/local/ /var/lib/preload
| |
| ```
| |
| ### Einrichtung des nfs Servers
| |
| Im Unterschied zu dem Beispiel im Wiki-Artikel [nfs Server](https://wiki.archlinux.de/title/Network_File_System) wird in der Datei /etc/exports die Zeile
| |
| `/var/cache/pacman/pkg <client>(rw,sync,no_root_squash)` hinzugefügt. Für <client> ist der entsprechende hostname des zugreifenden Rechners zu setzen. Für den Zugriff von weiteren Rechnern kann jeweils eine neue Zeile angelegt werden.
| |
| | |
| | |
| ### 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
| |
| | |
| ListDir="/var/cache/pacman/pkg"
| |
| PreLoad_DB="/var/lib/preload"
| |
| | |
| # Write and sort package lists
| |
| pacman -Qqe > ${ListDir}/${HOSTNAME}.list
| |
| sort -u ${ListDir}/*.list > ${ListDir}/org.list
| |
| | |
| # Ignore packages not available in our sync DB (like AUR and local installed packages)
| |
| comm -12 <(pacman -Slq --dbpath ${PreLoad_DB} | sort) <(sort ${ListDir}/org.list) > /${ListDir}/all.list
| |
| | |
| # Preload packages
| |
| pacman -Syuw --noconfirm --dbpath ${PreLoad_DB}
| |
| ```
| |
| Die Datei pkgpreload.sh nach /usr/local/bin/pkgpreload.sh abspeichern und mit einem `chmod +x /usr/local/bin/pkgpreload.sh` ausführbar machen.
| |
| Zusätzlich wäre zu überlegen, den Befehl [paccache](https://wiki.archlinux.de/title/Pacman#Paccache) ins script zu integrieren um der Vorrat an alten Paketen zu limitieren.
| |
| | |
| ### systemd service
| |
| Service unter /etc/systemd/system/pkgpreload.service abspeichern und danach aktivieren
| |
| `systemctl enable --now pkgpreload.service`
| |
| ```
| |
| # 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
| |
| ```
| |
| | |
| ### systemd timer
| |
| Timer unter /etc/systemd/system/pkgpreload.timer abspeichern und danach aktivieren
| |
| `systemctl enable --now pkgpreload.timer`
| |
| Für andere Zeitintervalle siehe [systemd/Timers](https://wiki.archlinux.de/title/Systemd/Timers#Die_[Timer]_Sektion)
| |
| ```
| |
| # file-> /etc/systemd/system/pkgpreload.timer
| |
| | |
| [Unit]
| |
| Description=preloads packages
| |
| | |
| [Timer]
| |
| OnCalendar=daily
| |
| Persistent=true
| |
| | |
| [Install]
| |
| WantedBy=basic.target
| |
| ```
| |
| | |
| ## 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/pkg /var/cache/pacman/pkg nfs rw,nofail 0 0`
| |
| Der Ausduck <server> ist hier durch den hostname des Servers zu ersetzen.
| |
| Nach einem reboot müsste die Verbindung stehen.
| |
| | |
| ### pacman Hook
| |
| 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 = Install
| |
| Operation = Remove
| |
| Target = *
| |
| | |
| [Action]
| |
| Description = updating packagelist
| |
| When = PostTransaction
| |
| Exec = /bin/sh -c 'pacman -Qqe > /var/cache/pacman/pkg/$HOSTNAME.list; exit'
| |
| ```
| |