気まま研究所ブログ

ITとバイク、思ったことをてきとーに書きます。

Raspberry Pi 4をサーバ仕様にセットアップする

f:id:AonaSuzutsuki:20200208112125j:plain

こんにちは。
かなり今更ですが、Raspberry Pi 4を手に入れまして、今運用しているRaspberry Pi 3から諸々引き継ごうかと思います。
とりあえず長くなるので今回はRaspberry Pi 4のセットアップ記事からはじめます。

用意した物

f:id:AonaSuzutsuki:20200208110633j:plain

  1. Raspberry Pi 4 Model B 4GB
  2. MicroSD 64GB
  3. USB Type-C 電源アダプタ 5V/3A
  4. HDMI to Micro HDMIケーブル 1m
  5. MicroSD USB変換アダプタ
  6. *Piケース OKdo 3ピース for 4B 透明
  7. *ヒートシンク 40x30x6 熱伝テープ付 for Pi
  8. *冷却用ファン
  9. HDMI モニター
  10. キーボード(有線推奨)
  11. Windows PC (Windows 10 Pro x64)

アスタリスク付きは必須でないものです。

Raspberry Pi 3と電源やHDMIコネクタ形状が異なるので要注意です。
また電源は3Aにグレードアップ?してるのでそこも要注意。
多分市販のスマホ用は2.4A最大が多いのでしっかり見ましょう。

ケースやヒートシンクはあればいいかな程度です。
ただ、結構発熱するのでせめてヒートシンクはあった方がいいとは思います。(効果どれだけあるかはさておき)
また、後述しますが、冷却用ファンもあると尚いいです。

キーボードはRaspberry Pi 3の頃無線だと認識しなかったので有線をおすすめします。
デスクトップ入れる方はマウスも一緒に。
マウスは無線でいけたけど相性かな。

Raspberry Pi 4のセットアップ

ヒートシンクの貼り付け

f:id:AonaSuzutsuki:20200208110659j:plain
まずは付属の両面テープを貼り付けます。
両面テープの切り方クソ雑いなと思ったら大きくはみ出るし大丈夫なんかこれ。
貼る前に切っとくべきだったかな...
また、薄すぎて剥がすのが大変でした。

f:id:AonaSuzutsuki:20200208111840j:plain
あとはヒートシンク置くだけ。
果たしてどれだけ効果あるのか。

結果は一番最後に・・・。

ケースに入れる

f:id:AonaSuzutsuki:20200208111859j:plain
次にケースに入れます。
ケースによって変わりますが、上から入れようにも入んないしこのケースどうやって入れるんだと思ったら底も取れる仕様でした。
しかもなかなか取れなくてマジであってるんかと不安になりましたよ。
全部分解した状態の写真でもいいから購入ページに載っけといてほしい。

ケーブル諸々をブッ挿す

f:id:AonaSuzutsuki:20200208112125j:plain
あとはケーブル諸々をブッ挿します。
写真だと忘れていますが、LANケーブルも挿します。

なお、電源ケーブルだけはまだ挿さないように。
写真はすでに起動させたあとなので挿していますが、Raspberry Piは電源スイッチがないので挿した瞬間電源入ってしまいます。
電源入っても何も動かないので挿してしまったらちょっと時間置いてから抜きましょう。

これで下準備は終了、次はOS書き込みじゃ!

OSのインストール

OSのダウンロード

Raspberry PiだとRaspbianをインストールしてしまうところですが、サーバ用途だとちょっとパフォーマンスに難があるのでここは正式対応が発表されたUbuntu Serverをインストールします。

まずはUbuntu Serverのプリインストールイメージをダウンロードします。
Install Ubuntu Server on a Raspberry Pi 2, 3 or 4

32bitと64bitがありますが、お好みで。
インストールしたいアプリに32bit制限がないなら64bitでいいと思います。
また、特に新機能が必要とかでなく、安定性がほしいならLTSを選びましょう。
通常版はサポート期間が短いので更新が頻繁に行われます。

で、この記事を執筆してる間にページ構成変わってしれっとUbuntu 18.04.3 LTSが増えていた。
つい昨日の話なんだけどUbuntu 19.10しかなかったために通常版入れてしまったぞ...。

ダウンロードできたら適当なアーカイブソフトで展開しておきます。
xz拡張子なのでWinRARやら7-Zipで展開できるかと。

OSのインストール

