====== Krótka i zgrubna instrukcja budowania pakietów z CVSa. ====== //napisana przez osobę, której wystarczy, że zadziałała raz// ==== Wstęp ==== Repozytoria naszej dystrybucji zawierają tysiące paczek, pozwalających zainstalować najpopularniejsze, najważniejsze oprogramowanie. Każda paczka, którą pobierasz, jest skompresowaną wersją programu. Jednak, jak mawiają deweloperzy i administratorzy PLD - "Dyski nie są z gumy". Nie posiadamy i nigdy nie będziemy posiadać przestrzeni dyskowej, pozwalającej pomieścić wszystkie aplikacje w repozytoriach PLD. Jest to nierealne. Dlatego też, część mniej popularnych programów oraz takich, które zajmują dużo miejsca na dyskach serwerów znajdziesz na CVS. Lista wszystkich pakietów jest dostępna na [[http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/|długo ładującej się stronie]]. W tym przewodniku poprowadzimy Ciebie za rączkę by pokazać, jak prosto można zbudować swoje ulubione programy. ==== Wiedza ==== Jeśli pragniesz prawdziwej wiedzy zobacz [[http://pld-linux.org/pl/DevelopingPLD/BuilderScript|Opis skryptu builder]] i [[http://pld-linux.org/pl/DevelopingPLD/PreparingWorkingEnvironment|Przygotowanie środowiska pracy]]. ==== Przygotowanie ==== Punkty te wykonujemy tylko raz: * **zainstaluj narzędzia do budowania** (jest to jedyna operacja, która wymaga uprawnień superużytkownika - roota) poldek -i rpm-build rpm-build-tools cvs * **przygotuj środowisko dla buildera ** Sprowadza się to do wykonania polecenia: builder --init-rpm-dir **Ważne: Tę operację powinieneś wykonać gdy Twój komputer jest podłączony do internetu.** //Program builder stworzy w tym momencie odpowiednią strukturę katalogów i pobierze najaktualniejsze pliki, potrzebne do jego działania. W wyniku wykonania powyższego polecenia powinieneś ujrzeć:// $ builder --init-rpm-dir Initialising rpm directories to /home/users/dirdival/rpm from :pserver:cvs@cvs.pld-linux.org:/cvsroot U packages/.cvsignore U packages/rpm.groups U packages/dropin U packages/mirrors U packages/md5 U packages/adapter U packages/adapter.awk U packages/fetchsrc_request U packages/builder U packages/relup.sh U packages/compile.sh U packages/repackage.sh To checkout *all* .spec files (read-only): - run cvs co SPECS To checkout *all* packages: - run cvs up in /home/users/dirdival/rpm/packages dir To commit with your developer account: - edit /home/users/dirdival/rpm/packages/CVS/Root Voila! To wszystko. Dla pewności możemy upewnić się, czy odpowiednie pliki i katalogi znajdują się tam gdzie trzeba. Wystarczy zajrzeć do //~/rpm//: $ cd ~/rpm $ ls BUILD packages RPMS SRPMS Warto jeszcze sprawdzić czy skrypt //builder// ustawił zmienną CVSROOT: $ echo $CVSROOT :pserver:cvs@cvs.pld-linux.org:/cvsroot Jeśli na konsoli nie zobaczysz powyższej linijki, będziesz musiał ustawić tą zmienną środowiskową sam. Jeśli korzystasz z //basha//, wystarczy dopisać na końcu pliku //.bashrc// poniższą linijkę: export CVSROOT=":pserver:cvs@cvs.pld-linux.org:/cvsroot" i przelogować użytkownika. ==== Budowanie pakietów ==== W końcu klucz programu, czyli budowanie pakietów. Tutaj znajduje się cała magia specy. Wystarczy wywołać polecenie: builder Na przykład: builder celestia Tak, to wszystko! Budowniczy za Ciebie pobierze źródła aplikacji, sprawdzi czy są zainstalowane wszystkie wymagane pakiety i przystąpi do pracy. Jeśli wszystko pójdzie zgodnie z planem, paczka zostanie utworzona i trafi do katalogu: //~/rpm/RPMS//. Wystarczy wtedy uruchomić //poldka// i ją zainstalować. Przy budowie niektórych aplikacji możemy natrafić na tak zwane flagi, czyli dodatkowe parametry budowania. Pozwalają one na większą kontrolę nad tym co chcemy uzyskać. Wyświetlane są one przez skrypt //builder// na samym początku. Jeśli chcesz się nimi posłużyć wciśnij Ctrl-C, aby przerwać budowanie i uruchom budowniczego z wybranymi parametrami. Najlepiej omówić je na przykładzie: $ builder celestia builder: SMP make flags are set to -j4 # $Revision: 1.71 $, $Date: 2008/09/02 19:37:50 $ No conditional flags passed from available: --with : glut gnome gtk --without: kde theora Available branches: AC-branch RA-branch ^C Jak widać mamy dostępne dwa rodzaje flag //--with// i //--without//. Pierwszy z nich mówi, co dodatkowego dla pakietu możemy zrobić. Druga grupa odwrotnie, możemy za ich pomocą powiedzieć, że czegoś nie chcemy. Na przykład: $ builder --with gnome --with gtk --without kde celestia Będzie to oznaczało, że chcemy zbudować paczkę //celestia// ze wsparciem dla //gnome// a nie chcemy wsparcia dla środowiska //kde//. Możemy podawać wiele parametrów budowania w dowolnej kolejności. Po ich ustawieniu skrypt //builder// poinformuje nas, że je wykrył, otaczając wybrane flagi ostrymi nawiasami: $ builder --with gnome --without kde celestia builder: SMP make flags are set to -j4 # $Revision: 1.71 $, $Date: 2008/09/02 19:37:50 $ Building celestia.spec with the following conditional flags: --with gnome --without kde from available: --with : glut gtk --without: theora Jeśli nie jesteś pewien za co odpowiadają poszczególne flagi, możesz zajrzeć do pliku spec. Na jego początku powinny znajdować się wszystkie możliwe parametry budowania oraz krótka informacja o każdym z nich. Plik spec znajdziesz w katalogu: ~/rpm/packages/nazwaprogramu/nazwaprogramu.spec czyli w tym konkretnym przypadku jest to: ~/rpm/packages/celestia/celestia.spec ==== Co może pójść nie tak? ==== Deweloperzy PLD dokładają wszelkich starań by spece, służące do budowania pakietów, były dobrze napisane i pozwalały automatycznie tworzyć pakiety. Ta drobiazgowość dotyczy również wymagań jakie nasz system musi spełnić by móc zbudować wybrany program. Dlatego, jeśli nie uda Ci się utworzyć pakietu, najprawdopodobniej przyczyną tego będzie brak wymaganej paczki w Twoim systemie. Objawia się to w taki sposób: $ builder geany builder: SMP make flags are set to -j4 M geany/geany.spec # $Revision: 1.30 $, $Date: 2009/08/17 04:11:43 $ Available branches: AC-branch geany-0.18.tar.bz2 having proper md5sum already exists błąd: Niespełnione zależności budowania: vte-devel jest wymagany przez geany-0.18-1.src Error: package build failed. (no more info) Skrypt //builder// poinformował nas, że do budowy edytora //geany// wymagane jest zainstalowanie paczki: //vte-devel//. Musimy teraz wejść do //poldka// i zainstalować niezbędny pakiet. Paczki zawierające w nazwie słowo //devel// posiadają najczęściej biblioteki i pliki nagłówkowe (nie przejmuj się jeśli nie rozumiesz - to informacja dla programistów). Po zbudowaniu naszego edytora będzie można je usunąć, bądź pozostawić na przyszłość. Wiele programów korzysta z tych samych bibliotek przy budowaniu i na ogół nie zajmują dużo miejsca na dysku. Jeśli podczas budowy paczki przytrafi się Tobie inny błąd, niedotyczący zależności, powinieneś zgłosić go deweloperom. Możesz to uczynić wysyłając ostatnie kilkanaście linii skryptu //buildera// na: [[http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl|listę deweloperów PLD]], bądź na [[http://forum.pld-linux.org|Forum PLD]]. ==== Warto wiedzieć, że ... ==== Wszystkie pakiety z repozytoriów PLD powstają w wyżej opisany sposób. Jeśli komuś bardzo zależy na jak najnowszych wersjach newralgicznych części systemu (jądrze systemu, głównych usługach w których wykryto poważne błędy), warto samemu budować odpowiednie paczki. Na ogół mija trochę czasu (kilka dni) nim nowe wersje trafią do głównych repozytoriów. W tym miejscu warto przypomnieć, że można zgłosić, w prosty sposób, zbudowanie jakiejś paczki za pomocą bota //stbr//. Szczegółowy opis jak to zrobić znajduje się w przewodniku [[pl:przewodniki:stbr-droga-by-wybrana-paczka-znalazla-sie-w-repo|stbr - droga by wybrana paczka znalazła się w repo]]. Na koniec wypada wspomnieć, że wspomniany CVS, z którego pobierane są spece, to zwykły publiczny CVS z prawami do odczytu. Dlatego można pracować na nim jak na zwykłym systemie kontroli wersji. Ale to już inna bajka.