Собираюсь создать пакетный менеджер на языке shell-scripting, возник вопрос изолирования процесса установки файлов в систему после компиляции.
Т.е. сначала оно должно устанавливать в другой каталог, заместо настоящего корня, потом, после анализа и логирования созданных в этом окружении файлов, пакетный менеджер их перенесёт в корень.
Каким образом это лучше осуществить?
Если использовать chroot или отдельного пользователя, после каждого пакета надо будет делать копию предыдущего состояния корня... В конце концов туда-сюда копировать гигабайты корня для каждого отдельного пакета — будет утомительный процесс. Плюс, наверняка, некоторые одни и те же файлы могут быть одновременно частью нескольких пакетов. Как отследить это, если файл уже существует?
Про LD_PRELOAD читал, что в некоторых ситуациях оно не всегда может отследить всё (в LFS, вроде бы, пишут что не может отслеживать статически скомпилированные программы), что его можно обмануть подменой переменных или с помощью каких-то системных вызовов.
Есть мысль, для каждого пакета парсить строки из makefile'а из секции install. Вопрос только, вдруг там могут быть какие-то услоавия if ..,;then ...;else ...;fi... Т.е. придётся для каждого пакета вручную создавать сценарий установки, а хотелось бы автоматизированно. Или там не бывает условий?
Как вообще всё это лучше организовать? Есть готовые решения?