Связаться по Skype: vkarabedyants
Позвонить Написать
+7 (499) 404-28-83

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Обновление CentOS 6 до CentOS 7

Опыт обновления CentOS 6 до CentOS 7 с сохранением всех настроек и параметров конфигурации.

CentOS 7 вышел еще в 2014 году, однако многие системные администраторы не спешат на него переходить — благо выпуск обновлений для CentOS 6.x обещан до ноября 2020 года. Причин оставаться на предыдущей версии много, и не последнее место среди них занимает радикальность многих изменений, пришедших в релизе.

Обновление CentOS 6 на CentOS 7 — задача разрешимая, хотя и с заметными ограничениями

Virtuozzo Linux и VzUpgrade

CentOS — не единственный основанный на RHEL дистрибутив. В данной статье мы рассмотрим опыт использования инструментария Virtuozzo Linux (VzLinux) — дистрибутива, лежащего в основе многих продуктов компании Virtuozzo.

Актуальная версия Virtuozzo 7 основана на VzLinux 7. а тот. в свою очередь, на CentOS 7. Предыдущая версия соответственно основывалась на VzLinux 6 (CentOS 6). При этом пользователям Virtuozzo 6 предоставляется возможность прямого обновления на свежую версию. Частью этого процесса является обновление пакетной базы VzLinux -с 6 на 7. Осуществляется такой перевод пакетной базы с помощью инструмента vzupgrade, являющегося надстройкой над redhat-upgrade-tool и нивелирующего проблемы, возникающие при использовании этой утилиты в CentOS.

Vzupgrade можно установить и использовать непосредственно в CentOS. Для большей надежности следует сначала «превратить» CentOS 6 в VzLinux 6. В любом случае, после обновления вы получите VzLinux 7, который уже несложно трансформировать обратно в CentOS 7. Впрочем, обо всем по порядку.

Подготовка CentOS 6 к обновлению

Начнем с установки пакета vzlinux-release от VzLinux 6. который добавит в конфигурационные файлы yum репозитории этой системы (и удалит репозитории CentOS 6 вместе с пакетом centos-release).

Далее заменим пакеты CentOS на соответствующие пакеты VzLinux, запустив синхронизацию пакетной базы с подключенными репозиториями:

Этот шаг крайне желателен, поскольку утилита vzupgrade в ряде случаев смотрит на первоисточник пакета и не доверяет «чужим» программам — например, если у вас был включен какой-то сервис из не-VzLinux пакета, то этот сервис после обновления будет выключен.

Если вы не боитесь подобных нюансов и готовы руками настроить поведение сервисов при загрузке, то этот шаг можно пропустить.

Теперь можно установить пакет vzupgrade:

И запустить диагностику возможных проблем при обновлении:

Ключ -skip-vz указывает утилите пропустить ряд проверок, специфических для системы виртуализации Virtuozzo — в «чистом» VzUnux, равно как и в CentOS. коммерческие составляющие Virtuozzo отсутствуют, и попытка проверить их готовность к обновлению смысла не имеет. Более того, запустив vzupgrade без этой опции в CentOS, вы можете получить сообщения о критических мешающих обновлению ошибках, из-за которых vzupgrade откажется работать дальше.

Вызов vzupgrade с ключом check сводится к запуску утилиты ргеир из пакета preupgrade-assistant (сателлита redhat-upgrade-tool) с некоторыми дополнительными проверками. Результатом его работы является отчет со списком потенциальных опасностей, поджидающих вас при обновлении.

Отчет трансформируется в html-файл, и даже в случае минимальной установки CentOS 6 этот отчет достаточно обширен. Найти отчет result.html можно в директории /root/preupgrade (см, рис. 1).обновление centos

Помимо отчета, в этой директории находятся автоматически сгенерированные скрипты, которые будут выполнены в процессе обновления. В заархивированном виде
результаты каждого запуска vzupgrade -check сохраняются в директории /root/preupgrade-result — так что при необходимости у вас будет возможность сравнить отчеты от разных запусков.

