Πώς να δημιουργήσετε ένα πακέτο GNU Hello World RPM στο Fedora


Το RPM (αναδρομικό ακρωνύμιο για το RPM Package Manager) είναι ένα δωρεάν και ανοιχτού κώδικα σύστημα διαχείρισης πακέτων για Linux. Αν και αρχικά δημιουργήθηκε για χρήση στο Red Hat Linux, τώρα χρησιμοποιείται σε πολλές διανομές Linux όπως CentOS, Fedora και OpenSuse. Είναι σημαντικό ότι το όνομα RPM αναφέρεται στο πρόγραμμα διαχείρισης πακέτων και το .rpm είναι μορφή αρχείου.

Σε αυτό το άρθρο, θα εξηγήσουμε τη σύνταξη αρχείων RPM, δείχνοντας πώς μπορείτε να δημιουργήσετε εύκολα μια απλή πηγή και δυαδικά πακέτα λογισμικού, για παράδειγμα, GNU "Hello World" πακέτο RPM στο Fedora Linux διανομή. Υποθέτουμε ότι έχετε κάποια βασική κατανόηση των προκατασκευασμένων πακέτων RPM και της διαδικασίας δημιουργίας Ελεύθερου Λογισμικού Ανοικτού Κώδικα.

Εγκαταστήστε Εργαλεία Ανάπτυξης στο Fedora

Ας ξεκινήσουμε με τη ρύθμιση του περιβάλλοντος ανάπτυξης στο Fedora Linux εκτελώντας την ακόλουθη εντολή για να εγκαταστήσετε τα απαραίτητα εργαλεία για τη δημιουργία RPM.

sudo dnf install fedora-packager @development-tools

Στη συνέχεια, προσθέστε τον μη προνομιούχο λογαριασμό σας στην ομάδα "mock" ως εξής (αντικαταστήστε το tecmint με το πραγματικό σας όνομα χρήστη). Αυτό θα σας επιτρέψει να δοκιμάσετε τη διαδικασία κατασκευής σε ένα καθαρό chroot.

sudo usermod -a -G mock tecmint

Τώρα, δημιουργήστε ένα build RPM στον κατάλογο ~/rpmbuild και επαληθεύστε το build χρησιμοποιώντας τις ακόλουθες εντολές. Θα εμφανίσει μια λίστα υποκαταλόγων, που περιέχει τον πηγαίο κώδικα του έργου, αρχεία διαμόρφωσης RPM και δυαδικά πακέτα.

rpmdev-setuptree
tree ~/rpmbuild/

Εδώ είναι για ποιο σκοπό προορίζεται κάθε κατάλογος:

  1. BUILD – αποθηκεύει διάφορους καταλόγους %buildroot όταν δημιουργούνται πακέτα.
  2. RPMS – θα περιέχει δυαδικά RPM σε υποκαταλόγους της Αρχιτεκτονικής.
  3. ΠΗΓΕΣ – αποθηκεύει τα αρχεία συμπιεσμένων πηγών και τυχόν ενημερώσεις κώδικα, εδώ θα τα αναζητήσει η εντολή rpmbuild.
  4. SPECS – αποθηκεύει τα αρχεία SPEC.
  5. SRPMS – αποθηκεύει το RPM πηγής αντί για ένα δυαδικό RPM.

Χτίζοντας ένα "Hello World" RPM

Σε αυτό το βήμα, πρέπει να κατεβάσετε τον πηγαίο κώδικα (επίσης γνωστό ως πηγή "upstream") του έργου Hello World που συσκευάζουμε, στο ~/rpmbuild/SOURCE κατάλογο με την ακόλουθη εντολή wget.

cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

Στη συνέχεια, ας διαμορφώσουμε το πακέτο RPM χρησιμοποιώντας ένα αρχείο .spec (ας το ονομάσουμε hello.spec σε αυτήν την περίπτωση) στο ~/rpmbuild/SPECS κατάλογο, χρησιμοποιώντας το πρόγραμμα rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Στη συνέχεια, ανοίξτε το αρχείο hello.spec χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή.

vim hello.spec

Το προεπιλεγμένο πρότυπο θα πρέπει να μοιάζει με αυτό:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

