]> git.pld-linux.org Git - projects/pld-builder.new.git/blob - doc/jak-to-dziala.txt
- make no args to work as autotag finder
[projects/pld-builder.new.git] / doc / jak-to-dziala.txt
1 1. Developer wysyła zlecenie, z użyciem client/make-request.sh, na adres
2 srpm buildera.
3
4 2. Na koncie srpm buildera skrypt request_handler.py wołany z procmaila obsługuje
5    zlecenie.
6    a) sprawdza podpis gpg, wyciąga wszystkie Good sinature from <...>
7       jeśli brak -- wypad
8    b) szuka w swoim acl.conf czy osoba z Good signature from może robić
9       cokolwiek, w.p.p wypad
10    c) xml-parsuje zlecenie (request.py)
11       i.   jeśli jest to <notifcation ...>, sparawdza uprawnienie
12            notify:<builder>, i jeśli OK, to zmienia odpowiednio
13            kolejkę spool/req_queue.  Jeśli wszystki buildery
14            zakończyły już budowanie danej grupy usuwane są src rpmy
15            z www/srpms/<group-id>/.  Generuje stronę ze statystykami
16            (www/queue.html).
17       ii.  jeśli jest to <group ...> to sprawdza czy użytkownik,
18            który wysłał zlecenie ma uprawnienia src:<nazwa-src-buildera>,
19            oraz binary:<builder> dla każdego buildera dla którego jest
20            zlecenie.  Jeśli OK, to wrzuca zlecenie do spool/queue
21
22 3. Na koncie srpm buildera z crona chodzi skrypt srpm_builder.py.
23    a) Czyta spool/queue, jeśli są tam jakieś zlecenia, sortuje wg. priorytetu
24       (niższy numer == ważniejsze zlecenie), a następnie sortuje wg. czasu
25       przybycia zlecenia (starsze == ważniejsze), wyciąga je z kolejki i zapisuje
26       kolejkę.
27    b) Obsługuje tylko <group ...>.
28    c) Buduje w chroot wszystkie pakiety z grupy, kolejkując pliki w spool/ftp/
29       oraz spool/buildlogs/. Dodatkowo srpmy są wrzucane do www/srpms/<group-id>/
30       skąd ciągną je bin-buildery.
31    d) jeśli nie powiodło się budowanie żadnego pakietu to wypad
32    e) zleceniu nadawany jest numer
33    f) zlecenie jest wrzucane do spool/req_queue
34    g) kolejka jest podpisywana kluczem srpm buildera, gzipowana i wrzucana do 
35       www/queue.gz
36    h) numer zapisywany jest w www/max_req_no
37    i) generowanie strony ze statystykami
38
39 4. Na kontach srpm buildera i bin-builderów chodzi
40    file_sender.py. Monitoruje on kolejki spool/{buildlogs,ftp}. Są w
41    nich pliki, jak:
42
43      faa1f592-437f-446d-b1e6-ac41976c5775
44      faa1f592-437f-446d-b1e6-ac41976c5775.info
45      faa1f592-437f-446d-b1e6-ac41976c5775.desc
46
47    Plik .desc jest kontrolny dla file_sender.py. Zawiera email zlecającego
48    (do alarmowania), czas skolejkowania (pliki są wysyłane dokładnie
49    w kolejności wrzucania do kolejki), oraz cel (url), gdzie należy
50    przesłać plik.
51
52    Plik .info jest tylko dla buildlogów. Jeśli taki plik istnieje to jest
53    przesyłany po przesłaniu właściwego pliku (tego bez rozszerzenia). Jest
54    w nim zapisany status buildloga (OK|FAIL). helpers/buildlogs-mover.sh
55    używa tych plików.
56
57    Pliki .info i .desc kończa się linią, zawierającą słowo END. Skrypty
58    nic z nimi nie robią jeśli nie ma tam tego słowa (transmisja
59    niedokończona).
60
61    URLe wspierane jako cel to:
62    
63      rsync://user@host/modul/sci/ezka/plik
64      scp://user@host/sciezka/plik
65      /absolutna/sciezka/do/pliku
66    
67    W pliki config/rsync-passwords są hasła do rsync, w formacie:
68
69      user@host hasło
70
71    scp działa po kluczach (z ~/.ssh)
72
73 5. Na koncie bin-buildera chodzi skrypt request_fetcher.py.
74    a) ściąga $control_url/max_req_no i porównuje ze spool/last_req_no.
75       jeśli takie same to wypad.
76    b) ściąga $control_url/queue.gz, dekompresuje, sprawdza podpis (w
77       config/acl.conf dla podpisującego użytkownika musi być
78       "sign_queue:all") [sidenote: konto bin buildera nie potrzebuje
79       kluczy gpg innych niż swój i srpm buildera, nie potrzebuje też
80       acl.conf pełnego, tylko srpm_builder z sign_queue:all]
81    c) wrzuca zlecenia do spool/queue
82    d) zapisuje największy numer zlecenia wrzuconego w spool/last_req_no.
83
84 6. Na koncie bin-buildera chodzi skrypt rpm_builder.py.
85    a) sprawdzenie loadu, jeśli za wysoki to papa
86    b) lockowanie build-slot-N, gdzie N < job_slots, jeśli sie nie da
87       to papa
88    c) lockowanie building-rpm-for-<builder> (tylko jeden build w chroot
89       na raz)
90    d) Czyta spool/queue, jeśli są tam jakieś zlecenia, sortuje wg. priorytetu
91       (niższy numer == ważniejsze zlecenie), a następnie sortuje wg. czasu
92       przybycia zlecenia (starsze == ważniejsze), wyciąga je z kolejki i zapisuje
93       kolejkę.
94    e) buduje pakiety, wrzuca pliki do spool/{buildlogs,ftp}. Jeśli nie ma flagi
95       test-build to pakiety wrzuca też do /spools/ready/ w chroot (i generuje
96       tam idx poldka)
97
98 Budowanie pakietów:
99   1. ściągnięcie srpm
100   2. instalacja srpm
101   3. próba budowania (z --nobuild), wyłapanie "foo is needed by ...",
102      instalacja wszystkich takich foo. UWAGA: to nie zawsze działa, np. jeśli
103      rpm wywali się z braku pliku do %include. trzeba napisać osobny parser.
104   4. budowanie
105   5. jeśli nie test-build to przerzucenie pakietów do /spools/ready/
106   6. jeśli upgrade, to próba upgrejdu, wywalenie wszystkich przeszkadzających
107      pakietów, chyba, że trzeba by wywalić poldka, lub rpm-build.
108   7. upgrade
This page took 0.100565 seconds and 3 git commands to generate.