jeden wielki kernel.spec vs wiele kernel-*
Tomasz Kłoczko
kloczek w rudy.mif.pg.gda.pl
Czw, 22 Maj 2003, 01:32:06 CEST
On Thu, 22 May 2003, Jakub Bogusz wrote:
> Jeszcze trochę się zastanawiałem nad $Subject i:
>
> Jak na razie padła jedna większa wada obecnego rozwiązania: konieczność
> przebudowania wszystkich kernel-* przy zmianach w podstawowym kernelu.
>
> Jeśli to jest/stanie się naprawdę dokuczliwe, to można to spróbować
> ograniczyć przez podzielenie podzielenie release na dwie części (np.
> major.minor), gdzie:
> - major byłoby używane w nazwie katalogu z modułami/plików vmlinuz
> i initrd; tylko ta część występowałaby w %{_kernel_ver}
> i w zależnościach kernel-*[1]; byłoby zmieniane przy naruszaniu
> binarnej kompatybilności (w razie wątpliwości: przy dodawaniu nowej
> funkcjonalności, wymianie podsystemów itp.), zmiana oznaczałaby
> - minor byłoby zmieniane przy poprawkach błędów oraz security nie
> ingerujących w ABI
Przypominałoby mi to nieco jazdę na rowerze z kijkiem w ręce w taki sposób
że jedna reką trzymasz kierownicę, a drugą ręką machasz w sposób
niekontrolowany w okolicach szprych koła :)
Nie dość że jedna ręka to mało do kierowania (tylko w jednym etapie byłoby
to spójne) to dodatkowo w międzyczaie przy machaniu kijem w okolicach
szprych mamy drugie zargożenie wywrotką i rozjechaniem spójnosci w
sytaicji kiedy nagle by się zokazało że komuś coś nie chodzi, a już
mielibyśmy podzielony kernel wynikowy na grupu z modułami.
[..]
> Wady jednego wielkiego kernel.spec ze wszystkim zamiast kernel-*:
> - koszmarne prowadzenie takiej kobyły (już teraz jest to ciężkie...
> ostatnio muszę trochę grzebać w 2.4.20 i coś o tym wiem)
> łączenie wielu łat w mniej sprawiłoby tylko, że prowadzenie samych łat
> stałoby się dodatkowym koszmarem.
> Czy są chętni do rozwijania tak zrobionego kernela? Żeby potem nie było
> "dlaczego nikt mi nie chce pomagać przy kernelu"...
Na razie nie czuję sie przekonany do tego choć widzę nie tylko negatywy
tego podejścia.
Powód jest prosty. Wprowadzienie po kilka patchy do kolejnej wwersji
kernela i zwiazne z tym komplikacje to pikuś w porówniu z potejcjalnie
rosnącym zbiorem kernl-* produkowancyh z poza kernel.spec.
I jedno i drugie jest pracochłonne. Zakładająć że przez najblizszy czas
kerneli wychodzić będzie sporo koniczność przebudowywania wszytkich
innych pakietów produkujących kernel-*, podbijania rel, pilnowanie
etykietoniania (jeszcza na pewno przez jakis czas) dość słabo nastraja do
optymistcznego podejcia tego. Wolę bawić się z jedna paczka źródłową.
O syndomie obecnego ra/u/s już nie wspomne.
> - konieczność przebudowania tej kobyły przy zmianie każdego składnika
> (teraz wystarczy tylko _jeden_ _mały_ pakiet)
Jednej kobyły. Po pzrebudowaniu tejze kobyły nei musiosz pilnować momentu
keidy mozęsz przenieść wszystkei kernel-* z ready do drzewka podstawowego.
Jest tu spore zagrozenei że cos się jeszcze rozjedzie.
> - czas budowania (2.4.20-6 buduje się niecałe 1.5h na Athlonie 1GHz,
> >5h na B50, niecałe 4h na Alphie 500MHz[2])
> [2] no, po paru poprawkach... bodajże dwa patche kolidują i gcc 2.95
> się sypie na 3 modułach; inna sprawa, że i tak pewnie alpha się
> z tego nie zbootuje.
Z tego punktu widzenia mniej czasochłonne będzie budowanie wyłącznie z
kernel.spec bo odpada przebudowywanie pakietów które nie produkują
kernel-* w których ten kod to tylko okruch.
> A m.in. czas budowania rozstrzyga, czy w przypadku potrzeby zbudowania
> jądra różniącego się jakąś opcją czy patchem od dystrybucyjnego
> chętniej zrobi się rpmbuild -bb && sudo rpm -i czy make bzImage
> modules && sudo make modules_install (w uproszczeniu, ale wiadomo
> o co chodzi).
Jeżeli ograniczy się ilość nakładanych patchy do kilku w sumie grupując w
jednym np. obsługę zupełnie nowych urządzeń, w drugim aktualizacje juz
obecnych driverów, a w trzecim poprawki błędów w międzyczaie zebrane
robienie takich zreczy w miedzyuczaie powinno być nawet prostrze.
Proste pytanie kóre dzisiaj zadałem Marcinowi ilustrujac co robi Wojtek:
dlaczego wszytkie poprawki na symbole w modułach nie są w jednym patchu ?
> - dodatkowe utrudnienia dla używających jąder niedystrybucyjnych;
> zwłaszcza w połączeniu z poprzednim.
Jeszcze jedno.
Przypomina mie się rozmowa z Pawłem. Jej ogólny sens:
P: e100/e1000 z kernela to śmieć, a ja potrzebuję czegoś porządnego,
T: dlaczego nie włączysz i nie przykryjesz tego śmiecia w kernelu ?
P: bo nie używam kernela dystrybucyjnego.
T: dlaczego nie używasz kernerla dystrybucyjnego ?
P: bo e100/e1000 z kernela to dla mnie śmieć, a ja potrzebuję czegoś
porządnego.
Do tego dochodzi to że w sumie e100/e1000 z binarnie budowancyh pakietów w
tej konkretnej sytuacji to styrata czasu. Dlaczego ? Ano dlatego że
Pawłe nie używając dysrybucyjnego kernela bieże poprostu src.rpm-a z e100
i to sobie przebudowuje na własnym kernelu.
Po co mam się wysilać, pilnowac spójnosici itp/itd na ftp ? po to żeby
ktoś tą robotę wysał jak cytrynę i nic nie zwrócił w zamian ? Więcej
żądał jeszcze żebym robił wszystko żeby mógł mnie wyciskać dalej przy
każdej kolejnej okazji (?).
Jak będą jakieś kłpoty z kernelem to nawet nie będzie możliwości
sporządznia wiarygodnego raportu w którym bedzie można w sposób
na podstawie środowiska o znanych własnościach i żeby przy okazji otrzymać
w zamian choćby wiarygodna informację że coś jest nie tak.
Kernel buduje sie długo. Buildery maja sporo każdej doby przestoju.
Budowac się to może na razie swobodnie. Kernel to zasób budujacy się na
tyle długo że w międzyczasie można spokojnie opracować nawet coś średniej
wielkości.
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