Portmaster — шпаргалка по ключам

Portmaster — это утилита во FreeBSD для управления портами, использующая только структуру самих портов, без дополнительных надстроек или использования сторонних языков. С помощью нее можно обновлять, часть или все порты.

Общие флаги:

--force-config   Выполнить команду 'make config' для всех портов (перекрывается -G)
-C   Не выполнять команду 'make clean' до сборки пакетов
-G   Позволяет не выполнять 'make config'
-H   Cкрыть подробности сборки и установки в log-файле
-K       Не выполнять 'make clean'  после сборки пакетов
-B   Предотвращает создание резервного пакета установленного порта
(обычно до установки делается резервная копия, на которую откатывается в случае неудачи,
после удачной установки резервная копия удаляется)
-b       Создание и сохранение резервного пакета установленного порта
-g        Создать пакет из нового порта
-n       Проходит все шаги установки, но не инсталлирует ни каких портов
( я думаю удобно при отладке используя  ключ "-K" и в случаи удачи
запустить снова portmaster с ключом "-C" для установки без сборки
-t   Тщательные рекурсивные зависимости использует all-depends-list.
РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ ТОЛЬКО В СЛУЧАЕ НЕОБХОДИМОСТИ.
(recurse dependencies thoroughly, using all-depends-list.
RECOMMENDED FOR USE ONLY WHEN NEEDED, NOT ROUTINELY. When applied to the
--clean-distfiles option it allows a distfile to be valid if it
matches any up to date port, not just the ones that are installed.)
-v   Подробный вывод
-w   Сохранять старые подключаемые библиотеки до деинсталляции
[-R] -f всегда пересобирать порты (перекрывается -i)
-i    Интерактивная мода обновления, спрашивать пересобирать ли порты
-D    Не очищать архивы исходников (distfiles)
-d    Всегда отчищать архивы исходников (distfiles)
-m arguments for make
 any arguments to supply to make(1)
-m    Аргументы make, для того что бы узнать аргументы читайте man make(1)
-x  avoid building or updating ports that match this pattern.  Can be
 specified more than once.  If a port is not already installed the
exclude pattern will be run against the directory name from
 /usr/ports.
-x    Используется для исключения установки или обновления портов.
Можно использовать несколько раз в одной команде. Путь задается относительно каталога /usr/ports.
--no-confirm Не запрашивает пользователя подтверждения списока портов
для установки или обновления перед сборкой
--no-term-title	 Не обновлять заголовок xterm
--no-index-fetch Пропустить скачивание INDEX файла
--index   use INDEX-[7-9] exclusively to check if a port is up to date
--index-first use the INDEX for status, but double-check with the port
--index-only do not try to use /usr/ports. For updating ports when no /usr/ports
directory is present the -PP|--packages-only option is required.  See
the ENVIRONMENT section below for additional requirements.
--delete-build-only удалить порты собранные только для удовлетворения зависимости,
после успешной сборки.
-P|--packages использовать пакеты если это возможно, иначе собирать порты
-PP|--packages-only Выдавать ошибку и останавливается если пакет недоступен,
"-PP" должна быть одна в строке,
например вы не можете использовать "-PPav"
--packages-build Использовать пакеты для удовлетворения всех зависимостей.
--packages-if-newer Использовать пакет если он новее чем уже установленный,
даже если пакет не является последним согласно дереву портов
--always-fetch Всегда скачивать пакет, даже если он уже доступен локально
--local-packagedir=<path> Указать путь где локальные пакеты могут быть найдены.
Эта опция должна указать на полный путь структуры каталогов, создаваемой таким же образом,
который который был создан с помощью 'make package' (или 'portmaster -g').
То есть, файлы пакета содержатся в <path>/All (ВНИМАНИЕ!!! All с большой буквы.),
символьные ссылки LATEST_LINK <path>/Latest каталог,
и символьные ссылки в папку <path>/All в категориях и подпапках,
таких как <path>/devel, <path>/ports-mgmt, и т.д. (как на ftp-шнике freebsd.org)
--packages-local использовать пакеты только из тех, что указаны
директивой --local-packagedir
--delete-packages после установки пакета, удалить его.

Особенности:

-a      Проверка всех портов и обновление по мере необходимости.
--show-work   Показывать какие из зависимых портов не установленные (подразумевает "-t" )
-o <new port dir in /usr/ports> <installed port>
 replace the installed port with a port from a different origin
-o <new port dir in /usr/ports> <installed port>   заменить существующий порт
другим портом (обычно перейти на новую версию)
[-R] -r имя/glob      каталога порта в /var/db/pkg восстановить указанный порт,
и все порты, которые зависят от его
-R            используется с -r или -f опциями, чтобы пропустить порты, обновленные ранее.
Когда использующийся с "-r" это также предотвратит восстанавление родительского порта,
если это, и все его зависимости
-l              список всех установленных портов по категориям
-L             список всех установленных портов по категориям, и поиск обновлений
--list-origins    список директорий относительно /usr/ports. Этот список предназначен
для передачи в portmaster либо на другой машине или для перестановки всех портов. 
См. примеры ниже.
 [--force-config|-G] [-aftv] -F    только скачать дистрибутивы (distfiles)
-n  отвечать "нет" на все вопросы пользователю
-y  отвечать "да" на все вопросы пользователю
[-n|y] [-b] [-D|d] -e имя/glob для каталога порта в /var/db/pkg удаляют порт,
используя pkg_delete, и дополнительно удаляют весь distfiles.
Вызов "-s" после удаления порта удаляет и все зависимости которые более не требуются.
[-n|y] [-b] [-D|d] -s   удалить неиспользуемые более порты зависимостей
[-t] [-n] --clean-distfiles  удаляет неиспользуемые distfiles-файлы установленных портов,
если используется "-t" то для всех портов, а не только установленных.
[-t] -y --clean-distfiles тоже что и выше, но удаляет все distfiles-файлы без предупреждения
[--index|--index-only] [-n] --clean-packages  предложит удалить устаревшие пакеты.
Опция --index-only требуется, если не дерево портов доступно.
[--index|--index-only]
               "-y --clean-packages" делает то же самое, что и выше, но удаляет все устаревшие файлы
без предупреждения.
[-n|y] [-v] --check-depends       cross-check и обновления информации зависимостей
для всех портов
[-n|y] [-v] --check-port-dbdir     Проверит устаревшие записи в /var/db/ports
-h|--help    Показать помощь
--version    Показать номер версии

Переменные среды

Каталог на который указывает переменная PACKAGES
(по умолчанию /usr/ports/packages) будет использоваться для хранения
и резервного копирования новых пакетов. При использовании 'make package'
с опцией -g, инфраструктура портов сохранит пакеты в ${PACKAGES}/All
иначе PKGREPOSITORY. При использовании -b опции portmaster хранит
свои резервные пакеты в ${PACKAGES}/portmaster-backup так,
чтобы вы могли создать и резервный пакет и пакет недавно установленного порта,
даже если у них одинаковая версия в разных папках.
При использовании опции --packages* файлы пакета будут загружены
в ${PACKAGES}/portmaster-download.  portmaster будет использовать
переменные PACKAGESITE и PACKAGEROOT (по умолчанию http://ftp.freebsd.org).
portmaster пытается использовать обе эти переменные как же
как это делает pkg_add (1).
Переменная UPGRADE_TOOL установленная в положение "portmaster"
и переменные UPGRADE_PORT и UPGRADE_PORT_VER устанавливаются в полное
имя пакета и версии.(The UPGRADE_TOOL variable is set to "portmaster",
and the UPGRADE_PORT  and UPGRADE_PORT_VER variables are set to the full
package name string  and version of the existing package being replaced, if any.)
При использовании опции --index-only переменная PACKAGES должна
содержать имя папки в которой у суперпользователя есть права на запись.
Другие полезные переменные:
     MASTER_SITE_INDEX       (по умолчанию http://www.FreeBSD.org/ports/)
     FETCHINDEX              (по умолчанию fetch -am -o)
     INDEXDIR                (по умолчанию $PORTSDIR, или $TMPDIR для --index-only)
     INDEXFILE               (по умолчанию версия FreeBSD)
Если Вы используете нестандартные настройки OPTIONS для создания пакета
и хотите использовать опцию --index-only без дерева портов, вы должны генерировать свой собственный INDEX файл так, чтобы зависимости соответствовали.
Если вы хотите настроить свою среду сборки на основе на портов,
посмотрите /usr/ports/ports-mgmt/portconf
Для логирования используйте переменную PM_LOG указав в ней полный путь до файла.
По умолчанию portmaster создает резервные пакеты установленных портов прежде,
чем он выполнит pkg_delete (1) во время обновления. Если создания пакета не удается
это рассматривается как серьезная ошибка и предлагается пользователю.
Однако для заданного сценарием использования portmaster это может быть проблемой.
В ситуациях, где пользователь АБСОЛЮТНО УВЕРЕН, что не возможность создания
резервного пакета не должна приводить к фатальной ошибке,
переменная PM_IGNORE_FAILED_BACKUP_PACKAGE
может быть определена через rc файл.
Для тех, кто хочет чтобы определенные порты всегда компилировались,
а не  устанавливались из пакетов, переменная PT_NO_INSTALL_PACKAGE
может быть определена в соответствии с make(1), можно установить в /usr/local/etc/ports.conf
если используется /usr/ports/ports-mgmt/portconf, или в /etc/make.conf

ФАЙЛЫ

/usr/local/etc/portmaster.rc
$HOME/.portmasterrc
        Дополнительные системные и пользовательские конфигурационные файлы.
        Набор переменных в getopts подпрограмме сценария может быть определен в этих файлах,
        чтобы включить опции. Эти файлы будут считанны главным portmaster процессом,
        все переменные в них будут экспортироваться.

/var/db/pkg/*/+IGNOREME
         Если этот файл существует в папке порта, который уже установлен,
         поведение будет следующим:
               1. Порт будет проигнорирован везде.
               Это включает обновления зависимости, даже если нет никакого каталога для порта в /usr/ports и нет никакой записи для этого в/usr/ports/MOVED. Если используется опция "-v" то
о факте игнорирования, будет сообщено.
               2. Если используется опция "-L"  и новая версия существует, существование
файла +IGNOREME будет упомянуто.
               3. Если вы сделаете регулярное обновление порта, или если используется опция "-a",
то вас спросят, хотите ли вы обновить порт так или иначе.

/var/db/pkg/*/PM_UPGRADE_DONE_FLAG
                Указывает на последующие опции "-a", "-f", or "-r" которые включают опцию "-R"
                что порт был уже востановлен, таким образом, это может быть безопасно проигнорировано
                (Indicates to a subsequent -a, -f, or -r run which includes the -R option that a port has already
                 been rebuilt, so it can be safely ignored if it is up to date.)

/tmp/port_log-*
                 Если используется опция "-H", а установка или обновление не удалось,
                 результаты сборки и установки будут сохранены в этом файле.
                 Замените значение TMPDIR в вашей среде если это требуется.

EXIT STATUS
                  portmaster утилита возвращает 0 в случае успешного завершения
                  и > 0, если произошла ошибка.

ADVANCED FEATURE: SU_CMD (если используете sudo то переведете сами, лень...)
     The ports infrastructure has limited support for performing various operations as an unpriviliged user.
It does this by defining SU_CMD, which  is typically su(1).  In order to support complete management
of your ports as an unprivileged user, escalating to "root" privileges only when necessary,
portmaster can use sudo(1) to handle the escalated privileges.  To accomplish this you must have
the following directories configured so that the unprivileged user can access them:

     1. WRKDIRPREFIX - This is usually set to /usr/ports/category/port/work, however it is suggested
that you configure another directory outside  your ports tree for access by the unprivileged user,
and assign this  variable to that value in your /etc/make.conf.

     2. DISTDIR - This is usually set to /usr/ports/distfiles. This directory can be safely set up for access
by the unprivileged user, or a new directory can be specified as above.

     3. TMPDIR - Usually /tmp,
         but can also be set to another directory in your shell environment if  desired.

     It is further assumed that the following directories will be owned by
root:
     /var/db/pkg
     /var/db/ports
     LOCALBASE - Usually /usr/local
     PACKAGES - Usually /usr/ports/packages
     PKGREPOSITORY - Usually ${PACKAGES}/All

     You will then need to install and configure sudo(1).  This can easily be done with /usr/ports/security/sudo.  Then you will need to define  PM_SU_CMD in your /etc/portmaster.rc file,
or your $HOME/.portmasterrc file.  For example:
           PM_SU_CMD=/usr/local/bin/sudo
     You can optionally define the PM_SU_VERBOSE option as well to notify you     each time portmaster
uses the PM_SU_CMD.  This is particularly useful if   you are experimenting with a tool other than sudo(1) to handle the privilege escalation, although at this time sudo(1) is the only supported  option.
     PLEASE NOTE: You cannot upgrade the sudo(1) port itself using this  method.

Примеры

Обновление одного порта:
           portmaster fooport-1.23
           portmaster fooport
           portmaster foo/fooport
Использование пакетов собранных на официальном сайте через переменную среды PACKAGESITE:
Для этого в файл /root/.cshrc прописываем строку примерно такого вида(все зависит от вашей версии):
setenv PACKAGESITE http://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8-stable/Latest/
все теперь можно использовать ключи "-P", "-PP", "--packages-build" и пакеты будут браться с сервера ftp.freebsd.org:
            portmaster --packages-build fooport-1.23
Использование пакета если такой имеется:
           portmaster --packages fooport-1.23
Создайте порт локально, но использовать пакеты для удовлетворения зависимостей,
после сборки удалить зависимости установленные зависимости:
           portmaster --packages-build --delete-build-only fooport-1.23

Обновление системы с использованием только пакетов, доступные локально:
           portmaster -PP --local-packagedir= -a

Обновление всех портов, которые нуждаются в обновлении:
           portmaster -a

Обновление всех портов, которые нуждаются в обновлении, и удалить устаревшие
distfiles файлы после обновления:
           portmaster -aD
           portmaster --clean-distfiles

Более сложные задачи (см. подробнее описание вариантов выше):
           portmaster -r fooport-1.23
           portmaster -o emulators/linux_base-fc4 linux_base-8-8.0_15
           portmaster -x cvsup -f -a
           portmaster -a -x gstreamer -x linux

Только напечатать порты, у которых есть доступные обновления:
           portmaster -L | \
           egrep -B1 '(ew|ort) version|Aborting|installed|dependencies| \
           IGNORE|marked|Reason:|MOVED|deleted' | grep -v '^--'

Использование portmaster что бы сделать полную переустановку всех установленных портов:
           1. portmaster --list-origins > ~/installed-port-list
           2. Обновите дерево портов
           3. portmaster -ty --clean-distfiles
           4. portmaster --check-port-dbdir
           5. portmaster -Faf
           6. pkg_delete '*'
           7. rm -rf /usr/local/lib/compat/pkg
           8. Сохраните все файлы из /usr/local которые вы хотите потом восстановить,
              например файлы конфигураций в /usr/local/etc
           9. В ручную проверьте /usr/local и /var/db/pkg
              и убедитесь что они пусты
           10. Переустановите portmaster
           11. portmaster `cat ~/installed-port-list`

Вы, вероятно, хотите использовать опцию "-D" для установки, а  затем выполнить
--clean-distfiles [-y]снова. Возможно будет полезна опция  --force-config при установке новых портов.

Так же вы можете использовать portmaster -a -f -D, чтобы сделать "на месте"
обновление установленных портов. Если этот процесс прерван по какой-либо причине,
вы можете использовать portmaster -a -f -D -R, чтобы избежать установку портов,
уже обновленных (установленных) на предыдущем шаге. Однако первый метод
(удалить все и переустановить), предпочтен.

5 комментариев to “Portmaster — шпаргалка по ключам”

  1. Русский:

    «Не оТчищать архивы исходников (distfiles)», великий и могучий в интернете изучали?

  2. rrv:

    Спасибо! С языками плохо 😉

  3. Модник:

    -i Интерактивная мода обновления… 🙂
    Интерактивный режим… Всё-таки.

  4. lebus:

    -G Позволяет выполнить ‘make config’

    Как раз наоборот. «Не выполнять»

  5. rrv:

    Вы правы по поводу -G
    эту опечатку поправил.

Leave a Reply