web-dev-qa-db-ja.com

特定のプログラムを実行しているときに、どのパッケージがまったく使用されていないかを判別できますか

ターゲットマシンにのみ特定のプログラムを自動的にインストールして実行するカスタムUbuntuサーバーディストリビューションを作成したいと思います。私はここで非常に良いガイドを見つけました:

カスタマイズされたubuntuサーバーisoを作成する方法

通常のインストールに伴うすべての膨張を削除したいのですが、どのパッケージがまったく使用されていないかを判別して、ディストリビューションからそれらを削除できるようにする方法はありますか?

ちなみに、上記のガイドに従ってUbuntu 14.04を実行している場合は、次のリンクを使用してキックスタートのバグを修正してください(コメントに追加するのに十分な評判がないため、追加する場合は、 してください)

キックスタートバグ修正ubuntu 14.04

2
10k3y3

strace :を使用して、プログラムがアクセスしたファイルを確認できます。

-e trace=file
   Trace all system calls which take a file name as  an
   argument.   You can think of this as an abbreviation
   for  -e trace=open,stat,chmod,unlink,...   which  is
   useful   to   seeing   what  files  the  process  is
   referencing.  Furthermore,  using  the  abbreviation
   will  ensure  that  you don't accidentally forget to
   include a call like  lstat  in  the  list.   Betchya
   woulda forgot that one.

だから、次のようなもの:

$ strace -fe trace=file -o log /bin/bash -c ''
$ awk -F\" '!a[$2]++&&/\//{print $2}' log | xargs dpkg -S 2>/dev/null | awk -F: '!a[$1]++{print $1}'
bash
libtinfo5
libc6

ただし、注意が必要です。この出力は、いずれにしても特に有用ではありません。

  • コマンドで使用されていないパッケージはわかりません。ファイルへのアクセス以外の方法で使用されている可能性があるためです(または、パッケージによって作成されたがdpkgのデータベース)。
  • どのパッケージがnotパッケージによって使用された可能性があるかはわかりません。たとえば、インタラクティブなbashセッションを実行した場合、パッケージの数ははるかに多くなります。これは主に、パッケージによって提供される完了スクリプトもカウントされているためです。リストにはGRUBも含まれています!そして、GRUBはbashでは明らかに必要ありません

あなたがすべきことは、ubuntu-minimalから始めて、プログラムがそれ以上実行するのに必要なものだけをインストールすることです(プログラムが不思議なエラーで死んだときに必要なものがわかります)。

1
muru