Budowa modułów--propozycja

Tomasz Kłoczko kloczek w rudy.mif.pg.gda.pl
Wto, 7 Sie 2001, 15:54:36 CEST


On Tue, 31 Jul 2001, Paweł Sakowski wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Do rozwiązania AFAIR są dwie kwestie: [1]budowanie modułów dla 2.2 i 2.4 z
> różnymi zestawami kernel-headers i [2]automatyzacja budowy po
> przebudowaniu jądra. Oto moje propozycje na ten temat:
> 
> - ----
> 
> [1] Wymyśliłem, żeby do speców od modułów dawać na początku:
> 
> %if %{?kernel_dir:0}%{!?kernel_dir:1}
> %define		kernel_dir	/usr/src/linux
> %endif
> 
> %define		_kernel_ver	_kernel_ver %(grep UTS_RELEASE
> %{kernel_dir}/include/linux/version.h 2>/dev/null | cut -d'"' -f2)
> 
> i odpowiedni kawałek w build, żeby budować z %{kernel_dir}, nie
> /usr/src/linux (chciałbym zauważyć, że jeśli %{kernel_dir} jest
> niezdefiniowany, budowanie przebiega jak dotychczas). Wtedy na builderach
> możnaby (po napisaniu odpowiedniego kawałka kodu) po zbudowaniu kernela
> odpalać coś w stylu:
> 
> ./builder -[...] --opts "define kernel_dir\ /usr/src/linux-2.4.7" \
> alsa-driver-up.spec
> 
> Pożądaną wersję jądra możnaby przekazywać jako opcjonalny parametr (obok
> X-Spec) do buildera, który rozwijałby ją do opcji budowania jak powyżej.
> 
> Do tego jeszcze na builderach trzebaby trzymać dwa zestawy kernel-headers,
> ale z tym nie ma dużego problemu: rpm -i kernel-headers-2.2.19-16;rpm -i
> kernel-headers-2.4.7-4 --force  i już.

OK. Propozycja tylko żeby może nazwać to makro nieco inaczej żeby nie 
kojarzyło się z kernelem co ze źródłami kernela (_kernelsrcdir albo jakoś
tak). To makro możesz już wrzucić do naszego macros.

> - ----
> 
> [2] Po zagłębieniu się w organizację pracy builderów doszedłem do wniosku,
> że nie tak łatwo byłoby zautomatyzować budowę modułów po jądrze.
> Wymagałoby to:
> 
> - - automatycznej instalacji nowo zbudowanych kernel-headers. Pytanie
> tylko jak? sudo? rpm2cpio|cpio -i? Oba rozwiązania nieeleganckie.
> 
> - - rekurencyjnego wywoływania buildera w przypadku ${BSPEC} = kernel.spec.
> To jest już prostsze, ale gdzieś trzeba trzymać listę speców modułów.
> 
> Wydaje mi się, że można dla rozwiązania tego zadania pokusić się o
> półautomatyzację, tzn stworzyć skrypt SPECS/build_kernmod_request o
> treści mniej więcej:
> 
> #!/bin/sh
> DIR="`rpm --eval '%{_specdir}'`"
> VER=$1; shift
> ARCHS="$*"
> build_mod()
> {
> 	echo "Requesting build of $1"
> 	$DIR/buildrpm_request --kernver=$VER $1.spec $ARCHS
> }
> build_mod alsa-driver-up
> build_mod alsa-driver-smp
> ...
> 
> A następnie uprzejmie poprosić administratorów builderów o wykonywanie
> tego skryptu po instalacji na builderach nowych kernel-headers. Jeśliby
> przyjąć, że ten skrypt byłby użytkowany _tylko_ przez administratorów
> builderów, to na jego górę (dla większej automatyzacji) możnaby wstawić
> rpm --root=... -i kernel-headers-...rpm.

To jakie pakiety powinny ulec przebudowaniu wychwycić jest prosto (grep po 
makrach do wersjinowanai kernela. Spece zawierające %{_kernel_ver} powinny 
pójść do przebudowania. Sygnał o tym może iść choćby z pld-builder 
zwrotnie jako ostrzeżenie. Docelowo to samo źródło sysgnału moze zostać 
wykorzystane do automatycznego podbicia wychwyconych pakietów i wysłania 
zleceń ich przebudowania choć na razie zostawiłbym tylko wysyłanie w 
buildlogu wrzucenie zwrotnie informacji o przebudowaniu kernela. Przy 
automatyzacji (na poPGPowane zlecenia) instalacji/upgrade pakietów na 
builderach moze być wykorzystane wychwycenie instalacji nowej wersji 
kernel-headers do tego żeby dodatkowo automatycnie podbić rel i wysłać 
zlecenia przebudowania kilku pakietów zawierających moduły.

Tak czy inaczjezbadAĆ JESZCZE trzeba czy takie moduły jak svga czy lirc są 
zależne od SMP/UP.

> - ----
> 
> Dodałbym jeszcze, że po wprowadzeniu "znakowania" modułów (@%_kernel_ver,

Z znakiem "@" jest pewien mały kłopot. Nie może być on używany w eykietach 
cvs-a, a nazwa, wersja i rel pakeitu są uzywane przy konstuowaniu 
etykiety. To trzeba bęedzie jeszcze jakioś obejść (albo inny znak albo 
przy konstruowaniu nazwy etykiety @ zastepować vczymś innym co bezie 
akceptowane przez cvs).

> Conflicts: kernel != %_kernel_ver), wykrywanie niespójności zasobów staje
> się łatwiejsze. Programy typu apt powinny (chyba, bo ich nie znam za
> bardzo) alarmować w przypadku natrafienia na niespójność.

Tak. W tym wypadku co prawda robi to wuch ale to załątwia sprawę.

kloczek
-- 
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*



Więcej informacji o liście dyskusyjnej pld-devel-pl