Трюки с портами
Dru Lavigne, перевод Евгения Чайкина <mailto:strannick@REMOVE-THIS-FAKE.sovsem.net>
Оригинал статьи находится по адресу - http://www.onlamp.com/lpt/a/4057
http://www.onlamp.com/lpt/a/4111
Одна из многих причин, для того чтобы любить FreeBSD - коллекция
портов. Почти 10,000 приложений и для установки любого - просто make
install clean. В сегодняшней статье, я хотел бы рассказать Вам о
некоторых хитростях при работе с коллекцией портов.
README
Даже если Вы уже некоторое время используете коллекцию портов, чтение
man ports может выявить некоторые хитрости о которых Вы даже не
подозревали. Если у Вас есть масса дискового пространства, но
медленная или нерегулярная связь с Internet, эта выдержка из manpage -
просто бриллиант:
% cd /usr/ports
% make readmes
Пока команда будет выполняться, возможно стоит пойти перекусить. Когда
она завершится, у вас появится новый файл /usr/ports/README.html.
Откройте этот файл в вашем любимом браузере и Вы увидите чрезвычайно
удобную страничку со ссылками. Первой даётся ссылка на справочник
FreeBSD, который находится либо на Вашем жестком диске, либо на сайте
FreeBSD. Второй идёт ссылка на Porter`s Handbook. Если Вы когда-либо
хотели узнать, что скрывается за магией Makefile в портах или хотели
собрать свой собственный порт, тогда это - первый кандидат на чтение.
Далее идёт список ссылок в каждый из подкаталогов в /usr/ports. Не
позволяйте видимой простоте одурачить Вас. Выберите подкаталог и одно
из приложений. Я кликну на Editors->AbiWord2. Результирующая страница
содержит ссылки на описание порта, сайт программы, и электронный адрес
мантэйнера, а также электронный адрес списка рассылки этого порта. А
еще здесь есть полный список зависимостей порта. И вся эта информация
уже лежит на вашем винчестере, и доступна в любой момент, особенно
если поставить закладку.
Создание Package Repository
Другая удобная хитрость создание package repository - хранилища
пакетов. Это может сохранить Вам как время, так и траффик, особенно
если Вам нужно установить программное обеспечение на несколько машин в
сети. Эта методика также идеальна для установки программного
обеспечения на серверах, так как Вам не надо устанавливать целый набор
связанных портов только для того чтобы устанавливать нужные Вам
программы.
Выберите машину в вашей сети, чтобы создать хранилище пакетов.
Коллекция портов нужна только на этой машине; для остальных машин она
не потребуется. Создайте директорию для пакетов:
% mkdir /usr/ports/packages
Затем, соберите нужные Вам пакеты. Для примера, я соберу два пакета:
% cd /usr/ports/www/lynx
% make package
% cd /usr/ports/mail/getmail
% make package
Когда Вы делаете make package, происходят две вещи. Во-первых,
создается пакет и помещается в /usr/ports/packages. Во-вторых, на
локальной машине устанавливается этот порт, если он еще не был
установлен. Если Вам не нужно это приложение, после создания пакета
просто наберите make deinstall.
Заполнив /usr/ports/packages нужными Вам пакетами, создайте NFS mount
для обеспечения общего доступа к хранилищу пакетов. Самое простое -
сделать это с помощью stand/sysinstall. На машине, содержащей пакеты,
наберите:
% /stand/sysinstall
/s
Выберите Configure, Networking, а затем NFS server. Вы увидите
следующее сообщение:
Для работы NFS сервера Вы должны сначала
сконфигурировать /etc/exports чтобы указать,
какие хосты могут иметь доступ к
Вашей файловой системе.
Нажмите [ENTER], чтобы немедленно
начать редактировать /etc/exports
Если Вы не меняли редактор по умолчанию, /etc/exports откроется в vi.
Первоначальный файл содержит примеры конфигурации. Я добавил в файл
эту строку, чтобы добавить мою сеть:
/usr/ports/packages -network 192.168.2.0 -mask 255.255.255.0
После сохранения изменений, Вам потребуется перезагрузка для
инициализации NFS сервера. Если перезагрузка нежелательна, читайте
инструкции в справочнике
(http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-nfs.html).
Теперь убедимся, что сервер NFS готов к
работе:
% sockstat | grep nfs
root nfsd 3973 tcp4*:2049 *:*
Теперь Вам нужно создать NFS клиентов на каждой из машин, которые
будут использовать хранилище пакетов. На этот раз с помощью
/stand/sysinstall выберем NFS client, а затем NFS server. Вас ни о чем
не спросят; просто снимите отметку. Когда закончите, наберите:
% nfsiod -n 4
Теперь проверьте, доступно ли хранилище пакетов. В моём примере
192.168.2.12 - машина, на которой хранятся пакеты:
% mount 192.168.2.12:/usr/ports/packages /mnt
% ls /mnt
All Latest ipv6 mail python www
Обратите внимание, что были созданы подкаталоги для mail/getmail и
www/lynx. Подкаталоги ipv6 и python - зависимсоти этих пакетов.
Подкаталог All самый удобный:
% ls /mnt/All
getmail-3.1.7.tbz lynx-2.8.4.1d.tbz
А теперь я попробую добавить пакет:
% pkg_add /mnt/www/lynx-2.8.4.1d.tbz
После возвращения в командную строку я проверю, установился ли пакет:
% pkg_info | grep lynx
lynx-2.8.4.1d A non-graphical, text-based World-Wide Web client
При установке, Вы обнаружите, что пакеты не устанавливают свои
зависимости. При их отсутствии, они выводят ошибку. Например:
% pkg_add /mnt/mail/getmail-3.1.7.tbz
pkg_add: could not find package python-2.2.3_2 !
Обучите своих пользователей сначала устанавливать зависимости (в этом
примере - python-2.2.3_2), а затем сам пакет. Также напомните им, что
после окончания установки, необходимо выйти из каталога NFS и
отмонтировать последний:
%/h23 /
% umount /mnt
Показ зависимостей
Хорошо, что еще можно делать с портами? Я уже показывал, как
просматривать зависимости, используя make readmes.
Другой путь - сделать так:
% cd /usr/ports/graphics/gimp
%/hke pretty-print-build-depends-list
This port requires package(s) "XFree86-libraries-4.3.0_5
aalib-1.4.r5_1 cups-base-1.1.19.0 cups-pstoraster-7.07 expat-1.95.6_1
fontconfig-2.2.90_3 freetype2-2.1.4_1 gettext-0.11.5_1
ghostscript-gnu-7.07_3 gimp-print-4.2.5 glib-1.2.10_9 gmake-3.80
gtk-1.2.10_9 imake-4.3.0_1 jpeg-6b_1 libiconv-1.9.1_1 libijs-0.34
libtool-1.3.5_1 perl-5.6.1_13 pkgconfig-0.15.0 png-1.2.5_2
tiff-3.5.7_1" to build.
Поиск портов
Коллекция портов включает возможность поиска. Это чрезвычайно полезно.
Особенно если Вы знаете что должно делать приложение и хотите узнать,
какие именно порты Вам подходят. К примеру:
% cd /usr/ports
% make search key=dvd | more
В результате мы получим список портов, так или иначе связанных с DVD.
Чтобы Вы получили представление, о чем идет речь, вот первый результат
этого поиска:
Port:dvdauthor-0.5.3
Path:/usr/ports/multimedia/dvdauthor
Info:Makes a DVD file structure from one or more MPEG2 streams
Maint:/teeBSD.org
Index:multimedia
B-deps:expat-1.95.6_1 gettext-0.11.5_1 gmake-3.80 libdvdcss-1.2.5
libdvdread-0.9.4 libgnugetopt-1.2 libiconv-1.8_2 png-1.2.5_2
R-deps:libdvdcss-1.2.5 libdvdread-0.9.4 libgnugetopt-1.2 png-1.2.5_2
"B-deps" - это зависимости для построения, тогда как "R-deps" -
зависимости для запуска приложения.
Если Вы хотите просто найти порт по имени, используйте make search
name=[имя_программы]. К примеру, если я знаю, что хочу собрать
Netscape, и хочу посмотреть доступные версии, я просто наберу:
% make search name=netscape | more
Если Вы находите поиск полезным, используйте make index для того,
чтобы быть уверенным, что Ваш поиск выдает свежие результаты. Но
выполнение этой команды занимает довольно много времени, так что не
используйте её, если Вы торопитесь.
Показ уже установленных пакетов и портов
Перейдём к man pkg_info. Эта утилита показывает установленные в
системе порты и пакеты. Если Вы не прочтёте manpage этой утилиты перед
использованием, Вы рискуете не узнать довольно много полезных ключей.
Когда Вы используете pkg_info, с ключом -a в комбинации с другими
ключами, Вы получите информацию обо всех установленных в системе
программах. Если же Вы укажете имя конкретной программы, Вы получите
информацию только о ней. Например:
% pkg_info -ac
покажет комментарий в одну строку для каждого приложения, тогда как:
% pkg_info -c lynx-2.8.4.1d
покажет однострочный комментарий для lynx-2.8.4.1d. Если Вы хотите
длинного описания, используйте -d вместо -c.
Если Вы похожи на меня и ненавидите набирать, или, что более вероятно,
не помните версию приложения, используйте -x:
% pkg_info -xc lynx
Вышеприведённая команда выведет однострочный комментарий для всех
приложений, начинающихся с lynx. Кроме экономии Ваших ячеек памяти,
это прекрасный срособ обнаружить, что на Вашей системе установлено
несколько версий lynx.
Чтение пост-установочных сообщений
После установки порта, полезно взглянуть на вывод установки, так как там
часто бывают советы и инструкции по настройке. К примеру, в моей
предыдущей статье (http://www.onlamp.com/pub/a/bsd/2003/07/24/FreeBSD_Basics.html),
я показывал как посмотреть вывод установки /usr/ports/mail/messagewall.
Вот ещё один метод:
% pkg_info -xD messagewall
Очень полезный ключ -L, выводит полный путь для каждого файла, который
был установлен для приложения:
% pkg_info -xL lynx | more
Information for lynx-2.8.4.1d:
Files:
/usr/local/man/man1/lynx.1.gz
/usr/local/bin/lynx
/usr/local/etc/lynx.cfg.default
/usr/local/share/doc/lynx/CHANGES
Из вывода мне стало известно, что lynx установился с manpage, что сам
он установился в /usr/local/bin/lynx, что у него есть пример файла
конфигурации, и что существует директория, содержащая документацию,
касающуюся lynx. Обычно, меня не интересует, куда был установлен
каждый файл. Поскольку в большинстве случаев меня интересует начало
вывода, я перенаправляю вывод в head вместо more:
% pkg_info -xL lynx | head
Проверка зависимостей перед деинсталляцией
Перед деинсталляцией приложения, хорошей идеей будет проверить, не
является ли оно зависимостью для других приложений. К примеру, Вы
набрали
pkg_info | more
и видите это приложение:
ORBit-0.5.17
Вы думаете, "Что-то я не припоминаю, чтобы я устанавливал или
пользовался этой программой. Может быть просто удалить её?" Эта
команда покажет Вам, для чеготребуется приложение, если оно было
установлено другой программой:
% pkg_info -R ORBit-0.5.17
Information for ORBit-0.5.17:
Required by:
AbiWord-gnome-1.0.5
flashplugin-mozilla-0.4.10_2
Ну, в конце-концов, это приложение выглядит полезным. Но не
беспокойтесь. Если бы Вы попытались удалить это приложение, pkg_delete
выдало бы сообщение, о том, что данное приложение требуется другим
программам. Тем не менее, неплохо знать об этом заранее.
Проверяем, сколько места занисают Ваши порты
Как быть, если Вы решили немного безумно-поинсталлировать и
обнаружили, что приложений больше, чем места на диске? Используйте
ключ для определения размера, потребного для приложения. Перенаправьте
вывод команды на more:
% pkg_info -as | more
или в файл, чтобы прочитать его потом в своё удовольствие:
% pkg_info -as > sizes
У Вас появится информация о том, какие приложения съедают больше всего
места, что даст повод для решения о деинсталляции чего-либо. Не
забывайте использовать ключи комментария и зависимостей, чтобы
определиться с решением.
Проверка статуса установленных портов
Еще один путь отслеживания установленного в системе программного
обеспечения - использование pkg_version:
pkg_version | more
покажет алфавитный список приложений, установленных в системе. При
этом каждое приложение следует за одним из трёх символов:
* =: свежее приложение;
* <: уже есть более новая версия приложения;
* >: вам надо обновить индекс.
Так, чтобы определить какие приложения требуют модернизации:
% pkg_version -l "<"
Заметьте, Вам надо поставить кавычки вокруг знака <, иначе оболочка
пожалуется на отсутствие имени файла для перенаправления. Если команда
ничего не вывела, поздравляю! Все Ваши приложения вполне свежие. Если
Вы получили какой-либо вывод, Вы знаете, какие приложения нужно
обновить.
Эта команда выведет поочерёдно все устаревшие приложения:
% pkg_version -L "="
Подробнее смотрите man pkg_version, если Вы не видите разницы между -l
и -L.
Если Вы хотите более подробного отчёта, чем =, <, или >, попробуйте
эту команду:
% pkg_version -v | more
В большинстве случаев, стоит запускать pkg_version после использования
/usr/ports/net/cvsup-without-gui и получения свежей коллекции портов.
(Смотри раздел [12]The FreeBSD Handbook`s cvsup.) Если по каким-либо
причинам Вы не используете cvsup, Вы можете сравнить Ваши приложения с
последним деревом портов:
% pkg_version -v ftp://ftp.freebsd.org/pub/FreeBSD/branches/-current/ports/INDEX \
| more
Заметьте, эта команда пишется в одну строку. Используйте поочерёдно
ключи -l или -L с этим URL, чтобы найти устаревшие приложения.
Все упомянутые в этой статье утилиты входят в состав базовой FreeBSD.
В следующей статье, я расскажу об утилитах из коллекции портов,
которые добавляют функциональность в работе с портами.
В предыдущей статье (а также ее переводе - А.Ф.) мы рассмотрели
утилиты FreeBSD для управления коллекцией портов. В этом же русле я
хотел бы продолжить и эту статью. Давайте посмотрим на portupgrade,
порт который поможет Вам получить максимальную отдачу от коллекции
портов.
Установка portupgrade
Порт portupgrade устанавливается, как и любой другой порт, путём
перехода в соответствующий каталог и выполнения команды make:
% cd /usr/ports/sysutils/portupgrade
% make install clean
Установка даст нам несколько весьма полезных утилит. Используем трюк
из последней статьи, и посмотрим какие man`ы установил порт:
% pkg_info -xL portupgrade | grep man
/usr/local/man/man1/pkg_deinstall.1.gz
/usr/local/man/man1/pkg_fetch.1.gz
/usr/local/man/man1/pkg_glob.1.gz
/usr/local/man/man1/pkg_sort.1.gz
/usr/local/man/man1/pkgdb.1.gz
/usr/local/man/man1/portcvsweb.1.gz
/usr/local/man/man1/portsclean.1.gz
/usr/local/man/man1/portsdb.1.gz
/usr/local/man/man1/portupgrade.1.gz
/usr/local/man/man1/portversion.1.gz
/usr/local/man/man5/pkgtools.conf.5.gz
/usr/local/man//man1/pkg_which.1.gz
/usr/local/man//man1/portinstall.1.gz
/usr/local/man//man1/ports_glob.1.gz
Мы не зря потратили время, решив взглянуть на man`ы. Теперь Вы имеете
представление о мощи и гибкости коллекции портов, а также сможете
узнаеть о трюках, которые Вы и представить не могли. Хотя, конечно,
такое количество информации вполне может привести в смятение. В
последующих статьях мы рассмотрим несколько конкретных примеров, для
того, чтобы Вы могли эффективно использовать эти утилиты.
Для начала, взглянем на структуру портов, установленных на Вашей
системе, и разберёмся, как своевременно их обновлять.
Когда Вы установили FreeBSD и выбрали установку коллекции портов Вы
получили /usr/ports, а также его файлы и подкаталоги. Если Вы сделаете
ls /usr/ports, Вы увидите подкаталоги, на которые логически разбита
коллекция портов. Например на каталоги mail, www, и databases. Каждая
директория разбита на подкаталоги с приложениями, так www содержит
mozilla и lynx. Каждый из этих подкаталогов содержит информацию,
необходимую для установки данного приложения. Например:
$ ls -F /usr/ports/www/mozilla
./ Makefile distinfo pkg-descr pkg-message
../ README.html files/ pkg-descr.gtk2
Таким образом мы видим Makefile, pkg-descr, и pkg-message файлы,
которые вместе с некоторыми утилитами и ключами, мы рассмотрели в
прошлой статье.
Коллекция портов постоянно обновляется. Регулярно добавляются новые
порты, обычно раз в день. Если Вы любопытны, и любите подробности
http://freshports.org/ , станет для Вас неоценимым ресурсом.
То что коллекция портов постоянно меняется, здорово, но это означает,
что структура Вашей /usr/ports может быстро устареть. Чтобы быть
уверенным, что Ваша коллекция портов актуальна и пригодна для
построения новейших приложений, используйте cvsup.
Синхронизация Вашего дерева портов
Я часто упоминаю cvsup. Если Вы еще не используете cvsup Вам стоит прочесть Using CVSup
(http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html)
прежде чем браться за дело. Справочник является лучшим источном знаий
об утилите cvsup и о том, для чего она нужна. Когда Вы будете готовы:
% cd /usr/ports/net/cvsup-without-gui
% make install clean
cvsup можно использовать для поддержания в актуальном состоянии как
исходных текстов операционной системы, так и коллекции портов. Если
Вам нужно обновлять только коллекцию портов, Вам поможет такой файл:
% more /root/cvs-supfile
*default host=cvsup.ca.freebsd.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs delete use-rel-suffix compress
ports-all tag=.
Для использования этого файла, запустите с правами superuser`а
команду:
% cvsup -g -L 2 ~/cvs-supfile
Если смысл файла или команды Вам непонятен, прочитайте раздел
справочника на который я ссылался ранее. Также заметьте, что строка =.
в файле ports-all очень важна, так что дважды проверьте её наличие.
Команда cvsup загрузит последние дополнения коллекции портов и добавит
их к Вашему дереву. Этот тип команды подразумевает ежедневное
применение, и просто просится в cron.
Процесс cvsup также обновляет /usr/ports/INDEX. Этот файл содержит
список всех приложений в Вашем дереве портов. Чтобы посмотреть,
насколько свежие у Вас порты, наберите:
$ ls -l /usr/ports/INDEX
-rw-r--r-- 1 root wheel 3678738 May 17 17:04 INDEX
Установка операционной системы на этой машине была произведена 17 мая
и с тех пор я не обновлял дерево портов. Сравним её с моей основной
машиной, на которой я выполняю cvsup ежедневно:
$ ls -l /usr/ports/INDEX
-rw-r--r-- 1 root wheel 3912366 Aug 17 08:50 INDEX
Что ж, за три месяца размер файла, а значит и количество приложений в
коллекции портов, значительно увеличился.
Обновление базы данных портов
Ну что ж, теперь мы готовы к portupgrade и прочим утилитам из её
набора. После каждого cvsup, запустите команду:
% portsdb -Uu
После первого запуска этой команды, будет создан файл базы данных
INDEX.db в /usr/ports. Он будет обновляться каждый раз, когда Вы
используете команду portsdb после обновления cvsup. Если Вы
используете утилиту file Вы обнаружите, что не можете увидеть
содержимое INDEX.db, поскольку это не текстовый ASCII файл:
$ file /usr/ports/INDEX.db
/usr/ports/INDEX.db: \
Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order)
Тем не менее, некоторые утилиты portupgrade используют эту базу
данных. Btree - алгоритм базы данных, специально предназначенный
для просмотра большого количества данных. Он идеален для коллекции
портов - как мы увидим, многие утилиты portupgrade быстрее и
эффективнее нативных, которые мы рассматривали в прошлой статье, и это
благодаря Btree.
Когда утилита portsdb начнёт свою работу, наберитесь терпения. Когда
она закончит, Вы готовы к использованию portversion чтобы взглянуть,
какие порты требуют обновления. Помните эту комманду?
% portversion -l "<"
Если Вы получили какой-либо вывод, значит Вашим следующим шагом должно
стать обновление устаревших портов. Что неудивительно, мы используем
portupgrade, также именуемый portinstall.
Апгрейд портов
В своей простейшей форме, portupgrade -a проапгрейдит все (-a) Ваши
устаревшие порты. Тем не менее, время от времени могут встречаться
порты, которые отказываются обновляться. Эта кажущаяся аномалия, не
недостаток portupgrade, а умолчание, связанное с проблемой
зависимостей.
Порт имеет два типа зависимостей. Первый тип называется build
dependency и относится к другим портам, которые должны быть собраны и
установлены перед установкой порта. Второй тип зависимости связан с
портами, которым для нормальной работы требуется данный порт. Как Вы
помните из предыдущей статьи pkg_delete отказывается удалять
приложение, если имеются другие приложения, которые зависят от него.
Если Вы просто апгрейдите порты, то рано или поздно сталкиваетесь с
портами, которые отказываются апгрейдится. Для предотвращения такой
ситуации, используйте portupgrade с двумя ключами, вот так:
% portupgrade -arR
Ключ -R проверит зависимости для установки, а ключ -r проверит
приложения, которые зависят от порта. Это предотвратит появление в
Вашей системе устаревших зависимостей и несовместимости программ.
Периодически, когда Вы используете portupgrade или его утилиты, Вам
будет выдаваться сообщение с предложением запустить pkgdb -F. Как Вы
можете догадаться, по её названию, эта утилита обновляет базу данных
пакетов. Эта база данных находится в /var/db/pkg/pkgdb.db. Кроме того,
эта база данных использует Btree для оптимизации времени поиска.
Если Вас просят запустить pkgdb -F, сделайте это. И ещё, если Вы
запустили эту команду, не прерывайте её работу, иначе Вы рискуете
остаться с противоречивой базой данных. Если же неприятность
случилась, эта команда устранит несовместимость:
% pkgdb -fu
Эта комбинация ключей легко запоминается, оставляя возможность мыслям
свободно течь через ваш мозг.
Запуск pkgdb с ключом -F интерактивно исправит Вашу базу данных.
Имеется в виду, что pkgdb будет останавливаться и спрашивать Вас о
Вашем выборе, перед тем, как что-либо сделать. Michael Lucas написал
статью о том, как реагировать на это
(http://www.onlamp.com/pub/a/bsd/2001/11/29/Big_Scary_Daemons.html).
Тем не менее, если Вас смущает необходимость искать правильные
ответы, используйте pkgdb с ключом -fu и она молча сделает то, что
считает наилучшим. Если Вы настящий параноик, используйте ключи -Fa,
которые говорят pkgdb исправлять только те несоответствия, которые
могут быть безопасно исправлены.
Вообще, всё не так страшно, как кажется. Вероятность того, что система
попросит запустить pkgdb -F, очень мала. pkgdb обычно используется для
других целей, например which, также называемый pkg_which.
Использование pkg_which
pkg_which (или pkgdb) используется для определения, какому приложению
принадлежит файл. Вот простой пример, иллюстрирующий различие между
встроенной командой which и pkg_which:
$ which pkgdb
/usr/local/sbin/pkgdb
which используется для того, чтобы показать путь к приложению.
pkg_which скажет мне какому приложению принадлежит файл:
$ pkg_which pkgdb
portupgrade-20030723
Эта команда эквивалентна предыдущей команде pkg_which:
$ pkgdb pkgdb
portupgrade-20030723
Ещё пример. Скажем, каталоги из /usr/local, содержат файлы,
установленные приложениями. Вы нашли целую кучу файлов, и хотели бы
узнать, что откуда взялось. Вот и работа для pkg_which. Взгляните для
примера на эту выдержку из вывода моей системы:
$ ls /usr/local/bin | grep yaf
tryaffix*
yaf-cdda*
yaf-mpgplay*
yaf-splay*
yaf-tplay*
yaf-vorbis*
yaf-yuv*
Если Вы похожи на меня, то эти имена файлов ничего Вам не говорят.
Давайте посмотрим, какому приложению они принадлежат:
$ pkg_which *yaf*
ispell-3.2.06_3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
pkg_which содержит несколько полезных ключей. Один из них - ключ -o,
или "начало". Скажем, Вы не помните, откуда из дерева портов
происходит kdemultimedia-3.1.3. Попробуйте это:
$ pkg_which -o kdemultimedia-3.1.3
multimedia/kdemultimedia3
Вывод показывает, что каталог, из которого было построено приложение -
/usr/ports/multimedia/kdemultimedia3.
Ключ -v также может оказаться полезным. Если я хочу узнать какие
приложения kde у меня установлены:
$ pkg_which -v kde*
kde-config: kdelibs-3.1.3
kdebugdialog: kdebase-3.1.3
kded: kdelibs-3.1.3
kdeeject: kdebase-3.1.3
kdeinit: kdelibs-3.1.3
kdeinit_shutdown: kdelibs-3.1.3
kdeinit_wrapper: kdelibs-3.1.3
kdepasswd: kdeutils-3.1.3
kdeprintfax: kdebase-3.1.3
kdesktop: kdebase-3.1.3
kdesktop_lock: kdebase-3.1.3
kdessh: kdeutils-3.1.3
kdesu: kdebase-3.1.3
kdesu_stub: kdelibs-3.1.3
kdesud: kdebase-3.1.3
kdevdlg2ui: kdevelop-2.1.5
kdevelop: kdevelop-2.1.5
Красивый, информативный вывод. Каждая строка показывает имя приложения
и следующее за ней через : имя порта, который установил это
приложение. Кстати, похоже на этой машине установлен KDE версии 3.1.3.
Прежде чем двигаться дальше, подведём итоги. Итак шаги, нужные для
поддержания Ваших программ в акуальном состоянии, будут следующими:
1. Запустите cvsup для синхронизации дерева портов.
2. Запустите portsdb для обновления INDEX.db.
3. Используйте portversion для определения приложений, требующих
обновления.
4. Используйте portupgrade для апгрейда этих приложений.
Дополнительные ключи portupgrade
Мы уже убедились, что portupgrade -arR корректно обновляет все
устаревшие приложения. Тем не менее, у portupgrade есть еще несколько
ключей, позволяющих Вам выбирать какие приложения апгрейдить, и как
это делать.
Опция, которая полезна, если у Вас нет постоянного соединения с
интернетом -F. Обычно, когда Вы производите апгрейд, portupgrade идёт
в интернет, когда ей требуется файл, а затем тратит время на его
сборку. Если Вы производите большой апгрейд, например KDE, она может
много раз выходить в интернет с перерывами в несколько часов.
Эта команда выходит в интернет, вытягивает все нужные файлы, но ничего
не устанавливает:
$ portupgrade -aFrR
Когда Вы загрузили необходимые файлы, можно отключаться от интернета и
запускать portupgrade -arR как обычно.
Другой ключ -n. Этот ключ просто сообщает Вам, что собирается делать
portupgrade. Этот ключ очень полезен, если Вы относитесь к нервному,
параноидальному типу и хотите заранее знать, что случится с Вашим
софтом.
Вот пример вывода:
$ portupgrade -anrR
---> Session started at: Sun, 17 Aug 2003 22:06:00 -0400
<a page of output snipped>
---> Reporting the results (+:done / -:ignored / *:skipped / !:failed)
- lang/ruby16 (ruby-1.6.8.2003.04.19)
- net/cvsup-without-gui (cvsup-without-gui-16.1h)
+ lang/ruby16-shim-ruby18 (ruby-shim-ruby18-1.8.0.p2.2003.04.19)
+ databases/ruby-bdb1 (ruby-bdb1-0.1.9)
- sysutils/portupgrade (portupgrade-20030723)
- www/lynx (lynx-2.8.4.1d)
---> Session ended at: Sun, 17 Aug 2003 22:06:02 -0400 (consumed 00:00:02)
Давайте посмотрим на этот вывод. portupgrade систематически проходит
через каждый установленный в системе порт, а затем помещает результат
в отчет. Каждая строка отчета показывает заголовок порта,
установленную версию, и символ, показывающий требуется ли апгрейд. В
этом частичном отчёте показано два порта, требующих модернизации. Они
находятся в строках, начинающихся со знака +. Если я сравню отчёт с
показаниями portversion, я увижу один результат, записанный по
разному:
$ portversion -l "<"
ruby-bdb1
ruby-shim-ruby18
Если Вы очень осторожны, можете использовать ключ -i, что означает
интерактивность. Добавьте его к Вашим ключам portupgrade и portupgrade
будет делать паузу перед апгрейдом приложения или зависимости. Пауза
выглядит так:
---> Upgrading `ruby-bdb1-0.1.9` to `ruby-bdb1-0.2.1`
(databases/ruby/bdb1)
OK? [yes]
Обратите внимание на ответ "да" в квадратных скобках, этот ответ будет
использован по умолчанию. Это значит, что нажимая Enter, Вы говорите
"Да". Если Вы полагаете, что Вы не хотите обновлять этот порт,
наберите no.
Последний ключ, который я хотел бы упомянуть, ключ l, или лог. Этот
ключ неоценим, когда порт отказывается устанавливаться, и Вы
собираетесь послать кому-либо лог неудачной установки. Для примера, я
проапгрейжу один порт и направлю вывод в файл, названный logfile:
$ portupgrade -rR ruby-shim-ruby18 -l logfile
Скорее всего, Вы не захотите использовать этот ключ, особенно если у
Вас много файлов, требующих модернизации. Кому же хочется продираться
через огромный лог-файл!
В следующей статье я хочу осветить деинсталляцию портов и чистку
файлов, которые уже не используются портами. А еще мы рассмотрим
настройку pkgtools.conf.