Автор Тема: Сборка модуля ядра для поддержки DRBD (кластер)  (Прочитано 3659 раз)

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
Доброго времени суток!

Есть пара серверов под управлением Альт Линукс СПТ 6.0:
[root@node2 ~]# uname -a
Linux node2.localdomain 2.6.32-el-smp-alt42.M60C.1 #1 SMP Tue Jul 2 16:14:14 UTC 2013 x86_64 GNU/Linux

 На этой паре планируется развертывание кластера из двух нод. На нем же должна функционировать DRBD.

В Альт Линукс СПТ 6 есть следующие модулю связанные с drbd:
[root@node2 ~]# apt-cache search drbd
drbd83-heartbeat - Heartbeat resource agent for DRBD
drbd83-tools - Distributed Redundant Block Device utilities
drbd83-udev - udev integration scripts for DRBD
kernel-source-drbd83-8.3.8 - Kernel source for DRBD
kernel-image-std-def - The Linux kernel (the core of the Linux operating system)
kernel-image-un-def - The Linux kernel (the core of the Linux operating system)
kernel-modules-drbd83-hpc-skif - Linux drbd83 kernel modules for DRBD.
kernel-modules-drbd83-ovz-el - Linux drbd83 kernel modules for DRBD.
kernel-modules-drbd83-ovz-smp - Linux drbd83 kernel modules for DRBD.
kernel-modules-drbd83-xen-dom0 - Linux drbd83 kernel modules for DRBD.
linux-ha-common - The basic directory layout for Linux-HA project apps

На ноды установлены пакеты drbd83-tools и (в последствии) kernel-source-drbd83-8.3.8. При инициализации функционирования DRBD возникает ошибка:
[root@node1 ~] drbdadm -- --overwrite-data-of-peer primary all
Could not stat("/proc/drbd"): No such file or directory
do you need to load the module?
try: modprobe drbd
Command 'drbdsetup 0 primary --overwrite-data-of-peer' terminated with exit code 20
drbdadm primary VM_STORAGE_1: exited with code 20

Тоже возникает при, если просто стартавать сервис:
[root@node1 ~]# service drbd start
Starting DRBD resources: Can not load the drbd module.

Налицо отсутствие модуля под данное ядро. Т.к. в списке модулей для drbd под мое ядро модуля нет, то захотелось этот модуль собрать. Был поставлен пакет kernel-source-drbd83-8.3.8. В /usr/src/kernel/sources появился файлик kernel-source-drbd83-8.3.8.tar.bz2. После распаковки запускаем  make clean, make. Получаем вагон ошибок:
[root@node1 kernel-source-drbd83-8.3.8]# make

    Calling toplevel makefile of kernel source tree, which I believe is in
    KDIR=/lib/modules/2.6.32-el-smp-alt42.M60C.1/build

set -e; exec > drbd_buildtag.c.new; \
echo -e "/* automatically generated. DO NOT EDIT. */"; \
echo -e "#include <linux/drbd.h>"; \
echo -e "const char *drbd_buildtag(void)\n{"; \
echo -e "\treturn \"Versioh: \""; \
echo -e "\t\t\" build by $USER@$HOSTNAME, `date "+%F %T"`\";\n}"; \
mv --force drbd_buildtag.c.new drbd_buildtag.c
test -f ../scripts/adjust_drbd_config_h.sh && \
KDIR=/lib/modules/2.6.32-el-smp-alt42.M60C.1/build O= /bin/bash ../scripts/adjust_drbd_config_h.sh
make: [kbuild] Ошибка 1 (игнорирована)
make -C /lib/modules/2.6.32-el-smp-alt42.M60C.1/build   SUBDIRS=/usr/src/kernel/sources/kernel-source-drbd83-8.3.8  modules
make[1]: Entering directory `/usr/src/linux-2.6.32-el-smp-alt42.M60C.1'
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_buildtag.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_bitmap.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_proc.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_worker.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_receiver.o
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_receiver.c:3031:1: warning: "min_not_zero" redefined
In file included from /usr/src/linux-2.6.32-el-smp-alt42.M60C.1/arch/x86/include/asm/percpu.h:45,
                 from /usr/src/linux-2.6.32-el-smp-alt42.M60C.1/arch/x86/include/asm/current.h:5,
                 from /usr/src/linux-2.6.32-el-smp-alt42.M60C.1/arch/x86/include/asm/processor.h:15,
                 from include/linux/prefetch.h:14,
                 from include/linux/list.h:7,
                 from include/linux/connector.h:81,
                 from /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/linux/drbd.h:28,
                 from <command-line>:0:
include/linux/kernel.h:850:1: warning: this is the location of the previous definition
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_req.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_actlog.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/lru_cache.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_main.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_strings.o
  CC [M]  /usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.o
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c: In function ‘drbd_setup_queue_param’:
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:716: error: implicit declaration of function ‘blk_queue_max_sectors’
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:717: error: implicit declaration of function ‘blk_queue_max_phys_segments’
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:717: error: ‘MAX_PHYS_SEGMENTS’ undeclared (first use in this function)
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:717: error: (Each undeclared identifier is reported only once
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:717: error: for each function it appears in.)
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:718: error: implicit declaration of function ‘blk_queue_max_hw_segments’
/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.c:718: error: ‘MAX_HW_SEGMENTS’ undeclared (first use in this function)
make[2]: *** [/usr/src/kernel/sources/kernel-source-drbd83-8.3.8/drbd_nl.o] Ошибка 1
make[1]: *** [_module_/usr/src/kernel/sources/kernel-source-drbd83-8.3.8] Ошибка 2
make[1]: Leaving directory `/usr/src/linux-2.6.32-el-smp-alt42.M60C.1'
make: *** [kbuild] Ошибка 2

