2017年5月16日火曜日

Raspberry Pi 3に入れたCentOS7のエラー対策

Raspberry Pi 3にCentOS7を入れてから初期作業が終わったので、
起動エラーとなっているサービスを確認して、エラーサービスを無くそうと思う。


■本日の目標

・CentOS7のサービスで起動に失敗しているサービスを無くす


■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.3.1611 (Core)


■起動失敗サービスの確認

・systemctlのステータスを確認すると、3件ほど起動に失敗しているようだ。
$ systemctl status
● WSTD-RPI3
    State: degraded
     Jobs: 0 queued
   Failed: 3 units
 (以下、略)

 続いて、失敗した3件のサービスを確認する。
$ systemctl | grep failed
● kdump.service           loaded failed failed    Crash recovery kernel arming
● network.service         loaded failed failed    LSB: Bring up/down networking
● postfix.service         loaded failed failed    Postfix Mail Transport Agent


■kdumpサービスの対策

・kdumpとは、カーネルパニックが起きたときに
 原因特定のためのdumpファイルを保存してくれるサービスだそうだ。
 では、起動失敗の原因を調べてみる。
 まずはサービスの起動結果を見る。
$ systemctl status kdump.service
● kdump.service - Crash recovery kernel arming
  Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
  Active: failed (Result: exit-code) since 木 1970-01-01 09:00:21 JST; 47 years 3 months ago
 Process: 368 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
Main PID: 368 (code=exited, status=1/FAILURE)

1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting Crash recovery kernel arming...
1月 01 09:00:21 WSTD-RPI3 kdumpctl[368]: Kdump is not supported on this kernel
1月 01 09:00:21 WSTD-RPI3 kdumpctl[368]: Starting kdump: [FAILED]
1月 01 09:00:21 WSTD-RPI3 systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
1月 01 09:00:21 WSTD-RPI3 systemd[1]: Failed to start Crash recovery kernel arming.
1月 01 09:00:21 WSTD-RPI3 systemd[1]: Unit kdump.service entered failed state.
1月 01 09:00:21 WSTD-RPI3 systemd[1]: kdump.service failed.

 ログの2行目にこのカーネルではサポートされていないと書かれている。
 
 ・・・なんとかやりようがあるんだろうけど、今回は無効化してしまう。
$ systemctl disable kdump
Removed symlink /etc/systemd/system/multi-user.target.wants/kdump.service.


■Postfixサービスの対策

・Postfixはsendmailに代わるCentOS7の標準MTA(メール転送エージェント)。
 今後やりたいことがあるので正常起動だけでも確認したい。

 まずはサービスの起動結果を見る。
$ systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 木 1970-01-01 09:00:20 JST; 47 years 3 months ago

 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 1月 01 09:00:18 WSTD-RPI3 aliasesdb[366]: /usr/sbin/postconf: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 postfix/sendmail[615]: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 aliasesdb[366]: newaliases: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:19 WSTD-RPI3 postfix[646]: fatal: parameter inet_interfaces: no local interface found for ::1
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: postfix.service: control process exited, code=exited status=1
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: Failed to start Postfix Mail Transport Agent.
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: Unit postfix.service entered failed state.
 1月 01 09:00:20 WSTD-RPI3 systemd[1]: postfix.service failed.

 うーむ・・・「::1」のオンパレード。
 おそらく先日無効化したIPv6に関するエラーだろう。

 「『::1』のインタフェースが見つからん」と言っているので、どこかに固有設定があると思われる。

 いろいろGrepして辿り着いたのがhostsファイルだった。
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 この2行目の「::1」の部分をコメントアウトする。(viコマンドで)
$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

 それでは起動してみよう。
$ systemctl start postfix.service
$ systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-05-01 15:17:57 JST; 1s ago
  Process: 1039 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 1036 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1032 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 1111 (master)
   CGroup: /system.slice/postfix.service
           tq1111 /usr/libexec/postfix/master -w
           tq1112 pickup -l -t unix -u
           mq1113 qmgr -l -t unix -u

 5月 01 15:17:54 WSTD-RPI3 systemd[1]: Starting Postfix Mail Transport Agent...
 5月 01 15:17:57 WSTD-RPI3 postfix/master[1111]: daemon started -- version 2.10.1, configuration /etc/postfix
 5月 01 15:17:57 WSTD-RPI3 systemd[1]: Started Postfix Mail Transport Agent.

 復旧成功!


■networkの対策

・最後はnetworkサービス。
 これは読んで字の如くのことをしてくれるサービスだが・・・なぜ失敗しているのだろうか?
 
 これもサービスの起動結果を見る。
$ systemctl status network.service
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since 木 1970-01-01 09:00:18 JST; 47 years 3 months ago
     Docs: man:systemd-sysv-generator(8)

 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Starting LSB: Bring up/down networking...
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: network.service: control process exited, code=exited status=6
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Failed to start LSB: Bring up/down networking.
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: Unit network.service entered failed state.
 1月 01 09:00:18 WSTD-RPI3 systemd[1]: network.service failed.

 インタフェースの上げ下げに失敗しているのかな・・・?
 調べていて行き着いた先が海外のフォーラムだった。
 どうやらRaspberry Piが以前から抱えている問題のようで同様の事象があった模様。
 回避策としては「/etc/sysconfig/network」の空ファイルを作成するだけ。
 
 では、やってみよう。
$ cat /etc/sysconfig/network
cat: /etc/sysconfig/network: そのようなファイルやディレクトリはありません
$ touch /etc/sysconfig/network
$ systemctl restart network
$ systemctl status network
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
   Active: active (exited) since 月 2017-05-01 15:57:01 JST; 1min 21s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 754 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS)

 5月 01 15:56:57 WSTD-RPI3 systemd[1]: Starting LSB: Bring up/down networking...
 5月 01 15:56:59 WSTD-RPI3 network[754]: ループバックインターフェイスを呼び込み中 [  OK  ]
 5月 01 15:57:01 WSTD-RPI3 network[754]: インターフェース eth0 を活性化中:  接続が正常にアクティベートされました (D-Bus アクティブパス:/org/freedesktop/N…onnection/1)
 5月 01 15:57:01 WSTD-RPI3 network[754]: [  OK  ]
 5月 01 15:57:01 WSTD-RPI3 systemd[1]: Started LSB: Bring up/down networking.

 起動成功!
 
 ただ・・・元々、外部アクセスに問題があったわけではなかったし、
 どんな問題を抱えていたのかわからないというのが本当のところ・・・。
 
 network.serviceの起動エラーの回避策は色々見つかったけど、環境によって対応内容はそれぞれ異なるようだ。
 「NetworkManager-wait-online.serviceを自動起動にする」とか、
 他にも2~3個試してみたけど、どれもダメで、結局辿り着いたのが↑の方法だった。


■結果

・起動失敗したサービスがなくなってスッキリ!
$ systemctl status
● WSTD-RPI3
    State: running
     Jobs: 0 queued
   Failed: 0 units
 (以下、略)



Previous Post
Next Post

post written by: