Идентификация и обновление программного обеспечения
Кандидаты на обновление в выводе portmaster(8) выглядят примерно так:
На моем ноутбуке в настоящий момент установлен пакет linux_base версии 4_8, и программа обнаружила, что доступна версия 4_9. Стоит ли обновляться при таком незначительном изменении в номере версии? Может, стоит, а может, и нет. Всегда можно заглянуть в хронологию FreeBSD CVSWeb данного пакета и посмотреть, что изменилось. Если в этой версии были исправлены критические уязвимости, то почти наверняка следует обновить программу, а если изменения незначительные, нет смысла возиться с обновлением. В любом случае решать вам.
Если вы решили выполнить обновление, просто передайте программе portmaster имя «порта», который требуется обновить. Можно передать только имя «порта», полный путь к базе данных пакетов для этого «порта» или использовать другие способы, с которыми можно ознакомиться на странице руководства portmaster(8).
Сначала portmaster отыщет все зависимости, которые необходимо обновить в рамках данного обновления, и запустит задания по обновлению этих «портов». Также будет запущена загрузка distfiles для обновляемого «порта» и его зависимостей. В первую очередь portmaster выполнит начальные этапы процесса сборки, требующие взаимодействия с пользователем. Программа постарается получить от вас всю необходимую информацию в самом начале, чтобы потом вы могли отойти с уверенностью в том, что процесс обновления не остановится на полпути, ожидая, пока вы нажмете клавишу Enter.
Всегда есть риск, что процесс обновления завершится с ошибкой. Если установить новую версию невозможно без деинсталляции старой, в случае ошибки можно остаться и без старой, и без новой версии программы. Однако portmaster не просто деинсталлирует «порт»; программа создает резервную копию пакета старой версии. Эта резервная копия удаляется только в случае успешного завершения процесса обновления, но вы можете запретить удаление, использовав ключ . Резервные копии сохраняются в каталоге /usr/ports/packages/All. К тому же, если обновляется целая серия пакетов, portmaster сохраняет резервные копии всех зависимых пакетов до полного окончания процесса обновления. Если попытка обновить OpenOffice.org с помощью portmaster потерпит неудачу, потребуется восстановить прежнюю версию OpenOffice.org вместе со всеми зависимостями. Программа portmaster приложит максимум усилий, чтобы не оставить вас с малопригодной смесью старого и нового программного обеспечения.
Я предпочитаю сохранять резервные копии до тех пор, пока не буду уверен, что новая версия программы работает именно так, как мне надо, но некоторые читатели поумнее меня не нуждаются в таких вот ремнях безопасности.
Начальная установка portmaster
Загляните в /usr/ports/potrs-mgmt/portmaster. Этот «порт» устанавливается обычной командой . После установки запустите команду , чтобы увидеть, что скажет программа об установленных «портах». Это может занять несколько минут, поэтому я рекомендую перенаправить вывод команды в файл и после проанализировать его в спокойной обстановке. (Можно также использовать команду ; она работает быстрее и предоставляет информацию о зависимостях, но не отмечает устаревшие «порты».)
Программа portmaster делит «порты» на категории в зависимости от взаимоотношений между ними, учитывая программное обеспечение, которое требуется для нормальной работы каждого пакета. Например, я пишу эту книгу в OpenOffice.org. Для корректной работы ООо требуются система X Window System, различные программы с графическим интерфейсом, библиотеки системы безопасности, разнообразные шрифты и кухонная мойка с утилизатором отходов мощностью от 5.5 лошадиных сил. Ни одна из этих программ не является частью базовой системы FreeBSD, и если их не установить, ООо не сможет работать. Поэтому эти программы перечислены в ООо как зависимости. В свою очередь, все эти программы определяют ООо как зависимую программу. Такая структура взаимоотношений позволяет программе portmaster строить дерево зависимостей между «портами», и при обращении к «портам» portmaster использует терминологию деревьев.
Дерево «портов» начинается с корня (root ports), «порты», находящиеся в корне, сами не имеют зависимостей и от них не зависят другие программы. Например, сама программа portmaster не зависит от какого-либо другого программного обеспечения, кроме себя самой, и ни одна программа в системе не требует наличия portmaster. К корню дерева «портов» обычно относят еще несколько программ, таких как bash, sudo и zip.
«Порты», составляющие ствол дерева (trunk ports), не имеют зависимостей, но они необходимы для других программ. В эту категорию попадают многие разделяемые библиотеки для работы с графикой, шифрованием и математическими функциями, а также различные языки программирования и сценариев. Например, если вы работаете с языком Perl, то базовая установка Perl наверняка может рассматриваться как «порт» из ствола дерева.
Выше на дереве находятся ветви (branch ports). «Порты» в ветвях сами зависят от других программ и от них зависят другие программы. Типичными представителями «портов» в ветвях дерева являются Java, X Window System и механизмы отображения веб-броузера.
«Порты» в листьях (leaf ports) — это концы ветвей дерева, они зависят от других программ, но ни одна программа не зависит от них. Типичные представители листьев дерева «портов» — это текстовые редакторы, крупногабаритные пакеты офисных приложений, веб-броузеры, программы обмена сообщениями в Интернете и т. д.
При обновлении «портов» изменение в стволе или в ветви дерева «портов» может затронуть его листья. Неудивительно, если при обновлении графической библиотеки до версии, несовместимой с предыдущей, перестанут работать все программы, использующие эту библиотеку.