Отчет о подготовке к обновлению

Потенциальные проблемы в отчете preupgrade-assistant ранжируются по степени значимости. В первую очередь необходимо обратить внимание на пункты, помеченные как EXTREME RISK. Эти риски могут сказаться непосредственно на процессе обновления и привести к неработоспособности результирующей системы. До устранения таких рисков производить обновление крайне не рекомендуется. После устранения выявленных проблем необходимо снова запустить vzupgrade check -skip-vz.

Многие пункты отчета носят информационный характер -например, сообщают об изменениях в поддерживаемых опциях стандартных утилит (см. рис. 2). Это может оказаться полезным, если вы в своих собственных скриптах используете опции, которые убрали в новых версиях утилит (хотя в Linux такое случается достаточно редко — большинство разработчиков базовых утилит заботятся об обратной совместимости).администратор centos

Помимо информационных сообщений и критических проблем, в отчете могут встречаться пункты, помеченные как needs_action («требуется действие») и needs Jnspection («требуется изучение»). Стандартным пунктом первого вида является замечание об изменении в политиках SELinux. Так что если вы используете этот механизм, то может потребоваться переработка ваших политик.

Несмотря на указание опции -skip-vz, в отчете могут-таки оказаться некоторые пункты, относящиеся только к Virtuozzo. как то:

  • Virtuozzo virtualization
  • Virtuozzo file system
  • Deprecated VZMOUNT option
  • Virtuozzo templates cache

При работе c CentOS эти пункты можно смело игнорировать. Если вы заглянете в них, то увидите сообщения о невозможности выполнить соответствующие проверки ввиду отсутствия необходимых программ Virtuozzo.

Тем не менее стоит обратить внимание на пункт Packages not signed by Virtuozzo (при его наличии), в котором перечислены пакеты, не подписанные ключом Virtuozzo.

Грозное сообщение в отчете будет гласить, что такие пакеты не будут обновлены, но это не совсем так — если для них есть прямое обновление в репозиториях VzLinux7, то пакет успешно обновится.

Предупреждение же относится к пакетам, которые были установлены из сторонних репозиториев, — вряд ли VzLinux7 предоставит обновления для них. Однако и для таких ситуаций можно указать дополнительные репозитории с нужными пакетами для CentOS 7.

Из секций, помеченных как need Jnspection, обратите внимание на Content for enabling and disabling services based on Virtuozzo 6 system — здесь вам сообщат, какие из включенных у вас сервисов не будут включены после обновления. Одной из причин отключения сервиса является то, что он принадлежит не VzLinux-пакету.

Также потенциально полезен пункт File Lists for Manual Migration с перечнем файлов, которые вы, возможно, захотите самостоятельно перенести из старой системы в новую. Как правило, приводимый здесь список содержит много лишних элементов — например, все содержимое директории ‘boot, все модули ядра и многое другое.

Кроме того, наличие файла в этом списке вовсе не означает, что он будет удален при обновлении — это зависит от того, какому пакету файл принадлежит и какова политика обновления пакета в отношении этого файла. Если файл помечен как конфигурационный, то он будет либо сохранен с расширением .rpmsave, либо новый файл не перезатрет имеющийся, а будет помещен рядом с расширением .rpmnew.

Если вы изучили отчет и не нашли его слишком устрашающим, то можно приступить к непосредственно обновлению системы.

Переходим к действиям

Во избежание потенциальных проблем, которые могут вызвать работающие в системе процессы (а также пользователи), для осуществления обновления redhat-upgrade-tool перезагружает систему в специальном неинтерактивном режиме.

Чтобы инициализировать перезагрузку в режим обновления, необходимо иметь соответствующим образом подготовлены initrd-файл (содержащий, помимо прочего, саму утилиту redhat-upgrade-tool) Для CentOS готовых официальных initrd такого рода нет, однако мы можем воспользоваться ISO-образом Virtuozzo 7. Можно записать его на CD или флешку либо смонтировать на другом сервере и сделать доступным содержимое по http или ftp, либо даже использовать ISO-образ напрямую — vzupgrade сам его смонтирует и извлечет нужные файлы.

