Împachetarea unui program pentru Fedora - Gnocky
meniu:
Gnocky este o aplicație grafică liberă integrată bine în GNOME, cu care poți trimite SMS de pe calculator. În spate, Gnocky folosește biblioteca liberă gnokii
.
Dacă poza de mai jos te convinge să încerci Gnocky, poți afla dintr-un articol anterior cum îl poți configura.
Pe Fedora poți testa ultima versiune de Gnocky, de acum 2 ani (decembrie 2008), doar compilând sursele, ceea ce nu este prea comod. Pentru Debian/Ubuntu, există deja un pachet deb, așa că m-am gândit să-l împachetez și pentru Fedora.
Cartea de bucate RPM este, fără îndoială, pagina wiki de pe FedoraProject.org, How to create an RPM package. Îți recomand să o citești pe diagonală și să revii la ea ori de câte ori te afli în încurcătură. Eu în continuare îți ofer minimul de informații ca să faci un pachet, dacă ești în grabă. Și folosesc ca exemplu împachetarea lui Gnocky.
- Compilează programul din surse, ca să vezi ce dependențe are (
./configure
ți le va spune) și dacă merge. Notează aceste dependențe undeva, preferabil pe o pagină wiki dedicată, ca să știe și alți voinici. :-P$ wget http://www.gnokii.org/download/gnocky/gnocky-0.0.7.tar.gz $ tar xzvf gnocky-0.0.7.tar.gz $ cd gnocky-0.0.7 $ ./configure # ce zice el că nu ai instalat, instalezi cu yum $ sudo yum groupinstall "Development Tools" $ sudo yum install gtk2-devel glib2-devel libglade2-devel gnokii-devel gettext-devel $ make $ ./src/gnocky
- Creează un utilizator pe care să-l folosești doar pentru împachetare, ca să-ți păstezi setările personale în siguranță.
$ sudo useradd makerpm
- Autentifică-te ca noul utilizator și creeză structura de directoare pentru împachetare.
$ sudo su makerpm $ rpmdev-setuptree
- Intră în directorul de specificații și creează fișierul
gnocky.spec
(în cazul lui Gnocky). Emacs și vim îți vor insera automat un șablon.$ cd ~/rpmbuild/SPECS $ emacs gnocky.spec
- Primul câmp e cel mai simplu. Completează-l cu numele programului. :-)
Name: gnocky
- Vezi ce versiune au sursele pe care le-ai tras. De regulă este inclusă în numele arhivei (
gnocky-0.0.7
), dar o poți găsi și în directorul rădăcină, într-un fișierREADME
.Version: 0.0.7
- În continuare, scrie versiunea pachetului (pornește de la 1).
Release: 1%{?dist}
- „Fură” o scurtă descriere a programului de pe saitul oficial și eventual adapteaz-o.
Summary: GLib2/GTK+2 front-end for Gnokii using Glade
- Vezi unde s-ar încadra în meniul de aplicații din GNOME. Eu am găsit un RPM pentru Mandriva care zicea că s-ar încadra la comunicații. +1 :-D
Group: Applications/Communications
Dacă programul tău e în ceață, fii tu primul care-l încadrează! În cartea de bucate scrie că poți afla toate grupurile standard cu:
$ less /usr/share/doc/rpm-*/GROUPS
- Completează acum licența (o găsești de regulă în
COPYING
), legăturile la proiect și la arhiva cu sursele.License: GPLv2 URL: http://wiki.gnokii.org/index.php/Gnocky Source0: http://www.gnokii.org/download/gnocky/gnocky-0.0.7.tar.gz
- Nu-ți bate capul cu următorul câmp, este formatul standard pentru directorul unde programul va fi compilat automat.
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
- Revezi acum dependențele de când l-ai compilat manual și completează câmpul dedicat:
BuildRequires: gnokii-devel, libglade2-devel, gtk2-devel, glib2-devel, gettext-devel
- Taie
-devel
din coadă și completează câmpul dependențelor pentru rularea programului deja compilat - utilizatorii pachetului nu vor avea nevoie de antetele pentru dezvoltare:Requires: gnokii, libglade2, gtk2, glib2, gettext
- „Fură” sau compune o descriere a programului pentru următoarea secțiune. Nu trebuie să fie lungă.
%description Set logos, send SMS and manage address book for your mobile phone.
- Următoarele două secțiuni (
%prep
și%build
) rămân neatinse:%prep %setup -q -n %{name}-%{version} %build %configure make %{?_smp_mflags}
- La secțiunea de instalare adaugă
%find_lang
dacă programul este internaționalizat.%install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %find_lang %{name}
- Secțiunea de curățenie rămâne la fel:
%clean rm -rf %{buildroot}
- La secțiunea de fișiere, arată-i că are fișiere de localizare.
%files -f %{name}.lang
Înșiră-i fișierele de documentație (cele cu litere mari).
%doc README TODO COPYING ChangeLog INSTALL AUTHORS BUGS ABOUT-NLS
Lasă neschimbate:
%defattr(-,root,root,-) %{_bindir}/*
și adaugă fișierele de date.
%{_datadir}/applications/%{name}.desktop %{_datadir}/%{name}/
- Însemnează modificările făcute de tine la pachet.
%changelog * Sat Nov 20 2010 Tibi Turbureanu 0.0.7-13 - Package for Gnocky 0.0.7
- Împachetează programul (RPM cu binarele și RPM cu sursele):
$ rpmbuild -ba gnocky.spec
- Testează cu
rpmlint
cele două pachete create. Rezolvă erorile și eventual avertismentele semnalate.$ rpmlint gnocky.spec ../RPMS/*/gnocky*.rpm ../SRPMS/gnocky*.rpm
În final, fișierul de specificație pentru Gnocky arată ca mai jos. Descarcă pachetul RPM Gnocky pentru a-l testa și tu! ;-)
Name: gnocky Version: 0.0.7 Release: 1%{?dist} Summary: GLib2/GTK+2 front-end for Gnokii using Glade Group: Applications/Communications License: GPLv2 URL: http://wiki.gnokii.org/index.php/Gnocky Source0: http://www.gnokii.org/download/gnocky/gnocky-0.0.7.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: gnokii-devel, libglade2-devel, gtk2-devel, glib2-devel, gettext-devel Requires: gnokii, libglade2, gtk2, glib2, gettext %description Set logos, send SMS and manage address book for your mobile phone. %prep %setup -q -n %{name}-%{version} %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %find_lang %{name} %clean rm -rf %{buildroot} %files -f %{name}.lang %defattr(-,root,root,-) %doc README TODO COPYING ChangeLog INSTALL AUTHORS BUGS ABOUT-NLS %{_bindir}/* %{_datadir}/applications/%{name}.desktop %{_datadir}/%{name}/ %changelog * Sat Nov 20 2010 Tibi Turbureanu 0.0.7-13 - Package for Gnocky 0.0.
Notă: Articolul este preluat sub licențele libere GNU GFDL 1.3+ și CC-BY-SA 3.0 din jurnalul lui Tibi.
Comentarii
Anonymous (neverificat)
Mar, 12/14/2010 - 15:05
Link permanent
greseli
Există două câmpuri: BuildRequires și Requires. Văd că n-ai scris nimic despre Requires, iar BuildRequires este greșit. Nu trebuie tăiat sufixul -devel de la pachetele din BuildRequires pentru că astea sunt chiar pachetele pe care le-ai folosit atunci când ai construit gnocky. BuildRequires sunt dependendențele de care ai nevoie pentru a construi programul. Requires sunt dependențele de care ai nevoie pentru a rula programul. Deci într-adevăr la câmpul de Requires probabil n-ai avea nevoie de pachetele -devel, dar la cel de BuildRequires da.
Câmpul de release nu se folosește pentru release-ul distribuției gazdă. Este un contor care pornește de la 1 și e incrementat de fiecare dată când se lansează un nou pachet cu aceeași versiune a pachetului original. Package manager-ul îl va folosi ca să-și dea seama care este pachetul mai nou și să-l instaleze. Deci în cazul tău ar fi trebuit să fie 1, acum dacă vei schimba fișierul SPEC pentru a integra sugestia de mai sus va trebui făcut 14 pentru ca pachetul să poată fi instalat în locul celui cu release: 13.
Sursa cuprinzătoare cu informații despre cum se fac pachetel este: https://fedoraproject.org/wiki/Packaging:Guidelines . Majoritatea regulilor de acolo sunt aplicabile și în cadrul altor distribuții (e.g. *SUSE)
Tiberiu C. Turb...
Vin, 12/17/2010 - 11:30
Link permanent
re: greșeli
Mulțumesc pentru observații! Am rectificat. :-) Numărul versiunii a rămas 1 pentru că nu am trimis pachetul la fedoraproject.org.