FreeBSD: обновление установленных портов

Автор: | 01/20/2012
 

Ниже приведены некоторые полезные приемы, которые пригодятся при обновлении установленных портов.

При установке очередного порта, сборка отвалилась с ошибкой:

configure: error: Package requirements (glib-2.0 >= 2.27.2) were not met:
Requested ‘glib-2.0 >= 2.27.2’ but version of GLib is 2.26.1

Можно перепроверить, какая версия установлена:

# pkg_info | grep glib
glib-2.26.1_1

Пора подумать об обновлении установленных портов.

Обновим коллекцию  портов, подробнее об этом написано тут>>>:

# portsnap fetch update

Для обновления уже установленных портов будем использовать утилиту Portupgrade:

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

Файл конфигурации Portupgrade/usr/local/etc/pkgtools.conf.

Например, что бы в нем запретить обновление всех портов, названия которых начинаются с php, в секции HOLD_PKGS укажите:

HOLD_PKGS = [
‘php-*’,
]

После установки, проверим какие порты нуждаются в обновлении:

# pkg_version -v | grep «need»

Проверить, какие файлы и прочие зависимости обновятся можно командой:

# portupgrade -nr имя_пакета

Перед запуском обновления — очень желательно ознакомиться со файлом /usr/ports/UPDATING, в котором описаны пакеты, нуждающиеся в обновлении и описаны подробности кадого обновления.

Что бы не листать весь список — можно воспользоваться утилитой pkg_updating.

Напрмиер, просмотреть описание списка пакетов, которые установлены и могут быть обновлены:

# pkg_updating | less

Или посмотреть информацию о конкретном пакете:

# pkg_updating | grep glib
AFFECTS: users of devel/glib20 and future users of devel/gio-fam-backend
In order to update to glib 2.16 or higher, you must first update the
glib20 port on its own or you will get a failure trying to install
portmaster glib-2
portupgrade glib-2*

Обновим порт glib-2.26.1_1:

# portupgrade glib-2.26.1_1
[Updating the portsdb <format:bdb_btree> in /usr/ports …
…процесс установки новой версии…
===>  Cleaning for glib-2.28.8_3
—>  Cleaning out obsolete shared libraries
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg … — 205 packages found (-0 +1) . done]

Для особо важных пакетов — не забывайте на всякий случай сделать копию конфигурационных файлов.

Так же, при обновлении важных пакетов используйте ключ -b — в таком случае Portupgrade создаст резервную копию пакета и сохранит её в каталоге /usr/ports/packages/All/. Для восстановления этого пакета используйте pkg_add.

Так же, прочтите файл /usr/ports/UPDATING — в нем описаны изменения, которые будут внесены в новые версии программ.

Попробуем теперь обновить пакет php52.

С помощью утилиты  portversion проверим, нуждается ли он в обновлении:

# portversion |grep php
php52                       <

Знак < обозначает, что установленная версия меньше, чем актуальная в портах.

Приступим к обновлению порта. Укажем такие ключи:

-R — обновлять порты, от которых зависит порт
-r — обновлять порты, которые зависят от порта
-b — создать резервную копию порта
-l — записывать события в лог-файл

и запишем процесс в файл phpupdate для анализа в случае каких-либо проблем:

# portupgrade -rRb php52 -l phpupdate

Сразу же выдало ошибку:

—>  Upgrading ‘php52-5.2.17_4’ to ‘php52-5.2.17_6’ (lang/php52)
—>  Building ‘/usr/ports/lang/php52’
===>  Cleaning for php52-5.2.17_6
===>   NOTICE:

This port is deprecated; you may wish to reconsider installing it:

PHP 5.2 series is not supported anymore, migrate now.

It is scheduled to be removed on or after 2012-03-01.

===>  php52-5.2.17_6 has known vulnerabilities:
=> php — NULL byte poisoning.
Reference: http://portaudit.FreeBSD.org/3761df02-0f9c-11e0-becc-0022156e8794.html
=> Please update your ports tree and try again.
*** Error code 1

Stop in /usr/ports/lang/php52.
*** Error code 1

Stop in /usr/ports/lang/php52.

Программа Portaudit нашла ошибку в версии php, до которой мы пытаемся обновиться, и запрещает его установку. Как это исправить описано тут>>>.

Исправляем, и запускаем обновление заново.

Обновление завершено:

