ldd出力を取得してこれらの.soファイルをパッケージ化できますか?

ldd出力を取得してこれらの.soファイルをパッケージ化できますか?

私はユーザーの動的依存関係(/ 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行で書くことをお勧めします。どんなアイデアがありますか?

答え1

おそらくどちらかを決定する方が良いでしょう。バッグこれらの共有ライブラリは、このパッケージリストを使用してyumを介して2番目のシステムに対応してインストールされます。これにより、yumがアップデートを見つけたときにアップデートを受け取ります。

ところで、あなたはおそらくいいえ次のような場合にこれを行いたいと思います。

  • 2 台目のコンピュータにはネットワークアクセス権がありません。
  • テストの目的で、yumが特定のパッケージバージョンを提供していない少し古いシステムの設定をコピーする必要があります。

各ファイルのパッケージ情報を収集しますrpm -qf。例:

rpm -qf /usr/lib64/libfreebl3.so

これにより、パッケージとそのバージョンが提供されます。 yumを使用して別のコンピュータに同じパッケージをインストールするのに十分な情報です。

共有ライブラリを圧縮する場合は、設定ファイル(インストールするライブラリを含む/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)

1つの手順でsort -u重複したパケットをフィルタリングしたい場合があります。rpm一部の行では複数のパッケージが許可されていますが、他の行では許可されていないため、-n 1安全のためにそのオプションを使用してください(r)。

提案されているようにライブラリファイルのみが必要な場合は、次のことができます。

#!/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フィルタリングする必要があるファイルがたくさんあります)。

関連情報