work.log

エンジニアの備忘録的ブログ

Raspberry Pi 4用のパーツ選定とサーバとしての基本構築メモ

投稿:2020-01-12 15:25  更新:

小型のコンピュータ、Raspberry Pi 4 Model B(通称ラズパイ)を買ったので、動作確認済みパーツの紹介と基本的な構築方法をメモします。

作業はWindows10から行っています。

スポンサーリンク

Raspberry Pi 4のパーツ選定と購入先

ラズパイ本体および、最低限必要なパーツは下記の組合せで購入しました。

今回はラズパイをモニターレスで構築、運用するため、モニターやキーボードは用意していません。また、LANケーブルとSDカードの読み取り装置が別途必要になるので無い場合は用意しておきます。

パーツ 品名 購入先
本体 Raspberry Pi 4 Model B 4GB ヨドバシカメラ
microSDカード Samsung microSDカード64GB EVOPlus Amazon
ケース Geekworm アーマー金属ケース Amazon
電源 5.1V 3A スイッチ付き ACアダプター Amazon

本体およびSDカードを購入するする際は聞き慣れない販売元からは購入しないようにしましょう。

また、ラズパイのストレージにはmicroSDカードを使うので大きさを間違えないようにします。

ラズパイ本体に偽物があるかどうかはわかりませんがmicroSDカードは偽物が出回っているようなので、よくわからない所から買ってしまうとドロンして連絡がつかなくなるという事も十分に考えられます。

なので、本体は安心大手のヨドバシカメラから購入。今回選定したmicroSDカードはAmazonで買うしかなさそうだったので、Amazonで慎重に選んで買いました。

購入ボタンの下に「この商品は、Amazon.co.jp が販売、発送します。」と表示されていれば信用できますが、同じページでも1円だけ下げて偽物を掴ませてくる業者もいるようなので注意が必要です。最近のAmazonは買い物するのも面倒くさいですね。

ケースと電源は中華製を選びましたが特に問題ありませんでした。ケースに関してはシンプルかつ堅牢な作りでしっかり放熱もするので満足しています。

Raspberry Pi 4の初期セットアップ

パーツが揃ったら下記の順でラズパイをセットアップしていきます。

  1. microSDカードの不良セクタを診断(スキップ可)
  2. microSDカードのフォーマット
  3. OSイメージを書き込み
  4. 起動&SSH接続
  5. OSの基本構築

各種セットアップ、動作確認などに必要な物は下記よりダウンロードしてください。

OSは公式提供のRaspbian(Debian)を使いますが、CentOS7等他のOSも使えます。

ただ、最初にCentOS7をインストールしたらヘッドレスブラウザが入らなくて困ったので、Raspbianを選んでおいた方が無難だと思います。

