Raspberry Pi Zero W の headless セットアップ

河本孝之(KAWAMOTO Takayuki)

Contact: takayuki.kawamoto@markupdancing.net

ORCID iD iconORCID, Google Scholar, PhilPapers.

First appeared: 2021-02-17 16:33:06,
Modified: 2021-02-18 08:38:12,2021-02-22 11:22:34,
Last modified: 2022-01-04 08:27:01.

はじめに

Raspberry Pi Zero W, introduced in MagPi 55
MagPi, Issue 55 (March 2017), pp.64-65.

Raspherry Pi” は、イギリスの Raspberry Pi Foundation が開発している「シングルボード・コンピュータ」です。シングルボード・コンピュータとしては、他にも同じくイギリスの BBC(英国放送協会)が母体となった Micro:bit Educational Foundation が開発している “BBC micro:bit” などがあり、またシングルボード・コンピュータに近い組み込み用途の「ワンボード・マイコン」として、Arduino Project が開発・提供する “Arduino” という基板とソフトウェアの一式も普及しています。

Raspberry Pi Zero W

シングルボード・コンピュータの特徴は、コンパクトなプリント基板に必要最小限の CPU や入出力インターフェイスを付けただけのコンピュータであり、小型で、消費電力が少なく、そして何よりも低価格です。しかも、ここ数年の技術的な進展や市場の動向によって、CPU やストレージ・デバイスの価格が安くなったため、小さな基板ですが Linux をそのままインストールして GUI 環境を実行できるほどのパフォーマンスを提供できるようになっています。また、付属しているインターフェイスを使って、マイクやスピーカーや USB 機器を接続したり、GPIO と呼ばれる汎用の入出力ピンで追加の基板などを増設し、更に多様で高機能な処理も提供できるため、家庭で使う簡易サーバとして組み立てたり、あるいは業務用に計測・監視システムを運用している事例も多々あります。そういう事例が紹介されているウェブ・ページや記事を見て、僕は一つの計画を立てました。

僕の自宅は、他の大多数の家庭でも同じだと思いますが、玄関にチャイムが設置されています。しかし、古いマンションだからなのか、チャイムの挙動に問題があって、外からチャイムのスイッチを押した際に、ボタンを押下するときの「ピン」が鳴らず、指の力を緩めたときの「ポーン」しか鳴りません。本来なら、大家さんと相談して付け替えるべきなのでしょうが、それは今後の話です。そして、仮に音の鳴り方に問題がなかったとしても、音が奥の部屋まで聞こえないという別の問題があります。しかも、いま自宅の付近では数箇所でマンションの建築工事が進んでおり、日中はそれなりに音がしているため、宅配便業者さんが荷物を届けに来たり、また管理人さんが来訪されてチャイムを押しても、奥の部屋では音が聞こえないため応対できず、宅配便業者さんは在宅中にもかかわらず気の毒に不在票を入れていった(つまり再び来てもらった)ことが何度もありますし、管理人さんから直に話は聞いていませんが、何かの用事で来られても不在だと思って引き返したことが何度かあるかもしれません。これでは困るので、計画を考えた当初は、玄関にマイクで音を拾うための Raspberry Pi を置いて、bluetooth などの無線通信で奥の部屋にあるスマートフォンやパソコンから音が出るようにすればいいだろうと考えました。しかし、実際に調べてみると bluetooth では規格の仕様からして奥の部屋までに安定して通信できる保証がなく、さりとて玄関から奥の部屋まで USB ケーブルを這わせると、USB ケーブルというのは長さが 1m を越えると急に割高となって、奥の部屋まで 15m ていどのケーブルを買うと 20,000 円くらいになってしまい、これでは低予算でチャイムの音を奥の部屋へ伝えるという目的には合っていません(そもそもケーブリングでいいなら、Raspberry Pi を使わずに自立した USB マイクをチャイムの近くに設置して、そこからケーブルを奥の部屋まで這わせたらいいだけです)。

A plan to use two systems of Raspberry Pi Zero W 最初の模式図。二台の Raspberry Pi が遠くて Bluetooth が使えないので、いまは両方の Raspberry Pi をそれぞれの無線 LAN 機器に Wi-Fi でアクセスさせる計画になりました。

そこで、次のプランとして、2台の Raspberry Pi を無線 LAN で通信させるというアイデアを思いつきました。既に有線の LAN は奥の部屋まで届いていますし、奥の部屋には無線 LAN のアクセス・ポイント機器もあるため、自宅内の LAN 上で2台の Raspberry Pi を通信で接続する環境にすれば、玄関で USB のマイクから拾った音を無線 LAN 経由で奥の部屋にある Raspberry Pi に送信し、奥の部屋にある Raspberry Pi の USB micro-B コネクタ(オス)と USB A コネクタ(メス)を繋ぐケーブルを追加して、そして USB A コネクタ(オス)と 3.5mm のスピーカー端子を繋ぐ変換ケーブルも使って、ごくありふれたスピーカーから音を出すことができるだろうと想定したわけです。いま、そのプランにしたがって2台の Raspberry Pi を組んでいるところなのですが、実はセットアップしている最中に幾つかの深刻な問題が起きて、計画は中断しています。(マイクの音に酷いノイズが入ることと、無線 LAN の接続が頻繁に切れてしまうこと。)

そこで本稿では、ひとまず Raspberry Pi Zero W をセットアップする手順だけをご紹介します。

冒頭に戻る

Raspberry Pi を手に入れる

本稿は “headless”* と呼ばれるセットアップの手順をご紹介しますが、まず Raspberry Pi を手に入れないと話は始まりません。Raspberry Pi には色々なモデルがあって、つい先ごろ発売が始まった Raspberry Pi Pico は、日本国内の正規輸入代理店の一つである Switch Science が税込みですら550円(2021年2月9日時点)という価格で販売しています。最も高額な Raspberry Pi 4 Model B(8 GB)というモデルでも10,340円(2021年2月9日時点)ですから、一つの独立して動作するコンピュータとしては、デスクトップ・コンピュータ用に組み込まれている CPU と変わらないような値段で買えるわけです。

*“headless” というのは、ふつうの脈絡で使う英単語としては「バカの」とか「指導者不在の」という意味を持っていますが、コンピュータ業界では「キーボード等の入出力デバイスを使わない」という意味があるようです。そのため、他にも “headless computer”(サーバのことです)とか “headless browser”(GUI ではなくコマンドラインで動作する WWW ブラウザのことです)などという表現があります。また、最近では HTTPS で URI にアクセスする API リクエストに対して、表示とは無関係にデータをレスポンスとして返すだけの目的で構築・運用されているコンテンツを “headless website” と呼ぶこともあるようです。僕も某キャンペーン案件で、クライアントへ定期的にレスポンスとして JSON データを返すだけの headless なウェブサイトを、クラウドのサーバ構築からシステム開発までを担当し運用していたことがあります。

今回、僕は安価に導入できること、無線 LAN や Bluetooth をサポートしていることという二つの条件で Raspberry Pi Zero W というモデルを選びました。簡単に言えば、無線 LAN に対応するチップを搭載している基板として最も安いモデルだからです。しょせんは素人として初めて購入する基板が何千円もしていたのでは気楽に試せませんし、そもそもシングルボード・コンピュータを使ってみるという娯楽*とは異なる本来の目的があってのことなので、ワイヤレスのマイクとスピーカーを買えば同じていどの値段で済むような話なら、そちらの解決策を採用するに決まっています。

*ホビーとして Raspberry Pi で遊ぶつもりなら、別のモデルを選んでいたかもしれません。ただし、実際に使い始めてみると数多くの課題や問題が出てきて、チャイムの音を奥の部屋でも聞こえるようにするという当初の目的をすぐに実現するのは難しいという結論になりました。そのため、現状では既に趣味的な、つまり Raspberry Pi そのものをいじくり回して色々なことを試してみるという実態になってしまっています。であれば、そのついでに、後から Raspberry Pi を使い始めてみようとする方々に、少なくとも馬鹿げた徒労はさせたくないと思って、こういう文書を制作しているわけです。

もちろん、試行錯誤してみることが良い経験になる場合もありますが、それは Raspberry Pi を利用する新しいアイデアを思いついたり、基礎的な数学の勉強などで取り組めばいいのであり、OS のセットアップで適切な configuration を見つけるなどということに、全ての初心者が時間をかけて取り組む必要があるとは思えません。そもそも、Raspberry Pi はプログラミング教育という用途で開発された基板なのですが、まさか小学生がチップの動作仕様から生じる問題を解決するべくドライバを自力で開発できるように提供されているわけではない筈です(そんなハッカー級の小学生がいるなら、Raspberry Pi でいったい他に何を教えるというのでしょうか)。

ということで、Raspberry Pi Zero W というモデルを Raspberry Pi の公式サイトで見つけて、これを買うことにしました。もちろん、ここで問題になるのは、「どこで買うか」です。最初に結論を言えば、国内の販売代理店で購入するのが最善だと思っています。その販売代理店さんがアマゾンや楽天などでも一部の商品を出品していますが、販売代理店が独自に EC サイトや受注の仕組みを持っているのであれば、それを利用する方がよいでしょう。

Malicious sales of Raspberry Pi Zero W at Amazon.co.jp

上記の画像は2021年2月9日にアマゾンで “raspberry pi zero w” というキーワードで検索した結果の中から選んだ商品の事例です(検索の結果として、基板とは別の関連商品もヒットしてしまうので、基板の販売事例だけを集めたわけです)。国内の正規販売代理店であるケイエスワイや Switch Science で1,320円(2021年2月9日時点、税込み)で販売されている Raspberry Pi Zero W が、アマゾンだとこんなにバラバラの、しかもかなり割高な価格で販売されています。もちろん、OS を書き込んだ microSD カードが付属しているとか、拡張用のピンを増設してあるとか、あるいはアマゾンが徴収するマージンを最初から上乗せして価格を設定しているという、或る程度は事情の分かる理由もあるとは思いますが、他の方法で、しかも大して手間もかからず、個人情報や決済情報の保護についても重大な不安があるわけでもない方法で安く買えるなら、そちらを選ぶべきでしょう。そして、もちろんご承知のとおり、アマゾンには転売屋も数多く出品しており、販売代理店から安く購入して、アマゾンで高く売って差額を稼ぐという人々もいます*

*そのため、Switch Science やケイエスワイなどの正規販売代理店では、EC サイトの登録ユーザに対して、基板単体での販売を1台に限定したり、2台目以降はケースとのセット販売に限定するなどの措置を取っているようです。しかし、セットで購入してからケースと別々に転売したり、アカウントを大量に登録して購入するような転売屋もいるでしょうから、アマゾンや楽天で購入するよりも、可能であれば正規の販売代理店から直に購入する方が安いでしょう。

Official retailers Raspberry Pi Zero W

