]>
Commit | Line | Data |
---|---|---|
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 |