====== Aktualizacja pliku spec w przykładach ======
Zakładam, że mamy już [[:pl:DevelopingPLD:PreparingWorkingEnvironment|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 [[:pl:DevelopingPLD:BuilderScript|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.:
* nałożenie łatek
* poprawienie zależności: **Requires** i **[[:BuildRequires|BuildRequires]]**
* modyfikacje opisów
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 [[:pl:DevelopingPLD:AdapterScript|adapter]], w celu weryfikacji i dokonania automatycznych poprawek:
$ ./adapter foo.spec