CentOS 6.10(Final) to CentOS 7.9な話

今回は、CentOS 6.10(Final)からCentOS 7.9.2009にアップグレードした話です!

2020/11/30にCentOS 6.10(Final)のサポート終わりましたね…

ざっくり調べるとこんな感じ

バージョンRelease dateFull updatesMaintenance updates
52007-04-122014-01-312017-03-31
62024-06-302017-05-102020-11-30
72014-07-072020-08-062024-06-30
82019-09-242024-052029-05-31

https://en.wikipedia.org/wiki/CentOS

運用環境ではないのでガチで困ったわけではないのでお勉強程度です。

今回、困ったのは、DockerとかVirtualBOXのVMの場合、なぜか上がりませんでした… なんでだろう?何度やってもCentOS 6.10… boot関係かな?

そんな感じで、1週間も試行錯誤した結果です!

初期環境Laravelの実行環境(Laravel)の構築

今回ターゲットしたのはLAMP…ではなく LAPL(Linux Apache PHP Laravel)ですw
0からのLaravelプロジェクト構築をVagrantで作るスクリプトも考えていたのでです

早速、VagrantでLaravel実行の初期状態を作ります

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos6"
  config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
  config.vm.provision "shell", path: "./shell/init.sh"
  config.vm.provision "shell", path: "./shell/upgrade_php53to56.sh"
  config.vm.provision "shell", path: "./shell/getcomposer.sh"
  config.vm.provision "shell", path: "./shell/provision.sh"
  #config.vm.provision "shell", path: "./upgrade.sh"
end

ま、難しくはありませんが解説です。
1.centos6の最新… (version指定した方が良かった?)のboxを使っています。
2.んで、走らせたroot(.)を/vagrantにmountしています。
3.そして、初期化 (init.sh)
4.PHPをデフォルトの5.3から5.6に上げます。(upgrade_php53to56.sh)
5.Composerを取得して(getcomposer.sh)
6.一式プロビジョンしています(provision.sh)
ここまでで、サービス提供している状態です。

init.sh

setenforce 0

yum -y update
yum -y upgrade
yum -y install npm httpd php php-fpm unzip mcrypt php-fpm php-common php-mbstring php-xmlrpc php-gd php-xml php-cli php-zip php-curl git curl openscap pcre-devel libxml2-devel libxslt-devel m2crypto python-simplejson mod_wsgi

upgrade_php53to56.sh

# PHP 5.3.3 -> 5.6
php -v

yum -y install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum -y update --enablerepo=remi,remi-php56 php php-pdo php-mbstring php-common php-cli

php -v

getcomposer.sh

curl --silent https://getcomposer.org/composer-stable.phar -o /usr/local/bin/composer
chmod +x /usr/local/bin/composer

provision.sh



php -v
su - vagrant -c '/usr/local/bin/composer -V'

cd /vagrant/
test ! -f ./laravel/.env; su - vagrant -c '/usr/local/bin/composer create-project laravel/laravel laravel'
test ! -f ./laravel/.env; cp /vagrant/configs/laravel/.env ./laravel/.env

cd /vagrant/laravel
su vagrant -c '/usr/local/bin/composer update'
su vagrant -c 'php artisan key:generate'

# su vagrant -c 'npm install'

cp -f /vagrant/configs/httpd/000-default.conf /etc/httpd/conf.d/000-default.conf
cp -f /vagrant/configs/httpd/httpd.conf /etc/httpd/conf/

service httpd restart

これで、80ポートでLaravelにアクセス出来ると思います

# setenforce 0
# curl http://localhost | head
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2321  100  2321    0     0  10062      0 --:--:-- --:--:-- --:--:-- 10135
<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <!-- Fonts -->

アップグレード!

さて、お楽しみのOSアップグレード手順です。

はじめに、現在の確認です…

# cat /etc/redhat-release
CentOS release 6.10 (Final)

はい、6.10 Finalです。(そりゃそうだ)
こっから本番です!

本当は一気に書いても良いですが、慎重に行きましょう

はじめに、openscapのバージョンを落としましょう… ;;
理由としては… アップグレードするcentos-upgrade-tool-cliツールのリリースがyumで提供するopenscapが逆行してしまっています。そのためです

# yum -y erase openscap
# wget https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/openscap-1.0.8-1.0.1.el6.centos.x86_64.rpm
# rpm -Uhv --oldpackage openscap-1.0.8-1.0.1.el6.centos.x86_64.rpm

次に、preupgを実行します… preupgってのは… 略(良く解りませんw)
ま、アップグレード検証です

# yum -y install grubby
# wget https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-1.0.2-36.0.1.el6.centos.x86_64.rpm
# wget https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-contents-0.5.14-1.el6.centos.noarch.rpm
# wget https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-ui-1.0.2-36.0.1.el6.centos.x86_64.rpm
# wget https://buildlogs.centos.org/centos/6/upg/x86_64/Packages/redhat-upgrade-tool-0.7.22-3.el6.centos.noarch.rpm
# rpm -Uhv preupgrade-assistant-1.0.2-36.0.1.el6.centos.x86_64.rpm preupgrade-assistant-contents-0.5.14-1.el6.centos.noarch.rpm preupgrade-assistant-ui-1.0.2-36.0.1.el6.centos.x86_64.rpm redhat-upgrade-tool-0.7.22-3.el6.centos.noarch.rpm

# yes | preupg -s CentOS6_7

ま、実行が結構時間がかかりますが

Tarball with results is stored here /root/preupgrade-results/preupg_results-201128040724.tar.gz .
The latest assessment is stored in directory /root/preupgrade .
Summary information:
We found some potential in-place upgrade risks.
Read the file /root/preupgrade/result.html for more details.
Upload results to UI by command:
e.g. preupg -u http://127.0.0.1:8099/submit/ -r /root/preupgrade-results/preupg_results-*.tar.gz .

こんなの出たらOKです。

次に、centos7のyumリポジトリを作成します

# mkdir -pv /var/tmp/system-upgrade/base/ /var/tmp/system-upgrade/extras/ /var/tmp/system-upgrade/updates/
# echo http://vault.centos.org/7.0.1406/os/x86_64/ > /var/tmp/system-upgrade/base/mirrorlist.txt
# echo http://vault.centos.org/7.0.1406/extras/x86_64/ > /var/tmp/system-upgrade/extras/mirrorlist.txt
# echo http://vault.centos.org/7.0.1406/updates/x86_64/ > /var/tmp/system-upgrade/updates/mirrorlist.txt
# rpm --import http://vault.centos.org/7.0.1406/os/x86_64/RPM-GPG-KEY-CentOS-7

# cat > /etc/yum.repos.d/centos7.repo << EOF
[centos7]
name=centos7
baseurl=http://mirror.centos.org/centos/7/os/x86_64/
enabled=1
gpgcheck=0
EOF

# yum clean all ; yum repolist

さて、お待ちかねのupgradeです!

# yes | centos-upgrade-tool-cli --disablerepo=remi --network 7 --cleanup-post --instrepo=http://vault.centos.org/7.0.1406/os/x86_64/

めっちゃ長いですが、REBOOTが出ればOKです。再起動しましょう

CentOS 7.9に上げたらはじめにすること

はじめに、初期状態が… sshd上がっていませんw
リモートの人… 絶望的;;

早速、sshd上げて、ぬくぬくお布団で作業しましょう!

# service sshd restart
# systemctl enable sshd.service

これで、sshで通信OK!

さて、ここで問題です… grepとかコマンドがNGですw
これの対応です!

# ln -s /lib64/libpcre.so /lib64/libpcre.so.0
# ln -s /lib64/libsasl2.so.3 /lib64/libsasl2.so.2

とりあえず、これでOKになりました

早速… httpdを起動して…

# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

ん?

# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 木 2020-12-03 00:05:02 JST; 15s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 28153 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 28153 (code=exited, status=1/FAILURE)

12月 03 00:05:02 centos httpd[28153]: [Thu Dec 03 00:05:02.398307 2020] [so:warn] [pid 28153] AH01574: module proxy_wstunnel_module is already loaded, skipping
12月 03 00:05:02 centos httpd[28153]: [Thu Dec 03 00:05:02.398345 2020] [so:warn] [pid 28153] AH01574: module ssl_module is already loaded, skipping
12月 03 00:05:02 centos httpd[28153]: [Thu Dec 03 00:05:02.398384 2020] [so:warn] [pid 28153] AH01574: module systemd_module is already loaded, skipping
12月 03 00:05:02 centos httpd[28153]: [Thu Dec 03 00:05:02.398473 2020] [so:warn] [pid 28153] AH01574: module cgi_module is already loaded, skipping
12月 03 00:05:02 centos httpd[28153]: [Thu Dec 03 00:05:02.398512 2020] [so:warn] [pid 28153] AH01574: module wsgi_module is already loaded, skipping
12月 03 00:05:02 centos httpd[28153]: httpd: Syntax error on line 354 of /etc/httpd/conf/httpd.conf: Syntax error on line 10 of /etc/httpd/conf.d/perl.conf: Cannot load modules/mod_perl.so into server: /etc/httpd/modules/mod_perl.so: undefined symbol: PL_vtbl_env
12月 03 00:05:02 centos systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
12月 03 00:05:02 centos systemd[1]: Failed to start The Apache HTTP Server.
12月 03 00:05:02 centos systemd[1]: Unit httpd.service entered failed state.
12月 03 00:05:02 centos systemd[1]: httpd.service failed.

perl.confらしい…

沼になりそうなので… 次回!