Buildery
Witold Filipczyk
witekfl w poczta.onet.pl
Pon, 13 Sty 2003, 21:57:12 CET
On Mon, Jan 13, 2003 at 07:45:39PM +0100, "[PLD] Marcin Doliński" wrote:
> Użytkownik Witold Filipczyk napisał:
> >On Mon, Jan 13, 2003 at 05:21:38PM +0100, "[PLD] Marcin Doliński" wrote:
> >
> [...]
>
> >Schemat i tak będzie uproszczony.
> >Każdy spośród "trusted" users będzie miał dostęp po NFSie do katalogów z
> >plikami.
> >NFS może być "over ssh".
> >
> >Nie ma potrzeby komplikować tego bardziej.
> >
> >Godziny pracy - po prostu builder jest gotowy, to bierze zlecenie i buduje.
> >Priorytety - nie ma sensu tego implementować, bo kolejki będą krótkie.
> > Będzie dużo builderów, zawsze można przsunąć jakiś pakiet na
> > początek
> > kolejki.
> >
> OK, mogę się z tym zgodzić. Ale czemu ma być to nfs? W sieci
> rozproszonej NFS może nie być odpowiednim rozwiązaniem. Ale jeśli chodzi
> o LAN, to nie powinno być żadnych problemów.
>
> Kolejna kwestia, na jakiej zasadzie chcesz zrobić tą stację stacją
> bezdyskową? nfsroot? Ładowanie jakiegoś image np. po nfsie i
> rozpakowywanie go na ramdysk? Czy za każdym razem chcesz instalować od
> nowa wszystkie potrzebne devele? Jak często i na czym chcesz generować
> dla takiego buildera image systemu? Może chcesz go za każdym razem
> stawiać od nowa? Daj trochę konkretów bo jak na razie Ty też tylko piszesz.
Stacja bezdyskowa - chodziło o nowe komputery, dedykowane do budowania.
Nie warto kupować dysku, lepiej zainwestować w RAM.
Po zbootowaniu system będzie chodził nonstop. Bezdyskowość nie jest tu istotna.
Wszystkie devele i inne pakiety potrzebne do zbudowania powinny być brane
oczywiście z tego samego źródła.
Napisałem skrypt poldekbuild, który instaluje potrzebne pakiety i uruchamia
rpmbuilda.
Instalacja wszystkiego od nowa, zapewni to, że pakiety będą budowane zawsze
w tym samym środowisku. Nie będzie sytuacji, że zwykły user nie da rady
przebudować pakietu, bo czegoś nie miał zainstalowanego a na builderach
było.
Dlatego ramdysk tutaj przyspieszyłby trochę.
> Apropos strony głównej, to jakbyś słuchał kłoczka to też wiedziałbyś, że
> nie ma możliwości umieszczenia tam linków.
Nie pamiętam co kloczek mówił. Możliwości są, kwestia koncepcji.
> Piszesz, że każdy będzie mógł zainstalować pakiet i potrenować budowanie
> a wcześniej napisałeś, że ma się to odbywać automatycznie.
Będą pakiety z builderem. Każdy będzie mógł zainstalować te pakiety
i sprawdzić jak to działa. A jak spełni odpowiednie warunki,
(jakie - nie wiem), będzie mógł użyć swojej maszyny do budowania
oficjalnych zasobów.
> Mój pomysł jest taki: buildery oczywiście w chroocie. Nie wiem jak to
> zabezpieczyć przed ingerencją nieświadomych 'adminów' ale trzeba
> poszukać jakiejś metody... Builder dla lusera powinien działać tak jak
Oczywiście builder będzie działał w chroocie. Ma instalować pakiety od zera.
> Seti w Home - user nie wie co i dla kogo robi ani nie ma za dużych
> możliwości ingerencji w to. Powinna być w sieci lista pakietów, których
Mam zamiar zrealizowania "Multi w Home" - wyszukiwanie zależności w losowaniach
Multilotka, ale to inna bajka.
> pilnowałby się builder. Np. co godzine powinien sprawdzać czy ma
> wszystkie pakiety z listy w odpowiednich wersjach i np. sprawdzać
> różnicę ls -lR z wzorcem. Jeżeli jest inaczej, nie dochodzi do
Nie wiesz jak to zrobić, nie wiesz nawet dokładnie jak to ma działać.
Skrypt poldekbuild (wysłałem go na listę poldkową w tamtym roku)
instaluje wszystkie potrzebne pakiety i tylko te pakiety.
> Napisz jeszcze dokładnie jak miałby działać taki builder (jego system).
Chyba już pisałem, ale napiszę jeszcze raz.
developer robi commita. Jeśli w specu zmienił się Release lub Version lub
jeszcze coś innego, np. w pakietach z Release poniżej 1, mamy request
dla buildera.
Albo od razu jest budowany pakiet src.rpm, albo request przekazywany
jest dalej. (zależy od implementacji, nie jest istotne w tej chwili)
Tzn. wszystko opiera się o kolejki. Kolejki to nic innego jak katalogi,
w których są pliki. O kolejności decyduje czas modyfikacji, np.
Kolejka zleceń zrobienia src.rpma będzie zawierała pliki .spec.
Zawartość nie musi być kopiowana wystarczy nazwa, zawartość można
wziąć z cvsu.
Będzie też kolejka SRPMS do przebudowania i RPMów do podpisania.
Na każdej kolejce będzie operował w nieskończonej pętli jakiś skrypt.
Będzie brał pierwszy (najstarszy) element z kolejki, przetwarzał
go i zapisywał wyniki w innych kolejkach (katalogach).
Jeśli kolejka jest pusta proces zasypia na określony czas.
Pierwszy element z kolejki to:
ls -t | head -1
Przepływ danych wygląda tak:
.spec -> .src.rpm -> .rpm -> .log , oprócz tego pliki są kopiowane
w odpowiednie miejsca i rpmy podpisywane.
Załóżmy, że mamy katalog z src.rpm.
Dla każdej architektury jest podakatalog, w którym są linki symboliczne
do plików z katalogu SRPMS, np.
i686/blabla.src.rpm -> /SRPMS/blabla.src.rpm
i386/blabla.src.rpm -> /SRPMS/blabla.src.rpm
A więc teraz dla każdej architektury mamy buildery. Każdy z builderów
ma dostęp po NFSie do src.rpm. Na każdym builderze działa program
budujący.
Bierze pierwszy pakiet z kolejki. W tym czasie dostęp do katalogu
jest blokowany, żeby dwa buildery nie wzięły do przebudowania
tego samego pakietu. Przerzuca pakiet do katalogu BUDOWANE.
mv blabla.src.rpm BUDOWANE/
linki były bezwzględne, więc wszystko jest w porządku.
Odpalany jest właściwy skrypt buildera.
W chrootowanym środowisku instalowane są potrzebne pakiety.
Pakiet jest budowany. Wynik budowania (OK albo FAIL),
a także log z budowania jest kopiowany w odpowiednie miejsce.
Kasowany jest plik (link) BUDOWANE/blabla.src.rpm
Builder może budować następny pakiet.
NFS zapewnia prostotę. Przy połączeniach 1Mbit/s i szybszych nie powinno
być dużych opóźnień.
Jeśli w wyniku powstaną RPMy zostaną skopiowane do kolejki podpisywacza.
Na tej samej zasadzie podisywacz bierze pierwszy pakiet z kolejki,
podpisuje go i wrzuca do test. Co się dzieje dalej to już nie nasza
sprawa.
Jeśli zostanie osiągnięta "masa krytyczna" builderów, to developerzy nie
nadążą z produkcją speców.
--
Witold Filipczyk
<witekfl w poczta.onet.pl>
Więcej informacji o liście dyskusyjnej pld-devel-pl