Порядок работы с пакетами для ОС “Эльбрус”

deploy zfs МЦСТ dkms e2k Эльбрус

Deb-пакеты dkms, spl-dkms, zfs-dkms в дистрибутив не включены:

По умолчанию не поддерживается функционал dkms, позволяющий запаковывать

модули в deb и dsc (dkms mkdeb, dkms mkdsc). 

Такая возможность используется только в debian. Неизвестно, нужна ли такая возможность в ОС Эльбрус, используется не во всех дистрибутивах.

Т.е. сейчас собранных запрошенных в http://bugs.mcst.ru/bugzilla/show_bug.cgi?id=3459 .deb пакетов нет, нужно собирать.

Ниже привожу заметки, которые были сделаны при использовании dkms с ОС Эльбрус:

(Заметки по поводу установки zfs на машину.)

Порядок установки пакетов.

dkms-2.3 spl-0.6.5.9 zfs-0.6.5.9 spl-dkms-0.6.5.9 zfs-dkms-0.6.5.9 spl-modules-0.6.5.9 zfs-modules-0.6.5.9 dkms-2.3 - фреймворк для сборки модулей ядра Linux spl-0.6.5.9 и zfs-0.6.5.9 - только утилиты spl-dkms-0.6.5.9 и zfs-dkms-0.6.5.9 - исходники для нативной пересборки модулей spl-modules-0.6.5.9 и zfs-modules-0.6.5.9 - модули, собранные в кросс-системе


Инструкция по сборке модулей ядра при помощи dkms.

Структура исходников.

Пакет с исходным кодом модуля (совокупности модулей) должен лежать в директории

/usr/src/<название пакета>-<версия пакета>. Например, /usr/src/hello-0.1

В директории с исходниками должен быть dkms.conf, а также Makefile (или

configure).

Создание конфигурационного файла dkms.conf.

В конфигурационном файле указывается название и версия пакета, список

собираемых модулей, их расположение.

Пример dkms.conf для пакета hello-dkms

(http://znich.lab.sun.mcst.ru/cgit/cgit.cgi/control.git/tree/packages/hello-dkms-0.1)

PACKAGE_NAME="hello"
PACKAGE_VERSION="0.1"
MAKE[0]="make all"
BUILT_MODULE_NAME[0]="hello"
DEST_MODULE_LOCATION[0]="/extra/hello"
AUTOINSTALL="yes"

Примечания.

  • Если требуется указать путь до модуля в исходниках, следует использовать

BUILT_MODULE_LOCATION. Например, BUILT_MODULE_LOCATION[0]=”module/hello”

  • Если перед сборкой модуля требуется выполнить configure, в dkms.conf следует

указать PRE_BUILD=”configure”

  • После сборки можно выполнить скрипт, если указать POST_BUILD=”<название

скрипта>”. Скрипт должен быть добавлен в директорию с исходниками.

  • AUTOINSTALL=”yes” указывается, если модуль должен собираться автоматически.

  • DEST_MODULE_LOCATION - путь относительно /lib/modules/<версия ядра>, по

которому следует установить модуль.

Если lsb_release -i -s выводит Debian, DEST_MODULE_LOCATION игнорируется, и все

модули будут установлены в /lib/modules/<версия ядра>/updates/dkms.

Пример использования данных возможностей: сценарии сборки spl-dkms-0.6.5.9,

zfs-dkms-0.6.5.9:

http://znich.lab.sun.mcst.ru/cgit/cgit.cgi/control.git/tree/packages/spl-dkms-0.6.5.9

http://znich.lab.sun.mcst.ru/cgit/cgit.cgi/control.git/tree/packages/zfs-dkms-0.6.5.9

Сборка и установка модулей для текущей версии ядра.

# dkms add <название пакета>/<версия пакета>
# dkms build <название пакета>/<версия пакета>
# dkms install <название пакета>/<версия пакета>
# modprobe <название модуля>

Чтобы убедиться, что модуль действительно загружен, нужно выполнить:

$ lsmod
$ dmesg  |  tail

Удаление модулей.

Если модулей в пакете несколько, следует выполнить rmmod для каждого модуля.

# rmmod <название модуля>
# dkms remove <название пакета>/<версия пакета> --all

Проблемы

1) Не работает автоматическая сборка модулей при установке нового ядра.

Варианты решения:

  • Поставить на автозапуск скрипт /usr/lib/dkms/dkms_autoinstaller (Так сделано для RedHat) Скрипт выполняет команду dkms autoinstall.
  • В dkms есть скрипты /etc/kernel/postinst.d/dkms и /etc/kernel/prerm.d/dkms. Первый должен после установки ядра дергать dkms_autoinstaller, второй выполняет dkms remove для всех модулей удаляемого ядра. Не поняла, как эти скрипты должны запускаться. Пока что модули можно пересобирать только вручную, выполнив dkms autoinstall. При добавлении пакетов, использующих dkms, требуется предусматривать необходимость вызова триггеров для пересборки модулей. Нужно обрабатывать ситуацию, когда версия ядра не совпадает с версией ядра, с которой были собраны модули. Примеры программных продуктов, для которых это сделано - spl и zfs. В dkms править ничего не нужно.

2) В ОС Эльбрус команда lsb_release -i -s выводит Debian, при этом параметр dkms.conf DEST_MODULE_LOCATION игнорируется. Все модули будут установлены в /lib/modules/<версия ядра>/updates/dkms. Можно добавить отдельные правила для ОС Эльбрус. Это позволит складывать модули в другие директории. Модулей, использующих возможности dkms, не так уж и много. Поэтому можно устанавливать их и по пути /lib/modules/<версия ядра>/updates/dkms, где они все будут собраны в одном месте.

3) По умолчанию не поддерживается функционал dkms, позволяющий запаковывать модули в deb и dsc (dkms mkdeb, dkms mkdsc). Такая возможность используется только в debian. Неизвестно, нужна ли такая возможность в ОС Эльбрус - используется не во всех дистрибутивах.

4) Пересборка модулей может занимать длительное время (Особенно если требуется выполнение configure) Пересборка модулей должна выполняться только в тех случаях, когда модули были собраны для другой версии ядра. Предусматривается для отдельно взятых пакетов (см. п.1)