ダウンロード 用途 備考
Raspbian Buster with desktop ラズパイ用のOS(公式 必須
Poderosa SSHクライアント 必須、TeraTermとかでもOK
Check Flash 1.17.0 SDカードの不良セクタ診断 必要に応じて
CrystalDiskMark SDカードのベンチマーク計測 必要に応じて
guiformat FAT32フォーマットツール 必須
Disk Formatter FAT32フォーマットツール 上記と同じ、こちらでも可
DD for Windows Ver.0.9.9.8 イメージ書き込み 必須
SDメモリカードフォーマッター パーティション分割されたSDカードを初期化する 必要に応じて
Win32 Disk Imager イメージ書き込み・イメージバックアップ 必要に応じて
VNC Viewer VNCクライアント 必要に応じて

ラズパイで利用するストレージはFAT16またはFAT32でフォーマットする必要がありますが、32GB以上のmicroSDカードはexFATでフォーマットされているため、これをFAT32フォーマットツールでフォーマットしてあげます。

guiformatとDisk Formatterは同じ用途ですが、guiformatだと上手く動作しない場合があるのでその時はDisk Formatterを使います。

イメージの書き込み、バックアップはDD for Windows、Win32 Disk Imagerでできますが、書き込みはDD for Windowsで、バックアップはWin32 Disk Imagerとちぐはぐな事をしていたみたいで、一応両方のソフトを一覧に載せました。

microSDカードの不良セクタを診断

購入したmicroSDカードに不良セクタが無いかをCheck Flashを使って診断しておきます。

不良セクタがあると読み書きに影響が出るので初期不良なら早めに販売元に言えば交換して貰えると思います。

microSDカードをPCのカードスロットに挿してツールを起動すれば不良セクタの診断ができます。どのドライブにmicroSDカードがマウントされているかはマイコンピュータより確認しておきましょう。

診断中はこのように表示されるので終わるまで暫く待ちます。

診断が終わった後はCrystalDiskMarkで念の為、SDカードのベンチマークも取得しておきます。

大体スペック表通りです。偽物だとスペック表通りに速度が出ない事もあるそうです。

microSDカードをFAT32でフォーマット

今回は64GBのmicroSDカードを使うので、exFATからFAT32へフォーマットしてあげます。

フォーマット前はexFATで認識されています。

guiformatでフォーマットします。デフォルトの状態でスタートを押します。

フォーマット完了後、FAT32で認識されていればOKです。

OSイメージを書き込み

事前にダウンロードしたラズパイ用のOS(Raspbian)を解凍して、DD for Windowsを使ってmicroSDへ書き込みます。

ディスクにmicroSDを選択して、Raspbianのイメージファイルを選択します。デフォルトではRaspbianのイメージが選択できないので、拡張子をすべての拡張子に変更して場所を選択します。

選択後は「書込」を押せば処理が始まります。

書き込み完了後、マイコンピュータよりmicroSDを選択してSSHを有効化させるために「ssh」という名前で空ファイルを作成し配置します。

作業環境によっては拡張子無しのファイルを作るのが若干手間みたいなので、空ファイルをzip化した物を下記に置いておきます。解凍して利用してください。

ダウンロード:ssh

こんな感じに配置すればSSHが使えるようになります。

ラズパイの起動とSSH接続

ラズパイ本体にケースを取り付け、microSD、電源ケーブル、LANケーブルを接続し起動します。

LANケーブルはDHCPが有効なルーターの空きポートに繋げば、起動後に自動でIPが割り当てられるのでそれを次のいずれかの方法で探します。

  • Windowsのコマンドプロンプトから「arp -a」を実行して探す
  • ルーターの管理画面からDHCP割当を確認する
  • iPhoneアプリのNetwork Ping Liteを使う

ルーター、作業PC、ブロードキャストアドレスを除いて応答するIPが見つかったら片っ端からSSHしてみます。

自宅だったらそうデバイスは多くないと思うので簡単に見つかると思いますが、数十台以上繋がっているようなら別ネットワークで試すかDHCPの割当ログをしっかり確認しておきましょう。

Raspbianの初期ユーザとパスワードは下記になります。

  • ユーザ:pi
  • パスワード:raspberry

ログインができた後は固定でIPを振るなり、MACアドレスで割り振るIPを指定したりすれば次回以降は楽になります。

業務で使う物なら固定でIPを設定する所ですが、自宅用なのでOSでは設定せずにルーターの機能でMACアドレスを利用してIPアドレスを割り当てるようにしました。

Raspbianでifconfigを叩けばetherの項にMACアドレスが出てくるので、eth0(ケーブル)、wlan0(Wi-Fi)のMACアドレスをルーターに設定しておくと便利だと思います。

$ ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        ether da:a4:62:d1:ae:31  txqueuelen 1000  (Ethernet)

Raspbianの基本構築

無事ラズパイにSSH接続できた後は下記の順でサーバを構築していきます。

以降はコマンドで作業します。

  1. OSの基本設定
  2. ユーザーの作成
  3. セキュリティ設定
  4. VNCの設定

OSの基本設定

ホスト名変更

$ sudo vi /etc/hostname
$ sudo vi /etc/hosts

タイムゾーンの設定

$ sudo timedatectl set-timezone Asia/Tokyo

ipv6の無効化

$ sudo echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
$ sudo sysctl -p

パッケージのアップデート

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

必要なパッケージのインストール

時刻同期用にchronyを、その他ネットワーク系のコマンドツール等をインストールしておきます。

$ sudo apt-get -y install whois jwhois dnsutils telnet mailutils sysstat screen tree chrony

vimの入れ替え

最初からインストールされているvimは機能が少ないので、普通のvimを入れ直しておきます。

$ sudo apt-get --purge remove vim-common vim-tiny
$ sudo apt-get -y install vim

ついでにvisudoコマンドで利用するエディタを変更しておきます。

nanoは使いにくいので使い慣れているvimでsudoの設定を出来るように変更します。

$ sudo update-alternatives --config editor
There are 3 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3 <= vimを選ぶ
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode

あとは利用するユーザーディレクトリの .vimrc で調整します。

お好みですがこのように設定を入れています。

$ vi ~/.vimrc

set encoding=utf-8
set undolevels=100

Wi-Fiの設定

ラズパイは標準でWi-Fiモジュールを搭載しているので繋ぎます。サーバ用途とは言えLANケーブルが無い方が取り回しが良くなるので自分はWi-Fiで運用しちゃいます。

■ Wi-FiのSSIDを検索する

$ sudo iwlist wlan0 scan | grep ESSID

■ Wi-Fiパスワードの暗号化

接続パスワードを平文で保存するのはあれなので暗号化します。

$ wpa_passphrase my-SSID-1

# reading passphrase from stdin
mypassword
network={
        ssid="my-SSID-1"
        #psk="mypassword"
        psk=kjczataadpfkwi1dthgznwtwuhtybgnhvedwo697ywklijolcnlbinrkwihwkmog
}

■ 設定

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

このように記述します。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
        ssid="my-SSID-1"
        psk=kjczataadpfkwi1dthgznwtwuhtybgnhvedwo697ywklijolcnlbinrkwihwkmog
}

