Zum Inhalt springen

Benutzer:Tuxnix: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Tuxnix (Diskussion | Beiträge)
KKeine Bearbeitungszusammenfassung
K Seiten im Benutzerkontext müssen nicht mit inuse-Vorlage markiert werden
 
(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'
```

Aktuelle Version vom 31. Januar 2025, 14:39 Uhr

Erzeugen einer Schlüsseldatei zur Vermeidung einer zweiten Eingabe des Verschlüsselungspassworts:
dd bs=512 count=4 if=/dev/urandom of=/keyfile.bin
cryptsetup luksAddKey /dev/disk/by-label/ROOT /keyfile.bin
chmod 000 /keyfile.bin

nano /etc/mkinitcpio.conf
'/keyfile.bin' zu Files hinzufuegen:
FILES=(/keyfile.bin)