再インストール前に、どの段階で止まったかを特定する
OpenClash の「コア更新失敗」は原因名ではなく最終結果です。公式リポジトリの openclash_core.sh は、バージョン情報を取得し、設定された CPU とコア種別から URL を選び、圧縮ファイルを一時領域へ保存します。その後 gzip の整合性、展開、実行権限、新しいファイルのバージョン出力を確認し、最後に正式な場所へ移動します。どこで止まっても LuCI では似た通知になることがあります。
再試行する前に完全なログを保存し、発生時刻、OpenClash と現在のコアバージョン、ルーター型番、実際の CPU アーキテクチャ、選択中のコア種別、小容量フラッシュ設定を記録します。末尾の赤い1行だけでは、メタデータ取得、curl、gzip、実行形式、移動、起動のどれかを区別できません。
| 段階 | 手掛かり | 最初の確認 |
|---|---|---|
| バージョン情報 | 取得できない、または空 | 時刻、DNS、HTTPS、配布元 |
| ダウンロード | curl の名前解決・接続・HTTP エラー | ルーター自身の通信経路 |
| 圧縮検証 | gzip test failed | 途中切断、HTML エラー文書 |
| 実行検証 | バージョン情報が出ない、形式エラー | CPU、ファイル形式、権限 |
| 配置と起動 | move failed、起動直後に終了 | 容量、読み取り専用、所有者、設定 |
変更は一つずつ:OpenWrt 更新、DNS 変更、OpenClash 再導入、手動コアを同時に行うと、新しいログの意味がなくなります。
ルーターからバージョン配布元、DNS、HTTPSを確認する
バージョン確認またはダウンロードで止まる場合は、PC ではなく OpenWrt 自身から調べます。PC の閲覧成功は、ルーター用 DNS やデフォルトゲートウェイ、時計が正常だという証明ではありません。まず日付、タイムゾーン、NTP 同期を確認します。大幅にずれた時計は HTTPS 証明書検証を壊すことがあります。
Issue 5098 には、curl: (6) Could not resolve host: fastly.jsdelivr.net の後に Smart コアのバージョン確認失敗が出た具体例があります。これはその環境での DNS 失敗を示しますが、すべての更新失敗を説明しません。404、TLS、容量、gzip など別の文字列があるなら、その証拠を優先します。
- 日付、タイムゾーン、NTP、WAN ゲートウェイを確認する。
- 実際の更新ホスト名が解決でき、443 番へ接続できるか分けて試す。
- ルーター DNS が停止中の OpenClash に依存する循環をなくす。
- ダウンロードしたファイルの種類とサイズを調べ、エラー HTML でないことを確認する。
- 修正後は1回だけ再実行し、ログが次の段階へ進んだか比べる。
上位ルーター、ドメインフィルター、独自 DNS、出口ファイアウォールは、ルーターの更新通信だけを妨げることがあります。すべてのセキュリティ機能を無効にせず、対象通信に限定した元に戻せる直接接続テストを使います。複数ミラーがある場合は、画面上の名前ではなくログで実際に選ばれた URL を確認します。
v0.47.156 Release はバージョンの資料であり、すべての機器への強制更新や別途入手したコアの適合を保証しません。
CPUアーキテクチャ、コア種別、配布ファイルを一致させる
転送は成功したのに新しいファイルがバージョン情報を表示できない場合、次はアーキテクチャです。スクリプトは core_version に設定された CPU モデルを使い、コアの対象も分けています。製品シリーズ名は命令セットではなく、同じ商品名でもハードウェア改訂が異なる場合があります。OpenWrt が報告するアーキテクチャ、パッケージ用アーキテクチャ、動作中の旧コアのファイル情報を照合します。
圧縮ファイル、実行ファイル、コア種別を混同しないでください。ダウンロードしたファイルは一時領域では gzip であり、検証と展開後に初めて実行対象になります。圧縮ファイルを clash_meta に改名しても展開されません。別 CPU 用ファイルへ実行権を加えても動きません。Exec format error、illegal instruction、バージョン情報が出ない場合は配布ファイルの選択へ戻ります。
出所を失わない:手動ファイルはプロジェクトが案内する一次配布元から取り、元のアセット名と Release 情報を残します。第三者が名前を変えたコピーでは CPU と圧縮形式を確認できません。
動作中の旧コアを別の管理場所へコピーし、バージョン情報の出力とサイズを記録します。候補は一時場所で、ファイル形式、gzip、展開後のファイルが空でないこと、実行権、バージョンコマンドの5項目を確認します。全部通った後にだけ本来の配置先を検討します。
画面に Meta、Smart など複数の選択がある場合、導入済み OpenClash が対応し、現在の設定がその種別を必要とするかを確認します。プラグイン更新とコア更新は別操作です。ファームウェア、依存パッケージ、プラグイン、コアを同時更新すると単純な復元ポイントを失います。
一時容量、小容量フラッシュ、権限、使用中ファイルを調べる
完全にダウンロードできても配置に失敗します。圧縮ファイル、展開後の候補、最終ファイルを置くため、一時領域と保存先の両方に容量が必要です。また公式スクリプトには small_flash_memory 分岐があり、通常は永続的な OpenClash ディレクトリ、小容量モードでは /tmp 配下を使うことがあります。後者はメモリ容量に制限され、再起動で消える場所です。
空きバイトと inode を確認し、overlay や保存先が読み取り専用になっていないか調べます。存在しないディレクトリ、所有者、実行権、古いプロセスの使用も移動と起動を妨げます。容量確保のために唯一動くコアを削除しないでください。バックアップを読めることを確認し、失敗ダウンロードだと特定できる一時ファイルだけを整理します。
- 容量:一時領域は圧縮ファイルと展開後のファイルを同時に保持する。
- 権限:ディレクトリは書き込み可能、新ファイルは実行可能にする。
- プロセス:サービス手順で停止し、使用中の対象を強制的に上書きしない。
- 永続性:一時コアは再起動時に通常の仕組みで再配置される必要がある。
- 完全性:サイズだけでなく gzip とバージョン情報の実行確認も合格させる。
移動失敗時は再起動前に候補と本来の配置先を比較します。旧ファイルが残るなら維持したまま診断できます。配置先が無効な候補ファイルに置き換わった場合はサービスを止め、検証済みバックアップへ戻します。
最小限の手動復元を行い、サービス全体を検証する
手動配置は、自動失敗の段階が明確で、出所、CPU、コア種別を確認できた後の選択肢です。現行ファイルを唯一のコピーとして残したまま上書きせず、一次配布から候補を取得し、一時場所で展開、権限、バージョン情報の出力を検証します。OpenClash を停止し、本来の対象ファイルを保存してから1度だけ置き換えます。パスは自分のバージョンのスクリプトと画面に従い、別のファームウェア向け手順を転載しません。
- 設定をエクスポートし、旧コアのコピー、バージョン、サイズを残す。
- 配布元、CPU、コア種別、圧縮形式を照合する。
- 一時場所で gzip、展開、権限、バージョン情報の出力を試す。
- サービス停止後、配置先の旧ファイルを保存して候補を配置する。
- 起動後、バージョン、設定の読み込み、グループ、DNS、実際の通信を確認する。
- 失敗時は停止して旧版へ戻し、機密を除いたログを解析する。
LuCI のバージョン番号だけでは成功ではありません。プロセスが継続し、設定を解析し、グループを構築し、DNS の循環依存がなく、利用端末の通信が期待通りであることを確認します。クラッシュと再起動の繰り返しがないかログを観察し、再起動と実用テストが終わるまで旧コアを保存します。
固定した順番:ログ段階、通信とバージョン情報、CPU と種別、圧縮検証、容量と権限、置換と起動。結果ごとに次の範囲を狭めます。
報告には両方のバージョン、CPU、コア種別、時刻、機密情報を除いたログを添え、公開 IP、サブスクリプション URL、認証、管理アドレスを除きます。
公式情報源とバージョン範囲
- github.com/vernesong/OpenClash/blob/master/luci-app-openclash/root/usr/share/openclash/openclash_core.sh
- github.com/vernesong/OpenClash/issues/5098
- github.com/vernesong/OpenClash/releases/tag/v0.47.156
バージョン番号、ファイル名、画面表示は更新で変わる場合があります。作業前にリンク先の公式資料を確認してください。