はじめに
自宅に広告ブロックDNSサーバーを立てるため、長期間電源を入れていなかった Raspberry Pi 4(ホスト名 razupai)を再構築しました。Tailscale の管理画面で確認すると、このマシンは約668日オフラインの状態でした。
OS は作り直し(新規インストール)とし、この記事では Raspberry Pi Imager で Ubuntu Server 26.04.1 を書き込むところから、初回起動の確認まで を手順書としてまとめます。途中で2つハマりどころがあったので、その切り分けも含めて記録します。
なお、この後の「Tailscale への再参加」と「AdGuard Home の導入(広告ブロックDNS化)」は続編に分けます。
環境・用意するもの
- Raspberry Pi 4(メモリ8GBモデル)
- microSDカード 64GB(SDXC)。当初使おうとした古い16GBカードは故障していた(後述)
- Windows PC と SDカードリーダー
- Raspberry Pi Imager v2.0.12
- 有線LAN接続(Wi-Fiは使わない)
手順1: Raspberry Pi Imager を入手する
公式サイトから Raspberry Pi Imager をダウンロードしてインストールします。
手順2: デバイスとOSを選ぶ
Imager を起動し、Setup steps を順に進めます。
- Device: Raspberry Pi 4 を選択
- OS: 「Other general-purpose OS」→「Ubuntu」と進み、Ubuntu Server 26.04.1 (64-bit) を選択
ここで注意点がひとつ。一覧の上の方には 26.10(Desktop / Server)が並んでいますが、26.10 は短期サポート版(サポート期間は2027年7月まで)です。サーバー用途で長く使うなら、少しスクロールして LTS の 26.04.1 を選ぶのが無難です。自分も最初 26.10 を選びかけて、途中で気づいて選び直しました。
手順3: ストレージを選ぶ
書き込み先の microSD カードを選択します。「Exclude system drives(システムドライブを除外)」のチェックは入れたままにしておくと、PC本体のドライブを誤って選ぶ事故を防げます。
手順4: カスタマイズを設定する
Imager のカスタマイズ機能で、初回起動直後の状態まで先に作り込みます。設定したのは以下です。
-
Hostname:
razupai - Localisation: Capital city = Tokyo (Japan)、Time zone = Asia/Tokyo、キーボードレイアウト = jp
- User: ユーザー名とパスワードを設定
- Wi-Fi: 有線LAN運用のため未設定(スキップ)
- Remote access: SSH を有効化(パスワード認証)
ポイントは、ユーザーとSSHをここで仕込んでおくこと です。初回起動が終われば、モニタとキーボードをつながなくてもネットワーク越しにすぐ入れる状態になります。
手順5: 書き込んで完了を確認する
内容を確認して WRITE を押すと書き込みが始まります。完了画面で、対象OSとカスタマイズの適用状況を確認できます。
- Device: Raspberry Pi 4
- Operating system: Ubuntu Server 26.04.1 (64-bit)
- Customisations applied: Hostname / Localisation / User account / SSH enabled
ハマりどころ1: 書き込みエラー(SDカードの故障)
実は、最初の書き込みは失敗しました。使ったのは「以前この Pi に入っていた 16GB の SDHC カード」です。
ディスクにファイルを書き込む際にアクセスが拒否されました。
The disk may be write-protected or in use by another application. Please ensure the disk is not mounted and try again.
対処として、エクスプローラーでカードを開いていないか確認したり、Imager を管理者として実行したり、カードを挿し直したりしましたが改善しませんでした。別のカードに替えたら、まったく同じ手順で一発成功 しました。
SDカードは、書き込み寿命を迎えると「読み取りはできるが書き込めない(読み取り専用に落ちる)」状態になることがあります。今回の症状(同じPC・同じ手順・別カードでは成功)はそれと一致するため、このカードは故障と判断して廃棄しました。
教訓: 書き込みエラーのときは、手順を疑う前にメディア自体を疑う。 予備のカードがあると切り分けが一気に進みます。
ハマりどころ2: 初回起動で IPv4 アドレスが付かない
書き込んだカードで起動すると、OS 自体は立ち上がり、SSH のホスト鍵生成まで進みました。ところが、ログインして ip a を確認すると異変がありました。
- eth0 は
UP, LOWER_UP(ケーブルリンクは正常) - しかし IPv4 アドレスがひとつも付いていない(IPv6 リンクローカルだけ)
この影響は他にも出ていて、初回起動時の cloud-init による追加パッケージ導入(avahi-daemon)が、名前解決の失敗でコケていました。
Temporary failure resolving 'archive.ubuntu.com'
Failure when attempting to install packages: ['avahi-daemon']
avahi-daemon は razupai.local のような .local 名前解決(mDNS)のためのものなので、これが入っていないとホスト名での SSH 接続もできません。根本原因は「IPアドレス自体が取れていないこと」です。
切り分け
DHCP を前提に、順に確認しました。
-
Pi 側の設定: netplan の設定は正常だった
-
cat /etc/netplan/50-cloud-init.yamlにeth0: dhcp4: trueの記載あり - ただしこのファイルは root のみ読み取り可能なため、
sudoを付けないとPermission deniedになる(これも最初に引っかかったポイント)
-
- ルーター側の設定: 自宅ルーター(NEC IX2215)の設定を確認したところ、対象セグメントの DHCP は有効で、配布プール(.100〜.250)も問題なし
-
サービスの再起動:
sudo systemctl restart systemd-networkdを試しても変化なし
設定が両側とも正しいのに取れない、という状態で、最後に 本体を再起動 したところ、あっさり DHCP でアドレスが取れました。
inet 192.168.2.104/24 metric 100 scope global dynamic eth0
原因の断定はできませんが、初回起動時の一時的な初期化のタイミング問題だったと考えています。教訓として、設定の正しさを確認し終えたら、深追いする前に再起動を試す 価値はあります。
おまけの教訓: コンソールへの複数行ペースト
切り分けの途中、複数行のコマンドをコンソールに貼り付けたら、改行が潰れてコマンド同士がくっついてしまった(例: systemd-networkdsleep のような単位名でエラー)ことがありました。コンソール作業では、コマンドは1行ずつ渡すか、; でつないだ1行にまとめると安全です。
復旧後にやった仕上げ
ネットワークが通ったので、初回起動で失敗していた分を取り戻します。
sudo apt update
sudo apt upgrade -y
sudo apt install -y avahi-daemon
- パッケージを最新化
- 失敗していた avahi-daemon を後から導入(これで
ssh ユーザー名@razupai.localのような.local名前解決が使えるようになる)
まとめ
- Raspberry Pi Imager のカスタマイズで「ホスト名・ユーザー・SSH」まで先に仕込むと、初回起動直後からネットワーク越しに作業できる
- OS は一覧上位の短期サポート版(26.10)ではなく、サーバー用途なら LTS(26.04.1)を選ぶ
- 書き込みエラーは SDカード自体の寿命(読み取り専用化)を疑う
- 初回起動で DHCP が取れないときは、Pi 側 netplan とルーター側 DHCP の両方を確認し、それでもダメなら再起動を試す
この Pi は、この後 Tailscale に再参加させ、固定IP化したうえで AdGuard Home を導入し、広告ブロックDNSとして稼働し始めました。その手順は続編にまとめます。









