Recherche de site Web

Comment créer un package RPM GNU Hello World dans Fedora


RPM (acronyme récursif de RPM Package Manager) est un système de gestion de packages gratuit et open source pour Linux. Bien qu'il ait été créé à l'origine pour être utilisé dans Red Hat Linux, il est désormais utilisé dans de nombreuses distributions Linux telles que CentOS, Fedora et OuvrirSuse. Il est important de noter que le nom RPM fait référence au programme de gestion de packages et que .rpm est un format de fichier.

Dans cet article, nous expliquerons l'écriture de fichiers RPM, en montrant comment créer facilement des packages logiciels source et binaires simples, par exemple, le package RPM GNU « Hello World » dans Fedora Linux distribution. Nous supposons que vous avez une certaine compréhension de base des packages RPM prédéfinis et du processus de création de logiciels open source gratuits.

Installer les outils de développement dans Fedora

Commençons par configurer l'environnement de développement dans Fedora Linux en exécutant la commande suivante pour installer les outils nécessaires à la création de RPM.

sudo dnf install fedora-packager @development-tools

Ensuite, ajoutez votre compte non privilégié au groupe « simulé » comme suit (remplacez tecmint par votre nom d'utilisateur réel). Cela vous permettra de tester la procédure de build dans un chroot propre.

sudo usermod -a -G mock tecmint

Maintenant, créez une build RPM dans votre répertoire ~/rpmbuild et vérifiez la build à l'aide des commandes suivantes. Il affichera une liste de sous-répertoires contenant le code source du projet, les fichiers de configuration RPM et les packages binaires.

rpmdev-setuptree
tree ~/rpmbuild/

Voici à quoi sert chaque répertoire :

  1. BUILD – stocke divers répertoires %buildroot lorsque les packages sont construits.
  2. RPMS – contiendra les RPM binaires dans les sous-répertoires de l'architecture.
  3. SOURCES – stocke les archives sources compressées et tous les correctifs, c'est là que la commande rpmbuild les recherchera.
  4. SPECS – stocke les fichiers SPEC.
  5. SRPMS – stocke le RPM source au lieu d'un RPM binaire.

Construire un RPM « Hello World »

Dans cette étape, vous devez télécharger le code source (également connu sous le nom de source « en amont ») du projet Hello World que nous emballons, dans le fichier ~/rpmbuild/SOURCE . avec la commande wget suivante.

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

Ensuite, configurons le package RPM à l'aide d'un fichier .spec (appelons-le hello.spec dans ce cas) dans le fichier ~/rpmbuild/SPECS . , à l'aide du programme rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Ensuite, ouvrez le fichier hello.spec à l'aide de votre éditeur préféré.

vim hello.spec

Le modèle par défaut devrait ressembler à ceci :

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

Expliquons brièvement les paramètres par défaut dans un fichier .spec :

  • Nom – utilisé pour définir un nom pour le package.
  • Version – doit être reflétée en amont.
  • Release – numéros sur lesquels vous travaillez dans Fedora.
  • Résumé : il s'agit d'une brève description d'une seule ligne du package, la première lettre doit être en majuscule pour éviter les plaintes RPMlint.
  • Licence – vérifiez l'état de la licence du logiciel en inspectant les fichiers sources et/ou leurs fichiers LICENSE, et/ou en discutant avec les auteurs.
  • URL : spécifie la page d'accueil du progiciel.
  • Source0 : spécifie les fichiers source. Il peut s’agir d’une URL directe ou d’un chemin du code source compressé du logiciel.
  • BuildRequires – spécifie les dépendances nécessaires pour créer le logiciel.
  • Nécessite : spécifie les dépendances nécessaires pour exécuter le logiciel.
  • %prep – est utilisé pour créer l’environnement pour construire le package RPM.
  • %build – est utilisé pour compiler et construire les codes sources.
  • %install – ceci est utilisé pour installer les programmes. Il répertorie les commandes nécessaires pour copier le fichier résultant du processus de construction vers le répertoire BUILDROOT.
  • %files – cette section répertorie les fichiers fournis par le package, qui sera installé sur le système.
  • %changelog – doit stocker le travail de préparation du RPM, surtout si des correctifs de sécurité et de bogues sont inclus en plus de la source de base en amont. Il est automatiquement généré lors de la création du fichier hello.spec. Les données du journal des modifications sont généralement affichées par rpm --changelog -q .

Modifiez maintenant votre fichier .spec et apportez les modifications comme indiqué.

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

Vous remarquerez que nous avons utilisé de nouveaux paramètres dans le fichier ci-dessus qui n'ont pas été expliqués. Celles-ci sont appelées macros, utilisées pour créer des invocations système définies par RPM afin de définir les chemins d'installation des packages. Par conséquent, il est généralement préférable de ne pas coder en dur ces chemins dans les fichiers de spécifications, mais d’utiliser les mêmes macros pour des raisons de cohérence.

Voici les macros de build et de répertoire RPM ainsi que leurs définitions et valeurs par défaut :

  • %{make_build> – est utilisé dans la section %build du fichier de spécifications, il exécute la commande make.
  • %{name} – définit le nom du package ou du répertoire.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, identique à $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, par défaut : /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, par défaut : /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, par défaut : /usr/bin

Notez que vous pouvez trouver les valeurs de ces macros dans le /usr/lib/rpm/platform/*/macros ou vous référer aux Directives d'empaquetage : Macros RPM.

Construire le package RPM

Pour créer les packages source, binaires et de débogage, exécutez la commande rpmbuild suivante.

rpmbuild -ba hello.spec

Après le processus de construction, les RPM sources et les RPM binaires seront créés respectivement dans les répertoires ../SRPMS/ et ../RPMS/. Vous pouvez utiliser le programme rpmlint pour vérifier et vous assurer que le fichier de spécifications et les fichiers RPM créés sont conformes aux règles de conception RPM :

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

S'il y a des erreurs comme indiqué dans la capture d'écran ci-dessus, corrigez-les avant de pouvoir continuer.

Enfin et surtout, utilisez un programme simulé pour vérifier que la construction du package réussira dans l'environnement de construction restreint de Fedora.

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

Pour plus d'informations, consultez la documentation Fedora : Création de packages RPM.

C'est tout! Dans cet article, nous avons expliqué comment améliorer votre système Fedora pour créer un progiciel source et binaire simple. Nous avons également montré comment créer un package RPM GUN Hello Word. Utilisez le formulaire de commentaires ci-dessous pour nous contacter pour toute question ou commentaire.