Przejdź do głównej zawartości

Linux RHCE - Tworzenie własnych RPM

Kluczową umiejętnością administratora jest instalacja i konfiguracja oprogramowania. Po pierwsze trzeba wiedzieć jak stworzyć własną paczkę oprogramowania RPM zwierającą wybrane oprogramowanie. Początkowo może się to wydawać skomplikowane ale to tylko kwestia czasu jak proces ten stanie się bardzo prosty. Pakiety RPM zawierają skompresowane archiwum cpio zawierające dane w raz z dodatkowymi informacjami na temat zawartości. Dodatkowe informacje to lista oprogramowania zawarta w paczce i jego zależności. Zależności to listu pakietów i programów wymaganych do instalacji w systemie, które zapewnią poprawne działanie danego oprogramowania. Pakiet RPM budowany jest na podstawie spisu zawartego w pliku spec. RPM w wolnym tłumaczeniu oznacza menadżer pakietów RedHat-a ( Red Hat Package Manager) ale pomimo tego, iż w nazwie znajduję się RedHat jest to twór otwarty i dostępny dla każdego. Jego zadaniem jest instalacja, odświeżanie oraz usuwanie oprogramowania. Informację na temat zainstalowanego oprogramowania również są łatwo dostępne z bazy jaką tworzy RPM na temat zainstalowanego oprogramowania. Dzięki takiej bazie łatwo można sprawdzić czy dany pakiet znajduję się w systemie i co zawiera. 


TWORZENIE WŁASNEGO PAKIETU RPM

By utworzyć własny pakiet należy wykonać kilka prostych kroków:
  1. Utworzenie struktury katalogów
  2. Skopiowanie kodów źródłowych do utworzonej struktury 
  3. Utworzenie pliku spec
  4. Zbudowanie paczki RPM
Struktura jaką należy utworzyć zgodnie z zasadami tworzenia pakietów ma postać : 
  • BUILD          Przestrzeń przeznaczona na kompilacje oprogramowania 
  • RPMS           Zawiera binaria oprogramowania 
  • SOURCES    Trzyma kod źródłowy RPM 
  • SPEC             Zawiera plik spec ( jeden dla danego RPM) 
  • SRPMS         Zawiera źródła RPM podczas tworzenia paczki
Tworzenie RPM

Krok 1 - Instalacja wymaganych pakietów 

# yum inastall -y rpm-build make

Krok 2 - Weryfikacja instalacji pakietów 

# rpm -qa | grep rpm-build
rpm-build-4.8.0-19.el6.i686

# rpm -qa | grep make
make-3.81-19.el6.i686

Utworzenie struktury katalogów zazwyczaj wykonujemy w lokalizacji /usr/src/redhat ale można wykonywać to w innym miejscu z indywidualnym wyborem. 

Krok 3 - Utworzenie wymaganej struktury katalogów : 

# mkdir -p /usr/src/redhat/{BUILD,RPMS,SOURCES,SPEC,SRPMS,pliczki}

Katalog /pliczki stanowi tymczasowe miejsce w jakim tworzymy przykładowe pliki stanowiące zawartość paczki oraz jest to miejsce na ewentualne dodatkowe komponenty jeżeli będą potrzebne. W lokalizacji SOURCES znajdą się zarchiwizowane pliki (tar.gz) w jakich mieszczą się kody źródłowe oprogramowania , i z których zbudowany zostanie pakiet. Egzaminy RedHat wymagają aby budować jedynie pojedyncze paczki RPM tak więc nie potrzebujemy tu pełnych źródeł oprogramowania.  

Szybszym sposobem utworzenia struktury katalogów do celów budowy własnych RPM jest wykorzystanie polecenia:

# rpmbuild nazwa_pliku

Po tej operacji w katalogu domowym użytkownika zostanie utworzona struktura katalogów:


BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS



Krok 4 - Utworzenie lokalizacji dla przykładowych plików jakie znajdą się w paczce

#  cd /root/rpmbuild

# mkdir pliczki 

# touch plik{1,2,3,4,5,6,7,8,9}

Krok 5 - Utworzenie archiwum z przykładowych plików

# cd /root/rpmbuild

# tar cf pliczki.tar.gz pliczki/

# mv pliczki.tar.gz SOURCES/

Krok 6 - Ostatnim krokiem przed wykreowaniem paczki jest stworzenie pliku spec (sample.spec). Plik ten zawiera instrukcję używane do zbudowania paczki. Plik ten musi się znajdować w katalogu SPEC. Poniżej przykładowa zawartość pliku mająca zastosowanie do tworzenia przykładowej paczki. 

Name:pliczki


Version:1.0
Release:0
Summary:Paczka testowa pliczki
Group: Development/tools
License:GPL
Source0:%{name}.tar.gz
BuildRoot:      /root/rpmbuild/BUILDROOT/

%description
paczka testowa pliczki

%prep
%setup -n pliczki

%install
mkdir -p "$RPM_BUILD_ROOT/opt/mojapaczka"
cp -R * "$RPM_BUILD_ROOT/opt/mojapaczka"

%clean
rm -rf $RPM_BUILD_ROOT

%files
/opt/mojapaczka/

%post
chown mariusz:mariusz -R /opt/mojapaczka
chmod 775 -R /opt/mojapaczka

