Содержание
Создание собственного репозитория пакетов
Зачем нужен свой репозиторий
Создание собственного репозитория имеет смысл, когда есть необходимость в пакетах с опциями, отличными от опций по умолчанию. В противном случае лучше пользоваться официальными репозиториями или их зеркалами. Соответственно, в собственном репозитории разумно поддерживать только те пакеты, которые необходимы в использовании.
Poudriere
Утилита Poudriere предназначена для тестирования нового ПО на FreeBSD, однако, она может быть успешно использована и для создания собственного репозитория. Для использования Poudriere необходимо, чтобы система находилась на файловой системе zfs.
Установка и настройка Poudriere
Устанавливаем из системы портов:
epsilon# cd /usr/ports/ports-mgmt/poudriere && make install clean
Настраваем примерно так:
epsilon# cat poudriere.conf ZPOOL=system # Имя моего пула zfs. ZROOTFS=/poudriere # Корень для монтирования файловой системы в zfs. FREEBSD_HOST=ftp://ftp.ru.freebsd.org # Хост, с которого мы хотим загружать файлы для создания jail-а. RESOLV_CONF=/etc/resolv.conf # Берем с основной системы, так как в jail-е по умолчанию его нет. POUDRIERE_DATA=/usr/local/poudriere_data # Здесь храним пакеты и логи. BASEFS=/usr/local/poudriere # Здесь храним jail-ы и дерево портов. USE_PORTLINT=no # В данном контексте portlint нам не нужен. USE_TMPFS=yes # Используем memory device для ускорения сборки. DISTFILES_CACHE=/usr/ports/distfiles # Здесь мы храним загруженные исходники. CRONDIR=${BASEFS}/cron # cron для jail-а. CHECK_CHANGED_OPTIONS=yes # Проверяем, изменились ли опции. PARALLEL_JOBS=4 # Разрешаем использовать столько процессоров.
Создание репозитория
Создаем дерево портов командой
epsilon# poudriere ports -c
При этом будет создана новая файловая система в пуле zfs. Она будет смонтирована BASEFS/ports/default. После чего в нее будет устанавлено дерево портов при помощи утилиты portsnap.
При следующем использовании заново создавать дерево портов не нужно. Просто обновляем дерево:
epsilon# poudriere ports -u
Эта команда автоматически монтирует файловую систему с деревом портов и обновляет его.
Далее нужно создать jail-ы, в которых, собственно, и будет происходить создание пакетов FreeBSD. Jail-ов может быть несколько или один. Рассмотрим пример.
Предположим, мы хотим создать репозиторий пакетов для FreeBSD 9.1-RELEASE на архитектуре amd64. Это делается командой
epsilon# poudriere jail -c -j FBSD91amd64 -v 9.1-RELEASE -a amd64
Здесь
- -c — ключ для создания jail-а.
- -j FBSD91amd64 создает jail с именем FBSD91amd64. Имя придумывается произвольным образом, не содержит точек и пробелов.
- -v — ключ для указания версии.
- -a — ключ, определяющий архитектуру.
Эта команда создает файловую систему в пуле zfs, монтирует ее, устанавливает в jail с нужной версией системы и нужной архитектурой с FREEBSD_HOST.
Теперь настраиваем jail. Это делается указанием опций для poudriere (а не внутри jail-а!):
epsilon# mkdir /usr/local/etc/poudriere.d
В этой директории находятся опции для всех jail-ов. Настройки для разных jail-ов отличаются указанием префикса - имени jail-а.
Открываем любимый текстовый редактор и настраиваем make.conf для jail-а FBSD91amd64:
epsilon# ee /usr/local/etc/poudriere.d/FBSD91amd64-make.conf
В результате получим что-то вроде
epsilon# cat FBSD91amd64-make.conf WITH_PKGNG=yes QT4_OPTIONS=NAS CUPS_OVERWRITE_BASE=yes PORTSDIR?=/usr/ports .if ${.CURDIR} == ${PORTSDIR}/editors/openoffice-3 LOCALIZED_LANG=ru .endif
Обратите внимание, что префикс FBSD91amd64 должен совпадать с именем jail-а.
Кроме того, в /usr/local/etc/poudriere.d создаем директорию FBSD91amd64-options, куда должны помещаться опции портов. Сюда можно положить содержимое каталога /var/db/ports. При запуске poudriere в режиме создания пакетов эта директория будет смонтирована в jail-е в /var/db/ports.
Далее создаем текстовый файл со списком пакетов, которые нам требуются. Например,
epsilon# cat pkglist-amd64 ### Графическая оболочка russian/kde4-l10n x11/xorg x11/kde4 x11/nvidia-driver x11/nvidia-xconfig x11-fonts/liberation-fonts-ttf ### Интернет-приложения irc/kvirc mail/sylpheed net-im/skype net-im/vacuum-im net-p2p/transmission-qt4 www/firefox www/linux-f10-flashplugin11 www/nspluginwrapper ### Офисные приложения deskutils/calibre deskutils/fbreader editors/libreoffice-ru print/foxitreader print/ghostscript9 sysutils/k3b-kde4 textproc/goldendict ### Мультимедийные приложения audio/clementine-player multimedia/mencoder multimedia/kmplayer-kde4 multimedia/vlc multimedia/webcamd ### Графические приложения graphics/djview4 graphics/gimp-app graphics/xsane ### Сельскохозяйственные приложения archivers/p7zip archivers/rar comms/obexapp dns/unbound emulators/virtualbox-ose #emulators/wine ftp/wget misc/mc net/samba36 net/wireshark net/mpd5 net/rdesktop ports-mgmt/pkg-devel ports-mgmt/poudriere print/cups print/foomatic-filters print/foomatic-db security/nmap security/openvpn security/pgp sysutils/battmond sysutils/apcupsd sysutils/jfbterm sysutils/lsof sysutils/ntfsprogs sysutils/smartmontools sysutils/screen sysutils/uhidd www/nginx x11/xev ### Приложения математика editors/kile-kde4 editors/klat4 #math/sage print/texlive-full #russian/pscyr ### Приложения разработки databases/py-sqlite3 devel/automoc4 devel/cmake devel/py-virtualenv devel/git devel/qmake4 devel/qt4-moc devel/qt4-rcc devel/qt4-uic devel/qtcreator www/uwsgi
Формат файла, думаю, понятен. За более подробными разъяснениями можно обратиться к официальной документации.
Теперь можно запустить процесс создания пакетов.
Начинаем с обновления дерева портов.
epsilon# poudriere ports -u
Затем собственно сборка:
epsilon# poudriere bulk -f pkglist-amd64 -j FBSD91amd64
Здесь
- pkglist-amd64 - наш файл со списком портов,
- FBSD91amd64 - имя jail-а.
На одной машине, разумеется, можно держать репозитории для нескольких версий ОС и разных архитектур. Их настройка выполняется аналогичным образом. Дерево портов можно использовать одно для всех репозиториев - создавать несколько не имеет особого смысла. Процесс сборки пакетов можно проводить из одной системы одновременно в нескольких jail-ах.
Использование
Через некоторое время готовые пакеты можно будет забирать из POUDRIERE_DATA/packages/FBSD91amd64-default, например, настроив web-сервер соответствующим образом. Или любым другим способом (хоть локально).