
Estoy haciendo esto para obtener las dependencias dinámicas del usuario (no las de /lib64, sino las de /usr/lib64).
[root@localhost bin]# ldd Xvfb | grep '/usr/lib64/' | cut -d '=' -f1
libcrypto.so.10
libGL.so.1
libpixman-1.so.0
libXfont.so.1
libXau.so.6
libxshmfence.so.1
libXdmcp.so.6
libglapi.so.0
libXext.so.6
libXdamage.so.1
libXfixes.so.3
libX11-xcb.so.1
libX11.so.6
libxcb-glx.so.0
libxcb-dri2.so.0
libxcb.so.1
libXxf86vm.so.1
libdrm.so.2
libfreetype.so.6
libfontenc.so.1
libfreebl3.so
Me gustaría copiar estos archivos de /usr/lib64 a otra máquina (CentOS a CentOS, compilaciones casi idénticas), probablemente mediante la transferencia de un tarball. La mayoría de estos probablemente sean enlaces simbólicos a su última versión, por lo que esos archivos también deberían incluirse y los enlaces simbólicos deben recrearse en la otra máquina.
Debe hacerse de esta manera porque no hay administradores de paquetes en la máquina de destino y está protegida (sin Internet).
Estoy pensando que esta lista se puede convertir en una sola cadena que se puede pasar a tar, pero no estoy familiarizado con cómo hacerlo. Tengo que hacer esto para algunos archivos binarios, por lo que una frase breve sería genial si se pudiera hacer. ¿Algunas ideas?
Respuesta1
Probablemente sea mejor determinar cuálpaquetesesas bibliotecas compartidas corresponden y usan esa lista de paquetes para instalar a través de yum en la segunda máquina. Al hacer eso, recibirás actualizaciones cuando yum las encuentre.
De improviso, podríasnoQuiero hacer esto si:
- la segunda máquina no tiene acceso a la red, o
- Para fines de prueba, desea duplicar la configuración para una máquina ligeramente desactualizada (donde yum ya no tiene esas versiones de paquetes específicas disponibles).
La recopilación de la información del paquete se realiza utilizando rpm -qf
para cada archivo, por ejemplo,
rpm -qf /usr/lib64/libfreebl3.so
que le proporcionará el paquete y su versión: información suficiente para instalar ese mismo paquete usando yum en otra máquina.
Si actualiza bibliotecas compartidas, también debe tener en cuenta que pueden depender de archivos de configuración (incluidos aquellos que se instalarían en/etc/ld.so.conf.d
). Puedes encontrar los archivos que forman parte del mismo.paqueteusando rpm -ql
, por ejemplo,
rpm -ql $(rpm -qf /usr/lib64/libfreebl3.so)
Por supuesto que tendrás algunos duplicados. Además, esas bibliotecas pueden depender de otros paquetes (con sus propios archivos de configuración) que no son evidentes. En este casorpm -qR
ayuda, pero se necesita algo de trabajo para asegurarse de que tenga los archivos que necesita).
Trabajando desde la lista de bibliotecas:
ldd Xvfb | grep '/usr/lib64/'
puedes hacer una lista de los paquetes por
ldd Xvfb | grep '/usr/lib64/' | xargs rpm -qf
y obtener una lista correspondiente de archivos
ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql
y alquitránesoarriba:
tar czf /tmp/blob.tar.gz $(ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql)
aunque es posible que desees incluir un escenario para sort -u
filtrar paquetes duplicados. rpm
aceptará múltiples paquetes en algunas líneas pero no en otras, así que usé la -n 1
opción solo para estar seguro.
Si, como se sugiere, simplemente desea los archivos de la biblioteca, puede hacerlo así:
#!/bin/sh
mkdir /tmp/xvfb
cd /usr/lib64
tar czf /tmp/xvfb/Xvfb.tar.gz $(ldd /usr/bin/Xvfb | grep '/usr/lib64/' | cut -d '=' -f1 | awk '{print $1}' | while read IN; do OUT=`readlink $IN`; cp -rf $OUT /tmp/xvfb/$IN; echo /tmp/xvfb/$IN; done)
mientras que el enfoque que sugerí utilizar rpm -q
proporcionará los enlaces simbólicos para los archivos. (En una comprobación rápida con CentOS6, no hay archivos ldconfig, pero sí muchos /usr/share
archivos que filtraría).