  Menader Pakietw RedHat-a (RPM) - Jak To Zrobi
  Autor: Donnie Barnes djb@redhat.com
  V2.0, 8 Kwietnia 1997
  WWeerrssjjaa ppoollsskkaa:: JJaacceekk PPlliisszzkkaa pplliisszzkkaa@@ffuuww..eedduu..ppll

  Niniejszy dokument jest tumaczeniem RPM-HOWTO i w skrcie opisuje jak
  co zrobi uywajc rpm-a czyli Menadera Pakietw RedHat-a (RRedHat
  PPackage MManager).  Dokument ten zosta napisany w standardzie
  ISO-8859-2.  Orygina tumaczenia tego dokumentu znajduje si pod
  adresem http://www.jtz.org.pl <http://www.jtz.org.pl>.
  http://www.jtz.org.pl a take na ftp://ftp.icm.edu.pl/pub/Linux/sun
  site/docs/HOWTO/ <ftp://ftp.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/>.
  ______________________________________________________________________

  Table of Contents:

  1.      Wprowadzenie

  2.      Do czego suy RPM?

  3.      Informacje oglne

  3.1.    Skd wzi RPM?

  3.2.    Wymagania RPM

  4.      Uywanie RPM

  5.      A co tak

  6.      Tworzenie rpm-w.

  6.1.    Plik rpmrc

  6.2.    Plik specyfikujcy .spec

  6.3.    Nagwek

  6.4.    Sekcja Prep

  6.5.    Sekcja Build

  6.6.    Sekcja Install

  6.7.    Opcjonalne sekcje pre i post dla sekcji Install/Uninstall

  6.8.    Sekcja Files

  6.9.    Tworzenie pakietu

  6.9.1.  Katalogi z plikami rdowymi

  6.9.2.  Prbne tworzenie pakietu

  6.9.3.  Tworzenie listy plikw

  6.9.4.  Tworzenie pakietu RPM

  6.10.   Testowanie pakietu

  6.11.   Co robi z Twoimi nowymi RPM-ami ?

  6.12.   Co teraz?

  7.      Tworzenie RPM-w na wiele platform.

  7.1.    Przykadowy plik specyfikujcy .spec

  7.2.    Dyrektywa optflags

  7.3.    Makra

  7.4.    Wyczanie pewnych platform w pakietach

  7.5.    Ostatnie poprawki

  8.      Uwaga o prawach autorskich
  ______________________________________________________________________

  11..  WWpprroowwaaddzzeenniiee

  Skrt RPM pochodzi od ang.  RRed Hat PPackage MManager co oznacza w
  wolnym tumaczeniu menader pakietw RedHat-a.  Jednak pomimo tego, e
  w nazwie znajduje si Red Hat, to w zamierzeniu jest on systemem
  otwartym, dostpnym dla kadego. Umoliwia on spakowanie zarwno kodu
  rdowego jak i programw binarnych do zwartej postaci zawierajcej
  dodatkowo informacje istotne przy zarzdzaniu oprogramowaniem.
  Umoliwia to atw instalacj, odwieanie oraz usuwanie
  oprogramowania. Informacja o zainstalowanym oprogramowaniu jest atwo
  dostpna jako e RPM tworzy baz danych o wszystkich pakietach
  zainstalowanych w naszym systemie.  Pozwala to na szybkie sprawdzenie
  czy dany pakiet jest zainstalowany, a jeli tak to co zawiera, jaka
  jest jego wersja, jakie pliki zostay przez niego w systemie
  zainstalowane oraz jakich innych pakietw wymaga.  Pozwala te
  sprawdzi do jakiego pakietu naley dany plik.

  Przyp. tum. rpm jest obecnie uywany zarwno do plikw w postaci
  rdowej jak i binarnej. W oryginale autor odwouj si gwnie do
  tej pierwszej. Jednak poniewa obecnie czciej uywa si pakietw w
  postaci binarnej to pliki z ktrych powsta rpm a ktre maj by
  zainstalowane rwnie bd nazywa plikami rdowymi za proces
  instalacji bd kompilacji - instalacj.

  Firma Red Hat Software zachca inne firmy i grupy tworzce
  oprogramowanie do bliszego zapoznania si z RPM i wykorzystania go
  przy tworzeniu wasnych pakietw.  Bdc do elastycznym i atwym w
  uyciu, RPM pozwala budowa nawet bardzo obszerne zbiory pakietw.
  Pomimo tego, e jest to system cakowicie otwarty i dostpny, jego
  autorzy chtnie wysuchaj informacji o bdach i ewentualnych
  poprawkach.  (Jednak przed zgoszeniem ``bdu'' naley, tak jak
  zawsze, najpierw sprawdzi czy ma si najnowsz stabiln wersj,
  przejrze dokumentacj oraz przeszuka archiwa USENET i jeli i tam
  nie bdzie odpowiedzi - spyta na odpowiedniej grupie dyskusyjnej np.
  pl.comp.os.linux -przyp. tum.)  Uywanie i rozpowszechnianie RPM jest
  wolne od opat i regulowane Publiczn Licencj GNU - GPL (ang. GNU
  Public Licence).

  Bardziej szczegowa dokumentacja dotyczca RPM jest zawarta w ksice
  Eda Bailey'a, _M_a_x_i_m_u_m _R_P_M, ktra mona cign bd zakupi w
  www.redhat.com <http://www.redhat.com>.

  22..  DDoo cczzeeggoo ssuuyy RRPPMM??

  Na pocztku warto powiedzie co nieco o ``filozofii'' RPM.  Celem jego
  projektantw byo umoliwienie uycia pierwotnych kodw rdowych.
  Zanim powsta RPM, jego autorzy uywali RPP (przy czym podkrelaj, e
  RPM _n_i_e nie jest na nim oparty ), w ktrym udostpniano poprawione
  kody rdowe, konkretnie te, ktre byy uywane do instalacji.
  Teoretycznie mogoby to wystarczy, bo mona byo zainstalowa pakiet
  rdowy RPP i skompilowa go (poleceniem make) bez wikszych
  problemw.  Jednake nie byy to oryginalne rda i trudno byo na
  pierwszy rzut oka powiedzie co w nich zostao zmienione.  Niezbdnym
  byo cignicie rwnie oryginalnych rde.  RPM za zawiera
  oryginalne rda wraz z poprawkami ktrych dokonano. W opinii autorw
  rozwizanie to jest znacznie lepsze. Dlaczego?

  Z paru powodw. Po pierwsze, jeli pojawi si nowa wersja programu to
  nie zaczynamy od zera. Niektre poprawki, ktre byy dobre dla
  poprzedniej wersji, mog by waciwe, najwyej po minimalnych
  zmianach i dla obecnej. By si o tym przekona, wystarczy do nich
  zajrze.  Poza tym wszystkie domylne opcje potrzebne do instalacji s
  w ten sposb atwo dostpne.

  Poza tym RPM zaprojektowano tak, aby umoliwi sprawdzanie wielu
  istotnych informacji dotyczcych zarwno pojedyczego, konkretnego
  pakietu jak i ich zestawu bd te wszystkich pakietw zainstalowanych
  w danym systemie.  Przykadem takiej informacji jest lista pakietw,
  ktrych dany pakiet wymaga wraz z numerami wersji.  Moliwe jest
  rwnie sprawdzenie z jakiego pakietu pochodzi konkretny plik oraz
  gdzie mona znale jego wersj rdow.  Pliki RPM s ju
  wewntrznie spakowane, ale sprawdzanie informacji dotyczcych
  konkretnego pakietu jest proste i _s_z_y_b_k_i_e dziki specjalnemu binarnemu
  nagwkowi ktry zawiera praktycznie wszystkie niezbdne informacje o
  pakiecie.

  Innym atutem RPM jest umiejtno weryfikacji  pakietw.  Jeli boisz
  si, e skasowae jaki wany plik, to moesz to po prostu sprawdzi.
  RPM poinformuje Ci o wykrytych nieprawidowociach. Jeli zajdzie
  potrzeba, to moesz atwo odnowi zainstalowany pakiet przy czym Twoje
  pliki konfiguracyjne zostan zachowane.  Oczywicie moesz te
  zainstalowa je od nowa.

  Autorzy chc podzikowa grupie ludzi od dystrybucji BOGUS za wiele
  ich idei i pomysw ktre wykorzystano w RPM.  Gdy o ile RPM zosta
  napisany w caoci przez Red Hat Software, to zasady jego dziaania s
  oparte na kodzie stworzonym przez BOGUS (PM oraz PMS).

  33..  IInnffoorrmmaaccjjee ooggllnnee

  33..11..  SSkkdd wwzzii RRPPMM??

  Najprostszym sposobem jest instalacja Linux-a Red Hat.  Jeli kto nie
  chce tego robi to moe uywa RPM bez tego. W Polsce RPM jest
  dostpny np. pod adresem: ftp.icm.edu.pl
  <ftp://ftp.icm.edu.pl/pub/redhat/code/rpm> - polskim mirrorze
  ftp.redhat.com.

  33..22..  WWyymmaaggaanniiaa RRPPMM

  Podstawowym wymaganiem RPM-a jest cpio o numerze wersji 2.4.2 lub
  wyszym. Mimo e RPM jest pomylany do pracy pod Linux-em to rwnie
  moe by przeniesiony na inne systemy Unix. W rzeczywistoci udao si
  go ju uruchomi pod SunOS, Solaris, AIX, Irix, AmigaOS i wieloma
  innymi systemami.  Jednak naley pamita, e pakiety binarne
  stworzone na rnych Unix-ach mog nie by ze sob zgodne.
  S to minimalne wymagania by zainstalowa RPM-y.  By tworzy RPM-y z
  kodu rdowego potrzebne jest rwnie wszystko to co normalnie jest
  wymagane przy tworzeniu pakietu np.  gcc, make, itd.

  44..  UUyywwaanniiee RRPPMM

  Najprostszym wykorzystaniem RPM jest instalacja nowego pakietu:

               rpm -i foobar-1.0-1.i386.rpm

  Rwnie proste jest jego odinstalowanie:

               rpm -e foobar

  Przykadem bardziej zoonego, ale  _b_a_r_d_z_o uytecznego polecenia jest
  instalacja pakietw poprzez FTP. Jeli jeste podczony do sieci i
  chcesz zainstalowa nowy pakiet, to wszystko co musisz zrobi to poda
  nazw pliku jako poprawny URL, np.:

               rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm

  Chciabym podkreli, e w tym przypadku RPM sprawdzi bd zainstaluje
  pakiet poprzez FTP.

  Byy to w miar proste polecenia, lecz rpm moe by uyty na wiele
  wicej sposobw jak mona si atwo przekona piszc w linii komend

               rpm

  i naciskajc Enter:

  RPM version 2.3.9
  Copyright (C) 1997 - Red Hat Software
  This may be freely redistributed under na warunkach
   of the
  GNU Public License

  usage: rpm {--help}
         rpm {--version}
         rpm {--initdb}   [--dbpath <dir>]
         rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]
                          [--replacepkgs] [--replacefiles] [--root <dir>]
                          [--excludedocs] [--includedocs] [--noscripts]
                          [--rcfile <file>] [--ignorearch] [--dbpath <dir>]
                          [--prefix <dir>] [--ignoreos] [--nodeps]
                          [--ftpproxy <host>] [--ftpport <port>]
                          file1.rpm ... fileN.rpm
         rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]
                          [--oldpackage] [--root <dir>] [--noscripts]
                          [--excludedocs] [--includedocs] [--rcfile <file>]
                          [--ignorearch]  [--dbpath <dir>] [--prefix <dir>]
                          [--ftpproxy <host>] [--ftpport <port>]
                          [--ignoreos] [--nodeps] file1.rpm ... fileN.rpm
         rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]
                          [--scripts] [--root <dir>] [--rcfile <file>]
                          [--whatprovides] [--whatrequires] [--requires]
                          [--ftpuseport] [--ftpproxy <host>] [--ftpport <port>]
                          [--provides] [--dump] [--dbpath <dir>] [targets]
         rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]
                          [--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]
                          [--nomd5] [targets]
         rpm {--setperms} [-afpg] [target]
         rpm {--setugids} [-afpg] [target]
         rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]
                          [--dbpath <dir>] [--nodeps] [--allmatches]
                          package1 ... packageN
         rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile  <file>]
                          [--sign] [--test] [--timecheck <s>] specfile
         rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
         rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
         rpm {--resign} [--rcfile <file>] package1 package2 ... packageN
         rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN
         rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>]
                             package1 ... packageN
         rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]
         rpm {--querytags}

  Wszystkie te opcje s opisane w podrczniku systemowym "man"
  dotyczcym RPM.

  55..  AA ccoo ttaakk _n_a_p_r_a_w_d_ mmoonnaa zzrroobbii zz RRPPMM??

  RPM jest bardzo wygodnym narzdziem i jak mona byo si przekona, ma
  sporo opcji.  Najlepsz metod zapoznania si z nimi s przykady.

  Pokazaem ju najprostsz instalacj i usuwanie pakietw, czas na
  troch ciekawsze przykady:

    W praktyce instalujc pakiet chce si usunc jego star wersj
     (opcja -U od ang. upgrade). Czsto chcemy rwnie widzie postp
     instalacji (-h od ang. hash) oraz dosta poszerzone komunikaty o
     bdach (-v od ang. verbose), tak wic praktycznie najczciej
     pakiety instaluje si poprzez:
               rpm -Uhv foobar-1.0-1.i386.rpm

    Powiedzmy, e skasowae przypadkiem jakie pliki, niestety, nie
     znasz nawet ich nazw.  Jeli wic chcesz zweryfikowa cay system i
     sprawdzi czego moe brakowa, zrb tak:

       rpm -Va

  (od ang. Verify all)

    Powiedzmy, e natkne si na plik, ktrego nie znasz.  eby
     sprawdzi do jakiego pakietu naley, zrb:

       rpm -qf /usr/X11R6/bin/xjewel

  (od ang. query file).  W wyniku otrzymasz nazw pakietu:

       xjewel-1.6-1

    Natkne si na jaki plik RPM i chciaby sprawdzi co jest w
     rodku. Zrb tak:

       rpm -qpi koules-1.2-2.i386.rpm

  Wywietli Ci si co takiego:

       Name        : koules                      Distribution: Red Hat Linux Colgate
       Version     : 1.2                               Vendor: Red Hat Software
       Release     : 2                             Build Date: Mon Sep 02 11:59:12 1996
       Install date: (none)                        Build Host: porky.redhat.com
       Group       : Games                         Source RPM: koules-1.2-2.src.rpm
       Size        : 614939
       Summary     : SVGAlib action game with multiplayer, network, and sound support
       Description :
       This arcade-style game is novel in conception and excellent in execution.
       No shooting, no blood, no guts, no gore.  The play is simple, but you
       still must develop skill to play.  This version uses SVGAlib to
       run on a graphics console.

  (od ang. query package info).

    A teraz chciaby sprawdzi jakie pliki wchodz w skad tego
     pakietu:

       rpm -qpl koules-1.2-2.i386.rpm

  W wyniku otrzymasz ich list:

       /usr/doc/koules
       /usr/doc/koules/ANNOUNCE
       /usr/doc/koules/BUGS
       /usr/doc/koules/COMPILE.OS2
       /usr/doc/koules/COPYING
       /usr/doc/koules/Card
       /usr/doc/koules/ChangeLog
       /usr/doc/koules/INSTALLATION
       /usr/doc/koules/Icon.xpm
       /usr/doc/koules/Icon2.xpm
       /usr/doc/koules/Koules.FAQ
       /usr/doc/koules/Koules.xpm
       /usr/doc/koules/README
       /usr/doc/koules/TODO
       /usr/games/koules
       /usr/games/koules.svga
       /usr/games/koules.tcl
       /usr/man/man6/koules.svga.6

  (od ang. query package list)

    Chcesz wywietli list pakietw zainstalowanych w Twoim systemie?
     Nic prostszego:

       rpm -qa

  (od ang. query all).

    Chcesz sprawdzi czy pakiet jest kompletny, nie przekamany i mam
     poprawny podpis PGP?

       rpm -K -vv pakiet.rpm

  To byo tylko par przykadw, wicej znajdziesz np. w man-ie.  Na
  pewno wpadniesz na ciekawsze w miar jak bdziesz lepiej poznawa RPM.

  66..  TTwwoorrzzeenniiee rrppmm--ww..

  Tworzenie rpm-w jest do proste, szczeglnie jeli oprogramowanie
  ktre chcesz w nie woy poprawnie si instaluje.

  Procedura tworzenia RPM-w wyglda tak:

    Upewnij si, e plik /etc/rpmrc jest obecny i poprawnie
     skonfigurowany w Twoim systemie.

    Doprowad to tego, e pliki rdowe dla ktrych tworzysz rpm
     poprawnie si instaluj.

    Przygotuj list poprawek jakich musiae dokona by kod kompilowa
     si poprawnie.

    Przygotuj plik specyfikujcy (.spec) dla Twojego pakietu.

    Upewnij si, e wszystko jest na swoim miejscu.

    Zbuduj pakiet uywajc rpm.

  Zazwyczaj RPM tworzy zarwno pakiety binarne jak i rdowe.

  66..11..  PPlliikk rrppmmrrcc

  W chwili obecnej, jedyny sposb konfiguracji RPM-a jest dostpny
  poprzez plik /etc/rpmrc.  Przykadowy plik wyglda tak:

       require_vendor: 1
       distribution: Moja wasna dystrybucja!
       require_distribution: 1
       topdir: /usr/src/me
       vendor: Kubusoft
       packager: Pakujcy RPM w Kubusoft <pakiety@kubusoft.com.pl>

       optflags: i386 -O2 -m486 -fno-strength-reduce
       optflags: alpha -O2
       optflags: sparc -O2

       signature: pgp
       pgp_name: Pakujcy RPM w Kubusoft
       pgp_path: /home/pakiety/.pgp

       tmppath: /usr/tmp

  Wiersz require_vendor zmusza RPM-a do szukania wiersza z nazw
  producenta pakietw (vendor).  Ta moe pochodzi z pliku /etc/rpmrc
  lub z nagwka pliku .spec.  By wyczy t opcj, zmie liczb na 0.
  Analogicznie jest w przypadku wierszy require_distribution oraz
  require_group.

  Nastpnym wiersz zawiera  distribution i okrela nazw dystrybucji.
  Moesz j zdefiniowa tutaj, bd pniej, w nagwku pliku
  specyfikujcego.  Tworzc pakiet dla konkretnej dystrybucji warto
  zadba by wiersz ten zawiera poprawn informacj, nawet pomimo tego,
  e nie jest wymagany.  Tyczy si to rwnie wiersza vendor
  (producent), cho nazwa moe by zupenie dowolna (np. Joe's Software,
  Rock Music Emporium).

  RPM pozwala rwnie tworzy pakiety dla rnych platform sprztowych.
  Plik rpmrc moe zawiera zmienn ``optflags'' wykorzystywan przy
  building budowaniu tych elementw pakietu, ktre wymagaj opcji
  zalenych od platformy.  Dokadniejszy opis tej zmiennej pojawi si w
  jednym z nastpnych rodziaw.

  Nie s to oczywicie wszystkie etykiety/makra.  Jest ich wicej. By
  si im przyjrze sprbuj komendy:

       rpm --showrc

  ktra powinna wypisa wszystkie moliwe etykiety wraz z ich
  wartociami (o ile s ustawione).

  66..22..  PPlliikk ssppeeccyyffiikkuujjccyy ..ssppeecc

  Niniejszy rozdzia zawiera opis pliku specyfikujcego dla pakietu.
  Plik taki s niezbdne by stworzy pakiet.  Zawiera on opis
  oprogramowania wraz z instrukcjami instalacyjnymi oraz list
  wszystkich plikw binarnych przez niego instalowanych.

  Plik specyfikujcy warto jest nazwa zgodnie z konwencj.  Powinno to
  wyglda mniej wicej tak: nazwa pakietu-kreska-numer wersji-kreska-
  numer modyfikacji-kropka-spec.

  A tak wyglda przykadowy plik specyfikujcy (eject-3.0-1.spec):

       Summary: ejects ejectable media and controls auto ejection
       Name: eject
       Version: 1.4
       Release: 3
       Copyright: GPL
       Group: Utilities/System
       Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
       Patch: eject-1.4-make.patch
       Patch1: eject-1.4-jaz.patch
       %description
       This program allows the user to eject media that is autoejecting like
       CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.

       %prep
       %setup
       %patch -p1
       %patch1 -p1

       %build
       make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

       %install
       install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
       install -m 644 -o 0 -g 0 eject.1 /usr/man/man1

       %files
       %doc README COPYING ChangeLog

       /usr/bin/eject
       /usr/man/man1/eject.1

  66..33..  NNaaggwweekk

  Nagwek pliku .spec zawiera kilka standardowych pl ktre powinny by
  wypenione. Oto znaczenie poszczeglnych pl:
    Summary: Jest to jednowierszowy, skrcony opis pakietu.

    Name: To pole zawiera nazw pliku rpm.  cile jest to string
     bdcy t czci nazwy pliku rpm ktra odpowiada nazwie pakietu.

    Version: To pole zawiera wersj pliku rpm.  cile jest to string
     bdcy t czci nazwy pliku rpm ktra odpowiada wersji pakietu.

    Release: To pole zawiera numer modyfikacji pliku rpm. Jest to
     liczba mwica z ktr modyfikacj (podwersj) obecnej wersji
     pakietu mamy do czynienia (tzn. jeli dokonany w pakiecie tylko
     minimalnych poprawek bdw to wypuszczamy pakiet w tej samej
     wersji ale z numerem modyfikacji wikszym o jeden).

    Icon: To pole zawiera nazw pliku z ikon przeznaczon do
     wykorzystania przez narzdzia instalacyjne wyszego poziomu (np.
     ``glint'' RedHat-a). Plik ten powinien by zapisany w formacie GIF
     i znajdowa si w katalogu SOURCES.

    Source: This wiersz zawiera nazw pliku rdowego z ktrego jest
     budowany dany rpm.  Jest to pomocne w sytuacji gdy chce si kiedy
     zajrze do odpowiednich kodw rdowych lub sprawdzi czy nie ma
     ich nowszej wersji.  Uwaga:  Nazwa pliku w tym wierszu MUSI
     odpowiada nazwie pliku obecnego w Twoim systemie.  (tzn. nie
     zmieniaj nazw plikw rdowych po ich cigniciu).  Mona poda
     wicej ni jeden plik rdowy piszc w poniszy sposb:

       Source0: blah-0.tar.gz
       Source1: blah-1.tar.gz
       Source2: fooblah.tar.gz

  Te pliki powinny si znale w katalogu SOURCES.  (Struktura tego kat
  alogu jest opisana w rozdziale "Katalogi z plikami rdowymi".)

    Patch: To pole zawiera miejsce w ktrym bdzie mona znale
     poprawki(patch) jeli zainstnieje potrzeba ich ponownego
     cignicia.  Uwaga:  Nazwa tego pliku musi odpowiada nazwie pliku
     jaki jest uyty do naniesienia Twoich poprawek.  Mona te poda
     wiele plikw z poprawkami analogicznie do wielu plikw rdowych:

       Patch0: blah-0.patch
       Patch1: blah-1.patch
       Patch2: fooblah.patch

  Te pliki powinny si znale w katalogu SOURCES.

    Copyright: Ten wiersz opisuje do jakiej kategorii ze wzgldu na
     prawo autorskie naley dane oprogramowanie. Najlepiej wykorzysta
     jedn z dobrze zdefiniowanych kategorii: GPL, BSD, MIT, public
     domain, distributable, lub commercial.

    BuildRoot: Ten wiersz pozwala zdefiniowa gwny katalog (``root'')
     dla tworzenia i instalacji pakietu.  Mona to wykorzysta np. do
     testowania instalacji pakietu zanim si go zainstaluje w docelowym
     miejscu.

    Group: Ten wiersz suy do tego, by programy instalacyjne wyszego
     poziomu (wspomniany ``glint'') wiedziay w jakim miejscu ich
     hierarchicznej struktury grup pakietw umieci dany pakiet.  W
     chwili obecnej drzewo grup pakietw wyglda mniej wicej tak:

       Applications
           Communications
           Editors
               Emacs
           Engineering
           Spreadsheets
           Databases
           Graphics
           Networking
           Mail
           Math
           News
           Publishing
               TeX
       Base
           Kernel
       Utilities
           Archiving
           Console
           File
           System
           Terminal
           Text
       Daemons
       Documentation
       X11
           XFree86
               Servers
           Applications
               Graphics
               Networking
           Games
               Strategy
               Video
           Amusements
           Utilities
           Libraries
           Window Managers
       Libraries
       Networking
           Admin
           Daemons
           News
           Utilities
       Development
           Debuggers
           Libraries
               Libc
           Languages
               Fortran
               Tcl
           Building
           Version Control
           Tools
       Shells
       Games

    %description  Nie jest to element nagwka w cisym tego sowa
     znaczeniu ale jego opis powinien si znale wraz z opisem
     nagwka. Dla kadego pakietu lub subpakietu potrzebne jest jedno
     takie pole zawierajce przejrzysty i zrozumiay opis pakietu.

  66..44..  SSeekkccjjaa PPrreepp

  Jest to druga cz pliku specyfikujcego.  Uywa si jej do
  przygotowania rde do kompilacji/instalacji.  W niej powinny
  znajdowa si wszystkie czynnoci niezbdne by nanie poprawki do
  rde i doprowadzi je do stanu w ktrym bdzie mona wyda komend
  make.

  Jedn rzecz naley podkreli: Kada z tych czci jest tak naprawd
  tylko miejscem do umieszczenia odpowiednich skryptw.  Moesz po
  prostu napisa skrypt w sh a nastpnie umieci go po znaczniku %prep
  by rozpakowa i wprowadzi poprawki do swoich programw.  By to
  uatwi powstay specjalne makra.

  Pierwszym z nich jest makro %setup.  W swojej najprostszej formie (bez
  dodatkowych opcji w linii polece), rozpakowywuje ona rda i zmienia
  biecy katalog na katalog zawierajcy rda.  Poza tym ma jednak
  dodatkowe opcje:

    -n name ustawi nazw roboczego katalogu na name.  Domylnie jest to
     $NAZWA-$WERSJA.  Do innych moliwoci nale $NAZWA,
     ${NAZWA}${WERSJA}, czy jakakolwiek inna uywana przez gwny plik
     tar.  (Prosz zauway, e zmienne ``$'' _n_i_e s faktycznymi
     zmiennymi dostpnymi wewntrz pliku specyfikujcego. W
     rzeczywistoci s one tutaj uyte w miejsce przykadowej nazwy. W
     pakiecie naley uy rzeczywistej nazwy i wersji, a nie zmiennej.)

    -c utworzy i wejdzie do wymienionego katalogu _z_a_n_i_m zacznie si
     rozpakowywanie poprzez untar.

    -b # wykona untar (rozpakuje) Source# _z_a_n_i_m wejdzie do katalogu
     roboczego (nie ma sensu czenie tej opcji z -c, a wic si tego
     nie robi).  Jest to przydatne w przypadku wielu plikw rdowych.

    -a # wykona untar (rozpakuje) Source# _p_o wejciu do katalogu.

    -T Ta opcja zmienia domyln procedur rozpakowywania  (untar)
     rde i wymaga -b 0 lub -a 0 by gwny plik rdowy zosta
     rozpakowany (untar).  Komenda ta jest potrzebna gdy uywany jest
     wicej ni jeden komplet plikw rdowych.

    -D _N_i_e usuwaj katalogu przed rozpakowaniem.  Jest ona przydatna
     tylko wtedy, gdy ma si wicej ni jedno makro konfiguracyjne.
     Powinna by uywana _w_y___c_z_n_i_e w makrach konfiguracyjnych wycznie
     _p_o wykonaniu pierwszego z nich (ale nigdy wwntrz pierwszego z
     nich).

  Nastpne dostpne makra znajduj si w makrze %patch.  Makro te pomaga
  zautomatyzowa proces nanoszenie poprawek do rde.  Moliwe s
  liczne opcje opisane poniej:

    # zastosuje Patch# jako plik z poprawkami.

    -p # podaje liczb katalogw do odrzucenia z nazwy przed
     wykorzystaniem polecenia patch(1)

    -P Domylnie stosowana jest Patch (lub Patch0).  Ta flaga wycza
     to zachowanie a wic wymaga dodatkowo 0 by gwne pliki rdowe
     zostay rozpakowane. Opcja ta jest przydatna w drugim (bd
     dalszym) makrze %patch ktre wymaga innego ni pierwsze makro
     numeru poprawki.

    Mona te napisa %patch# zamiast : %patch # -P

  To s wszystkie makra jakich potrzebujesz. Po ich poprawnym napisaniu
  mona wykona dowolne inne komendy konfiguracyjne poprzez stworzenie
  odpowiednich fragmentw skryptw w sh.  Wszystko co zostanie
  umieszczone a do makra %build (omawianego w nastpnym rozdziale)
  bdzie wykonane przez sh.  Przykady powyej mog sugerowa rzeczy
  jakie chciaby tam umieci.

  66..55..  SSeekkccjjaa BBuuiilldd

  Dla tej sekcji nie ma jakich specjalnych makr.  Powinno si w niej
  umieszcza dowolne polecenia potrzebne do stworzenia pakietu po
  rozpakowaniu rde, naniesieniu poprawek i przejciu do katalogu
  roboczego. Jest to po prostu nastpny zbir polece przekazany do sh,
  wic mona tu uywa dowolnych poprawnych polece sh (wcznie z
  komentarzami).  KKaattaalloogg rroobboocczzyy nnaa ppoocczzttkkuu kkaaddeejj zz sseekkccjjii jjeesstt
  uussttaawwiiaannyy nnaa kkaattaalloogg ggwwnnyy zz pplliikkaammii rrddoowwyymmii, o czym trzeba
  pamita i w razie potrzeby przechodzi do odpowiednich podkatalogw.

  66..66..  SSeekkccjjaa IInnssttaallll

  Tu rwnie nie ma jakich specjalnych makr. Sekcja ta powinna zawiera
  list polece potrzebnych do instalacji pakietu. Jeli wykonujesz make
  install by zainstalowa pakiet, umie to tu.  Moesz rwnie nanie
  poprawki do makefile'a zanim wykonasz make install. Jeli nie to
  umie tu sekwencj polece sh jakich potrzebujesz. Katalog roboczy,
  identycznie jak w poprzednim przypadku, jest ustawiany przed
  wykonaniem tych polece na gwny katalog z plikami rdowymi.

  66..77..  OOppccjjoonnaallnnee sseekkccjjee pprree ii ppoosstt ddllaa sseekkccjjii IInnssttaallll//UUnniinnssttaallll

  Moesz tu umieci skrypty do wykonania przed i po
  instalacji/deinstalacji (tzn. sekcjami Install/Uninstall).  Gwny
  powd to np. potrzeba wykonania komendy ldconfig po instalacji bd
  usuwaniu pakietw zawierajcych biblioteki dzielone. Makra s
  zdefiniowane jak poniej:

    %pre makro z poleceniami wykonywanymi przed sekcj Install.

    %post makro z poleceniami wykonywanymi po sekcji Install.

    %preun makro z poleceniami wykonywanymi przed sekcj Uninstall.

    %postun makro z poleceniami wykonywanymi po sekcji Uninstall.

  Sekcje te mog zawiera dowolne poprawne polecenia sh ( _n_i_e
  potrzebujesz wstawia #!/bin/sh na pocztku).

  66..88..  SSeekkccjjaa FFiilleess

  W sekcji tej _m_u_s_i_s_z wypisa pliki jakie wchodz w skad pakietu. RPM
  nie potrafi okreli jakie pliki zostaj zainstalowan na skutek np.
  make install.  Tego si po prostu  _N_I_E _D_A rozsdnie zrobi.  Owszem,
  bya propozycja wykonywania polecenia find przed i po instalacji
  pakietu. Jednak w systemach wielouytkownikowych nie jest to zbyt
  sensowne gdy w tym samym czasie mogo powsta wiele innych plikw nie
  majcych najmniejszego zwizku z instalowanym pakietem.

  W tej sekcji dostpne jest pare specjalnych makr.  S one opisane
  poniej:

    %doc suy do zaznaczenia ktre pliki pakietu s jego dokumentacj.
     Dokumentacja ta zostanie umieszczona w katalogu:
     /usr/doc/$NAZWA-$WERSJA-$MODYFIKACJA.  Mona zarwno poda nazwy
     kilku plikw w linii zawierajcej to makro jak i poda te nazwy
     oddzielnie uywajc makra dla kadej z nich.

    %config suy do zaznaczenia plikw konfiguracyjnych w obrbie
     pakietu. Chodzi tu o pliki typu: sendmail.cf, passwd, etc. W
     trakcie deinstalacji pliki te s usuwane o ile nie byy zmieniane.
     Jeli byy, to ich nazwa zostaje zmieniona poprzez dodanie kocwki
     Analogicznie jak dla plikw z dokumentacj jedno makro moe suy
     do zdefiniowania kilku takich plikw.

    %dir zaznacza dany katalog jako nalecy do pakietu. Domylnie,
     jeli pojawi si nazwa katalogu _B_E_Z  makra %dir, _W_S_Z_Y_S_T_K_O w tym
     katalogu jest wczane w liste plikw i nastpnie instalowane jako
     cz pakietu. To makro pozwala tego unikn.

    %files -f <filename> pozwala na wczenie listy plikw znajdujcej
     si w jakim pliku w obrbie katalogu z plikami rdowymi.  Jest
     to wygodne gdy procedura instalacji buduje wasn list plikw
     ktr nastpnie mona wczy jedn komend bez podawania nazw tych
     plikw.

  Najwiksz trudnoci w licie plikw jest podawanie katalagw. Jeli
  np. podasz przez pomyk /usr/bin, to Twj pakiet rpm bdzie zawiera
  _w_s_z_y_s_t_k_i_e pliki w katalogu /usr/bin w Twoim komputerze.

  66..99..  TTwwoorrzzeenniiee ppaakkiieettuu

  66..99..11..  KKaattaallooggii zz pplliikkaammii rrddoowwyymmii

  Jedn z podstawowych rzeczy jest poprawnie skonfigurowane katalogw w
  ktrych RPM bdzie budowa pakiet.  Robi si to poprzez plik
  /etc/rpmrc.  Wikszo osb uywa po prostu /usr/src.

  Moliwe, e bdziesz potrzebowa utworzy ponisze katalogi:

    BUILD jest katalogiem w ktrym RPM buduje pakiet.  Prbne tworzenie
     pakietu moesz wykona w jakimkolwiek katalogu ktry tu podasz.

    SOURCES jest katalogiem w ktrym powiniene umieci oryginalne
     pliki rdowe i pliki z poprawkami. Jest to miejsce do ktrego RPM
     bdzie zaglda domylnie.

    SPECS jest katalogiem w ktrym powinny si znale wszystkie pliki
     specyfikujce (spec).

    RPMS RPM umieci tu binarme pliki RPM po ich zbudowaniu.

    SRPMS RPM umieci to pliki RPM z plikami rdowymi.

  66..99..22..  PPrrbbnnee ttwwoorrzzeenniiee ppaakkiieettuu

  Pierwsz rzecz do zroienia jest doprowadzenie plikw rdowych do
  takiego stanu by kompiloway i/lub instaloway si bez pomocy RPM-a.
  By to osign, rozpakuj rda i zmie nazw katalogu na $NAZWA.orig.
  Nastpnie ponownie rozpakuj rda i pracuj na nich.  Wejd do ich
  katalogu i postpuj zgodnie z instrukcjia ich instalacji/kompilacji.
  Jeli bdzie konieczna edycja jakich plikw to konieczne bdzie
  wygenerowanie pliku z poprawkami (patch).  Jeli doprowadzisz rda
  do stanu w ktrym bd si poprawnie instalowa/kompilowa - wyczy
  katalog rdowy.  Upewnij si, e wszystkie pliki stworzone w
  skrypcie konfiguracyjnym (configure) zostay usunite.  Nastpnie
  wyjd z katalogu rdowego i wykonaj co takiego:

               diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch

  (dirname w tym przykadzie to to samo co $NAZWA par linii powyej).
  Polecenie to stworzy plik z poprawkami jaki bdzie mg by wykorzys
  tany w pliku specyfikujcy.  Zauwa, e ``linux'' w nazwie pliku z
  poprawkami jest jakim wybranym identyfikatorem.  Zamiast tego mona
  uy czego bardziej precyzyjnego jak np. ``config'' lub ``bugs''
  (bdy) by opisa _d_l_a_c_z_e_g_o poprawki byy potrzebne.  Przed uyciem
  pliku z poprawkami warto do niego zajrze by si upewni, e przypad
  kiem nie znalazo si w nim co niewaciwego jak np. pliki binarne.

  66..99..33..  TTwwoorrzzeenniiee lliissttyy pplliikkww

  Teraz, gdy rda si kompiluj i instaluj i wiadomo jak to robi to
  zrb to, skompiluj i zainstaluj.  Przyjrzyj si wynikowi instalacji i
  stwrz w ten sposb list plikw do uycia w pliku specyfikujcym.
  Zazwyczaj plik specyfikujcy powstaje rwnoczenie z opisywanymi tu
  krokami.  Po prostu tworzy si go na pocztku wstawiajc to co jest
  znane i potem w miar postpu prac uzypenia si go o brakujce
  kawaki.

  66..99..44..  TTwwoorrzzeenniiee ppaakkiieettuu RRPPMM

  Gdy plik specyfikujcy jest gotowy, mona ju prbowa tworzy nowy
  pakiet. Najwygodniej jest to zrobi poniszym poleceniem:

               rpm -ba foobar-1.0.spec

  Opcja -b ma par interesujcyh podopcji:

    p oznacza wykonanie sekcji prep pliku specyfikujcego.

    l wykona par rnych testw na plikach %files.

    c wykonaj sekcj prep i kompiluj.  Jest to przydatne gdy jest si
     niepewnym czy rda w ogle bd si kompilowa/instalowa.
     Owszem, na pierwszy rzut oka moe to wyglda na zbdne gdy mona
     dotd pracowa ze rdami a bd si kompilowa jednak gdy
     przyzwyczaisz si do wykorzystania RPM-a to spotkasz si z
     sytuacjami w ktrach ta opcja okae si przydatna.

    i wykonaj prep, kompiluj i instaluj.

    b prep, kompiluj, instaluj, i buduj jedynie pakiet binarny.

    a zbuduj wszystko - zarwno pakiet rdowy jak i binarny.

     Jest te par dodatkowych podopcji do opcji -b:

    --short-circuit przejdzie prosto do okrelonego etapu (moe by
     uyte wycznie z c oraz i)

    --clean usuwa katalog ze rdami stworzony w czasie budowania
     pakietu.

    --keep-temps zachowa wszystkie pliki temporalne i skrypty ktre
     zostay umieszczone w /tmp. Jakie s to pliki mona si dowiedzie
     wykorzystujc opcj -v.

    --test nie wykonuje adnych rzeczywistych etapw cho wykonuje
     keep-temps.

  66..1100..  TTeessttoowwaanniiee ppaakkiieettuu

  Po stworzeniu pakietu rpm rdowego i binarnego naley je
  przetestowa. Najprociej i najlepiej jest wykorzysta do tego
  zupenie inny komputer ni ten na ktrym pakiet by tworzony. W kocu
  przy tworzeniu pakietu by on do czsto instalowany i na komputerze
  na ktrym powstawa powinno by to zrobione do dobrze.

  Mona te prbowa rpm -u nazwapakietu.rpm na testowanym pakiecie ale
  moe by to zdradliwe w sytuacji w ktrej jakie pliki zostay
  pominite w licie plikw i nie zostan wtedy usunite.  Wtedy
  zainstalowany program bdzie kompletny mimo tego, e rpm bdzie
  bdny. Pamitaj, e poniewa Ty ju zrobie rpm -ba package, to
  zdecydowana wikszo osb instalujcych Twj pakiet wykona jedynie
  rpm -i package. Upewnij si, e nie wykonujesz w sekcjach build lub
  install czego co powinno by zrobione gdy instalowany jest wycznie
  pakiet binarny.

  66..1111..  CCoo rroobbii zz TTwwooiimmii nnoowwyymmii RRPPMM--aammii ??

  Gdy ju stworzye swj wasny pakiet RPM (zakadajc, e nie ma ju
  takiego pakietu dostpnego pod postaci RPM) moesz udostpni wynik
  swojej pracy innym (zakadajc e to czego pakiet stworzye moe by
  tak udostpniane).  By udostpni, umie to na ftp.redhat.com
  <ftp://ftp.redhat.com>.

  66..1122..  CCoo tteerraazz??

  Prosimy sprawdzi si, e nic nie zostao pominite jeszcze raz
  czytajc rozdziay o "Testowaniu" i "Co robi z nowymi RPM-ami".
  Chcemy mie jako RPM wszystko co si da ale chcemy, eby byy to dobre
  RPM-y.  Prosimy wic powici troch czasu na ich dokadne
  przetestowanie i prosimy te o umieszczenie ich w archiwum ftp tak, by
  kady mg z nich skorzysta.  A take, _p_r_o_s_i_m_y upewni si, e
  umieszczasz jedynie _b_e_z_p__a_t_n_e oprogramowanie.  Oprogramowanie
  komercyjne i shareware _n_i_e powinno by umieszczane w archiwum o ile
  nie zawieraj klauzuli w ich prawach autorskich to dopuszczajcej.
  Dotyczy to np. Netscape, ssh, pgp, etc.

  77..  TTwwoorrzzeenniiee RRPPMM--ww nnaa wwiieellee ppllaattffoorrmm..

  RPM moe by wykorzystywany do tworzenia pakietw dla Intel i386,
  Digital Alpha pracujcych pod Linux, oraz Sparc. S te doniesienia o
  jego wykorzystaniu na platformach SGI i HP.  RPM ma par cech ktre
  czyni tworzenie pakietw na wiele platform prostszymi.  Pierwsz z
  nich jest dyrektywa ``optflags'' w pliku /etc/rpmrc.  Moe ona by
  wykorzystana do ustawienia odpowiednich opcji i flag, specyficznych
  dla architektury, potrzebnych do kompilacji bd instalacji.  Nastpn
  cech uatwiajc tworzenie pakietw na wiele platform s makra
  ``arch'' w pliku specyfikujcym.  Mog one by wykorzystane do
  wykonania rnych rzeczy zalenych od architektury na ktrej pakiet
  jest instalowany. Nastpn tak cech jest dyrektywa ``Exclude'' w
  nagwku.

  77..11..  PPrrzzyykkaaddoowwyy pplliikk ssppeeccyyffiikkuujjccyy ..ssppeecc

  Poniej zamieszczona jest cz pliku specyfikujcego dla pakietu
  ``fileutils''.  Jest on przygotowany do instalacji na dwch
  platformach: Alfach i Intelu.

       Summary: GNU File Utilities
       Name: fileutils
       Version: 3.16
       Release: 1
       Copyright: GPL
       Group: Utilities/File
       Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
       Source1: DIR_COLORS
       Patch: fileutils-3.16-mktime.patch

       %description
       These are the GNU file management utilities.  It includes
       programs
       to copy, move, list, etc, files.

       The ls program in this package now incorporates color ls!

       %prep
       %setup

       %ifarch alpha
       %patch -p1
       autoconf
       %endif
       %build
       configure --prefix=/usr --exec-prefix=/
       make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s

       %install
       rm -f /usr/info/fileutils*
       make install
       gzip -9nf /usr/info/fileutils*

  77..22..  DDyyrreekkttyywwaa ooppttffllaaggss

  W powyszym przykadzie przedstawione zostao uycie dyrektywy
  ``optflags'' z /etc/rpmrc.  RPM_OPT_FLAGS przyjmuj odpowiedni
  warto w zalenoci od tego na jakiej platformie instalowany jest
  pakiet. Do pliku Makefile uytego w pakiecie naley nanie poprawki
  by korzysta z tej zmiennej zamiast standardowych opcji (np. -m486 lub
  -O2).  Moesz si zorientowa co powinno by zrobione poprzez
  zainstalowanie pakietu rdowego, jego rozpakowanie i przyjrzenie si
  plikowi Makefile.  Nastpnie naley zajrze do plikw z poprawkami dla
  pliku Makefile i sprawdzi jakie zmiany powinny by wprowadzone.

  77..33..  MMaakkrraa

  Makro %ifarch jest bardzo istotne dla tworzenia pakietw na wiele
  architektur.  W wikszoci przypadkw potrzebujesz nanie jedn lub
  dwie poprawki specyficzne tylko dla jednej, konkretnej architektury. W
  takiej sytacji RPM pozwala na naniesienie poprawki wycznie dla niej.

  W powyszym przypadku, pakiet fileutils ma poprawk dla maszyn
  64-bitowych.  To naturalnie w chwili obecnej stosuje si tylko do Alf.
  Tak wic dodajemy makro %ifarch nanoszce odpowiedni poprawk:

       %ifarch axp
       %patch1 -p1
       %endif

  To zapewni, e poprawka nie bdzie naniesiona na adnej innej
  architekturze a wycznie na alfach.

  77..44..  WWyycczzaanniiee ppeewwnnyycchh ppllaattffoorrmm ww ppaakkiieettaacchh

  Mona opiekowa si rdowymi RPM-ami w jednym katalogu dla
  wszystkich platform. Uzyskuje si to poprzez ``wyczenie'' (ang.
  exclude) pewnych pakietw z tworzenia ich dla pewnych architektur,
  tak, e cigle moliwym jest:

       rpm --rebuild /usr/src/SRPMS/*.rpm

  dajce w wyniku poprawne pakiety. Jeli aplikacja nie zostaa jeszcze
  do tej pory przeniesiona na dan platform to wystarczy doda wiersz
  wygladajcy mniej wicej tak:

       ExcludeArch: axp

  do nagwka pliku specyfikujcego pakiet rdowy.  Nastpnie prze
  buduj pakiet na platform na ktrej ju pracuje. W ten sposb uzyskuje
  si pakiet, ktry kompiluje si/tworzy si np. na Intel-u podczas gdy
  moe by atwo opuszczony na Alfie.

  77..55..  OOssttaattnniiee ppoopprraawwkkii

  Wykorzystanie RPM to tworzenia pakietw przeznaczonych na wiele
  platform jest zazwyczaj prostsze ni doprowadzenie pakietu do stanu w
  ktrym daj si on na nich zainstalowa.  Jednake w miar jak
  powstaje wicej i wicej pakietw w postaci binarnej staje si to
  coraz prostsze.  Jeli przy tworzeniu pakietu zabrniesz w lep
  uliczk to jak zwykle, rozwizaniem moe by zajrzenie do kodu
  rdowego podobnego pakietu.

  88..  UUwwaaggaa oo pprraawwaacchh aauuttoorrsskkiicchh

  Poniszy dokument i jego zawarto s chronione prawem autorskim.
  Rozpowszechnianie go i jego zawartoci jest dozwolone tak dugo jak
  dugo jego pozostaj one nie zmienione.  Innymi sowy mona go
  wycznie przeformatowywa, drukowa i rozpowszechnia.

