====== Dodanie nowego speca ======
Zanim zaczniemy pisanie speca koniecznie należy zapoznać się ze [[http://cvs.pld-linux.org/cgi-bin/cvsweb/PLD-doc/devel-hints-pl.txt?rev=HEAD|wskazówkami dla dewelopera w devel-hints-pl.txt]]. Zakładam, że przygotowaliśmy już [[:pl:DevelopingPLD:PreparingWorkingEnvironment|środowisko budowania]] pakietów i mamy dostęp do [[:pl:Repositories|CVS-u]] do zapisu. Przechodzimy do katalogu ''packages'':
$ cd ~/rpm/packages
tworzymy katalog o unikalnej nazwie (wg. zasad w devel-hints-pl.txt), jednoznacznie określające nazwę aplikacji:
$ mkdir foo
===== Tworzenie speca =====
Nic nie stoi na przeszkodzie by stworzyć speca od podstaw, lepiej jednak, zwłaszcza dla początkujących użyć jeden z [[http://cvs.pld-linux.org/cgi-bin/cvsweb/template-specs/|dostępnych w CVS-ie szablonów]]. Plik spec musi mieć nazwę zgodną z nazwą katalogu (o którym powyżej). Zaczynamy edycję speca za pomocą dowolnego edytora:
$ cd foo
$ vim foo.spec
Kiedy nasz spec nabrał wstępnego kształtu, robimy testowy build:
$ builder -bb -ncs foo
Niemal na pewno pojawią się jakieś błędy (zwłaszcza u początkujących), dlatego teraz praca polega na poprawianiu błędów i kolejnych testowych buildach.
===== Prace końcowe i dodanie speca do CVS-u =====
Kiedy pakiet się buduje próbujemy go zainstalować, uruchomić i odinstalować. W takich momentach często wychodzą błędy w zależnościach ( ''Requires'' ) i skryptach (''%pre'', ''%post'', ''%preun'', ''%postun''). Kiedy wszystko wygląda w porządku, to koniecznie uruchamiamy //adapter//:
$ ../adapter foo.spec
skrypt pozwoli dostosować speca do reguł panujących w PLD. W tym momencie możemy dodać speca do CVS-u (oraz ewentualne łatki):
$ cd ~/rpm/packages
$ cvs add foo
$ cd foo
$ cvs add foo.spec
$ cvs ci
===== Wskazówki =====
* pakiet musi się budować z poziomu zwykłego użytkownika
* ostrożnie nadajemy uprawnienia w sekcji ''%files'', unikamy jak ognia SUID, jeśli to absolutnie konieczne, używaj SGID i osobnej grupy.
* nie musimy się biedzić z makrami RPM-a, zwłaszcza w sekcji ''%files'', //adapter// ustawi je za nas.
* lista makr RPM:
$rpm --showrc
* generalnie nie powinny zostać żadne niespaczkowane pliki, są jednak wyjątki od tej zasady, np. pliki przeznaczone dla innych dystrybucji.
Kompletne zestawienie reguł można znaleźć w dokumencie [[http://cvs.pld-linux.org/cgi-bin/cvsweb/PLD-doc/devel-hints-pl.txt?rev=HEAD|devel-hints-pl.txt]].
===== Linki =====
* Oficjalna [[http://rpm.org/wiki/Docs#PackagerDocumentation|dokumentacja paczkowania]]
* Zestawienie: [[http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/PLD-doc/uid_gid.db.txt?rev=HEAD|UID-ów i GID-ów]] w PLD
* Priorytety startu dla [[http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/PLD-doc/rc-scripts.db.txt?rev=HEAD|rc-skryptów]]