====== Создание собственного репозитория пакетов ====== ===== Зачем нужен свой репозиторий ===== Создание собственного репозитория имеет смысл, когда есть необходимость в пакетах с опциями, отличными от опций по умолчанию. В противном случае лучше пользоваться официальными репозиториями или их зеркалами. Соответственно, в собственном репозитории разумно поддерживать только те пакеты, которые необходимы в использовании. ===== Poudriere ===== Утилита [[http://fossil.etoilebsd.net/poudriere/doc/trunk/doc/index.wiki|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-сервер соответствующим образом. Или любым другим способом (хоть локально).