Kann ich die LDD-Ausgabe nehmen und diese .so-Dateien in einem Tarball-Archiv archivieren?

Kann ich die LDD-Ausgabe nehmen und diese .so-Dateien in einem Tarball-Archiv archivieren?

Ich mache das, um die dynamischen Benutzerabhängigkeiten zu erhalten (nicht die in /lib64, sondern in /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 

Ich möchte diese Dateien von /usr/lib64 auf eine andere Maschine kopieren (CentOS zu CentOS, nahezu identische Builds), höchstwahrscheinlich durch Übertragen eines Tarballs. Die meisten davon sind wahrscheinlich symbolische Links zu ihrer neuesten Version, daher müssten diese Dateien ebenfalls eingeschlossen werden und die symbolischen Links müssten auf der anderen Maschine neu erstellt werden.

Dies muss auf diese Weise erfolgen, da auf dem Zielcomputer keine Paketmanager vorhanden sind und dieser in einer Sandbox (ohne Internet) läuft.

Ich denke, diese Liste kann in eine einzelne Zeichenfolge umgewandelt werden, die an tar übergeben werden kann, aber ich weiß nicht, wie ich das anstellen soll. Ich muss dies für einige Binärdateien tun, daher wäre ein Einzeiler großartig, wenn das möglich wäre. Irgendwelche Ideen?

Antwort1

Sie sind wahrscheinlich besser dran, wenn Sie bestimmen, welchePaketeDiese gemeinsam genutzten Bibliotheken entsprechen diesen und verwenden diese Paketliste zur Installation über yum auf dem zweiten Computer. Auf diese Weise erhalten Sie Updates, sobald yum sie findet.

Sie könnten spontannichtSie möchten dies tun, wenn:

  • die zweite Maschine keinen Netzwerkzugriff hat oder
  • Sie möchten zu Testzwecken die Konfiguration für einen leicht veralteten Computer duplizieren (auf dem Yum diese spezifischen Paketversionen nicht mehr verfügbar hat).

Das Sammeln der Paketinformationen erfolgt rpm -qffür jede Datei, z. B.

rpm -qf /usr/lib64/libfreebl3.so

Dadurch erhalten Sie das Paket und seine Version – genügend Informationen, um dasselbe Paket mit yum auf einem anderen Computer zu installieren.

Wenn Sie gemeinsam genutzte Bibliotheken tarnen, sollten Sie sich auch darüber im Klaren sein, dass diese von Konfigurationsdateien abhängen können (einschließlich derer, die in installiert werden /etc/ld.so.conf.d). Sie finden die Dateien, die Teil derselben sindPaketverwenden rpm -ql, zB

rpm -ql $(rpm -qf /usr/lib64/libfreebl3.so)

Natürlich werden Sie einige Duplikate haben. Außerdem können diese Bibliotheken von anderen Paketen (mit ihren eigenen Konfigurationsdateien) abhängen, die nicht offensichtlich sind. In diesem Fallrpm -qR hilft, aber es ist etwas Arbeit erforderlich, um sicherzustellen, dass Sie die benötigten Dateien haben).

Ausgehend von der Liste der Bibliotheken:

ldd Xvfb | grep '/usr/lib64/'

Sie können eine Liste der Pakete erstellen, indem Sie

ldd Xvfb | grep '/usr/lib64/' | xargs rpm -qf

und erhalten Sie eine entsprechende Liste von Dateien

ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql

und TeerDashoch:

tar czf /tmp/blob.tar.gz $(ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql)

Sie möchten jedoch möglicherweise eine Phase einfügen, um sort -udoppelte Pakete herauszufiltern. rpmakzeptiert in einigen Zeilen mehrere Pakete, in anderen jedoch nicht, daher habe ich die -n 1Option nur sicherheitshalber verwendet.

Wenn Sie wie vorgeschlagen lediglich die Bibliotheksdateien möchten, können Sie Folgendes tun:

#!/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)

während der von mir vorgeschlagene Ansatz rpm -qdie symbolischen Links für die Dateien bereitstellt. (Bei einer schnellen Überprüfung mit CentOS6 gibt es keine ldconfig-Dateien, aber viele /usr/shareDateien, die Sie herausfiltern würden).

verwandte Informationen