web-dev-qa-db-ja.com

インストーラー(rpm、deb)が作成したファイルを見つける方法は?

インストーラーが行ったすべてのファイルシステムの変更を確認する必要があります。インストールされているパッケージはrpmまたはdebである可能性が高いですが、もちろん、アプリを単純にコピーするか、configure; make; makeインストール方法でコンパイルしてインストールすることもできます。 rpmとdebにはファイルリストがありますが、それらのインストール後のスクリプトは追加のファイルシステムの変更を行う可能性があります。

私は最初に、別のアプリケーションを監視して、他のアプリが行ったすべてのファイルシステムの変更を見つけることができるアプリケーションを探しました。何も見つかりませんでした。

次に、レイヤードファイルシステムを調べました。アプリのインストールを開始する前に、レイヤードファイルシステムにアプリをインストールしてから、レイヤードファイルシステムにアプリをインストールし、レイヤーで発生したすべての変更を確認しました。私が見つけた最高のものは mini_fo でしたが、2006年以降維持されていないようです。また、/にオーバーレイするだけではないようです(これにより、レイヤーからいくつかのものが隠されます)。

次に、inotifyベースのソリューションを調べましたが、/から始まるすべてを監視するのは実用的ではないようです。たとえば、inotifywatch(linux.die.net/man/1/inotifywatch)は、デフォルトで時計の制限がわずか8kであると述べています。また、ウォッチャーのインストールにも時間がかかります。また、新しく作成されたディレクトリがすぐに監視されないため、ディレクトリの変更を見逃す可能性があるバグもあるようです。

インストールの前後にファイルシステムからスナップショットを取り、比較する以外に、私がやりたいことを達成する他の方法はありますか?

4
Auditor Newbie

strace を介してインストールを実行してみたくなります。少しうるさいですが、ログに記録される他のすべてのものの中で、書き込まれるすべてのものを見ることができるはずです。

これは、インストール中にすべてのファイルアクセスをあまりノイズなしで表示することに近づいたように見えるコマンドです。

Sudo strace -o /tmp/install.log -f -e trace=file apt-get install package
5
Zoredache

この質問はすでに回答済みですが、とにかく私がやっていることを投げます。ファイルが作成、削除、または変更されたかどうかを確認するだけの場合は、次の操作を実行できます。

find / -xdev -printf '%p\t%c\n' |sort >/tmp/before
rpm/dpkg/apt-get/yum/whatever
find / -xdev -printf '%p\t%c\n' |sort >/tmp/after
diff -u /tmp/before /tmp/after |less

それでおしまい。ファイルがどのように変更されたかは明らかにわかりませんが、少なくとも何らかの方法で変更されたことがわかります。

5
Jeff Snider

RPMに関しては、次のコマンドを呼び出すことにより、パッケージによってインストールされたファイルのリストを取得できます。

rpm -ql <package_name>

インストールする前にを知る必要がある場合は、パッケージの内容を一覧表示する次のワンライナーを使用できます。

[〜#〜] rpm [〜#〜]の場合(rpm2cpiocpioコマンドが必要です):

rpm2cpio <package>.rpm | cpio -vt

[〜#〜] deb [〜#〜]の場合(artarコマンドが必要):

ar p <package>.deb data.tar.gz | tar zt

上記の情報はすべてhttp://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/から取得されています。どちらの場合も、インストールされるファイルのリストが表示されます。これらのパッケージに含まれるインストール前後のスクリプトによって、さらに多くのファイルが作成される可能性があります。それらのファイルをリストすることは不可能です。

2
Born To Ride

Installwatchをチェックアウトすることをお勧めします: http://www.asic-linux.com.mx/~izto/checkinstall/installwatch.html およびcheckinstall: http:// asic- linux.com.mx/~izto/checkinstall/ 。インストールプロセスが実際に何に影響するかを決定するための両方の非常に基本的なユーティリティ。

そうは言っても、ジェフの発見| sortコマンドは良い考えですが、マシン上のすべてのファイルを手動で2回検査するだけなので、少し「かさばる」場合があります。

1
samuelstringham

質問は古く、回答は更新が必要です。

解決策1:コンテナまたはVMを使用して、ベースイメージとの差分を作成します。

ソリューション2:auditdを使用する

解決策3systemtapを使用して、書き込み用に開いているすべてのファイルを監視します。参照: https://sourceware.org/systemtap/examples/lwtools/opensnoop-nd.stp

stap -e 'probe begin{ printf("%6s %6s %16s %4s %s\n", "UID", "PID", "COMM", "FD", "PATH");} probe nd_syscall.open.return{ printf("%6d %6d %16s %4d %s\n", uid(), pid(), execname(),returnval(), user_string(@entry(pointer_arg(1))));}'

解決策4:@ Zoredacheが言及したように、straceまたはltraceを使用します。

0