Raspberry Pi 財団から公式に認定されている正規の販売代理店は、Raspberry Pi の公式サイトでハードウェアの商品情報ページは末尾に掲載されています。このような情報は、ウェブサイトのデザインが変更されると簡単に無意味となるため、少なくともウェブサイトのドメインが変わらない限りは、閲覧したサイトのどこで情報を確認できるか、定期的にチェックするとよいでしょう。それから、ここで社名や店名を挙げているのは宣伝のためではないので、他にも金沢のマルツエレックをはじめとして Raspberry Pi を扱っている会社は知ってますが、それらの事業者を本稿で全て列挙したり、あるいはどこが代表的な取り扱い事業者なのかを調べて伝える必要があるとは思っていません。また、そうした事業者の情報を列挙したりご紹介しないことで、本稿の価値や意義が無くなったり下がるとも思っていません。

Raspberry Pi の本体や関連商品は、商品ごとに日本でも数多くの企業が販売代理店として登録されています。現在、Raspberry Pi Zero W を購入するにあたっては、上記のように家庭用の正規販売代理店として、株式会社ケイエスワイ(Raspberry Pi Shop)と株式会社スイッチサイエンス(Switch Science)が登録されていて、業務用途では Digi-Key Electronics の日本法人アールエスコンポーネンツ株式会社が登録されています。ただし、業務用途での販売代理店として登録されている事業者でも個人向けの販売に対応しているようです。その他、共立電子産業株式会社株式会社アイ・オー・データ機器ヨドバシカメラでも代理店として販売しているようですが、それぞれの会社で販売している商品の小売を代行しているだけという事例もありますし、シングルボード・コンピュータの取り扱いについて何か特別な配慮があるわけでもなさそうなので、やはり専門に扱っている正規販売代理店を選ぶ方がよいと思います。また、Raspberry Pi 公式サイトでは OKDO のような日本語ページをもつ事業者も販売代理店として紹介していますが、このような事業者の(たぶん機械翻訳した)翻訳ページで掲示される「販売規約」は、日本国内の法律に準拠した「特定商取引に関する法律に基づく表記」とは異なる基準で書かれている可能性がありますし、こういう事業者を「日本の」代理店として紹介することには疑問があります。

ということで、以前から他の製品(BBC の Micro:bit とか)についても情報を見ていた Switch Science のサイトを利用していたという経緯から、僕は Switch Science で Raspberry Pi Zero W を注文しました。(購入の具体的な手順は、他にも購入できるサイトはありますし、本稿のテーマにとっては大して重要な情報でもありませんから、割愛させていただきます。また、本稿は Switch Science の事業活動に敬意を払いつつも、宣伝を意図しているわけではないため、敢えて購入手続きの詳細は書きません。)いずれにしても、注文すると、1台目は次のような体裁で送られてきました。サイズは長辺が約 224mm ですから、一般的な高校数学の教科書(A5版)くらいです。

Retailer's result 1

箱を開けると、こうなっています。蓋の裏には「寒いよね、ポチってくれてありがとう❤」とハンコが押してあります。たぶん、夏に購入すると違うハンコが押してある筈なので、興味がある方は夏に買って下さい。

Retailer's result 2

そして、後から思いついて2台目を注文した際の中身はこうなっています。写真に僕の住所が写り込んでいたので、その箇所に修正を入れてあります。

Retailer's result 3

この他にも、最初は headless を想定していなかったので、HDMI から mini HDMI への変換アダプタや HDMI ケーブルを梅田のヨドバシカメラで買ってきたり、後から普通のスピーカーで音を鳴らそうと思い立って USB A 端子から 3.5mm のイヤホン用端子へ変換するケーブルをアマゾンで買ったりしているのですが、それは後から公開するページでご紹介します。

Retailer's result 4

上の画像は、2件の注文内容を Switch Science のサイトで確認できる注文履歴として表示したものです。合計で6,164円となっています。いまのところ、他に購入したケーブルとか変換アダプタとか microSD カード等を追加すると、合計で8,000円近くの費用がかかりました。というか、1万円以内に抑えないと、本来の目的(離れた場所の音を拾って奥の部屋で聞こえるようにすること)を達成するだけなら他の既製品で実現できる筈なので、これが限界だと思っています。

冒頭に戻る

headless セットアップの概略

さて、本稿はまだ序盤が終わったにすぎないため、headless セットアップの概略を最初に書いておきます。これまでに4回ほどセットアップをやり直しているので、それなりに手順は理解していますが、headless セットアップというだけでも他に色々な手順があるため、ご自身の環境や用途に応じて選んでください。

  1. 必要な作業条件を揃える。(既にご紹介した機材の他にも、microSD カードや、OS を microSD カードに書き込むパソコンや、無線 LAN の環境が必要です。)
  2. headless セットアップしたい OS を選び、microSD カードに OS を書き込んで初期設定を追加する
  3. OS が起動した後の初期設定をする。(OS が起動した Raspberry Pi Zero W は Wi-Fi 通信で接続できるため、無線 LAN に対応したデスクトップ・パソコンあるいはノート・パソコンから ssh で Raspberry Pi Zero W にリモート・ログインする。)

これが手順の概略です。要するに microSD カードへ OS を書き込んで初期設定するということであり、ひとまずこうした簡単な手順の中だけでも、無線 LAN での接続設定とか、ssh を有効にするとか、幾つかの注意したいポイントがあります。そして、みなさんが Raspberry Pi Zero W を使う用途によって幾つかの選択肢がありえるので、具体的に全ての選択肢を実行してみたわけではありませんが、幾つかの選択肢があれば少しでも言及しておく方がよいと考えています。

冒頭に戻る

1. 必要な作業条件を揃える

Raspberry Pi 財団の公式サイトでは、Raspberry Pi の組み立てなりプログラミングについて、参考になる文書を数多く公開しています。その中で、“Setup / Quickstart” と “Installation” というカテゴリーで解説されているのが、headless セットアップに関連する内容です。これらのカテゴリーで公開されている文書は、すべて Creative Commons の “CC BY-SA 4.0” というライセンスで公開されているので、本稿でも文章を自由に引用・翻訳させていただきます。(但し、公式サイトの解説は不十分な内容もあるため、当然ですが必要に応じて注釈を付けたり言葉を補います。)

まず、“Setup” のページで列挙されている必要項目は以下のとおりです。

上記のリストは、あくまでも一般的な用途を想定しているため、headless セットアップでは不要な項目もあります(そして、自明と言えば自明ですが、本当に必要な項目である筈の Raspberry Pi 本体も念の為に列挙しておくべきだと思います)。また、headless セットアップでは、Raspberry Pi Zero W に OS をセットアップするにあたって、他にも必要なものがあるので、上記のリストを Raspberry Pi Zero W への headless セットアップ用に敢えて書き換えるとすれば、次のようになるでしょう。

以上のようになるので、項目を上から順番に取り上げて説明します。

(1) Raspberry Pi Zero W 本体

Requirements (1): Raspberry Pi Zero W

基板が必要であることは自明ですが、敢えて列挙しています。そして、Raspberry Pi Zero W そのものについて詳しくは説明しませんが、他のモデルと比較した上での特徴を書いておくと、第一に 802.11 b/g/n 規格としての Wi-Fi と(“Wi-Fi” というのは IEEE_802.11 の一部の通信方式に名付けられた登録商標です)、Bluetooth 4.1 や BLE(Bluetooth Low Energy)とに対応する無線アクセス用のチップを搭載していること、第二に USB micro-B 規格のコネクタで電源供給を受けること、第三に USB OTG(On-The-Go)に対応する USB ポートをもつこと、第四にタイプ C とも呼ばれる mini HDMI のディスプレイ・ポートをもつこと、第五に CSI(Camera Serial Interface)に準拠したコネクタをもつこと、第六に HATs(Hardware Attached on Top)という拡張用基板の独自仕様に対応する40ピンの GPIO ヘッダー(コネクタ)をもつこと、などが挙げられます。Raspberry Pi 公式サイトでは、少なくとも2026年までは生産されると公表されています。

(2) 電源

Requirements (2): PSU

Raspberry Pi Zero W の電源供給ユニット(PSU)仕様によると、電圧についてはモデルの違いに関係なく一律に 5.1V と決まっています*。そして Raspberry Pi Zero W の推奨電流は 1.2A となっています。基板に接続する周辺機器への電源も供給するために必要とされる最大の電流は PSU 自体の供給能力、それから接続するコネクタの必要な値によって左右されます。基板だけで消費する値として、Raspberry Pi 公式サイトの「典型的な(typical)」場合という条件では 150mA とされていますが、これはあまり気にしなくてもよいでしょう。実際には、そんな低い電流だけで済むわけがないので、電流の値はもっと大きな電流をサポートする PSU を用意しなくてはいけない筈です。それゆえ、推奨値が 1.2A となっているわけです。

*よくある 5V ではなく 5.1V なのは、ケーブルの長さによって生じる電圧降下を考慮して余裕をもたせてあるわけですが、電流が大きく変動しない条件で使うなら、5V でも問題はないでしょう。逆に、電流が 1A から 2A などと変動する条件で運用するなら、電圧効果による影響が基板側で大きくなります。よって、もし心配となる条件で運用するなら、USB 用の DC/DC コンバータ・モジュールを基板に追加して基板側の電圧が下がりすぎないように調整して運用するようお勧めします。

電源について気をつけたいのは、USB のハブから電源を拾ってくるのは避けたいということです。なによりも、ケーブル1本で接続している「バスパワー」というタイプの USB ハブから変換ケーブルや変換アダプタを通して Raspberry Pi Zero W に接続することは、お勧めできません。このようなハブでは、他に接続している機器で消費する電流が大きいとハブの供給できるキャパシティを超えてしまい、電力の供給が不安定になるからです(またバスパワーの場合、ハブ自体も電源の一部を消費することに注意しましょう)。仕方なく USB ハブから接続する場合は、「セルフパワー」というタイプの製品、つまり大容量の電流を供給できるハブを使う方が良いわけですが、セルフパワーのハブにはサージ電圧を起こして電流の逆流(backfeed)を引き起こす欠陥品が多く出回っており、これによって Raspberry Pi に過剰なサージ電流(軽微な範囲ならノイズとして処理される)が流れ込むと故障の原因になります。

