2021年6月13日日曜日

WiFi経由でssh接続可能なRaspberry Pi OSのSDカードを外付けモニタを使わず作る


背景

Raspberry Piとは1000円〜1万円で買える一枚板電子計算機(シングルボードコンピュータ: SBC)です。
色々なOSをSDカードなどにインストールして利用できます。
Raspberry Pi OSとは、Raspberry Piの製造元が開発しているOSです。

Raspberry Pi OSをSDカードに書き込んでRaspberry Piで動かすと起動はしてくれるのですが、WiFi設定やssh接続をするとなると外付けモニタとキーボードを繋いで操作が必要になります。
ちなみに、モニタやキーボード無しで取り組むのを「headless」というので、それに関して調べたい場合は「rasperry pi headless ❍❍」で検索すると関連情報が出てきます。

/etc/wpa_supplicant/wpa_supplicant.confに情報を書き込んだり、/bootにファイルを置くことで必要な設定を有効にできるとぼんやり把握していたので、備忘録を兼ねて設定方法を記事に残します。

使ったもの

  • Raspberry Pi 4B
    4GB版を利用しましたが、新しく購入する場合は上記リンクの8GB版の方が余裕があって良いと思います。
  • ヒートシンク
    aliexpressで買いました。到着に2~3週間かかります。
    amazonだと数日で届きます。
  • Raspberry Pi OS imgファイル 2021-05公開版
    Raspberry PIのOSページからダウンロードしました。
    zipファイルを展開すると8GBになるdesktop and recommended softwareを利用しました。
  • SDカード 32GB
  • SDカードをに情報を書き込めるPC
    Ubuntu20.04をインストールしたPCを利用しました。

1.SDカードにimgファイルを書き込む

ddコマンドで書き込みました。
sudo dd bs=4M of=/dev/mmcblk0 if=2021-05-07-raspios-buster-armhf-full.img conv=fsync

書き込んだらSDカードをPCから抜き差ししてパーティションを読み直してください。

参考: Installing operating system images on Linux

macやWindowsを利用している場合は、それ向けの書き込み方法解説ページを参考にしてください。
Copying an operating system image to an SD card using Mac OS
Installing operating system images using Windows

2. WiFi設定ファイルをbootパーティションに作成

bootパーティションに下記のようなWiFi情報を含んだファイル(wpa_supplicant.conf)を作成します。
国コードは日本を意味するJPにしています。
your-wifi-idとyour-wifi-passwordを利用するWiFiの情報に書き換えてください。

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

network={
ssid="your-wifi-id"
psk="your-wifi-password"
}

bootパーティションのwpa_supplicant.confです。rootfsパーティションの/etc/wpa_supplicant/wpa_supplicant.confではありません。
前者は存在していますが、後者は新規作成が必要です。
前者を変えてもWiFiが有効化されていなければ、WiFi(wlan0)が起動しません。

参考: Setting up a Raspberry Pi headless

3. ssh有効化ファイルをbootパーティションに作成

bootパーティションにsshという空のファイルを作成します。
これにより、起動時にsshが有効化されます。

ubuntuの場合は下記のtouchコマンドでsshファイルを作れます
touch /media/$USER/boot/ssh

参考: SSH (Secure Shell)

4. 変更を加えたSDカードでRaspberry Piを起動し、sshでログイン

UbuntuやRaspberry Pi OSなどのLinuxではavahi、macではbonjour、WindowsではPowerShellでResolve-DNSというホスト名を利用した参照が可能なプログラムが動いているので、sshとwifiの設定が成功していれば同一WiFiに居るPRから下記のコマンドでログインできます。
ssh pi@raspberrypi.local

Raspberry Piの初期パスワードは raspberry です。


参考:
IP Address
WSL1 (Windows Subsystem for Linux) で mDNS な `.local` アドレスを解決する

備考1: ssh接続後はパスワードを変更

初期設定のままではipアドレスが分かれば標準のパスワードでログイン可能な状態になっているので、raspi-configでパスワードを変更します。
sudo raspi-config
racpi-config画面で「1 System Options」を選び「S3 Password」を選ぶとパスワードを変えられます。
(raspi-configが更新されるとメニューの項目が変わる可能性がありますが、どこかにパスワード変更の項目があるはずです。)



備考2: host名を変更しておくと、複数のRaspberry Piを動かす環境でのログインが便利

raspberry piが複数接続されているWiFiではraspberrypi.localへのアクセスが期待するように出来ないことがあります。
そのため、そういう環境に持っていく時はhost名を変えておくと便利です。

host名はraspi-configか、hostsとhostnameの書き換えで変更できます。

raspi-configを使う場合

下記コマンドでraspi-configを開き、System Options -> Hostname を選ぶと変更できます。
sudo raspi-config




今回はsamplepiに変更してみます。


変更の反映には再起動が必要です。


更新して再起動したら変更したhost名.local(samplepi.local)でログインできます。


hostsとhostnameを書き換える場合

/etc/hostnameと/etc/hostsにある既存のhost名(raspberrypi)利用したいhost名に変更してRaspberry Pi OSを再起動すれば反映されます。
macやlinuxならSDカードの該当するファイルを直接書き換えられます。

まとめ

bootパーティションにファイルにwpa_supplicant.confとsshファイルを作成することで、外付けのモニタやキーボード無しでraspberry piにWiFi経由でsshログインできました。

変更履歴

2021.09.20
WiFiが有効化しないことがあったので、update_config=1をcontry=JPの後に変更しました。

0 件のコメント :