Ricerca nel sito web

Come creare un pacchetto RPM GNU Hello World in Fedora


RPM (acronimo ricorsivo di RPM Package Manager) è un sistema di gestione dei pacchetti gratuito e open source per Linux. Sebbene sia stato originariamente creato per l'uso in Red Hat Linux, ora è utilizzato in molte distribuzioni Linux come CentOS, Fedora e OpenSuse. È importante sottolineare che il nome RPM si riferisce al programma di gestione dei pacchetti e .rpm è un formato di file.

In questo articolo spiegheremo come scrivere file RPM, mostrando come creare facilmente un semplice pacchetto software sorgente e binario, ad esempio il pacchetto RPM GNU “Hello World” in Fedora Linux forte> distribuzione. Partiamo dal presupposto che tu abbia una conoscenza di base dei pacchetti RPM predefiniti e del processo di creazione del software open source gratuito.

Installa gli strumenti di sviluppo in Fedora

Iniziamo configurando l'ambiente di sviluppo in Fedora Linux eseguendo il seguente comando per installare gli strumenti necessari per creare RPM.

sudo dnf install fedora-packager @development-tools

Successivamente, aggiungi il tuo account non privilegiato al gruppo "mock" come segue (sostituisci tecmint con il tuo nome utente effettivo). Ciò ti consentirà di testare la procedura di compilazione in un chroot pulito.

sudo usermod -a -G mock tecmint

Ora crea una build RPM nella tua directory ~/rpmbuild e verifica la build utilizzando i seguenti comandi. Mostrerà un elenco di sottodirectory, che contiene il codice sorgente del progetto, i file di configurazione RPM e i pacchetti binari.

rpmdev-setuptree
tree ~/rpmbuild/

Ecco a cosa serve ciascuna directory:

  1. BUILD: memorizza varie directory %buildroot quando vengono creati i pacchetti.
  2. RPMS: conterrà RPM binari nelle sottodirectory di Architecture.
  3. SOURCES – memorizza gli archivi sorgenti compressi ed eventuali patch, è qui che il comando rpmbuild li cercherà.
  4. SPECS: memorizza i file SPEC.
  5. SRPMS: memorizza l'RPM di origine anziché un RPM binario.

Costruire un RPM “Hello World”.

In questo passaggio, devi scaricare il codice sorgente (noto anche come sorgente "upstream") del progetto Hello World che stiamo impacchettando, nella cartella ~/rpmbuild/SOURCE directory con il seguente comando wget.

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

Successivamente, configuriamo il pacchetto RPM utilizzando un file .spec (chiamiamolo hello.spec in questo caso) nel file ~/rpmbuild/SPECS directory, utilizzando il programma rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Quindi apri il file hello.spec utilizzando il tuo editor preferito.

vim hello.spec

Il modello predefinito dovrebbe assomigliare a questo:

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

Spieghiamo brevemente i parametri predefiniti in un file .spec:

  • Nome: utilizzato per impostare un nome per il pacchetto.
  • Versione: dovrebbe eseguire il mirroring a monte.
  • Release – numeri con cui lavori in Fedora.
  • Riepilogo – è una breve descrizione di una riga del pacchetto, la prima lettera dovrebbe essere maiuscola per evitare reclami da parte di rpmlint.
  • Licenza: controlla lo stato della licenza del software controllando i file sorgente e/o i relativi file LICENSE e/o parlando con gli autori.
  • URL: specifica la home page del pacchetto software.
  • Sorgente0: specifica i file di origine. Può essere un URL diretto o un percorso del codice sorgente compresso del software.
  • BuildRequires: specifica le dipendenze necessarie per creare il software.
  • Richiede: specifica le dipendenze necessarie per eseguire il software.
  • %prep – viene utilizzato per creare l'ambiente per la creazione del pacchetto RPM.
  • %build – viene utilizzato per compilare e costruire i codici sorgente.
  • %install: viene utilizzato per installare i programmi. Elenca i comandi necessari per copiare il file risultante dal processo di compilazione nella directory BUILDROOT.
  • %files: questa sezione elenca i file forniti dal pacchetto, che verranno installati sul sistema.
  • %changelog – dovrebbe memorizzare il lavoro svolto sulla preparazione dell'RPM, soprattutto se sono presenti patch di sicurezza e bug incluse nel sorgente upstream di base. Viene generato automaticamente durante la creazione del file hello.spec. I dati del changelog vengono solitamente visualizzati da rpm --changelog -q .

Ora modifica il tuo file .spec e apporta le modifiche come mostrato.

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

Noterai che abbiamo utilizzato alcuni nuovi parametri nel file sopra che non sono stati spiegati. Queste sono chiamate macro, utilizzate per creare invocazioni di sistema definite da RPM per impostare percorsi di installazione per i pacchetti. Pertanto, in genere è preferibile non codificare questi percorsi nemmeno nei file delle specifiche, ma utilizzare le stesse macro per coerenza.

Di seguito sono riportate le macro di build e directory RPM insieme alle relative definizioni e valori predefiniti:

  • %{make_build} – viene utilizzato nella sezione %build del file spec, esegue il comando make.
  • %{name} – definisce il nome del pacchetto o della directory.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, uguale a $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, predefinito: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, predefinito: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, predefinito: /usr/bin

Tieni presente che puoi trovare i valori per queste macro in /usr/lib/rpm/platform/*/macros o fare riferimento a Linee guida per il packaging: Macro RPM.

Creazione del pacchetto RPM

Per creare i pacchetti sorgente, binari e di debug, esegui il seguente comando rpmbuild.

rpmbuild -ba hello.spec

Dopo il processo di compilazione, gli RPM di origine e gli RPM binari verranno creati rispettivamente nelle directory ../SRPMS/ e ../RPMS/. È possibile utilizzare il programma rpmlint per verificare e garantire che il file spec e i file RPM creati siano conformi alle regole di progettazione RPM:

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

Se sono presenti errori come mostrato nello screenshot sopra, correggili prima di poter procedere.

Ultimo ma non meno importante, usa il programma mock per verificare che la compilazione del pacchetto abbia successo nell'ambiente di compilazione limitato di Fedora.

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

Per maggiori informazioni consultare la documentazione Fedora: Creazione di pacchetti RPM.

È tutto! In questo articolo, abbiamo spiegato come potenziare il tuo sistema Fedora per creare un semplice pacchetto software sorgente e binario. Abbiamo anche mostrato come creare un pacchetto RPM GUN Hello Word. Utilizza il modulo di feedback qui sotto per contattarci per qualsiasi domanda o commento.