Kiev1.org Карта сайта Файлы Фотографии Киева
  
Реклама:

Pride - велосипеды для детей и подростков.






Разделы
 
 Sysadmin
 Антиглобалисты
 Ереси и секты
 Катастрофы
 Компьютерные новости
 Непроверенное
 О проекте
 О фотогалерее
 Политика и власть
 Православие
 Предприятия Украины
 Протесты Людей против нового мирового концлагеря
 Разное
 Россия
 Старец Паисий 1924-1994
 Стояние за Истину
 Суды в Украине
 Тайна беззакония
 экуменизм


Внимание! Читая пророчества на этом сайте помните что достоверность трудно проверить и все может во времени изменяться - самое главное думать своей головой и не верить легкомысленно всему что говорят, особенно советское телевидение
"О дне же том, или часе, никто не знает, ни Ангелы небесные, ни Сын, но только Отец (Мк. 13, 32)"

Очистка портов во FreeBSD, portupgrade



Не редко случается ситуация, когда вы устанавливаете программу из пакета и он требует для установки другой пакет. У вас могут быть одновременно установлены разные версии пакетов. Если вы устанавливаете из пакетов, это автоматически устанавливает требуемые пакеты, даже если в системе уже установлены немного другие версии этих пакетов.
Очистка портов во FreeBSD

www.opennet.ru/base/sys/cleaning_up_ports.txt.html
Перевод: romanus (Roman Ignatov) 29/04/2004
Автор: Michael Lucas
Оригинальная статья: Cleaning Up Ports (11/29/2001)
www.onlamp.com/pub/a/bsd/2001/11/29/Big_Scary_Daemons.html?page=1

Несмотря на то, что все хвалят систему портов FreeBSD, в ней есть
ограничения. Одно из ограничений действительно уменьшает другие
сильные стороны FreeBSD -- это система апгрейда. Взаимодействие с
которой использует очень неуклюжий путь.

Процесс инсталляции портов записывает каждый файл порта, включая все
зависимости. Например, много портов требуют графическую библиотеку
PNG. Записи порта указывают на точную версию библиотеки PNG, которая
требуется, например версия 1.0.11. В общем, это та же версия, которая
находится в вашем дереве портов. Процесс модернизации (апгрейда) во
FreeBSD может обновить только версии программ, что есть в дереве
портов. Например, библиотека PNG была недавно обновлена до версии
1.0.12. Номер основной версии не увеличился, но в новой библиотеки
(промежуточной версии) были сделаны некоторые исправления ошибок. Мне
хочется обновить свою версию. Если я это сделаю - более тридцати
портов, в которых указана ТОЧНАЯ версия PNG-библиотеки, будут иметь
неправильные записи (ссылки на библиотеку).

В моем ноутбуке установлено 187 пакетов. В основном я обновляю свое
дерево портов еженедельно, так как порты загрязняются очень быстро и
вскоре их становится невозможным использовать. К счастью Akinori MUSHA
шагнул вперед, создав инструмент позволяющий разобраться в этом
мусоре: portupgrade(1) и другие.

Инструменты, включенные в portupgrade, реализуют некоторые новые
возможности в системе портов FreeBSD. Во-первых это pkgdb и portdb,
которые создают базу данных индексируя /var/db/pkg и дерево портов.

Это ускоряет поиск и манипуляцию этй информацией. Эти инструменты
также перезаписывают различные /var/db/pkg файлы для сохранения
согласованности (для сохранения зависимостей). И наконец, они
надстройки для различных pkg_* комманд, которые оперируют и с базой
данных и с текстовыми записями когда вы добавляете или удаляете ту или
иную программу. Все эти инструменты вы можете получить установив из
портов /usr/ports/sysutils/portupgrade.

Перед тем как вы начнете использовать portupgrade, забекапте
/var/db/pkg! У меня никогда небыло никаких проблемм с этой программой,
но все инструменты, которые непосредственно изменяют системную
информацию, имеют безграничный потенциал сделать вашу жизнь трудной.
Если вы полностью уничтожите информацию о ваших пакетах вы сможете
восстановить их из бекапа.

# tar -czvf dbpkg.tgz /var/db/pkg

Запустите pkgdb -F, чтобы начать установку и выполнить некоторую
основную очистку. Если у вас много портов и вы давно делали обновление
дерева портов, при первом запуске эта операция может занять много
времени. Как только вы построили базу данных, использование станет
легче и быстрее; это только первый раз занимает много времени.

#pkgdb -F
Checking the origin of Hermes-1.3.2
Checking the origin of Mesa-3.4.1
Checking the origin of Mesa-3.4.2_1
Checking the origin of ORBit-0.5.10_5
Checking the origin of XFree86-aoutlibs-3.3.6.9
...

