Менеджер пакетов для FreeBSD или немного о проекте pkgng
Исторически сложилось так, что во FreeBSD два пути установки ПО. Первый идеологически правильный, но уж очень медленный, это сборка ПО из коллекции портов. Плюсы этого метода — большая гибкость и уверенность в том что установлены самые свежие версии, минус большие затраты времени. Настройка сервера в среднем занимает несколько дней, а если уж десктоп настраивать, так и неделю провозиться можно.
Второй путь — устанавливать готовые пакеты, плюсы -скорость развертывания… И на этом плюсы заканчиваются.Остаются сплошные минусы, неактуальный софт, конфликты версий и прочие радости.
Отдельный вопрос, это обновление ПО.
В дистрибутивах Linux эти вопросы решаются с помощью менеджеров пакетов apt-get, yum и т.п. Проект pkgng призван решить эту задачу в FreeBSD.
Собственно проект находиться в стадии беты, но вполне работоспособной и стабильной беты.
Pkgng официально зарелизели.pkg (aka pkgng) 1.0 released
Для использования pkg потребуется репозитарий собранных пакетов. На данный момент есть всего один работающий внешний репозитарий
http://pkgbeta.freebsd.org/
к сожалению не полный, но вполне пригодный к использованию.
Либо можно создать собственный, о чем и пойдет речь в первой части.
Часть 1.
Строим собственный сервер сборки и публикации пакетов.
Основное требование — система должна стоять на zfs, и это обязательное требование.
1. Ставим poudriere
make -C /usr/ports/ports-mgmt/poudriere install clean
2. Ставим pkg
make -C /usr/ports/ports-mgmt/pkg install clean
Конфигурируем poudriere
#cat /usr/local/etc/poudriere.conf BASEFS=/poudriere ZPOOL=myzpool FTPHOST=ftp.freebsd.org POUDRIERE_DATA=/poudriere_data RESOLV_CONF=/etc/resolv.conf USE_PORTLINT=no MFSSIZE=3072m # Здесь задается размер рамдиска для сборки, если памяти мало лучше эту строчку совсем закоментировать DISTFILES_CACHE=/usr/ports/distfiles
Важное замечание, параметр
MFSSIZE=3072m
Задает размер рамдиска для сборки портов, по умолчанию стоит 1024м, этого размера не хватает для многих портов,
после всех эксперементов значение 3072м -оптимально. Если вы не можете отдать столько памяти под рамдиск то лучше просто закоментировать эту строчку.
Создаем дефолтное дерево портов
$ poudriere ports -c
Создаем клетку где будут собираться пакеты
$ poudriere jails -c -j 90amd64 -v 9.0-RELEASE -a amd64
Добавляем для вновь собранных пакетов поддержку pkg
$ mkdir /usr/local/etc/poudriere.d $ echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/90amd64-make.conf
Создаем список пакетов для сборки:
$ cat ~/mylist1 editors/vim www/nginx
Тут надо еще учесть такой момент, если в списке есть интерактивные порты (типа jdk,Ooo и т.п.) то необходимо руками предварительно скачать требуемые архивы.
Если нужны опции отличные от дефолтных то добавляем их в
/usr/local/etc/poudriere.d/make.conf
примерно вот в таком виде (пример из сборки mysql)
# Указываем опции для сборки .if ${.CURDIR} == ${PORTSDIR}/databases/mysql51-client WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin BUILD_OPTIMIZED=yes .endif
@TODO -здесь нужно разобраться со значением переменной ${PORTSDIR}
Начинаем сборку
$ poudriere bulk -f ~/mylist1 -j 90amd64
После того как команда отработает мы получим готовый репозитарий для pkg в
/usr/local/poudriere_data/packages/90amd64-default
Содержимое этого каталога надо опубликовать на веб сервере.
Что бы по ссылке
http://ваш-веб-сервер/90amd64-default
можно было увидет файлы.
Для поддержания репозитория в актуальном состоянии необходимо периодически выполнять:
$ poudriere ports -u # обновляем дефолтное дерево портов $ poudriere bulk -f ~/mylist1 -j 90amd64 -k # пересобираем то что изменилось
Суть действий понятна из коментариев, одно уточнение не забываем про ключик «-k» без него будут
удалены и пересобраны все пакеты в репозитарии, с ним, только изменившиеся.
И так репозитарий создан и доступен по ссылке
http://ваш-веб-сервер/90amd64-default
переходим собственно к использованию pkg.
Часть 2.
Использование pkg на конечной машине.
Устанавливаем pkg
# cd /usr/ports/ports-mgmt/pkg # make install clean
Следующий шаг, добавляем в make.conf поддержку pkg для всех вновь собираемых портов
# cat make.conf WITH_PKGNG=yes
Создаем файлик конфига для pkg
# cat /usr/local/etc/pkg.conf # System-wide configuration file for pkg(1) # For more information on the file format and # options please refer to the pkg.conf(5) man page # Configuration options PACKAGESITE : http://repos.etoilebsd.net/9-amd64-20111222 # или http://ваш-веб-сервер/90amd64-default PKG_DBDIR : /var/db/pkg PKG_CACHEDIR : /var/cache/pkg PORTSDIR : /usr/ports PUBKEY : /etc/ssl/pkg.conf HANDLE_RC_SCRIPTS : NO PKG_MULTIREPOS : NO ASSUME_ALWAYS_YES : NO SYSLOG : YES SHLIBS : NO AUTODEPS : NO # Repository definitions repos: default : http://example.org/pkgng/ repo1 : http://somewhere.org/pkgng/repo1/ repo2 : http://somewhere.org/pkgng/repo2/
На этом настройка заканчивается, если все это делалось на машине где уже было что-либо установленное из портов
необходимо произвести конвертирование данных об установленных пакетах в формат pkg для этого надо выполнить
скрипт
# pkg2ng
Кратко о возможностях:
# pkg usage: pkg [-v] [-d] [-j |-c ] [] Global options supported: -d Increment debug level -j Execute pkg(1) inside a jail(8) -c Execute pkg(1) inside a chroot(8) -v Display pkg(1) version Commands supported: add Registers a package and installs it on the system audit Reports vulnerable packages autoremove Removes orphan packages backup Backup and restore the local package database check Check for missing dependencies and database consistency clean Cleans old packages from the cache create Creates software package distributions delete Deletes packages from the database and the system help Displays help information info Displays information for installed packages install Installs packages from remote package repositories query Query information for installed packages search Performs a search in remote package repositories set Modify local database informations register Registers a package into the local package database repo Creates a package database repository update Updates remote package repository databases updating Displays UPDATING information for a package upgrade Performs upgrades of package software distributions version Summarize installed versions of packages which Displays which package installed a specific file For more information on the different commands see 'pkg help '.
Перед использованием обновляем базу данных репозитария
# pkg update http://repos.etoilebsd.net/9-amd64-20111222/repo.txz 100% 9684KB 9.5MB/s 7.1MB/s 00:01
Ну а дальше небольшие примеры использования:
Поиск
# pkg search mysql-server mysql-server-5.1.60: Multithreaded SQL database (server) mysql-server-5.5.19: Multithreaded SQL database (server) mysql-server-5.0.92: Multithreaded SQL database (server) mysql-server-4.1.25: Multithreaded SQL database (server)
Установка пакета
# pkg install mysql-server-5.5.15 The following packages will be installed: Installing mysql-client: 5.5.15 Installing mysql-server: 5.5.15 the installation will require 111 MB more space 9 MB to be downloaded Proceed with installing packages [y/N]: y http://repos.etoilebsd.net/9-amd64-20110821/All/mysql-client-5.5.15.txz 100% 1515KB 1.5MB/s 1.5MB/s 00:00 http://repos.etoilebsd.net/9-amd64-20110821/All/mysql-server-5.5.15.txz 100% 8114KB 2.6MB/s 2.9MB/s 00:03 Checking integrity... done Installing mysql-client-5.5.15... done Installing mysql-server-5.5.15...===> Creating users and/or groups. Creating group 'mysql' with gid '88'. Creating user 'mysql' with uid '88'. done ************************************************************************ Remember to run mysql_upgrade (with the optional --datadir= flag) the first time you start the MySQL server after an upgrade from an earlier version. ************************************************************************
Информация о установленных пакетах
# pkg info -a mysql-client-5.5.15: Multithreaded SQL database (client) mysql-server-5.5.15: Multithreaded SQL database (server) nInvaders-0.1.1: The nIvaders game is a Space Invaders clone for ncurses
Информация о зависимостях
# pkg info -d mysql-server-5.5.19 mysql-server-5.5.19 depends on: mysql-client-5.5.19
Информация об установленных пакетом файлах
# pkg info -l nInvaders-0.1.1 nInvaders-0.1.1 owns the following files: /usr/local/bin/nInvaders /usr/local/share/doc/nInvaders/README
Поиск какому пакету принадлежит файл
# pkg which /usr/local/lib/mysql/libmysqlclient.a /usr/local/lib/mysql/libmysqlclient.a was installed by package mysql-client-5.5.15
Создание пакетов из уже установленных в системе бинарников
# pkg create -a Creating package for mysql-client-5.5.15 Creating package for mysql-server-5.5.15 Creating package for nInvaders-0.1.1 # ls mysql-client-5.5.15.txz mysql-server-5.5.15.txz nInvaders-0.1.1.txz
Просмотр версий пакетов и сравнение их с версиями в портах — специально отмечаю, что сравниваются версии установленного пакета и версии порта на локальной машине, перед применением этой команды следует обновить порты.
# pkg version -v mysql-client < needs updating (port has 5.5.20) mysql-server < needs updating (port has 5.5.20) nInvaders = up-to-date with port
Полезная мелочь, просмотр файла usr/ports/UPDATING
# pkg updating -h pkg: illegal option -- h usage: pkg updating [-d YYYYMMDD] [-f file] [portname ...]
Пример просмотра записей после определенной даты
# pkg updating -d 20110101 20110319: AFFECTS: users of databases/mysql55-client AUTHOR: [email protected] The shared library version of the client library was increased to reflect ABI changes, and avoid compatibility problems with the client library in MySQL 5.1, so client programs that use the 5.5 client library should be recompiled against the 5.5.10 client library. This can be achieved with: # portmaster -r mysql-client-5.5 or # portupgrade -fr mysql-client-5.5
Использование pkg для апгрейда установленных пакетов
# pkg upgrade The following packages will be upgraded: Upgrading mysql-client: 5.5.15 -> 5.5.19 Upgrading mysql-server: 5.5.15 -> 5.5.19 the upgrade will require 4 MB more space 9 MB to be downloaded Proceed with upgrading packages [y/N]: y http://repos.etoilebsd.net/9-amd64-20111222/All/mysql-client-5.5.19.txz 100% 1518KB 1.5MB/s 1.5MB/s 00:00 http://repos.etoilebsd.net/9-amd64-20111222/All/mysql-server-5.5.19.txz 100% 8395KB 8.2MB/s 6.8MB/s 00:01 Checking integrity... done Upgrading mysql-client from 5.5.15 to 5.5.19... done Upgrading mysql-server from 5.5.15 to 5.5.19...==> You should manually remove the "mysql" user. ===> Creating users and/or groups. Using existing group 'mysql'. Using existing user 'mysql'. done
Удаление пакета
# pkg delete mysql-server The following packages will be deinstalled: mysql-server-5.5.19 The deinstallation will save 79 MB Proceed with deinstalling packages [y/N]: y Deinstalling mysql-server-5.5.19...==> You should manually remove the "mysql" user. done
Аудит безопасности
# pkg audit -F http://portaudit.FreeBSD.org/auditfile.tbz 100% 76KB 37.8KB/s 55.6KB/s 00:02 openssl-1.0.0_9 is vulnerable OpenSSL -- CMS and S/MIME Bleichenbacher attack WWW: http://portaudit.FreeBSD.org/60eb344e-6eb1-11e1-8ad7-00e0815b8da8.html 1 problem(s) in your installed packages found.
Вот в общем-то и все. Статья не претендует на оригинальность, но в рунете пока ничего по поводу этого проекта конструктивного нет. А проект вполне многообещающий, у себя я его использую для быстрого обновления серверов. Есть мелкие косяки, но легко поправимые и не критичные.
Источник : http://sysadminblog.ru/freebsd/2012/04/24/menedzher-paketov-dlya-freebsd-ili-nemnogo-o-proekte-pkgng.html