]> TLD Linux GIT Repositories - TLD.git/blobdiff - pld-builder.new/jak-to-dziala.txt
- from https://github.com/pld-linux/pld-builder.new
[TLD.git] / pld-builder.new / jak-to-dziala.txt
diff --git a/pld-builder.new/jak-to-dziala.txt b/pld-builder.new/jak-to-dziala.txt
new file mode 100644 (file)
index 0000000..4c2c9eb
--- /dev/null
@@ -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 <notifcation ...>, sparawdza uprawnienie
+           notify:<builder>, 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/<group-id>/.  Generuje stronę ze statystykami
+           (www/queue.html).
+      ii.  jeśli jest to <group ...> to sprawdza czy użytkownik,
+           który wysłał zlecenie ma uprawnienia src:<nazwa-src-buildera>,
+           oraz binary:<builder> 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 <group ...>.
+   c) Buduje w chroot wszystkie pakiety z grupy, kolejkując pliki w spool/ftp/
+      oraz spool/buildlogs/. Dodatkowo srpmy są wrzucane do www/srpms/<group-id>/
+      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-<builder> (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