## 次に優先したいアクセスポイントがある場合はこのように
network={
        ssid="my-SSID-2"
        psk=n6jiczpcoz7ldbwxbsauru1vs2offuhgrqfg52zsy2tfznbech3j5gn7gslugyfj
}

OSを再起動してWi-Fiを有効化します。

$ sudo reboot

無事、Wi-Fiに繋がった後はLANケーブルは撤去しても大丈夫ですのでお好みで。

ユーザーの作成

初期ユーザーpiのまま運用しても問題無いですが、外からもSSHで繋ぎたいので念の為新しく一般ユーザーを作成、デフォルトのpiユーザーの設定を少し変更します。

■ 新規ユーザーを作成しsudoを使えるようにする

$ sudo adduser rpuser
$ sudo gpasswd -a rpuser sudo

作成した後は新しいユーザーでSSH接続し直しておく。

■ piユーザーの調整

影響範囲がわからないのでpiユーザーは消さずに、パスワードを変更してsudoを使えないようにしておきます。

$ sudo gpasswd -d pi sudo
$ sudo passwd pi

更にsudoにインクルードされているpiユーザーの設定ファイルを削除します。

$ sudo rm /etc/sudoers.d/010_pi-nopasswd 

これでpiユーザーはsudoを使う事が出来なくなりました。

後から気付きましたがpiのユーザー名を変更した方がスマートだったかもしれません。

■ rootパスワードの設定

rootパスワードを変えておきます。

$ sudo passwd root

セキュリティ設定

sudoやSSH、ファイアウォールなどのセキュリティ周りを設定していきます。

■ SSHのセキュリティ強化

SSHのrootログインを禁止します。パスワード認証を止めて鍵認証へ変更すれば尚良いですがここはお好みで。

$ sudo vi /etc/ssh/sshd_config

# コメントアウトを外し no に設定
PermitRootLogin no

noではなく prohibit-password という設定もあるが、こちらはrootのみパスワード認証を禁止するという設定で鍵認証だとrootログインが出来るっぽい。(未検証)

あとは必要に応じてiptables等をインストールしてファイアウォールの設定をしますが、自宅で使う場合はルーター配下にラズパイがいる事が多いと思うので普通だったら要らないかなと思います。ルーターでポート転送の設定を入れないとどのみちラズパイに繋がらないので。

VNCの設定

GUIを使う予定は無いものの、今回はあえてX Window System入りのデスクトップ用パッケージを選択しているのでVNCで繋いでみます。

VNCに興味が無い場合はここを飛ばして大丈夫です。

まずはRaspbianの起動モードをCLIからデスクトップへと変更します。最初これを知らずVNC接続が出来なくてハマりました。

$ sudo raspi-config 

