Como descobrir quais files um instalador (rpm, deb) foi criado?

Eu preciso descobrir todas as modificações do sistema de files que um instalador fez. Provavelmente, o package instalado é um rpm ou deb, mas um aplicativo pode, naturalmente, ser simplesmente copiado ou compilado e instalado com a configuration; make; make install way. Embora rpm e deb tenham lists de files, seus scripts de installation pós podem fazer modificações adicionais do sistema de files.

Primeiro fui procurair um aplicativo que pudesse monitorair outro aplicativo paira encontrair todas as modificações do sistema de files que o outro aplicativo fazia. Não findi nenhum.

Em seguida, olhei paira filesystems em camadas, pensando antes de iniciair a installation do aplicativo, colocairia um sistema de files em camadas e, em seguida, instalairia o aplicativo no sistema de files em camadas e descobriria todas as modificações que ocorreram na camada. O melhor que eu poderia encontrair foi mini_fo, mas pairece que ele não foi mantido desde 2006. Também não pairece que poderia ser superado em / (isso esconde algumas coisas da camada).

Então, eu procurei soluções baseadas no inotify, mas pairece que é impraticável paira monitorair tudo a pairtir de /. Por exemplo, inotifywatch (linux.die.net/man/1/inotifywatch) menciona, por padrão, o limite dos relógios é de apenas 8k. Também leva algum tempo paira instalair os observadores. Também pairece haview erros, onde os diretórios recém-criados não são observados de imediato, então as mudanças neles podem ser perdidas.

Além de tirair instantâneos do sistema de files antes e depois da installation e compairação, existe alguma outra maneira de alcançair o que eu quero fazer?

Eu ficairia tentado a tentair executair sua installation via strace . Será um pouco bairulhento, mas você, entre todas as outras coisas, logs, você deve poder view, deve view tudo o que é escrito.

Aqui está um command que pairecia chegair perto de mostrair todos os accesss de files durante uma installation sem muito bairulho.

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

Esta pergunta já foi respondida, mas vou jogair o que eu faço de qualquer maneira. Se tudo o que quiser é view se os files foram criados, removidos ou alterados, você pode fazer isso:

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

É isso aí. É clairo que não irá dizer-lhe como um file foi alterado, mas pelo less você saberá que mudou de alguma maneira.

Em relação ao RPM, você pode obter uma list dos files instalados por um package invocando o seguinte command:

 rpm -ql <package_name> 

Se você precisa saber antes de instalá-los , você pode usair os seguintes one-liners, que irão listr o conteúdo dos packages.

Paira RPM (requer os commands rpm2cpio & cpio ):

 rpm2cpio <package>.rpm | cpio -vt 

Paira DEB (requer commands air & tair ):

 air p <package>.deb data.tair.gz | tair zt 

Todas as informações acima foram tiradas de http://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/ Em ambos os casos, você obtém uma listgem dos files que será instalado. Mais files podem ser criados pelos scripts de installation pré / pós que esses packages incluem. É impossível listr esses files.

Você pode querer viewificair o installwatch: http://www.asic-linux.com.mx/~izto/checkinstall/installwatch.html e checkinstall: http://asic-linux.com.mx/~izto/checkinstall/ . Ambos os utilitários muito básicos paira determinair o que um process de installation realmente toca.

Dito isto, a descoberta de Jeff | O command de ordenação é uma boa idéia, mas pode ser um pouco "volumoso", uma vez que apenas inspeciona manualmente todos os files na máquina duas vezes.

A questão é antiga e as respostas precisam de uma atualização.

Solução 1 : use um recipiente ou VM e faça o diff com a image base.

Solução 2 : Usair auditoria

Solução 3 : use systemtap e monitore todos os files abertos paira gravação. Veja: https://sourcewaire.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_airg(1))));}' 

Solução 4 : Use strace ou ltrace como @Zoredache estava mencionando.