portmaster: обновление портов
Я всегда для массового обновления портов использовал /usr/ports/ports-mgmt/portupgrade, однако, во время последней эпопеи с обновлением в портах jpeg и png, в результате чего потребовалась пересборка большого количества портов, наткнулся в рассылке stable@ на предложение использовать /usr/ports/ports-mgmt/portmaster и решил его попробовать. Изучение документации привело меня к мысли, что я зря до сих пор его не использовал.
Собственно, в чем прелести этого инструмента:
Во-первых, при установке обновлении порта он сразу вычисляет его зависимости, после чего делает для всех портов, которые в результате будут устанавливаться, make config, что очень изрядно экономит время. Впрочем, так можно заставить делать и portupgrade, так что это не самое вкусное.
Во-вторых, portmaster чистит distfiles от устаревших архивов сорцов портов, что лично мне при моем количестве установленных портов экономит дисковое пространство. Главное, не забыть указать portmaster ключик -d, иначе на удаление каждого архива он станет спрашивать разрешения, что не способствует автоматизации процесса :)
А вот в-третьих для меня оказалось очень и очень приятным: если portupgrade при сбое и повторном запуске начинает все сначала, причем при этом еще и может пострадать его база данных, что сильно портит жизнь, portmaster, не используя никаких сторонних баз, строит список пересобранных портов. В случае, если возникает какая-либо нерешаемая ситуация, и пересборка портов останавливается, достаточно вручную решить проблему и перезапустить portmaster. При этом последний известит вас о том, что присутствует флаг законченных установок портов и спросит, удалять его или нет (y/n)? Если выберем ‘y’, пересборка начнется сначала, но если выберем ‘n’, процесс начнется с места возникновения ошибки. Собственно, portmaster при этом задает еще вопрос, не включить ли принудительную пересборку пакетов, на этот вопрос тоже стоит ответить отрицательно.
Впрочем, одна проблема у меня все-таки возникла. Почему-то порт teTeX-base у меня оказался в списке как устанавливаемых, так и обновляемых портов, в результате чего на второй попытке установить его портмастер вываливался на ошибке «port is already installed». В гугле я ничего по этому поводу не нашел, зато нашел в мане, что если в директорию порта в базе данных портов (в моем случае это была /var/db/pkg/teTex-base-3.0.20) поместить файл с именем +IGNOREME, то portmaster его проигнорирует и ставить не будет. Так и случилось, при вычислении зависимостей portmaster четыре раза известил меня, что для данного порта присутствует данный файл и спросил, не установить ли этот порт в любом случае. Я ответил отрицательно, и все прошло как надо.
Собственно, установка/обновление порта с помощью portmaster:
[cc lang=»bash»]sudo portmaster полный_путь_до_директории_порта в /var/db/pkg[/cc]
или
[cc lang=»bash»]sudo portmaster /usr/ports/категория/порт[/cc]
Обновление порта и всех зависящих от него портов на примере png:
[cc lang=»bash»]sudo portmaster -d -R -r ‘png-*'[/cc]
PS. кстати, вот еще полезный ключик ‘-o‘
Позволяет заменить уже установленный порт на другой. Полезно, когда установленный порт, например, вынесен из дерева портов за устареванием, как, например, было с libtool15, на замену которой пришла libtool22. Таким образом, замена одного на другое на примере того же libtool происходит вот так:
[cc lang=»bash»]portmaster -o devel/libtool22 devel/libtool15[/cc]
PPS. Блин, сделать, что ли, над собой усилие, перевести полностью man по portmaster на русский?
Сделай :) я в тебя верю — ты сможешЬ. Кстати, portupgrade тоже умеет делатЬ замену одного на другое :)
поддерживаю предыдущего оратора — делай усилие
(—check-depends проверить инфу по зависимостям)
(—check-port-dbdir проверка бд пакетов в соответствии с/var/db/ports) —
(-delete-build-only удалять при сборке промежут пакеты)
Побольше манов русских и хороших!!!