Raspberry PiではデスクトップPCとは異なり、予めインストールされたイメージをmicroSDへ書き込みます。
今回はWin32DiskImagerを用いで書き込んでいきます。
ダウンロード先はややこしいですが、FilesからArchiveのwin32diskimager-1.0.0-install.exe(執筆当時)をダウンロードします。
バージョンは都度変わる恐れがあるので臨機応変に。

f:id:AonaSuzutsuki:20200208112232p:plain
Image Fileに展開したimgファイルを指定し、DeviceにmicroSDのドライブレターを指定します。
あとはWriteを押せば自動で書き込んでくれます。
ちゃんと書き込めたか不安ならVerify Onlyでチェックできます。

なお、以前のmicroSDを流用する場合に論理サイズが実サイズと異なる場合はSD Card Formatterでフォーマットの必要があります。
ただ、開発が変わって「論理サイズ調整」の項目が無くなった為今のバージョンでどうするかはわからない。
多分CHSフォーマットサイズ調整なんだけどユーザー容量(なんのことを指すのか不明)が8GB以下でしか使えないらしい。
空のSDカードでグレーアウトしてたから多分論理サイズが8GB以下の時に使えるんだと思うのだけど、64GBが58GBしか認識しないとかだったらどうすんだろ。
チェックなしでもちゃんとフォーマットしてくれるかどうかは未検証。
だめそうなら別のソフト(あるのか知らないけど)探すかSD Card Formatter v4をどっかから拾うしかなさそう。

Raspberry Pi 4にmicroSDカード挿入

あとはRaspberry Pi本体に挿し込むだけ。
挿入口は裏面に一つだけmicroSDサイズの穴があるので金の接続面が上部になるように挿入します。

OSのセットアップ

ログイン

f:id:AonaSuzutsuki:20200208113616j:plain
電源を入れてしばらくするとログインするように促されます。
ただ、いつまで経っても出ない時はエンター押すと出ます(描写バグなのか昔から文字が出ない時がある)。

デフォルトはユーザー名とパスワードいずれも「ubuntu」なのでこれでログインしましょう。

ubuntu login: ubuntu
password: ubuntu

ログインするとパスワード変更するように促されるので適当に変更しておきましょう。
なお、USキーボードレイアウトになっているのでアンダーバーなどの記号を使う場合は気をつけましょう

とりあえずSSHで接続してみる

ServerではデフォルトでSSHが有効になっているので接続確認しておきます。
パスワード変更するとSSHの接続情報がでるらしいですが、LANケーブル挿し忘れていたためか出ませんでした。

というわけでまずはIPアドレスを確認します。

$ ip addr
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:72:a2:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.87/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
...

するとネットワークインタフェースがずらりと出るのでeth0のIPアドレスを控えます。
今回は192.168.1.87です。
なお、eth0は異なる名前の場合があるかも。
また、当方はIPv4環境しかないので、IPv6のみで運用する場合はわかりません。

あとはWindowsmacOSなどでsshコマンドで接続するだけです。
今回はCygwinSSHで接続します。

$ ssh ubuntu@192.168.1.87

パスワードが聞かれたら接続できた証です。

一通りパッケージのアップグレード

パッケージの更新が結構溜まってるので今のうちに一気にやっちゃいましょう。

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

接続先の関係で激遅ですが、辛抱強く待ちましょう。
ミラーサーバー試したところまだ対応してないのか404が結構出たので今はこれで我慢かな・・・。

キーボードレイアウトの変更

キーボードがUS配列だと何かとめんどくさいのでJIS配列に変更します。
以下のコマンドを打ち込みます。

$ sudo dpkg-reconfigure keyboard-configuration

するとセットアップ画面が出るので 「Generic 105-key PC (intl.) -> Japanese -> Japanese -> The default for the keyboard layout -> No compose key
の順に選択します。

あとは再起動すればJIS配列になってるはず。

$ sudo reboot

SSHの設定

SSHを公開鍵認証方式に変更する

出先でサーバいじったりする場合にSSHを使って操作しますが、パスワード認証だとセキュリティ上不安が拭えません。
そこでリモートのみ公開鍵認証方式にして秘密鍵所有者のみに接続を許可し、ローカルネットワーク上ではめんどくさいだけなのでパスワード認証にします。
なお、SSHの設定を変更するのでSSHからではなく、直のコンソールで作業することを推奨します。

お好きなエディタで「/etc/ssh/sshd_config」を開きましょう。

$ sudo nano /etc/ssh/sshd_config

...

