2017-03-20_000

全然関係ないですが、昨日より新聞を取るようになりました。

なんか、勧誘の若いにぃちゃんが、「子供産まれまして~」「お祝いと思って3か月だけでも取ってもらえませんか」みたいな感じでスマホで子供の写真見せながら攻めてきましたw

おめでたい話で攻めてくるのはずるいと思いましたが、最近自分の周りでは子供が出来たことで、または子供が産まれたことで不幸な結果となっているなぁ・・・なんて思ったら、本当にお祝いしたい気持ちが湧いてきてしまって3か月だけという約束で取り始めました。

そして、新聞をじっくり読み始めたのが夜から。朝刊なのに。

そして、新聞に入っていたチラシでDysonのコードレス掃除機が2万円引きであることを知る!3/20中!

そして、このブログを書き始めている最中に日付が変わって3/21!あー!w

まぁ、春なんで何かを始めてみる、っていうのは良いことだよな。





家内開発用サーバーを新しく

さて、昨年作業用のノートPCであるLet'sNoteが壊れてMouseComputerのノートPCを買って、お外ではVAIO Type PにLinuxMint17.2を入れ弄っているうちにバッテリーが壊れ新しい巨大バッテリーを買ったらデザインを損ね、外は寒いしVAIOさん使わなくなり、かといって家中でMouseComputer使うかと言ったら、体調不良(主に花粉症)で、なんとなく趣味的プログラミングというかお勉強がのっぺりと停滞気味。

しかしね、春って季節は心を動かすんだよ。

なんか始めなくちゃ、ってそわそわするんだよ。

そんなわけで、手始めに家内サーバーを新しくしてみようかと。

そして俺の手元にあるのがRaspberryPi3!小せぇぇぇ!

今家内サーバーは超古いLet'sNoteです。PentiumMとか言うCPUです。古りぃぃぃ!

そしてこのLet'sNoteには32bitOSしか載せられないので、新しいCentOS7は導入できないんだって。なんだとぅ?!

というわけで、RaspberryPi3にCentOS7を導入してサーバー化してみます。


やりたいこと一覧

RaspberryPi3でやってみたいことは以下かな。

  • GitとGitBucketを導入してソース管理
  • Jenkins2を導入してCI
  • テスト自動化にあたってはEtoE意識してSelenium導入したいね
  • Redmine導入して、知見貯め込みや進捗・問題管理

う~ん、2番目と3番目がちょっと自信無いなぁ。


まずはOSのインストール

OSインストールにあたって、自分が用意したものは以下。

  • RaspberryPi3とそれ用のACアダプター
  • MicroSDカード32GB
  • カードリーダー
  • OSイメージ
  • PC(Windows10)
  • イメージ書き込みソフト「DD for Windows
  • イメージ解凍ソフト「7zip

RaspberryPi3用のCentOS7のOSイメージを以下から取ってくる。

上記の「AltArch Release」の「armhfp」の一番右に「RaspberryPi3(img)」というリンクがあるので、それをクリックしてダウンロード。

続いて、そのイメージを7zip使って解凍。

いよいよ、MicroSDカードにイメージを焼く。

DD for Windowsの実行ファイルであるDDWin.exeを選択して右クリックして表示されるメニューの「プロパティ」を選択して開く画面の「互換性」タブで、「互換モード」というところを「Windows XP(Service Pack 3)」に変更して「OK」ボタンクリック。

これで、DD for Windowsを起動すると「対象ディスク」にMicroSDカードのドライブが現れる。

あとはDD for Windowsの右の「ファイル選択」ボタンクリックで、解凍したCentOS7のイメージを選択して「書込」ボタンクリックでOK。

なんか、「対象ディスクサイズより小さな~」「指定したディスクへイメージを書き込みます」とか「ディスクサイズが4GByteを超えています」の警告ダイアログ出るけど、すべて「はい」ボタンクリック。

ここまでがWindows10のPC上での作業。

いよいよ、RaspberryPi3にMicroSDカードをセット、HDMIケーブルでディスプレイ繋げて、USBキーボードも繋げて、有線LANケーブル繋げて、ACアダプター繋げてスイッチオン!

loginのプロンプトが表示されたら、root/centosでログイン。


有線LANの設定

最終的には無線LANで運用したいのだけれど、どうやらそのためにはGithubからそれ用のFirmwareをダウンロードしてくる必要がある。つまり、無線LANやるんだったら、まずは有線LANでネットにつなぐ必要があるのだ。

一時的とは言えどもIPは固定化したいので、以下のコマンドで設定ファイルを編集する。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

変更前は以下。

TYPE="Ethernet"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
ONBOOT="yes"

そして変更後が以下。

TYPE="Ethernet"
BOOTPROTO="static"
NM_CONTROLLED="yes"
DEFROUTE="yes"
NAME="eth0"
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
ONBOOT="yes"
IPADDR="192.168.0.11"
NETWORK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="192.168.0.1"

