Создание собственного репозитория пакетов

Зачем нужен свой репозиторий

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

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-сервер соответствующим образом. Или любым другим способом (хоть локально).

freebsd/pkgrepo.txt · Последние изменения: 07.02.2015 18:25:01 — Ладилова Анна
Наверх
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0