ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Raspberry Pi 2が届いたのでCentOS 7を入れてみた

[2017/1/21更新] CentOS7-1611が出たのでURLを更新。

f:id:ytooyama:20160320174814p:plain

注文していたRaspberry Pi 2が届いたので、CentOS 7を入れてみました。起動後のCentOS 7はほぼそのまんまのCentOS 7で、サーバー運用しているRaspberry Pi 1と比べてスペックアップしたのもあってスムーズに動きます。

 

■基本手順は下記を参考に

qiita.com

先の手順はCentOS 7のRas Pi 2,3向けのオフィシャルイメージ公開前の情報なので、以下、異なるところと足りない部分を補記してまとめました。ちなみに私もイメージのSDカードへの流し込みをMacでやりました。

 

CentOS 7イメージのダウンロードは下記からRasPi 2イメージをダウンロード

Index of /altarch/7/isos/armhfp

Macwgetコマンドはないのでcurlコマンドを実行するか、brew install wgetしてwgetコマンドで。

$ curl -LO http://mirror.centos.org/altarch/7/isos/armhfp/CentOS-Userland-7-armv7hl-Minimal-1611-RaspberryPi2.img.xz

Raspberry Pi 3にCentOS 7を入れる場合は、RaspberryPi3.img.xzとつくイメージをダウンロードします。

 

■diskutilでSDカードのデバイス名を確認
MacのSDスロットにmicroSDアダプターを使って挿入するとMacにmicroSDカードがマウントされます。diskutilコマンドを使ってデバイス名を確認します。

$ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *512.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh SSD 511.3 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
...
/dev/disk4 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *31.9 GB disk4
1: Windows_FAT_32 NO NAME 31.9 GB disk4s1

■マウントされたディスクをアンマウント(ディスクは差したままにする)

$ diskutil unmountDisk /dev/disk4

■xzコマンドをbrewコマンドでインストール

$ brew install xz

■ xzイメージの展開と作成
注意: バージョンが変わると当然イメージ名も変わるので注意してください。

$ unxz CentOS-Userland-7-armv7hl-Minimal-1511-RaspberryPi2.img.xz
$ sudo dd bs=1m if=CentOS-Userland-7-armv7hl-Minimal-1611-RaspberryPi2.img of=/dev/disk4
Password: xxxx ←カレントユーザーのパスワードを入れる

※イメージ作成には時間がかかります。ちなみに私の環境では15分くらいでした。

イメージ作成が終わると再度Macに自動マウントされるので、コマンドでデバイス名を確認してアンマウントしてMacから取り出します。

$ diskutil list
$ diskutil unmountDisk /dev/disk4

■RasPi 2を起動
キーボード、LANケーブル、microSDカード、HDMIケーブルなど接続して準備ができたら電源ケーブルを接続してパワーオンする。しばらく待つとHDMIケーブルを接続したモニターにCentOS 7のログイン画面が出てくるので、root/centosでログインします。

デフォルトユーザーに関する情報はログインするかは以下のサイトに書いてありました。

■キーボード
デフォルトのキーボード設定はUSキーボードになっているので、とりあえず一時的に修正したいなら以下のコマンドを実行します。CentOSの初期設定後はssh接続すると思うので、一時的に切り替えるこの方法でいいと思います。

# loadkeys jp106

■日付
日付が定義されていないので、NTPサーバーを使って時刻同期します。これをやらないとgit cloneできないとか色々困る為です。

# date

1970年 1月 1日 木曜日 00:53:22 UTC
# yum install ntpdate
# ntpdate ntp.jst.mfeed.ad.jp
# date
2016年 3月 20日 日曜日 08:09:13 UTC

もしくはdateコマンドを使って時刻を設定します。dateコマンドは月,日,時刻,西暦年の順に指定してコマンドを実行します。デフォルト設定はUTCになっているので注意します。

# date 032008092016

タイムゾーン
タイムゾーンはデフォルトでUTCに設定されています。それぞれ地域のタイムゾーン(例えば日本ならJST)に設定したい場合は次のように実行します。

Asia/Tokyoに設定
# timedatectl set-timezone Asia/Tokyo

現在の設定を確認
# timedatectl status

指定できるタイムゾーン一覧の出力
# timedatectl list-timezones

■時刻同期
時刻がずれるといけないのでNTPサーバーと時刻同期するようにします。
chronyかntpをインストールして自動起動するように設定すれば良いです。

以下、chronyを入れる場合の例です。

# yum install -y chrony

# systemctl start chronyd
# systemctl enable chronyd

参照するサーバーを指定したい場合は次の設定を修正します。
クライアントとして動かすだけでよかったので、次の設定だけ追加しました。

# vi /etc/chrony.conf

...

port 0

参考:

qiita.com 

YUM

私が試した時はミラーの設定は「baseurl=http://mirror.centos.org/altarch/7...」のように固定化されていたので問題は起きないはず。

YUMミラーはaltarch/7/*/armhfp/があるミラーを選択する必要があります(が、日本のミラーは対応するものはなかったはず)。

■セキュリティ的なこと
デフォルトの設定ではrootユーザーでssh接続できるようになっている。けれどこの設定はあまり良くありません。そこでユーザーを作ってそのユーザーにsudoコマンドの実行権限を割り当て、rootユーザーでssh接続できないようにしてみます。

ユーザーpiを作る
# useradd pi
piユーザーにパスワードを設定する
# passwd pi
(piユーザーのパスワードを任意のものを設定
piユーザーにsudoの実行権限を設定する
# gpasswd -a pi wheel

[wheelユーザー]
Ubuntuではユーザーがsudoコマンドを実行するにはsudoグループに追加する必要がありますが、CentOSではwheelユーザーに追加すれば良いです。visudoコマンドを実行してwheelコマンドを実行すると理解できると思います。次のような記述があるためです。

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

SSHサーバーの設定も書き換えます。

sshdの設定でrootログインを拒否する
# vi /etc/ssh/sshd_config
PermitRootLogin no
sshdを再起動する
# systemctl restart sshd

IPアドレスの固定化
CentOS 7のIPアドレスの固定化のやり方に従います。
/etc/sysconfig/network-scripts/ifcfg-eth0をいじるのでもいいけど。  

■ ルートパーティションサイズの拡大

このままの状態だとメモリーサイズ全てが使われていない状態なので、大きいサイズのメモリーを使っている場合もったいない。次のコマンドを実行するとCentOS 7が2回再起動され、ルートパーティションが拡大される(Raspbianで言う所のraspi-configコマンドで"Expand Filesystem"を実行するようなことをこのコマンドでできる...と/root/READMEに書いてありました)。

# touch /.rootfs-repartition && reboot

こんな感じで簡単にCentOS 7を動かすことができました。

 

■トラブル例: 時刻設定について
Ras Piには普通のPCやサーバーにあるようなハードウェアクロックや時刻を保持するような仕組みがない為、再起動すると時刻が1970年1月1日に戻ってしまうので、次のようなエラーが出てログのローテーションに失敗することがあるので注意。対応の仕方は調査中。

/etc/cron.daily/logrotate:

error: bad year 1970 for file /var/log/yum.log in state file /var/lib/logrotate.status

/var/spool/mail/root (END)

回避策としては、NTPと同期するように設定して、時刻が正しくなったら「touch /var/log/*/*」とかで最終書き込み日時を変えるくらいでしょうか。

[2017/1/21更新]

ログの1970年問題は、fake-hwclockをインストールすると良いみたいです。

qiita.com