特定のライブラリをテストできるBashスクリプト

特定のライブラリをテストできるBashスクリプト

特定のライブラリがVPSにインストールされていることをテストし、そうでない場合は、スクリプトがそのライブラリをインストールするために必要なbashスクリプトを作成しています。

私の問題は、スクリプトが存在するかどうかを確認できることです。私の主なアイデアはこれを使用することです。

ldd /usr/lib/libgd.so > /tmp/lddcheck 2>/dev/null

ldd結果をファイルに出力し、grepなどを使用して、私が探しているライブラリを検索できます。存在しない場合はインストールし、そうでない場合はスクリプトが続行されます。

正確に何をすべきかわかりません。どんな助けにも感謝します(bashスクリプトにはかなり新機能です)。

答え1

あなたを見ると〜する一種のパッケージマネージャを使用してライブラリをインストールし、必要なパッケージのリストだけを作成する方が簡単ではないでしょうか。考えるインストールして何とかインストールしたことを確認するには?

私が知っている限り、パッケージマネージャの100%には、パッケージがインストールされていない場合はインストールされ、インストールされているが古い場合は最新バージョンに更新し、すでにインストールされている場合は最新バージョンに更新するいくつかのモード(通常はデフォルト)があります。最新の場合は直接配信されます。

たとえば、パッケージ、、がインストールされていることをapt-get常に確認できます。など。apt-get install a b c d ...abcdyumyum install a b c d

VPSがさまざまなパッケージマネージャでさまざまなシステムを使用している場合は、どのパッケージマネージャを使用しているかを検出するロジックを作成するため、この手順は不可避です。

答え2

提案されているようにlddコマンドを実行した後、次のコマンドを試すことができます。

grep "not found" /tmp/lddcheck | awk '// { print $1 }'

見つからないライブラリの名前を取得します。

答え3

必要なライブラリがそれをサポートしていると仮定すると、それを使用する必要があります。pkg-configそれがまさにその目的です。

$ pkg-config --exists libnotify 
$ echo $?
0
$ pkg-config --exists nonexistant
$ echo $?
1
$ 

これを使用してバージョンを確認し、インクルードやライブラリパスなどを通知できます。

答え4

スクリプトを初めて使用する場合は、次の点に注意してください。一時ファイルはほとんど必要なく、一時ファイルもほとんど必要ありません。複数のステップで一部のデータを処理する必要がある場合は、パイプラインを使用してください。出力にはさまざまなテキスト処理ツールを使用できますldd。ここでは、を使用して(ライブラリパスの代わりに)awk3番目のスペースで区切られたフィールドを含む行を検出し、最初のフィールド(ライブラリ名)を印刷します。not欠落しているライブラリのスペースで区切られたリストを含む変数として出力を収集しました。

missing=$(ldd /path/to/executable | awk '$3 == "not" {print $1}')
for x in $missing; do
  # whatever it takes to install $x
done

これは正しいアプローチではないかもしれません。特定のディストリビューションをサポートするには、パッケージマネージャとのカスタムインタラクションを含む汎用バイナリパッケージを作成しないでください。このディストリビューションのパッケージをデプロイします。

パッケージマネージャはシステム管理者の仕事をより簡単にします。パッケージマネージャを正しく使用できない場合、ユーザーは混乱を感じ、怒りを引き起こす可能性があります。 rpmやdebなどを配布する場合、ユーザーはパッケージの依存関係をインストールするだけです。これにより、一部の危険なスクリプトを実行するのではなく、ユーザーに慣れているパッケージ管理ツールを使用してパッケージを記録、インストール、アップグレード、および削除できます。

関連情報