Менеджер пакетов для FreeBSD или немного о проекте pkgng

Менеджер пакетов для 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: ale@FreeBSD.org

  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

Запись опубликована в рубрике *Unix,*Linux, FreeBSD. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91