Помимо ISO-образа, утилите vzupgrade необходимо передать список репозиториев с пакетами, которые будут использованы при обновлении. Этот список должен включать как минимум основной репозиторий VzLinux 7.

Если вы записали ISO-образ Virtuozzo 7 на CD и вставили диск в привод сервера, то инициализация обновления будет выглядеть следующим образом:

Опция -skip-vz вам уже знакома, в случае команды install она пропускает часть шагов обновления, специфичных для Virtuozzo.

Дополнительная опция -skip-license-upgrade указывает утилите, что нет необходимости обновлять лицензию Virtuozzo.

Вместо устройства cdrom можно указать непосредственно файл ISO-образа. Если же содержимое образа доступно по сети, то вместо -device необходимо использовать опцию network, передав ей адрес сервера.

В любом случае, утилита vzupgrade предварительно скачает все пакеты из репозиториев VzLinux на локальный диск. Такой подход обусловлен тем, что в ряде случаев в процессе обновления становятся недоступны сеть и интернет, что может привести к аварийному завершению апдейта.

Учтите, что для скачиваемых пакетов может потребоваться достаточно много места — мы рекомендуем иметь не менее 20 Гб. Это не обязательно должно быть место на корневом разделе, можно выделить директорию на другом диске и создать символьную ссылку /var/lib/upgrade_pkgs0, указывающую на вашу директорию — именно в /var/lib/upgrade_ pkgs0 будут скачиваться пакеты из репозитория.

Например, если у вас есть отдельный большой диск, смонтированный в директорию /mnt/storage, то необходимая последовательность действий будет выглядеть так:

В конце предварительного этапа vzupgrade сделает финальную проверку корректности, а именно удостоверится в наличии среди пакетов для обновления ключевых компонентов (glibc и systemd). Если их там не окажется, то vzupgrade порекомендует отказаться от обновления, и лучше в такой ситуации с ним согласиться и попробовать найти причины проблемы. Возможно, на вашем жестком диске просто не хватило места для скачивания всех пакетов — в наших экспериментах с реальными системами это была наиболее частая причина ошибок.

Перезагрузка, и даже две

Если же все прошло успешно, то можно перезагружать компьютер. При перезагрузке будет автоматически выбран пункт меню System Upgrade и запущен неинтерактивный процесс обновления вашей системы. В ходе этого процесса вы сможете наблюдать на мониторе логи работы yum и вспомогательных скриптов апдейта, но как-то вмешаться в этот процесс не сможете (пользователи, когда-либо обновлявшие дистрибутив Fedora на очередную версию, наверняка заметят здесь тот же механизм, что использовался в утилите FedUp).

Кроме обновления, никакие другие процессы выполняться не будут. После выполнения всех необходимых действий машина снова перезагрузится. Если все прошло успешно, вы увидите в меню загрузки пункт Virtuozzo Linux 7. который и надо выбрать. Если вы увидели свое старое меню с предложением загрузить CentOS 6 или Virtuozzo Linux 6, то, значит, что-то пошло не так. Надо загружаться в старую систему и смотреть журналы.

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

В зависимости от критичности поломки в такой ситуации можно зайти на машину с другого сервера по SSH (если сеть поднялась и сервис sshd активен) либо загрузиться с внешнего носителя (например, с LiveCD). примонтировать раздел с корневой ФС вашей системы, изучать журналы обновления и пытаться завершить этот процесс. Хотя в большинстве случаев в такой ситуации проще будет сохранить нужные вам файлы и установить CentOS 7 начисто.

Если же все прошло хорошо, то при первой загрузке VzLinux 7 выполнит ряд завершающих обновление действий и снова перезагрузит машину. После этого загрузится уже полноценный VzLinux 7, получившийся из вашего CentOS 6.

