Я хотел бы иметь возможность при запуске такой программы, как установщик, отслеживать список изменений, внесенных в мою файловую систему, чтобы впоследствии я мог отменить их.
РЕДАКТИРОВАТЬ: Это касается неупакованной программы. Я использую apt-get настолько далеко, насколько могу.
В идеале я хотел бы иметь возможность сделать что-то вроде:
(sudo) catch-modifs some-installer.bin > fsmodifs.patch
А потом:
(sudo) revert-modifs fsmodifs.patch
Есть ли удобный способ сделать это?
unionfs
- в основном, файловая система RW принимает все записи, но файловая система RO все еще видна под ней. Если файл изменился, он «мигрирует» в RW fs; если он удален, на RW fs на самом деле есть «волшебный точечный файл», который «маскирует» его. Настройкаunionfs
может быть немного обидчивой, поэтому я предложил LiveUSB (он делает эту часть за вас, и у вас есть «чистый» образ системы для запуска)Может быть, взглянуть на tripwire? Tripwire более пассивен, чем ваш активный пример, но все же может работать на вас.
http://www.linuxjournal.com/article/8758
источник
Посмотрите на Installwatch:
http://en.wikipedia.org/wiki/Installwatch#Functionality
http://asic-linux.com.mx/~izto/checkinstall/installwatch.html
источник
Используется
LD_PRELOAD
для загрузки библиотеки, которая перехватываетopen
библиотечную функцию и изменяет путь / регистрирует выходные данные / создает резервную копию перед открытием файла.Посмотрите на исходный код для
strace
.источник
Если установщик использует некоторые средства упаковки (например, для
.deb
пакетов для Debian / Ubuntu / ...,.rpm
пакетов для RedHat / CentOS / ... и т. Д.), То установщик пакетов должен знать, что делать при установке и удалении. И я считаю, что вы должны использовать существующие упаковочные системы , а не изобретать свою собственную. (Обычно в Linux нет инсталляторов, как в Windows).Если вы действительно хотите следить за изменениями файлов, внесенными каким-либо процессом, вы можете использовать
strace
илиltrace
перехватывать системные вызовы. Вы также можете inotify и связанных объектов.Но я не знаю о
catch-modifs
иrevert-modifs
как вы хотите.Я предлагаю не делать установщик для вашего приложения, а использовать менеджер пакетов, следовательно, для предоставления
.deb
(и / или.rpm
) пакетов для вашего приложения. Они будут обрабатывать проблемы зависимости лучше, чем ваш собственный установщик.источник
Самый простой способ достичь желаемого: установить «ненадежное» приложение в совершенно новый экземпляр виртуальной машины (рабочая станция VMWare, Oracle VirtualBox и т. Д.).
Когда вы решите, что вам больше не нужно приложение, удалите виртуальную машину.
Другие ваши альтернативы - перехват системных обращений к файлу - скорее всего будут подвержены ошибкам и неполны. Будьте особенно осторожны с любым решением, для работы которого требуется динамическое связывание (как, по-видимому, делает Installwatch). Установщик может вполне законно выполнять прямые системные вызовы или быть статически связанным.
источник