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

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

Прародителем всех систем построения пакетов была система портов FreeBSD (ports), практически в неизменном виде заимствованная OpenBSD и некоторое время использовавшаяся по наследству в DragonFlyBSD. Под её влиянием возникла очень сходная система pkgsrc в NetBSD, о которой уже упоминалось в историческом разделе.

Однако разработчики дистрибутивов Linux, как правило, идут своим путем в деле создания систем портирования. Правда, такие их представители, как CRUX и Archlinux, не очень далеко отошли от прототипа. В них портообразные системы построения пакетов (ports и abs, соответственно) мирно сосуществуют с самостоятельными (и весьма развитыми) средствами пакетного менеджмента: так, pacman из Archlinux, если еще и не достиг мощи Debian'овского apt'а, то стремительно движется в этом направлении. Тем не менее, сами пакеты, распространяемые в составе дистрибутива, генерируются за счет портообразной системы, которая позволяет также легко выполнить и пересборку базовой системы в соответствие с запросами пользователя.

Самой известной, распространённой и, я бы сказал, самой изощрённой портообразной системой Linux-мира являются портэжи (portages) из дистрибутива Gentoo, меньшей популярностью пользуются sorcery, применяемый в дистрибутивах Sorcerer и SourceMage, и его потомок lunar из одноимённого дистрибутива. Не смотря на их принципиальное сходство (обусловленное наследованием идейных традиций портов FreeBSD), двух одинаковых среди них мы не обнаружим -- система portage из Gentoo отличается от «заклинаний» (sorcery) из Sorcerer как реализацией, так и приёмами использования.

Непреодолимой грани между системами управления бинарными пакетами и производными от системы портов не существовало никогда, а со временем она всё больше стирается. Так, Debian'овская утилита apt-build позволяет одной директивой пересобрать «с нуля» всю систему ничуть не менее эффективно, нежели это делает команда emerge из дистрибутива Gentoo. Для которого, кстати, существует несколько вариантов распространения в бинарной форме. Бинарные пакеты FreeBSD, NetBSD и DragonFlyBSD генерируются из исходников посредством системы портов или pkgsrc, соответственно. А для Archlinux и особенно CRUX, с их системами abs и ports, соответственно,) вообще трудно сказать, где кончаются порты и начинаются бинарники.

С другой стороны, некоторые системы пакетного менеджмента (например, netpkg и swaret) не сопряжены с системами построения пакетов и не являются их производными. Хотя средства автоматизированной сборки пакетов существуют и для них (иначе им нечем было бы управлять), они не пронизывают всю систему сверху донизу, как это характерно для Gentoo и, в меньшей степени, остальных портообразных систем.

Могу предположить, что и для rpm-based дистрибутивов существуют средства автоматической сборки системы из исходников, посредством которых собираются, вероятно, такие клоны RHEL (Red Hat Enterprise Linux), как Scientific Linux и CentOS. Однако и они не валяются на виду, не являясь сквозными для этих дистрибутивов. Хотя, возможно, что я просто недостаточно осведомлён в этой области.

Что же до Debian, то в нем скорее не пакетный менеджмент является производным системы построения пакетов, а как раз наоборот: механизм apt-build являет собой лишь частный случай использования метамеханизма, если так можно выразиться, apt. Показательно, что родственные apt системы или производные от нее (aptitude и Synaptic) аналогов механизма apt-build вроде бы не имеют. И, кстати, мне не доводилось слышать, чтобы кто-нибудь из лично знакомых пользователей Debian'а или убунтоидов еженедельно занимался пересборкой системы посредством

$ apt-build world

А ведь это занятие занимает не последнее место в распорядке дня каждого истинного джентушника...

В общем, можно констатировать, что большинство распространённых дистрибутивов Linux и, несколько в меньшей степени, BSD-систем и систем, основанных на OpenSolaris, допускают более или менее широкий выбор средств установки пакетов, систем управления бинарными пакетами и (или) портообразных систем. И каждый из доступных вариантов имеет свое целевое назначение.

Давно прошли времена, когда казалось, что сборка системы «с нуля», использующая должные флаги оптимизации для наличного «железа» — идея, наиболее последовательно проводимая в Gentoo, — способна обеспечить фантастический прирост производительности по известному принципу «счастье для всех — и даром». И потому разумным решением будет сочетание пакетной установки (оптимальной в большинстве случаев) и собственной сборки критически важных приложений.


Теги: , , , , , , ,