これでrebootして、PCから192.168.0.11へSSH出来ればOK。


無線LANの設定

まず、以下のコマンドを叩いてみると

# nmcli d
デバイス  タイプ    状態      接続
eth0      ethernet  接続済み  eth0
lo        loopback  管理無し  --

な感じで、やっぱりWiFiっぽい名前の接続が無い!つ~か、WiFiのデバイス自体内容に見える!

(これ見たとき、俺はRaspberryPi3ではなくRaspberryPi2掴まされたのでないか疑惑に襲われたwww)

これは、有線LANのところでも書いたけど、無線LANのデバイスを扱うためにFirmwareをダウンロードしてきてUpdateする必要があるのだ。つ~か、CentOS7イメージにこのFirmwareを含めてくれないものか。。。

つ~わけで、まずはFirmwareをダウンロード・・・の前に、そのFirmwareをGithubから持ってくるためにgitをインストール・・・の前にyumでシステムをupdateしとく。

# yum -y update

上記は多分30分くらいはかかると思う。 で、終わったらgitをインストール。

# yum -y install git

さて、お待ちかねのFirmwareを持ってきてゴニョゴニョやるのは、以下を参考にさせて頂いた。

一応書いておく。

# cd /root
# mkdir wifi
# cd wifi
# yum -y install git
# git clone https://github.com/RPi-Distro/firmware-nonfree.git
# mv /lib/firmware/brcm /lib/firmware/brcm.org
# cp -R firmware-nonfree/brcm80211/brcm /lib/firmware/brcm

次は、Firmwareをupdateするためのrpi-updateを取ってきて実行する。

# curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update
# chmod +x /usr/bin/rpi-update
# rpi-update

上記のrpi-updateが結構時間長いのを追記しとく。
あとはrebootしてあげて、ログイン後に確認してみる。

# nmcli d
デバイス  タイプ     状態      接続
wlan0     wifi      切断済み  --
eth0      ethernet  接続済み  eth0
lo        loopback  管理無し  --

wlan0が認識されてる!
やばい、まだWiFi接続してないけど感動して泣きそうになった。
俺が買ったの、ちゃんと3だったよ!wwwみたいな。

あとは接続設定。
以下のサイトの「Wifi接続設定」ってところを参考にさせて頂いた。

一応書いておくと以下の通り。

# nmcli d wifi
 
(wifiポイントが一覧表示される。この中に自分の家で使ってるものがある、はず!)
 
# nmcli d wifi connect <your_uuid> password <your_keyphrase>
# nmcli d
デバイス  タイプ     状態      接続
wlan0     wifi      接続済み  <your_uuid>
eth0      ethernet  接続済み  eth0
lo        loopback  管理無し  --
# ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.0.11  netmask 255.255.255.0  broadcast 192.168.0.255
        (中略)
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        (中略)
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 192.168.0.255
        (中略)

やばい、繋がった!

試しにPCから192.168.0.2へSSHすると・・・繋がらない!えwww

とりあえず、RaspberryPi3から有線LANケーブル引っこ抜いて再度PCから192.168.0.2へSSHすると・・・繋がった!あ、そうなの?

う~ん、しかしIPが192.168.0.2になってるのが気に入らん。


無線LANのIPアドレス固定化

サーバーは固定IPじゃないと何かとやりづらい。

というわけで、有線LANの時と同様に無線LAN使用時もIPアドレスを固定化してみる。

# vi /etc/sysconfig/network-scripts/ifcfg-<your_uuid>

変更前は以下。

HWADDR=XX:XX:XX:XX:XX:XX
ESSID="<your_uuid>"
MODE=Managed
KEY_MGMT=WPA-PSK
SECURITYMODE=open
MAC_ADDRESS_RANDOMIZATION=default
TYPE=Wireless
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=<your_uuid>
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
ONBOOT=yes

そして変更後が以下。

HWADDR=XX:XX:XX:XX:XX:XX
ESSID="<your_uuid>"
MODE=Managed
KEY_MGMT=WPA-PSK
SECURITYMODE=open
MAC_ADDRESS_RANDOMIZATION=default
TYPE=Wireless
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=<your_uuid>
UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
ONBOOT=yes
IPADDR="192.168.0.101"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
DNS1="192.168.0.1"

変更したのはBOOTPROTOをdhcpからstaticへ。
追加したのが、IPADDRからDNS1までの4行。

これでrebootして、PCから192.168.0.101へSSH出来たよ。ひゃっほーぃ。


MicroSDカードの容量をフルに引き出す!

さて、このままだとSDカードの容量が枯渇する。なぜなら!

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        2.0G  658M  1.2G   36% /
devtmpfs         458M     0  458M    0% /dev
tmpfs            462M     0  462M    0% /dev/shm
tmpfs            462M   12M  450M    3% /run
tmpfs            462M     0  462M    0% /sys/fs/cgroup
/dev/mmcblk0p1   500M   53M  448M   11% /boot
tmpfs             93M     0   93M    0% /run/user/0