#RSAAuthentication yes # only ssh1
PubkeyAuthentication yes
PasswordAuthentication no 

Match Address 192.168.1.*
  PasswordAuthentication yes 

既に幾つか設定されているので、既にある項目の場合はそこを変更し、無い場合は追記します。

ますは、「PubkeyAuthentication」をyesにします。
これで公開鍵認証が有効になります。
なお、ssh1を用いる場合は「RSAAuthentication」をyesにします(通常はssh2なので不要)。

また、「PasswordAuthentication」をnoにします。
これでパスワード認証が無効になります。

Match文はアドレスが「192.168.1.0-255」の場合のみ次の設定を反映します。
今回はパスワード認証をローカルネットワーク上からの接続のみ適用します。
アドレスのワイルドカードはネットワーク環境によって変わるので都度変更してください。
なお、Match文は末尾に書かないとエラー出るので要注意。

あとはSSHを再起動します。

$ sudo /etc/init.d/ssh restart

エラーが出なければOK。

接続用のキーの生成

お次に公開鍵と秘密鍵を生成します。
ここの操作はローカルネットワーク上のWindows端末などの接続したい端末から行います。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rvv/.ssh/id_rsa): ~/.ssh/id_rsa_pi4
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_pi4.
Your public key has been saved in id_rsa_pi4.pub.
...

これで公開鍵と秘密鍵が生成されます。
なお、ワーキングディレクトリはデフォルトだとユーザディレクトリ(~/)なので個別にファイル名指定する場合は「~/.ssh/ファイル名」にしないとユーザーディレクトリに直置きされます。

サーバへキーの送信

生成できたらあとはサーバに送信して登録します。
もちろんローカルネットワーク上でやらないと弾かれるので気をつけてください。

$ ssh-copy-id -i ~/.ssh/id_rsa_pi4.pub ubuntu@192.168.1.87

-iオプションは「~/.ssh/id_rsa.pub」のデフォルト値の場合は省略可能です。

接続確認

試しに「/etc/ssh/sshd_config」にてMatch文内のPasswordAuthenticationをnoにして接続してみましょう。
ローカル環境でもパスワード認証が通らなくなっているはずなので公開鍵認証で接続します。

ssh -i ~/.ssh/id_rsa_pi4 ubuntu@192.168.1.87

これでつながればOK。
リモートからだとこのように鍵を指定しないとアクセスできなくなります。
なお、-iオプションは「~/.ssh/id_rsa」なら省略できます。
接続確認できたら設定を戻しておきましょう。

デスクトップ環境 Ubuntu Mate

最後に必要であればデスクトップ環境を入れることもできます。
Raspberry Pi 3はメモリが1GBしかなかったので問答無用で切ってましたが、4GBもあればデスクトップ環境があってもいいでしょう。
ってか今回は逆にデフォルトで入ってないので自分で入れないといけない。

公式では「Xubuntu」か「Lubuntu」か「kubuntu」の3つのデスクトップが記載されていた(細かく確認してないけど今はないと思う)ものの、今回は以前から使用していたUbuntu Mateを入れます。

$ sudo apt install ubuntu-mate-desktop

サーバの都合にもよりますが、めちゃくちゃ遅いので2時間くら作業して暇を潰します。
するとディスプレイマネージャを「gdm3」にするのか「lightdm」にするのか聞かれるので好みの方を選びます。
f:id:AonaSuzutsuki:20200208114000j:plain
私はlightdmを選びましたが、どちらが優れているかとかは知らない。
確かRaspberry Pi 3時代のUbuntu Mateはlightdmだったはず。

あとは再起動すればデスクトップが現れるはず。

$ sudo reboot

なお、インストール後のデフォルトはUbuntuになっているのでUbuntu Mateに変更してからログインしましょう。
f:id:AonaSuzutsuki:20200208114029j:plain
ここを押すとデスクトップモードがいくつか出てきます。
MATEを使用する場合はMATEを選んでからログインします。
f:id:AonaSuzutsuki:20200208114101j:plain

また、使用していて気がつきましたがUbuntu Mateを入れるとfcitxが二つ動作して片方がゾンビ化します。
日本語キーボード周りのせいなのかUbuntu Mateのせいなのかわかりませんが、特にメモリ消費してるわけじゃなさそうだし当面放置します。

ヒートシンクの効果

最大温度とパフォーマンスについて

ヒートシンクなしで試してないからわからないけど、アイドリングで60度キープでした。
効果あんのかこれ・・・?
ケースがほんのり温かくなってるから一応放熱はしてるようだけど、これだけだと過負荷のときに熱暴走しそう。

