Утилита управления портами, portupgrade.
Система портов во FreeBSD сама по себе очень удобная, но кроме того существуют дополнительные утилиты, самая удобная и продвинутая из них – portupgrade.
Portupgrade – это не одна утилита, а целый пакет утилит по управлению портами.
В пакет portupgrade входят:
- portupgrade – одноименная утилита, средство автоматического обновления установленных программ
- portinstall – утилита установки новых программ, присутствующих в системе портов FreeBSD
- portversion – утилита показывающая установленный софт и наличие обновлений для него.
- portsclean – утилита очистки мусора остающигося после сборки портов
- portsdb – утилита создающая базу программ, присутствующих в портах FreeBSD
- ports_glob – предназначена для поиска по базе портов
- portcvsweb – браузер для CVSWeb
- pkgdu – утилита, предназначенная для подсчета дискового пространства занятого уcтановленныыми программами
- pkgdb – еще одна утилита для управления базой портов
- pkg_which – предназначен для поиска по базе портов
- pkg_sort – утилита сортирует порты в соответствии c зависимостями
- pkg_fetch – утилита для скачки собранных(бинарных) пакетов
- pkg_deinstall – средство для массового удаления установленного софта
Основными интересующими нас утилитами из этого состава – это portupgrade, portinstall, portversion, portsclean, pkgdb и pkg_deinstall. Их и рассмотрим подробно. А начнем их изучение с конфигурационного файла /usr/local/etc/pkgtools.conf.
portupgrade написан на Ruby, и его конфигурауционный файл, тоже представляет из себя скрипт на Ruby. В нем чаще всего используются такие настройки:
Не пересобирать определенный пакет:
HOLD_PKGS = [ 'bsdpan-*', 'openoffice-*', ]
Мы исключили из обновления пакеты c именами начинающимися на bsdpan и openoffice.
Указать специфические агрументы для сборки определенных пакетов, приведем пример для MySQL:
MAKE_ARGS = { 'databases/mysql50-*' => [ 'WITH_CHARSET=cp1251', 'WITH_XCHARSET=all', 'WITH_PROC_SCOPE_PTH=yes', 'BUILD_STATIC=yes', ], }
В файле настроек присутствует масса разных опций, но две приведенные по моему мнению самые главные.
Теперь можно перейти к непосредственному использованию утилит из пакета portupgrade.
1. Portupgrade
Обновить все программы:
portupgrade -aесли в системе что то сломалось и вы хотите обновить все программы независимо от того, нуждаются они в обновлениии или нет, выполните:
portupgrade -afесли система, на которой вы проводите обновления, очень важна, рекомендую добавлять ключ -b, тогда portupgrade сохранит старвые версии пакетов в бекап(/usr/ports/packages/All/), установить пакет из бекапа можно используя команду:
pkg_add <имя пакета>
Просмотреть и выбрать отдельный пакет для обновления можно используя утилиту portversion.
Проверим к примеру пакет apache:
portversion |grep apache
в ответ получим
apache+mod_ssl =
Знак =, означает, что пакет в обновлении не нуждается, соответственно знак > означает что установлен пакет новее, чем присутствует в базе портов и знак < – означает что пакет устарел и нуждается в обновлении.
Пакеты нуждающиеся в обновлении я нахлжу таки образом:
portversion | grep '<' | less
При выполнении этой команды я получил:
firefox < gimp < gnash <
Обновим gnash:
portupgrade -b gnashРазобравшись в основном с portupgrade, можно переходить к portinstall.
2. Portinstall
С помощью portinstall можно устанавливать программы, делаю я это так:
portinstall /usr/ports/databases/mysql50-server/
Нужно заметить, что сборка будет проводиться в соответствии с правилами, описанными в файле настроек.
3. Portversion
Работу portversion мы в принципе уже рассмотрели, добавлю только опцию, позволяющую игнорировать нарушенные зависимости:
portversion -O4. Portsclean
portsclean я использую для переодической чистки дерева портов от всякого мусора, оставшегося от неудачных сборок. Чистки директории /usr/ports/distfiles от файлов исходников, более не использующихся работы.
Выполняются эти операции так:
portsclean -Cдля очистки рабочих директорий, тех которые используются для сборки программ и
portsclean -Dдля очистки директории /usr/ports/distfiles от устаревших файлов исходников программ
5. Pkgdb
основное применение утилиты pkgdb – исправлять зависимости. Когда вы запустите portversion, возможно он ругнется и предложит для разрешения ошибочных зависимостей использовать pkgdb -F. За примерно 5 лет использования утилит portupgrade, pkgdb я использовал только для разрешения зависисмостей.
6. Pkg_deinstall
Утилита довольно опасная, присутствует ключ -a, то есть выполнив команду:
pkg_deinstall -aи подождав некоторое, довольно продолжительное время – мы получим чистую систему, без установленных пакетов.
А в общем случае применять утилиту стоит в таком формате, для примера удалим установленный mysql-server:
pkg_deinstall /var/db/pkg/mysql-server-5.0.67_1/
В целом пакет portupgrade очень полезен, особенно начинающим системным администраторам.



