
これは、ユーザーの動的依存関係 (/lib64 ではなく、/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
これらのファイルを /usr/lib64 から別のマシン (CentOS から CentOS、ほぼ同一のビルド) にコピーしたいと思っています。おそらく tarball を転送することになると思います。これらのほとんどは最新バージョンへのシンボリック リンクであるため、それらのファイルも含める必要があり、シンボリック リンクを他のマシンで再作成する必要があります。
ターゲット マシンにパッケージ マネージャーがなく、サンドボックス化されている (インターネットがない) ため、この方法を実行する必要があります。
このリストを tar に渡すことができる単一の文字列に変換できると考えていますが、その方法についてはよくわかりません。いくつかのバイナリに対してこれを実行する必要があるため、ワンライナーで実行できれば便利です。何かアイデアはありますか?
答え1
どちらを選ぶか決めた方が良いでしょうパッケージこれらの共有ライブラリは対応しており、そのパッケージのリストを使用して、2 番目のマシンで yum 経由でインストールします。これにより、yum が更新を見つけたときに更新が取得されます。
すぐに思いつくのはない次の場合にこれを実行したい:
- 2台目のマシンにネットワークアクセスがない、または
- テストの目的で、少し古いマシン (yum で特定のパッケージ バージョンが利用できなくなったマシン) の設定を複製する必要があります。
パッケージ情報の収集はrpm -qf
、各ファイルに対して次のように行われます。
rpm -qf /usr/lib64/libfreebl3.so
これにより、パッケージとそのバージョンが提供されます。これは、別のマシンで yum を使用して同じパッケージをインストールするのに十分な情報です。
共有ライブラリをtarで圧縮する場合、それらが設定ファイル(にインストールされるものを含む/etc/ld.so.conf.d
)に依存する可能性があることにも注意する必要があります。同じパッケージ使用rpm -ql
例:
rpm -ql $(rpm -qf /usr/lib64/libfreebl3.so)
もちろん、重複するライブラリもいくつかあります。また、それらのライブラリは、他のパッケージ(独自の設定ファイルを持つ)に依存している可能性がありますが、これは明らかではありません。この場合、rpm -qR
役立つただし、必要なファイルが揃っているかどうかを確認するには、多少の作業が必要です。
ライブラリのリストから作業する:
ldd Xvfb | grep '/usr/lib64/'
パッケージのリストを作成するには
ldd Xvfb | grep '/usr/lib64/' | xargs rpm -qf
対応するファイルのリストを取得します
ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql
タールそれ上:
tar czf /tmp/blob.tar.gz $(ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql)
sort -u
ただし、重複するパッケージを除外するために 、 をステージに追加することもできます。 はrpm
、一部の行では複数のパッケージを受け入れますが、他の行では受け入れないため、-n 1
安全のためにオプションを使用しました。
提案されているように、単にライブラリ ファイルが必要な場合は、次のように実行できます。
#!/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)
一方、私が提案したアプローチではrpm -q
、ファイルのシンボリック リンクが提供されます。(CentOS6 で簡単に確認したところ、ldconfig ファイルはありませんが、/usr/share
フィルターで除外するファイルは多数あります)。