Ας εξηγήσουμε εν συντομία τις προεπιλεγμένες παραμέτρους σε ένα αρχείο .spec:

  • Όνομα – χρησιμοποιείται για τον ορισμό ενός ονόματος για το πακέτο.
  • Έκδοση – θα πρέπει να αντικατοπτρίζεται ανάντη.
  • Κυκλοφορία – αριθμοί που εργάζεστε στο Fedora.
  • Σύνοψη – είναι μια σύντομη περιγραφή μιας γραμμής του πακέτου, το πρώτο γράμμα θα πρέπει να είναι κεφαλαίο για να αποφευχθούν παράπονα για rpmlint.
  • Άδεια χρήσης – ελέγξτε την κατάσταση άδειας χρήσης του λογισμικού επιθεωρώντας τα αρχεία προέλευσης ή/και τα αρχεία ΑΔΕΙΑΣ ΧΡΗΣΗΣ τους ή/και μιλώντας με τους δημιουργούς.
  • URL – καθορίζει την αρχική σελίδα του πακέτου λογισμικού.
  • Πηγή0 – καθορίζει τα αρχεία προέλευσης. Μπορεί να είναι μια άμεση διεύθυνση URL ή μια διαδρομή του συμπιεσμένου πηγαίου κώδικα του λογισμικού.
  • BuildRequires – καθορίζει τις εξαρτήσεις που απαιτούνται για τη δημιουργία του λογισμικού.
  • Απαιτείται – καθορίζει τις εξαρτήσεις που απαιτούνται για την εκτέλεση του λογισμικού.
  • %prep – χρησιμοποιείται για τη δημιουργία του περιβάλλοντος για τη δημιουργία του πακέτου rpm.
  • %build – χρησιμοποιείται για τη μεταγλώττιση και τη δημιουργία των πηγαίων κωδίκων.
  • %install – χρησιμοποιείται για την εγκατάσταση των προγραμμάτων. Παραθέτει τις εντολές που απαιτούνται για την αντιγραφή του αρχείου που προκύπτει από τη διαδικασία δημιουργίας στον κατάλογο BUILDROOT.
  • %files – αυτή η ενότητα παραθέτει τα αρχεία που παρέχονται από το πακέτο, τα οποία θα εγκατασταθούν στο σύστημα.
  • %changelog – θα πρέπει να αποθηκεύει την εργασία για την προετοιμασία του RPM, ειδικά εάν υπάρχουν ενημερώσεις κώδικα ασφαλείας και σφαλμάτων στο επάνω μέρος της βασικής πηγής ανάντη. Δημιουργείται αυτόματα κατά τη δημιουργία του αρχείου hello.spec. Τα δεδομένα καταγραφής αλλαγών εμφανίζονται συνήθως με rpm --changelog -q .

Τώρα επεξεργαστείτε το αρχείο .spec και κάντε αλλαγές όπως φαίνεται.

Name:           hello
Version:        2.10
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 package 

%prep
%autosetup

%build
%configure
make %{make_build}

%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
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

Θα παρατηρήσετε ότι έχουμε χρησιμοποιήσει κάποιες νέες παραμέτρους στο παραπάνω αρχείο οι οποίες δεν έχουν επεξηγηθεί. Αυτά ονομάζονται μακροεντολές και χρησιμοποιούνται για τη δημιουργία κλήσεων συστήματος που ορίζονται από το RPM για τον ορισμό διαδρομών εγκατάστασης για πακέτα. Επομένως, είναι συνήθως προτιμότερο να μην κωδικοποιούνται σκληρά αυτές οι διαδρομές σε αρχεία προδιαγραφών, αλλά να χρησιμοποιείτε τις ίδιες μακροεντολές για συνέπεια.

Τα παρακάτω είναι οι μακροεντολές κατασκευής και καταλόγου RPM μαζί με τους ορισμούς και τις προεπιλεγμένες τιμές τους:

  • %{make_build} – χρησιμοποιείται στην ενότητα %build του αρχείου προδιαγραφών, εκτελεί την εντολή make.
  • %{name} – ορίζει το όνομα πακέτου ή καταλόγου.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, όπως και $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, προεπιλογή: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, προεπιλογή: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, προεπιλογή: /usr/bin

Λάβετε υπόψη ότι μπορείτε να βρείτε τις τιμές για αυτές τις μακροεντολές στο /usr/lib/rpm/platform/*/macros ή ανατρέξτε στις Οδηγίες συσκευασίας: Μακροεντολές RPM.

Δημιουργία του πακέτου RPM

Για να δημιουργήσετε τα πακέτα προέλευσης, δυαδικών και εντοπισμού σφαλμάτων, εκτελέστε την ακόλουθη εντολή rpmbuild.

rpmbuild -ba hello.spec

Μετά τη διαδικασία δημιουργίας, τα RPM προέλευσης και τα δυαδικά RPM θα δημιουργηθούν στους καταλόγους ../SRPMS/ και ../RPMS/ αντίστοιχα. Μπορείτε να χρησιμοποιήσετε το πρόγραμμα rpmlint για να ελέγξετε και να διασφαλίσετε ότι το αρχείο προδιαγραφών και τα αρχεία RPM που δημιουργούνται συμμορφώνονται με τους κανόνες σχεδίασης RPM:

rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Εάν υπάρχουν σφάλματα όπως φαίνεται στο παραπάνω στιγμιότυπο οθόνης, διορθώστε τα πριν προχωρήσετε.

Τελευταίο αλλά εξίσου σημαντικό, χρησιμοποιήστε το ψευδές πρόγραμμα για να ελέγξετε ότι η κατασκευή του πακέτου θα είναι επιτυχής στο περιορισμένο περιβάλλον κατασκευής Fedora.

mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Για περισσότερες πληροφορίες, συμβουλευτείτε την τεκμηρίωση του Fedora: Δημιουργία πακέτων RPM.

Αυτό είναι όλο! Σε αυτό το άρθρο, εξηγήσαμε πώς να ενισχύσετε το σύστημα Fedora για να δημιουργήσετε ένα απλό πακέτο λογισμικού πηγής και δυαδικού περιεχομένου. Δείξαμε επίσης πώς να δημιουργήσετε ένα πακέτο GUN Hello Word RPM. Χρησιμοποιήστε την παρακάτω φόρμα σχολίων για να επικοινωνήσετε μαζί μας για τυχόν ερωτήσεις ή σχόλια.