Время от времени приходится обновлять ПО по тем или иным причинам (нашли уязвимость или добавился новый функционал). Есть замечательно утилита portupgrade. Но она написана на ruby, а значит при установке нужно будет ставить ruby. Что не всегда оправдано, когда у вас не планируется использовать ruby.
Что же делать? Выход есть. Будем использовать утилиту portmaster. Она написана на shell, а значит достаточно быстро будет выполнятся и не требует зависимостей. Ниже будет представлен краткий обзор возможностей данной утилиты с примерами.
1) Установка.
По умолчанию она не идёт в базовой поставке FreeBSD, поэтому её нужно установить отдельно. Например, через порты:
#cd /usr/ports/ports-mgmt/portmaster && make install clean
Вылезет диалоговое окно с выбором установки дополнений для оболочек bash/zsh. Если вы ими не пользуетесь – можете ничего не выбирать.
После установки рекомендую пройтись по конфигурационному файлу /usr/local/etc/portmaster.rc и выставить такие переменные:
# Do not create temporary backup packages before pkg_delete (-B)
BACKUP=bopt
# Do not run 'make config' for ports that need updating (-G)
PM_NO_MAKE_CONFIG=Gopt
# Log actions taken by portmaster with a date/time stamp
PM_LOG=/var/log/portmaster.log
2) Просмотр доступных новых версий пакетов.
# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> en-freebsd-doc-20110110
===>>> New version available: en-freebsd-doc-20110710
===>>> portmaster-3.9.1
===>>> ru-freebsd-doc-20110110
===>>> New version available: ru-freebsd-doc-20110710
===>>> 3 root ports
===>>> Trunk ports (No dependencies, are depended on)
===>>> 0 trunk ports
===>>> Branch ports (Have dependencies, are depended on)
===>>> 0 branch ports
===>>> Leaf ports (Have dependencies, not depended on)
===>>> 0 leaf ports
===>>> 3 total installed ports
===>>> 2 have new versions available
Как видим, есть 2 новых пакета, которые можно обновить.
3) Обновление пакета.
#portmaster ru-freebsd-doc-20110110
ВНИМАНИЕ!
Название пакета должно быть полностью, вместе с версией. Например, php5-sockets-5.3.6
При этом если требуется обновить зависимости, portmaster об этом предупредит и выдаст запрос : продолжать или нет.
Примечание.
Без параметров portmaster будет обновлять так же и зависимые пакеты. Если требуется обновить только некоторые пакеты, то используйте опцию ‘-i’, которая позволит выбрать какие пакеты нужно обновить.
4) Замена версии пакета другой.
Очень удобно, когда нужно обновиться не в пределах текущей ветки, а через ветку. Например, обновить php5.2 до php5.3. В портах эти версии разнесены по разным веткам. Делаем так:
#portmaster -o dev/php5 dev/php52
5) Обновление всех пакетов, для которых доступны обновления.
#portmaster -ad
где параметр ‘-d’ означает удалять старые версии пакетов
6) Выбор источника обновлений: пакеты или порты.
Если для вас сборка из портов занимает много времени, можно указать portmaster’y пробовать обновляться сначала через пакеты, и если нету нужной версии, тогда -через порты:
#portmaster -P vim
Если указать ключ ‘-PP’ то будет произведено обновление ТОЛЬКО ИЗ ПАКЕТОВ. Если нужной версии не окажется, тогда пакет не будет обновлён.
7) Удаление порта и всех зависимостей неиспользуемых другими
# portmaster -e exim && portmaster -s exim