С помощью эти инструкции мы выполняем обновление yum на срезе Slicehost (NB. это не виртуальный хост Rackspace, если бы мы могли просто выполнить стандартную установку последнего дистрибутива Fedora) с Fedora 15 на 16, это следует за очевидно успешным yum обновить с 14 до 15.
Установка стандартная, за исключением двоичной установки MySQL 5.6, и мы используем команду:
yum -y --releasever=16 --disableplugin=presto distro-sync --exclude=mysql-libs --exclude=perl-DBD-MySQL --skip-broken
После множества сообщений о пакетах, которые будут обновлены, процесс останавливается со следующими сообщениями об ошибках:
Error: Protected multilib versions: dracut-013-18.fc16.noarch != dracut-009-12.fc15.noarch
Error: Protected multilib versions: initscripts-9.33-1.fc16.x86_64 != initscripts-9.30.1-1.fc15.x86_64
Далее следует предложение:
You could try running: rpm -Va --nofiles --nodigest
Использование предложения не помогает, может ли кто-нибудь предложить способ обойти ошибки?
Fedora действительно не предназначена для обновления таким образом. А вы еще даже не дошли до трудного (16-17). Тем не менее, я делал это десятки раз и сталкивался практически со всеми мыслимыми вещами, которые могли пойти не так. Вот мои рекомендации.
Если это вообще возможно, лучший и самый быстрый способ сделать это - создать новый экземпляр облака с последней версией Fedora (17), а затем перенести в него свои данные и конфигурацию. Затем уничтожьте старый экземпляр облака. Конечно, это зависит от того, что Rackspace имеет установочный образ Fedora 17, и я не знаю, есть ли у них.
У меня есть два настраиваемых сценария оболочки только для этой цели, один из которых копирует все необходимые мне файлы конфигурации и данные, обслуживаемые из старой системы, а другой из которых распаковывает все данные, созданные первым сценарием, а затем устанавливает любые необходимые пакеты.
Если вы настроены продолжить этот путь безумия, продолжайте читать.
Ошибка Protected multilib versions
обычно возникает, когда у вас есть две разные версии пакета в вашей системе, и иногда одна из них имеет одну архитектуру, а одна - другую (например, старый пакет - i686, а новый - x86_64). Это также может произойти, если предыдущий запуск yum был прерван, и вы пытались выполнить другую транзакцию yum, не возобновляя прерванную. Это говорит мне о том, что ваше обновление с Fedora 14 до 15 не было таким полным, как вы думали.
Во-первых, прекратите попытки обновления до 16 или выше, пока не решите эту проблему.
Бегать yum-complete-transaction
чтобы завершить все ожидающие обновления yum. Это простое решение. Если это решит проблему, пропустите остальную часть этого. Если нет, продолжайте ...
Теперь для каждого пакета, выдающего эту ошибку, проверьте, что вы установили:
rpm -q dracut initscripts
Вы должны получить два или более пакетов, перечисленных для каждого из них. Удалите один из них: если один 32-разрядный, а другой 64-разрядный, удалите 32-разрядный пакет, даже если он новее, чем 64-разрядный пакет. В противном случае удалите старый пакет. В конечном итоге у вас должен быть установлен только один из каждого пакета:
rpm -e dracut-00####.fc## initscripts-#.##-#.fc##
Если вы нашли только одну версию пакета, вам придется удалить ее из базы данных RPM, фактически не удаляя ее из файловой системы (поскольку они необходимы для загрузки и установки). Например, если была только одна версия дракута:
rpm -e --nodeps --noscripts --justdb dracut-00####.fc##
После этого вы сможете продолжить yum --releasever=16 distro-sync
.
Если после завершения синхронизации дистрибутива вам пришлось удалить единственную версию пакета из базы данных RPM, не продолжайте выполнять инструкции Fedora, пока не замените ее:
yum --releasever=16 reinstall dracut
На этом этапе вы сможете продолжить выполнение инструкций Fedora.
Имейте в виду, что в будущем Fedora поддерживает только две версии активных в любой момент времени. После этого старые дистрибутивы могут быть удалены с зеркал, что сделает невозможным обновление таким образом. Так что вы должны оставить как минимум одну версию. В качестве альтернативы, подумайте об использовании более стабильного дистрибутива, такого как CentOS, чтобы вы в основном полностью избегали этого беспорядка.
Похоже, у вас могут быть установлены пакеты из репозиториев тестирования обновлений, и теперь он отключен.
Попробуйте либо yum ... --enablerepo=updates-testing
Или сначала понизьте версию пакетов тестирования обновлений до базовых версий.
yum distro-sync