Krótki opis distfiles 
       
       Co to? 
        Nowy sposób trzymania tarballi. Zamiast być trzymane w CVS w module SOURCES/ 
        są trzymane na osobnym serwerze tp://distfiles.pld-linux.org (oraz http://). 
      Żeby uniknąć problemów z powtarzającymi się nazwami 
        plików (z inną zawartością) pliki są identyfikowalne po sumie md5 ich 
        zawartości. Sumy md5 są trzymane bezpośrednio w specach. 
       Po co to to? 
        Żeby odciążyć serwer CVS, żeby nie wisiały locki na SOURCES, żeby umożliwić 
        refetch tarballi i podglądanie postępów w ściąganiu. 
       Jak to wygląda? 
        W specu, pod linią: 
       SourceN: ... 
      należy umieścić komentarz 
       # SourceN-md5: ... 
      w ten sposób: 
       Source3: ftp://foo.com/%{name}/%{name}-%{version}.tar.gz 
        # Source3-md5: 25eb747fa7dd5ac3e693078f2ff56492 
      Od tej chwili SPECS/builder będzie szukał pliku na distfiles. 
      Po wykonaniu commitu automat chodzący na distfiles sam 
        sobie dociągnie plik z podanego URL-a i umieści go na serwerze distfiles. 
        Następnie wyśle raport osobie dokonującej commita. 
      Uwaga: dotyczy to tylko źródeł dystrybuowalnych; niedystrybuowalnym, 
        oznaczonym przez "NoSource: numer" _nie_ dodajemy znacznika 
        SourceN-md5. 
      Chyba zwariowałeś! Nie będę tyle pisał. 
        Pewnie, że nie :-) SPECS/builder dorobił się kilku nowych opcji: 
       -nd 
       No distfiles -- nie korzystaj z distfiles. 
       -5, --update-md5 
       Przeszukuje speca i poprawia istniejące wpisy # SourceK-md5:. 
        Nie dodaje nowych wpisów. Ta opcja implikuje -nd (jeśli nie ma źródeł, 
        będą ściągnięte z src-urli). 
       -a5, --add-md5 
       Dodaj # Source-md5:  
        do wszystkich Source: które są URL-ami. Poza tym podobnie jak -5. 
       -U, --update 
       Jak -5, ale dodatkowo próbuje dociągać wszystkie pliki 
        z podanych URL-i. 
       Yyy? W skrócie. 
         
        Uaktualniamy pakiet foo do wersji 1.2. 
        a) nie mamy jeszcze ściągniętych źródeł: 
        1. cvs up foo.spec lub ./builder -g foo.spec 
        2. vi foo.spec [poprawiamy wersję na 1.2] 
        3. ./builder -U foo.spec # źródła się dociągają 
         
        3a. jeśli spec nie miał jeszcze source-md5, to: 
        ./builder -a5 foo.spec 
        4. rpmbuild -bb ...; poprawianie patchy, takie tama 
        5. cvs diff -u foo.spec # i oglądamy sobie :-) 
        6. cvs commit foo.spec 
       b) mamy już źródła i poprawionego 
        speca 
        1. ./builder -5 foo.spec 
        2. cvs commit foo.spec 
       c) dodajemy nowy pakiet 
        1. ściągamy źródła, piszemy speca bez source-md5 
        2. ./builder -a5 foo.spec 
        3. cvs commit foo.spec 
      Widać tutaj kilka zalet tego podejścia: 
       1. URL-e są sprawdzane 
        2. Nie trzeba przepychać źródeł do serwera CVS (idealne dla łączy asymetrycznych) 
        3. Nie trzeba kasować starych źródeł (zajmie się tym automat na distfiles) 
      Co trzymać w distfiles, a czego nie? 
        Trzymać: 
        1. Wszystkie dystrybuowalne pliki binarne które są dostępne pod zewnętrznymi 
        URL-ami Jako wyjątek można sobie darować bardzo małe pliki, jak np. ikonki. 
        2. Snapshoty z CVS programów. 
      Nie trzymać: 
        1. Rzeczy które zostały zmodyfikowane przez pakowacza, i nie wystawił 
        ich on pod zewnętrznym URL-em. Np. większość patchy na kernel. *Bez względu 
        na rozmiar*. 
        2. patchy, init-scriptów i innych rzeczy pisanych przez pakowacza. 
      Czyli to co "Nie trzymać" w distfiles - trafia 
        normalnie do SOURCES. 
       
        Jak wrzucać pliki bez URL-i? 
        Jak widać wyżej dotyczy to tylko snapshotów. Metoda z wystawianiem pod 
        tymczasowym URL jest już nieaktualna. 
      Jeśli mamy spec foo.spec oraz plik foo-1.2.tar.gz należy: 
      1. poprawić md5 w specu (./builder -5 foo.spec), spec 
        powinien wyglądać 
        tak: 
       Source0: foo-1.2.tar.gz 
        # Source0-md5: 132c2c85b15a573786078311f77f613d 
      2. wrzucić foo-1.2.tar.gz pod adres 
        ftp://<login>@dropin.pld-linux.org/foo-1.2.tar.gz 
        gdzie <login> to login z CVS, hasło jest takie samo jak w CVS. 
      3. commitnąć speca, spowoduje to automagiczne przeniesienie 
        pliku ze skrzynki wrzutowej do odpowiedniego katalogu na distfiles. 
      Skrzynki wrzutowe służą tylko do pisania, nie można 
        z nich czytać. 
      Dodatkowo, jeśli źródła nie są tajne (np. snapshoty 
        z ktown), można podać URL na distfiles/src, np: 
       Source0: ftp://distfiles.pld-linux.org/src/foo-1.2.tar.gz 
        # Source0-md5: 132c2c85b15a573786078311f77f613d 
      Reszta procedury jest w tym wypadku taka sama jak przy 
        braku URL. 
       
        Co zrobić jak automat nie dociągnął źródeł? 
        Jeśli jest to tymczasowy problem z osiągnięciem hosta lub domeny, należy 
        użyć SPECS/fetchsrc_request foo.spec, aby zlecić automatowi ponowne ściąganie 
        plików z URL. 
      W przypadku, gdy źródła są na branchu, podajesz brancha 
        jako parametr za spec: 
        ./fetchsrc_request foo.spec FOO 
       
        Makra w nazwach plików 
        Automat rozpoznaje makra w postaci %{makro}. Nie rozpoznaje w ogóle %makro. 
      Makra %(echo foo | sed -e ...) również nie są rozpoznawane 
        z jednym małym wyjątkiem: 
       %(echo ... | tr ABC abc) 
        %(echo ... | tr -d abc) 
      gdzie abc to dowlne ciągi znaków. Np. zamiast : 
       %(echo %{version} | sed -e 's/\\.//g') 
      należy użyć: 
       %(echo %{version} | tr -d .) 
      Pełne wsparcie dla %(shell code) jest niemożliwe 
        ze względów bezpieczeństwa. 
       
 |