3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenWrt キッティング ファームウェア ビルド

Last updated at Posted at 2025-08-12

:flag_jp: Japanese article
OpenWrt_icon.png

はじめに

本ツールについて

OpenWrtのカスタムビルド用キッティングツールです
イメージビルドからパッケージインストール、各種設定まで対応しています
IPv6 IPoE接続(MAP-E/DS-Lite)、アドガードホームの自動設定機能も入っています

ライセンス

MITライセンス(商用利用可)/ GPLv2(OpenWrt部分)
詳細: LICENSE

ファームウェア(イメージファイル)について

本ツールで生成されるファームウェアは、公式ASUがコンパイルしたバイナリです
※いわゆる野良ビルドではない

初心者対応構成

掲示板

既知の問題

25.12.0-rc1以降

  • /rom/etc/config/network /wireless /systemが存在しない
    /etc/board.d/から動的生成

  • ttyd: @lanではwgインターフェース拒否(最初のアドレスのみ受付)

  • パッケージマネージャー: レジューム機能なし

  • adguardhome.yaml: フォルダ配下に変更

UCI-defaults:
 uci-defaults (setup.sh): 20KB制限
 ※ 制限対象: ASUのdefaultsフィールド

SNAPSHOTビルド:
 週末(金曜日~日曜日)はエラーが出やすい為ビルドは週頭がおススメ
 ※パッケージなど入れ替えタイミング

aios2について

現在β版試験運用中
2025年12月6日実運用開始

フラッシュ&インストールシステム「焼いたらMAP-E

リポジトリ (GitHub)

site-u2023.github.io

システム構成図

ランディングページ(ポータルサイト)

site-u.pages.dev/

landingpage.png

初期設定 (ターミナル用)

プロトコルハンドラー登録
※ブラウザからターミナルのリンクを開けるようにする

  • レジストリ登録
    セレクターでWindowsを選択 > 開く > ダウンロード > インストール (ダブルクリック)

  • レジストリ削除
    delete.reg > Download raw file (ダウンロード) > インストール (ダブルクリック)


キッティングツール(カスタムイメージビルダー)

site-u.pages.dev/www/

builder.png

ビルダー機能比較 公式 カスタム
基本機能
デバイス検索
バージョン選択
パッケージ追加 手動入力 プリセット + 手動入力
初回起動時設定追加 手動入力 自動生成 + 手動編集
基本設定
国コード × API連携自動設定
言語コード × API連携自動設定
タイムゾーン × API連携自動設定
ゾーンネーム × API連携自動設定
ネットワーク設定
ISP判定 × API連携自動判定
PPPoE × 認証情報手動入力
DS-Lite × API連携自動構成
MAP-E × API連携自動構成
ニチバン(SNATエラー)対策 × map.shパッチ適用
アクセスポイント × 自動構成
DNS広告ブロック自動設定
アドガードホーム × YAML生成 + dnsmasq連携
アドブロックファースト × 言語別フィルター自動選択
ネクストDNS × 手動設定
高度な機能
設定インポート/エクスポート × テキスト形式
ASUサーバー生存確認 × リアルタイム表示
バグ対応
IPv4アドレスCIDR形式 × 対応済み
技術仕様
uci-defaultsサイズ制限 20KB 19KB実装/20KB
APIサーバー ASU公式 ASU公式 + 独自API
ホスティング OpenWrt公式 Cloudflare Pages
オープンソース GitHub公開 GitHub公開
MAP-E/DS-LITEで自動判定しない場合

上位ルーターのIPv6プレフィックス配布機能(DHCPv6-PD)を有効にする

各社IPv6ブリッジ機能(パススルー機能)設定


インストールされたパッケージ (POSTINST_SH.md)

初回起動時に実行されるスクリプト (SETUP_SH_JA.md)

コンソールツール (パッケージインストール・設定)

aios2.png

mainmenu.png

設定構造 (CONFIGURATION_STRUCTURE.md)

利用方法

