Ich habe einen Server 18.04 mit benutzerdefinierten ZFS-Kernelmodulen (0.8.x vs. bereitgestelltes 0.7.x).
Wenn ich den Kernel aktualisiere, muss ich das ZFS-Kernelmodul regelmäßig neu kompilieren, da es sonst automatisch deaktiviert würde.
Beim letzten Mal musste ich eine Weile herumfummeln, bis es klappte, deshalb möchte ich dieses Mal im Voraus wissen, wie die richtigen Schritte aussehen.
Ich finde
- Aktualisieren des Kernels und der Kernelquellen
- Herunterladen der Modulquelle und Kompilieren des Moduls
- Entfernen vorheriger kmod-Pakete und Installieren der neuen
Da das Kernelmodul jedoch auf einige aktuell gemountete Dateisysteme zugreifen muss, stellt sich die Frage: Was ist der nächste Schritt? Einfach neu starten, um das neue Modul zu mounten?
Ich muss auch irgendwann den Auto-Import-Dienst aktivieren, siehehttps://unix.stackexchange.com/questions/338260/zfs-mounting-only-one-of-my-pools-on-boot
Antwort1
Wenn Sie ein Modul für den aktuell laufenden Kernel aktualisieren, müssen Sie die Verwendung des Moduls (also umount
aller Dateisysteme) beenden, rmmod zfs
das neue Modul verfügbar machen und modprobe zfs
es erneut laden. Ein Neustart ist normalerweise einfacher, aber Sie können anderswo Beispiele finden, die Ihnen dabei helfen, dies bei Bedarf auch während des laufenden Systems zu tun.
# # Stop using the module
# rmmod zfs
# modprobe zfs
Wenn Sie bei jeder Kernel-Aktualisierung automatisch Updates für ein Modul kompilieren und installieren möchten, könnten Sie an Folgendem interessiert sein:DKMS. Es gibt eine großeDKMS Verpackungsleitfadenin dem dies ausführlich erörtert wird.
Die Idee ist, dass Sie ein Modul oder eine Änderung am Kernel haben, die Sie bei jedem Kernel-Update anwenden möchten. Sie können die Kompilierung und Installation der Module automatisieren, wenn apt
der verwendete Kernel aktualisiert wird. Gute Beispiele hierfür finden Sie auch bei VirtualBox mit einigenNVIDIA DKMS-Treiber.
Ein weiteres gutes Beispiel, das zeigt, wie dies eingerichtet wird, istbcwc_pcie von patjakDas Verfahren bcwc_pcie
, um ein oder facetimehd
mehrere Module zu kompilieren und für neue Kernel verfügbar zu machen, istdokumentiert:
Einrichten von DKMS (automatische Kompilierung bei Kernel-Update)
Dies setzt voraus, dass Sie die Schritte für das Debian/Ubuntu-Deb-Paket bereits befolgt haben. Sie müssen überprüfen, dkms.conf
ob der Modulname facetimehd
und die Versionsnummer 0.1
korrekt sind, und entweder aktualisieren dkms.conf
oder die Anweisungen anpassen, bei denen -m
und -v
verwendet werden.
- Installieren Sie die benötigten Pakete:
# apt install debhelper dkms
- Altes Paket entfernen, falls installiert:
# dpkg -r bcwc-pcie
- Erstellen Sie ein Verzeichnis zum Arbeiten:
# mkdir /usr/src/facetimehd-0.1
- Wechseln Sie in das Git-Repo-Verzeichnis:
$ cd bcwc_pcie
- Dateien kopieren über:
# cp -r * /usr/src/facetimehd-0.1/
- Wechseln Sie in dieses Verzeichnis:
# cd /usr/src/facetimehd-0.1/
- Entfernen Sie alle vorherigen Debs und Backups:
# rm backup-*tgz bcwc-pcie_*deb
- Vorherige Kompilierung löschen:
# make clean
- Registrieren Sie das neue Modul bei der DKMS:
# dkms add -m facetimehd -v 0.1
- Erstellen Sie das Modul:
# dkms build -m facetimehd -v 0.1
- Erstellen Sie ein Debian-Quellpaket:
# dkms mkdsc -m facetimehd -v 0.1 --source-only
- Erstellen Sie ein Debian-Binärpaket:
# dkms mkdeb -m facetimehd -v 0.1 --source-only
- Deb lokal kopieren:
# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
- Entfernen Sie die lokalen Build-Dateien:
# rm -r /var/lib/dkms/facetimehd/
- Installieren Sie das neue Deb-Paket:
# dpkg -i /root/facetimehd-dkms_0.1_all.deb
Sollten Sie Probleme haben, lesen Sie bitte diese Anleitung zum Erstellen eines DKMS-Pakets: http://www.xkyle.com/building-linux-packages-for-kernel-drivers/
Das einzige, was in diesem bcwc_pcie
Beispiel fehlt, ist, dass diese Codebasis nicht aktualisiert wird, während sich der Modulcode, den Sie kompilieren, im Laufe der Zeit ändern kann. Dies lässt sich am einfachsten tun, wenn Sie einenneuesteDownload im Vergleich zu bestimmten Versionen der Quelle, die Sie kompilieren möchten.
Wir können uns die dkms.conf
anschauenDKMS Community Dokument:
$ cat dkms.conf
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes
Sie können auch Optionen hinzufügen, um Skripte vor oder nach dem Erstellen oder Installieren aufzurufen, zusätzliche (bedingte) Make-Befehle, Patch-Befehle usw. bereitzustellen. Die dkms.conf wird tatsächlich in ein Shell-Skript eingebunden, sodass bei Bedarf eine ganze Menge Tricksereien möglich sind. Diese und weitere Optionen werden im Abschnitt dkms.conf in man dkms beschrieben.
Undmanpage:
PRE_BUILD= Der Name des Skripts, das vor dem Erstellen eines Builds ausgeführt werden soll. Der Pfad sollte relativ zum Stammverzeichnis Ihrer Quelle angegeben werden.
Sie können ein Verzeichnis erstellen, das ein Skript enthält, das dieneueste Version von ZFSzur Vorbereitung des Builds. Dies hilft, den Prozess zu automatisieren. Sie können git
die Quelle verwenden oder herunterladen und extrahieren latest
. Hier ist ein Beispiel, wie Sie die neueste Download-URL für ZFS ermitteln:
$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz$'
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz
Sie erwähnen eine Komplikation bei systemd
deaktivierten Diensten. dkms
Behebt das Einrichten Ihres eigenen ZFS-Setups dieses Problem? Haben Sie Pakete installiert, die auf das eigentliche zfs-dkms
Paket angewiesen sind, was zu Konflikten führen würde? Zumindest könnten Sie sich einklinken POST_INSTALL
und ausführen systemctl enable
, um die deaktivierten Dienste zu aktivieren.
Allerdings ist ZFS ein ziemlich beliebtes Dateisystem und sollte bereits über ein DKMS-Paket verfügen. Es scheint, dass dies zutrifft und dasszfs-dkms
ist verfügbar inUniversum. Sie können sich die Einzelheiten dieses Pakets ansehen und prüfen, ob das bereits verfügbare Paket zfs-dkms
für Sie das Richtige ist.