小型のコンピュータ、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の初期セットアップ
パーツが揃ったら下記の順でラズパイをセットアップしていきます。
- microSDカードの不良セクタを診断(スキップ可)
- microSDカードのフォーマット
- OSイメージを書き込み
- 起動&SSH接続
- 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接続
ラズパイ本体にケースを取り付け、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接続できた後は下記の順でサーバを構築していきます。
以降はコマンドで作業します。
- OSの基本設定
- ユーザーの作成
- セキュリティ設定
- 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万円でラズパイを動かせますのでちょっとしたサーバを建てたい時に重宝しそうです。