1. Developer wysya zlecenie, z uyciem client/make-request.sh, na adres
srpm buildera.

2. Na koncie srpm buildera skrypt request_handler.py woany z procmaila obsuguje
   zlecenie.
   a) sprawdza podpis gpg, wyciga wszystkie Good sinature from <...>
      jeli brak -- wypad
   b) szuka w swoim acl.conf czy osoba z Good signature from moe robi
      cokolwiek, w.p.p wypad
   c) xml-parsuje zlecenie (request.py)
      i.   jeli jest to <notifcation ...>, sparawdza uprawnienie
           notify:<builder>, i jeli OK, to zmienia odpowiednio
           kolejk spool/req_queue.  Jeli wszystki buildery
           zakoczyy ju budowanie danej grupy usuwane s src rpmy
           z www/srpms/<group-id>/.  Generuje stron ze statystykami
           (www/queue.html).
      ii.  jeli jest to <group ...> to sprawdza czy uytkownik,
           ktry wysa zlecenie ma uprawnienia src:<nazwa-src-buildera>,
           oraz binary:<builder> dla kadego buildera dla ktrego jest
           zlecenie.  Jeli OK, to wrzuca zlecenie do spool/queue

3. Na koncie srpm buildera z crona chodzi skrypt srpm_builder.py.
   a) Czyta spool/queue, jeli s tam jakie zlecenia, sortuje wg. priorytetu
      (niszy numer == waniejsze zlecenie), a nastpnie sortuje wg. czasu
      przybycia zlecenia (starsze == waniejsze), wyciga je z kolejki i zapisuje
      kolejk.
   b) Obsuguje tylko <group ...>.
   c) Buduje w chroot wszystkie pakiety z grupy, kolejkujc pliki w spool/ftp/
      oraz spool/buildlogs/. Dodatkowo srpmy s wrzucane do www/srpms/<group-id>/
      skd cign je bin-buildery.
   d) jeli nie powiodo 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-builderw 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 zlecajcego
   (do alarmowania), czas skolejkowania (pliki s wysyane dokadnie
   w kolejnoci wrzucania do kolejki), oraz cel (url), gdzie naley
   przesa plik.

   Plik .info jest tylko dla buildlogw. Jeli taki plik istnieje to jest
   przesyany po przesaniu waciwego pliku (tego bez rozszerzenia). Jest
   w nim zapisany status buildloga (OK|FAIL). helpers/buildlogs-mover.sh
   uywa tych plikw.

   Pliki .info i .desc kocza si lini, zawierajc sowo END. Skrypty
   nic z nimi nie robi jeli nie ma tam tego sowa (transmisja
   niedokoczona).

   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 hasa do rsync, w formacie:

     user@host haso

   scp dziaa po kluczach (z ~/.ssh)

5. Na koncie bin-buildera chodzi skrypt request_fetcher.py.
   a) ciga $control_url/max_req_no i porwnuje ze spool/last_req_no.
      jeli takie same to wypad.
   b) ciga $control_url/queue.gz, dekompresuje, sprawdza podpis (w
      config/acl.conf dla podpisujcego uytkownika musi by
      "sign_queue:all") [sidenote: konto bin buildera nie potrzebuje
      kluczy gpg innych ni swj i srpm buildera, nie potrzebuje te
      acl.conf penego, tylko srpm_builder z sign_queue:all]
   c) wrzuca zlecenia do spool/queue
   d) zapisuje najwikszy numer zlecenia wrzuconego w spool/last_req_no.

6. Na koncie bin-buildera chodzi skrypt rpm_builder.py.
   a) sprawdzenie loadu, jeli za wysoki to papa
   b) lockowanie build-slot-N, gdzie N < job_slots, jeli sie nie da
      to papa
   c) lockowanie building-rpm-for-<builder> (tylko jeden build w chroot
      na raz)
   d) Czyta spool/queue, jeli s tam jakie zlecenia, sortuje wg. priorytetu
      (niszy numer == waniejsze zlecenie), a nastpnie sortuje wg. czasu
      przybycia zlecenia (starsze == waniejsze), wyciga je z kolejki i zapisuje
      kolejk.
   e) buduje pakiety, wrzuca pliki do spool/{buildlogs,ftp}. Jeli nie ma flagi
      test-build to pakiety wrzuca te do /spools/ready/ w chroot (i generuje
      tam idx poldka)

Budowanie pakietw:
  1. cignicie srpm
  2. instalacja srpm
  3. prba budowania (z --nobuild), wyapanie "foo is needed by ...",
     instalacja wszystkich takich foo. UWAGA: to nie zawsze dziaa, np. jeli
     rpm wywali si z braku pliku do %include. trzeba napisa osobny parser.
  4. budowanie
  5. jeli nie test-build to przerzucenie pakietw do /spools/ready/
  6. jeli upgrade, to prba upgrejdu, wywalenie wszystkich przeszkadzajcych
     pakietw, chyba, e trzeba by wywali poldka, lub rpm-build.
  7. upgrade
