Voici le fichier de spécification que j’ai conçu pour le package hello-world.
# This is a sample spec file for helloWorld BuildRoot: %{_topdir}/BUILDROOT/ Summary: Prints "Hello world!" on stdout License: GNU Name: hello-world Version: 1 Release: 1 Group: Education BuildArchitectures: i586 %description Prints "Hello world!" on stdout, that's all ! %build cd %{_sourcedir}; gcc -Wall -o helloWorld helloWorld.c %install rm -fR $RPM_BUILD_ROOT; mkdir -p $RPM_BUILD_ROOT/usr/bin; cd %{_sourcedir} mv helloWorld $RPM_BUILD_ROOT/usr/bin/; %clean rm -rf $RPM_BUILD_ROOT/ %files %attr(755,root,root) /usr/bin/helloWorld
Avant de le passer en revue nous allons l’exécuter. Pour ce faire, il convient de placer correctement dans l’arborescence tous les fichiers intervenant dans la création du package.
[klaus@localhost rpmbuild]$ cp -f helloWorld.c ~/rpmbuild/SOURCES/; [klaus@localhost rpmbuild]$ cp -f spec ~/rpmbuild/SPECS/;
On génère ensuite le package contenant les binaires en exécutant la commande rpmbuild -v -bb $HOME/rpmbuild/SPECS/spec. L’option -v sert à rendre rpmbuild "verbeux", -bb précise que l’on souhaite créer un package binaire, $HOME/rpmbuild/SPECS/spec est le chemin du fichier de spécification.
[klaus@localhost rpmbuild]$ rpmbuild -v -bb ~/rpmbuild/SPECS/spec; Exécution_de(%build): /bin/sh -e /home/klaus/rpmbuild/tmp/rpm-tmp.9T9bcW + umask 022 + cd /home/klaus/rpmbuild/BUILD + '[' 1 -eq 1 ']' + '[' 1 -eq 1 ']' + cd /home/klaus/rpmbuild/SOURCES + gcc -Wall -o helloWorld helloWorld.c + exit 0 Exécution_de(%install): /bin/sh -e /home/klaus/rpmbuild/tmp/rpm-tmp.7lD22f + umask 022 + cd /home/klaus/rpmbuild/BUILD + '[' 1 -eq 1 ']' + rm -fR /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386 + mkdir -p /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386/usr/bin + cd /home/klaus/rpmbuild/SOURCES + mv helloWorld /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386/usr/bin/ + '[' -n '' ']' + /usr/share/spec-helper/clean_files + '[' -n '' ']' + /usr/share/spec-helper/compress_files .lzma + '[' -n '' ']' + /usr/share/spec-helper/relink_symlinks + '[' -n '' ']' + /usr/share/spec-helper/clean_perl + '[' -n '' ']' + /usr/share/spec-helper/lib_symlinks + '[' -n '' ']' + /usr/share/spec-helper/gprintify + '[' -n '' ']' + /usr/share/spec-helper/fix_mo + '[' -n '' ']' + /usr/share/spec-helper/translate_menu + '[' -n '' ']' + /usr/share/spec-helper/fix_pamd + '[' -n '' ']' + /usr/share/spec-helper/remove_info_dir + '[' -n '' ']' + /usr/share/spec-helper/fix_eol + DONT_STRIP= + /usr/share/spec-helper/strip_and_check_elf_files Traitement des fichiers: hello-world-1-1 Finding Provides: /usr/lib/rpm/mandriva/filter.sh ' ' ' ' '/home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386' /usr/lib/rpm/mandriva/find-provides Finding Requires: /usr/lib/rpm/mandriva/filter.sh ' ' ' ' '/home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386' /usr/lib/rpm/mandriva/find-requires /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386 i586 Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 Requires: libc.so.6 libc.so.6(GLIBC_2.0) rtld(GNU_HASH) Vérification des fichiers non empaquetés: /usr/lib/rpm/check-files /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386 Ecrit: /home/klaus/rpmbuild/RPMS/i586/hello-world-1-1.i586.rpm Exécution_de(%clean): /bin/sh -e /home/klaus/rpmbuild/tmp/rpm-tmp.n60m98 + umask 022 + cd /home/klaus/rpmbuild/BUILD + rm -rf /home/klaus/rpmbuild/BUILDROOT/hello-world-1-1.i386/ + exit 0
Une fois cela fait vous n’avez plus qu’à installer le rpm que vous trouverez dans $HOME/rpmbuild/RPMS/i586/hello-world-1-1.i586.rpm.
[klaus@localhost rpmbuild]$ su Password: [root@localhost rpmbuild]# rpm -ivh /home/klaus/rpmbuild/RPMS/i586/hello-world-1-1.i586.rpm Préparation... ########################################### [100%] 1:hello-world ########################################### [100%] [root@localhost rpmbuild]# exit exit
Le package est installé ! Cela se vérifie ainsi :
[klaus@localhost rpmbuild]$ helloWorld Hello world!
Vous pouvez vous simplifier la tâche en écrivant les commandes dans un fichier (je l’ai appelé rpmbuild.sh, en 755) :
#!/bin/sh mkdir -p ~/rpmbuild/SOURCES ~/rpmbuild/SPECS ~/rpmbuild/RPMS ~/rpmbuild/SRPMS ~/rpmbuild/tmp ~/rpmbuild/BUILDROOT; cp -f helloWorld.c ~/rpmbuild/SOURCES/; cp -f spec ~/rpmbuild/SPECS/; rpmbuild -v -bb ~/rpmbuild/SPECS/spec; cp -f ~/rpmbuild/RPMS/*/*rpm .;
Vous n’aurez ainsi qu’une commande à saisir pour créer votre package :
[klaus@localhost rpmbuild]$ ./rpmbuild.sh ... [klaus@localhost rpmbuild]$ ls hello-world-1-1.i586.rpm ...