Dockerfileにapt installを書いて再現可能なビルド環境を構築している最中に特定のファイルが見つからないといわれることがある。この際、どのパッケージを追加すればそのファイルがDockerイメージに追加できるのかがすぐにわからない。例えば/usr/x86_64-linux-gnu/include/stdc-predef.hが存在しないというエラーが出力された際に、stdcから標準Cライブラリ関連のパッケージなのだと推測はできるが具体的なパッケージを把握しないと先には進めない。なお、このファイルはbuild-essentialsには含まれない。

dpkg -Sで調べる

dpkgは標準で入っている。

# dpkg -S /usr/x86_64-linux-gnu/include/stdc-predef.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/stdc-predef.h

dlocateで調べる

dlocateというラッパープログラムを利用する。

# sudo apt install dlocate
# dlocate /usr/x86_64-linux-gnu/include/stdc-predef.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/stdc-predef.h

これでapt install libc6-dev-amd64-cross/usr/x86_64-linux-gnu/include/stdc-predef.hが無いというエラーは出なくなるとわかる。