emerge жалуется на заблокированные пакеты: что мне делать?

Вопрос или проблема

У нас на работе есть старый сервер разработки, работающий на Gentoo. Я хотел бы обновить эту систему, но постоянно сталкиваюсь с проблемами системы упаковки. Мне кажется, что есть зависимости от нескольких версий различных пакетов, и я не могу понять, как это исправить.

Самая большая проблема, скорее всего, связана с Python и Portage. Мне нужен более новый Portage, но, похоже, существуют циклические зависимости.

Я пробовал различные решения, но не совсем уверен, как действовать дальше. Есть ли идеи, которые могут помочь мне решить эту проблему?

Дополнительная информация

Вот (соответствующая часть) вывод, полученный при запуске emerge --update --newuse --deep @world

(много обычного вывода ....)
[ebuild     U ] app-misc/mc-4.7.0.3 [4.6.1-r4] USE="edit%* -slang*" 
....
[blocks B     ] >=dev-lang/python-2.6.6 (">=dev-lang/python-2.6.6" блокирует sys-apps/portage-2.1.6.7)
[blocks B     ] <sys-apps/portage-2.1.7.16 ("<sys-apps/portage-2.1.7.16" блокирует app-shells/bash-4.1_p9)
[blocks B     ] <sys-apps/portage-2.1.9 ("<sys-apps/portage-2.1.9" блокирует dev-lang/python-2.7.1-r1)

 * Ошибка: Список пакетов выше содержит пакеты, которые не могут быть
 * установлены одновременно на одной и той же системе.

  (dev-lang/python-2.7.1-r1, ebuild запланирован для слияния) вытащен
    =dev-lang/python-2* требуется (dev-vcs/mercurial-1.7, ebuild запланирован для слияния)
    =dev-lang/python-2*[threads] требуется (dev-vcs/mercurial-1.7, ebuild запланирован для слияния)
    =dev-lang/python-2* требуется (dev-libs/glib-2.28.6, ebuild запланирован для слияния)
    (и ещё 1)

  (app-shells/bash-4.1_p9, ebuild запланирован для слияния) вытащен
    >=app-shells/bash-3.2_p17 требуется (sys-apps/portage-2.1.9.42, ebuild запланирован для слияния)
    app-shells/bash требуется (sys-block/di-4.18, ebuild запланирован для слияния)
    app-shells/bash требуется (app-admin/perl-cleaner-2.7, ebuild запланирован для слияния)
    (и ещё 2)

  (dev-lang/python-3.1.3-r1, ebuild запланирован для слияния) вытащен
    dev-lang/python требуется (app-admin/python-updater-0.9, ebuild запланирован для слияния)
    >=dev-lang/python-3 требуется (sys-apps/portage-2.1.9.42, ebuild запланирован для слияния)
    =dev-lang/python-3.1* требуется (dev-java/java-config-2.1.11-r3, ebuild запланирован для слияния)

Вот соответствующая часть вывода при запуске emerge --pretend --depclean

Подсчет зависимостей... готово!
 * Зависимости не могут быть полностью разрешены из-за
 * следующих требуемых пакетов, которые не установлены:
 * 
 *   >=dev-lang/python-2.4 вытащен:
 *     sys-apps/portage-2.1.6.7
 * 
 *   dev-lang/python вытащен:
 *     dev-java/java-config-2.1.7
 * 
 *   dev-lang/python вытащен:
 *     dev-libs/libxml2-2.6.31
 * 
 *   <dev-lang/python-2.6.6 вытащен:
 *     sys-apps/portage-2.1.6.7
 * 
 *   >=dev-lang/python-2.2 вытащен:
 *     dev-libs/beecrypt-4.1.2-r1
 * 
 *   virtual/python вытащен:
 *     dev-python/pycrypto-2.0.1-r6
 * 
 *   >=dev-lang/python-2.3 вытащен:
 *     dev-vcs/mercurial-1.0.2
 * 
 *   >=dev-java/java-config-2.1.9-r1 вытащен:
 *     dev-libs/beecrypt-4.1.2-r1
 * 
 *   virtual/python вытащен:
 *     dev-lang/swig-1.3.34
 * 
 *   dev-lang/python вытащен:
 *     net-fs/samba-3.0.28a-r1
 * 
 *   >=dev-lang/python-2.2 вытащен:
 *     app-arch/rpm-4.4.6-r6
 * 
 *   >=virtual/python-2.2.1 вытащен:
 *     sys-libs/libcap-1.10-r11
 * 
 *   dev-lang/python вытащен:
 *     sys-libs/cracklib-2.8.9-r1
 * 

Я столкнулся с той же проблемой всего пару дней назад. У меня нет точного способа, как это сделать, но вот общий порядок действий:

Сначала посмотрите на /var/lib/portage/world. Сделайте резервную копию и оставьте только пакеты, необходимые вашей системе для загрузки. Вот немного содержания, чтобы помочь вам начать:

