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.
|