Опыт обновления CentOS 6 до CentOS 7 с сохранением всех настроек и параметров конфигурации.nnCentOS 7 вышел еще в 2014 году, однако многие системные администраторы не спешат на него переходить — благо выпуск обновлений для CentOS 6.x обещан до ноября 2020 года. Причин оставаться на предыдущей версии много, и не последнее место среди них занимает радикальность многих изменений, пришедших в релизе.nnОбновление CentOS 6 на CentOS 7 — задача разрешимая, хотя и с заметными ограничениямиn
Virtuozzo Linux и VzUpgrade
CentOS — не единственный основанный на RHEL дистрибутив. В данной статье мы рассмотрим опыт использования инструментария Virtuozzo Linux (VzLinux) — дистрибутива, лежащего в основе многих продуктов компании Virtuozzo.nnАктуальная версия Virtuozzo 7 основана на VzLinux 7. а тот. в свою очередь, на CentOS 7. Предыдущая версия соответственно основывалась на VzLinux 6 (CentOS 6). При этом пользователям Virtuozzo 6 предоставляется возможность прямого обновления на свежую версию. Частью этого процесса является обновление пакетной базы VzLinux -с 6 на 7. Осуществляется такой перевод пакетной базы с помощью инструмента vzupgrade, являющегося надстройкой над redhat-upgrade-tool и нивелирующего проблемы, возникающие при использовании этой утилиты в CentOS.nnVzupgrade можно установить и использовать непосредственно в CentOS. Для большей надежности следует сначала «превратить» CentOS 6 в VzLinux 6. В любом случае, после обновления вы получите VzLinux 7, который уже несложно трансформировать обратно в CentOS 7. Впрочем, обо всем по порядку.n
Подготовка CentOS 6 к обновлению
Начнем с установки пакета vzlinux-release от VzLinux 6. который добавит в конфигурационные файлы yum репозитории этой системы (и удалит репозитории CentOS 6 вместе с пакетом centos-release).n
# yum install http://repo.virtuozzo.eom/vzlinux/6/x86_64/ J updates/Packages/v/vzlinux-release - 6-8.vl6.9.x86_64.rpm
Далее заменим пакеты CentOS на соответствующие пакеты VzLinux, запустив синхронизацию пакетной базы с подключенными репозиториями:n
yum distro-sync
Этот шаг крайне желателен, поскольку утилита vzupgrade в ряде случаев смотрит на первоисточник пакета и не доверяет «чужим» программам — например, если у вас был включен какой-то сервис из не-VzLinux пакета, то этот сервис после обновления будет выключен.nnЕсли вы не боитесь подобных нюансов и готовы руками настроить поведение сервисов при загрузке, то этот шаг можно пропустить.nnТеперь можно установить пакет vzupgrade:n
yum install vzupgrade
И запустить диагностику возможных проблем при обновлении:n
vzupgrade check --skip-vz
Ключ -skip-vz указывает утилите пропустить ряд проверок, специфических для системы виртуализации Virtuozzo — в «чистом» VzUnux, равно как и в CentOS. коммерческие составляющие Virtuozzo отсутствуют, и попытка проверить их готовность к обновлению смысла не имеет. Более того, запустив vzupgrade без этой опции в CentOS, вы можете получить сообщения о критических мешающих обновлению ошибках, из-за которых vzupgrade откажется работать дальше.nnВызов vzupgrade с ключом check сводится к запуску утилиты ргеир из пакета preupgrade-assistant (сателлита redhat-upgrade-tool) с некоторыми дополнительными проверками. Результатом его работы является отчет со списком потенциальных опасностей, поджидающих вас при обновлении.nnОтчет трансформируется в html-файл, и даже в случае минимальной установки CentOS 6 этот отчет достаточно обширен. Найти отчет result.html можно в директории /root/preupgrade (см, рис. 1).nnПомимо отчета, в этой директории находятся автоматически сгенерированные скрипты, которые будут выполнены в процессе обновления. В заархивированном видеnрезультаты каждого запуска vzupgrade -check сохраняются в директории /root/preupgrade-result — так что при необходимости у вас будет возможность сравнить отчеты от разных запусков.n
Отчет о подготовке к обновлению
Потенциальные проблемы в отчете preupgrade-assistant ранжируются по степени значимости. В первую очередь необходимо обратить внимание на пункты, помеченные как EXTREME RISK. Эти риски могут сказаться непосредственно на процессе обновления и привести к неработоспособности результирующей системы. До устранения таких рисков производить обновление крайне не рекомендуется. После устранения выявленных проблем необходимо снова запустить vzupgrade check -skip-vz.nnМногие пункты отчета носят информационный характер -например, сообщают об изменениях в поддерживаемых опциях стандартных утилит (см. рис. 2). Это может оказаться полезным, если вы в своих собственных скриптах используете опции, которые убрали в новых версиях утилит (хотя в Linux такое случается достаточно редко — большинство разработчиков базовых утилит заботятся об обратной совместимости).nnПомимо информационных сообщений и критических проблем, в отчете могут встречаться пункты, помеченные как needs_action («требуется действие») и needs Jnspection («требуется изучение»). Стандартным пунктом первого вида является замечание об изменении в политиках SELinux. Так что если вы используете этот механизм, то может потребоваться переработка ваших политик.nnНесмотря на указание опции -skip-vz, в отчете могут-таки оказаться некоторые пункты, относящиеся только к Virtuozzo. как то:n
- Virtuozzo virtualization
- Virtuozzo file system
- Deprecated VZMOUNT option
- Virtuozzo templates cache
При работе c CentOS эти пункты можно смело игнорировать. Если вы заглянете в них, то увидите сообщения о невозможности выполнить соответствующие проверки ввиду отсутствия необходимых программ Virtuozzo.nnТем не менее стоит обратить внимание на пункт Packages not signed by Virtuozzo (при его наличии), в котором перечислены пакеты, не подписанные ключом Virtuozzo.nnГрозное сообщение в отчете будет гласить, что такие пакеты не будут обновлены, но это не совсем так — если для них есть прямое обновление в репозиториях VzLinux7, то пакет успешно обновится.nnПредупреждение же относится к пакетам, которые были установлены из сторонних репозиториев, — вряд ли VzLinux7 предоставит обновления для них. Однако и для таких ситуаций можно указать дополнительные репозитории с нужными пакетами для CentOS 7.nnИз секций, помеченных как need Jnspection, обратите внимание на Content for enabling and disabling services based on Virtuozzo 6 system — здесь вам сообщат, какие из включенных у вас сервисов не будут включены после обновления. Одной из причин отключения сервиса является то, что он принадлежит не VzLinux-пакету.nnТакже потенциально полезен пункт File Lists for Manual Migration с перечнем файлов, которые вы, возможно, захотите самостоятельно перенести из старой системы в новую. Как правило, приводимый здесь список содержит много лишних элементов — например, все содержимое директории ‘boot, все модули ядра и многое другое.nnКроме того, наличие файла в этом списке вовсе не означает, что он будет удален при обновлении — это зависит от того, какому пакету файл принадлежит и какова политика обновления пакета в отношении этого файла. Если файл помечен как конфигурационный, то он будет либо сохранен с расширением .rpmsave, либо новый файл не перезатрет имеющийся, а будет помещен рядом с расширением .rpmnew.nnЕсли вы изучили отчет и не нашли его слишком устрашающим, то можно приступить к непосредственно обновлению системы.n
Переходим к действиям
Во избежание потенциальных проблем, которые могут вызвать работающие в системе процессы (а также пользователи), для осуществления обновления redhat-upgrade-tool перезагружает систему в специальном неинтерактивном режиме.nnЧтобы инициализировать перезагрузку в режим обновления, необходимо иметь соответствующим образом подготовлены initrd-файл (содержащий, помимо прочего, саму утилиту redhat-upgrade-tool) Для CentOS готовых официальных initrd такого рода нет, однако мы можем воспользоваться ISO-образом Virtuozzo 7. Можно записать его на CD или флешку либо смонтировать на другом сервере и сделать доступным содержимое по http или ftp, либо даже использовать ISO-образ напрямую — vzupgrade сам его смонтирует и извлечет нужные файлы.nnПомимо ISO-образа, утилите vzupgrade необходимо передать список репозиториев с пакетами, которые будут использованы при обновлении. Этот список должен включать как минимум основной репозиторий VzLinux 7.nnЕсли вы записали ISO-образ Virtuozzo 7 на CD и вставили диск в привод сервера, то инициализация обновления будет выглядеть следующим образом:n
# vzupgrade install --device /dev/cdrom --skip-license-upgrade --skip-vz --add-repo vzlinux7=http://repo.virtuozzo.con/vzlinux/7/x86_64/os
Опция -skip-vz вам уже знакома, в случае команды install она пропускает часть шагов обновления, специфичных для Virtuozzo.nnДополнительная опция -skip-license-upgrade указывает утилите, что нет необходимости обновлять лицензию Virtuozzo.nnВместо устройства cdrom можно указать непосредственно файл ISO-образа. Если же содержимое образа доступно по сети, то вместо -device необходимо использовать опцию network, передав ей адрес сервера.nnВ любом случае, утилита vzupgrade предварительно скачает все пакеты из репозиториев VzLinux на локальный диск. Такой подход обусловлен тем, что в ряде случаев в процессе обновления становятся недоступны сеть и интернет, что может привести к аварийному завершению апдейта.nnУчтите, что для скачиваемых пакетов может потребоваться достаточно много места — мы рекомендуем иметь не менее 20 Гб. Это не обязательно должно быть место на корневом разделе, можно выделить директорию на другом диске и создать символьную ссылку /var/lib/upgrade_pkgs0, указывающую на вашу директорию — именно в /var/lib/upgrade_ pkgs0 будут скачиваться пакеты из репозитория.nnНапример, если у вас есть отдельный большой диск, смонтированный в директорию /mnt/storage, то необходимая последовательность действий будет выглядеть так:n
mkdir /mnt/storage/upgrade_pkgs0nln -s /mnt/storage/upgrade_pkgs0 /var/lib/upgrade_pkgs0
В конце предварительного этапа vzupgrade сделает финальную проверку корректности, а именно удостоверится в наличии среди пакетов для обновления ключевых компонентов (glibc и systemd). Если их там не окажется, то vzupgrade порекомендует отказаться от обновления, и лучше в такой ситуации с ним согласиться и попробовать найти причины проблемы. Возможно, на вашем жестком диске просто не хватило места для скачивания всех пакетов — в наших экспериментах с реальными системами это была наиболее частая причина ошибок.n
Перезагрузка, и даже две
Если же все прошло успешно, то можно перезагружать компьютер. При перезагрузке будет автоматически выбран пункт меню System Upgrade и запущен неинтерактивный процесс обновления вашей системы. В ходе этого процесса вы сможете наблюдать на мониторе логи работы yum и вспомогательных скриптов апдейта, но как-то вмешаться в этот процесс не сможете (пользователи, когда-либо обновлявшие дистрибутив Fedora на очередную версию, наверняка заметят здесь тот же механизм, что использовался в утилите FedUp).nnКроме обновления, никакие другие процессы выполняться не будут. После выполнения всех необходимых действий машина снова перезагрузится. Если все прошло успешно, вы увидите в меню загрузки пункт Virtuozzo Linux 7. который и надо выбрать. Если вы увидели свое старое меню с предложением загрузить CentOS 6 или Virtuozzo Linux 6, то, значит, что-то пошло не так. Надо загружаться в старую систему и смотреть журналы.nnНе исключен и печальный исход — что бы вы ни выбрали в меню загрузки, стартовать систему не получится.nnВ зависимости от критичности поломки в такой ситуации можно зайти на машину с другого сервера по SSH (если сеть поднялась и сервис sshd активен) либо загрузиться с внешнего носителя (например, с LiveCD). примонтировать раздел с корневой ФС вашей системы, изучать журналы обновления и пытаться завершить этот процесс. Хотя в большинстве случаев в такой ситуации проще будет сохранить нужные вам файлы и установить CentOS 7 начисто.nnЕсли же все прошло хорошо, то при первой загрузке VzLinux 7 выполнит ряд завершающих обновление действий и снова перезагрузит машину. После этого загрузится уже полноценный VzLinux 7, получившийся из вашего CentOS 6.n
Возвращаем CentOS
Если у вас проснулся интерес к Virtuozzo, то можно получившийся VzLinux 7 превратить в Virtuozzo 7 либо OpenVZ 7 с помощью утилит do-upgrade-vzlin-vz7 и do-upgrade-vzlin-openvz7 соответственно. Однако нашим изначальным планом было обновление до CentOS 7, для чего нам осталось сделать несколько несложных шагов.nnПервым делом вам необходимо установить пакет centos-release, предварительно вручную удалив vzlinux-release. На момент написания статьи актуальным для CentOS 7 был centos-release-7-4.1708.el7.centos.x86_64.rpm:n
rpm -в --nodepa vzlinux-releasenyum install https://adrror.yandex.rU/centos/7/os/x86_64/Packages/centos-release-7-4.1708.el7.centos.x86_64.rpm
Теперь удаляем конфигурационный файл yum. который помешает нам заменить пакет systemd:n
rm -f /etc/yum/protected.d/systemd.conf
И запустим синхронизацию пакетов с подключенными репозиториями (после замены vzlinux-release на centos-release в системе будут снова приписаны репозитории CentOS):n
yum distro-sync
Этот шаг серьезных опасностей не таит, поскольку VzLinux 7 и CentOS 7 почти идентичны по версиям пакетов, и в результате вы просто замените пакеты из репозиториев VzLinux на пакеты CentOS.nnПосле завершения синхронизации пакетов можно еще раз перезагрузить машину и на сей раз запустить уже CentOS 7. Чего и требовалось достичь.n
Журналы и работа над ошибками
Даже если вы успешно загрузились в CentOS 7. еще не факт, что обновление прошло абсолютно гладко. Первое, на что стоит обратить внимание, — оставшиеся пакеты от старой версии системы, которые можно вычислить по суффиксам -е/6» или «vl6-n
# rpm -qa I grep vl6\|el6
Такая ситуация возможна, если у вас были установлены пакеты из сторонних репозиториев — в этом случае надо их обновлять самостоятельно.nЖурналы обновления лежат в директории /var/log. Если вы подозреваете, что в процессе обновления что-то пошло не так, то первым делом необходимо обратить внимание на файл /var/log/vzupgrade.log. В этом файле содержится информация о действиях самого vzupgrade и отображаются только критические ошибки — например, невозможность разрешить зависимости устанавливаемых пакетов.nnБолее детальная информация о том, что происходило во время обновления, доступна в файлах /var/log/upgrade.log и /var/log/redhat-upgrade-tool.log.nnОсновываясь на собственном опыте, могу сказать, что если после обновления вы смогли загрузиться в новую систему, то все наиболее серьезные краеугольные камни вы уже обошли и теперь надо скрупулезно смотреть, все ли ваши сервисы на месте и работают, как и раньше.n
Ограничения
Vzupgrade — это надстройка над redhat-upgrade-tool, и ей присущи практически все те же ограничения. В частности, если у вас установлено что-то помимо базового набора пакетов, то обновление может и не пройти. Впрочем, в случае vzupgrade можно попробовать обновить систему с установленными Х11 — сами «иксы» обновить получится, но вот если помимо них у вас установлена какая-то DE (Gnome или KDE), то скорее всего после обновления она не запустится.nnВ силу серьезности разницы между CentOS 6 и 7, процесс обновления далек от надежности. В случае -ванильного» CentOS6 она работает хорошо, но любая кастомизация (в первую очередь установка дополнительных пакетов) может оказаться серьезной загвоздкой при миграции на новый дистрибутив. Обязательно сохраняйте все важные данные перед обновлением и будьте готовы к тому, что система после обновления не сможет загрузиться и надо будет ставить ее начисто.nОбновление CentOS 6 на CentOS 7 — задача разрешимая, хотя и с заметными ограничениями. По сравнению с установкой чистой системы такая миграция может избавить вас от необходимости настройки новой системы и ручного переноса всех старых конфигурационных файлов. Тем не менее использовать такое обновление следует с осторожностью. Если у вас есть возможность проверить обновление на реальной или виртуальной машине, идентичной боевым серверам, обязательно сделайте это.nnИсточник: Системный администратор №6 2018