app-admin/syslog-ng
net-firewall/iptables
net-misc/dhcpcd
sys-apps/pciutils
sys-apps/slocate
sys-apps/usbutils
sys-boot/grub
sys-kernel/gentoo-sources
sys-power/acpid
sys-process/vixie-cron
virtual/inetd

Все остальное будет обновлено позже.

Самая критическая часть — это обновить portage и python до последних версий, поэтому давайте сосредоточимся на этом.

  1. Синхронизируйте директорию portage:

    emerge --sync
    

    или:

    emerge-webrsync
    
  2. Установите правильный профиль

    eselect profile list
    eselect profile set <x>
    
  3. Обновляйте python / portage шаг за шагом.

    Посмотрите на вашу текущую установленную версию portage. Обновите portage до следующей версии выше вашей текущей (даже если она помечена как ~x86), затем сделайте то же самое для python. После обновления python убедитесь, что вы запустили python-updater.

    Повторяйте этот процесс до тех пор, пока python/portage не будут обновлены до актуальных версий. (Некоторые незначительные обновления версий можно пропустить. Вы сами увидите, какие версии вызывают ошибки компиляции, а какие нет.)

  4. Как только они начнут работать, попробуйте установить несколько других пакетов, так как они могут помочь вам в вашей задаче.

    app-portage/ufed
    app-portage/autounmask
    app-portage/gentoolkit
    
  5. Как только python/portage будут обновлены, вы можете восстановить свой старый файл world и обновить систему.

    emerge -pvauDN world
    

    Вам может понадобиться вызвать:

    emerge ...
    emerge --depclean
    revdep-rebuild
    

    несколько раз в процессе сборки.

Если проблема в python, попробуйте запустить python-updater. Обратите внимание, что вы можете выбрать текущую версию python с помощью команды eselect.

Ответ или решение

Когда вы сталкиваетесь с проблемами блокировки пакетов при обновлении системы Gentoo с помощью команды emerge, это может стать настоящей головной болью, особенно на старых серверах. Давайте разберем проблему и найдем возможные решения.

Проблема с блокировкой пакетов

На основании представленных вами данных, основная проблема заключается в циклических зависимостях между версиями Python и Portage. Это делает невозможным одновременную установку нескольких нужных пакетов, что приводит к блокировке.

Анализ вывода команды emerge

Имеется несколько конфликтующих зависимостей:

  1. Python:

    • >=dev-lang/python-2.6.6 блокирует установку sys-apps/portage-2.1.6.7.
    • app-shells/bash также имеет свои ограничения.
  2. Portage:

    • Версия sys-apps/portage-2.1.7.16 конфликтует с некоторыми установленными пакетами.

Эта ситуация часто возникает, когда системные пакеты уже устарели, и современная версия Portage требует более новых версий Python, тогда как уже установленные пакеты требуют более старых.

Шаги для решения проблемы

Ниже предложен план действий, который поможет вам пройти через этот процесс и восстановить работоспособность вашей системы.

1. Резервное копирование

Перед началом любых изменений, сделайте резервную копию файла /var/lib/portage/world. Этот файл содержит список всех установленных вами пакетов, и вы можете в дальнейшем восстановить его, чтобы не потерять нужные вам пакеты.

cp /var/lib/portage/world ~/world-backup

2. Синхронизация дерева портежей

Для обновления списка доступных пакетов и исправления возможных ошибок, выполните синхронизацию:

emerge --sync

или

emerge-webrsync

3. Установите актуальный профиль

С помощью команды eselect убедитесь, что вы используете актуальный профиль:

eselect profile list
eselect profile set <номер_профиля>

4. Поэтапное обновление Portage и Python

  • Пробуйте одновременно обновлять Portage и Python поэтапно, начиная с минимально возможных версий для следующего обновления.
  • Убедитесь, что у вас установлены версии, безопасные для вашей системы, даже если они находятся в состоянии "тестирования" (~x86).
  • Запускайте python-updater после каждого обновления Python.

Примерная последовательность команд:

emerge sys-apps/portage-<следующая_версия>
emerge dev-lang/python-<следующая_версия>
python-updater

5. Установка дополнительных утилит

Как только Python и Portage обновлены и работают корректно, рекомендуется установить несколько утилит для дальнейшего управления пакетами:

emerge app-portage/ufed
emerge app-portage/autounmask
emerge app-portage/gentoolkit

6. Восстановление файла world и окончательное обновление

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

mv ~/world-backup /var/lib/portage/world
emerge -pvauDN world

7. Дополнительные команды

Во время процесса вы можете столкнуться с неполными зависимостями или конфликтами, требующими исправлений. Используйте следующие команды, чтобы помочь в этом:

emerge --depclean
revdep-rebuild

Заключение

Решение проблем с зависимостями в Gentoo требует терпения и аккуратности. Следуя вышеописанным шагам и обращая внимание на вывод команд emerge, вы сможете успешно обновить вашу систему. Не забывайте всегда делать резервные копии и тщательно изучать вывод сообщений, чтобы избежать повторных ошибок. Удачи в обновлении!

Оцените материал
Добавить комментарий

Капча загружается...