このエントリーをはてなブックマークに追加


Debian系Linuxで依存関係エラー時に表示されたファイルを探す方法・apt-file

ソースをダウンロードしてコンパイル&リンクしたときに依存関係エラーで必要なファイルやライブラリが表示されたり
他のマシンでコンパイル済やバイナリーを持ってきたときに実行するとxxxx.soがありません。
などと表示されたときにapt-fileコマンドを使えば、そのファイルが格納されているパッケージを探し出すことができます。
尚、apt系のコマンドなので、Debian系(Ubuntu, LinuxMint, など)が対象となります。


関連記事

動作確認したLinux

$ lsb_release -cd
Description: Ubuntu 18.04.2 LTS
Codename:    bionic

dpkg -S ファイル名との違い

dpkg -S ファイル名により同様に指定したファイルがどのパッケージに存在するかを確認することができますが、
インストール済パッケージのみが対象となります。
今回は未インストールでも対象のファイルを探すためapt-fileコマンドを使います。

apt-fileコマンドのインストール

apt-fileコマンドはデフォルトではインストールされていないはずなので、端末(ターミナル)を起動して、
以下のコマンドを実行し、apt-fileコマンドをインストールします。

sudo apt install apt-file

インストール後、以下のコマンドでパッケージ情報をアップデートしてください。

sudo apt update

尚、今回紹介したapt-fileでも同様のことができますが、廃止予定らしいです。
以下の記述通り、apt updateを使えば良いでしょう。

$ man apt-file
<省略>
     update
          Deprecated action that just calls "apt update".
<省略>

apt-file search ファイル名 で探してみる

実際にapt-fileコマンドを使ってファイルを探してみます。
使用例として、2つ以下に記します。

apt-file search ファイル名

一番簡単なのは以下の構文になります。

apt-file search ファイル名

例として、他のマシンに存在するバイナリをコピーして持ってきたら、libcurl-nss.so.3が無いと言われました。
libcurl-nss.so.3が存在するパッケージを探してみます。
検索中は少々時間がかかります。

$ apt-file search libcurl-nss.so.3
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.3

上記にお通り、libcurl3-nssというパッケージ(左側)に存在することが表示されます。
あとは、apt install パッケージ名でインストールすれば解決です。
また、すべてのファイル名を入力しなくても検索が可能です。

$ apt-file search libcurl-nss
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.3
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.4
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.4.5.0
libcurl4-nss-dev: /usr/lib/x86_64-linux-gnu/libcurl-nss.a
libcurl4-nss-dev: /usr/lib/x86_64-linux-gnu/libcurl-nss.la
libcurl4-nss-dev: /usr/lib/x86_64-linux-gnu/libcurl-nss.so

パッケージ名のみ表示したい場合は、-lオプションを追加します。

$ apt-file -l search libcurl-nss
libcurl3-nss
libcurl4-nss-dev

apt-file -x search ファイル名

オプションに-xをつけると正規表現で検索できます。
以下に実行例を記します。 $ apt-file -x search 'libcurl-nss.so.[0-9]'

libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.3
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.4
libcurl3-nss: /usr/lib/x86_64-linux-gnu/libcurl-nss.so.4.5.0

パッケージ名のみ表示したい場合は、-lオプションを追加します。

$ apt-file -xl search 'libcurl-nss.so.[0-9]'
libcurl3-nss

以上、apt-fileコマンドを使ってインストール済み、未インストール済みを問わず
該当するパッケージを検索する方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-07 (木) 09:38:43