Extraire un binaire et ses dépendances pour un chroot (mais aussi pour faire une « install » offline)

On va s’écarter un peu du sujet DevOps, pour traiter des environnements clos.

Imaginons que vous êtes dans un environnement clos sans connexion internet mais que vous voulez installer un rpm qui demande une foule de dépendances (genre glibc … ).

La solution utilisé par chroot est possible, et pour cela il vous faut :

  • Une machine d’architecture équivalente (x86, x86_64) avec une connexion internet
  • ldd sur la machine ou la construction se fait
  • un script qui fait le boulot d’extraction des dépendances

Je prendrais comme exemple NRPE qui a  comme dépendance (libssl) avec des CentOS vanilla.
On commence par l’installation de NRPE:

yum update
yum install nrpe
which nrpe

NRPE est donc installé a cet endroit /usr/sbin/nrpe.
Pour la partie suivante, on va extraire les dépendances grâce au script de metashock.de

yum update
chmod 700 extract.sh
mkdir builded-nrpe
./extract.sh /usr/sbin/nrpe builded-nrpe/

Avec cela vous allez voir toutes les dépendances soigneusement rangées dans lib:

ls -1  build-nrpe/*/*

build-nrpe/lib64/ld-linux-x86-64.so.2
build-nrpe/lib64/libcom_err.so.2
build-nrpe/lib64/libcrypto.so.10
build-nrpe/lib64/libc.so.6
build-nrpe/lib64/libdl.so.2
build-nrpe/lib64/libgssapi_krb5.so.2
build-nrpe/lib64/libk5crypto.so.3
build-nrpe/lib64/libkeyutils.so.1
build-nrpe/lib64/libkrb5.so.3
build-nrpe/lib64/libkrb5support.so.0
build-nrpe/lib64/libnsl.so.1
build-nrpe/lib64/libpcre.so.1
build-nrpe/lib64/libpthread.so.0
build-nrpe/lib64/libresolv.so.2
build-nrpe/lib64/libselinux.so.1
build-nrpe/lib64/libssl.so.10
build-nrpe/lib64/libwrap.so.0
build-nrpe/lib64/libz.so.1

build-nrpe/usr/sbin:
nrpe

Il vous suffit maintenant de compresser le tout, et de mettre cela sur le server offline.

Note: pour certain binaires, il convient de rajouter les dépendances dans le bon path :

export LD_LIBRARY_PATH=/opt/build-nrpe/lib64
Pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *