CentOS」タグアーカイブ

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

で良い感じに。

 


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

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

手元の CentOS に whois 入ってなくて焦った。


たぶんインストール時に省いたんだと思う。私。

 

とりあえず、whois をインストールしようとしてちょっとはまったのでメモ。

# yum install jwhois

というわけで、 whois ではなくて jwhois パッケージを入れるらしい。

コマンド自体は whois で行けるので、

# whois kantei.go.jp

[Querying whois.jprs.jp]
[whois.jprs.jp]
[ JPRS database provides information on network administration. Its use is    ]
[ restricted to network administration purposes. For further information,     ]
[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e'     ]
[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'.                 ]

Domain Information:
a. [Domain Name]                KANTEI.GO.JP
g. [Organization]               The Prime Minister's Official Residence
l. [Organization Type]          Government
m. [Administrative Contact]     MK072JP
n. [Technical Contact]          MK072JP
p. [Name Server]                ns3.kantei.go.jp
p. [Name Server]                ns4.kantei.go.jp
s. [Signing Key]
[State]                         Connected (2012/06/30)
[Registered Date]               1994/06/24
[Connected Date]                1994/06/27
[Last Update]                   2011/07/01 01:15:10 (JST)

なんとなく逆引き。ってことできちんと動きまする。

Bogofilter を CentOS でつかってみる。


ども。これまたつまらない記事ですよーと。

とりあえず、巷ではスパム判定に Spamassassin を使うことが多いようですが、
今回は高速なスパム判定ツールとして、Bogofilter を使ってみました。

今回行ったのは、
自分宛に来たメールを、メインPCとノートPCの間で同期を行わせ、
かつ、スパム判定を行い、スパムメールを振り分ける。ということです。

メール数が7000通以上あり、学習時間もどうにかしなければいけませんし、
スパム業者に私のメールアドレスは大人気のようで、かなりの数が来ます。

そんなわけで今回 Bogofilter を使ってみました。
結論から言いますと、Spamassassin と比較してかなり高速です。
自分のPC間でメールを同期しようと考えている人には良いのかもしれません。

余談ですが、外部のPOP3 メールの受信は fetchmail を回しておけば可能です。
メールの転送の方が圧倒的に早いので、
転送が使える場合はそっちを使った方が良いかと思います。


手順:
注: 既に IMAP サーバを Maildir 形式で構築済みであることを前提とします。
まだ構築されていない方は
メールサーバー構築(Postfix+Dovecot) – CentOSで自宅サーバー構築
を参照して、構築してください。

 

01.bogofilter と nkf と procmail をインストール。

yum install –y bogofilter nkf procmail

もしインストール出来ない場合、
RPMforgeリポジトリ導入(RPMforge) – CentOSで自宅サーバー構築
ここを見て、RPMForge リポジトリを追加すると良い感じになるかと思います。

 

02.kakasi をインストール。

wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
tar zxvf kakasi-2.3.4.tar.gz
cd kakasi-2.3.4
./configure && make && make install
cd ..
rm –rf kakasi-2.3.4*

 

03.仕分けを行いたいユーザに
スパムメール用のメールボックスを作成しておく。

以下 「.Junk\ E-mail/」 と出てくる部分は、
Windows Live メールをクライアントとして使用する際に、「迷惑メール」のフォルダとして「Junk E-mail」というフォルダが使われることに合わせての設定です。

ご使用予定のクライアントソフトに合わせて、「.(フォルダ名)」に適宜読み替えていただければ幸いです。

また、これ以降出てくる 「USERNAME」という表記は、すべてそのユーザ名に読み替えてください。

(仕分けを行いたいユーザのカレントディレクトリに移動。)
cd ~

cd Maildir
mkdir –p .Junk\ E-mail/new
mkdir –p .Junk\ E-mail/cur
mkdir –p .Junk\ E-mail/tmp
chmod –R 700 .Junk\ E-mail
chown –R USERNAME .Junk\ E-mail

 

04.ユーザのホームディレクトリにおまじないを書いておく。

.forward (ダブルコーテーションも入力する必要があります)

"|IFS=” && exec /usr/bin/procmail -f- || exit 75 #USERNAME"

.procmailrc

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SHELL=/bin/sh
LOCKFILE=$HOME/.maillock
LOGFILE=$MAILDIR/procmail.log

:0 HB
* ? nkf -mQ -e | kakasi -w | /usr/bin/bogofilter
.Junk\ E-mail/cur/.

 

05.自己学習するように cron にスクリプトを投げておく。

(cron.daily とかだとうまくいかないので、 crontab で登録掛けてください。)
~/bogofilter-learn

#!/bin/bash
PATH=/usr/bin:/bin:/usr/local/bin

find "~/Maildir/cur" -type f -ctime -2 -exec sh -c ‘cat "{}" 2>/dev/null | nkf -mQ –e | kakasi -w | bogofilter -n’ ‘;’ > /dev/null
find "~/Maildir/.Junk E-mail/cur/" -type f -ctime -2 -exec sh -c ‘cat "{}" 2>/dev/null | nkf -mQ –e | kakasi -w | bogofilter -s’ ‘;’ > /dev/null


とりあえずこんな感じ。

最後に 参考にしたページ。というか、データのかき集め元。

ではでは。