PSU として Raspberry Pi 財団の公認電源アダプタを買うのが手堅い選択には違いありません。しかし、他の選択肢が全く駄目だとか高いリスクがあるかと言えば、そうでもありません。上記で指摘したような、電流が不足したりサージ電流が起きるような条件になりやすい商品を使わなければいいわけです。つまり、(1) Raspberry Pi の稼動システム一式だけでコンセントからの電流を専有できること、(2) 電流の大きな変動は常にどんな電源でも起きる可能性がありますが(落雷や停電など)、少なくとも使っている PUS 自体の欠陥で基板に大きな影響を与えるサージ電圧が発生しないことという、PSU の選択としては当たり前のような条件を揃えておけばよいでしょう。そういうわけで、僕の自宅で既に所持しているコードやアダプタから見繕ってみると、上の写真で並べたように、スマートフォンやデジタル・カメラの充電用として発売されている USB ポート専用のアダプタ(右)や、USB ポートが付いた電源タップ(左)に、両端のコネクタが USB A コネクタ(オス)と USB micro-B コネクタ(オス)になっている USB ケーブルを繋げばいいわけです。これら PSU は、大多数が 5V となっていて、電流は 1A くらいのものが多いので、Raspberry Pi Zero W に追加の機器を接続して USB から電源を供給するという拡張をあれこれとやらない限りは、さほど不安を感じるほどのスペック不足ではないと思います。いずれにしても、やろうとしている目的に応じて、どのていどの機材を組み合わせるのか、それぞれの拡張ボードや、コネクターに接続して使う周辺機器に必要な電流は合計すればどれくらいなのか、そうしたことを調べてから選ぶのが妥当です。(僕の目的に即して言えば、チャイムの音を玄関で拾う方の基板には USB 接続の小さなマイクだけを接続します。残念ながら、この小さなマイクは消費電力などの詳しいスペックが製造元で公表されていないのですが、かなり大型の USB マイクでも 150mA ていどですから、基板と合わせても 1A を越えるようなことにはならない筈です。他にも色々と繋げて試している方の結果でも、せいぜい合計して 500mA といったところでしょう [Eames, 2017][国野, 2017][Scratchpad@usagi1975.com, 2018]。

Raspberry Pi に使う電源ユニットについては、[Roberts, 2017] にも詳しい解説が掲載されています。正規品の紹介だけでなく、代替品をオンラインで購入するときの注意点すら書かれているので、参考になるでしょう。

Requirements (3): microSD cards

(3) microSD カード

Raspberry Pi Zero W の基板には、microSD カード対応のスロットが実装されています。この状況で microSD カード以外のストレージ・デバイスを敢えて使おうとする事例は考えにくいため、他のサイズのストレージ・デバイスは考慮しません(もちろん SD カードを挿して microSD カードのスロットに接続するような向きの変換アダプタも発売されていますが、新品の microSD カードが買えるような値段なので、汎用性の点からはメリットがあるとは思えません。加えて、スマートフォンのユーザには大容量の microSD カードへ買い替えた経験がある方も多く、既に使っていない microSD カードを持っている方もおられるでしょう。容量が少なすぎると使えませんが、8 GB ていどの容量があれば、十分に Raspberry Pi OS Lite で headless でのセットアップができます。

さて、Raspberry Pi 公式サイトのドキュメントによると、まず次のように要件が書かれています(なお、そのまま訳しておいて言うのも変ですが、ストレージの記憶容量を “size” と呼ぶのは、あまり一般的とは言えません。ふつうは “capacity” を使います。特に、ここの文脈で「サイズ」と言ってしまうと、特定の記憶容量だけしか microSD カードが販売されていないかのような誤解を与える恐れがあります)。

デスクトップ環境に加えて推奨ソフトウェア一式を含む Raspberry Pi OS(フル・バージョン)を NOOBS 経由でインストールするには、少なくとも 16 GB の容量をもつ SD カードが必要です。同じくフル・バージョンの Raspberry Pi OS をディスク・イメージとしてインストールするなら、少なくとも 8 GB のサイズが必要になります。また、Raspberry Pi OS Lite をディスク・イメージとしてインストールするなら、少なくとも 4 GB のサイズがある SD カードを推奨します。

SD cards

上記の説明で “NOOBS”(New Out Of Box Software)と呼ばれているのは、microSD カードへ記録してから microSD カード内で実行し、OS をインストールするための専用ソフトウェアのことです。OS を設定するためのソフトウェアとは違います(OS の設定は raspi-config という別のプログラムが Raspberry Pi OS に付属しています)。インストール結果のディスク内容をそのままファイルとしてまとめたディスク・イメージを microSD カードの外部のから書き込む仕組みとは違って、NOOBS は microSD カード内部での実行環境を前提にしているため、今回の headless セットアップとは正反対に、モニターやキーボードを Raspberry Pi に接続していないと扱えないという点で、僕は NOOBS を使ったことはありません。また、NOOBS はあらかじめ幾つかの OS ごと書き込まれるため、ストレージの容量を無駄に消費しますし、NOOBS に格納されている OS は自動でアップデートされないため、古いままで放置されるというリスクもあります [Ferdinand, 2020]。

Raspberry Pi OS をインストールする専用ソフトウェアとして、現在は “Raspberry Pi Imager” というツールが提供されており、headless でのセットアップでは Raspberry Pi Imager をお勧めします。microSD カードに書き込みできない環境なら(予め NOOBS や特定の OS が microSD カードに記録されたキットでも購入しない限りは)、microSD カードに NOOBS が書き込まれた状況には進めないでしょう。つまり、自力で NOOBS を microSD カードへ書き込める環境、つまりインターネット回線を保有していて、なおかつ microSD カードにアクセスできるコンピュータ(もちろんスマートフォンでも可能です)が手元にあるなら、無理に NOOBS を使わなくても Raspberry Pi Imager を書き込み元のデバイスから起動して、目的の microSD カードへ必要な OS だけを書き込めば十分です。

なお、NOOBS を使いたい方は GitHub のリポジトリで公開されていますので、こちらからダウンロードして下さい。2020年11月でもメンテナンスは続いているようですが、最新版であるバージョン 3.0 は2018年11月で正式なバージョン・アップが終了しています。

ということで、headless のインストールで採用するのは “Lite” バージョンの Raspberry Pi OS なので、最低でも 4 GB のディスク領域が必要だと分かります。しかし、OS のイメージだけで済むわけはありません。ログは続々と(少なくともローテーションで保存できる容量が限度に達するまでは)増えていきますし、ソフトウェアのアップデートなり、後から追加するソフトウェアやデータの領域なり、もっと余裕がないと実用的なストレージ・サイズとは言えないでしょう(僕らのようなサーバ技術者なら、こんなことは殆ど常識の類ですが、サーバというものの運用経験がない人も Raspberry Pi を使い始めているため、念の為にこういう内容も取り上げています)。手元に余っている microSD カードがあるなら、8 GB ていどの容量があれば使えるでしょう。新しく買うなら、幾らでも巨大なストレージを買えるならともかく、少額で十分に有効なパフォーマンスを期待して良いだけのスペックとしては、現在の市場価格に照らして言えば 32 GB くらいの microSD カードを買っても良い筈です。実際、僕が追加で購入した二台目の Raspberry Pi Zero W に使う microSD カードをアマゾンで買ったとき(2021年2月時点)は、キングストンの 32 GB というストレージ容量のカードで、税込価格が690円でした。いくら安価にセットアップしたいとは言え、この程度の予算はかけてもよいでしょう。なお、一台目の Raspberry Pi Zero W に使った microSD カードは、スマートフォンに使わなくなって自宅に余っていた 64 GB という容量の東芝製 SD カードを使いました(いま使っている AQUOS zero2 というスマートフォンは microSD カードを使えないモデルだからです)。それぞれのスペックは下記のとおりです。

メーカー 容量 規格 スピード 購入年 購入時の税込価格
東芝 64 GB microSDXC UHS-I U3 Class 3 2016 3,880円
Kingston 32 GB microSDHC UHS-I U3 Class 10 2021 690円

表の項目で「規格」とあるのは、カードの記憶容量と関係があります。それから容量やスピード・クラスが違いますし、どちらも価格を自由に付けられる並行輸入なので、単純な比較はできないかもしれませんが、わずか5年で 1 GB あたりのコストが 60.6 円から 21.6 円に下がっているのは注目に値します。なお、安い microSD カードには並行輸入品も数多くあります(アマゾンの場合、販売者名義が製造・発売元名義になっていても、たいていは並行輸入品です)。並行輸入品は、国内の一般的な家電量販店で買うときと比べて割安の場合もあれば割高の場合もあり、また品質の保証や修理も販売元からは受けられないことが多く、日本語の解説書が添付されていないこともあるので、ご注意下さい。スピード・クラスは幾つかの指標があるので、現在ではクラスという速度の最低保証値を参考にすると良い筈です。上記では、後から購入したカードが “Class 10” であり、“Class 3” である東芝のカードと同じ OS を書き込んで所要時間を比較すると、確かに書き込みは著しく速くなっています。並行輸入品には粗悪なケースも多々あるため、書き込みのスピードが遅いどころか数ヶ月で認識されなくなることもあるのですが、試しに買ってみる値段としてなら、1,000円くらいは妥当でしょう。もちろん、どちらの製品も(標準的なサイズである)SD カードとして使うためのアダプタが付属していますので、最初から microSD カードのスロットがある場合は別として、SD カードのスロットしか無いパソコンに挿入して扱うときは、そのアダプタに microSD カードをしっかり差し込みます。(後からも述べますが、パソコンのスロットは表裏にご注意下さい。私の環境だと、ドスパラの Windows パソコンにあるスロットは裏向き(カードの裏を上にする)で、Macbook Pro は表向きでした。向きを間違えたまま無理に押し込むと、カードやスロットの端子部が破損する恐れがあります。

よく、Raspberry Pi OS を入れる microSD カードは 32 GB がよいと言われることがあります。僕は上記のとおり 64 GB のカードを使っていますが、microSD カードの規格で SDXC というのは 32 GB 以上の容量で使われており、Windows のパソコンに接続されているスロットへアダプターなどで 32 GB 以上の容量がある microSD カードを差し込むと、Windows では「exFAT」か「NTFS」という形式でしかカードをフォーマットできません。しかし Raspberry Pi OS は FAT32 形式のストレージ・メディアにしか正しく書き込めないため、このままだと 64 GB の microSD カードには正しく Raspberry Pi OS を書き込めない(いや、書き込めたかに見えても動作しない)ということになります。公式に配布されている Raspberry Pi Imager というソフトウェアは、そのような状況でも microSD カードを FAT32 形式でフォーマットできます。逆に、Windows や Mac のパソコンは持っていても SDXC 規格にあたる大容量の microSD カードしか持っていない状況では、そのままだと NOOBS を microSD カードへ FAT32 という形式で書き込めないのですから、Raspberry Pi Imager を導入する方がよいということになります。

なお、Windows で 32 GB を越える容量の microSD カードを FAT32 にフォーマットしても 32 GB までしか容量が使えないと書いているページもありますが、実際には 2 TiB(テビバイト。「テラバイト」は、ちょうど1兆バイトという意味でも使われるので、正確なストレージの容量を示すときに使われる単位です)まで扱えます。ただ、Windows 2000 以降では 32 GB 以上のフォーマットをしないような仕様となっています。これはフォーマットやファイル・システムの管理に要するリソースという点から、敢えてそのような制限が設けられており、その理由を明解に説明している資料は殆どなかったのですが、実はリチャード・スピードの記事ではっきりと分かりました。それは、Microsoft を退職した Dave Plummer という技術者が公開している YouTube のムービーで、「俺がそう決めたからだ(“because I said so”)」と言っているからです。

クラスターを大きく設定すると巨大なボリュームを扱うにはいいが、その多くが無駄になるという恐るべきコストがかかってしまう。32 キロバイトのクラスターを選ぶと、Hello, World のように数バイトしか使わないプログラムを記憶する場合であろうと、そのプログラムは 32 KB 全てを咥え込むのだ。

「僕らはそれを『クラスターの無駄』と言った」とプラマーはビデオで説明し、「そして、大きなボリュームで FAT32 にフォーマットすると、それは避け難い無駄となる。では、どれくらいなら無駄に大きなボリュームとなるのだろう? どういう点で、『いや、それはあまりにも効率が悪いし、そんなボリュームを FAT32 でフォーマットするのは馬鹿げてるよ』と言えるのか? 僕が直面したのは、そういう状況での判断だった。」

[Speed, 2021]

(4) OS を SD カードへ書き込むパソコン

スマートフォンで microSD カードに Raspberry Pi OS Lite を書き込める Android アプリケーションもあるため*、正確にはパソコンだけというわけではありません。とは言え、Android 用のアプリケーションは SD カードを読み書きする環境が他にない場合の手段として覚えておけばよい筈であり、書き込みのスピードや通信回線の性能から言っても、まっさきに選択するようなものではありません。それから、もしパソコンも Android のスマートフォンも持っていないという方であっても、販売代理店では NOOBS を書き込んである microSD カードを単体で販売していたり、あるいは NOOBS を書き込んだ microSD カードが付属する入門キットやスターター・キットの類を販売していますので、そちらを利用するとよいでしょう。

*Android 用のアプリケーションとして、Pi SD Card Imager というアプリケーションが、ほぼ唯一の書き込みソフトウェアとして公開されているようです。

多くの場合に、microSD カードへ Raspberry Pi OS を書き込む手段はパソコンとなります。僕の環境では、microSD カードと SD カードのスロットを搭載している Windows マシンと、SD カードのスロットを搭載している MacBook Pro を使いました。両方を利用してみた感想は殆ど同じであり、特にどちらがいいとか悪いという理由はありません。Raspberry Pi Imager の UI は Windows 版でも macOS 版でも全く同じです(それぞれの環境で Raspberry Pi Imager のインストール手順が違うのは自明なので、比較するポイントにしません)。

Requirements (4): Computers

ただ、「パソコン」とは言っても SD カードのスロットがない製品もありますから、パソコンがあればいいというわけにはいきません。オンラインで注文したり店頭で購入するときに SD カードのスロットがあるかどうかを確認していない方もいるとは思いますが、Windows マシンの場合は、筐体の前面にスロットがないなら、SD カードのカード・リーダを手に入れて、USB ケーブルで接続して SD カードを扱うことになるでしょう。Mac の場合は、2011年以前か2016年以降に発売された MacBook Pro は SD カードのスロットを内蔵していません。MacBook Air や iMac なら2011年以降に発売されたモデルには SD カードのスロットがあります。2011年以前の Mac だと SDXC の規格に対応していないとのことなので、10年以上前のモデルかもしれない Mac を使っている場合は確認が必要です。

パソコンについては、導入・運用環境や条件に想定の難しい違いが色々とあるため、概括的な要件しか書けません。また、SD カードのスロットがない環境だと、USB ケーブルで接続するカード・リーダを手に入れて使うことになると思いますが(もちろん、個人が提供しているツールなので、情報セキュリティの観点からは推奨はできませんが、こういう場合は Android のアプリケーションで microSD カードに Raspberry Pi OS を書き込むという手もありえます)、カード・リーダも色々な製品がありますから一概にどれがいいとは言えません。ただし、先に電源の解説でも指摘したとおり、パソコンと USB で接続するカード・リーダであれば、安定して電源を供給できるセルフパワーというモデルの製品をお勧めします(セルフパワーだと USB ハブにカード・リーダーが付属しているタイプの製品が多いです)。

(5) インターネット回線

そして最後の条件が、インターネット回線です。もちろん、Raspberry Pi OS や NOOBS が最初から書き込まれている microSD カードを購入するなら不要と言いうるかもしれませんが、よほど特殊な状況で Raspberry Pi を導入するというわけでもないなら、スマートフォンからのテザリングなども活用して、インターネットへの接続は確保したいものです。そもそも、最初から microSD カードに OS が入っているとは言っても、必要が生じたソフトウェアを追加したり、既存のソフトウェアをアップデートするためにインターネットへ接続する回線は必要となります。(もちろん、追加のソフトウェアやパッチだって、スマートフォンでダウンロードしたファイルを microSD カードへ追記してから Raspberry Pi OS でコンパイルし、インストールしたりパッチを当てることだって可能かもしれませんが。)

そうした一切の追加が必要ないくらいの要件、あるいは非常に制約された条件で Raspberry Pi を(しかも headless セットアップによって)使うということであれば、そのような方は OS が起動して何らかのソフトウェアが立ち上がりさえすればいいという、初歩的で気楽な運用を少しだけ体験したいか、あるいは何らかの(語弊はありますが、多くの場合に犯罪目的で)即座に起動する環境が欲しいかのどちらかでしょう。どちらにせよ、僕がここで解説する相手として想定している人物や用途とは違うので、セットアップで支障が生じても、それぞれ自分で解決してもらうしかありません。気楽な方は、ちゃんとお金を払ってサポートを受けて下さい。厳しく制約された状況でセットアップするようなプロの犯罪者は、僕の解説を読む必要などないでしょう。

どれくらいの回線速度が必要なのかは、何か客観的に〈システム的な要件〉があると言うよりも、寧ろファイルをダウンロードできる所要時間としてあなたが我慢できる限度によります。100 Mbps の速度で契約している回線(実際には 30 Mbps くらいしか出ない)で、それなりの時間を使ってファイルをダウンロードしていても良いということなら、特にそれ以上の回線速度が謳われているプランへ変更する必要はない筈です。僕の自宅では、NURO の光ケーブルでのインターネット回線を契約していて、どこへ接続するかで結果はかなり違ってくるのですが、Ookla が提供しているスピード・テストで大阪府堺市にある tdlabs (sakai, Sony Network Communications) で計測すると、下りが 357 Mbps、上りが 897 Mbps となっています。これだけの速度があれば十分でしょう。

冒頭に戻る

2. headless セットアップしたい OS を選び、microSD カードに OS を書き込んで初期設定を追加する

さて、ようやく headless でのインストール手順を始めます。手順の表現として「headless セットアップしたい OS を選び、microSD カードに OS を書き込んで初期設定を追加する」というのは、幾つかの処理を繋げてまとめてあるため、これを幾つかの処理に分解して一つずつ説明しましょう。

  1. (1) パソコンへ Raspberry Pi Imager をインストールする
  2. (2) microSD カードをパソコンへ接続する
  3. (3) [任意] microSD カードを FAT32 でフォーマットする
  4. (4) microSD カードへ書き込む OS を選ぶ
  5. (5) microSD カードに目当ての OS を書き込む
  6. (6) microSD カードにアクセスする
  7. (7) headles セットアップに必要なファイルや設定を追加する
  8. (8) microSD カードをパソコンから解除して取り外す
  9. (9) microSD カードを Raspberry Pi Zero W のスロットへ挿入する
  10. (10) Raspberry Pi Zero W に USB ケーブル(電源用)を接続する
  11. (11) Raspberry Pi OS Lite の起動を LAN 上で確認する
  12. (12) パソコンのターミナル・ソフトで Raspberry Pi OS Lite の ssh サーバへ接続する

(1) パソコンへ Raspberry Pi Imager をインストールする

Setup (1)

Raspberry Pi の公式サイトにあるページへアクセスして、Raspberry Pi Imager をダウンロードします。Windows でも macOS でも手続きは同じです。他に、Linux (Debian) 用の .deb 形式のパッケージも用意されています。インストールの手順は OS ごとに違っているため、お使いの環境に相応しい手順でインストールしてください。

(2) microSD カードをパソコンへ接続する

Setup (2)

次に microSD カードをパソコンへ接続します。たいていはアダプタで SD カードの体裁でソケットへ挿し込むわけですが、直に microSD カードを挿入できる拡張ボードを載せているパソコンもあります。なお、上記の写真(右)でお分かりのように、僕の Windows マシン(ドスパラの Galleria)は SD カードのスロットだけでなく microSD カードのスロットもあるのですが、SD カードのスロットは上下を逆にして挿入しないといけません。標準的な向きで入り辛いからといって、無理に入れようとするとカードやスロットのコネクタにダメージを与える恐れがあるため、お使いのマシンでスロットに挿し込む際の表裏は、あらかじめ確認して下さい。

(3) [任意] microSD カードを FAT32 でフォーマットする

microSD カードのフォーマットは、少なくとも Raspberry Pi Imager を使う場合は必須ではありません。OS を書き込むときに、FAT32 形式へのフォーマットも実行されているからです。特段の事情がなければ、次の (4) に進んでも問題ないことを確認しています。

購入したばかりの microSD カードをスロットへ挿し込むと、フォーマットの必要があるとか、中身を認識できないといった警告が表示されることもあります。ひとまず警告の表示は全て無視して、Raspberry Pi Imager を起動しましょう。もちろん、パソコンに接続した microSD カードはフォーマットしてもいいもの、つまり既存の中身が何も無いか、あっても真っ更に消してしまって構わないものなので(念の為、確認はしてください。大事な写真を保存していた microSD カードと取り違えるといった不幸は防ぎましょう)、これからフォーマットしてしまうのですから警告のあるなしは殆ど関係ありません。

Setup (3)-1

Raspberry Pi Imager が起動すると、上記のような画面が現れます。まず、真ん中の “CHOOSE SD CARD” と表示されているパネルをクリックして、操作するドライブを指定しましょう。(Raspberry Pi Imager の UI は、昨今の流行である flat design の影響だと思いますが、やや扱いに違和感を感じます。このような UI デザインだと〈クリックできる箇所〉だということが分かりにくいので、ユーザビリティの観点からは工夫する必要があるでしょう。)

Setup (3)-2

上の画像は 32 GB の microSD カードをフォーマットする際の画面です。なお、この Raspberry Pi Imager の画面は macOS(Big Sur)で動作しています。操作を選択できるドライブが一覧表示されますから、目当ての microSD カードであることをしっかり確認して、選択(クリック)しましょう。

Setup (3)-3

Windows 版の Raspberry Pi Imager では、このような画面になります(64 GB の microSD カードを挿入した場合)。同時に複数の microSD カードを挿入している状況は少ないでしょうから、取り違えることはないと思いますが、くれぐれもフォーマットして良いドライブかどうか、確認しましょう。なお、Windows 版と macOS 版での操作や画面は殆ど同じなので、以降は全て macOS で使っている画面のキャプチャーで解説します。

Setup (3)-4

いったんメインのメニューに戻ってから、今度は “CHOOSE OS” というパネルをクリックします。microSD カードのフォーマットも、ここで選ぶようになっているのです。メニューでは OS を選ぶことになっていますが、もちろん OS を選ぶのはフォーマットしてからです。“Operating System” の一覧を下まで辿れば “Erase” という選択肢が出てきますので、これを選択しましょう。それからメインのメニューに戻って右端の “WRITE” というパネルをクリックすると、microSD カードのフォーマットが始まります。

冒頭でも書いたように、Raspberry Pi OS Lite を microSD カードへ書き込むにあたって、最初にフォーマットという単独の処理をする必要はありません。実際、microSD カードに書き込みたい OS を最初から選んでもいいのではないかと考えたくなります。結論から言うと、それでも問題はありません。実際に、64 GB の microSD カードを敢えて NTFS 形式でフォーマットしてから、Windows 版の Raspberry Pi Imager で直に microSD カードへ Raspberry Pi OS Lite を書き込んでから Wi-Fi 接続の設定を MacBook Pro で追加して起動すると、ちゃんと Windows や macOS のターミナル・ソフトで pi@raspberrypi.local にアクセスできました。

(4) microSD カードへ書き込む OS を選ぶ

次に、導入したい OS を選びます。メイン・メニューの “CHOOSE OS” をクリックして、一覧から選ぶわけですが、本稿では Raspberry Pi OS Lite を導入する前提となっているため、それ以外は特に考慮しません。“Operating System” の一覧から、“Raspberry Pi OS (other)” をクリックして、更に展開された中から “Raspberry Pi OS Lite (32-bit)” を選びます。僕がここで解説する基準となっている OS のバージョンは、“5.4.83+ #1379 Mon Dec 14 13:06:05 GMT 2020 armv6l” です。

Setup (4)-1

Setup (4)-2

上記の画像で Raspberry Pi OS Lite のステータスが “Cached on your computer” となっているのは、何度か書き込みを繰り返しているので、2回目以降は MacBook Pro にダウンロードされたファイルを使って書き込んでいるからです。もちろん、Raspberry Pi Imager は、設定の一部を JSON 形式で管理しており、起動したときに OS が更新されていればアップデートしてくれます。この点も、いちど microSD カードへ書き込むと更新しない NOOBS よりも Raspberry Pi Imager が優れている点でしょう。それから、最近のパソコンはエントリー・モデルでも 64 ビットの CPU / OS を使うので「64 ビットはないのか」と思うかもしれませんが、Raspberry Pi Zero W に搭載されている CPU は ARM アーキテクチャの ARM11 という 32 ビット CPU であり、一部の上級モデルでは Broadcom 2711, 1.5GHz quad-core ARM Cortex-A72 CPU のように 64 ビットのプロセッサが採用されているものの、64 ビット版の Raspberry Pi OS は2021年2月の時点ではベータ版としてのみ公開されている状況です。

(5) microSD カードに目当ての OS を書き込む

Raspberry Pi OS Lite を選択したら、さきほどフォーマットしたときと同じく “WRITE” をクリックして OS を microSD カードへ書き込みます。処理の内容は、OS の書き込みと書き込んだ内容の検証(verify)です。初めて Raspberry Pi Imager を使うときは、ダウンロードしたファイルをそのまま microSD カードへ〈保存〉しているわけではなく、いったんダウンロードしたファイルをローカルへ保存するため、少し時間がかかります。所要時間は、Raspberry Pi 財団のリポジトリ・サーバの混み具合、インターネット回線の速度、書き込むパソコンの性能、そして microSD カードのスペックに依存しますから、僕自身の経験しか言えませんが、僕の環境では遅くとも10分以内には書き込みと検証が完了しています。いちどダウンロードしたファイルを使っての書き込みと検証であれば、64 GB で Class 2 という遅い方の microSD カードを使った場合でも、数分で完了しています。なお、microSD カードへ書き込みを開始するときに管理者権限のパスワードを要求される場合があります(というか、管理者権限を持っていないパソコンでこういう操作をする人がいるとは思えませんが、もし管理者権限をもっていなければ、マシンの管理者に教えてもらうか、パスワードの入力を依頼して下さい)。

[追記:2022-01-04] 余談で、他にインストールできそうな OS を探して試してみたのですが、いまのところ Raspberry Pi OS Lite しかないというのが結論です。探すと、同じ Debian Linux をベースにした Debian Linux や Kali Linux のイメージ・ファイルが提供されているのを見つけると思いますが、それらは本稿で紹介している “headless” という条件ではセット・アップできない(あるいは自力で無線 LAN が使えるドライバを実装する必要がある)と言えます。本稿の趣旨からして、Raspberry Pi や Raspberry Pi OS そのものについて余計な時間を使うのは的外れであるため、そのような手順が必要な OS ディストリビューションは考慮しません。また、FreeBSD をはじめとして Raspberry Pi への対応を公表している OS も幾つかありますが、それらはたいてい無線 LAN のドライバをサポートしていません。(Embedded Linux Wiki というサイトには数多くの対応 OS が紹介されていますが、列挙されている OS の殆どは既に開発が止まっており、しかもこのページ自体が更新されていないので、残念ながら参考になりません。)

そして困ったことに、ウェブ・ページやブログ記事の多くは(アメリカ人のくせに)“headless” という言葉を「モニターなしの」(CUI の)という意味に誤解しており、LAN ケーブルを使って USB から LAN ポートへ変換するコネクタで接続して ssh のターミナルで Raspberry Pi OS をセット・アップしようなどと、“headless install” と題したページや記事で解説しています。しかし、このような解説は参考になりません。

Setup (5)

(6) microSD カードにアクセスする

問題なく microSD カードへ Raspberry Pi OS Lite の書き込みが完了したら、Raspberry Pi Imager を終了させてください。次に、headless セットアップに必要なファイルを操作するため、書き込んだ microSD カードにアクセスします。アクセスすると言っても、Windows と macOS とでは手順が違います。Windows の場合は PowerShell で New-Item ssh のように単純なコマンドレットを使って空のファイルを作成することはできても、vi や vim や nano のようなテキスト・ファイルを編集するツールへ処理を渡してテキスト・ファイルを編集できません。あらかじめテキスト・エディタやメモ帳で作成したテキスト・ファイルを X:\boot フォルダ(“X” は microSD カードが挿入されていて Windows が管理している際のドライブ・レターです)へペーストしたり、上書きする方が簡単です。macOS の場合は、ターミナルを起動すれば、必要な作業は全てシェルに対するコマンドで実行できます。

(7) headles セットアップに必要なファイルや設定を追加する

ということで、以下では macOS でターミナルを起動している環境での説明となります。Windows の環境では、編集しているファイルを作成したり、いったん別のフォルダへコピーして編集してから、同じ場所へ上書きするといった手順に置き換えていただければよいでしょう。何にせよ、headless のセットアップで、作成したり編集する必要があるのは、最低でも以下のファイルです。

順番に説明すると、/boot/cmdline.txt は、上記の公式サイトにある説明の通り、Linux が起動するときにカーネルが受け付けるコマンドライン風のパラメーターを記述するファイルです。config.txt のように低レベルの処理が終わった後の挙動を制御するため、USB を使うとか使わないというレベルの話ではないわけですが、ここで設定する内容も Raspberry Pi OS Lite の動作にとって重要です。

ちなみにこういうタイプミス(“commandline.txt”)も見受けるので、注意しましょう。他のソフトウェア(Grand Theft Auto 4 PC)で使っている設定ファイルと混同しているのかもしれません。

ファイルを開くと、初期状態(2021年2月, 2021-01-11-raspios-buster-armhf-lite.img)では以下のようになっています。

console=serial0,115200 console=tty1 root=PARTUUID=e8af6eb2-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

公式サイトの説明にあるとおり、cmdline.txt は OS が起動するときに参照されるブート・パーティション内の設定ファイルです。最も注意したいのは、全てのパラメータやコマンドを1行のテキストとして記述するということで、改行を使ってはいけません。この事例だけでなく、ソフトウェアの設定ファイルにはタブ文字や空白文字や改行文字などが特別な意味をもつ場合があります。しかし、ウェブ・ページとしての見栄えを優先したままコードや設定の事例を紹介しているサイトがあるため、(僕も含めて)他人が書いているコードや設定の事例を参考にするときは、実際の記述方法とは違っている可能性があるという前提で読みましょう。特に、ここでご紹介しているファイルは OS の起動に関わる重要な内容を記述しています。僕は十分に注意して推敲も繰り返していますが、実際の設定で記述方法に間違いがあると、headless のセットアップとしては致命的なことに、OS がそもそも起動しないという悲惨な結果となります。

上記の設定で、冒頭から elevator=deadline までは公式サイトに説明があるため、ここでは割愛します。fsck.repair=yes は起動時に動作する fsck というファイル検証ツールの実行において、何か修正するべき箇所が見つかる度に修復するかどうかをプログラムが尋ねてきますので、全ての確認に “yes” を自動で返答するという意味です。fsck.repair=yes の前に fsck.mode=force がないため、毎回の起動時に必ず実行されるわけではありません。

なお、あまり説明されていないのですが、fsck.repair というドットを使った記述方法は systemd というシステム管理デーモンに対する書式に従っています。似たようなツールに init がありますが、systemd は init の代替として幾つかの Linux ディストリビューションで採用されています(systemd に対する批判もあります)。systemd の命令系統であるディレクティブの一つとして systemd-fsck@.service がサポートされていて、fsck.repair は systemd に対するコマンド・ラインです。

Raspberry Pi OS Lite の headless セットアップでは、cmdline.txt の記述に、modules-load=dwc2,g_ether というディレクティブを追加します。このとき注意が必要なのは、他のバージョンの OS に入っている cmdline.txt では記述内容が違っている可能性もありますから、ディレクティブの記入箇所を間違えないことです。modules-load=dwc2,g_etherrootwait の直後に、スペースを空けて記述しなくてはなりません。例えば、以下のようになります。(ウェブ・ページでは改行しているように見えますが、実際には1行で全てを記述します。)

console=serial0,115200 console=tty1 root=PARTUUID=44020746-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh

rootwait は、カーネルに対してルート・デバイスが表示されるまで待てというコマンド・ラインです。非同期で検出されるような USB などのデバイスが立ち上がる際に利用されるため、headless でセットアップする Raspberry Pi Zero W の cmdline.txt では “dwc2”(USB 2.0 の規格に沿った USB コントローラのドライバ名である DesignWare Core のバージョン2という意味)と “g_ether”(これは USB デバイスのポートに機能を追加するための Linux-USB Gadget API Framework にもとづいて、イーサネットを提供する機能です)を予め記述しておきます。これらによって Raspberry Pi Zero W は拡張機器を追加しなくても無線 LAN に接続できるようになります。

結局、こういうことを “Abracadabra” さながらにコピペしているだけのウェブ・ページが多いのは、OS の起動シーケンスやディレクティブの意味を理解していないからです。意味を理解していれば、なぜ rootwait の直後に記述するのかとか、このディレクティブがどう解釈されるかという理由で、他の場所へ書くわけがないと判断できるようになります。すると、他の状況でも同じ考え方を応用したり、少なくとも記述する内容や位置に意味がある筈だという推定ができるようになるわけです。こういうことを丁寧に調べながらコードの意味を理解していく訓練をしない限り、コピペを何十年と繰り返していても技術者としては何も成長しません。

次に /boot/config.txt は、一般的なパソコンであれば BIOS で設定される内容を格納するファイルです。Linux が起動するたびに /boot というブート・パーティションから Linux の領域へ、/boot/config.txt で設定した内容が適用されます。Raspberry Pi OS Lite では、/boot/config.txt は最初からブート・パーティションにあるため、headless としてセットアップする際にはテキスト・ファイルとして開けば編集できます。ただし、このように重要な目的のファイルなので、Raspberry Pi OS Lite が動作しているシステムの中で作業するときは sudo nano としてエディタを起動する必要があります。MacBook Pro や Windows で編集している場合は、特にパーミッションは関係ないため、一般ユーザでの編集に問題はありません。

このファイルは、Raspberry Pi OS Lite では初期状態だと既に設定が幾つか書かれている筈です。よって、ターミナルでは次のコードを最終行に記述して閉じることになります。

dtoverlay=dwc2

公式サイトのページにも詳しく説明されていますが、dtoverlay は Raspberry Pi が採用する ARM アーキテクチャのシステムで利用するデバイスの制御にかかわる「デバイス・ツリー」というデータ構造において、「オーバーレイ」という方法で明示的にデバイスの利用を宣言するために使われる命令(ディレクティブ)です。つまり、“dtoverlay” は device tree での overlay を宣言するディレクティブであり、これによって指定されたデバイスを使いなさいと Linux のシステムに命令するものです。dwc2 は USB のことでしたから、要するに dtoverlay=dwc2 は、このシステムはしかじかの USB ドライバを使うのだと宣言しているわけです。

そして次に、OS が起動した際に ssh サーバを有効としておくためには、“ssh” または “ssh.txt” という空のテキスト・ファイルを /boot ディレクトリに置く必要があります。Raspberry Pi OS が起動した後なら sudo systemctl enable ssh などと ssh サーバを起動できますが、headless のセットアップでは、そもそも起動した OS へ ssh によるリモート・アクセスが必要ですから、OS のブートにおいて ssh が起動しなくてはアクセスしようがないというわけです。

このようなファイルを作成しておく仕様は、さきほどご紹介した systemd というシステム管理デーモンの設定に定められています。

ConditionPathExistsGlob=/boot/ssh{,.txt}

この ConditionPathExistsGlob というディレクティブの解説にあるとおり、探索する対象はファイルでもディレクトリでもよいため、/boot/ssh というディレクトリを作成すればよいと解説している人もいます。しかし、下記の理由により、ディレクトリを作成するのは避けたほうがよいでしょう。

なお、/boot/ssh{.txt} は Raspberry Pi OS が起動すると /boot ディレクトリからは削除されます(初回だけのことなので、次からは /boot/ssh がなくても ssh でアクセスできます)。/lib/systemd/system/sshswitch.service に、以下のような後処理が記述されていることから分かります。

ExecStart=/bin/sh -c "systemctl enable --now ssh && rm -f /boot/ssh ; rm -f /boot/ssh.txt"

なお、上記の注釈で /boot/ssh はファイルでもディレクトリでもよいと書きましたが、ファイルの方がよいという理由は、この後処理にあります。コマンドですぐに分かるとおり、この後処理だと /boot/ssh がディレクトリの場合はエラーになります。(ディレクトリでもファイルでも削除できるようにするなら、rm のオプションは -fd でなければならない筈だからです。)

そして最後に、/boot/wpa_supplicant.conf を編集します。このファイルは、僕の場合もそうでしたが、/boot ディレクトリには存在していないと思うので、無いなら新規作成してください。おもむろに vi wpa_supplicant.conf で編集してもいいですし、touch wpa_supplicant.conf してから好みのテキスト・エディタで編集してもいいでしょう*

*僕は、何度かセットアップした経験から、まず touch でファイルを作成してから nano で編集する方がやりやすいと感じました。もともと UNIX/Linux でテキスト・ファイルを編集するときは vi を使っているのですが、Debian 系の Linux である Raspberry Pi OS だとキーマップが FreeBSD や CentOS などと違っているため、いちいち ~/.vimrc などを編集しないといけないからです。

wpa_supplicant.conf ファイルには、無線 LAN のアクセスポイントに関する幾つかの設定を記述します。典型的な事例は以下のとおりです。

update_config=1 ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev ap_scan=1 country=JP network={ ssid="***********" psk=****************************** }

wpa_supplicant は Linux や Windows など色々な OS に実装されている WPA/WPA2 を使った無線通信ツールです(無線通信ではクライアントの通信機構やプログラムを「サプリカント」と言います)。Linux では deamon という常駐のプログラムとして動作し、フロントエンドでの処理は別のプログラムが実行します。詳しくは wpa_supplicant 公式サイトの解説などを参照して下さい。まず最初に注意点として、上記ではわざとコードをインデントしていません。多くのページではスペース文字を使ってインデントしていますが、ウェブページのビジュアルとしては見易くなっても、実際のコードとしては不適切なので、そういうものを説明もなくコードの事例として紹介するべきではないと思うからです*。ただ、このような注意点は wpa_supplicant や wpa_supplicant.con の man ページにも書かれていないので、仕方のないことでもあります。それから、この設定ファイルにパスを記述する場合は、フルパスで記述するように求められているので、作業ディレクトリからの相対パスを書かないようにしましょう。

*ただし、行頭に空白文字を置いてはいけないのかというと、必ずしもそうではありません。実際、wpa_supplicant のソース・コードを読むと、wpa_supplicant.conf のパースでは “Skip white space from the beginning of line.” という処理が入っているため、これが正しく動いているなら行頭の空白文字は問題なく無視される筈です。

一行目から設定を説明します。まず、update_config は、新しいアクセス先の情報が追加されたり、パスフレーズが変更されたりして、設定ファイルの内容が変更されたら wpa_supplicant に設定変更を反映させるかどうかを指定します。固定したままにしておくならなくても構いませんが、修正や変更の必要があれば “1” を指定して記述するのが適切でしょう。

そして、ctrl_interface と次の country などはグローバルな設定であり、ここで指定する全てのネットワーク接続について適用されます。ctrl_interface は通信コントロールのインターフェイスとしてソケット・ファイルがどこに作られるかをフルパスで指定します。Linux システムでは /var/run/wpa_supplicant がスタンダードなパスになっていて、これを敢えて変更する必要は殆どないでしょう。なお、インターフェイスへアクセスするグループを指定することで、root 以外のユーザがインターフェイスへアクセスできるよう許可します。このため、グループを指定するオプションを追加するときは、インターフェイスへのパスを記述する項目と、アクセス可能なグループを記述する項目を分割するために、それぞれ DIR=、と GROUP= の二つのブロックにして記述します。グループは、グループ名でもグループの GID でも構いません。

ap_scan は、アクセス・ポイントの自動スキャンについて指定するものですが、ディフォールトでスキャンするため、“1” を指定するなら書かないのと意味は同じです。有線のイーサネット・ドライバを使うときだけ、敢えて値を “0” に指定します。そして “2” を指定すると、挙動は “0” と似ていますが、セキュリティ設定を含めた厳密なポリシーを使って、ステルス・モードのアクセス・ポイントなどにも接続を試みて、試行できる全てのアクセス・ポイントについてスキャンした結果、最も望ましいアクセス先を報告します。

country は、ISO/IEC 3166-1 alpha 2 という規格で定められている二文字の国名コードを指定します。これは Raspberry Pi OS Lite をインストールした後でも使える設定ツールの raspi-config でも GUI(と言っていいかどうか微妙なビジュアルですが)で設定できる内容ですが、ここで指定したほうがよいでしょう。これを指定する理由については、OpenWrt のサイトに詳しい解説がありますが、簡単に言えば家庭で私的に使っていても無線通信は各国で定められている通信関連の法律に従って運用されなくてはならず、無線機器や無線通信のソフトウェアが当該国での法律に違反するような動作をすると困るからです。日本で使うなら日本の電波法に沿ってアクセスできるチャネルや周波数の範囲で動作させるべきですから、“JP” と指定するのが妥当ということになります。なお、よく “JA” と間違う人もいるわけですが、“JA” は言語コードです。

次の network で指定された、ブレース(中括弧)で囲まれているブロックがそれぞれのネットワーク設定となります。順番に記述すると、上から順番にマッチした設定が適用されます。中に記述できる項目も非常にたくさんありますが、上記では最低限の項目を紹介しています。ssid は、もちろんアクセス先のセッション ID(SSID)です。自宅で使っている無線ルータの SSID が分からないという方は、いちばん確実なのは無線ルータの筐体に印刷されているので見て下さい。こんなことをマシンで調べる必要などありません。(無線 LAN の設備なのに、なぜか)家具の後ろなどに置いてあるという事情で、簡単には機器までアクセスできない場合は、Wi-Fi で接続しているであろうスマートフォンのネットワーク設定を見れば、そもそも自分で設定した筈なので、分かると思います。もちろん、パソコンでも無線 LAN に対応していて既に接続しているなら、Windows はネットワーク「アダプタ設定の変更」で SSID が一覧表示されていたり、Wi-Fi 設定で「接続のプロパティ」から SSID が分かりますし、macOS でも「ネットワーク環境設定」や「キーチェーン」のログイン項目で確認できます。もし Linux を使っている場合でも、iwlist wlan0 scan | grep SSID で SSID の一覧が返されますから、目当ての SSID を突き止められるでしょう。あるいは Debian 系の Linux なら apt-get install network-manager でインストールされるツールの中に、nmcli があるので、これを使う手もあります。ただし、家庭内でも有線と無線とでセグメントが違っている場合には、これらのコマンドでは正しいステータスが返ってこない場合もあるので、注意しましょう。

Setup (7)

そして psk は WPA-PSK モードのキーまたはパスフレーズそのままを許容します。キーを指定する場合は二重引用符で囲まなくても構わないようですし、ルータによって使える文字が異なるため、引用符を許容する仕様だと「デリミタの衝突」が起きるので、キーを使う場合は引用符で囲まないのが無難です(パスフレーズに空白文字を使っているような場合にだけ、引用符を使えばよいでしょう)。後から raspi-config で設定し直すという前提であれば、パスフレーズをそのまま記入してもいいわけですが、ただのテキスト・ファイルにキーをそのまま記述するというのは認証情報の管理としては弱いので、更に適切な措置としてはハッシュ化するのが望ましいでしょう。ただし、パスフレーズの生成にしても、あるいはハッシュ化にしても、どこの誰とも分からない人が「作りました」とオンラインで提供しているツールを使うのが最も危険な行為であることは、情報セキュリティのプロとして強く書いておきたいところです。情報セキュリティの基本は、情報の作成や管理を他人に任せないということにあります。相手が東大の博士号を得たコンピュータ・サイエンスの研究者であろうと、情報の保護や管理について無知無教養である可能性はあります(実際、都内やシリコン・バレーや上海の多くの IT ベンチャーには、そういう〈博士号をもっている人間のクズ〉が山のようにいます)。技術力や学歴があることと人間性とは何の統計的な関連性もないというのが真の科学的な知見であり、これはもちろん僕自身にも当てはまります。よって、オンライン・ツールではなく自前で簡単なプログラムを組んでパスフレーズやハッシュ値を生成しましょうと、JavaScript や PHP によるコードの事例や手順を紹介することはできますが、それ自体についても是非を吟味するようでなくては、まともな情報セキュリティのマネジメントとは言えません*

*原則だけご参考に書いておくと、まず SSID を変更することに大きな効果はありません。こんなものは幾らでも第三者がスキャンして確かめられるので、これを長い文字列にしたりランダムな文字列にしたところで認証プロセスの何かが特に強くなるわけではないからです。ただ、市販品のルータを使うと SSID が他の家庭で使われている SSID と紛らわしいので、アクセス先を取り違える恐れがあるかもしれませんので、なるべく変更はした方がよいでしょう(もちろん SSID は調べようと思えば電波が届く圏内の誰でも調べられるので、自分の自宅の SSID であることが推測されないような文字列にします。苗字とか町名などを使うのはやめましょう)。

また、よく市販のルータでセールス文句に書かれている「ステルス・モード」にも情報セキュリティの実務家の観点(それはつまり、殆ど犯罪者のレベルの観点でもあります)では効果がないと言えます。ステルス・モードは、簡単に言えば一種の「セキュリティ茶番劇(security theatre)」(安全であるかのように演じているだけの、実態が伴わない自己欺瞞や自己催眠)です。市販製品では、いまだに搭載されている「セキュリティ機能」ですが、実はステルスどころか逆効果なのです。なぜなら、このステルス・モードというのはルータに対して接続を試みようと試みまいとに関わらず、ルータへアクセスしうる全ての機器に対して「ねぇねぇ、俺って SSID が***のルータなんだけど、ここにはいないんだからなっ!」と喚き散らすような機能だからです。これを「ブロードキャスト」と読んでいますが、ステルス・モードはブロードキャストで SSID を通知したうえで、接続先の一覧から非表示にしてくれと端末に呼びかけるため、逆にアクセスしようとしていないような機器にまで SSID を通知してしまいます。

よって、無線 LAN で Wi-Fi の接続情報を安全に保護するには、パスフレーズを強い条件で生成して、それを安全に運用・保管することが最も適切と言えます。よって、パスフレーズはなるべく規格で許容された最大の桁数に近い長い文字列を使って、最多の文字種を使うことが望まれます。WPA-PSK では、63桁の印刷可能な ASCII 文字を使えるため、最大の桁数で全ての文字種を使ってランダムなパスフレーズを作るのが最適です。あとは、それをハッシュ化すればいいわけですが、自力で関数を組み上げるのは大変ですから、Linux であれば wpa_passphrase というツールでハッシュ化できます。macOS では(macOS は Linux ではなく UNIX なので、wpa_passphrase はありませんから)echo -n PASSPHRASE | iconv -t UTF-16LE | openssl md4 として出力されたハッシュ値を、psk ではなく password という設定の値として password=hash:********** のように記述できますが、このやり方だと salt が使えず、かなり脆弱なハッシュ値になってしまいます。

pi@rpzw02:~ $ wpa_passphrase id 0123456789 network={ ssid="id" #psk="0123456789" psk=1ba74a26019ee4124f34d6b64b2e17b79e14da5f8382c08c566b52576f7e6127 }

もちろん、実際に wpa_supplicant.conf へ記述するときは “#psk="0123456789"” なんて愚かなコメントは残さないように削除しましょう。(ちなみに、上記は既に headless セットアップした Raspberry Pi Zero W で実行したコマンドですが、これからセットアップしようという状況の人にはできない相談なので、もちろんセットアップしたい Raspberry Pi とは別の Linux マシンで作業してください。)それから、wpa_supplicant による認証で使われる psk の値はハッシュ値であって、暗号化された値ではありませんが、これを「平文」と混同して脆弱だと書いている愚かな記事があったりします。こういう、生半可な知識や経験で情報セキュリティをどうこう論じるような記事は相手にしないようにしましょう。

なお、/boot/ssh と同様に、/boot/wpa_supplicant.conf も、セキュリティ上の理由によって、OS が起動したら /boot ディレクトリからは取り除かれます。/lib/systemd/system/raspberrypi-net-mods.service に記述されているように、

ExecStart=/bin/mv /boot/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf

として、OS が初回起動した後は /etc/wpa_supplicnt/wpa_supplicant.conf に移動するため、このファイルを編集すれば無線 LAN のアクセスポイントについて設定を更新できます。

[追記:2022-01-04] 最後に、OS のバージョンごとに cmdline.txt や config.txt の内容が違っている可能性があるため、上記のファイルを編集するときはご注意ください。本稿を書いたときにセット・アップした後、実は Raspberry Pi は使わずに放置してありました。そして、2021年の12月になって再びセット・アップをやりなおしてみたところ、2021-01-11-raspios-buster-armhf-lite.img と 2021-10-30-raspios-bullseye-armhf-lite.img とでは、新しい Bullseye というバージョンの Debian をベースにしている Raspberry Pi OS Lite では、config.txt において dtoverlay=vc4-kms-v3d という行が有効になっていたりします。dtoverlay=dwc2 を最終行に追加したら、上の行にある他の dtoverlay の設定は headless の環境ではコメント・アウトするのがいいでしょう。

(8) microSD カードをパソコンから解除して取り外す

以上で headless セットアップに必要な準備は整いました。microSD カードをパソコンから取り外します。不用意に引き抜かないよう、カードの読み書きが停止したことを確認してから、macOS ではデスクトップの “boot” というフォルダをゴミ箱へドラッグして〈取り出し〉します(いつも違和感のある操作なのですが)。Windows の場合、あるいは macOS でも USB 経由で接続している場合は、USB の接続を解除してからカードをスロットから取り外すと安全です。

(9) microSD カードを Raspberry Pi Zero W のスロットへ挿入する

そうして、パソコンから取り外した microSD カードをアダプタから外して、今度は Raspberry Pi Zero W のスロットへ差し込みます。表裏を間違えないことや、差し込みすぎて基板側を傷めないようにすること以外は、特に注意するようなことが無いでしょう。

Setup (9)

(10) Raspberry Pi Zero W に USB ケーブル(電源用)を接続する

次には、USB の電源ケーブルを接続します。Raspberry Pi Zero W には、半田付けされた部品を表にして microSD カードを左手にした向きで基板を持つと、下部に USB のスロットが二つ並んで見えます。スロットが取り付けられている箇所の上に、それぞれ小さく “USB”(左側)及び “PWR IN”(右側)と白字で印刷されているのが分かるでしょう。セットアップするだけなら、実はどちらに USB の電源ケーブルを繋げても問題はありませんが、接続したままこれからも使い続けるのであれば、右側つまり “PWR IN” と印刷された方に繋げるとよいでしょう。左側はデータのやりとりにも使えますが、右側は電源専用だからです。

Setup (10)

USB の電源ケーブルを接続すると、すぐに基板の緑色 LED ランプが点灯し始めるのが分かります。これは電源を示すランプではなく、microSD カードの読み書き動作を示す activity ランプです。OS が起動する最中には、パソコンの HDD ランプのように明滅するのが分かると思います。初めて Raspberry Pi OS を立ち上げるときには、暫く処理がかかると思うので、1、2分ほど待ってランプの明滅が落ち着き点灯したままになったら、起動が完了したと思っていいでしょう。

(11) Raspberry Pi OS Lite の起動を LAN 上で確認する

Raspberry Pi OS が起動して、無線デバイスの処理も正しく実行されていれば、Raspberry Pi が LAN の上で確認できるようになります。そこで、幾つか確認方法はありますが、Windows でも macOS でも Linux でも Android でも iPhone でも、手っ取り早いのはネットワーク関連のアプリケーションやコマンドです。

ご参考までに、僕が使っているソフトウェアを幾つかご紹介しておくと、Windows なら長らく Advanced IP Scanner を使ってきました。macOS では LanScan を使っていますが、Raspberry Pi のホスト名を表示するにはプロ版へアップグレードしないといけないようです。自宅に Linux のパソコンはありませんから、この他にスマートフォンでは Android も iPhone も、同じ Network Analyzer というアプリケーションを使わせてもらっています(Android 版iOS 版)。

特に問題なければ、Raspberry Pi が起動していることが確認できると思います。下のスクリーン・ショットは僕の自宅で起動している Raspberry Pi 2台が Network Analyzer で見えている様子です。

Setup (11)

ちなみに、見えるまでに暫く時間がかかる場合もあります。原因は分かりませんが、PowerShell で arp -a で一覧表示される IP アドレスのリストなどには捕捉されていても、こういうスキャン・ツールで捕まえられていないことがよくあるのです。いちど表示されても再び見失うこともあるので、初回の確認で見えなくても30分ほど経過してから改めて確認してみましょう。

(12) パソコンのターミナル・ソフトで Raspberry Pi OS Lite の ssh サーバへ接続する

ともかく、スキャンしてネットワーク上で存在を確認できたら、少なくとも Raspberry Pi が起動してネットワーク・デバイスが動いていることは分かります。すると次に headless でのセットアップを完了するために ssh で Raspberry Pi へ接続できるようにしなくてはなりません。これは、大抵の環境では Windows だと Teraterm Pro や Putty のようなターミナル・エミュレータを使って、あるいは macOS や Linux だとターミナル・ソフトウェアから ssh コマンドを使って接続すれば問題ない筈です。接続するための設定として一般的なのは、以下のとおりです。

注意点は幾つかありますが、まずホスト名として raspberrypi としか書かないページがあるので、これではアクセスできない場合があります(特に新しい Windows 10 の環境では)。そのため、raspberrypi.local と指定する必要があります。しかし、この書き方も実は不親切なものであり、“.local” という文字列を追加して Raspberry Pi のホスト名として解決されるのは、Windows の環境だと Apple の Bonjour Print Services というソフトウェアがインストールされているか、あるいは新しい Windows 10 で特別な設定をしているからなのです。Bonjour は、もともとネットワーク・プリンタや USB プリンタを探索するためのツールとして公開されていて、これはつまり Multicast DNS(mDNS)という、家庭内などの小規模な LAN の環境で動作する DNS サーバなのです。よって、Raspberry Pi に限らず LAN の環境に接続されている機器の名前を解決してくれるツールとして普及しているということです。この mDNS の仕様により、mDNS で提供される特殊なホスト名として “HOSTNAME.local” とすれば、リモートの DNS サーバではなくて LAN 内のコンピュータのプライベート IP アドレスを返してくれるようになるわけです。また、IPv4 で正しくアクセスできないとか、IPv6 で正しくアクセスできないとか、記事が書かれているときに使っていた Windows 10 のバージョンなどに依存して、いまでは正しくない説明も見かけるので、みなさんが使っている OS やバージョン、それから入っているソフトウェアによって、ホスト名でのアクセスはできたりできなかったりすることをご承知下さい。

とは言え、少なくとも自宅で安定してアクセスできる環境にする方がいいとは思います。よって、プライベート IP アドレスでアクセスすれば問題ないという解決法は、妥当なように見えますが、さほど推奨はできません。それに、個人宅で使うルータの DHCP にもリリースの周期というものがあるため、プライベート IP アドレスが振り直されて別のプライベート IP アドレスになると、Raspberry Pi へアクセスできなくなってしまいます。しかし、だからといってプライベート IP アドレスを固定すればいいかというと、僕の環境では IP アドレスを固定するとネットワーク接続がかなり不安定になってしまいましたので、これもお勧めはできません。Windows や macOS のアップデートや、ネットワークに関連するソフトウェアのインストールで影響を受けるという可能性も考慮しながら、自宅のネットワーク環境の整備も同時にする必要があります。

Setup (12)

スタンダードな通信条件では、上記の設定で Raspberry Pi にアクセスしてログインし、上記の画像にあるようなプロンプトが表示される筈です。ここまでくれば headless でのセットアップは殆ど終了と言ってよいでしょう。

冒頭に戻る

3. OS が起動した後の初期設定をする。

headless セットアップの最後は、Raspberry Pi OS 上での手続きを幾つかご紹介します。コマンドラインで色々な設定はできますし、特にセキュリティにかかわる設定は最初にやっておいた方がよいわけですが、ひとまず作業環境を整備するために必要なこととして、ロケールとタイムゾーンを raspi-config という付属ツールで設定しましょう。もちろんグローバルな設定にかかわることなので、sudo で立ち上げます。なお、raspi-config もバージョンによってメニューの項目や表記が変わりますので、これからご紹介するのは2021年2月の時点で利用できる最新のバージョン(20210212)です。

ひとまず、ロケールとタイムゾーンは raspi-config のメイン・メニューで “5 Localisation Options” の中にある “L1 Locale” では “[ ] ja_JP.UTF-8 UTF-8” を追加で選び(スペース・バーで選択した状態になり “[ ]” が “[*]” となります)、“L2 Timezone” では “Asia” にカーソルを合わせて Enter で選択してから、更に Tokyo を選べばよいでしょう。(ちなみに、それぞれの設定画面へ移行するときに、設定項目を読み込むため、少しのあいだだけ画面が元のプロンプトへ戻ります。プロセスが落ちてしまったわけではないので、慌てないようにしましょう。)

Set up with raspi-config

その他、Raspberry Pi のホスト名を変更したり、ディフォールトでアクセスする pi というユーザのパスワードを変更したり、自宅の室内だけで利用するにしても幾つかの対策が必要です。ただ、たとえば “17 security tips for your Raspberry Pi” というページで紹介されている対策を眺めてみると、Raspberry Pi を導入する人たちの環境とか目的と無関係に教科書的な手順を並べているだけにしか見えません。少なくとも情報セキュリティ・マネジメントの実務家として言えば、これらの対策を全て適用する必要はないと言えます。

例として、まず「pi というアカウントを無効にせよ」という対策が推奨されている理由を読むと、pi というユーザ・アカウントが Raspberry Pi OS にディフォールトで設定されているユーザ名だからということのようです。つまり、既知のユーザ名に対しては誰でもブルート・フォース攻撃をかけられるので、いったんユーザ名が知られている状況では、残る防御はパスワードだけだということのようです。

確かに、攻撃者がユーザ名を知らなければ、何に対してログインの攻撃をしかけたらよいのか決まらないため、ブルート・フォースもヘチマもないということなのでしょう。しかし、そんな攻撃を Raspberry Pi が設置された家庭であれ工場であれ LAN 環境で防がなくてはいけない状況とは何でしょうか。そういう状況は、家庭や職場の LAN へ既に外から侵入されているか、あるいは家庭や職場内の LAN 環境に接続されている他のコンピュータやプリンタやテレビやスマートフォン、あるいは IoT 対応の冷蔵庫や照明器具や施錠設備などの端末にボットが仕込まれている状況のどちらかではないでしょうか。そういう状況を放置して、Raspberry Pi を保護することだけに躍起になったところで、根本的な解決にはなっていません。また、パスワードの方が脆弱だと、パスワードを固定して逆にユーザ名を頻繁に取り換えてリクエストする、パスワード・スプレー攻撃(あるいはリバース・ブルートフォース攻撃)に晒されると脆弱になってしまいます。

また、「VPN を使え」というアドバイスも、Raspberry Pi が使われる家庭内のネットワーク環境を無視した、過剰な対策の一つです。家庭や会社の外へ持ち出して測定や通信や記録に使ったり、Raspberry Pi を組み込んだガジェットを動かすといった目的では考慮するべき対策の一つだと思いますが、家庭に設置して使うケースでは殆ど意味のない対策でしょう。これも、先に書いたとおりの理由と同じく、VPN を導入してまで通信内容を保護しなくてはいけない時点で、その場所の LAN 環境はそもそも安心して通信には使えないと言っていいからです。

Raspberry Pi を導入する環境や目的によって、残りのセットアップ作業は色々とできることやしなくてもいいことがあります。これは、他のウェブでコンテンツを公開するようなウェブ・サーバとか、色々なサービスを提供するサーバについても言えることであって、一概に何か一つの対策とか手順が決定的だとか必須だと言えるわけではありません。結局、そうした自分の目的や環境に応じた最適のセキュリティ対策とか設定は、自分が Raspberry Pi で何をしたいのか正確に計画したり理解したうえで、相応しいと思える設定や対策を見つけて適用したり試すことが現実的な手順というものでしょう。もちろん、オンラインなり書籍には色々なプランや実例が掲載されていますが、デタラメなことを書いている場合も多々あるので(このページが、そういうクズの一つでないことを保障するわけではありません)、恐らく推奨できる堅実な方針は、原則から理解するということに尽きると思います。一般的な Raspberry Pi の解説と比べて、本稿が相当な分量で仕様や規格の話題を取り上げた理由です。

冒頭に戻る

References

Russell Barnes

2017

“Wireless wonder: The new Pi Zero W antenna design,” a blog for The MagPi Magazine, unknown or cursory date in 2017 (the blog shew its date as “Posted almost 4 years ago” at the time I retrieved it), https://magpi.raspberrypi.org/articles/pi-zero-w-wireless-antenna-design; retrieved on February 10th, 2021.

Alex Eames

2017

“How much power does Pi Zero W use?” RasPi.TV, March 1st, 2017, http://raspi.tv/2017/how-much-power-does-pi-zero-w-use; retrieved on February 10th, 2021.

Teddy Ferdinand

2020

“I tested for you: Raspberry Pi imager,” TFerdinand.net, March 10th, 2020, https://tferdinand.net/en/i-tested-for-you-raspberry-pi-imager/; retrieved on February 10th, 2021.

Patrick Fromaget

????

“17 security tips for your Raspberry Pi,” RaspberryTips, published on unknown date even in its complicated meta data, https://raspberrytips.com/security-tips-raspberry-pi/; retrieved on February 17th, 2021.

Gareth Halfacree

2019

THE OFFICIAL Raspberry Pi Beginner’s Guide: How to use your new computer. 3rd edn., Raspberry Pi Trading: Cambridge, 2019.

国野 亘

2017

「無線内蔵 Raspberry Pi Zero W の消費電力を測定してみました。」, bokunimo.net, March 11th, 2017, https://bokunimo.net/blog/raspberry-pi/80/; retrieved on February 10th, 2021.

Microsoft Corporation

2000

“Microsoft Extensible Firmware Initiative FAT32 File System Specification - FAT: General Overview of On-Disk Format,“ version 1.03, Hardware White Paper, December 6th, 2000, https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/fatgen103.doc; retrieved on February 12th, 2021.

Simon Monk

2020

Raspberry Pi Cookbook. 3rd edn., O’Reilly Media: Sebastopol, 2020.

Dave Plummer

2021

“05.Secret History of Windows Format: FAT32 Limits,” Dave's Garage channel at YouTube, https://www.youtube.com/watch?v=bikbJPI-7Kg.

Ralph Roberts

2017

Mastering Media with the Raspberry Pi: Media Centers, Music, High End Audio, Video, and Ultimate Movie Nights. Apress Media: California, 2017.

Scratchpad@usagi1975.com

2018

「Raspberry Pi : Raspberry Pi Zero Wの消費電力」, usagi1975.com, May 26th, 2018, https://www.usagi1975.com/052520180823/; retrieved on February 10th, 2021.

志村真子

2017

「Rapberry Pi Zero Wのアンテナのお話」, SWITCH SCIENCE MAGAZINE, April 5th, 2017, https://mag.switch-science.com/2017/04/05/rapberry-pi-zero-w-antenna/; retrieved on February 10th, 2021.

Richard Speed

2021

“Explained: The thinking behind the 32GB Windows Format limit on FAT32 - 'Because I said so',” The Register, January 4th, 2021, https://www.theregister.com/2021/01/04/windows_format_fat32/; retrieved on February 12th, 2021.

Vasilis Tzivaras

2017

Raspberry Pi Zero W Wireless Projects: Go mobile with the world's most popular microprocessor. Packt Publishing: Birmingham, 2017.

Rob Zwetsloot

2017

“Introducing Raspberry Pi Zero W,” Raspberry Pi channel at YouTube, https://www.youtube.com/watch?v=C0FK7d4dJ5k.

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook