コンテンツにスキップ

setup(200-599)

200_netplan_disable_nm.sh

このスクリプトは、ネットワーク管理を systemd-networkd に統一するために、以下の処理を行います。

1) 競合サービスの無効化
NetworkManager, wpa_supplicant, wpa_supplicant@${WIFI_INTERFACE}.service

2) systemd-networkd の有効化
systemctl enable/start systemd-networkd

3) eth0 を DHCP4 有効にする netplan ファイルの作成 → 適用

  • 新規作成時:600 パーミッションで保存 → netplan apply
  • 既存と差分あり:上書き保存 → netplan apply
  • 差分なし:スキップ

注意

  • リモート実行時の断: 本処理はネットワークレイヤを切り替えるため、SSH セッションが切断される可能性があります。コンソールでの実行を推奨します。
  • DNS 構成: renderer: networkd に切り替えると、systemd-resolved や NetworkManager の resolv.conf 管理と競合しません。別スクリプトで resolv.conf を immutable 化している場合は整合に注意してください。
  • Wi-Fi 管理: Wi-Fi は systemd-networkd + .network/wpa_supplicant@.service 等で別途構成します(本ファイルは eth0 のみを扱います)。

300_hostapd_dnsmasq.sh

このスクリプトは、Wi-Fi インタフェース($WIFI_INTERFACE)で AP(アクセスポイント)モードを構成するため、hostapddnsmasq の設定ファイルを 冪等に作成/更新します。
あわせて /etc/default/hostapd の DAEMON_CONF を指定し、mask 解除を行います。
設定ファイルの詳細内容はソースを参照

処理の流れ

1) hostapd.conf の作成/更新(冪等)
- 期待する内容文字列を生成し、既存と diff 比較して差分があれば上書き
- /etc/default/hostapdDAEMON_CONF="<path>"sed で設定
- systemctl unmask hostapd を実施

2) dnsmasq.conf の作成/更新(冪等)
- 期待する内容(interface=$WIFI_INTERFACE, dhcp-range=192.168.4.2,192.168.4.20,..., dhcp-option 3/6 = $AP_IP など)を生成し、差分があれば上書き

注意

  • 規制域・チャネル: country_code=JP とチャネル設定は電波法に従って選定してください。rfkill のブロック解除も確認を。
  • DHCP の重複: 既に他の DHCP サーバが動作している環境では衝突に注意してください。
  • セキュリティ: PASSPHRASE は十分に強固な値を使用し、配布範囲や電波到達範囲にも注意してください。

400_ap_start_wifi_or_ap.sh

このスクリプトは、ブート後に Wi-Fi 接続を試行し、失敗したら AP を起動する処理を自動化します。
ヘルパースクリプトを配置し、oneshot サービスwifi-or-ap.service)と タイマーwifi-or-ap.timer)を作成・有効化します。
タイマーは 起動30秒後に実行し、さらに 5分間隔で再実行します(OnUnitActiveSec=5min)。

処理の流れ

1) シンボリックリンクの作成

2) systemd ユニットの作成(差分あれば更新)

3) systemd タイマーの設定(毎回書き込み)

Note

「ブート時のみ」実行にしたい場合 は、タイマーの OnUnitActiveSec=5min を削除してください(現状は5分間隔で再実行されます)。


500_wifi_manager.sh

このスクリプトは、Flask 製の Wi-Fi マネージャ(wifi_manager.py を Web ルートへ配置し、テンプレート index.html をコピー、権限/グループ を整えた上で systemd サービスwifi-manager.service)を作成・有効化します。

処理の流れ

1) テンプレート用のディレクトリ作成

2) wifi_manager.py の配置(冪等)
- 変更がある場合のみ cp"$WIFI_MANAGER_APP" へ更新

3) index.html の配置(冪等)
- "$WEB_TEMPLATES_DIR/$(basename "$INDEX_HTML_FILE")" に差分更新

4) 権限調整
- chgrp -R www-data "$WEB_ROOT"
- chmod -R 775 "$WEB_ROOT"
- usermod -a -G www-data "$USERNAME"(要再ログイン)

5) systemd ユニット生成(差分更新)
- 内容は、ソースファイルを参照

注意

  • 起動ユーザは rootUser=root)。非 root 実行にしたい場合は User= を適切なユーザに変更し、権限/ポートも合わせて設計してください。
  • グループ反映usermod -a -G www-data "$USERNAME"再ログイン後に反映されます。
  • 起動順After=wifi-or-ap.service により、存在すればその後に起動します(無ければ無視されます)。
  • ポート番号:リッスンポートはアプリ実装に依存します。必要に応じてリバースプロキシ(nginx など)やファイアウォールを設定してください。

550_boot_optimize.sh

このスクリプトは、バックグラウンド更新・起動サービスを最小化し、リソース消費と予期しない変更を抑えるための最適化を行います。
主な内容は snapd の更新抑止とソケット起動化不要サービスのマスクfstrim のタイマー化Raspberry Pi の Bluetooth HCI 無効化 です。

処理の流れ

1) snapd 最適化 - lxd を無効化、関連アクティベータをマスク
- 自動更新を10年保留
- 現在のスナップを手動更新(初回のみ長め)
- snapd.seeded.service を無効化(手動で必要時に更新)
- ソケット起動化(常駐停止)

2) 不要サービスのマスク - cloud-init 一式cloud-init-local.service / cloud-init.service / cloud-config.service / cloud-final.service - Raspberry Pi EEPROM 自動更新rpi-eeprom-update.service - ネットワークフックnetworkd-dispatcher.service - fstrim サービスfstrim.service(→ タイマーに任せる)

3) fstrim をタイマーで実行 - 週1回実行(デフォルト)

4) Bluetooth (HCI UART) 無効化(Pi)

注意

  • セキュリティ更新: snap の自動更新を長期保留するため、手動で定期的な snap refresh 実行を推奨します。
  • cloud-init: 画像初期化やメタデータ依存の環境では cloud-init を無効化しないでください。イメージ配布後の端末でのみ無効化する運用が安全です。
  • Raspberry Pi 専用項目: rpi-eeprom-update.servicehciuart.service は Pi 向けです。他環境では無視されます(エラーは || true で握りつぶし)。
  • ソケット起動: snapd は要求時に自動起動します。常時常駐が必要な運用の場合は snapd.service を再度 enable してください。