X-Git-Url: https://git.tld-linux.org/?p=TLD.git;a=blobdiff_plain;f=pld-builder.new%2Fjak-to-dziala.txt;fp=pld-builder.new%2Fjak-to-dziala.txt;h=4c2c9eb1668c8f8d8ce1740b656e0ecfabfaeff2;hp=0000000000000000000000000000000000000000;hb=90809c8fec988489786ce00247d9a4150070748b;hpb=ab3934fab858112cd552359b18cb980ea07c310b diff --git a/pld-builder.new/jak-to-dziala.txt b/pld-builder.new/jak-to-dziala.txt new file mode 100644 index 0000000..4c2c9eb --- /dev/null +++ b/pld-builder.new/jak-to-dziala.txt @@ -0,0 +1,108 @@ +1. Developer wysyła zlecenie, z użyciem client/make-request.sh, na adres +srpm buildera. + +2. Na koncie srpm buildera skrypt request_handler.py wołany z procmaila obsługuje + zlecenie. + a) sprawdza podpis gpg, wyciąga wszystkie Good sinature from <...> + jeśli brak -- wypad + b) szuka w swoim acl.conf czy osoba z Good signature from może robić + cokolwiek, w.p.p wypad + c) xml-parsuje zlecenie (request.py) + i. jeśli jest to , sparawdza uprawnienie + notify:, i jeśli OK, to zmienia odpowiednio + kolejkę spool/req_queue. Jeśli wszystki buildery + zakończyły już budowanie danej grupy usuwane są src rpmy + z www/srpms//. Generuje stronę ze statystykami + (www/queue.html). + ii. jeśli jest to to sprawdza czy użytkownik, + który wysłał zlecenie ma uprawnienia src:, + oraz binary: dla każdego buildera dla którego jest + zlecenie. Jeśli OK, to wrzuca zlecenie do spool/queue + +3. Na koncie srpm buildera z crona chodzi skrypt srpm_builder.py. + a) Czyta spool/queue, jeśli są tam jakieś zlecenia, sortuje wg. priorytetu + (niższy numer == ważniejsze zlecenie), a następnie sortuje wg. czasu + przybycia zlecenia (starsze == ważniejsze), wyciąga je z kolejki i zapisuje + kolejkę. + b) Obsługuje tylko . + c) Buduje w chroot wszystkie pakiety z grupy, kolejkując pliki w spool/ftp/ + oraz spool/buildlogs/. Dodatkowo srpmy są wrzucane do www/srpms// + skąd ciągną je bin-buildery. + d) jeśli nie powiodło się budowanie żadnego pakietu to wypad + e) zleceniu nadawany jest numer + f) zlecenie jest wrzucane do spool/req_queue + g) kolejka jest podpisywana kluczem srpm buildera, gzipowana i wrzucana do + www/queue.gz + h) numer zapisywany jest w www/max_req_no + i) generowanie strony ze statystykami + +4. Na kontach srpm buildera i bin-builderów chodzi + file_sender.py. Monitoruje on kolejki spool/{buildlogs,ftp}. Są w + nich pliki, jak: + + faa1f592-437f-446d-b1e6-ac41976c5775 + faa1f592-437f-446d-b1e6-ac41976c5775.info + faa1f592-437f-446d-b1e6-ac41976c5775.desc + + Plik .desc jest kontrolny dla file_sender.py. Zawiera email zlecającego + (do alarmowania), czas skolejkowania (pliki są wysyłane dokładnie + w kolejności wrzucania do kolejki), oraz cel (url), gdzie należy + przesłać plik. + + Plik .info jest tylko dla buildlogów. Jeśli taki plik istnieje to jest + przesyłany po przesłaniu właściwego pliku (tego bez rozszerzenia). Jest + w nim zapisany status buildloga (OK|FAIL). helpers/buildlogs-mover.sh + używa tych plików. + + Pliki .info i .desc kończa się linią, zawierającą słowo END. Skrypty + nic z nimi nie robią jeśli nie ma tam tego słowa (transmisja + niedokończona). + + URLe wspierane jako cel to: + + rsync://user@host/modul/sci/ezka/plik + scp://user@host/sciezka/plik + /absolutna/sciezka/do/pliku + + W pliki config/rsync-passwords są hasła do rsync, w formacie: + + user@host hasło + + scp działa po kluczach (z ~/.ssh) + +5. Na koncie bin-buildera chodzi skrypt request_fetcher.py. + a) ściąga $control_url/max_req_no i porównuje ze spool/last_req_no. + jeśli takie same to wypad. + b) ściąga $control_url/queue.gz, dekompresuje, sprawdza podpis (w + config/acl.conf dla podpisującego użytkownika musi być + "sign_queue:all") [sidenote: konto bin buildera nie potrzebuje + kluczy gpg innych niż swój i srpm buildera, nie potrzebuje też + acl.conf pełnego, tylko srpm_builder z sign_queue:all] + c) wrzuca zlecenia do spool/queue + d) zapisuje największy numer zlecenia wrzuconego w spool/last_req_no. + +6. Na koncie bin-buildera chodzi skrypt rpm_builder.py. + a) sprawdzenie loadu, jeśli za wysoki to papa + b) lockowanie build-slot-N, gdzie N < job_slots, jeśli sie nie da + to papa + c) lockowanie building-rpm-for- (tylko jeden build w chroot + na raz) + d) Czyta spool/queue, jeśli są tam jakieś zlecenia, sortuje wg. priorytetu + (niższy numer == ważniejsze zlecenie), a następnie sortuje wg. czasu + przybycia zlecenia (starsze == ważniejsze), wyciąga je z kolejki i zapisuje + kolejkę. + e) buduje pakiety, wrzuca pliki do spool/{buildlogs,ftp}. Jeśli nie ma flagi + test-build to pakiety wrzuca też do /spools/ready/ w chroot (i generuje + tam idx poldka) + +Budowanie pakietów: + 1. ściągnięcie srpm + 2. instalacja srpm + 3. próba budowania (z --nobuild), wyłapanie "foo is needed by ...", + instalacja wszystkich takich foo. UWAGA: to nie zawsze działa, np. jeśli + rpm wywali się z braku pliku do %include. trzeba napisać osobny parser. + 4. budowanie + 5. jeśli nie test-build to przerzucenie pakietów do /spools/ready/ + 6. jeśli upgrade, to próba upgrejdu, wywalenie wszystkich przeszkadzających + pakietów, chyba, że trzeba by wywalić poldka, lub rpm-build. + 7. upgrade