つまり、/dev/rootが2.0GBしかありません。いや32GBのSDカードなんだけれども!

これをもとの容量に認識させ直す方法が/root/READMEに書いてあります。
つまり、

/usr/local/bin/rootfs-expand

をやれと。

そして、再度確認。
ちなみに、yum updateかけたりgit入れたりで使用容量は658Mから1.3Gに増えてますけど。

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         28G  1.3G   26G    5% /
devtmpfs         458M     0  458M    0% /dev
tmpfs            462M     0  462M    0% /dev/shm
tmpfs            462M   12M  450M    3% /run
tmpfs            462M     0  462M    0% /sys/fs/cgroup
/dev/mmcblk0p1   500M   53M  448M   11% /boot
tmpfs             93M     0   93M    0% /run/user/0

サイズが2.0Gから28Gに増えてますね。


時間同期

なんか、時間見たらエラいずれとる。。。

# date
2017年  3月 21日 火曜日 17:22:16 UTC

centos7になってntpdだけでなく、新しくchronyってのが入っている。はず。

入ってるのかな?

# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since 木 1970-01-01 00:00:08 UTC; 47 years 2 months ago
  Process: 242 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 226 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 230 (chronyd)
   CGroup: /system.slice/chronyd.service
           mq230 /usr/sbin/chronyd
 
 1月 01 00:00:08 centos-rpi3 systemd[1]: Starting NTP client/server...
 1月 01 00:00:08 centos-rpi3 chronyd[230]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
 1月 01 00:00:08 centos-rpi3 chronyd[230]: Frequency 5.915 +/- 3.261 ppm read from /var/lib/chrony/drift
 1月 01 00:00:08 centos-rpi3 systemd[1]: Started NTP client/server.
 1月 01 00:00:22 centos-rpi3 chronyd[230]: Selected source 210.172.199.38
 1月 01 00:00:22 centos-rpi3 chronyd[230]: System clock wrong by 1490112684.348450 seconds, adjustment started
 3月 21 16:11:46 centos-rpi3 chronyd[230]: System clock was stepped by 1490112684.348450 seconds
 3月 21 16:11:47 centos-rpi3 chronyd[230]: Selected source 45.32.28.76

うわ、入ってるどころか動いてるぞ!なのに、時間ずれてる。これは!
それに「System clock wrong by」とかなんか警告?出てる。これは!

分かんね。

とりあえず、設定ファイルに日本の標準時を作っているNICTを追加して再起動かけてみる。

# vi /etc/chrony.conf
 
 (中略)
 
# Add @2017/03/22
server ntp.nict.jp iburst   ←この行を追加
systemctl restart chronyd
systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2017-03-21 17:31:54 UTC; 11min ago
  Process: 1158 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 1153 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 1155 (chronyd)
   CGroup: /system.slice/chronyd.service
           mq1155 /usr/sbin/chronyd
 
 3月 21 17:31:54 centos-rpi3 systemd[1]: Starting NTP client/server...
 3月 21 17:31:54 centos-rpi3 chronyd[1155]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
 3月 21 17:31:54 centos-rpi3 chronyd[1155]: Frequency 7.843 +/- 2.858 ppm read from /var/lib/chrony/drift
 3月 21 17:31:54 centos-rpi3 systemd[1]: Started NTP client/server.
 3月 21 17:31:59 centos-rpi3 chronyd[1155]: Selected source 45.76.107.191
 3月 21 17:32:00 centos-rpi3 chronyd[1155]: Selected source 133.243.238.163

なんか警告無くなった!ひょっとして・・・

# date
2017年  3月 21日 火曜日 17:44:38 UTC

ノーーー!

あれ?なんだ?UTCって。。。あれ。。。まさか。。。

# timedatectl
      Local time: 火 2017-03-21 17:48:19 UTC
  Universal time: 火 2017-03-21 17:48:19 UTC
        RTC time: n/a
       Time zone: UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

はぅ。。。Time zoneがUTC。。。UTCって何さ。。。
つ~わけで、timezoneを設定してdateコマンドで再度確認!

# timedatectl set-timezone Asia/Tokyo
# date
2017年  3月 22日 水曜日 02:54:48 JST

Yes!!!


まとめ

タバコサイズほどのRaspberryPi3でCentOS7が動き出して感動して夢が広がりんぐです。

まだ全然足りないけど、とりあえずCentOS7の基本設定は出来たんじゃないかと。

RaspberryPi3でサーバー運用出来たら電気代安くなるんじゃ!?

あと、なんだかんだで今年初めてのブログで疲れたわ。。。


追記(2017/04/02)

EPEL、Remi(いづれもyumのリポジトリ)が使えないとか、有り得ないわー。。。RaspberryPi3でCentOS7ってのは、まだ早い気がしてきた。