はじめに
本ツールについて
OpenWrtのカスタムビルド用キッティングツールです
イメージビルドからパッケージインストール、各種設定まで対応しています
IPv6 IPoE接続(MAP-E/DS-Lite)の自動設定機能も入っています
ライセンス
MITライセンス(商用利用可)/ GPLv2(OpenWrt部分)
詳細: LICENSE
ファームウェア(イメージファイル)について
本ツールで生成されるファームウェアは、公式ASUがコンパイルしたバイナリです
※いわゆる野良ビルドではない
初心者対応構成
- Windowsからの導入手順
- スクリプトでの自動設定
-
UCI (ttyd)、Webコンソール (LuCi)、ファイラー (SFTP)にて比較作業がおススメ
掲示板
フラッシュ&インストールシステム「焼いたらMAP-E」
リポジトリ (GitHub)
システム構成図
ランディングページ(ポータルサイト)
初期設定 (ターミナル用)
プロトコルハンドラー登録
※ブラウザからターミナルのリンクを開けるようにする
-
レジストリ登録
セレクターでWindowsを選択 >開く> ダウンロード > インストール (ダブルクリック) -
レジストリ削除
delete.reg >Download raw file(ダウンロード) > インストール (ダブルクリック)
キッティングツール(カスタムイメージビルダー)
| 機能比較 | 公式ビルダー | カスタムビルダー |
|---|---|---|
| 基本機能 | ||
| デバイス検索 | ○ | ○ |
| バージョン選択 | ○ | ○ |
| パッケージ追加 | 手動入力 | プリセット + 手動入力 |
| 初回起動時設定追加 | 手動入力 | 自動生成 + 手動編集 |
| 国コード自動設定 | × | ○ |
| 言語コード自動設定 | × | ○ |
| タイムゾーン自動設定 | × | ○ |
| ゾーンネーム自動設定 | × | ○ |
| ISP自動判定 | × | ○ |
| 日本専用機能 | ||
| DS-Lite自動設定 | × | ネットワーク自動構成API連携 |
| MAP-E自動設定 | × | ネットワーク自動構成API連携 |
| map.shパッチ適用 | × | ニチバン(ポート枯渇/SNATエラー)対策 |
| 高度な機能 | ||
| 設定インポート/エクスポート | × | テキスト形式 |
| ASUサーバー生存確認 | × | リアルタイム表示 |
| バグ対応 | ||
| IPv4アドレス変更 | × | SNAPSHOT対応済み |
| 技術仕様 | ||
| uci-defaultsサイズ制限 | 20KB | 13KB実装/20KB |
| APIサーバー | ASU公式 | ASU公式 + 独自API |
| ホスティング | OpenWrt公式 | Cloudflare Pages |
| オープンソース | GitHub公開 | GitHub公開 |
インストールされたパッケージ (POSTINST_SH.md)
初回起動時に実行されるスクリプト (SETUP_SH_JA.md)
コンソールツール (パッケージインストール・設定)
設定構造 (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
繋がらない場合
- 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
永続化
cat << 'EOF' > /usr/bin/aios2
#!/bin/sh
CONFIG_DIR="/tmp/aios2"
mkdir -p "$CONFIG_DIR"
CACHE_BUSTER="?t=$(date +%s)"
wget --no-check-certificate -O "$CONFIG_DIR/aios2.sh" "https://site-u.pages.dev/www/aios2.sh${CACHE_BUSTER}"
chmod +x "$CONFIG_DIR/aios2.sh"
sh "$CONFIG_DIR/aios2.sh"
EOF
chmod +x /usr/bin/aios2
sh /usr/bin/aios2
旧版
Qiita
GitHub
ネットワーク自動構成API
auto-config.site-u.workers.dev/
共有リソース
/www
config.js
/post-install
-
postinst.sh (aios2専用)
/uci-defaults
/tui
- review.json (aios2専用)
/langs
公式ASUサーバー
sysupgrade.openwrt.org/overview
- オンライン:正常応答(空白画面)
- オフライン:応答なし
サンプルコード
コンソール設定用
接続情報確認スクリプト(全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_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')"
# ★追加: 最適な設定用アドレス(IP優先/FQDN)
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')"
# ★追加: 内部計算されたオフセット(JSON出力設定によっては表示されない場合あり)
echo "MAPE_CALC_OFFSET=$(echo "$API_RESPONSE" | jsonfilter -e '@.mape.calculatedOffset')"
# ★追加: GUAプレフィックス(MAP-E環境下でのGUA利用時)
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 packets 0 bytes 0 snat ip to $(eval "echo \\$RULE_${k}_IPV4ADDR") : numgen inc mod $portcount map { $allports }\
\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
AdGuard Home(ネットワーク広告ブロック)
実行ファイル
設定ファイル
説明
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
事例(ペルソナ)
OpenWrt初学者の場合
「焼いたらMAP-E」
動機:
- 出来るだけ簡単確実に作りたい
環境:
- インターネット回線契約:NTT フレッツ 光クロス
- OpenWrt化予定デバイス:ELECOM WRC-X3200GST3
※他ネットワーク環境無し
事前準備:
- 不要
手順:
- ビルダー起動:キッティングツールを開く
- デバイス選択:デバイス名を入力、または
設定ファイルをインポート - ビルド実行:
ビルドをリクエストを実行 - フラッシュ:生成された
FACTORYイメージをデバイスの管理画面からアップロード - OpenWrt化完了:自動再起動後、インターネット利用可能
- Wi-Fi接続:SSID:
OpenWrt/ パスワード:password
- Wi-Fi接続:SSID:
- 管理画面ログイン: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を含む任意のパッケージを自動インストールさせることができる
公式
Table of Hardware: Full details
https://openwrt.org/toh/views/toh_extended_all
https://openwrt.org/toh.json
firmware-selector-openwrt-org
https://github.com/openwrt/firmware-selector-openwrt-org
Attendedsysupgrade Server (GSoC 2017)
https://github.com/openwrt/asu
API
開発経緯
設計思想
何も知らないド素人がひたすら検索&&モノマネ乞食を初めて早二年が過ぎた
正直スキルはたいして向上していないが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の部分のソースを別ファイル化してグローバル化させるか
要件等だなあ
現在オフラインですね、、、

-
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を追加した - 復元ポイント:
パッケージ追加・設定追加変更などで自動作成するようにした
また、一意の日付から復元ポイントを選択できるようにした
- カスタムスクリプト:




