The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Хитрости работы с портами в FreeBSD, использование portupgrade (freebsd install port nfs)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, install, port, nfs,  (найти похожие документы)
From: Евгений Чайкин <strannick@sovsem.net.> Newsgroups: http://unix.ginras.ru Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC) Subject: Хитрости работы с портами в FreeBSD, использование portupgrade Оригинал: http://unix.ginras.ru/freebsd/articles/truks-with-ports.html http://unix.ginras.ru/freebsd/articles/portupgrade.html Трюки с портами Dru Lavigne, перевод Евгения Чайкина <strannick@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.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, karakurty (?), 11:23, 22/07/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хотелось бы уточнить, ключи/параметры с которыми компилировалось приложение будут учтены при автоматическом апгрейде?
     
  • 1.2, guest (??), 13:46, 26/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Будут, они извлекутся из базы портов. Удалить их оттуда можно сказав, стоя в нужно порту: make rmconfig

    (см. man ports)

     
  • 1.3, Vad (??), 17:50, 12/08/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что за команда такая интересная /khe ?
    может make ?
     
  • 1.4, Vic (??), 14:16, 08/07/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А при вытягивании cvsup-ом портов, файл /usr/ports/INDEX.db часом не вытягивается вместе с портами? Т.е. его точно потом нужно создавать командой
    % portsdb -Uu
    ПС там еще есть опечатки в начале, типа
    %/h23 /
     
  • 1.6, ... (?), 02:34, 13/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    pretty-print-build-depends-list
    Это опция такая?
    Хорошо что не
    give-me-please-all-depends-of-this-good-pkg-I-will-be-warry-glad
     
     
  • 2.9, etz (??), 07:14, 29/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    надо было -ppbdl, вы правы
     

  • 1.10, KomaLex (ok), 09:11, 09/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хотелось бы уточнить есть ли необходимость обновлять порты cvsup или можно использовать portsnap fetch extract ведь так намного быстрее обновляются порты.
     
     
  • 2.11, drurus (?), 19:09, 08/05/2011 [^] [^^] [^^^] [ответить]  
  • +/
    нет
     

  • 1.13, D (?), 22:39, 01/06/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно как получить список зависимостей что выдает make search, и почему результат не совпадает с pkg_info -R или -r для многоих пакетов например ezm3 dbus cvsup-without-gui и т.д. ???
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру