Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1082 - Кросс-пересборка модулей под другую версию ядра   Make a simular bug
Summary: Кросс-пересборка модулей под другую версию ядра
Status: CLOSED FIXED
Alias: None
Product: CIFS@Etersoft
Classification: Продукты (Products)
Component: упаковка, сборка, интеграция (show other bugs)
Version: не указана
Hardware: PC Linux
: P5 enhancement
Target Milestone: ---
Assignee: BUGS@Etersoft
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 777
  Show dependency treegraph
 
In work:
Reported: 2008-01-20 15:09 MSK by megov
Modified: 2009-12-02 20:01 MSK (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description megov 2008-01-20 15:09:48 MSK
Ситуация выгдядит следующим образом: есть пересборка (respin) Fedora Core 8 c обновлениями и авто-установкой. В пост-установочных скриптах (kickstart) происходит создание административной установки wine и пересборка модулей hasp и linux-cifs. Однако версии ядра на котором проводится установка (т.е. того которое включено в install image) не совпадает с версией ядра которое будет рабочим на системе после установки. Как правило рабочее ядро новее и используется то которое приезжает с обновлениями. Поэтому логика определения версии ядра в /usr/src/aksparln/build.sh и /usr/src/linux-cifs/buildmodule.sh отрабатывает неверно. Для таких случаем определение версии ядра должно быть переопределяемым. В моем случае по окончании установки в /boot будет единственное рабочее ядро. Предлагаются патчи для возможности кросс-пересборки модулей под версию ядра, отличной от текущей выполняемой.

>--- /usr/src/aksparlnx/build.sh 2008-01-13 20:24:09.000000000 +0300
>+++ /root/init-setup/build.sh-sgc-patched       2008-01-13 20:25:22.000000000 +0300
>@@ -38,9 +38,13 @@
>        done
> fi
>-
>-VERSION=$(uname -r)
>-MAJVERSION=$(uname -r | cut -f2 -d.)
>+if [ -z $KERNELVERSION ]; then
>+    VERSION=$(uname -r)
>+    MAJVERSION=$(uname -r | cut -f2 -d.)
>+else 
>+    VERSION=$KERNELVERSION
>+    MAJVERSION=$(echo -ne $KERNELVERSION | cut -f2 -d.)
>+fi
> 
> # source and destination directories can be inherited from the environment
 

>--- /usr/src/linux-cifs/buildmodule.sh  2007-12-28 23:49:44.000000000 +0300
>+++ /root/init-setup/buildmodule.sh-sgc-patched 2008-01-13 19:58:55.000000000 +0300
>@@ -7,7 +7,8 @@
> 
> MODULENAME=cifs.ko
> BUILDDIR=/usr/src/linux-cifs
>-KERNELVERSION=$(uname -r)
>+
>+[ -z $KERNELVERSION ] && KERNELVERSION=$(uname -r)
> 
> # SMP build
> [ -z "$RPM_BUILD_NCPUS" ] && RPM_BUILD_NCPUS=`/usr/bin/getconf _NPROCESSORS_ONLN`
>@@ -20,7 +21,7 @@
> fi
> if [ -z "$INSTALL_MOD_PATH" ]; then
>        #INSTALL_MOD_PATH=/lib/modules/$KERNELVERSION/kernel/extra
>-       INSTALL_MOD_PATH=/lib/modules/linux-cifs
>+       INSTALL_MOD_PATH=/lib/modules/linux-cifs/$KERNELVERSION
> fi
> 
> echo 

>--- /etc/init.d/linux-cifs      2007-10-12 21:16:36.000000000 +0400
>+++ /root/init-setup/linux-cifs.sgc-patched     2007-10-21 17:53:33.000000000 +0400
>@@ -186,6 +187,8 @@
>         ;;
>     build)
>         cd /usr/src/linux-cifs
>+        KERNELVERSION=`ls /boot/vmlinuz-* | sed -n -e "s/^\S\{1\,\}-\(\S\{1\,\}\)-\{1\}\(\S\{1\,\}\)$/\1-\2/pg" `
>+        export KERNELVERSION
>        sh buildmodule.sh
>         ;;
>     status)
>

--- /etc/init.d/haspd   2007-12-04 17:19:53.000000000 +0300
+++ /root/init-setup/haspd-sgc-patched  2008-01-14 14:11:44.000000000 +0300
>@@ -286,6 +286,8 @@
>         # remove manual built module
>        rm -f $MANMODULEPATH
>         cd /usr/src/aksparlnx
>+        KERNELVERSION=`ls /boot/vmlinuz-* | sed -n -e "s/^\S\{1\,\}-\(\S\{1\,\}\)-\{1\}\(\S\{1\,\}\)$/\1-\2/pg" `
>+        export KERNELVERSION
>        MODDEST=`dirname $MANMODULEPATH` sh build.sh -i
>         ;;
>     status)
>
Comment 1 Vitaly Lipatov 2008-01-20 15:40:02 MSK
Укажите пожалуйста пример команд, как вы собираетесь пользоваться вводимой переменной KERNELVERSION и кто её будет определять. Кстати, у нас есть обработка KERNSRC, позволяющая указать путь к исходникам.
Comment 2 megov 2008-01-20 17:57:37 MSK
В приложенных патчах на build.sh и buildmodule.sh если не установлена $KERNELVERSION то версия определяется вызовом uname - это текущее поведение и оно остается таким по умолчанию. Однако можно переопределть $KERNELVERSION. В примерах патчей на linux-cifs и haspd переопределение выполняется анализом имени файла /boot/vmlinuz-*. Это было написано на скорую руку и не очень правильно и корректно в случае наличия нескольких ядер. Можно доработать build.sh и buildmodule.sh так, чтобы они принимали необязательный аргумент версии ядра и не использовали $KERNELVERSION. Т.е. фактически надо добавить опциональный параметр версии ядра к вызову service [haspd | linux-cifs] build в инит-скриптах. Кто и как будет добавлять этот параметр - вопрос отдельный, у меня например он будет вызываться из kickstart скрипта, который уже знает версию рабочего ядра, устанавливаемую на машину.
Comment 3 Vitaly Lipatov 2008-02-29 23:41:15 MSK
Возможно нужно двигаться в сторону использования dkms?
У нас есть пакеты для dkms.
Comment 4 Vitaly Lipatov 2008-10-28 12:19:21 MSK
В новых версиях KERNELVERSION задействована