久々にRaspberry PiのOSインストールと初期セットアップを行おうとしたら以前の記事を書いたときから微妙な変化があった。
前提
- サーバとして運用するからGUI環境は不要
- ネットワークにはEthernet接続しかしない
- インストール先のメディアは16 GBのSDカード
OSイメージの入手からインストールまで
Raspberry Pi OSの公式ページからダウンロードする。 Raspberry Pi OS (64-bit)のRaspberry Pi OS LiteにあるDownloadボタンを押す。 XZ圧縮されたOSイメージがダウンロードされる。 ダウンロード時点では次のファイル名だった。
2025-12-04-raspios-trixie-arm64-lite.img.xz
イメージをSDカードに書き込む際のツールとしてRufusをつかった。 上記のXZ圧縮されたイメージを展開することなく直接指定して良い。
初回起動前の設定
消費電力削減とセキュリティ向上のため、不要な機能をOFFにする。
まずは先ほどOSイメージを書き込んだSDカードのFAT32パーティション領域をマウントする。
マウントしたディレクトリ直下にconfig.txtが存在することを確認する。
SSHデーモンの有効化
ディスプレイやキーボード、マウスをいちいち付外ししたくないからSSH接続できるようにしたい。
Raspberry Pi公式の説明によると
sshファイルかssh.txtファイルがあるとブート時にSSHサーバが有効化されるようだ。
ssh or ssh.txt
When this file is present, enables SSH at boot. SSH is otherwise disabled by default. The contents do not matter. Even an empty file enables SSH.
ここではマウントしたディレクトリ直下に空のsshファイルを作成した。
不要な機能を無効化する
消費電力削減とセキュリティ向上のため、不要な機能をOFFにする。
ディレクトリ直下のconfig.txtを開き以下の設定を追加する。
# オンボードのサウンドカードをOFFにする。 dtparam=audio=off # 有線接続しかしないから、BluetoothをOFFにする。 dtoverlay=disable-bt # 有線接続しかしないから、Wi-FiをOFFにする。 dtoverlay=disable-wifi
詳しい設定内容はconfig.txtのドキュメントを参照せよ。
dtoverlayで設定するものについてはGitHubのfirmwareのREADMEを参照しないといけない場合がある。
ユーザを作成する
以前はデフォルトユーザとしてユーザ名pi、パスワードraspberryが作成されていたが、現在は作られなくなった。
headlessインストールではこの仕様は困る。
ただし、ドキュメントによるとuserconf.txtを作成し、そこに1行のユーザ情報を記載しておけば作成してくれる。
This file should contain a single line of text, consisting of
<username>:<password>: your desired username, followed immediately by a colon, followed immediately by an encrypted representation of the password you want to use.
これは/etc/shadowの1行分を記載する必要がある。
必然的に<password>の部分はハッシュ化されたものを書き込む必要がある。
そのパスワードハッシュはopensslコマンドで次のようにして作成できる。
# ソルトをtest、パスワードをtestとするSHA-512ハッシュの生成 $openssl passwd -6 -salt 'test' 'test' $6$test$s73HObLPm3spffEErq3RSoFse8b43m.tVitc.rEapP4nbLqdmZZabQpuXHItK6ZdlYGqOs5nbhFsWb.ZHZlYa0
<username>をuserとした場合、最終的にuserconf.txtの中身は次のようになる。
user:$6$test$s73HObLPm3spffEErq3RSoFse8b43m.tVitc.rEapP4nbLqdmZZabQpuXHItK6ZdlYGqOs5nbhFsWb.ZHZlYa0
ソルト長はNISTガイドラインで少なくとも32 bitとされているから、4文字以上が望ましい
初回起動と最低限の初期設定
LANケーブルを繋ぎ、SDカードを挿した状態で電源を供給する。 しばらく待つとDHCPサーバ側でIPリースが行われたことが分かるから、次のようにしてラズパイにSSHする。
ssh ${前節で作成したユーザ}@${リースされたIPアドレス}
SSH後の初期設定
raspi-configを使ってTUIで各種設定する。
sudo raspi-config
後から変更できるものが多いため、そこまで慎重にならなくてよい。
- Interface Options
- SSHサーバを有効化
- Localisation Options
- ロケールをja_JP.UTF-8に変更
- タイムゾーンをTokyoに変更
パッケージの調整
vimをインストール
sudo apt install vim-nox
不要パッケージをまとめてアンインストールする。 ここでは特に、不要なデーモンを停止してRAMの使用量を少しでも削減することに重きを置いている。
sudo apt purge alsa-utils avahi-daemon bluez modemmanager nano wpasupplicant sudo apt autoremove
それぞれのパッケージが不要な理由
- alsa-utils オーディオを使わないから
- avahi-daemon mDNSを使わないから
- bluez Bluetoothを使わないから
- modemmanager モバイル回線経由でのネットワーク接続などしないから
- nano 代わりにvimを使うから
- wpasupplicant Wi-Fiを使わないから
IPアドレスの固定化
NetworkManagerと対話することで固定のIPアドレスを設定できる。
ここでは少ない操作で設定可能なnmcliを使う。
例えばGWのIPv4アドレスを192.168.1.254/24、自ホストの固定IPアドレスを192.168.1.1/24の場合なら次のように設定すればよい。
sudo nmcli con modify 'Wired connection 1' ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.254 connection.autoconnect yes
modifyの次の接続の識別子はUUIDでの指定もできる。
そのUUIDは次のコマンドで確認できる。
nmcli connection
以前はdhcpcd.confファイルを変更して修正していたが、Debian 13では機能しないことに注意せよ。
再起動と固定したIPアドレスでのSSH再接続
sudo reboot
してしばらく待ち、固定後のアドレスでsshしてみる。
IPが変わっているためssh時にman-in-the-middle攻撃を受けているかも警告が出ることがある。
~/.ssh/known_hostsから該当する行を削除すれば接続できる。