Wie lautet das vollständige Verfahren zum Aktualisieren eines aktuell verwendeten Kernelmoduls?

Wie lautet das vollständige Verfahren zum Aktualisieren eines aktuell verwendeten Kernelmoduls?

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

  1. Aktualisieren des Kernels und der Kernelquellen
  2. Herunterladen der Modulquelle und Kompilieren des Moduls
  3. 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 umountaller Dateisysteme) beenden, rmmod zfsdas neue Modul verfügbar machen und modprobe zfses 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.

  1. # # Stop using the module
  2. # rmmod zfs
  3. # 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 aptder 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 facetimehdmehrere 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.confob der Modulname facetimehdund die Versionsnummer 0.1korrekt sind, und entweder aktualisieren dkms.confoder die Anweisungen anpassen, bei denen -mund -vverwendet 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_pcieBeispiel 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.confanschauenDKMS 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 gitdie 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 systemddeaktivierten Diensten. dkmsBehebt das Einrichten Ihres eigenen ZFS-Setups dieses Problem? Haben Sie Pakete installiert, die auf das eigentliche zfs-dkmsPaket angewiesen sind, was zu Konflikten führen würde? Zumindest könnten Sie sich einklinken POST_INSTALLund 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-dkmsist verfügbar inUniversum. Sie können sich die Einzelheiten dieses Pakets ansehen und prüfen, ob das bereits verfügbare Paket zfs-dkmsfür Sie das Richtige ist.

verwandte Informationen