Linux Tools · 5 min read · Jan 03, 2026
IHLFS: Полный контроль над тем, что вы устанавливаете
IHLFS: Проверьте, что вы устанавливаете (и не только)
Введение
Как пользователь LFS (см. Linux From Scratch), я заинтересован в том, какие пакеты установлены на моей системе.
Краткое введение о LFS: LFS не является дистрибутивом, как Suse или RedHat, сообщество LFS стремится предоставить руководство по настройке вашей собственной системы Linux. На сайте очень подробно описано, как вы можете создать свою собственную систему Linux с нуля. Каждый пакет устанавливается путем компиляции и установки исходного кода.
В сообществе LFS проводились исследования о том, как отслеживать установленные пакеты. В данный момент такого инструмента еще нет.
Jhalfs, самый последний инструмент для автоматизации процесса создания системы LFS, имеет возможность использовать Paco (см. paco.sf.net).
Paco основан на механизме LD_PRELOAD, та же техника используется, например, в Gentoo. Эта техника выглядит многообещающе, но имеет некоторые серьезные недостатки.
Я искал другой способ отслеживания того, что команда, такая как
make installделает на моей системе. Я нашел это решение благодаря отличной идее Пьера Эберта. Он описывает в руководстве в разделе “Подсказки” на сайте LFS или на зеркале (см. Читайте подсказки онлайн, “TRIP, тривиальный пакетный менеджер для LFS (и других систем Linux)”) как вы можете достичь полного контроля над тем, что делает произвольная команда установки. С его помощью вы можете отслеживать каждый добавленный файл, каждое изменение и удаленный файл или каталог. Он работает не только с командой “make install”, упомянутой выше, но также может отслеживать все, что делает команда RMP.
Инструмент IHLFS, который я разработал, очень прост и основан на той же технике, что и TRIP. Он позволяет вам получить предварительный просмотр того, как будет выглядеть ваша система после установки файлов или целого пакета или чего угодно, что вы хотите добавить в свою систему. Если вам не нравится, как все выглядит - например, вы хотите, чтобы части устанавливались в разные места - вы всегда можете вернуться назад.
Название IHLFS расшифровывается как:
Install Helper Linux From Scratch
Это достигается путем создания точной копии вашей системы (своего рода виртуальной системы). В этой копии вы совершенно свободны в своих действиях, без какого-либо влияния на оригинальную систему. В любое время у пользователя есть возможность “переместить” или “сбросить” изменения из виртуальной системы в реальную.
Еще одно применение этой техники - создать среду для пользователя, который думает, что он находится в реальной системе, и действует таким образом. Но в то же время он может делать все, что ему нравится, не нанося вреда реальной системе.
Основная техника
Это может звучать как магия, но на самом деле это возможно только благодаря сочетанию некоторых техник из всех доступных для Linux.
Используя файловую систему Unionfs, chroot и некоторые хорошо выбранные перемонтированные каталоги, вы можете настроить эту виртуальную систему.
Unionfs
Самая важная часть - это использование unionfs. Unionfs дает вам возможность создать файловую систему, которая является объединением как минимум двух других. См. www.unionfs.org для получения дополнительной информации. Теперь, позволив новой файловой системе быть объединением нашей оригинальной файловой системы (корня) в режиме только для чтения и временной файловой системы (кэша) в режиме чтения и записи, вы получите файловую систему, которая выглядит точно так же, как ваша оригинальная файловая система, но в которой вы можете изменять, удалять и/или добавлять файлы, не нанося никакого вреда вашей оригинальной системе. Это невозможно, потому что корень смонтирован в режиме только для чтения. Каждое изменение сохраняется unionfs в кэше.
Единственное отличие между оригинальной и вновь созданной системой - это путь: в новой системе он всегда начинается с пути точки монтирования объединения. Вот почему следующий шаг необходим.
Chroot
Путем chroot к этой точке монтирования вы входите в среду, которая абсолютно является копией вашей системы. Вы можете делать все, что хотите, даже удалять важные каталоги и файлы. Проверьте это! Посмотрите, насколько далеко вы можете зайти, прежде чем ваша система зависнет.
(Re)Mounting
Еще одно, что вам нужно будет сделать, это (пере)монтирование нескольких ключевых каталогов, таких как /dev, /proc и /sys. Это связано с тем, что объединенная файловая система не сохраняет существующие точки монтирования.
Также рекомендуется перемонтировать некоторые специальные каталоги, такие как /tmp. Этот каталог используется скриптом конфигурации и командой make для хранения временных промежуточных результатов. Вы не хотите, чтобы программа ihlfs регистрировала их как серьезные изменения. Это также касается каталога, в котором строится исходный код.
Требования
Конечно, вам понадобится современная версия Linux. Посмотрите на сайте, какие ядра поддерживаются и какая версия Unionfs вам нужна. Разное ядро означает разную версию unionfs.
Ваше ядро должно поддерживать загрузку модулей.
Кроме того, требуется раздел с достаточным пространством для монтирования кэша. В данный момент это отдельный раздел.
Я сравнил производительность сборки в моей обычной системе и в виртуальной системе, и не заметил значительной разницы.
Наконец, IHLFS использует команды, которые должны быть на любой системе Linux (такие как tar, chroot, modprobe, mount, bash, find, grep и bzip2).
Установка
Скачайте пакет с моего сайта:
wget http://linux.bononline.nl/linux/ihlfs/src/ihlfs-1.0.tar.bz2Распакуйте архив в подходящий каталог:
tar -xjf ihlfs-1.0.tar.bz2
cd ihlfs-1.0Установка ihlfs осуществляется через
./install.shскрипт. Он просто создает несколько каталогов и копирует несколько файлов.
Как это работает
Перед тем, как начать, убедитесь, что файловая система, куда будет помещен кэш, смонтирована. И проверьте настройки в конфигурационном файле /etc/ihlfs/ihlfs.conf. Когда все будет в порядке, запустите программу с:
ihifsВы получите несколько сообщений, и когда все будет в порядке, появится приглашение:
/:>Теперь вы можете ввести любую команду, которую хотите. Обратите внимание, что объединение не поддерживает сохранение точек монтирования. Это может вызвать такие эффекты, как каталоги исходников, которые смонтированы там, где вы обычно собираете свое программное обеспечение, недоступны.
Когда вы хотите увидеть изменения до сих пор, введите:
listЭто покажет сводку изменений.
Когда вы хотите переместить все изменения из кэша в корень, введите:
flushЭта команда также создает резервную копию файлов и каталогов, которые будут перезаписаны, изменены или удалены, а также резервную копию всего, что будет установлено.
Удаление всех изменений осуществляется через:
cleanНаконец, завершение сеанса происходит с:
quit or exitПримеры
Некоторые простые примеры здесь. Добавьте файл:
~:>touch /tmp/test4ihlfs
~:>listдает в просмотрщике mcview:
Сводка.
--------
Не найдено добавленных, удаленных, измененных или перезаписанных файлов и/или каталогов!Это ожидаемо, каталог /tmp обходится объединением. Теперь создайте файл где-то еще:
~:>touch /var/tmp/test4ihlfs
~:>listСводка.
--------
Добавленные файлы.
------------
/var/tmp/test4ihlfsКонтакт
Если вы найдете ошибки или у вас есть идея, как можно сделать вещи лучше, пожалуйста, дайте мне знать! Мой адрес электронной почты stef at bononline dot nl. Но прежде чем вы продолжите, я хотел бы сказать, что я знаю, что способ, которым я программировал вещи, может не всегда быть самым эффективным. Я сделал это намеренно. Когда дело доходит до стиля программирования, я предпочитаю легкость чтения над эффективностью.
TODO
Этот пакет еще не завершен. Любой, кто знает что-то о менеджерах пакетов, может указать на них:
добавить выбор редактора в конфигурационный файл
сейчас ihlfs имеет только один режим: интерактивный. Он создает среду для пользователя. Режим командной строки, такой как:
ihlfs --command "make install"также должен быть возможен.
добавить флаги для идентификации имени пакета и версии, устанавливаемой.
добавить несколько примеров с различными командами
Get new posts in your inbox
No spam. Unsubscribe anytime.