Проходя по всем пакетам с измененными (неправильными) зависимостями,
pkgdb будет спрашивать вас, хотите ли вы исправить неверные
зависимости.

Stale dependency(устаревшая зависимость):
esound-0.2.22 -> libaudiofile-0.2.2: libaudiofile-0.2.1_1 ? ([y]es/[n]o/[a]ll) [yes]

Итак, esound зависит от libaudiofile версии 0.2.2, но текущая
установленная версия 0.2.1_1. Я видимо сделал бы pkg_add -f в
недалеком прошлом, думая что это должно работать несмотря на некоторое
различие в номерах версий. (Так и было). Итак pkgdb спрашивает хочу ли
я обновить мои записи в /var/db/pkg/esound-0.2.22/+CONTENTS, чтобы они
указывали на версию libaudiofile, которая установлена в системе. Если
я соглашусь с предложением по умолчанию, pkgdb подкорректирует записи.

Если я напечатаю "а", pkgdb подкорректирует не только записи
libaudiofile для esound, но и для всех других пакетов, которые
используют libaudiofile. Это очень удобно для пакетов, которые имеют
много зависящих (от них) пакетов, например как PNG.

В предыдущем примере pkgdb оказался способным догадаться о
зависимости. В других случаях он может вообще ни о чем не
догадываться. Например, я собирал XFree86 из CVS репозитория
xfree86.org. imake - это часть XFree86, поэтому у него нет записи в
/var/db/pkg. Это нормально. Процесс port-building проверяет
существующие программы, не по их записям в /var/db/pkg. При
инсталляции портов записи помещаются в /var/db/pkg, тем не менее,
считается что порт установлен если найдена соответствующая программа
(Это возможно недостаток в системе портов, но это не так просто
исправить).

Что случится когда в списке портов будет зависимость от imake, pkgdb
"заглохнет".

Stale dependency: Xaw3d-1.5 - imake-4.1.0:
New dependency? (? to help): ?

Здесь у меня есть выбор. Я могу назначить новую зависимость или я могу
сообщить пакету, что это не зависимость.

[Enter] to skip, [Ctrl]+[D] to delete, [.][Enter] to abort, [Tab] to complete
New dependency? (? to help):
Control-D it is.
Delete this? ([y]es/[n]o/[a]ll) [yes]
Deleted.

Если я выберу "yes," будет удалена только эта зависимость. Если я
выберу "all" эта зависимость будет удалена везде где встретится.
Множество портов используют imake; Я хочу удалить все эти зависимости.

Смотрим дальше:

Stale dependency: xneko-4.4 - XFree86-libraries-4.1.0:
Delete this? ([y]es/[n]o/[a]ll) [yes] Deleted.

Другой случай, это действительно зависимость, которую pkgdb не может
распознать правильно.

Stale dependency: plugger-3.3_1 - timidity++-esound-2.10.4:
New dependency? (? to help): ?
[Enter] to skip, [Ctrl]+[D] to delete, [.][Enter] to abort, [Tab] to complete
New dependency? (? to help): timidity++-2.10.4

Завершение табом делает это выполнимым. Я знаю, что timidity++-esound
использует какую-то версию timidity, но я но я не хочу перерывать всё
в поисках точного номера версии. Я могу напечатать несколько первых
букв и нажать таб (tab), и спокойно получить полное имя пакета.
И наконец, процесс pkgdb будет предупреждать вас о дубликатах.

Duplicated origin: graphics/Mesa3 - Mesa-3.4.1 Mesa-3.4.2_1
Remove any of them? [no]

Здесь у меня проблема. Не редко случается ситуация, когда вы
устанавливаете программу из пакета и он требует для установки другой
пакет. У вас могут быть одновременно установлены разные версии
пакетов. Если вы устанавливаете из пакетов, это автоматически
устанавливает требуемые пакеты, даже если в системе уже установлены
немного другие версии этих пакетов. Что то похожее произошло и в моей
системе. Мой ноутбук имеет две разные версии Mesa, но одна версия
перезаписана другой. Очевидно это не может быть очень плохо, так как
моя система нормально работает (в конце концов мне следует полностью
удалить Mesa и установить свежую версию). Итак мне нужно очистить базу
данных портов. Я спокойно удалил более старую версию.

Итак теперь у вас есть база данных информации об установленных пакетах
в /var/db/pkg/pkgdb.db Также у вас должна быть база данных портов в
/usr/ports/index.db и /usr/ports/index.dbo (у меня /usr/ports/INDEX.db
и /usr/ports/INDEX-5, прим. перев.) Различные инструменты portupgrade
используют эти базы данных в своей работе. Всякий раз, когда вы
обновляете ваше дерево портов, обновляется база данных портов и
/usr/ports/INDEX. Вы можете это сделать в любой момент просто запустив
portsdb -Uu.

Теперь, когда мы установили необходимые инструменты, давайте
посмотрим, что мы можем сделать. Чтобы увидеть какие программы в
системе устарели, используйте portversion (1). Он работает также как и
pkg_info, но намного быстрее.

# portversion
Hermes =
Mesa =
ORBit <
XFree86-aoutlibs <
Xaw3d =
aalib =

Символ '<' означает, что установленная версия старее, чем текущая
версия в дереве портов. Вы можете просто запустить portversion | grep
'<', чтобы увидеть версии каких программ устарели. Я так поступаю
часто просто для того, чтобы посмотреть что установлено на моей
системе. Например, мой пакет Apache устарел. Тем более я давно не
использую Apache на моем ноутбуке, поэтому я могу спокойно его
удалить. Можно воспользоваться стандартной утилитой pkg_delete, но
если я её использую - моя база данных пакетов не будет соответствовать
действительному состоянию моей системы. Вместо этого я использую
pkg_deinstall(1).

# pkg_deinstall apache
---< Deinstalling 'apache-1.3.20'
[Updating the pkgdb in /var/db/pkg ... - 182 packages found (-1 +0)
(...) done]
#

Здесь есть интересная особенность, мне не нужно больше указывать
полностью номер версии! (Это утомляло меня некоторое время в
стандартных утилитах FreeBSD pkg_*, но теперь я от этого избавился)

Утилиты portupgrade используют универсальные функции, которые дают
возможность искать совпадения по шаблону.

Предположим я хочу обновить некоторые порты. К тому же, я хочу
обновить сохраняя синхронизацию с базой данных, внося походу
корректировки в записи в /var/db/pkg. Например, pkgversion показывает
мне, что библиотека gd устарела. Можно легко обновить требуемый пакет:

# portupgrade gd
===> Cleaning for gettext-0.10.35
===> Cleaning for gmake-3.79.1
===> Cleaning for libtool-1.3.4_2
===> Cleaning for jpeg-6b
===> Cleaning for png-1.2.0
===> Cleaning for freetype2-2.0.5
===> Cleaning for gd-1.8.4_4
If you want to compile in X support use
'make -DWITH_X11' instead
===> Extracting for gd-1.8.4_4
....

Вы увидите такой же вывод как от make. Если вы посмотрите дальше, вы
увидите как утилита удаляет установленные пакеты, обновляет базу
данных и так далее.