公式FAQにて温度について以下のように言及されています。

The Raspberry Pi is built from commercial chips which are qualified to different 
temperature ranges; the LAN9514 (LAN9512 on older models with 2 USB ports) is 
specified by the manufacturers as being qualified from 0°C to 70°C, while the SoC 
is qualified from -40°C to 85°C. You may well find that the board will work outside 
those temperatures, but we're not qualifying the board itself to these extremes.

*FAQs - Raspberry Pi Documentation | What is its operating temperature? Does it need a heatsink?より引用

SoCは-40度-85度となっており、60度だと一応まだ余裕があります。
なお、Raspberry Pi 4にLAN9514はついてないのでスルー。

また、同じ箇所の後ろの方にヒートシンクについても言及されています。

You should not need to use a heatsink, as the chip used in the Raspberry Pi is 
equivalent to one used in a mobile phone, and should not become hot enough to 
require any special cooling. However, depending on the case you are using and the 
overclocking settings, you might find a heatsink to be advantageous. We do 
recommend the use of a heatsink if you are overclocking the Raspberry Pi 3 Model 
B. Of course, if you just like the look of one, you will not hurt the Raspberry Pi by 
placing an appropriately-sized heatsink on it.

*FAQs - Raspberry Pi Documentation | What is its operating temperature? Does it need a heatsink?より引用

モバイルフォンと同等のチップだからヒートシンクは特に必要ではないみたい。
使用用途や環境によってはあれば効果が見られるかも程度のようですね。
しかしながら、今回は真冬の結構寒い部屋で試している為、夏場の過負荷になるとちょっと心配ですね。
いくら85度まで余裕があるとはいえギリギリを攻めたくないですし、精神衛生上よろしくありません。

もう一個オーバークロック温度について言及があるのでそれも。

Overclocking and overvoltage will be disabled at runtime when the SoC reaches 
85°C, in order to cool the SoC down. You should not hit this limit with Raspberry Pi 
Models 1 or 2, but you are more likely to with Raspberry Pi 3 and Raspberry Pi 4B. 
For more information see this section of the documentation. Overclocking and 
overvoltage are also disabled when an undervoltage situation is detected.

*Overclocking options in config.txtより引用 オーバークロックだから直接は関係ないけど、SoCが85度に達すると冷やすためにオーバークロックと過電圧を止めるよという記載です。
直接的には書かれていませんが、85度以上になるとあまりよろしくないことが伺えます。

また、Raspberry Pi 4では温度が上がるとオーバークロック関係なくクロックが下がるようになっています。
公式のドキュメントで直接的なことが書かれているのを見つけられませんでしたが、実験している記事(Raspberry Pi 4 Cases, Temperature and CPU Throttling Under Load)がありました。
ここまで極端な状態にはならないでしょうけど、場合によってはパフォーマンスが下がるので冷却にはある程度力を入れたいところ。

ファンの取り付け

ってことでだいぶ前に買って放置していたファンを急遽取り付けることに。
確か秋月電子通商の通販で100円程度の適当に買ったやつだったと思います。
この手のファンは結構種類ありますが、剥き出しコードじゃなくてちゃんとコネクタ付いてるやつのほうが楽なのでそっちおすすめします。
参考程度に5V30mm角 DCファン コネクタ付とか
私の持ってるやつじゃないので購入する場合はスペックは確認してくださいね。

で、私の買ったケースはファン未対応なので固定方法を模索していましたが、いちいちドリルで穴開けるのもめんどくさいので両面テープで適当に付けてみました。
f:id:AonaSuzutsuki:20200208143437j:plain
送風の向きは外から中へ風を送る形にしています。

すると、気流の計算一切してないゴリ押しマウントなのにだいたい35度くらいまで下がりました。
これだけでこんな下がるのかとちょっとびっくりしてますが、効果覿面です。
ただ、この手のファンは急に逝くのでヒートシンク+ファンがやっぱり安定かな。
どちらも高くないのでサーバ用途なら導入しちゃえ!

なお、計測時に使った簡単なシェルスクリプト置いておきます。

#!/bin/sh

TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
CALCTEMP=$(echo "scale=2;${TEMP} / 1000" | bc)
echo "${CALCTEMP} 'C"

「38.29 'C」のような感じに出力されます。

お次は本題のWordpressSSLの移行について書きます。
とりあえずセットアップ編でした〜。