Главная > Программы > PortUpgrade Portupgrade - обновление установленных портов во FreeBSDК вопросу об обновлении портов. Вопрос возник от народа -
как обновляться. Странный вопрос - то, что касается портов, неплохо рассмотрено в хандбуке. # cd /usr/ports/ /usr/ports/> make search name='portupgrade' Port: portupgrade-2.0.1_1,1 Path: /usr/ports/sysutils/portupgrade Info: FreeBSD ports/packages administration and management tool suite Maint: koma2@lovepeers.org B-deps: ruby-1.8.4_4,1 R-deps: perl-5.8.8 ruby-1.8.4_4,1 ruby18-bdb1-0.2.2 WWW: # cd /usr/ports/sysutils/portupgrade /usr/ports/sysutils/portupgrade/>make && make install && make clean Тут же вылезет синенькое окошко с выбором - какую БД использовать. Я выбрал BDB4 - с первой были проблемы на 4.11. (правда всё это делается под шохой, но тем не менее.) [X] BDB4 Use Berkeley DB >=2 as backend. (Use BDB 1.85 if off)
После установки (кстати, тянет он за собой немало - мегов на 10 выльется.) смотрим, что
нам надо обновить: # /usr/ports/sysutils/portupgrade/>pkg_version -v | grep "need" fontconfig-2.3.2,1 < needs updating (port has 2.3.2_3,1) freetype2-2.1.10_2 < needs updating (port has 2.1.10_3) gettext-0.14.5 < needs updating (port has 0.14.5_2) glib-2.8.6 < needs updating (port has 2.8.6_1) john-1.6.40 < needs updating (port has 1.7_1) jpeg-6b_3 < needs updating (port has 6b_4) libdrm-2.0 < needs updating (port has 2.0_1) libiconv-1.9.2_1 < needs updating (port has 1.9.2_2) libmcrypt-2.5.7_1 < needs updating (port has 2.5.7_2) libtool-1.5.18 < needs updating (port has 1.5.22_2) mysql-server-5.0.18 < needs updating (port has 5.0.18_2) perl-5.8.7_2 < needs updating (port has 5.8.8) phpMyAdmin-2.7.0.2 < needs updating (port has 2.8.0.1) png-1.2.8_2 < needs updating (port has 1.2.8_3) popt-1.7 < needs updating (port has 1.7_1) samba-3.0.21a,1 < needs updating (port has 3.0.21b,1) t1lib-5.1.0,1 < needs updating (port has 5.1.0_1,1) /usr/ports/sysutils/portupgrade/> Немало. Руками вводить столько команд: portupgrade имя_порта ломало. Решил написать
скриптик такого вида: #!/bin/sh
# Скриптик для обнввления всех портов,
# что нуждаются в обновлении
portupgrade="/usr/local/sbin/portupgrade"
pkg_ver="/usr/sbin/pkg_version"
# Получаем список портов, нуждающихся в обновлении
# и в цикле обновляем их
${pkg_ver} -v | grep "need" | awk '{print $1}' |
{
while read pkg_name
do
# обновляем порт, имя которого в переменной pkg_name
${portupgrade} ${pkg_name}
done
}
# примечание: при сборке и обновлении портов выводимтся намного
# технической инфы, куда меньше чем при запуске той же команды
# руками. Это к тому, чтоб не подумали, что "зависло" :)
Советую не увлекаться подобными скриптами, а думать прежде чем обновлять - т.к. при обновлении приложение, обычно останавливается, то подумайте, чем грозит остановка, например, MySQL? Или samba, если эта машина файл-сервер конторы? В данном случае это был сервер для архивации, и днём он не использовался - значит можно творить что душе угодно. Потому запускаем и ждём - времени уйдёт прилично, т.к. там пара тяжёлых приложений типа MySQL, perl`a и той же самбы. По окончании обновления имеем следующее: # pkg_version -v | grep "need" libtool-1.5.18 < needs updating (port has 1.5.22_2) # pkg_info | grep libtool- libtool-1.5.18 Generic shared library support script (1.5) libtool-1.5.22_2 Generic shared library support script Ага. libtool в двух экземплярах... Либо чё-то глюкануло, либо так и
задумано, ввиду того что не все приложения переваривают новые версии
зависмостей, а хотят чё-то старое. Попробуем пофиксить БД: # pkgdb -F ---> Checking the package registry database Duplicated origin: devel/libtool15 - libtool-1.5.18 libtool-1.5.22_2 Unregister any of them? [no] yes Unregister libtool-1.5.18 keeping the installed files intact? [no] yes -> libtool-1.5.22_2 is kept. --> Saving the libtool-1.5.18's +CONTENTS file as /var/db/pkg/libtool-1.5.22_2/ +CONTENTS.libtool-1.5.18 --> Unregistering libtool-1.5.18 --> Done. [Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 71 packages found (-1 +0) (...) done] Stale dependency: mysql-server-5.0.18_2 -> ldconfig_compat-1.0_6 (misc/ldconfig_compat): New dependency? (? to help): ^C Прервал - куча ошибок из-за одного отсутствующего порта. Значит пойдём правильным путём, - доставим зависисмось, которую он хочет: # cd /usr/ports/misc/ldconfig_compat /usr/ports/misc/ldconfig_compat/>make && make install && make clean ===> Vulnerability check disabled, database not found ===> Extracting for ldconfig_compat-1.0_6 ===> Patching for ldconfig_compat-1.0_6 ===> Configuring for ldconfig_compat-1.0_6 ===> Installing for ldconfig_compat-1.0_6 ===> Generating temporary packing list ===> Checking if misc/ldconfig_compat already installed ===> Registering installation for ldconfig_compat-1.0_6 ===> Cleaning for ldconfig_compat-1.0_6 /usr/ports/misc/ldconfig_compat/>pkgdb -F ---> Checking the package registry database [Updating the pkgdb <format:dbm_hash> in /var/db/pkg ... - 72 packages found (-0 +1) . done] /usr/ports/misc/ldconfig_compat/> Всё. Никакой ругани, в системе стоят последние версии портов. # /usr/home/lissyara/>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 /usr/home/lissyara/> И функциональность у проги весьма богатая. Dru Lavigne http://www.onlamp.com/lpt/a/4111. 7 июня 2005 г Установка portupgradeПорт # 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 и выбрали установку коллекции портов, вы получили # ls -F /usr/ports/www/mozilla ./ Makefile distinfo pkg-descr pkg-message ../ README.html files/ pkg-descr.gtk2 Таким образом, мы видим Коллекция портов постоянно обновляется. Регулярно добавляются новые порты, обычно раз в день. Если вы любопытны, и любите подробности FreshPorts, станет для вас неоценимым ресурсом. То, что коллекция портов постоянно меняется, здорово, но это означает, что структура вашей Синхронизация вашего дерева портовЯ часто упоминаю # cd /usr/ports/net/cvsup-without-gui # make install clean
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 Если смысл файла или команды вам непонятен, прочитайте раздел
справочника, на который я ссылалась ранее. Также заметьте, что строка Команда Процесс # ls -l /usr/ports/INDEX -rw-r--r-- 1 root wheel 3678738 May 17 17:04 INDEX Установка операционной системы на этой машине была произведена 17
мая и с тех пор я не обновляла дерево портов. Сравним её с моей
основной машиной, на которой я выполняю # ls -l /usr/ports/INDEX -rw-r--r-- 1 root wheel 3912366 Aug 17 08:50 INDEX Что ж, за три месяца размер файла, а значит и количество приложений в коллекции портов, значительно увеличился. Обновление базы данных портовНу что ж, теперь мы готовы к # portsdb -Uu После первого запуска этой команды, будет создан файл базы данных # file /usr/ports/INDEX.db /usr/ports/INDEX.db: \ Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order) Тем не менее, некоторые утилиты Когда утилита # portversion -l "<" Если вы получили какой-либо вывод, значит вашим следующим шагом
должно стать обновление устаревших портов. Что неудивительно, мы
используем Апгрейд портовВ своей простейшей форме, Порт имеет два типа зависимостей. Первый тип называется Если вы просто апгрейдите порты, то рано или поздно сталкиваетесь с
портами, которые отказываются апгрейдиться. Для предотвращения такой
ситуации, используйте # portupgrade -arR Ключ Периодически, когда вы используете Если вы просят запустить # pkgdb -fu Эта комбинация ключей легко запоминается, оставляя возможность мыслям свободно течь через ваш мозг. Запуск Вообще, всё не так страшно, как кажется. Вероятность того, что система попросит запустить
Использование pkg_which
# which pkgdb /usr/local/sbin/pkgdb
# pkg_which pkgdb portupgrade-20030723 Эта команда эквивалентна предыдущей команде # pkgdb pkgdb portupgrade-20030723 Ещё пример. Скажем, каталоги из # 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 multimedia/kdemultimedia3 Вывод показывает, что каталог, из которого было построено приложение -
Ключ # 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 Красивый, информативный вывод. Каждая строка показывает имя приложения и следующее за ней
через Прежде чем двигаться дальше, подведём итоги. Итак, шаги, нужные для поддержания ваших программ в актуальном состоянии, будут следующими:
Дополнительные ключи portupgradeМы уже убедились, что Опция, которая полезна, если у вас нет постоянного соединения с интернетом Эта команда выходит в Интернет, вытягивает все нужные файлы, но ничего не устанавливает: # portupgrade -aFrR Когда вы загрузили необходимые файлы, можно отключаться от интернета и запускать Другой ключ Вот пример вывода: # 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) Давайте посмотрим на этот вывод. # portversion -l "<" ruby-bdb1 ruby-shim-ruby18 Если вы очень осторожны, можете использовать ключ ---> Upgrading 'ruby-bdb1-0.1.9' to 'ruby-bdb1-0.2.1'
(databases/ruby/bdb1)
OK? [yes]
Обратите внимание на ответ "да" в квадратных скобках, этот ответ будет использован по умолчанию.
Это значит, что нажимая Enter, вы говорите "Да". Если вы полагаете, что вы не хотите
обновлять этот порт, наберите Последний ключ, который я хотела бы упомянуть, это ключ # portupgrade -rR ruby-shim-ruby18 -l logfile Скорее всего, вы не захотите использовать этот ключ, особенно если у вы много файлов, требующих модернизации. Кому же хочется продираться через огромный лог-файл! В следующей статье я хочу осветить деинсталляцию портов и чистку
файлов, которые уже не используются портами. А еще мы рассмотрим
настройку Комментарий читателя: в статье неоднократно упоминается файл Dru Lavigne is an instructor at Marketbridge Technologies in Ottawa and the maintainer of the Open Protocol Resource. Материал взят: http://citforum.ru/~alv/lavign/portupgrades.htmlГлавная > Программы > PortUpgrade |