Исправление ошибки в работе portupgrade
![]() |
На сервере под управлением FreeBSD 8.2-RELEASE архитектуры amd64, при выполнении обновления с помощью portupgrade, на некотором этапе стала выскакивать ошибка, которая не давала обновить всю систему полностью. portupgrade – это инструмент, служащий для изменения и обновления установленных пакетов и портов. По-умолчанию в системе не установлен. Сделать это можно вручную из /usr/ports/ports-mgmt/portupgrade. С его помощью очень удобно поддерживать всю систему в актуальном состоянии. |
Обновление системы я делаю так: сперва обновляю дерево портов, затем базу известных уязвимостей, после – собственно полное обновление системы.
# portsnap fetch update # portaudit -Fda # portupgrade -v -a
Так вот, при выполнении последней команды, после обновления нескольких портов, выскочила следующая ошибка:
---> ** Upgrade tasks 3: 1 done, 0 ignored, 0 skipped and 0 failed
---> Skipping 'bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0' because it is held by user (specify -f to force)
---> Session ended at: Mon, 05 Dec 2011 09:08:24 +0400 (consumed 00:01:23)
/usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:934:in `initialize': ArgumentError (ArgumentError)
from /usr/local/sbin/portupgrade:1004:in `new'
from /usr/local/sbin/portupgrade:1004:in `do_upgrade'
from /usr/local/sbin/portupgrade:814:in `main'
from /usr/local/sbin/portupgrade:810:in `each'
from /usr/local/sbin/portupgrade:810:in `main'
from /usr/local/lib/ruby/1.8/optparse.rb:791:in `initialize'
from /usr/local/sbin/portupgrade:231:in `new'
from /usr/local/sbin/portupgrade:231:in `main'
from /usr/local/sbin/portupgrade:2219
Дальнейшее обновление системы не происходило. Дело в том, что некоторые порты начинают ставить зависимости не из дерева портов, а из CPAN – всеобъемлющей сети архивов Perl. Такие порты имеют префикс bsdpan. Посмотреть их список вы можете командой # pkg_info | grep bsdpan. Установленные из CPAN порты не могут автоматически обновиться через portupgrade. Чтобы исправить это недоразумение, необходимо заменить порт из CPAN на аналогичный из дерева портов. Для этого запустим команду pkgdb в интерактивном режиме (ключ -F), которая обновляет и проверяет базу установленных портов (ключ -f) и поможет устранить дубликаты, удалить старые порты и т.д.
В моем случае проблему вызвал bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0, который необходимо заменить на p5-Mail-SpamAssassin-3.3.2_3.
# pkgdb -fF ---> Checking the package registry database Missing origin: bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0 Skip this for now? [yes]noGuessing... no idea. Not in due form <category/portname>: New origin? (? to help):mail/p5-Mail-SpamAssassinmail/p5-Mail-SpamAssassin (p5-Mail-SpamAssassin-3.3.2_3): Change the origin to this? [yes]yes(? bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0)Fixed. (-> mail/p5-Mail-SpamAssassin) Duplicated origin: mail/p5-Mail-SpamAssassin - bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0 p5-Mail-SpamAssassin-3.3.2_3 Unregister any of them? [no]yesUnregister bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0 keeping the installed files intact? [no]yes-> p5-Mail-SpamAssassin-3.3.2_3 is kept. --> Saving the bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0's +CONTENTS file as /var/db/pkg/p5-Mail-SpamAssassin-3.3.2_3/+CONTENTS.bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0 --> Unregistering bsdpan-Mail-SpamAssassin-CompiledRegexps-body_0-1.0 --> Done. [Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 240 packages found (-1 +0) (...) done]
Обратите внимание на ответы на интерактивные вопросы в процессе проверки базы портов подсвеченные желтым.
Вот в принципе и все. После указанных действий проблем с обновлением системы через portupgrade не возникло.