Возвращаем CentOS

Если у вас проснулся интерес к Virtuozzo, то можно получившийся VzLinux 7 превратить в Virtuozzo 7 либо OpenVZ 7 с помощью утилит do-upgrade-vzlin-vz7 и do-upgrade-vzlin-openvz7 соответственно. Однако нашим изначальным планом было обновление до CentOS 7, для чего нам осталось сделать несколько несложных шагов.

Первым делом вам необходимо установить пакет centos-release, предварительно вручную удалив vzlinux-release. На момент написания статьи актуальным для CentOS 7 был centos-release-7-4.1708.el7.centos.x86_64.rpm:

Теперь удаляем конфигурационный файл yum. который помешает нам заменить пакет systemd:

И запустим синхронизацию пакетов с подключенными репозиториями (после замены vzlinux-release на centos-release в системе будут снова приписаны репозитории CentOS):

Этот шаг серьезных опасностей не таит, поскольку VzLinux 7 и CentOS 7 почти идентичны по версиям пакетов, и в результате вы просто замените пакеты из репозиториев VzLinux на пакеты CentOS.

После завершения синхронизации пакетов можно еще раз перезагрузить машину и на сей раз запустить уже CentOS 7. Чего и требовалось достичь.

Журналы и работа над ошибками

Даже если вы успешно загрузились в CentOS 7. еще не факт, что обновление прошло абсолютно гладко. Первое, на что стоит обратить внимание, — оставшиеся пакеты от старой версии системы, которые можно вычислить по суффиксам -е/6» или «vl6-

Такая ситуация возможна, если у вас были установлены пакеты из сторонних репозиториев — в этом случае надо их обновлять самостоятельно.
Журналы обновления лежат в директории /var/log. Если вы подозреваете, что в процессе обновления что-то пошло не так, то первым делом необходимо обратить внимание на файл /var/log/vzupgrade.log. В этом файле содержится информация о действиях самого vzupgrade и отображаются только критические ошибки — например, невозможность разрешить зависимости устанавливаемых пакетов.

Более детальная информация о том, что происходило во время обновления, доступна в файлах /var/log/upgrade.log и /var/log/redhat-upgrade-tool.log.

Основываясь на собственном опыте, могу сказать, что если после обновления вы смогли загрузиться в новую систему, то все наиболее серьезные краеугольные камни вы уже обошли и теперь надо скрупулезно смотреть, все ли ваши сервисы на месте и работают, как и раньше.

Ограничения

Vzupgrade — это надстройка над redhat-upgrade-tool, и ей присущи практически все те же ограничения. В частности, если у вас установлено что-то помимо базового набора пакетов, то обновление может и не пройти. Впрочем, в случае vzupgrade можно попробовать обновить систему с установленными Х11 — сами «иксы» обновить получится, но вот если помимо них у вас установлена какая-то DE (Gnome или KDE), то скорее всего после обновления она не запустится.

В силу серьезности разницы между CentOS 6 и 7, процесс обновления далек от надежности. В случае -ванильного» CentOS6 она работает хорошо, но любая кастомизация (в первую очередь установка дополнительных пакетов) может оказаться серьезной загвоздкой при миграции на новый дистрибутив. Обязательно сохраняйте все важные данные перед обновлением и будьте готовы к тому, что система после обновления не сможет загрузиться и надо будет ставить ее начисто.
Обновление CentOS 6 на CentOS 7 — задача разрешимая, хотя и с заметными ограничениями. По сравнению с установкой чистой системы такая миграция может избавить вас от необходимости настройки новой системы и ручного переноса всех старых конфигурационных файлов. Тем не менее использовать такое обновление следует с осторожностью. Если у вас есть возможность проверить обновление на реальной или виртуальной машине, идентичной боевым серверам, обязательно сделайте это.

Источник: Системный администратор №6 2018

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.