Autour des paquets RPM

A partir de 19h30 au RERS-Evry-centre-ville
Pierrick nous initiera à la construction des paquets rpm

Il est nécessaire d'installer sur votre ordinateur les paquets suivants :

  • rpm-build

qui devrait vous installer les dossiers suivants dans votre /home/

  • /bin/
  • /rpm/
  • /rpm/BUILD/
  • /rpm/BUILDROOT/
  • /rpm/RPMS/
  • /rpm/RPMS/i586/
  • /rpm/RPMS/noarch/
  • /rpm/RPMS/x86_64/
  • /rpm/SOURCES/
  • /rpm/SPECS/
  • /rpm/SRPMS/
  • /rpm/tmp/

ainsi que les fichiers :

  • ~/.rpmmacros
  • ~/.rpmrc

Un petit compte rendu de cette soirée

Tout d'abord quelques commandes pour manipuler les paquets rpm

QUELQUES NOTIONS SUR LES COMMANDES RPM

some rpm(8) commands
quelques commandes rpm(8)

rpm : query
rpm : recherche

  • full list of installed rpm packages (without architectures of packages):

  • liste la totalité des packages installés (sans l'architecture des packages)

$ rpm -qa

[jipe@localhost:/usr/lib]$ rpm -qa |grep oku
libokularcore1-4.4.3-3.1mdv2010.1
okular-4.4.3-3.1mdv2010.1
gnome-sudoku-2.30.1-1mdv2010.1
ksudoku-4.4.3-2mdv2010.1
  • same list with the architecture of each package

  • La même liste avec l'architecture de chaque package

$ rpm -qa --qf "%{NAME} %{VERSION} %{RELEASE} %{ARCH}\n " | grep -i -e bash -e gawk -e "glibc " -e compat-libstdc++ -e "perl "

[jipe@localhost:~]$ rpm -qa --qf '%{N}.%{V}.%{ARCH}\n' | grep bash
bash.4.1.i586
  • grep avec l'option -e permet de faire la demande pour plusieurs packages
  • grep avec l'option -i ne tient pas compte de la case
[jipe@localhost:~]$ rpm -qa --qf '%{N}.%{V}.%{ARCH}\n' | grep -i -e bash -e glibc
bash.4.1.i586
glibc.2.11.1.i586
glibc-devel.2.11.1.i586
  • pour avoir des infos sur un paquet installé

$rpm -qi

[jipe@localhost:/usr/lib]$ rpm -qi okular
Name        : okular                       Relocations: (not relocatable)
Version     : 4.4.3                             Vendor: Mandriva
Release     : 3.1mdv2010.1                  Build Date: jeu. 26 août 2010 13:34:52 CEST
Install Date: dim. 30 janv. 2011 17:41:51 CET      Build Host: titan.mandriva.com
Group       : Graphical desktop/KDE         Source RPM: kdegraphics4-4.4.3-3.1mdv2010.1.src.rpm
Size        : 3263820                          License: GPL
Signature   : DSA/SHA1, jeu. 26 août 2010 17:07:01 CEST, Key ID 9aa8d0d022458a98
Packager    : Mandriva Linux Security Team <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.;
URL         : http://www.kde.org
Summary     : A universal document viewer
Description :
Okular is a universal document viewer based on KPDF for KDE 4.

Okular combines the excellent functionalities of KPDF with the versatility
of supporting different kind of documents, like PDF, Postscript, DjVu, CHM,
and others.

The document format handlers page has a chart describing in more detail
the supported formats and the features supported in each of them.
  • when you want to know what package a file belongs

  • pour savoir quel package contient ce fichier

$ rpm -qf /path/to/file $ rpm -qf /chemin/du/fichier

exemple

  • déplacement dans le répertoire /usr/lib/
[jipe@localhost:~]$ cd /usr/lib
  • liste des fichiers commençant par libb
[jipe@localhost:/usr/lib]$ ll libb*

lrwxrwxrwx 1 root root     16 2011-01-30 17:29 libbs2b.so.0 -> libbs2b.so.0.0.0
-rwxr-xr-x 1 root root  21808 2010-03-16 10:47 libbs2b.so.0.0.0
...........................................................................
lrwxrwxrwx 1 root root     15 2011-01-30 18:16 libbsd.a -> libbsd-compat.a
-rw-r--r-- 1 root root    706 2010-10-23 12:58 libbsd-compat.a
lrwxrwxrwx 1 root root     15 2011-01-30 17:43 libbz2.so.1 -> libbz2.so.1.0.0
  • d'où vient le fichier libbsd-compat.a
[jipe@localhost:/usr/lib]$ rpm -qf libbsd-compat.a
glibc-devel-2.11.1-8.2mnb2
  • when you want to list files installed by a package :
  • pour avoir la liste des fichiers installés par un package
  • si le package est installé

$ rpm -ql <pkg_name>
$ rpm -ql <non_du_package>

[jipe@localhost:~]$ rpm -ql okular
/usr/bin/okular
/usr/bin/xf86gammacfg
.....................................
/usr/share/kde4/services/rawthumbnail.desktop
/usr/share/kde4/servicetypes/okularGenerator.desktop
  • si le package n'est pas installé

$ rpm -qpl /somewhere/<pkg_name>.rpm

$ rpm -qpl /lien_vers_le_paquet/<nom_du_paquet>.rpm

[jipe@localhost:~]$ rpm -qpl ftp://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/official/2010.2/i586/media/contrib/backports/beep-1.3-1mdv2010.1.i586.rpm
/usr/bin/beep
/usr/share/doc/beep
/usr/share/doc/beep/CHANGELOG
/usr/share/doc/beep/COPYING
/usr/share/doc/beep/CREDITS
/usr/share/doc/beep/README
/usr/share/man/man1/beep.1.lzma
  • extract the preinstall, postinstall, scriptlet scripts from the HPOvEaAgt installed package

  • pour extraire les fichiers scripts de pré ou post installation

#rpm -q HPOvEaAgt --scripts > /tmp/HPOvEaAgt-scripts.txt
#rpm -q nom_du_paquet --scripts

  • et pour rediriger le résultat vers un fichier

#rpm -q nom_du_paquet --scripts > /repertoire/nom_du_fichier.txt

  • if the package is not installed :

  • si le package n'est pas installé :

#rpm -qp /somewhere/HPOvSecCo.rpm --scripts > HPOvSecCo.scripts.txt

#rpm -qp /l'adresse-du-paquet/nom_du_paquet.rpm --scripts

  • et pour rediriger le résultat vers un fichier

# rpm -qp /l'adresse-du-paquet/ nom_du_paquet.rpm --scripts > /repertoire/nom_du_fichier.txt

les options -l et -i sont aussi valable dans ce cas

exemple :

[jipe@localhost:/tmp/test]$ rpm -ql beep-1.3-1mdv2010.1.i586.rpm
le paquetage beep-1.3-1mdv2010.1.i586.rpm n'est pas installé

en rajoutant l'option -p

  • pour la liste des fichiers
[jipe@localhost:/tmp/test]$ rpm -qpl beep-1.3-1mdv2010.1.i586.rpm
/usr/bin/beep
/usr/share/doc/beep
/usr/share/doc/beep/CHANGELOG
/usr/share/doc/beep/COPYING
/usr/share/doc/beep/CREDITS
/usr/share/doc/beep/README
/usr/share/man/man1/beep.1.lzma
  • pour infos sur le paquet
[jipe@localhost:/tmp/test]$ rpm -qpi beep-1.3-1mdv2010.1.i586.rpm
Name        : beep                         Relocations: (not relocatable)
Version     : 1.3                               Vendor: Mandriva
Release     : 1mdv2010.1                    Build Date: mar. 17 août 2010 10:04:31 CEST
Install Date: (not installed)               Build Host: n1.mandriva.com
Group       : Sound                         Source RPM: beep-1.3-1mdv2010.1.src.rpm
Size        : 37318                            License: GPLv2
Signature   : DSA/SHA1, mar. 17 août 2010 11:25:05 CEST, Key ID dd684d7a26752624
Packager    : Sandro Cazzaniga <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.;
URL         : http://www.johnath.com/beep/
Summary     : The pc speaker
Description :
Beep allows the user to control the pc-speaker with precision,
allowing different sounds to indicate different events. While it
can be run quite happily on the commandline, it's intended place
of residence is within shell/perl scripts, notifying the user when
something interesting occurs. Of course, it has no notion of
what's interesting, but it's real good at that notifying part.

rpm : remove
rpm : suppression

  • when /opt/OV/bin/OpC/install/opc_inst -r can't be used, remove the packages of the agent :

  • lorsque l'option -r ne peut être utilisé supprimer les packages (of the agent) (de cette manière ?)

# rpm -e HPOvSecCo HPOvSecCC HPOvDepl HPOvPerlA HPOvPCO HPOvXpl HPOvBbc HPOvCtrl HPOvConf HPOvPacc HPOvEaAgt
# rpm -e nom du paquet

  • when 2 architectures (i586 and ia64) of packages are installed and you want to remove only the ia64 packages.

  • si 2 architectures de paquet sont installées, pour n'en supprimer qu'un seul, spécifier l'architecture.

# rpm -e HPOvSecCo.ia64 HPOvSecCC.ia64 HPOvDepl.ia64 HPOvPerlA.ia64 HPOvPCO.ia64 HPOvXpl.ia64 HPOvBbc.ia64 HPOvCtrl.ia64 HPOvConf.ia64 HPOvPacc.ia64 HPOvEaAgt.ia64

#rpm -e <nom_du_paquet>.ia64 par exemple.


rpm : install
rmp : instalation

pour installer : rpm -U <le_paquet> ; à la place de rpm -i <le_paquet>

  • example of dummy installation a package with full verbosity :

  • exemple d'une installation factice avec un maximum de renseignements :

#rpm -Uvvh HPOvXpl-6.20.051-1.x86_64.rpm --test #rpm -Uvvh <nom_du_paquet>.rpm --test

exemple avec beep-1.3-1mdv2010.1.i586.rpm

[root@localhost:/tmp/test]# rpm -Uvvh beep-1.3-1mdv2010.1.i586.rpm --test 
D: ============== beep-1.3-1mdv2010.1.i586.rpm
D: Expected size:        21003 = lead(96)+sigs(344)+pad(0)+data(20563)
D:   Actual size:        21003
D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key
D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key
D: loading keyring from rpmdb
D: opening  db environment /var/lib/rpm/Packages create:cdb:mpool:joinenv
D: acquire_extra_lock: locked 4
D: opening  db index       /var/lib/rpm/Packages rdonly mode=0x0
D: locked   db index       /var/lib/rpm/Packages
D: opening  db index       /var/lib/rpm/Name rdonly mode=0x0
D:  read h#       1 Header sanity check: OK
D: added key gpg-pubkey-70771ff3-3c8f768f to keyring
D:  read h#       2 Header sanity check: OK
D: added key gpg-pubkey-78d019f5-3fd7504d to keyring
D:  read h#    1671 Header sanity check: OK
D: added key gpg-pubkey-22458a98-3969e7de to keyring
D:  read h#    1672 Header sanity check: OK
D: added key gpg-pubkey-26752624-3fd74faa to keyring
D:  read h#    1851 Header sanity check: OK
D: added key gpg-pubkey-caba22ae-3cf2c469 to keyring
D: Using legacy gpg-pubkey(s) from rpmdb
D: beep-1.3-1mdv2010.1.i586.rpm: Entête V3 DSA signature: OK, key ID 26752624
D:      added binary package [0]
D: found 0 source and 1 binary packages
D: ========== +++ beep-1.3-1mdv2010.1 i586/linux 0x0
D: opening  db index       /var/lib/rpm/Depends create mode=0x0
D:  Requires: rpmlib(PayloadFilesHavePrefix) <= 4.0-1       OUI (fourni par rpmlib)
D:  Requires: rpmlib(CompressedFileNames) <= 3.0.4-1        OUI (fourni par rpmlib)
D: opening  db index       /var/lib/rpm/Providename rdonly mode=0x0
D:  read h#    1673 Entête V3 DSA signature: OK, key ID 22458a98
D:  Requires: libc.so.6                                     OUI (fourni par la db)
D:  Requires: libc.so.6(GLIBC_2.0)                          OUI (fourni par la db)
D:  Requires: libc.so.6(GLIBC_2.3.4)                        OUI (fourni par la db)
D:  Requires: libc.so.6(GLIBC_2.4)                          OUI (fourni par la db)
D:  Requires: libc.so.6(GLIBC_2.7)                          OUI (fourni par la db)
D:  Requires: rtld(GNU_HASH)                                OUI (fourni par la db)
D:  Requires: rpmlib(PayloadIsLzma) <= 4.4.6-1              OUI (fourni par rpmlib)
D: opening  db index       /var/lib/rpm/Conflictname rdonly mode=0x0
D: closed   db index       /var/lib/rpm/Depends
D: ========== recording tsort relations
D: ========== tsorting packages (order, #predecessors, #succesors, tree, depth, breadth)
D:     0    0    0    0    1    0   +beep-1.3-1mdv2010.1.i586
D: installing binary packages
D: mounted filesystems:
D:     i        dev    bsize       bavail       iavail mount point
D:     0 0x00000801     4096      1140292       426023 /
D:     1 0x00000003     4096            0           -1 /proc
D:     2 0x00000803     4096     10361956      8979811 /home
D:     3 0x00000011     4096            0           -1 /proc/sys/fs/binfmt_misc
D: sanity checking 1 elements
D: computing 7 file fingerprints
Préparation...              D: computing file dispositions
D: opening  db index       /var/lib/rpm/Basenames rdonly mode=0x0
D: opening  db index       /var/lib/rpm/Dirnames rdonly mode=0x0
########################################### [100%]
D: ========== +++ beep-1.3-1mdv2010.1 i586-linux 0x0
D: Expected size:        21003 = lead(96)+sigs(344)+pad(0)+data(20563)
D:   Actual size:        21003
D: beep-1.3-1mdv2010.1: Entête V3 DSA signature: OK, key ID 26752624
D:   install: beep-1.3-1mdv2010.1 has 7 files, test = 1
D: closed   db index       /var/lib/rpm/Dirnames
D: closed   db index       /var/lib/rpm/Conflictname
D: closed   db index       /var/lib/rpm/Providename
D: closed   db index       /var/lib/rpm/Basenames
D: closed   db index       /var/lib/rpm/Name
D: closed   db index       /var/lib/rpm/Packages
D: release_extra_lock_may_clean(/var/lib/rpm, 4)
D: cleaning db regions (ie db__* files) in /var/lib/rpm
D: closed   db environment /var/lib/rpm/Packages
  • extract files from a rpm package
  • extraire les fichiers d'un package rpm

/usr/bin/rpm2cpio OPC.rpm | cpio -idmv

  • -i Travaille en entrée
  • -d Si nécessaire, crée les répertoires de destination.
  • -m En créant les fichiers, conserve leurs dernières dates de modification.
  • -v verbose

exemple :

[jipe@localhost:/tmp/test]$ rpm2cpio beep-1.3-1mdv2010.1.i586.rpm |cpio -idmv
./usr/bin/beep
./usr/share/doc/beep
./usr/share/doc/beep/CHANGELOG
./usr/share/doc/beep/COPYING
./usr/share/doc/beep/CREDITS
./usr/share/doc/beep/README
./usr/share/man/man1/beep.1.lzma
76 blocs

Création et Modification des paquets RPM

Liens

Construire des paquetages Mandriva Tâches préliminaires

Construire des paquetages Mandriva Groupes_Mandriva_Linux

Le même en anglais

Un "Howto avancé(en)

Et pour le futur avec Mageia