背景
随分と昔にOpenWrt向けのTailscale自動アップデートスクリプトを作成しましたが、いまさらストレージ容量が気になり始めたので、年末年始の時間があるタイミングに自分でビルドしようと思いました。
社会人になっても大学時代にやってたことで足踏みしてんのダサくね?
ただ単にUPXパッカーでバイナリを圧縮して配布するのは、先駆者がいらっしゃり面白味にも欠けるので、きちんと .ipk / .apk パッケージで作成して、オレオレリポジトリを立てるようにしました。
やったこと
Geminiに相談したところ、一発でいい感じのものを書いてくれたので、プロンプトを考えるところからベースが完成するまでに要したのは約20分でした。
しかし、その後の調整・修正・機能追加や、ビルド時のタグ・フラッグの調査、諸々の作業をしていたら、優に1ヶ月を超えてしまい、自分の開発力のなさを痛感しました。
アンインストールの追加や、OpenWrt 25.12 への対応もできてないので未完成ですしおすし
2026/4/10 追記)1ヶ月弱かけてアンインストールの追加とAPKへの対応をしました...
成果物
以下のリポジトリになります。
インストール方法はインストールスクリプトを実行するだけにしてます。
現状、サポートしているバージョンは動作確認を行った OpenWrt 22.03 以降です。
宗教上の理由で非公式リポジトリを使いたくない場合
機器のアーキテクチャを調べ、リリースページにある .ipk / .apk をインストールしてください。
宗教上の理由で他人のパッケージをインストールしたくない場合
ワークフローにビルドする順序は記載しているのでforkして、いじってください。
※リポジトリの署名用に Repository secrets に USIGN_PRIVATE_KEY を設定しているので、オレオレリポジトリを作成する場合は、秘密鍵の登録をして、公開鍵をリポジトリに保存してください。
自動更新について
実家の鯖から POST してアップデートをかけているので、鯖が死なない限り、Tailscaleは自動リリースされます。されるはずです。 冗長も一切してないので死なないでね鯖くん。
ここは、いずれ GCP の無料枠にお任せする予定ですー
こだわりポイント
Tailscaleのビルドでは、基本的に不要な機能(featuresやtagsと呼ばれている)を除外していく形でビルドをしていきます。
本ワークフローでは公式のビルドスクリプトである build_dist.sh を使用しています。
このスクリプトに --extra-small フラッグを読み込ませると、ほぼ全ての機能が排除された状態でビルドがされるようになっています。
しかし、この状態で生成されるバイナリでは、Exit Node などの主要機能が不足するだけでなく、OpenWrt にて正常に起動することすらままならないため、必要なタグを追加するような形で build_dist.sh を書き換えてビルドしています。
タグ追加によるパッケージの肥大化について
タグを追加してビルドすると、パッケージに機能が追加される分、パッケージが肥大化します。各タグによって肥大化する量は変化します。
変化量を確認するため、検証用のAMD64環境にて --extra-small フラッグのみでビルドした時の容量と、各タグを追加してビルドした時の容量を比較グラフを作成しました。(Tailscale v1.94.1時点)
netstack/syspolicyはclientmetricsに依存。
gro/outboundproxy/serve/ssh/webclientはnetstackに依存。
本リポジトリでのパッケージには、必須タグ以外は基本的な機能のみを追加してビルドしています。ただし、パケット処理の高速化のために、gro は大きく肥大化してしまうものの有効化しています。
さらにダイエットさせたい場合は自分でビルドしてね☆
UDPオフロードについて
ethtool のインストール補助はインストーラーに載せましたが、流石にオフロード化の全作業をスクリプトに実装できる気がしなかった(検証もしていない)ので、使いたい方は公式ドキュメントとにらめっこして実装してください。
〆
個人的に十分満足できるものがリリースできたと思うので、リポジトリのメンテナンスは気が向いたときにするくらいになると思います。
ぜひ意欲のある方はコードを改良していただき、AIに任せっきりのこのコードをより良いものにしていただけると嬉しいです(笑)
