FreeBSD: правильное обновление портов

Автор: | 12/27/2011
 

Полезная статья, взята у [info]iboxjo тут>>>.

Собственно небольшая напоминалочка по использованию portupgrade(1). Настолько старо, что можно не читать.

При обновлении установленных портов до актуальных версии (не лишним всегда напомнить о поддержании в актуальном состоянии и самого дерева портов), следует говорить собственно о неразрывном комплексе использования соответствующих утилит, таких как: pkg_info(1), pkgdb(1), portversion(1) (либо pver для старых релизов),portdowngrade(1) и собственно portupgrade(1) . Только при использовании всех этих утилит обновление портов можно считать полноценным и выполненным без ошибок.  И конечно, руководящим документом в процессе обновления (да и в целом) должен быть файл /usr/ports/UPDATING, содержащий весь список необходимых действий производимых в процессе обновления портов.

(Все дальнейшие действия предполагают работу под учётной записью root, в контексте обновления. Кроме того, я предполагаю, что вы заранее сделали резервные копии своих выстраданных конфигурационных файлов. Так же я ни сколько не умаляю ценность использования всех прочих возможностей, например таких как porttell, portmaster, portless и множества прочих весьма ценных утилит. )

1. pkg_info(1) — утилита для отображения информации о программных пакетах. При наличии в системе неизвестных вам пакетов, окажет посильную помощь в их идентификации и предоставит краткое описание каждого. Наиболее часто полезные ключи -d (длинное описание пакета), -r(зависимости). При запуске без ключей выводит краткое описание всех установленных в системе пакетов. Опция -v иногда может оказать дополнительную помощь, однако её вывод можно назвать реально избыточным. (Следует помнить что утилита оперирует полными именами пакетов, т.е. с указаниями версий, либо в конвеере с grep

2. portversion (1) — утилита для сравнения версий установленных пакетов с версиями доступными в дереве портов. Утилита работает с базой INDEX. Соответственно, дерево портов должно быть актуально (я думаю о cvsup, csup или portsnap лишний раз говорить не следует). Результат непосредственного использования — список всех установленных портов с указанием стадий их актуальности в символическом виде (< — версия ниже присутствующей в дереве > — соответственно выше присутствующей в дереве (кажется нонсен, но это весьма не редкое явление при неактуальности файла INDEX использовании тестовой версии порта), = — соответствует текущей версии, ? — пакет не присутствует в базе или отсутствует директорий порта, ! — пакет не присутствует в базе, однако его директорий создан). Более информативный вариант — использование ключа -v позволяющего получить в выводе имя порта с номером версии, символьное представление состояния, смысловое описание состояния и текущую версию (если требуется обновление порта).

3. portdowngrade(1) — редко используемая, но иногда крайне необходимая возможность вернуть старую версию порта

4. pkgdb(1) — инструмент для управления и поиска в базе данных пакетов. Неоценимая вещь. На практике, при использовании интерактивного режима (опция -F) позволяет исправить ряд несоответствий связанных с использованием в системе нескольких версий одного и того же порта, устаревшие зависимости, циклические зависимости и отсутствие источников. Может использоваться режим автоматического фиксинга несоответствий (опция -aF). Вообще работать с базой пакетов следует регулярно, что поможет избежать некоторых казусов (хотя сразу следует отметить, что обновление базы производится автоматически и по большей части ручного вмешательства не требует). Если возникают проблемы, можно использовать опции -fu для перестроения базы данных.

5. portupgrade(1) — собственно обновление портов (или установки новых). Наиболее востребованные опции -r (с рекурсивным обновлением всех зависимостей), -b (создание резервной копии старых версий пакетов). Иногда не помешает использовать ключи -a (обновление всех установленных пакетов) и -f (форсированное обновление пакетов — здесь следует подробно изучить UPDATING). Вместо имени обновляемого пакета могут использоваться выражения, например при обновление всех пакетов начинающихся на букву b можно использовать команду вида portupgrade ‘b*’ ну и т.д.
Конфигурирование поведения portupgrade производится в файле /usr/local/etc/pkgtools.conf.

И ещё раз — при обновлении пакета в первую очередь следует ознакомиться с содержимым файла UPDATING и сохранить старые конфигурационные файлы (вне зависимости от того, затронет их обновление или нет).