[Updating the pkgdb <format:bdb_btree> in /var/db/pkg … — 205 packages found (-0 +1) . done]
—>  Skipping ‘databases/phpmyadmin’ (phpMyAdmin-3.4.8) because a requisite package ‘pecl-pdflib-2.1.8’ (print/pecl-pdflib) failed (specify -k to force)
—>  Skipping ‘databases/php52-mysqli’ (php52-mysqli-5.2.17) because it has already done
** Listing the failed packages (-:ignored / *:skipped / !:failed)
! print/pecl-pdflib (pecl-pdflib-2.1.8) (unknown build error)
* databases/phpmyadmin (phpMyAdmin-3.4.8)
* databases/php52-mysqli (php52-mysqli-5.2.17)

1 порт не обновился — php52-mysqli потому что он уже обновлен, второй — phpMyAdmin-3.4.8 требует пакет pecl-pdflib-2.1.8, которого видимо нет.

# pkg_info | grep php
php52-5.2.17_6      PHP Scripting Language

И вывод portversion:

# portversion |grep php
php52
                       =

где = означает, что текущая версия соответствует последней в портах.

Можно перейти в каталог /usr/ports/packages/All/ и проверить, сделал ли Portupgrade резервные копии:

# cd /usr/ports/packages/All/
# ls -la
total 5736
drwxr-xr-x  2 root  wheel     1536 Jan 20 18:11 .
drwxr-xr-x  3 root  wheel      512 Jan 20 16:57 ..
-rw-r—r—  1 root  wheel  3075872 Jan 20 16:56 php52-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    13502 Jan 20 17:13 php52-bz2-5.2.17_4.tbz
-rw-r—r—  1 root  wheel     7845 Jan 20 17:01 php52-ctype-5.2.17.tbz
-rw-r—r—  1 root  wheel    63027 Jan 20 18:01 php52-dom-5.2.17.tbz
-rw-r—r—  1 root  wheel    22358 Jan 20 18:10 php52-filter-5.2.17.tbz
-rw-r—r—  1 root  wheel   138964 Jan 20 17:37 php52-gd-5.2.17_4.tbz
-rw-r—r—  1 root  wheel   153104 Jan 20 17:02 php52-hash-5.2.17.tbz
-rw-r—r—  1 root  wheel    19755 Jan 20 17:14 php52-iconv-5.2.17.tbz
-rw-r—r—  1 root  wheel    15420 Jan 20 17:35 php52-json-5.2.17.tbz
-rw-r—r—  1 root  wheel    20465 Jan 20 17:18 php52-ldap-5.2.17_4.tbz
-rw-r—r—  1 root  wheel  1223100 Jan 20 17:09 php52-mbstring-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    16137 Jan 20 17:21 php52-mcrypt-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    22551 Jan 20 17:11 php52-mysql-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    42643 Jan 20 18:02 php52-mysqli-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    39781 Jan 20 17:05 php52-openssl-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    18884 Jan 20 17:57 php52-pcre-5.2.17.tbz
-rw-r—r—  1 root  wheel    50759 Jan 20 17:19 php52-pdo-5.2.17.tbz
-rw-r—r—  1 root  wheel    18903 Jan 20 17:28 php52-pdo_mysql-5.2.17_4.tbz
-rw-r—r—  1 root  wheel   269756 Jan 20 17:23 php52-pdo_sqlite-5.2.17.tbz
-rw-r—r—  1 root  wheel    12991 Jan 20 17:24 php52-posix-5.2.17.tbz
-rw-r—r—  1 root  wheel    28980 Jan 20 17:03 php52-session-5.2.17.tbz
-rw-r—r—  1 root  wheel    21584 Jan 20 16:58 php52-simplexml-5.2.17.tbz
-rw-r—r—  1 root  wheel    14752 Jan 20 17:12 php52-snmp-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    66115 Jan 20 17:59 php52-spl-5.2.17.tbz
-rw-r—r—  1 root  wheel   208295 Jan 20 18:09 php52-sqlite-5.2.17.tbz
-rw-r—r—  1 root  wheel    10466 Jan 20 17:17 php52-tokenizer-5.2.17.tbz
-rw-r—r—  1 root  wheel    23394 Jan 20 17:25 php52-xml-5.2.17.tbz
-rw-r—r—  1 root  wheel    15931 Jan 20 18:03 php52-xmlreader-5.2.17.tbz
-rw-r—r—  1 root  wheel    49383 Jan 20 17:27 php52-xmlrpc-5.2.17_5.tbz
-rw-r—r—  1 root  wheel    14265 Jan 20 17:16 php52-xmlwriter-5.2.17.tbz
-rw-r—r—  1 root  wheel    37393 Jan 20 17:06 php52-zip-5.2.17_4.tbz
-rw-r—r—  1 root  wheel    17083 Jan 20 16:59 php52-zlib-5.2.17_4.tbz

Ссылки по теме:

http://citkit.ru
http://www.freebsd.org
http://www.hilik.org.ua
http://habrahabr.ru
http://muff.kiev.ua