Szabad szoftvert használók és fejlesztők nemzetközi konferenciája

pkgsrc4unix

Aleksey Cheusov, Minsk, Belarus

LVEE 2013

pkgsrc is a cross-platform packaging system. Besides NetBSD where it was born in 1997, pkgsrc supports Linux, Solaris, all BSDs, Minix, QNX and a lot of others. In total 15 platforms are supported. Pkgsrc has a number of advantages over existing packaging systems: easy packaging, support for many compilers, efficient binary package management and source-based upgrades but the killer-feature is a support for diverse operating systems. Adapting pkgsrc for Linux as an additional yum/zypper/apt repository of binary packages is considered here.

pkgsrc — кросс-платформная пакетная система, созданная в 1997 году как ответвление FreeBSD ports. Несмотря на то, что разрабатывается она в основном разработчиками NetBSD, pkgsrc поддерживает практически все живые операционные системы, существующие на данный момент. Среди них Linux, Solaris, все варианты BSD, QNX, Haiku, AIX, HP-UX и многие другие. pkgsrc является по сути единственной пакетной системой, поддерживающей на неплохом уровне такой широкий набор операционных систем, что дает пользователю, будь то крупная компания или один человек, возможность на любой платформе использовать один и тот же знакомый набор пакетов для работы. Это очень удобно особенно в тех случаях, когда пользователю необходимо достаточно редкое программное обеспечение, отсутствующее по той или иной причине в типичных, в последнее время Десктоп-ориентированных, Линукс-истрибутивах.

В подобных случаях есть два принципиально разных пути решения этой проблемы. Путь первый - если пакета нет в системе, значит он нам не нужен. Нет, это не наш метод :) Второй путь - самостоятельное пакетирование. Опытный специалист в состоянии самостоятельно запакетировать необходимое ПО под необходимый дистрибутив или систему. В этом случае необходимо изучить правила пакетирования для конкретной системы и строго следовать им. На мой взгляд, с этим связан один существенный недостаток. Эти правила часто весьма специфичны и полученные от их изучения знания лишь отчасти могут быть применены при работе с другими системами. Так, например, диалекты rpm spec и доступный набор макроопределений довольно сильно отличаются в различных дистрибутивах Линукса и практически не используются в других ОС, правила пакетирования для OpenBSD, FreeBSD, Gentoo или Arch linux вообще
мало похожи на все остальные системы пакетирования. Другой недостаток, еще более серьезный на мой взгляд - это зависимость разработанного пакета под одну определенную систему, а чаще всего, дистрибутив. Если выбор ОС и дистрибутива уже сделан и сделан на всю жизнь ;-), это не представляется большой проблемой, но я сомневаюсь в том, что людей, осознанно использующих одну единственную систему больше, скажем, пяти лет, слишком много. Обычно система подбирается под конкретную решаемую задачу, а не наоборот, поэтому часто складывается ситуация, когда система уже определена, а потому усилия потраченные на самостоятельное пакетирование необходимого ПО под другую систему могут оказаться напрасными. Частично эту проблему решает система OpenBuildService (OBS), разрабатываемая сообществом OpenSuSE. Она позволяет, имея в распоряжении единый язык для описания сценариев пакетирования (rpm spec) создать пакет для различных дистрибутивов Линукса. Но… лишь Линукса! :-) Инфраструктура инфтраструктурой, но для успешного пакетирования тысяч и тысяч пакетов под различные операционные системы и среды необходимо сообщество, в котором уже сложилась традиция разработки переносимого ПО. Я сомневаюсь, что Линукс-сообщество в целом и сообщество OpenSuSE/OBS в частности на это способно. Скорее наоборот, в последнее время все чаще и чаще в мире Linux раздаются призывы отказаться от POSIX и разработывать ПО исключительно под единственно верную венценосную систему.

К счастью, не все разработчики забыли о пользе переносимости. Одно из сообществ таких разработчиков - разработчики pkgsrc, где, как уже было сказано, пакеты изначально разрабатываются с расчетом на то, чтобы обеспечить максимально возможное количество поддержиаемых систем. pkgsrc обладает всем необходимым для серьезной работы: удобным механизмом сборки пакетов, включая разработку заплаток для исправления ошибок, поддержкой работы с бинарными пакетами, системой массовой сборки пакетов (bulk builders) и прочим. По ряду параметров pkgsrc превосходит rpm и deb форматы и соответствующие программы (dpkg, yum, apt, zypper и т.д.), наиболее широко используемые в Линуксе и считающиеся стандартом de facto. Но речь не о них.

Из коробки pkgsrc предоставляет весь необходимый набор инструментов как для разработки и сборки пакетов, так и для управления установленными пакетами в системе. Однако, оставим процесс пакетирования и сборку в стороне. С точки зрения системного администратора pkgsrc в системе будет иметь отдельную базу данных установленных пакетов (pkgdb) параллельно с основной использующейся в системе, например, rpmdb и, соответственно, отдельный набор пакетов и утилит для работы с ними. Не большая проблема для профессионала, но для массового пользователя это может показаться неудобным. Одним из способов решения данной проблемы — преобразование “родных” пакетов pkgsrc в “родные” пакеты ОС и формирование на их основе репозитория дополнительного ПО и установка/удаление/поиск/… по общим для системы правилам, будь то yum, zypper или aptitude.

Цель моего проекта pkgsrc4unix - создание регулярно обновляемого полноценного yum репозитория пакетов для RHEL-6 (для начала), создаваемого на основе pkgsrc. Особенности: для сборки ПО используется инфраструктура pkgsrc, а не rpm spec; для массовой сборки пакетов также используются средства pkgsrc; пакеты в формате pkgsrc преобразуются в .rpm для RHEL-6 и далее из rpm пакетов создается yum-репозиторий; для исключения конфликтов на уровне файлов с пакетами RHEL, repoforge, epel и др. все ПО устанавливается в /opt/pkgsrc4unix, для исключения конфликтов на уровне названий пакетов каждый пакет имеет префикс “nb-”; для управления конфигурационными файлами используется подход pkgsrc; для старта демонов используется механизм NetBSD/pkgsrc, при этом все необходимое для этого ПО реализуется в виде отдельного rpm пакета.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Vissza