У меня есть сервер 18.04 с пользовательскими модулями ядра ZFS (0.8.x против предоставленного 0.7.x).
Периодически, когда я обновляю ядро, мне приходится перекомпилировать модуль ядра ZFS, который в противном случае автоматически отключился бы.
В прошлый раз мне пришлось немного повозиться, чтобы сделать это, поэтому на этот раз я хотел бы знать, какие правильные шаги были предприняты заранее.
Я думаю
Однако, поскольку модуль ядра необходим для доступа к некоторым файловым системам, которые в данный момент смонтированы, каков следующий шаг? просто перезагрузите компьютер, чтобы смонтировать новый модуль?
У меня также есть возможность включить службу автоматического импорта, см. https://unix.stackexchange.com/questions/338260/zfs -mounting только-один-из-моих бассейнов-на-ботинка
Если вы обновляете модуль для работающего в данный момент ядра, вам необходимо прекратить использование этого модуля (то есть: umount
все файловые системы), rmmod zfs
, иметь доступный новый модуль и modprobe zfs
для его загрузки снова. Перезагрузка обычно проще, но вы можете найти пример в другом месте, чтобы помочь выполнить это, когда система работает, при желании.
# # Stop using the module
# rmmod zfs
# modprobe zfs
Если вы хотите автоматически скомпилировать и установить обновления для модуль каждый раз, когда вы обновляете ядро, вас может заинтересовать DKMS . Существует большое Руководство по упаковке DKMS , в котором это подробно обсуждается.
Идея состоит в том, что у вас есть модуль или какое-то изменение в ядре, которое вы хотите применить при каждом обновлении ядра. Вы можете автоматизировать компиляцию и установку модулей, когда apt
обновляет используемое ядро. Вы можете найти хорошие примеры этого с VirtualBox, а также с некоторыми драйверами NVIDIA DKMS .
Другой хороший пример, который показывает, как это настроить, - patjak's bcwc_pcie . Процедура, чтобы модуль bcwc_pcie
или facetimehd
был скомпилирован и доступен для новых ядер, документирован :
Предполагается, что вы уже выполнили шаги пакета Debian / Ubuntu. Вам нужно будет проверить dkms.conf
, что имя модуля facetimehd
и номер версии 0.1
правильные, и либо обновить dkms.conf
, либо настроить инструкции, в которых используются -m
и -v
.
# apt install debhelper dkms
# dpkg -r bcwc-pcie
# mkdir /usr/src/facetimehd-0.1
$ cd bcwc_pcie
# cp -r * /usr/src/facetimehd-0.1/
# cd /usr/src/facetimehd-0.1/
# rm backup-*tgz bcwc-pcie_*deb
# make clean
# dkms add -m facetimehd -v 0.1
# dkms build -m facetimehd -v 0.1
# dkms mkdsc -m facetimehd -v 0.1 --source-only
# dkms mkdeb -m facetimehd -v 0.1 --source-only
# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
# rm -r /var/lib/dkms/facetimehd/
# dpkg -i /root/facetimehd-dkms_0.1_all.deb
Если у вас возникли проблемы, прочитайте это руководство по созданию пакета DKMS: http : //www.xkyle.com/building-linux-packages-for-kernel-drivers/
Единственная часть, отсутствующая в этом примере bcwc_pcie
, состоит в том, что эта кодовая база не обновляется, пока модуль кода у Ваша компиляция может со временем измениться. Это легче всего сделать, если вы можете найти последнюю загрузку по сравнению с конкретными версиями источника, который вы пытаетесь скомпилировать.
Мы можем взглянуть на dkms.conf
в документе DKMS Community Doc :
$ 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
Вы также можете добавить опции для вызова сценариев до или после сборки или установки, предоставить дополнительные (условные) команды make, команды patch и т. д. Файл dkms.conf фактически поставляется в виде сценария оболочки, поэтому при необходимости можно выполнить немало хитростей. Эти и другие параметры описаны в разделе dkms.conf в man dkms.
и Страница man :
PRE_BUILD = Имя сценария, который должен быть запущен перед выполнением сборки. Путь должен быть указан относительно корневого каталога вашего источника.
Вы можете создать каталог, содержащий скрипт, который загружает и извлекает последнюю версию ZFS при подготовке к сборке. Это поможет автоматизировать процесс. Вы можете использовать git
или скачать и извлечь источник latest
. Вот пример того, как определить последний URL загрузки для ZFS:
$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz Вы упомянули усложнение с отключенными сервисами systemd
. Решает ли установка вашей собственной установки ZFS dkms
эту проблему? У вас установлены пакеты, основанные на фактическом пакете zfs-dkms
, который может вызвать конфликт? По крайней мере, вы можете подключиться к POST_INSTALL
и запустить systemctl enable
, чтобы разрешить отключение любых служб.
Как уже говорилось, ZFS является довольно популярной файловой системой и должна иметь пакет DKMS, уже доступный. Кажется, что это правда, и что zfs-dkms
доступно во вселенной . Вы можете посмотреть на особенности этого пакета и посмотреть, подходит ли уже этот пакет zfs-dkms
.
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz
Вы упомянули усложнение с отключенными сервисами systemd
. Решает ли установка вашей собственной установки ZFS dkms
эту проблему? У вас установлены пакеты, основанные на фактическом пакете zfs-dkms
, который может вызвать конфликт? По крайней мере, вы можете подключиться к POST_INSTALL
и запустить systemctl enable
, чтобы разрешить отключение любых служб.
Как уже говорилось, ZFS является довольно популярной файловой системой и должна иметь пакет DKMS, уже доступный. Кажется, что это правда, и что zfs-dkms
доступно во вселенной . Вы можете посмотреть на особенности этого пакета и посмотреть, подходит ли уже этот пакет zfs-dkms
.