Table of Contents

Aktualizacja pliku spec w przykładach

Zakładam, że mamy już przygotowane środowisko budowania, dlatego przejdziemy od razu do rzeczy. W przykładach będziemy aktualizować fikcyjny pakiet foo z wersji 1.5 do 1.6.

Zaczynamy od pobrania skryptem builder całej paczki z HEAD (ewentualnie z odpowiedniego brancha):

$ builder -g foo

aby było nam wygodniej pracować, możemy zmienić katalog:

$ cd ~/rpm/packages/foo

Aktualizacja aplikacji w specu

Teraz za pomocą edytora tekstu otwieramy plik spec:

$ vim ~/rpm/packages/foo/foo.spec

i odszukujemy sekcje odpowiedzialne za wersję, które mogą wyglądać następująco:

Version:        1.5 
Release:        3

wartość Version: zmieniamy na 1.6 zaś Release: na 1. Zmiana wersji wymaga, by Release ustawić na wartość 1. Wyjątkiem jest sytuacja gdy trzeba zasygnalizować, że spec nie jest skończony, wtedy nadajemy ułamkową wartość np.: 0.1. Teraz musimy sprawdzić czy pakiet się buduje.

Musimy sprawdzić czy pakiet się buduje zanim wykonamy commit lub wyślemy łatkę do jakiegoś dewelopera. Zaczniemy od aktualizacji sum md5 źródeł w pakiecie:

$ builder -5 foo

teraz możemy budować, w poniższym przykładzie budujemy tylko binarne wersje (-bb) żeby oszczędzić na czasie.

$ builder -bb foo

Jeśli pakiet się zbudował możemy wykonać commit, dodaniem odpowiedniego komentarza (-m):

$ cvs ci -m "- updated to 1.6" foo.spec

Jeśli pakiet się nie buduje to czytaj o Rozwiązywaniu problemów poniżej.

Inne aktualizacje w specu

Każde zmiany nie dotyczące aktualizacji samej aplikacji np.:

wymagają podbicia tagu Release, tak by pakiet mógł być zbudowany i zaktualizowany. Podbicia dokonuje się także wtedy, gdy żadne zmiany nie są robione w specu, robi się tak by aplikacja została na nowo zbudowana, np. w celu zlinkowania z nowszą wersją bibliotek.

Po każdej zmianie, a zwłaszcza po nałożeniu łatek musimy się przekonać czy pakiet się buduje, zatem:

$ builder -bb foo

Kiedy wszystko jest w porządku możemy dokonać commit speca (i ewentualnie łatek).

Rozwiązywanie problemów

Przy aktualizacji może pojawić się każdy możliwy problem jednak najczęściej pojawia się problem z łatami i/lub niespakietowanymi plikami.

Błąd przy nakładaniu łatek

Zdarza sie, że w nowszej wersji aplikacji autorzy nałożyli już taką łatkę i jedyne co pozostaje nam zrobić to usunąć ją ze speca. W gorszym przypadku kod źródłowy zmienił się na tyle, że łatka po prostu nie da się nałożyć. Musimy porównać źródło z łatką i podjąć odpowiednie kroki: usunąć łatkę lub ją zmodyfikować, tak by się nakładała. Przy okazji można sprawdzić czy łatka w ogóle jest potrzebna, trzeba sprawdzić w historii rewizji po co w ogóle została dodana.

Aby wyłączyć łatkę usuwamy ze speca odpowiedni tag Patch{NR} z nagłówka speca i polecenie nakładające go z %prep. Teraz próbujemy budować (jak powyżej). Jeśli wszystko działa poprawnie usuwamy łatkę, w tym celu wchodzi my do katalogu ~/rpm/packages/foo/ i usuwamy plik o odpowiedniej nazwie np.:

$ rm foo-special-fix.patch

usuwamy łatkę ze CVS-u:

$ cvs remove foo-special-fix.patch

i teraz możemy zrobić commit wszystkich zmian z informacją o usunięciu łatki:

$ cvs ci

Niespakietowane pliki/brak plików

Rozwój aplikacji powoduje czasami większe lub mniejsze zmiany w liście plików. Builder nas poinformuje, w takim wypadku musimy dokonać zmian w sekcjach %files. Musimy to pamiętać by używać makr zamiast konkretnych ścieżek.

Uwagi

Warto, nawet po najmniejszej zmianie w specu, uruchomić skrypt adapter, w celu weryfikacji i dokonania automatycznych poprawek:

$ ./adapter foo.spec