Previous Up Next
Version pdf - Version archive

5  Création et installation de hello-world

5.1  Construction du package

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

Télécharger le fichier

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

5.2  Installation du package

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.

Télécharger le fichier

[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 .;

Télécharger le fichier

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  ...

Previous Up Next