ランディングページ利用の場合 ※要プロトコルハンドラー登録

  • ターミナル (Windows用) > セレクターでaios2を選択 > 開く

コンソール利用の場合

  • パワーシェル起動:キー入力:Win+x > a > はい

  • コンソールログイン (パワーシェル)
    ※192.168.1.1以外の場合、以下の形式で入力後にワンライナーを入力下さい

$ip="192.168.*.*"
  • コンソールログイン (192.168.1.1用)
    万能型ワンライナー
if(!$ip){$ip="192.168.1.1"}; ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -o GlobalKnownHostsFile=NUL -o HostKeyAlgorithms=+ssh-rsa -tt root@$ip
  • aios2実行
    Cloudflare Pages
mkdir -p /tmp/aios2 && wget --no-check-certificate -O /tmp/aios2/aios2.sh "https://site-u.pages.dev/www/aios2.sh" && chmod +x /tmp/aios2/aios2.sh && /tmp/aios2/aios2.sh
永続化
cat << 'EOF' > /usr/bin/aios2
#!/bin/sh
mkdir -p /tmp/aios2 && wget --no-check-certificate -O /tmp/aios2/aios2.sh "https://site-u.pages.dev/www/aios2.sh?t=$(date +%s)" && chmod +x /tmp/aios2/aios2.sh && exec /tmp/aios2/aios2.sh "$@"
EOF
chmod +x /usr/bin/aios2
aios2

繋がらない場合
  • GitHub Pages (デプロイ元)
mkdir -p /tmp/aios2 && wget --no-check-certificate -O /tmp/aios2/aios2.sh "https://raw.githubusercontent.com/site-u2023/site-u2023.github.io/main/www/aios2.sh" && chmod +x /tmp/aios2/aios2.sh && /tmp/aios2/aios2.sh


旧版

Qiita

GitHub


ネットワーク自動構成API

IPv6自動取得
auto-config.site-u.workers.dev/

IPv6手動入力
auto-config.site-u.workers.dev/?ipv6=<IPv6アドレス>

共有リソース

/www
config.js

/post-install
postinst.json
postinst.sh (aios2専用)

/uci-defaults
setup.json
setup.sh

/variables
package-manager.json

/auto-config
auto-config.js
auto-config.json

/langs
custom.**.json

公式ASUサーバー

sysupgrade.openwrt.org/overview

  • オンライン:正常応答(空白画面)
  • オフライン:応答なし

カスタムスクリプト

アドガードホーム(MAP-E / DS-LITE 対応)