「Boot Options」→「Desktop / CLI」→「Desktop」の順に選択し設定します。設定後は再起動するよう求められるのでrebootします。

再起動後は下記のコマンドでVNC用の接続パスワードを設定します。

$ vncpasswd -virtual

設定したらVNCサーバーを起動します。

$ vncserver

接続用のipアドレスとディスプレイ番号が表示されるのでそれをVNCクライアントのフォームに入力し接続します。

例)192.168.1.10:1

ラズパイのデスクトップに接続出来たらOKです。

ラズパイは小型で頼りなさそうな見た目ですが中々にスペックが高いのでVNCで繋いでもサクサク動作します。リモートメンテ用のX環境を置きたい時にはラズパイが便利そうです。

VNCを使い終わったらサーバを落としておきます。

$ vncserver -kill :1 <= 末尾にディスプレイ番号を指定

USBポータブルHDDを接続する

容量の大きなデータを扱う場合、microSDのストレージだけでは心許ないしディスクI/Oも遅いのでUSBポータブルHDDを増設してみます。

Western Digital製の2TBのポータブルHDDが丁度余っていたのでこれで試してみます。

OSをシャットダウンしてから口が青いUSB3.0のポートにHDDを接続します。このHDDはUSB給電となっていて電源は要らないものの、既に複数のUSBデバイスを取り付けている場合は電力不足でHDDが動作しないかもしれません。

その場合は、電源が独立したUSBハブを間に挟む必要があります。

OSの電源を入れて起動したらrootにスイッチしてHDDが認識されているかを確認します。

$ su -
# dmesg | less
.
.
.
[    8.632113] sd 0:0:0:0: [sda] 3906963456 512-byte logical blocks: (2.00 TB/1.82 TiB)
[    8.632696] sd 0:0:0:0: [sda] Write Protect is off
[    8.632703] sd 0:0:0:0: [sda] Mode Sense: 47 00 10 08
[    8.633291] sd 0:0:0:0: [sda] No Caching mode page found
[    8.633297] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    8.725583]  sda: sda1
[    8.728021] sd 0:0:0:0: [sda] Attached SCSI disk
.
.
.

# fdisk -l /dev/sda
Disk /dev/sda: 1.8 TiB, 2000365289472 bytes, 3906963456 sectors
Disk model: Elements 25A2   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: BD490458-100B-44E3-9375-747BF8A7E09A

Device     Start        End    Sectors  Size Type
/dev/sda1   2048 3906961407 3906959360  1.8T Microsoft basic data

正常に認識されましたのでマウントします。

特にフォーマット等はせず、出荷当時のNTFSフォーマットのままマウントして使います。

# mkdir /mnt/data
# mount -t ntfs-3g -o permissions /dev/sda1 /mnt/data

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  7.2G   49G  13% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   52M  201M  21% /boot
tmpfs           391M     0  391M   0% /run/user/1001
/dev/sda1       1.9T  128G  1.7T   7% /mnt/data <= マウントされた

※ permissionsオプションはファイルを作成したユーザー権限の情報も維持する為の設定。無いと全てroot権限となる。

自動マウントの設定もしておきます。

まずはblkidコマンドでPARTUUIDを調べます。

# blkid /dev/sda1
/dev/sda1: LABEL="Elements" UUID="CC3E13413E1323CC" TYPE="ntfs" PARTLABEL="Elements" PARTUUID="c06b6b99-351a-4c6d-804b-96809f76aeda"

先程調べたIDを指定しfstabへ下記のように追加し保存します。

# vi /etc/fstab

PARTUUID=c06b6b99-351a-4c6d-804b-96809f76aeda  /mnt/data  ntfs-3g  defaults,nofail,permissions  0  0

再起動してみて自動マウントされていればOKです。

折角なので、ddコマンドで簡単な書き込み速度のテストをしておきます。

■ microSDカード

# dd bs=1M count=100 if=/dev/zero of=/ddtest oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 13.6138 s, 7.7 MB/s

■ USBポータブルHDD

# dd bs=1M count=100 if=/dev/zero of=/mnt/data/ddtest oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 1.53645 s, 68.2 MB/s

10倍位違います。ディスクIOが激しい処理を行う場合はUSBポータブルHDDの領域を使うようにした方が良さそうですね。

