Beyond Linux From Scratch. Версия 6.0

Часть I. Введение

Управление пакетами

Управление пакетами является часто запрашиваемым дополнением к книге LFS. Менеджер пакетов позволяет отслеживать установку файлов, делая легким их удаление, и обновлять пакеты. И перед тем, как Вы начнете радоваться, НЕТ—этот раздел не рассказывает о каком-нибудь особенном менеджере пакетов, не рекомендует. Здесь предоставляется обзор наиболее популярных способов и то, как они работают. Наилучший для Вас менеджер пакетов может быть среди этих способов или может быть комбинацией нескольких. Этот раздел коротко оговаривает проблемы, которые могут появиться при обновлении пакетов.

Некоторые основания, почему менеджеры пакетов не описаны в LFS или BLFS:

Существует несколько советов, написанных на тему управления пакетами. Посетите Подпроект советов для поиска подходящего для Вас варианта.

Задачи обновления

Менеджер пакетов делает обновление пакетов на более новую версию при ее появлении. Обычно инструкции, описанные в книгах LFS и BLFS, могут быть использованы для обновления на новые версии. Есть несколько моментов, которые Вы должны знать при обновлении пакетов, особенно на работающей системе.

Способы управления пакетами

Следующее является общим в способах управления пакетами. Перед принятием решения о менеджере пакетов проведите поиск различных способов, особенно недостатков отдельных схем.

Это все в моей голове!

Да, это техника управления пакетами. Некоторые люди не видят необходимости в управлении пакетами потому, что они знают пакеты лично и знают, какие файлы установлены каждым пакетом. Некоторые пользователи также не нуждаются в любом управлении пакетами потому, что они планируют пересборку целой системы при изменении пакета.

Установка в отдельные каталоги

Это простейшее управление пакетами, которое не требует дополнительных пакетов для управления установкой. Каждый пакет устанавливается в отдельный каталог. Например, пакет foo-1.1 установлен в /usr/pkg/foo-1.1 и сделана ссылка из /usr/pkg/foo на /usr/pkg/foo-1.1. Когда устанавливается новая версия foo-1.2, она устанавливается в /usr/pkg/foo-1.2 , а предыдущая ссылка заменяется ссылкой на новую версию.

Переменные окружения, описанные в разделе “После BLFS, необходимо расширить для включения /usr/pkg/foo. Для более чем нескольких пакетов такая схема становится неуправляемой.

Управление пакетами, основанное на ссылках

Это вариация предыдущей техники управления пакетами. Каждый пакет установлен аналогично предыдущей схеме. Но установлен, делая ссылку на каждый файл в иерархию /usr. Это исключает необходимость расширять переменные окружения. Хотя ссылки могут быть созданы пользователем, для автоматизации их создания было написано много менеджеров пакетов. Некоторые из таких популярных менеджеров: Stow, Epkg, Graft и Depot.

Установка должна быть обманута так, чтобы пакет думал, что он установлен в /usr, хотя в действительности он установлен в иерархию /usr/pkg. Установка таким способом обычно не тривиальная задача. Например, предположим, что Вы устанавливаете пакет libfoo-1.1. Следующие инструкции могут не установить пакет корректно:


./configure --prefix=/usr/pkg/libfoo/1.1
make
make install

Установка будет работать, но зависимые пакеты могут не компоноваться с libfoo, как Вы могли бы ожидать. Если Вы компилируете пакет, который компонуется с libfoo, Вы можете отметить, что он скомпонован с /usr/pkg/libfoo/1.1/lib/libfoo.so.1 вместо /usr/lib/libfoo.so.1, как Вы бы ожидали. Корректным подходом является использование стратегии DESTDIR для обмана установки пакета. Это работает следующим образом:


./configure --prefix=/usr
make
make DESTDIR=/usr/pkg/libfoo/1.1 install

Большинство пакетов поддерживают такой подход, но есть и такие, которые не поддерживают. Для неподдающихся пакетов Вам также может понадобится установить пакет вручную, или Вы можете найти, что проще установить некоторые проблемные пакеты в /opt.

Управление, основанное на отметке по времени

При такой технике файл перед установкой пакета отмечается по времени. После установки пакета простое использование команды find с соответствующими опциями может сгенерировать лог обо всех файлах, установленных после создания файла, отмеченного по времени. Менеджер пакетов, написанный с таким подходом, это install-log.

Хотя такая схема имеет преимущество простоты, она имеет два недостатка. Если во время установки файлы установлены с другой отметкой по времени, не соответствующей текущему времени, то они не будут отслежены менеджером. Также эта схема может быть использована только тогда, когда за одно время установлен один пакет. Логи ненадежны, если два пакета были установлены на двух различных консолях.

Управление, основанное на LD_PRELOAD

При таком подходе библиотека перед установкой предзагружается. В течении установки эта библиотека отслеживает пакеты, которые были установлены, присоединением себя к различным исполняемым файлам, таким как cp, install, mv и отслеживает системные вызовы, изменяющие файловую систему. Для работы такого метода, все исполняемые файлы должны быть скомпонованы динамически без битов suid или sgid. Предзагрузка библиотеки может означать некоторые нежелательные эффекты во время установки. Хотя, выполните некоторые тесты, чтобы убедиться, что менеджер пакетов ничего не портит и отчитывается о всех соответствующих файлах.

Создание архива пакетов

При такой схеме установка пакета перенаправляется в отдельное дерево, как описано в методе управления пакетами, основанном на ссылках. После установки создается архив пакета, использующий установленные файлы. Этот архив затем используется для установки пакета как на текущую машину, так и может быть установлен на другую.

Такой метод используется в большинстве менеджеров пакетов, находящихся в коммерческих дистрибутивах. Примеры менеджеров пакетов, соответствующих этому методу, это RPM, pkg-utils, apt Debian и система портежей Gentoo.

Управление, основанное на имени пользователя

Эта схема, которая уникальна для LFS, была придумана Matthias Benkmann, и доступна на Hints Project. В этой схеме каждый пакет установлен под отдельным пользователем в стандартные места. Файлы, принадлежащие пакету, идентифицируются просто проверкой ID пользователя. Преимущества и недостатки этого способа слишком комплексны для описания в этом разделе. Для большей информации обратитесь к совету на http://www.linuxfromscratch.org/hints/downloads/files/more_control_and_pkg_man.txt .