... ---> Deinstalling 'gd-1.8.4_3'
pkg_delete: package 'gd-1.8.4_3' is required by these other packages
and may not be deinstalled (but I'll delete it anyway): scr2png-1.1
[Updating the pkgdb in /var/db/pkg ... - 180 packages found (-1 +0) (...) done]
===> Installing for gd-1.8.4_4
...

После окончания установки, утилита снова обновит базу данных пакетов.

Теперь всё опять синхронизированно.

Теперь давайте рассмотрим некоторые возможные трудности. Мой порт
docproj устарел. Он ничего не зависит не от каких других пакетов, но
на него ссылаются все инструменты необходимые для редактирования
FreeBSD Documentation Project. Если вы регулярно строите дерево
документации, вам необходим этот инструмент чтобы отвечать современным
требованиям (быть актуальным). Также вы не хотите рекурсивно
пересобирать все пакеты из-за незначительного обновления. docproj
имеет огромные зависимости.

Если я хочу сохранить массу времени, мне следует использовать
portupgrade -P. Время - это то чего всегда нехватает моему компьютеру,
поэтому я использую порты. Нам надо дать задачу portupgrade, чтобы он
рекурсивно обновлял пакеты, которые ссылаются на docproj. Вы можете
сделать это с помощью флага -R. Давайте так и сделаем:

# portupgrade -R docproj
This port will try to ensure that the tools used by the FreeBSD
Documentation Project are installed on your system so you can convert
documentation from SGML to other formats.

Один из таких компонентов это JadeTeX, который зависит от TeTeX.
Исходники для TeTeX "весят" более 30 MB и могут долго скачиваться из
сети.

Если вы не хотите создавать PostScript и PDF форматы из документации,
вам не нужен JadeTeX, и вам следует установить переменную JADETEX в
"no". Если вы хотите создавать документацию в форматах PostScript и
PDF, тогда установите переменную JADETEX в "yes".

Например:

make JADETEX=no
make JADETEX=yes
*** Error code 1
Stop.
** Command failed: make clean build
** Fix the problem and try again.
** The following packages were not installed or upgraded (-:skipped / !:failed)
! textproc/docproj (docproj-1.4) (unknown build error)
#

Ой! Этот порт требует настройки. Вы можете отредактировать
/usr/ports/textproc/docproj/Makefile, добавив строчку JADETEX=no.
Теперь должно всё пройти нормально.

Когда вы закончите, мы можете проверить как установились новые версии
портов. Возможно вы обнаружите, что в других портах изменились
зависимости, например, порт А ссылается на порт В (зависит от порта В)
и порт С также ссылается на порт В, запустите portupgrade A и он не
будет редактировать зависимость порта С, но только свою. Будьте готовы
запустить pkgdb -F, чтобы найти и исправить такие проблемы.

Если вы хотите чтобы система занималась этим процессом самостоятельно,
вы можете использовать portupgrade -rR; это будет обновлять обе
зависимости. Если вы всегда хотите иметь в своей системе самые свежие
программы то есть возможность сделать и это. portupgrade включает
целый ряд других инструментов для легкого управления программным
обеспечением на FreeBSD, но этого пока достаточно чтобы вы могли
начать.

Возможно вы захотите переустанавливать один порт несколько раз из
одного distfile. Если порт будет обновлен, portversion обнаружит это и
пометит его как устаревший. Если вы захотите оставить дистфайлы для
портов, которые уже установлены, но удалить устаревшие дистфайлы,
используйте portsclean -D. Аналогично, вы возможно захотите удалить
расшаренные библиотеки, на которые нет ссылок в базе данных пакетов. Я
не хочу использовать опцию --remember, я установил XFree86 из архива,
не из портов. Эта функция удалит мой X сервер, ой! Но portsclean -L
может помочь в этой ситуации и решить эту проблему также как мою
неправильную установку Mesa.

И наконец я хочу сказать что этот инструмент довольно надежный. К тому
времени как я закончил эту статью, я запустил эти программы, чтобы
проверить мои примеры. Я нашел один устаревший пакет и дал команду
обновить и его:

# portupgrade -R portupgrade

Да, это работает. Хочу сказать этот инструмент безусловный победитель.
-------------------------------------------

portupgrade

Dru Lavigne, перевод Евгения Чайкина

Оригинал статьи находится по адресу - www.onlamp.com/lpt/a/4111

В предыдущей статье (а также ее переводе - А.Ф.) мы рассмотрели утилиты 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 файлы, которые вместе с некоторыми утилитами и ключами, мы рассмотрели в прошлой статье.

Коллекция портов постоянно обновляется. Регулярно добавляются новые порты, обычно раз в день. Если Вы любопытны, и любите подробности FreshPorts, станет для Вас неоценимым ресурсом.

То, что коллекция портов постоянно меняется, здорово, но это означает, что структура Вашей /usr/ports может быстро устареть. Чтобы быть уверенным, что Ваша коллекция портов актуальна и пригодна дял построения новейших приложений, используйте cvsup.
Синхронизация Вашего дерева портов

Я часто упоминаю cvsup. Если Вы еще не используете cvsup Вам стоит прочесть Using CVSup (или его русский перевод - ред.) прежде чем браться за дело. Справочник является лучшим источном знаий об утилите 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 написал статью о том, как реагировать на это. Тем не менее, если Вас смущает необходимость искать правильные ответы, используйте 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

---> 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.

Комментарий читателя: в статье неорднократно упоминается файл /usr/ports/INDEX, содержащий список программ в дереве портов. Он по умолчанию используется утилитами семейства portupgrade. Однако этот же файл используется и системами обновления портов штатными базовыми средствами - через CVS, CVSup или CTM. Это может привести к конфликтам, поэтому разработчики portupgrade рекомендуют использовать файл с каким-либо другим именем (см. man portsdb).

Dru Lavigne is an instructor at Marketbridge Technologies in Ottawa and the maintainer of the Open Protocol Resource.

unix.ginras.ru/bsd/inst009.html





 Policy-Based Routing в os FreeBSD через ipfw
 Сервер удаленного доступа + callback на FreeBSD
 Аутентификация на SSH сервере с использованием ключей
 Запуск Apache в jail environment под FreeBSD


Внимание! Читая пророчества на этом сайте помните что достоверность трудно проверить и все может во времени изменяться
"О дне же том, или часе, никто не знает, ни Ангелы небесные, ни Сын, но только Отец (Мк. 13, 32)"