簡易のファイルサーバーにする

HDDを増設したのでラズパイを簡易のファイルサーバーにしてみます。

Sambaを使うのでまずは必要なパッケージをインストール。

$ sudo apt-get install -y samba <= 質問には No で回答

設定ファイルはこんな感じに。

$ sudo rm /etc/samba/smb.conf
$ sudo vi /etc/samba/smb.conf

[global]
workgroup = WORKGROUP
hosts allow = 192.168. 127. <= ここに許可するIP、ネットワークを追加
load printers = no
disable spoolss = yes
create mask = 0777
directory mask = 0777
invalid users = root
syslog = 1
log level = 10
log file = /var/log/samba/samba-%m.log
max log size = 1024
dns proxy = no 
display charset = UTF-8
unix charset = UTF-8
dos charset = cp932
max protocol = SMB2
strict allocate = yes

[share]
comment = All User shared Directories
path = /mnt/data <= マウントしたHDDの場所を指定
writable = yes
printable = no
guest ok = no

起動します。

$ sudo systemctl start smbd
$ sudo systemctl start nmbd
$ sudo systemctl enable smbd
$ sudo systemctl enable nmbd

Sambaへ接続できるユーザーを作成し、接続用のパスワードを設定します。

$ sudo pdbedit -a sambauser

PCからSambaへ接続します。

Windowsからだと接続方法は何通りかありますが、適当なフォルダを開いてアドレスバーに「¥¥192.168.1.10」の様に¥マークを頭に二つ付けラズパイのIPを打ち込みます。

ユーザー名とパスワードを聞かれるので打ち込んで共有ディレクトリが見えれば成功です。

CPU温度を監視する

今回はファンレス状態でラズパイを動かしているのでCPU温度を監視しておきます。

ヒートシンク一体型のケースなのでしっかり放熱は出来ているようですが、ソースコードをビルド中等は結構熱くなっているようです。

ラズパイの場合はvcgencmd コマンドでCPU温度を取れるようなので簡単なスクリプトを書き監視します。

vcgencmdコマンドを実行するユーザーはvideoグループに所属させないといけないので変更します。

$ sudo usermod -aG video rpuser

次に温度を取得します。

$ vcgencmd measure_temp
temp=41.0'C

監視アプリケーションにNagiosを使っているのでスクリプトを経由してグラフを書かせてみました。

室温25度前後の部屋でアイドル時は大体40度前後で推移しているみたいです。

ソースのビルド中は60度まで上がっていたのでファンレスの状態でフル稼働だと夏場が少し心配ですね。

ちなみにCentOS7とRaspbianだと後者の方が若干CPU温度が低いです。専用OSだけあって最適化されている感じでしょうか。

データのバックアップ

諸々の構築が終わった後はmicroSDカードの故障に備え、ラズパイを丸ごとバックアップしておきます。

OSの電源を落としカードをまた作業PCにセットして、データをイメージ化し別の場所に保管しておきます。もし、運用中にmicroSDが壊れても新しいカードにこのイメージを書き込めば復旧が簡単になります。

今回はWin32 Disk Imagerを使ってバックアップを取りましたが、説明を読む限りはDD for Windowsでも同じ事が出来るっぽいです。

下記はWin32 Disk Imagerの例ですが、カードスロットにmicroSDを挿して読み込んだ後は、SDカードのドライブを選択しイメージの保存先を指定してReadボタンを押すだけです。

microSDの容量と同じだけのイメージファイルが出来上がるので、HDDの空きには注意。

今回は予備が無いのでやっていませんが、新しいカードにこのイメージを書き込んで復旧できるかテストしておいた方がベターかと思います。

まとめ

ラズパイの構築は以上です。

Debian系のOSを触っていると玄箱をDebian化した時の事を思い出しますが、ラズパイはサクサク動作するしRaspbianの場合は使いたいパッケージがほぼあるので構築中にハマるストレスも無いです。

必要最低限の構成だと諸々1.3万円でラズパイを動かせますのでちょっとしたサーバを建てたい時に重宝しそうです。

スポンサーリンク

コメント

コメントを残す

よく読まれている記事

  • 今日
  • 週間
  • 月間