Как мне получить этот несчастный модуль? У майтейнеров альта очевидно была подобная проблема: http://lists.altlinux.org/pipermail/sisyphus-incominger/2010-August/254402.html. Но чем это у них закончилось я так не нашел.

Прошу помочь

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
drbd включен в kernel-image-std-def. попробуйте сменить ядро на это.

Оффлайн gvy

  • alt linux team
  • ***
  • Сообщений: 1 011
    • Альт на Эльбрусе
--
Michael Shigorin | ALT Linux Team | ANNA-News | Сделано у нас | altlinux.org/эльбрус

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
> drbd включен в kernel-image-std-def. попробуйте сменить ядро на это

Я не могу этого сделать. Альт Линукс СПТ 6.0 - сертифицированный ФСТЭК России дистр. Вроде ставится именно с этим конкретным ядром.
Собственно по этому альт и приходится использовать.
С другой стороны - раз уж есть некоторое кол-во типов ядер, то модуль DRBD должен же собираться по всех этих типах.

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Я не могу этого сделать. Альт Линукс СПТ 6.0 - сертифицированный ФСТЭК России дистр.
А если установить из репозитория c6 (если в нём, конечно, есть std-def) ?

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
А если установить из репозитория c6 (если в нём, конечно, есть std-def) ?

А если еще появится задача, где будут только модули для штатного ядра - будем опять ядра переключать?

На мой взгляд правильнее допилить в штатном ядре.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 160
    • Домашняя страница
Я не могу этого сделать. Альт Линукс СПТ 6.0 - сертифицированный ФСТЭК России дистр. Вроде ставится именно с этим конкретным ядром.
Там на диске (после первого инспекционного контроля) есть kernel-image-std-def-3.0.26-alt0.M60P.1.
Установите его: update-kernel -t std-def
Андрей Черепанов (cas@)

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
А если еще появится задача, где будут только модули для штатного ядра - будем опять ядра переключать?
Ну так можно сравнить, уверен, в std-def их никак не меньше.

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
Там на диске (после первого инспекционного контроля) есть kernel-image-std-def-3.0.26-alt0.M60P.1.
Установите его:
Код: [Выделить]

update-kernel -t std-def

Ситуация какова. На диске может ядро и есть, но ваша ТП меня заверила, что:
"Уточнил -- сертифицировано только el-smp, _не_ std-def.
Сборка _модулем_ сертификат не ломает."

Все равно собирать модуль под штатное ядро. Кто сможет помочь это сделать?
« Последнее редактирование: 08.07.2014 18:45:46 от alex123 »

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
Вообще очень странно, что drbd83 не собрано под el-smp.

по идее это не очень сложно сделать, попросите тех. поддержку помочь в сборке.

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
по идее это не очень сложно сделать, попросите тех. поддержку помочь в сборке.

по идее все не сложно, если в этом варишься.
ТП альта наверно сможет помочь, если захочет.

Оффлайн alex123

  • Участник
  • *
  • Сообщений: 6
Вообщем пересобрал я альтовский drbd-8.3.16 под СПТ 6.0. Соответственно получился и пакет kernel-source-drbd. Он легко собрался и дал вожделенный drbd.ko

Все поставилось и завелось. Насколько все будет нормально работать пока сказать не могу.

Кстати, есть ли у кого альтовская ресурсная рпм-ка для свежих ганети типа ganeti-2.10 или ganeti-2.11?

Оффлайн ksa

  • Модератор глобальный
  • *****
  • Сообщений: 9 049
Кстати, есть ли у кого альтовская ресурсная рпм-ка для свежих ганети типа ganeti-2.10 или ganeti-2.11?
Маловероятно, но можно попробовать пересобрать имеющийся в сизифе srpm, подкрутив в спеке версию и скачав исходники http://downloads.ganeti.org/releases/. Ссылка на инструкцию по сборке/пересборке (в качестве отправной точки) есть чуть ниже.