設定した時のモデルや作業環境
対象モデル:
- Raspberry Pi 2
- Raspberry Pi 3 Model B V2
- Raspberry Pi 4
作業PC:
- MacBook Pro (Retina, 13-inch, Early 2015), Catalina 10.15.5
0: Operating System(OS)の書き込み
SDcardの初期化やOSインストールは以下の2つの方法が主流だと思われます
-
RaspberryPi Imager を用いる方法
(推奨:かなり楽です) -
コマンドで設定する方法
RaspberryPi Imager で設定する
SDcardの初期化
従来通りコマンドで処理を行うのもいいですが、「RaspberryPi Imager」を用いてSDcardを初期化したり、OSをインストールした方が手っ取り早いです
私の場合は環境がMacなのでRaspberry Pi Imager for macOS
を選択しました
上記の画面で「CHOOSE OS」をクリック
するとインストールしたいOSを選ぶ画面が表示され、スクロールすると下の方にSDcardを初期化する項目が現れます
「Erase」をクリック
した後は、「CHOOSE SD CARD」をクリック
して初期化したいSDcardを選んでください(選ぶとは言いましたが、ほとんどの環境で一度に挿入するSDcardの枚数は一枚だと思われるので、多分選択できるのは一つだけ表示されると思います)
後は自動で初期化されるので待てば大丈夫です
OSのインストール
上記の画面で「CHOOSE OS」をクリックする
とインストールしたいOSを選ぶことができ、「CHOOSE SD CARD」をクリックして
挿入しているmicroSD Cardを指定することができます。
2つの項目を決定した後は「WRITE」ボタンが白くなりクリック可能になります
OSは以下の二つに大きく分かれていますのでお好みで選んでください
-
Raspberry Pi OS
(以前「Raspbian」と呼称されていたもの) -
NOOBS
(初心者向けで設定しやすいらしい)
書き込みが終わると以下のような画面になります
後はmicroSDをRaspberryPiに挿入すればデスクトップ画面が立ち上がります
コマンドで設定する
OSイメージの入手
ラズベリーパイ用のOSは公式サイトからダウンロードするのが良いと思われます
https://www.raspberrypi.org/downloads/
2020年7月12日時点では以下の2つの形式でOSが公式から配布されています
-
Raspberry Pi OS
(以前「Raspbian」と呼称されていたもの) -
NOOBS
(初心者向けで設定しやすいらしい)
MicroSD初期化
MiroSDcardの初期化はこのサイトを参照
diskutil list コマンド
で差し込んだMicroSDを確認する(間違えると作業しているPC本体のデータを吹っ飛ばすことになるので注意)
$ diskutil list
/dev/disk2 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *15.8 GB disk2
1: Windows_FAT_32 boot 46.0 MB disk2s1
2: Linux 15.8 GB disk2s2
私の場合では/dev/disk2
にマウントされていることがわかったので、diskutil eraseDisk
で初期化を行います
$ diskutil eraseDisk フォーマット形式 名前 フォーマット対象ディスク
フォーマット形式は「MS-DOS」
、ディスクの名前は好きなものを選んでもいいですがラズベリーパイに関連しているものを名付ける方がいいと思います私は「RPI」
としています
フォーマット対象ディスクはdiskutil listで表示されたものを選ぶので、この場合は「/dev/disk2」になります
これは環境によって変わるので注視してください
$ diskutil eraseDisk MS-DOS RPI /dev/disk2
Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s2 as MS-DOS (FAT) with name RPI
512 bytes per physical sector
/dev/rdisk2s2: 30503616 sectors in 476619 FAT32 clusters (32768 bytes/cluster)
bps=512 spc=64 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=30511104 bspf=3724 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2
OSのinstall
次にOSのinstallはこのサイトを参考にしました
ファイルを書き込むdd コマンド
でOSをSDcardに書き込んでいきます
$ diskutil list
$ diskutil unMountDisk /dev/disk2
$ sudo dd if=/*ダウンロードしたファイルまでのパス*/[ダウンロードしたOS名].img of=/dev/disk2 bs=1m count=1024
1: ユーザ・グループの設定
一般ユーザ
新ユーザの追加
RaspbianやRaspberryPiOSなどに最初から設定されている「pi」というユーザは初期パスワードが周知されていますし、sudoをパスワード入力なしで実行できてしまうので、セキュリティ面から考えてかなり脆弱だと思われます(私は「pi」をsudoグループから外して、名前を変更するまでネットワーク環境へつなげないようにしています)
ユーザ 「pi」を削除するなり、名前を変更するにしても他のユーザを作ってからの方が作業が楽です(というより私はpiでログイン中にpiを削除したり名前変更する方法を知りません)
ユーザを追加するコマンドは主に「useradd」と「adduser」の2つ存在します。(Debian系列のOSではこの2つのコマンドは異なる挙動をするらしいです)
個人的には対話形式で追加可能なadduserを好んで使っています
ユーザ(例:hoge)を対話的に追加するコマンド
$sudo adduser hoge
ユーザをSudoグループに追加
新しいユーザが所属するグループをpiと同じにするため、piの属しているグループを確認する(少なくともSudoが使えるグループには所属させたい)
$groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio
ユーザ(例:hoge)をsudoグループに追加
$sudo gpasswd -a hoge sudo
初期ユーザ : pi
piの名前を変更
一度再起動した後、自分が作成したユーザ(例:hoge)でログインしてpiのユーザ名を変更する
初期ユーザのpiでログインしている場合はプロセスが立ち上がってしまい、変更できない
$sudo usermod -l [新しいユーザ名] [古いユーザ名]
piをSudoのグループから除外
何らかの設定ミスでユーザpiが乗っ取られてしまうことを考慮して、スーパーユーザの権限で処理を実行できないようにします
$sudo gpasswd -d pi sudo
あと、configの設定も無効にしておく必要があるみたい。
$sudo nano /etc/sudoers.d/010_pi-nopasswd
下記の行をコメントアウト(先頭に#をおけばコメントアウトできる)。
nanoエディタを使ったことなくて、終了できない時はCtrl+Xで終了できる。細かいことはググってお願い
pi ALL=(ALL) NOPASSWD: ALL
スーパユーザ : root
rootのパスワードを変更
初期パスワードでは心許ないので変更する
$sudo passwd root
一応変更できたかログインして確認してみる
$su
2:ネットワーク設定
個人的な感想ですが、上記の設定を行うまではかなり脆弱だと思われますので、ネットワークには接続しないほうがいいと思われます。
ラズベリーパイ公式のドキュメントは下記の通り
https://www.raspberrypi.org/documentation/configuration/tcpip/
https://www.raspberrypi.org/documentation/computers/configuration.html
本来Debian系のLinuxOSであれば/etc/network/interfaceなどにipアドレスなどの設定をするのですが、ラズベリーパイでは/etc/dhcpcd.confにて記述を行うことが推奨されています。
無線の設定
DHCPを利用
周囲のESSID一覧を取得する
$sudo /sbin/iwlist *インタフェース名(例:wlan0)* scan | grep ESSID
ESSIDとpasswordをハードコーディング(本当はハッシュ値にしたりとかするといいみたい)
$ sudo vi /etc/wpa_supplicant
有線の設定
静的なIPアドレス
/etc/dhcpcd.conf
に存在するファイルの設定を書き加える
多分ですが、「=」の前後に空白が入ると設定が通らないかもしれないです。
interface [インターフェース名(デフォルトなら大抵は、有線がeth0,無線がwlan0)]
static ip_address=[割り当てたいipアドレス]/[サブネットマスク]
static routers=[ルータのipアドレス]
static domain_name_servers=[DNSのIPアドレス]
他のDebian系列のOSでは?
RaspberryPI OS ->
static domain_name_servers=[DNSのIPアドレス]
Ubuntu ->
dns-nameservers [DNSのIPアドレス]
dns-search [ドメイン名]
Kali Linux ->
nameserver [DNSのIPアドレス]
SSHの設定
OpenSSHの起動
設定ファイルの中身を変更する
$sudo vi /etc/ssh/sshd_config
次の一文を追加しておけば、rootでログインされることはない(Linuxではデフォルトで有効になっているOSもあったりしたような気がする)
# Authentication:
PermitRootLogin no
保存後、sshを再起動する
$sudo service ssh restart
または
/etc/init.d/ssh restart
-
上記の方法以外に 「
raspi-config
」 -> 「Interfacing Options
」 -> 「SSH
」 から 「Enable
」 を洗濯すればSSHサーバとして機能するようでしょう。 -
また、そもそもsshが入っていない場合はDebian系列であれば「
sudo apt install openssh-server
」 で対応できるのではないでしょうか
公開鍵の設定
おそらくですが、初期設定を行う場合を除いてラズベリーパイをディスプレイに直で接続して作業することはあまりないでしょう。
今の状態でもクライアント側からSSHでログインすることは可能ですが、それだと以下のようになるでしょう
$ssh ユーザ名@ホストのアドレス
このままだとパスワードを生で入力するので、あまり良くありませんよね。
なのでクライアント側で公開鍵をホスト側に投げる必要があります
まず、公開鍵と秘密鍵を生成します
$ssh-keygen -t rsa -b 2048
次にホストに公開鍵を渡します(秘密鍵は名前の通り誰にも教えないヒ・ミ・ツにしておいてください)
$ssh-copy-id ユーザ名@ホストのアドレス
または
$scp ./.ssh/id_rsa.pub ユーザ名@ホストのアドレス:/home/ユーザ名/任意のディレクトリ
$ cat id_rsa.pub >> .ssh/authorized_keys
これで公開鍵を用いて安全にSSHを使って接続できるでしょう
3:リポジトリの更新
ここまでである程度の設定が終わりました、しかし今のままではシステムを最新の状態にできていません
そのためにはパッケージマネージャを使う必要があります
RaspberryPiOSはLinuxですが、Linux自体にも様々な種類があり、大きく分けてRedHat系とDebian系が存在します
RaspberryPiOSはDebian系列であり、パッケージマネージャは「apt」が推奨されています
Debianの公式ドキュメントにaptとapt-get、aptitudeに関する短い説明が述べられているのでお暇でしたら眺めてみるのもいいかもしれません
$sudo apt update
$sudo apt upgrade
ちなみに、このaptを実行した時に見ているリポジトリってどこにあるの?
っていうのが私の疑問でしたが、以下で確認できるようです
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
deb http://archive.raspberrypi.org/debian/ buster main
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ buster main
おまけ
バックアップ&レストア方法
$ diskutil list
$ diskutil unmountDisk /dev/disk2
$ sudo dd if=/dev/disk2 of=raspi-backup.dmg bs=1m
上のコマンドを実行すると作業が完了するまで、何も表示されません
そこでDDコマンドの進捗を確認を確認するにはCtrl + T
を押す必要があります
起動時の自動ログインを変更する
設定ファイルを書き換えるよりは対話的に変更するようが楽だと思う
$sudo raspi-config
「boot option」を選択して「Console(CLI)」or「Desktop」で自動的にログインするかどうかを選択できる
RaspberryPiとPCをLANケーブルで直接繋げてログインする
PCとRaspberry PiをLANケーブルで有線接続してください
教育者向けの公式ドキュメント
教育者向けドキュメント
問題が起きた時に参考になるページ
-
raspberrypi.orgの公式ドキュメント
-
raspbianの公式ホームページ
-
Debianの日本語版リファレンス
-
https://www.debian.org/doc/manuals/debian-reference/index.ja.html