CentOS を 6 から 7 にアップグレードしてみた。

どうもみむらです。
先日まで某学会に出席していた関係で遅くなりました。

 

学会に向かう朝に Twitter を眺めていたら CentOS 7 が出た! というツイートが流れていまして

・・まじすか! もう CentOS 7 出たんか! でも時間が無い・・!
と思いながら、学会に行って、帰ってきました。

今日は普段の行いが最高に悪かった為か、
頭痛なり腹痛なり、とりあえず若者が掛かる「痛」のある程度の症状が出て
日中はダウンしていました。

日中は布団とトイレの往復を何度やって、段々と落ち着いてきたのでやろうか、と。

・・・そんなわけで今に至る訳です。

 

閑話休題

 

それではアップデートを。

良く纏まっているウェブサイトがありますので、基本的にはこちらに従う感じで。
http://abi.io/blogs/in-place-upgrade-centos-6-5-to-7-0-using-preupg.html

 

それと systemd ベースのシステムに変わるため、
十分に時間を確保できる状況になってからアップデートすることをおすすめします。

 

1. バックアップを取る

環境が壊れたとき、対応するのはやった人本人となりますので、
普通はバックアップしてから作業をすることを強くおすすめします。

 

2. 現行のシステムにおいて必要なアップデートを全部適用する

yum update
reboot

yum でアップデートして、再起動します。

 

3. Pre-Upgrade 用のツールをインストール

Windows でいうと「システム更新準備ツール」というところでしょうか。

下記URL にファイルが転がっているのでこれをインストールしていきます。

(依存しているパッケージのインストールも含め。)

http://dev.centos.org/centos/6/upg/x86_64/Packages/

 

yum -y install openscap pcre-devel libxml2-devel libxslt-devel m2crypto python-simplejson mod_wsgi

rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-1.0.2-33.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-contents-0.5.13-1.el6.noarch.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/preupgrade-assistant-ui-1.0.2-33.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/python-rhsm-1.9.7-1.el6.x86_64.rpm
rpm -ihv http://dev.centos.org/centos/6/upg/x86_64/Packages/redhat-upgrade-tool-0.7.22-1.el6.noarch.rpm

4. Pre-Upgrade 用のツールを実行

root になってから preupg を実行します。

実行直後、英語で「ちゃんとバックアップとったか?」と聞かれるので

とっている場合 or システムが動かなくなってもがんばれる人 は “y” と回答して実行させます。

#su
Password: 

#preupg
Preupg tool doesn't do the actual upgrade.
Please ensure you have backed up your system and/or data in the event of a failed upgrade
 that would require a full re-install of the system from installation media.
Do you want to continue? y/n
y
....

 

5. アップグレード

redhat-upgrade-tool を実行します。

接続先は IIJ に。

redhat-upgrade-tool --network 7.0  --instrepo http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/ --force

–network : バージョン指定 (今回の場合は 7.0)

–instrepo : アップグレード用起動イメージの取得先 ( –instrepo=REPOID   get upgrader boot images from REPOID )

 

ヘルプを見ていて、もしかして “enablerepo” とかでも大丈夫じゃ・・とか思ったのですが

redhat-upgrade-tool --network 7.0  --enablerepo http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/
Usage: redhat-upgrade-tool <SOURCE> [options]

redhat-upgrade-tool: error: --instrepo is required with --network

とのことで。

処理は結構な時間がかかりますので、ニコニコ動画で好きな動画を見てくるとか、

コーヒーを煎れるとかそういうことをして暇をつぶすといいと思います。

testing upgrade transaction
rpm transaction 100% [====================================================================]
rpm install 100% [====================================================================]
setting up system for upgrade
Finished. Reboot to start upgrade.

・・ということで再起動します。

 

6. 再起動

再起動すると、5でダウンロードしたファイルを元に

アップグレード処理が始まります。

・・アップグレード用ツールが入ったブートイメージで起動して処理が行われるため、

完了するまで操作はできなくなります。

(Windows でいうところの Service Pack インストール時の起動直後にあるような、

更新しています・・ 80%.. みたいな状態になります。)

こちらも結構な時間がかかりますので、

お茶を煎れるとかで待っているといいと思います。

 

また、初回起動は結構な時間がかかります。

それも特に文字の表示が出ませんので、いろいろと不安になりますが長く待ちましょう。

2回目以降は早く起動します。(ただしこちらも文字表示等はなし)

 

7. いろいろと設定

今まで設定されていたサービスのいくつかが立ち上がっていないことに気づくかとおもいます。

でもって  ls /etc/init.d/ とかしてもすっからかん。

でもって /etc/init.d/README を読んでみると、

”systemd based の OS になったから、昔ながらの init スクリプトは ネイティブな systemd サービスファイルになったよ!”

と書かれています。

でもって、 “systemctl” コマンドを使ってくれとも書いてあります。

要は、

今まで “service named start” とやっていたのが

“systemctl start named” という感じになる
、ということで。

 

いくつか使いそうなものを書いておくと:

 

service named start (サービス開始)

→ systemctl start named

service named stop (サービス停止)

→ systemctl stop named

service named status (サービスの状況を確認する)

→ systemctl status named

chkconfig named on (サービスを自動起動設定する)

→ systemctl enable named

chkconfig named off (サービスを自動起動から外す)

→ systemctl disable named

 

こんな感じで、ちまちま設定していくと良さそうです。

 

・・また、どんなサービスがあったか忘れたよ! という場合は、

/usr/lib/systemd/system/

あたりを見ると、思い出すかもしれません。

 

また、 net-tools による制御 (ifconfig etc..) はどうも非推奨になったようなので、

yum remove net-tools を実行して、

ip addr による制御に慣れておくのもいいかもしれません。

 

8.見落としそうなところ

1. mysql は MariaDB に変わりました

MySQL が入っていた環境だと、 systemctl start mysqld をしても立ち上がらないので

不思議に思うかもしれませんがアップグレードの最中に消されるようです。

ただ、データは残っていますので、落ち着いて yum install mysql として、

MariaDB をインストールすれば大丈夫です。(自動的に移行されます)

→ yum install mariadb-server としてもインストール可能。

 

2.xinetd が止まってます。

xinetd に依存したサービスを動かしていた場合は

systemctl enable xinetd として有効にしてやる必要があります。

 

3.dovecot でメールが受信できない

Initialization failed: namespace configuration error: inbox=yes namespace missing

こんなエラーがログにたまっていて、接続はできるけれど読み出せない状況が発生します。

この場合は、

/etc/dovecot/conf.d/15-mailboxes.conf に

inbox = yes

の記述を追記するか、

15-mailboxes.conf を削除すると動きます。

 

4. “/home/*/public_html” にコンテンツが置かれている場合に、どうもうまく Apache が動かない

/etc/httpd/conf.d/userdir.conf

に設定が記述されていますので、このあたりを編集してみるといいかと思います。

 

5.モジュールの読み込み周りで Apache が動かない

モジュールの読み込みに関しては、

/etc/httpd/conf.modules.d

で行うように変更されたようですので、そちらに。

 

6.iptables サービスが既定で Disabled になっている

これはファイアウォールの機能が “firewalld” に移ったため。

iptables をとりあえず有効にした後に、firewalld での書き方に移っていくといいかなと思います。

 

7.CentOS 6 のパッケージをきれいに消したい

rpm –qa | grep el6 | xargs rpm –e

こんなことすると幸せになれるかも。

ただ、何も考えずにこれを実行すると不幸せになるので、ちゃんと確認してから。

 

8./var/log にログファイルがない!

http://fedoraproject.org/wiki/Changes/NoDefaultSyslog

この辺にあるのですが、 “journalctl” コマンドを使用するように標準が変更されています。

もちろん、 rsyslog を入れて、サービスを有効にすれば今まで通りログが出てきますが、

”systemd journal” に管理を任せてみるのもよいのでは。

・・一応、

journalctl | grep dovecot  とかすれば、その製品だけのログを取りだしてくる事が出来ます。

 

9.postfix でメールが送れなくなった!

saslauthd による認証を行っている環境では、

saslauthd が止まっている事によってメールが送信できない事があります。

systemctl enable saslauthd

systemctl start saslauthd

で良い感じに。

 


・・あとで何か新しいことを見つけたら書き換えます・・。

とりあえず、このあたりまで・・。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です