%changelog



Powyższy kod wymaga z pewnością troszkę wyjaśnień. Pierwszym głównym punktem są wszystkie informacje wymagane dla pakietu o których już była mowa gdy wyjaśniana była budowa paczki. Parametry "Source" oraz "BuildRoot" odgrywają istotną rolę ponieważ zawierają informację o budowie pakietu. Źródłem jest archiwum z jakiego pakiet będzie korzystać i w tym przykładzie będzie to utworzone wcześniej archiwum o nazwie pliczki.tar.gz znajdujące się w katalogu SOURCE. BuilitRoot jest parametrem wskazującym na lokalizację w jakiej faktycznie odbędzie się budowanie paczki. 

Reszta pliku spec stanowią opcję rozpoczynające się od znaku %

%description - sekcja umożliwiająca ustawienie opisu paczki 

%prep oraz %setup - Obie opcje odpowiadają za przeniesienie SOURCE do BUILD oraz rozpakowanie plików archiwum. Przełącznik -n informuję o nazwie katalogu jaki zostanie utworzony po przeprowadzeniu dekompresji. 

%install - opcja odpowiadająca zazwyczaj za lokalizację w jakich oprogramowanie jest kompilowane i zainstalowane w aktualnym systemie. Po instalacji pliki powinny być zebrane w taki sposób by mogły być zainstalowane za pośrednictwem pakietu jaki znajduje się w sekcji %files. W tym miejscu załączamy dowolne pliki jakie mają znaleźć się w paczce. Każdy katalog i podkatalog z plikami jaki znajdzie tutaj trafi również do paczki. Ponieważ tworzymy paczkę tylko z kilku plików możemy określić ścieżkę (opt/mojapaczka) w sekcji %install

Ostatnie dwie sekcję są niezbędne choć nie używane w tym przypadku i nie zostały poprzedzone znakiem % 

%clean - opcja odpowiedzialna za posprzątanie plików po utworzeniu pakietu. W tym przykładzie zostanie usunięty $RPM_BUILD_ROOT co jest jedyną lokalizacją wymagającą posprzątania. 

Używając %post umożliwia wykonanie dodatkowych skryptów lub poleceń po ukończeniu instalacji. 

Kwestię uprawnień dla użytkownika user01 zostały wyłączone z uwagi na fakt iż nie na każdym systemie musi znajdować się taki użytkownik. Teraz możemy zająć się budową pakietu.

Krok 7 - Utworzenie paczki wykorzystując polecenie rpmbuilit 

# rpmbuild -ba /root/rpmbuild/SPEC/pliczki.spec

Przebieg instalacji :


Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.QHAjaB
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd /root/rpmbuild/BUILD
+ rm -rf pliczki
+ /bin/tar -xvvf /root/rpmbuild/SOURCES/pliczki.tar.gz
drwxr-xr-x root/root         0 2013-01-02 09:21 pliczki/
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik3
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik8
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik9
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik1
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik4
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik7
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik5
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik6
-rw-r--r-- root/root         0 2013-01-02 09:21 pliczki/plik2
+ cd pliczki
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.nxUxnW
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd pliczki
+ mkdir -p /root/rpmbuild/BUILDROOT/pliczki-1.0-0.x86_64/opt/mojapaczka
+ cp -R plik1 plik2 plik3 plik4 plik5 plik6 plik7 plik8 plik9 /root/rpmbuild/BUILDROOT/pliczki-1.0-0.x86_64/opt/mojapaczka
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip
+ /usr/lib/rpm/brp-strip-static-archive
+ /usr/lib/rpm/brp-strip-comment-note
Processing files: pliczki-1.0-0.x86_64
Requires(interp): /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/pliczki-1.0-0.x86_64
warning: Could not canonicalize hostname: station1.example.com
Wrote: /root/rpmbuild/SRPMS/pliczki-1.0-0.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/pliczki-1.0-0.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.hBs6nb
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd pliczki
+ rm -rf /root/rpmbuild/BUILDROOT/pliczki-1.0-0.x86_64
+ exit 0


SPRAWDZENIE

Podczas budowy paczki można śledzić w oddzielnej sesji co dzieje się w katalogu ustawionym jako BUILIDROOT

#  watch -d -n 1 ls /root/rpmbuild/BUILDROOT/

Zobaczymy wtedy moment tworzenia paczki. 

Po utworzeniu paczki możemy wykonać jej instalacje w systemie: 

# rpm -ivh /root/rpmbuild/RPMS/x86_64/pliczki-1.0-0.x86_64.rpm

Po instalacji w katalogu jaki podaliśmy w sekcji %install pojawią się zawarte w paczce pliki. 

# cd /opt/mojapaczka 

# ll 

-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik1
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik2
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik3
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik4
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik5
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik6
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik7
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik8
-rwxrwxr-x. 1 mariusz mariusz 0 Jan  2 10:11 plik9

Aby odinstalować paczkę wydajemy polecenie :

# rpm -qa | grep pliczki     - wyszukanie zainstalowanej paczki 

# rpm -e pliczki-1.0-0.x86_64   - odinstalowanie paczki ( usunięty bedzie katalog /opt/mojapaczka)

PRZYDATNE LINKI 


Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości