みんな大好きラズパイ、の今回はヘッドレスセットアップの方法をメモしておきます。
1年半くらい、SanDiskのSDカードで動かしていたラズパイが、いつのまにか繋がらなくなるという症状を最近起こしていた(再起動したら治る)ので、新しいSDカードを導入したときのセットアップ作業の記録です。
もくじ:
はじめに
今回は簡単な自宅サーバ用にするため、デスクトップ環境は不要なのでヘッドレスでセットアップします。これで電源コードさえ繋いでおけば使えるミニマシンが出来上がります。
必要な準備はこんな感じ。一応今回使ったものも合わせて書いておきます。
- Raspberry Pi 3 model B, ACアダプタなど一式
- Raspbian Stretch Lite (2017-11-29-raspbian-stretch-lite.zip)
- Micro SDカード (Toshiba Class U3, MicroSDHC, 32GB)
- カードリーダ (エレコム製USB3.0マルチカードリーダー MR3-A006BK)
- 作業用のWindows PC (Windows 10 Pro)
- SSHクライアント(TeratermやPuttyなどのソフト、またはcmderなどのLinux環境コンソールエミュレータ)
よくあるセットアップ方法では、HDMIコネクタにモニタを、USBポートにキーボードとマウスを接続していますが、今回はヘッドレスなので不要です。
Raspberry Pi 3
Raspberry Pi 3 (model B)は現在、入手しやすいラインナップのなかで最もスペックが高いモデルですね。数少ない無線LANアダプタ(チップ)が搭載されていることも特徴的なモデルです。
あくまで個人的な感覚で言うなら、パソコンとして使うには非力ですが、常時稼働のLinuxサーバとして自宅で使うにはアリ、というくらいのパワーは出ます。
Webカメラや学習リモコンなどのガジェットとして使う、という用途なら、もっとスペックの低いRPi2やZeroといったモデルも選択肢に入ると思います。
ちょっと注意しなければならないのは、電源周り。Micro USBで給電しますが、要求する電力はUSBパワー機器としては高め。パソコンのコネクタに繋いでもまず間に合いません。電流大きめの充電器を流用するか、ネットで調べて実績のある電源モジュールを使うと良いと思います。
ブート用Micro SDカードの作成
RPi3には内部ストレージが搭載されておらず、SDカードをディスク領域として使います。そのため、SDカードにブート用のイメージを書き込んでおく必要があります。
イメージのダウンロード
OSとしてRaspbianを使いました。他にもRPiで動作するOSは色々ありますが、おそらくRaspbianが一番使いやすく、ネットにも情報が多いです。
公式サイトからダウンロードして下さい。今回はデスクトップ環境は不要なのでLite版を使います。
SDカードの書き込み
公式サイトでWindows向けにお勧めされていたEtcherを使いました。
Etcherとは:
- Node.js(Electron)製のイメージライタ
- Github: https://github.com/resin-io/etcher
- ポータブル版あり。環境を汚さず便利
今回は公式サイト(https://etcher.io/)から、作業用PCの環境に合わせて64bit版ポータブルの実行ファイルをダウンロード。
Micro SDカードをリーダ経由で接続し、Etcherを起動します。以下の3ステップで焼けました。Zipの解凍は不要です。
- イメージ(今回はzipファイル)を選ぶ
- SDカードを挿したドライブを選ぶ
- 実行(管理者権限が必要なので確認ダイアログがポップアップ)し、完了まで待ちます
完了した後は、どうやら気を利かせてアンマウントしてくれているようなのですが、ファイルを追加する必要があるので再度接続します。
SSH接続用の設定
RPi3で初回起動時にSSH(サーバ)を有効にするには、ブート用パーティションに「ssh」という名前のファイルを置いておく必要があります。内容は何でも良く、空でも可。
エクスプローラで作成しても大丈夫ですが、私の場合はcmderを使っているのでマウントされたドライブを指定してtouch
するだけでした。
1 2 | # (F:)ドライブにマウントされている場合 > touch F:\ssh |
これで作成は終了なので、SDカードを取り出しておきます。
無線LANのセットアップ
作成したSDカードをRPi3に挿入して電源を入れます(電源USBコネクタを接続)。
SSH接続
まずはLANケーブルで有線接続すると、デフォルトでDHCPが有効になっています。IPアドレスを調べてSSH接続します。
アドレスは頑張って調べて下さい。私の場合は自宅でBuffalo製ルータのDHCPサーバ機能を使っているので、ルータの管理画面でDHCPリースを調べました。
初期の接続アカウントはユーザ名:pi
、パスワード:raspberry
です。
wpa_supplicantの設定
今回使用したアクセスポイントの設定はWPA2-PSK(AES)です。
普通にWifiに接続する場合と同じように、SSID(アクセスポイント名)とパスワードが必要になりますが、今回はwpa_supplicant
を使って設定します。
設定ファイルを作成するために、以下のコマンドを実行します。
1 | $ sudo sh -c 'wpa_passphrase {SSID} {PASSWORD} >> /etc/wpa_supplicant/wpa_supplicant.conf' |
コマンドを解釈すると、wpa_passphrase
コマンドにSSIDとパスワードを指定すると、設定を表す暗号化されたパスワードを含む文字列を返してくるので、それを設定ファイルwpa_supplicant.conf
に追記する、という意味です。
/etc
以下のディレクトリに管理者権限が必要なのでsudo
しています。
上記コマンドの結果、設定ファイルは以下のようになっていると思います。wpa_passphrase
コマンドの結果として、コメントアウトされた平文のパスワードも出力されてしまうので、気になる場合は削除して下さい。
1 2 3 4 5 6 7 8 | country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="{SSID}" #psk="{PASSWORD}" psk=...(encrypted {PASSWORD}) } |
ちなみにキーの出力結果はハードウェア依存ではないので、他のRPi3や、何となれば他のLinuxマシンにwpa_supplicant
パッケージをインストールして作成したキーでも使い回せます。
また、チップやファームの相性で、省電力機能が有効化されて時間経過で接続が切断されることがあるので、下記の設定ファイルも置いておくと有効かもしれません。
1 2 3 | $ sudo vi /etc/modprobe.d/8192cu.conf # 下記を入力して保存 options 8192cu rtw_power_mgnt=0 rtw_enubss=1 rtw_ips_mode=1 |
IPアドレスの固定
固定アドレスはDHCPクライアント設定(/etc/dhcpcd.conf
)を編集して構成します。
インタフェース名はおそらくwlan0
で変わらないと思いますが、アドレスは環境に合わせて入力してください。
1 2 3 4 5 6 | $ sudo vi /etc/dhcpcd.conf # 下記を追記 interface wlan0 static ip_address=192.168.100.10/24 static routers=192.168.100.1 static domain_name_servers=192.168.100.1 |
一旦シャットダウン、有線LANケーブルを外して再度起動すると、無線LANに設定したアドレスでSSH接続できるようになるはずです。
初期設定
一応、ここまでの設定で使い始めることもできますが、追加して実施したほうがいい設定も記載しておきます。
raspi-config
CUIツールとしてraspi-config
が用意されているので、必要に応じて設定していきます。
1 | $ sudo raspi-config |
よくやる設定項目はこんな感じ。
- ログインパスワード
- ホスト名
- ロケール、タイムゾーン(Asia/Tokyo)、Wifi Country (JP Japan)
- ファイルシステムの拡張(Advanced Option -> Expand FileSystem)
スワップ停止
SDカード延命のため、スワップファイルを停止します。
1 2 3 | $ sudo swapoff --all $ sudo apt-get purge -y --auto-remove dphys-swapfile $ sudo rm -rf /var/swap |
不要なパッケージの削除
ネットでよく言及されているパッケージはこんな感じでしょうか。
1 2 3 4 5 6 7 8 9 | $ sudo apt -y remove --purge ... $ sudo apt autoremove -y # プログラミング環境 wolfram-engine sonic-pi scratch # デスクトップ環境 libreoffice* # ドキュメント man manpages libraspberrypi-doc debian-reference-en debian-reference-common |
今回はLite版だったためか、あまり不要なパッケージはありませんでした。