スクリプト機能比較 公式版 aios2版
導入形態
OpenWrt版
公式バイナリ版 ×
基本機能
インストール方法 コマンド実行 メニュー選択
設定ファイル生成 手動作成 自動生成
認証情報設定 Web初回起動時 インストール時
日本環境最適化
日本向けDNSサーバー ×
AdGuard言語フィルタ ×
自動設定機能
リソースチェック ×
DHCPオプション ×
ファイアウォール ×
リムーブ × 初期値復元
パッケージ
htpasswd × 自動取得
設定バックアップ
既存設定バックアップ × /etc/config/*.bak
バグ対応
ルーター自己DNS解決 × (192.168.1.1) ○ (0.0.0.0)
設定ファイルなど

実行ファイル
adguardhome.sh

設定ファイル
adguardhome.yaml

説明
AdGuardHome-ja.md

adguardhome.sh実行

mkdir -p /tmp && wget --no-check-certificate -O /tmp/adguardhome.sh "https://site-u.pages.dev/www/custom-scripts/adguardhome.sh" && chmod +x /tmp/adguardhome.sh && sh /tmp/adguardhome.sh

サンプルコード

コンソール設定用

接続情報確認スクリプト(全JSON出力)
#!/bin/sh
cat > "/tmp/openwrt-network-auto-config.sh" << 'SCRIPT_END'
#!/bin/sh
set -eu
echo "情報を取得中..."
API_RESPONSE="$(wget -qO- https://auto-config.site-u.workers.dev/)"

# --- 基本情報 ---
echo "NOTICE=$(echo "$API_RESPONSE" | jsonfilter -e '@.notice')"
echo "LANGUAGE=$(echo "$API_RESPONSE" | jsonfilter -e '@.language')"
echo "COUNTRY=$(echo "$API_RESPONSE" | jsonfilter -e '@.country')"
echo "REGION_NAME=$(echo "$API_RESPONSE" | jsonfilter -e '@.regionName')"
echo "REGION_CODE=$(echo "$API_RESPONSE" | jsonfilter -e '@.region')"
echo "TIMEZONE=$(echo "$API_RESPONSE" | jsonfilter -e '@.timezone')"
echo "ZONENAME=$(echo "$API_RESPONSE" | jsonfilter -e '@.zonename')"

# --- 接続情報 ---
echo "IPV4=$(echo "$API_RESPONSE" | jsonfilter -e '@.ipv4')"
echo "IPV6=$(echo "$API_RESPONSE" | jsonfilter -e '@.ipv6')"
echo "ISP=$(echo "$API_RESPONSE" | jsonfilter -e '@.isp')"
echo "AS=$(echo "$API_RESPONSE" | jsonfilter -e '@.as')"

# --- DS-Lite (Transix/Xpass/v6コネクト) ---
echo "AFTR_TYPE=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.aftrType')"
echo "AFTR_FQDN=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.aftrFqdn')"
echo "AFTR_IPV6_EAST=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftrAddresses.east')"
echo "AFTR_IPV6_WEST=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftrAddresses.west')"


echo "AFTR_JURISDICTION=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.jurisdiction')"
echo "AFTR_IPV6=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.aftrIpv6Address')"

echo "AFTR_PEERADDR=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.peeraddr')"
echo "AFTR_ADDRESS=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.aftrAddress')"

# --- MAP-E (v6プラス/OCN等) ---
echo "MAPE_BR_IPV6=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.brIpv6Address')"
echo "MAPE_EA_BITS=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.eaBitLength')"
echo "MAPE_IPV4_PREFIX=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv4Prefix')"
echo "MAPE_IPV4_PLEN=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv4PrefixLength')"
echo "MAPE_IPV6_PREFIX=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6Prefix')"
echo "MAPE_IPV6_PLEN=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6PrefixLength')"
echo "MAPE_PSID_OFFSET=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.psIdOffset')"
echo "MAPE_PSIDLEN=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.psidlen')"
echo "MAPE_CALC_OFFSET=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.calculatedOffset')"
echo "MAPE_IPV6_PREFIX_GUA=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6Prefix_gua')"

SCRIPT_END
sh "/tmp/openwrt-network-auto-config.sh"

MAP-E(v6プラス/OCN等)
#!/bin/sh
set -e

# パッケージのインストール
PKGS="map coreutils-sha1sum"
if command -v opkg >/dev/null 2>&1; then
    for pkg in $PKGS; do
        opkg list-installed | grep -q "^$pkg " || NEED_INSTALL="$NEED_INSTALL $pkg"
    done
    [ -n "$NEED_INSTALL" ] && opkg update && opkg install $NEED_INSTALL
fi
if command -v apk >/dev/null 2>&1; then
    for pkg in $PKGS; do
        apk info -e $pkg 2>/dev/null || NEED_INSTALL="$NEED_INSTALL $pkg"
    done
    [ -n "$NEED_INSTALL" ] && apk update && apk add $NEED_INSTALL
fi

# 変数の定義
WAN="$(uci -q get network.wan.device || echo wan)"
MAPE="mape"
MAPE6="mape6"

# APIからMAP-E情報を取得
API_RESPONSE=$(wget -qO- https://auto-config.site-u.workers.dev/)
mape_br=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.brIpv6Address')
mape_ipv4_prefix=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv4Prefix')
mape_ipv4_prefixlen=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv4PrefixLength')
mape_ipv6_prefix=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6Prefix')
mape_ipv6_prefixlen=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6PrefixLength')
mape_ealen=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.eaBitLength')
mape_psidlen=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.psidlen')
mape_psid_offset=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.psIdOffset')
mape_gua_prefix=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.ipv6Prefix_gua')

# Network設定
uci batch <<EOF
set network.wan.disabled='1'
set network.wan.auto='0'
set network.wan6.disabled='1'
set network.wan6.auto='0'
set network.${MAPE6}=interface
set network.${MAPE6}.proto='dhcpv6'
set network.${MAPE6}.device='${WAN}'
set network.${MAPE6}.reqaddress='try'
set network.${MAPE6}.reqprefix='auto'
set network.${MAPE}=interface
set network.${MAPE}.proto='map'
set network.${MAPE}.maptype='map-e'
set network.${MAPE}.peeraddr='${mape_br}'
set network.${MAPE}.ipaddr='${mape_ipv4_prefix}'
set network.${MAPE}.ip4prefixlen='${mape_ipv4_prefixlen}'
set network.${MAPE}.ip6prefix='${mape_ipv6_prefix}'
set network.${MAPE}.ip6prefixlen='${mape_ipv6_prefixlen}'
set network.${MAPE}.ealen='${mape_ealen}'
set network.${MAPE}.psidlen='${mape_psidlen}'
set network.${MAPE}.offset='${mape_psid_offset}'
set network.${MAPE}.mtu='1460'
set network.${MAPE}.encaplimit='ignore'
set network.${MAPE}.legacymap='1'
set network.${MAPE}.tunlink='${MAPE6}'
EOF

# GUAプレフィックスが存在する場合のみ設定
if [ -n "${mape_gua_prefix}" ]; then
    uci -q set network.${MAPE6}.ip6prefix="${mape_gua_prefix}"
fi

uci commit network

# DHCP設定
uci batch <<EOF
set dhcp.${MAPE6}=dhcp
set dhcp.${MAPE6}.interface='${MAPE6}'
set dhcp.${MAPE6}.master='1'
set dhcp.${MAPE6}.ra='relay'
set dhcp.${MAPE6}.dhcpv6='relay'
set dhcp.${MAPE6}.ndp='relay'
set dhcp.${MAPE6}.ignore='1'
set dhcp.lan.ra='relay'
set dhcp.lan.dhcpv6='relay'
set dhcp.lan.ndp='relay'
set dhcp.lan.force='1'
commit dhcp
EOF

# Firewall設定
uci batch <<EOF
del_list firewall.@zone[1].network='wan'
del_list firewall.@zone[1].network='wan6'
add_list firewall.@zone[1].network='${MAPE}'
add_list firewall.@zone[1].network='${MAPE6}'
set firewall.@zone[1].masq='1'
set firewall.@zone[1].mtu_fix='1'
commit firewall
EOF

# map.shの修正
MAP_SH="/lib/netifd/proto/map.sh"  
EXPECTED_HASH="7f0682eeaf2dd7e048ff1ad1dbcc5b913ceb8de4"
ACTUAL_HASH=$(sha1sum "$MAP_SH" | awk '{print $1}')
if [ "$ACTUAL_HASH" = "$EXPECTED_HASH" ]; then
cp "$MAP_SH" "$MAP_SH.bak"
sed -i '1a # github.com/fakemanhk/openwrt-jp-ipoe\nDONT_SNAT_TO="0"' "$MAP_SH"
sed -i 's/mtu:-1280/mtu:-1460/g' "$MAP_SH"
sed -i '137,158d' "$MAP_SH"
sed -i '136a\
\t  if [ -z "$(eval "echo \\$RULE_${k}_PORTSETS")" ]; then\
\t    json_add_object ""\
\t      json_add_string type nat\
\t      json_add_string target SNAT\
\t      json_add_string family inet\
\t      json_add_string snat_ip $(eval "echo \\$RULE_${k}_IPV4ADDR")\
\t    json_close_object\
\t  else\
\t    local portcount=0\
\t    local allports=""\
\t    for portset in $(eval "echo \\$RULE_${k}_PORTSETS"); do\
\t\tlocal startport=$(echo $portset | cut -d"-" -f1)\
\t\tlocal endport=$(echo $portset | cut -d"-" -f2)\
\t\tfor x in $(seq $startport $endport); do\
\t\t\tif ! echo "$DONT_SNAT_TO" | tr " " "\\n" | grep -qw $x; then\
\t\t\t\tallports="$allports $portcount : $x , "\
\t\t\t\tportcount=`expr $portcount + 1`\
\t\t\tfi\
\t\tdone\
\t    done\
\t\tallports=${allports%??}\
\t    nft add table inet mape\
\t    nft add chain inet mape srcnat {type nat hook postrouting priority 0\\; policy accept\\; }\
\t\tlocal counter=0\
\t    for proto in icmp tcp udp; do\
\t\t\tnft add rule inet mape srcnat ip protocol $proto oifname "map-$cfg" counter snat ip to $(eval "echo \\$RULE_${k}_IPV4ADDR") : numgen inc mod $portcount map { $allports } comment "mape-snat-$proto"\
\t    done\
\t  fi' "$MAP_SH"
fi

echo "MAP-E及びmap.sh設定が完了しました"
echo "何かキーを押すと再起動します"
read dummy
reboot

DS-Lite(Transix/Xpass/v6コネクト等)
#!/bin/sh
set -e

# パッケージのインストール
PKGS="ds-lite"
if command -v opkg >/dev/null 2>&1; then
    for pkg in $PKGS; do
        opkg list-installed | grep -q "^$pkg " || NEED_INSTALL="$NEED_INSTALL $pkg"
    done
    [ -n "$NEED_INSTALL" ] && opkg update && opkg install $NEED_INSTALL
fi
if command -v apk >/dev/null 2>&1; then
    for pkg in $PKGS; do
        apk info -e $pkg 2>/dev/null || NEED_INSTALL="$NEED_INSTALL $pkg"
    done
    [ -n "$NEED_INSTALL" ] && apk update && apk add $NEED_INSTALL
fi

# 変数の定義
WAN="$(uci -q get network.wan.device || echo wan)"
DSL="dsl"
DSL6="dsl6"

# APIからDS-Lite AFTR情報を取得
API_RESPONSE=$(wget -qO- https://auto-config.site-u.workers.dev/)
dslite_aftr_address=$(echo "$API_RESPONSE" | jsonfilter -e '@.aftr.aftrAddress')

# Network設定
uci batch <<EOF
set network.wan.disabled='1'
set network.wan.auto='0'
set network.wan6.disabled='1'
set network.wan6.auto='0'
set network.${DSL6}=interface
set network.${DSL6}.proto='dhcpv6'
set network.${DSL6}.device='${WAN}'
set network.${DSL6}.reqaddress='try'
set network.${DSL6}.reqprefix='auto'
set network.${DSL}=interface
set network.${DSL}.proto='dslite'
set network.${DSL}.peeraddr='${dslite_aftr_address}'
set network.${DSL}.tunlink='${DSL6}'
set network.${DSL}.mtu='1460'
set network.${DSL}.encaplimit='ignore'
commit network
EOF

# DHCP設定
uci batch <<EOF
set dhcp.${DSL6}=dhcp
set dhcp.${DSL6}.interface='${DSL6}'
set dhcp.${DSL6}.master='1'
set dhcp.${DSL6}.ra='relay'
set dhcp.${DSL6}.dhcpv6='relay'
set dhcp.${DSL6}.ndp='relay'
set dhcp.${DSL6}.ignore='1'
set dhcp.lan.ra='relay'
set dhcp.lan.dhcpv6='relay'
set dhcp.lan.ndp='relay'
set dhcp.lan.force='1'
commit dhcp
EOF

# Firewall設定
uci batch <<EOF
del_list firewall.@zone[1].network='wan'
del_list firewall.@zone[1].network='wan6'
add_list firewall.@zone[1].network='${DSL}'
add_list firewall.@zone[1].network='${DSL6}'
set firewall.@zone[1].masq='1'
set firewall.@zone[1].mtu_fix='1'
commit firewall
EOF

echo "DS-Lite設定が完了しました"
echo "何かキーを押すと再起動します"
read dummy
reboot

事例(ペルソナ)

OpenWrt初学者の場合

焼いたらMAP-E

動機:

  • 出来るだけ簡単確実に作りたい

環境:

事前準備:

  • 不要

手順:

  • ビルダー起動:キッティングツールを開く
  • デバイス選択:デバイス名を入力、または設定ファイルをインポート
  • ビルド実行:ビルドをリクエストを実行
  • フラッシュ:生成されたFACTORYイメージをデバイスの管理画面からアップロード
  • OpenWrt化完了:自動再起動後、インターネット利用可能
    • Wi-Fi接続:SSID:OpenWrt / パスワード:password
  • 管理画面ログイン:http://openwrt.lan

豆知識:

  • FACTORYイメージが利用出来るデバイスの場合、ストックファームウェアの「ファームウェア更新」などから直接フラッシュ可能
    ※デバイスを文鎮化させるリスクを低減させる

SNAPSHOTでLuCIを初回起動時から利用したい場合

SNAPSHOTも「LuCi入ってる!」

動機:

  • コマンド入力は不慣れなので最初からLuCIを使いたい

環境:

  • OpenWrt化予定デバイス:Buffalo WSR-6000AX8
    ※デバイスサポートが追加されたばかりでSNAPSHOTしかない

手順

  • ビルダー起動:キッティングツールを開き、SNAPSHOTを選択
  • デバイス選択:デバイス名を入力
  • パッケージ確認:Post-Install (Package installation script)を展開
  • LuCI及び日本語化パッケージがセット済み
apk-mbedtls base-files ca-bundle dnsmasq dropbear firewall4 fitblk fstools kmod-crypto-hw-safexcel kmod-gpio-button-hotplug kmod-leds-gpio kmod-nft-offload libc libgcc libustream-mbedtls logd mtd netifd nftables odhcp6c odhcpd-ipv6only ppp ppp-mod-pppoe procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd wpad-basic-mbedtls kmod-mt7915e kmod-mt7986-firmware mt7986-wo-firmware luci luci-app-ttyd openssh-sftp-server luci-mod-dashboard luci-app-attendedsysupgrade owut map coreutils-sha1sum luci-i18n-base-ja luci-i18n-package-manager-ja luci-i18n-firewall-ja luci-i18n-ttyd-ja luci-i18n-dashboard-ja luci-i18n-attendedsysupgrade-ja

豆知識:

  • SNAPSHOT版はLuCIが入っていない
  • ビルド時の post-install スクリプトは、LuCIを含む任意のパッケージを自動インストールさせることができる

公式

開発経緯

設計思想

何も知らないド素人がひたすら検索&&モノマネ乞食を初めて早二年が過ぎた
正直スキルはたいして向上していないがAIの使い方は多少なり学んだ
OpenWrt専用の初期設定ツールも、nodeで自動化から始まり、パッケージ化なども試した
オールパッケージ化しても良いけど、メンテなんてとても手が回らないのも目に見えている
ところでそもそも、どれもしっくりこない
初期設定とは最初に一度しか使わないのだから、わざわざパッケージをインストールする必要性が無い
そしてパッケージだろうが、ダウンロードだろうが、先にネットワークに接続しないとならない
しかし、AAAAガァーーー!!、RAガァーーー!!、となり接続出来ない
つまり、鶏卵なわけだ

OpenWrt公式ビルダーは結構優秀な感じなので
これにスキンを被せてみよう!!
これなら、そもそも鶏卵にならずにすむわけだ
やっと理想のイメージになった
ようするに、キッティング だよね
光岡風な手法だが自分で使ってて便利過ぎて嗤う
焼いたらMAP-E だわ

あとがき

今後は、ファームウェアセレクターを主流に作ろうと思う
HTMLなので、機能追加やレイアウトは容易だしね

ふぅぅ、一応ほぼほぼ出来た
焼いたらMAP-E」がキャッチだな(笑)
細かいデザイン (CSS)は調整が必要だが、大枠は動くね

  • 2025年8月17日
    あと、設定用スクリプトファイルを階層構造でも用意して入れたら良いかな
    最後にINIでインプットアウトプット機能を付与しておしまいかな

  • 2025年8月24日
    ASUサーバーの20KB制限は何気にキツイー
    せめて200KBくらいあれば、usteerスクリプトとか組めるのにな
    全部で17KBで収まりました

  • 2025年10月4日
    良くも悪くも全く変わらないmap.sh
    おかげでmap.shを全文書き出しから差分適用仕様に修正出来たので12.9KBにシェイプ出来た

sha1sum map-21.02.sh map-22.03.sh map-23.05.sh map-24.10.sh
7f0682eeaf2dd7e048ff1ad1dbcc5b913ceb8de4  map-21.02.sh
7f0682eeaf2dd7e048ff1ad1dbcc5b913ceb8de4  map-22.03.sh
7f0682eeaf2dd7e048ff1ad1dbcc5b913ceb8de4  map-23.05.sh
7f0682eeaf2dd7e048ff1ad1dbcc5b913ceb8de4  map-24.10.sh
  • 2025年10月6日
    ペルソナで事例を書いてみたが、OpenWrt化作業時間は正味数分だ、、、

  • 2025年10月10日
    SNAPSHOTでIPv4アドレスを変更させて焼くと、v4が死んでいた
    SNAPSHOTはv4アドレスがCIDR表記(Classless Inter-Domain Routing)形式になった
    つまり192.168.1.1/24のように記述する必要があったのにサブネットマスクの部分の/24を入れてなかったので、255.255.255.0が無い状態だったわけですね
    ちなみに、公式ビルダーも修正されてないけど、、、

  • 2025年10月12日
    ASUサーバーの生存確認を追加してみた。
    いくつかエラーパターンを仕込んどこうかな
    aiosを作り始めてから5カ月経ったが、やっと完成の目途が立った!
    というか、エラーパターン作ったら終わりかな
    あとは、ISPの部分のソースを別ファイル化してグローバル化させるか
    要件等だなあ
    現在オフラインですね、、、
    ASU.jpg

  • 2025年10月13日
    大きなバグは無さそうなので、これで一応は開発完了かな
    今後、ASUサーバーのエラーを見つけ次第、そのエラーの詳細表示するように修正する予定
    次に既存システムの集大成で、ファームウェアビルダーとaiosを統合して、同一エンジン、同一データベースで公式をフックしないで、完全独自仕様で作る予定

  • 2025年11月12日
    aios-tui.shリネーム (aios2.sh)もTUI版はほぼ完成した。
    text版がやっつけだから続けて作ろう。
    最初からwhiptailで作れば簡単だった説・・・
    ところで、このシステム全体の肝って実はネットワーク自動構成APIなんだよね
    でもこれは既存資産(internet-mape.shなど)が有ったのでAIを使って正味数十分で完成した
    つまりUI作成にほぼ全リソースを使ってる訳だけど、このAPIでmap-e設定だけで超簡単に作るならニチバン対策付きでも100行(サンプル)で作れちゃうんだよな・・・
    map.sh無しなら60行!!
    UI作るの阿呆らしくもなってくるな。。。

  • 2025年11月13日
    setup.shのmap.shパッチ適用前にmap.shをsha1sumで検証する事にした
    これで懸念だったmap.sh更新時にネットワークが不安定になる要素を排除出来た

  • 2025年11月16日
    たまに調べものの検索で、自分のスクリプトを使って頂いているのを見つけると正直嬉しいですね
    知的好奇心のまま作ってはいるが、折角の成果物、使って頂ければそれにこしたことはないです
    そういえば、このITmediaの記事もスクリプトをリニューアルするきっかけだったなー
    当時は自分が10G回線を持っていなかったし、かつスキルも無かったので対応しきれなかったですね
    結果的にも、この記事がきっかけで、このネットワーク自動構成APIが完成したようなものでしたね
    そろそろ次のお題を探そうかな

  • 2025年11月20日
    そういえば、SNAPSHOTもLuCIを標準実装してた
    LuCi自体をパッケージの項目化した方が良いのかな
    まあ削りたい人はPostinstから削れば良いだけだけどね
    逆に消極的SNAPSHOTユーザー(SNAPSHOTしか選択肢がないデバイス)には良いだろうね
    SNAPSHOTも「LuCi入ってる!」が新しいキャッチです
    aiosTUI版にカスタムフィードパッケージを実装した
    あとはカスタムスクリプトの項目を作ってAdGuardHomeとかのスクリプト群を実装する予定だけど、実装方法で考え中、、、

  • 2025年11月30日
    aios2に以下の機能を追加した

    • カスタムスクリプト:
      AdGuardHomeを追加した
    • 復元ポイント:
      パッケージ追加・設定追加変更などで自動作成するようにした
      また、一意の日付から復元ポイントを選択できるようにした
  • 2025年12月6日
    aios2もなんとかまともに動くようになった(はず)
    adguardhomeをsetup.shに詰め込んだら、計18.4KBになった
    あと1つ2つ小さいスクリプトなら入るかな

  • 2025年12月8日
    SNAPSHOTのttydがWireguardで入れなくなった
    初期値の@lanにしていたが、最初のアドレスしか受け付けなくなった為、wgインターフェースが拒否されたわけだね

  • 2025年12月10日
    パッケージマネージャーにはレジューム機能が無い!!!
    SNAPSHOTのadguardhome.yamlがフォルダ配下になっていた
    Argonはそういえばapk対応になってるんだよね
    修正大忙し。。。

  • 2025年12月11日
    ブラウザのF12(開発者ツール)の使い方を初めて理解した。。。
    Console > allow pasting (要手打ち) > Enter (セキュリティ許可)
    で利用出来る、知らんわそんなん、今知った!

  • 2025年12月22日
    さようなら OPKG ( ;∀;)
    影響が大きいバグは片づけたけど、小さいのが散見。。。
    キッティングツールもaios2も25.12のRCもSNAPSHOTも動いた
    次はバグのまま放置プレイなfilebrowser.shを仕上げるかな
    そういえばMLOは実装はしてあるけどまだ動かないね

  • 2026年1月6日
    25.12.0-rc1では/rom/etc/config/networkが無い!!!!!!!!
    /etc/board.d/スクリプトから動的に生成される仕様に変わってる・・・
    ざっくり調べた限り、複数バリアント対応になったという事か?

  • 2026年1月14日
    ipv4.web.fc2.com/map-e.htmlも古くなってきたね。
    5レコード追加したけど、OCN以外も増えてるだろうね。

  • 2026年1月15日
    OCNは3/4レコードくらい間違っていた
    v6プラスのBRを書いてなかった
    数か月の間壊れたままだった・・・
    OCNはFC2データから生データに差し替えた
    一部設定値が違うが実はこちらが正しい
    (どちらも必要な値は同じになるので結果は同じだ)

  • 2026年1月23日
    Velop WRT Pro 7も、aios2に対応させようかと思って、map.shのハッシュ値を調べた

wget -qO- https://raw.githubusercontent.com/openwrt/openwrt/openwrt-19.07/package/network/ipv6/map/files/map.sh | sha1sum
431ad78fc976b70c53cdc5adc4e09b3eb91fd97f  -
3
2
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?