長らくお世話になっていたmstdn.jpが2020年6月末で閉鎖ということで、自立すべくラズパイを購入。
Raspberry Pi 4BはRAMが4GBまで増強されており安定した稼働が期待できる。
・購入
まず購入品リストである。サーバーとして稼働するのでモニターケーブルは買わずにヘッドレスでセットアップする。値段は全部税抜き。
品名 | 備考 | 値段 |
---|---|---|
Raspberry Pi 4B | RAM 4GB | ¥6262 |
ACアダプタ | USB-C, 5V3A | ¥1250 |
MicroSDカード | 64GB | ¥1000 |
ケース | ヒートシンク・ファン付き | ¥2000 |
以上合計で¥10512(税抜)である。
・組み立て
説明書通りに組み立てる。
・ブートメディア作成
適当に公式サイトからRaspbian(最近Raspberry Pi OSに改名したらしい)をダウンロードする。本体が対応しているかは各自きちんと確かめてからダウンロードしよう。今回はデスクトップ環境を使わないので一番容量が小さいLiteでよろしい。ダウンロードできたらzipファイルを解凍して、適当なソフト(公式のドキュメントに載っている)でSDカードに焼く。SDカードは事前にフォーマットしておこう。ざっと2~3分で書き込みが完了する。
書き込みが完了したら、ヘッドレスセットアップ用に2つほど設定ファイルを追加する。
まずはSSH接続ができるようにするためのssh
(拡張子なし)という名前のファイル。中身は空で良い。
もう1つは無線LANに接続するためのwpa_supplicant.conf
ファイルで、中身は以下のような感じ。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
psk="password"
}
もちろんSSID
やpassword
は各自のアクセスポイントのものに書き換えておく。
上記2つのファイルはSDカードのルートに置いておく。
ここまで出来たらSDカードを取り出してラズパイにぶっ刺す。
・起動
SDカードがラズパイに刺さったら、電源ケーブルを挿す。赤のランプが点灯し、緑のランプがチカチカしてしばらくすると点灯するはずだ。そうしたらSSH接続を試みる。Windows10からはコマンドプロンプトからSSHが使えるようになったので以下のコマンドをそのままコマンドプロンプトから実行する。10以前の(そろそろサポートが切れそうな)Windowsを使っている人はSSHクライアント上で実行する。
> ssh pi@raspberrypi.local
そうしたらパスワードを要求されるので、初期パスワードであるraspberry
を入力してログインする。そうすると
pi@raspberrypi:~ $
となってラズパイ上のターミナルに入れる。とりあえず
$ sudo apt update
$ sudo apt upgrade -y
でソフトウェアを更新しておく。これはまあまあ時間がかかるのでまったり(*´ω`)待っておく。
また、いつまでもpi
ユーザーで作業するのも嫌なので、新規にユーザーを作る。ここではsr
という名前にしておこう。
$ sudo adduser sr
そうするとパスワードの入力を求められるので入力・確認する。その後なんかユーザーの情報を入力を求められるが、全部空でいい。そしたらsudo権限を付けてやる。
$ sudo gpasswd -a sr sudo
一旦ログアウトして、さっき作ったユーザーsr
で入りなおす。
$ logout
> ssh sr@raspberrypi.local
・IPの固定
続いてはIPの固定をする。事前にルーターの設定を確認しておこう。ここではルーターのIPが192.168.128.1, サブネットマスクが255.255.255.0, 動的IP(DHCP)の範囲が192.168.128.100~192.168.128.200とする。静的IPはこの範囲外に置く必要があるので、適当に192.168.128.82を割り当てることにしよう。
/etc/dhcpcd.conf
を編集し、固定IPの設定を追記する。デフォルトではExample static IP configuration:
と書かれた箇所があるので、その付近に書いておくとよいだろう。
interface wlan0
static ip_address=192.168.128.82/24
static routers=192.168.128.1
static domain_name_servers=192.168.128.1 8.8.8.8
DNSサーバーの8.8.8.8とかはお好みでいい。そしたら再起動して、192.168.128.82で接続できるかを試してみる。
$ sudo shutdown -r now
> ssh sr@192.168.128.82
接続できればOK。
・key-basedログインにする
ログインの度にパスワードを打っているのでは面倒臭いし、パスワードベースのログインはセキュリティ的に微妙なので、ここは思い切って公開鍵認証方式に切り替えてしまおう。まずはキーペアを生成する。(余談: 最初は既存のPGPのキーペアでやろうとしたが全然形式が違ったっぽくてダメだった)
> ssh-keygen -t ed25519 -f .ssh/id_ed25519
-f
オプションで鍵ファイルの生成場所を指定するが、ホームディレクトリ下の.ssh
フォルダに作るのが一般的であろう。これを実行すると、秘密鍵ファイルと、末尾に.pub
がついた公開鍵ファイルが生成される。公開鍵ファイルの方をラズパイに転送しておく。
> scp .ssh/id_ed25519.pub sr@192.168.128.82:/home/sr/
続いてラズパイ側の設定をする。まずは先ほど転送した公開鍵ファイルを.ssh
フォルダ内のauthorized_key
ファイルに書き込み、権限設定をする。そうしたら元のファイルは要らないので消してしまう。
$ mkdir .ssh
$ cat id_ed25519.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ rm id_ed25519.pub
続いて/etc/ssh/sshd_config
を編集する。#
でコメントアウトされている部分から以下の4項目を探して編集する。
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ただしPasswordAuthentication
をnoにしてしまうと、万が一設定ファイルに問題があった時にssh接続が完全に不可能になり1からやり直し(SDカードのフォーマットから)なので、心配な人はPasswordAuthentication
は保留して接続テストをし、ちゃんと接続できたあとで書き換えるとよい。ちなみに1回やらかした。
編集したら
$ sudo /etc/init.d/ssh restart
でSSHサーバを再起動してからSSHを繋ぎなおす。パスワードを入力せずにログイン出来たら成功である。
とりあえず準備は整ったので次回はネットワークの設定をしていく。