Budowa prostych pakietów RPM

Z openSUSE wiki

System zarządzania oprogramowaniem w systemie openSUSE opiera się na Pakietach RPM. Są to tak zwane paczki, które zawierają oprócz samego programu również (zazwyczaj) jego biblioteki, dokumentację i inne zasoby. Choć pakietów RPM przeznaczonych dla openSUSE jest dużo, czasami zdarza się że jakiś program jest niezapaczkowany lub paczka zawiera program skompilowany z innymi opcjami niż życzy sobie użytkownik. W takim wypadku można samodzielnie skompilować i zainstalować program. Jednak tak zainstalowany program wymyka się spod kontroli zarządzania oprogramowaniem. W tym momencie z pomocą przychodzi program checkinstall, który pozwala tworzyć proste pakiety RPM zawierające samodzielnie skompilowane programy. Poniższy artykuł przestawia proces tworzenia takiej paczki. Pakiet, który zostanie tak wyprodukowany nie będzie prawdopodobnie zgodny ze wszystkimi założeniami dla pakietów zadanymi ogólnym opisem budowy pakietów RPM i może nie działać dla komputera innego niż Twój.

Spis treści

Przed instalacją

Przed instalacją, należy oczywiście ściągnąć źródła programu, który chcemy skompilować. Zazwyczaj są one spakowane w postaci

 nazwa-źródeł.tar.gz 

lub

 nazwa-źródeł.tar.bz2 

Są one spakowane odpowiednio programami Gzip i Bzip2. Jak rozpakować tak spakowane źródła będziesz mógł znaleźć w opisie posługiwania się archiwami. Po rozpakowaniu należy sprawdzić, czy nie ma tam plików INSTALL, README lub "readme.txt" z informacjami i zależnościami dla budowanego programu. Bez nich nasz program może sie nie skompilować.

Pierwsze kroki

W źródłach powinien (choć nie musi) znajdować się plik

 configure.sh 

Jest to skrypt sprawdzający, czy spełnione są zależności potrzebne do kompilacji programu ze źródeł oraz ustawiający informacje dla polecenia make. Odpalamy go spod konsoli jako normalny użytkownik:

 użytkownik@komputer $ ./configure 

Skrypt będzie przez jakiś czas sprawdzał konfigurację. Przykładowe kilka ostatnich linijek działania skryptu:

configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing default-1 commands

Jak widać skrypt na podstawie zebranych przez siebie informacji zbudował plik Makefile

Kompilacja programu

Dzięki wygenerowanemu przed chwilą plikowi makefile będziemy mogli w prosty sposób skompilować program. Wystarczy wydać polecenie (również jako zwykły użytkownik):

 użytkownik@komputer $ make 

Powinno się teraz pojawić dużo linii z wyjścia kompilatora. kompilacja programu może potrwać bardzo długo w zależności od powiązanych pakietów i rozmiaru źródeł (np. mi kompilacja źródeł wielkości 92 MB zajęła prawie 30 minut). Kompilacja powinna zakończyć się bez zwrócenia błędu (lub numer błędu to 0 - zero). Więcej o procesie kompilowania programu możesz dowiedzieć się na tej stronie.

Budowanie pakietu

Skoro mamy już nasz program skompilowany, możemy przystąpić do budowania naszego RPM'a. W tym celu wystarczy wydać jako root polecenie

 root@komputer # checkinstall 

aby komputer rozpoczął budowanie pakietu. Najpierw możemy zostać zapytani czy chcemy stworzyć domyślną dokumentację pakietu.

The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs?  [y]: 

W zależności od naszych potrzeb wybieramy Y(tak) lub N(nie). Następnie pojawi nam się "okno" wyboru konfiguracji którą chcemy zmienić.

This package will be built according to these values:

1 -  Summary: [ Package created with checkinstall 1.6.0 ]
2 -  Name:    [ kopete ]
3 -  Version: [ 0.12.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ kopete-0.12.0 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ kopete ]

Enter a number to change any of them or press ENTER to continue: 

Tutaj wybieramy numer opcji którą chcemy zmienić (np. dla zmiany architektury dla której pakiet jest przeznaczony wybieramy 7 i wpisujemy nową wartość). Teraz przykładowa konfiguracja pakietu wygląda tak:

1 -  Summary: [ Package created with checkinstall 1.6.0 ]
2 -  Name:    [ kopete ]
3 -  Version: [ 0.12.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ i686 ]
8 -  Source location: [ kopete-0.12.0 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ kopete ]

Jeśli wciśniemy klawisz ENTER rozpocznie się budowanie pakietu. Pakiet wynikowy będzie się znajdował w katalogu /usr/src/packages/RPMS/architektura-pakietu/nazwa-pakietu (w moim przypadku /usr/src/packages/RPMS/i686/kopete-0.12.0-1.i686.rpm). Możesz teraz zainstalować swój pakiet przechodząc do powyższego katalogu z RPM'em i wydając polecenie rpm:

root@komputer # rpm -Uvh nazwa-pakietu.rpm