[d-kernel] RFC: вытесняющий релиз для kernel-modules
Konstantin A. Lepikhov
lakostis на anti-leasure.ru
Вс Май 22 17:13:12 MSD 2005
Hi!
В связи с происходящими в последнее время конфликтами по релизам модулей
для ядер, есть мысль как это можно разрулить - на этапе сборки модуля
ставить module_release вида @kreleasebuild@, где
kreleasebuild является строкой вида %release.%kcode.%krelease. Что это
даст? Во-первых, теперь релиз будет вытесняющим, т.е. при смене
kernel-version версия модуля будет по-любому вытеснять предущую, т.к.
будет иметь KERNELCODE явно больше, чем предыдущая версия ядра. Во-вторых,
релиз ядра будет влиять только на локальные сборки модулей в пределах
одного KERNELCODE. Конечно, это не убережет от ситуации вида "кто-то
собрал старый модуль с новым .spec", но это уже будут локальные проблемы
такого пользователя. %kcode с точки зрения buildmodules может выглядеть
так:
--- buildmodules.orig 2005-02-12 13:24:18 +0300
+++ buildmodules 2005-05-22 16:59:37 +0400
@@ -14,6 +14,7 @@ KERNEL=`find out/RPMS/ -type f -name "ke
RELEASE=`rpm -q --qf "%{RELEASE}\n" -p $KERNEL`
VERSION=`rpm -q --qf "%{VERSION}\n" -p $KERNEL`
BUILDRELEASE=`echo $RELEASE|sed -e "s,alt,,"`
+KERNELCODE=`kernelversion_code $VERSION`
buildspec()
{
@@ -25,7 +26,7 @@ buildspec()
specout="`dirname $spec`/`echo $real|sed -e "s/\.spec/-$TYPE.spec/"`"
realspec=`basename $specout`
cp -f $spec $specout
- subst "s, на kversion@,$VERSION,;s, на krelease@,$RELEASE,;s, на kreleasebuild@,$BUILDRELEASE,;s, на kflavour@,$TYPE," $specout
+ subst "s, на kversion@,$VERSION,;s, на krelease@,$RELEASE,;s, на kreleasebuild@,$KERNELCODE.$BUILDRELEASE,;s, на kflavour@,$TYPE," $specout
PACKAGES=`rpmquery -q --qf="%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\n" --specfile $specout|sed "s,i686,i586,"`
NEEDUPDATE=0
for package in $PACKAGES ;do
а скриптик для получения kcode будет выглядеть вот так:
#!/bin/sh
# Small script to get the kernel version code
# Made by LAKostis for ALTLinux kernel-build-tools package.
# Based on the kernelversion_major script
# from modutils package made by Dmitry V. Levin.
pick1() {
eval 'echo $'"$pick_index"
}
pick() {
local OLD_IFS="$IFS"
local delimiter="$1"
shift
pick_index="$1"
shift
IFS=" "$delimiter
pick1 $*
IFS="$OLD_IFS"
unset pick_index
}
release="$1"
[ ! $release ] && release=$(uname -r)
kver=$(pick - 1 $release)
version=$(pick . 1 $kver)
patchlevel=$(pick . 2 $kver)
sublevel=$(pick . 3 $kver)
# from kernel Makefile
echo `expr $version \\* 65536 + $patchlevel \\* 256 + $sublevel`
Данный скрипт можно положить либо в modutils, но мне кажется лучше в
kernel-build-tools, поскольку нужен он только сборщикам, обычные
пользователи могут этот CODE из хидеров вытащить.
--
WBR, Konstantin chat with ==>ICQ: 109916175
Lepikhov, speak to ==>JID: lakostis на jabber.org
aka L.A. Kostis write to ==>mailto:lakostis на pisem.net.nospam
...The information is like the bank... (c) EC8OR
Подробная информация о списке рассылки devel-kernel