Есть ли способ получить список имен файлов/путей, которые make install
копирует в файловую систему? Некоторые пакеты поставляются с файлом MANIFEST, но не с теми, с которыми я работаю.
Какие файлы сделали "сделать установку", и где?
Ответ 1
Самый надежный способ - использовать chroot: "make install" выполняется внутри тюрьмы chroot; вычислить список файлов, которые были у вас перед установкой, и сравнить их со списком файлов после установки.
Многие установки будут поддерживать либо опцию конфигурации --prefix, и/или переменную среды DESTDIR. Вы можете использовать их для версии chroot с более легким ожиданием (доверяя, что установка завершится неудачно, если она попытается записать в другое место, если вы запускаете установку как довольно непривилегированный пользователь).
Другой подход заключается в замене программы установки. Многие пакеты поддерживают переменную среды INSTALL, которая, как правило, используется программой установки; существуют трассировочные версии установки.
Ответ 2
Я просто изучал это сам, компилируя пользовательскую версию QEMU. Я использовал следующий метод, чтобы определить, что было установлено и где (а также использовать его в качестве основы для файла .deb):
mkdir /tmp/installer
./configure --target-list=i386-softmmu
make
sudo make install DESTDIR=/tmp/installer
cd /tmp/installer
tree .
Дерево - это утилита, которая рекурсивно отображает содержимое каталога визуально привлекательным образом - sudo apt-get install tree
для пользователей Debian/Ubuntu
Надеюсь, что это помогает кому-то... мне потребовалось немного подсунуть ему, но я нашел это довольно полезным способом визуализации того, что происходит.
Ответ 3
Он отличается для каждого проекта, который вы запускаете "make install". Установленные файлы контролируются целью установки в используемом файле Makefile. Лучше всего открыть Makefile и выполнить поиск "install:" - оттуда вы увидите, какие файлы будут скопированы в вашу систему.
Ответ 4
make uninstall
может показывать файлы, удаляя их, если автор инструкций по компиляции предоставляет информацию, позволяющую удалить (прошло некоторое время с тех пор, как я сделал одно, поэтому не могу сказать точно).
Также make -n install
выполнит "сухой ru n" процесса установки, и может быть разумным извлечь информацию из ее результатов.
Ответ 5
Если программа установки, которую вы используете, не поддерживает DESTDIR или --prefix (или эквивалент), я обнаружил, что может быть возможно идентифицировать новые файлы следующим образом:
- Начните с как можно более чистой системы (предпочтительнее новый образ VM)
- Скомпилируйте программное обеспечение, подождите несколько минут.
- Установите пакет программного обеспечения.
- Найти файлы, измененные за последние 5 минут:
sudo find / -mmin -5 -type f
(команда find содержит тонну параметров для запросов на основе изменения файла/времени создания, но это сработало для меня довольно хорошо: вам просто нужно сократить время так что вы выбираете файлы, созданные установщиком, но ничего больше).
Ответ 6
- Сделайте снимок содержимого места установки перед установкой
- Установить
- Сравните текущее содержимое со старым.
Пример:
./configure --prefix /usr/local
make -j'nproc'
find /usr/local | sort -u > /tmp/snapshot1
make install
find /usr/local | sort -u > /tmp/snapshot2
comm -3 /tmp/snapshot{1,2} # this prints the files added by 'make install' to stdout