Δημιουργία πακέτων RPM από source code
Προσθήκη λεζάντας |
Σε αυτό τον οδηγό θα δούμε πως θα φτιάξουμε τα δικά μας RPM πακέτα. Η δημιουργία RPM πακέτων δεν είναι φυσικά αναγκαίος τρόπος για την εγκατάσταση προγραμμάτων από τον πηγαίο κώδικά τους, καθώς υπάρχει και η δυνατότητα του χειροκίνητου compile.
Παρ' όλα αυτά ο τρόπος αυτός είναι πολύ πιο δύσκολος για έναν χρήστη που δεν έχει ασχοληθεί και τόσο σε σχέση με ένα διπλό κλικ στο έτοιμο, προμεταγλωτισμένο RPM πακέτο. Η δημιουργία RPM πακέτων είναι μία από τις δραστηριότητες των κοινοτήτων του Fedora ώστε να γίνουν όσο το δυνατόν περισσότερες εφαρμογές εύκολα διαθέσιμες στους χρήστες της διανομής.
Προαπαιτούμενα Πακέτα
Υπάρχουν αρκετά πακέτα που χρειάζονται γι αυτή την διαδικασία, τα οποία εξαρτώνται και από την γλώσσα προγραμματισμού που έχει χρησιμοποιηθεί για την συγγραφή του κάθε προγράμματος. Για να είμαστε σίγουροι ότι τα έχουμε όλα εγκαθιστάμε το group Development-tools δίνοντας ως root:
yum groupinstall development-tools
Ακόμα θα χρειαστούμε και τον fedora packager, τον οποίο θα αποκτήσουμε δίνοντας
yum install fedora-packagerΔημιουργία RPMbuild
Από εδώ και πέρα ΔΕΝ χρειάζεται να είστε root χρήστες. Δίνοντας exit επιστρέφετε ξανά στην κανονική λειτουργία απλού χρήστη. Αρχικά θα χρειαστεί να δημιουργήσουμε έναν κατάλογο, ο οποίος θα περιέχει όλους τους υποκαταλόγους που χρειάζονται. Αυτό μπορεί να γίνει με μία κίνηση δίνοντας:
rpmdev-setuptreeΗ εντολή αυτή θα δημιουργήσει έναν φάκελο με την ονομασία rpmbuild στον κατάλογο στον οποίο βρίσκεστε εκείνη την στιγμή. Αν πλοηγηθούμε σε αυτόν θα δούμε πως έχουν δημιουργηθεί έξι φάκελοι μέσα σε αυτόν. Αυτή την στιγμή χρειαζόμαστε τον φάκελο SOURCES.
Εκεί θα βάλουμε τον source code του προγράμματος που θέλουμε. Στο παράδειγμά μας θα χρησιμοποιήσουμε το Gnu Hello, το οποίο εμφανίζει hello world στην οθόνη, παίρνοντας όμως και κάποιες παραμέτρους. (Το ίδιο παράδειγμα χρησιμοποιείται και στο επίσημο tutorial του fedoraproject.org). Το πρόγραμμα αυτό είναι γραμμένο σε C.
Μπορούμε απλώς να κατεβάσουμε το συμπιεσμένο αρχείο από το site του και να το επικολλήσουμε στον φάκελο source ή να χρησιμοποιήσουμε το wget για να να το κατεβάσουμε.
cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz
Δημιουργία Spec file
Το Spec file είναι το βασικό αρχείο για την δημιουργία RPM πακέτων. Περιέχει όλες τις πληροφορίες για το πρόγραμμα και λειτουργεί σαν οδηγός για την δημιουργία του πακέτου.
Το αρχείο αυτό πρέπει να βρίσκεται στον φάκελο SPECS, οπότε μεταβαίνουμε σε αυτόν
cd ~/rpmbuild/SPECSΜπορούμε να δημιουργήσουμε με έναν απλό κειμενογράφο το spec file (το οποίο πρέπει να έχει κατάληξη .spec). Δίνοντας όμως
rpmdev-newspec helloθα έχουμε το hello.spec μαζί με τον βασικό κορμό του. Ανοίγοντάς το τώρα με κάποιον κειμενογράφο προσθέτουμε τα στοιχεία που χρειάζονται.
Αν το πακέτο που φτιάχνεται προορίζεται για διανομή σαν επίσημο πακέτο του fedora πρέπει να συμπληρώσετε τα στοιχεία ακολουθώντας τους κανόνες που θα βρείτε εδώ. Eίναι σημαντικό να προσθέσετε τα tags post και preun όπως φαίνεται παρακάτω:
%post /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : %preun if [ $1 = 0 ] ; then /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : fi
Επίσης είναι σημαντικό το BuiltRequires να έχει την τιμή gettext και να υπάρχουν δύο requires, ένα post και ένα preun. H τελική μορφή του spec αρχείου μας πρέπει να είναι όπως φαίνεται παρακάτω:
Name: hello Version: 2.8 Release: 1%{?dist} Summary: The "Hello World" program from GNU License: GPLv3+ URL: http://ftp.gnu.org/gnu/%{name} Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz BuildRequires: gettext Requires(post): info Requires(preun): info %description The "Hello World" program, done with all bells and whistles of a proper FOSS project, including configuration, build, internationalization, help files, etc. %prep %setup -q %build %configure make %{?_smp_mflags} %install %make_install %find_lang %{name} rm -f %{buildroot}/%{_infodir}/dir %post /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || : %preun if [ $1 = 0 ] ; then /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || : fi %files -f %{name}.lang %doc AUTHORS ChangeLog COPYING NEWS README THANKS TODO %{_mandir}/man1/hello.1.gz %{_infodir}/%{name}.info.gz %{_bindir}/hello %changelog * Tue Sep 06 2011 The Coon of Ty <Ty@coon.org> 2.8-1 - Initial version of the package
Δημιουργία RPM
Πλέον είμαστε έτοιμοι για να δημιουργήσουμε το rmp μας. Αυτό γίνεται πολύ απλά δίνοντας
rpmbuild -ba hello.specενώ φυσικά είμαστε μέσα στον φάκελο που είναι το spec. Αφού ολοκληρωθεί η διαδικασία στον φάκελο SRPMS θα βρίσκεται ένα αρχείο με κατάληψη src.rpm. Όπως μπορείτε εύκολα να διαπιστώσετε το αρχείο αυτό δεν μπορεί ακόμα να εγκατασταθεί, καθώς είναι απλώς ένα συμπιεσμένο αρχείο που περιέχει τον κώδικα του προγράμματος και το spec αρχείο που δημιουργήσαμε. Για να εξάγουμε το spec αρχείο από το .scr.rpm αρκεί να δώσουμε
rpm -i όνομαTo πακέτο αυτό πάντως δεν είναι απαραίτητο. Στον φάκελο RPMS θα βρίσκεται το πακέτο που χρειαζόμαστε. Για να το εγκαταστήσουμε είτε πατάμε διπλό κλικ πάνω του είτε πηγαίνουμε στον φάκελό του και δίνουμε
rpm -i όνομαΑν θέλουμε να δημιουργηθεί μόνο το rpm πακέτο (και όχι και το src.rpm) βάζουμε σαν παράμετρο -bb αντί για -ba στο rpmbuild.
Σχόλια
Δημοσίευση σχολίου