雑記帳

整理しない情報集

Raspberry Pi 初期設定メモ

公開日:

カテゴリ: Raspberry Pi

Raspberry Pi を買ってみたので、初期設定のメモを残しておきます。

現在のRaspberry Piは5が最新版ですが、今回買ったのは4Bのため、最新モデルでは一部異なるかもしれません。

本記事では、Raspberry Pi OS(Lite)でWiFi接続の完全ヘッドレス環境の構築が目標となります。

microSDにイメージを展開

まずはRaspberry PiのストレージとしてmicroSDを用意し、そこにOSイメージを展開します。

公式がRaspberry Pi Imagerというツールを配布しているので、それを使用するのが便利で最も手軽です。

Raspberry Pi OSを使用する場合、Desktop版がデスクトップありのGUI環境、Lite版がデスクトップなしのCUI環境です。

ImagerではOSイメージを選択すると自動でダウンロードが行われますが、別途用意したOSイメージを使用することもできます。Raspberry Pi OSでOSのみのダウンロードも可能です。

ImagerではSSHとWiFi等の基本的な設定が行えます。以下のものを適宜設定します。

  • ユーザ名(piは非推奨)
  • ホスト名
  • タイムゾーン
  • WiFi接続情報
  • WiFi国設定
  • SSH接続情報

最近のRaspberry Pi OSではwpa_supplicantからNetworkManagerに変わっているので、/wpa_supplicant.confは使えません。また、WPA3は使えないようです。

SSHは-sk鍵(セキュリティキー)も使えます。

ちなみに/boot以外のファイルシステムはext4のため、Windowsでは見えません。やろうと思えばWSL経由でマウントできるようです。

電源投入

Raspberry Pi 4には電源ボタンはなく、接続したUSBを通電させると即電源が入ります。Raspberry Pi 5では電源ボタンが設置されたようです。

初期設定

起動したらSSHで接続します。-sk鍵を使う場合、接続元のOpenSSHのバージョンを確認しておきましょう。Windowsの場合、まだ標準組み込みのOpenSSHでは-sk鍵は使えないため、Win32-OpenSSHのv8.9以降が必要です。

root無効化

お馴染みのやつです。

# ログイン試行時にエラーメッセージ(/etc/nologin.txt)を出す
sudo usermod -s /sbin/nologin root
# ログイン試行時にエラーメッセージを出さない
sudo usermod -s /bin/false root

IPv6の無効化(任意)

今のところ、使う予定がないので無効化しておきます。

echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf > /dev/null
sudo sysctl -p

# 確認(inet6の行がなければOK)
ip a

ネットワーク設定

サーバ用途で使用する場合、IPが固定化されていないと不便なので固定化します。ついでに、デフォルトゲートウェイやDNSも設定しておきます。

sudo nmcli con mod "AP名" ipv4.addresses "IPアドレス/24"
sudo nmcli con mod "AP名" ipv4.gateway "デフォルトゲートウェイIP"
sudo nmcli con mod "AP名" ipv4.dns "DNSサーバIP"

Raspberry Piの設定

Raspberry Pi Imagerで設定できない項目を設定します。

# raspi-configのアップデート
sudo raspi-config nonint do_update
# rootfsの拡張
sudo raspi-config nonint do_expand_rootfs 0
# 冷却ファン稼働の閾値(公式冷却ファンを使用している場合のみ)
# 以下の例では60度以上で稼働
sudo raspi-config nonint do_fan 0 14 60

ここまで設定したら、一旦再起動します。

sudo reboot

パッケージの更新

いつもの。

sudo apt update
sudo apt upgrade -y
sudo apt full-upgrade -y
sudo apt autoremove -y
sudo apt autoclean -y

Swapの無効化

ストレージがSDカードのため、寿命対策で仮想メモリは無効にします。

sudo apt autoremove -y dphys-swapfile

一時ファイルをtmpfsに設定

こちらもSDカードの寿命対策で一時ファイルをtmpfs(RAMDISK)に設定します。どこまでtmpfsにするかは用途やお好みで(筆者は/tmp/var/tmpのみにしました)。

echo "tmpfs /tmp tmpfs defaults,size=64m,noatime,mode=1777 0 0" | sudo tee -a /etc/fstab > /dev/null
echo "tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0" | sudo tee -a /etc/fstab > /dev/null
# ログディレクトリのtmpfs化はお好みで
echo "tmpfs /var/log tmpfs defaults,size=16m,noatime,mode=0755 0 0" | sudo tee -a /etc/fstab > /dev/null

上記コマンドではfstabの設定を行っただけで、即時にtmpfsとしてマウントされるわけではないので、再起動するかmountコマンドでマウントが必要です。

sudo reboot

/var/tmpの容量が小さいと、パッケージの更新時に容量不足でエラーとなる場合があります。その場合、一時的にtmpfsを解除するか、サイズを上げて再マウントするかしてください。

# 再マウント
sudo mount -o remount,size=1G,noatime,mode=1777 /tmp
sudo mount -o remount,size=1G,noatime,mode=1777 /var/tmp

その他設定

以降は用途次第で。

ufwの導入

ファイアウォールのインストール・設定です。

# ufwのインストール
sudo apt install -y ufw
# デフォルトルールを拒否に設定(おそらく初期値は拒否と思われるが念の為)
sudo ufw default deny
# 拒否に設定すると自分のSSH接続ができなくなるため許可設定
sudo ufw allow proto tcp from "接続元IP" to 0.0.0.0/0 port 22
# ファイアウォールの有効化
sudo ufw enable
# サービスとして設定(PC起動時に自動開始)
sudo systemctl enable ufw

Dockerの導入

Dockerは公式の簡易導入スクリプトがあるので、それをDLして実行するのが最も簡単です。

cd ~
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
rm -f get-docker.sh
sudo systemctl enable docker

公式のスクリプトでは、aptにdockerのリポジトリが追加されるため、以後はaptの更新コマンドでdockerも更新できます。

docker-composeは、現在はdockerコマンドのサブコマンド(docker compose)で同じことができるため、基本的に追加導入は不要です。

昇格(sudo)無しでdockerコマンドを使いたい場合は、dockerグループに自分のログインユーザを追加します(実質的にsudo無しで特権を持つことになるので注意)。

sudo usermod -aG docker 自分のユーザ名

初期設定は一旦ここまでです。

カテゴリ: Raspberry Pi