目次
サービスモードでGeoDataを更新し、クライアントにも完了と表示されたのに、新しいGEO分類を含む設定を有効にできない。この食い違いが起きたら、更新したデータと検証が読んだデータを区別します。ルールの削除やアプリの初期化を急がないでください。
GEOの更新は完了したのに、なぜ新しい分類を検証できないのか
Clash Verge Rev v2.5.10の正式リリースノートには、サービスのコアが更新したGEOデータベースがアプリのディレクトリに同期されず、新しい分類を使うルールの検証に失敗する問題の修正が記載されています。ただし、「分類が見つからない」エラーの原因はこれだけではなく、利用中のデータソースに必要な分類があるとも限りません。
同じ配布元の新しいデータベースにその分類があり、サービスでの更新も成功した一方、再検証ではアプリ側の古いデータを読んでいる場合に、この記事の問題に該当します。完了通知を見ただけで実際の配布元や内容が不明な場合は、失敗したルールと最初のエラーを残し、同期の不具合と決めつけないでください。
実際の状況を分けて判断する
| 確認できた状況 | 次に行うこと |
|---|---|
| サービスモードでの更新が成功し、新しいデータに分類があると確認済みなのに、元の設定で分類エラーが出る | この記事に沿ってアプリの更新と検証前の同期を確認する |
| 更新中にダウンロード失敗、タイムアウト、ファイルエラーが出る | まず具体的な更新エラーを解決する。新しいデータを取得済みとは判断しない |
| 実際のデータソースに分類がない、またはルールの名前が誤っている | その配布元の分類一覧とルールに書いた名前を確認する |
| 失敗しているのがrule-providersファイルやルールの構文である | 該当ファイル、形式、最初のエラーを確認する。GEOの同期問題とは分ける |
サービスの実行ディレクトリとアプリのディレクトリでデータが異なることがある
サービスのコアは自分の実行ディレクトリでデータを更新しますが、アプリの事前検証はアプリの設定ディレクトリを読みます。サービスで新しいデータを使えても、設定を有効にし直す際にアプリ側が同じデータを取得済みとは限りません。同じ操作を繰り返すだけでは、古い分類のエラーが続くことがあります。
公式の修正では、ファイルの事前検証と生成した設定の検証に入る前に、サービス側のデータを読み戻します。検証キャッシュもGEOファイルのサイズと変更時刻を考慮します。そのため、Mihomoコアだけの更新やルール順序の変更では、今回のClash Verge Revアプリの更新の代わりにはなりません。
自動同期には条件があります。現在のサービスセッションがGEOファイルの読み戻しに対応し、アプリのディレクトリに対象ファイルがすでに存在し、サービス側ファイルの変更時刻がアプリ側のコピーより新しい必要があります。機能、セッション、ローカルファイルがなければ、同期が省略される場合があります。アプリ側のファイルが新しい場合、サービス側の古いコピーで上書きしません。
固定した実装で扱うのは、Country.mmdb、ASN.mmdb、geoip.dat、geosite.dat、geoip.metadb、GeoSite.datです。これは同期対象のファイル一覧で、すべての端末で全ファイルを使うという意味ではありません。任意の独自ファイル名まで同期されるわけでもありません。
Mihomoのgeodata-modeはGeoIPにmmdbとdatのどちらを使うかを決め、geox-urlは対応するデータの配布元を指定します。まず実際の形式と配布元を記録してください。検証を通すために別形式の拡張子を変えたり、分類の異なるデータへむやみに切り替えたりしないでください。
動作する設定を残してから、アプリと元の配布元のデータを更新する
現在のProfile、永続的な上書き、元のモードとノードの選択を保存し、復元用のコピーも別に用意します。失敗したルール全文、分類名、データの配布元と形式を記録し、手動で管理するデータベースの原本も残してください。公開の問い合わせには機密情報を除いた別のコピーを使い、サブスクリプションのトークンや完全な設定パッケージを送らないでください。
この記事で確認した正式な修正版アプリはv2.5.10です。同じ修正が含まれる根拠のある後続の正式版を使っている場合、戻す必要はありません。参考資料の公式配布元から、システム、アーキテクチャ、従来のインストール方法に合わせて更新します。今回のサイト保守では、当サイトで配信するインストールパッケージは置き換えていません。
更新と検証で同じデータを使う
通常の手順で終了し、アプリ全体を更新する
まず作業を保存します。通信を中断できるタイミングで現在の設定を記録して通信の取り込みを停止し、トレイでアプリを完全に終了してから公式アプリを更新します。データディレクトリは残し、サービスのファイルを手作業で置き換えたり、データベースを削除したりしないでください。
開き直し、アプリとサービスの状態を確認する
実際のアプリにv2.5.10の修正が含まれ、元の設定と上書きが残っていることを確認します。まず動作を確認済みの設定を有効にしてサービスのコアを起動し、その後でデータを更新してください。サービスに互換性がない、または起動しない場合は、先にそのエラーを調べ、GEO更新を繰り返しクリックしないでください。
元の配布元からGeoDataを更新する
「設定 → Clash設定 → GeoDataを更新」を開きます。元のデータベース配布元、形式、必要なプロキシ経路を維持し、更新の結果を待ちます。ダウンロードや読み取りのエラーが出たら最初のログを残し、通知を閉じたことを成功と見なさないでください。
以前失敗した設定を有効にし直す
自分で管理する元の設定を保存した後、同じ問題のProfileを有効にし直して、アプリに再検証させます。「GeoDataが更新されました。」の表示だけで判断せず、再生成される実行用YAMLも直接編集しないでください。
同期エラーが続く場合は変更を重ねない
ログにfailed to sync geo databaseが出たら、具体的なファイルと、その後の検証結果を記録します。更新通知が示すのはコアの更新操作だけで、アプリ側のコピー、分類の存在、設定の検証がすべて成功したとは証明できません。
同じルールの検証が通ったら、実際に一致するか確認する
まず以前失敗した設定を保存して有効にでき、最初の分類エラーが出なくなり、ルールの意図も変わっていないことを確認します。GEOルールの削除、一律の直接接続への変更、問題の分類の除去で検証を通すと、元の状態と比較できなくなります。
その後、必要だったシステムプロキシやTUNを使い、そのルールに一致するはずのリクエストを新たに送ります。クライアントの「接続」画面で、新しい接続が一致したルールと実際の出口を確認し、目的の処理も成功したか確かめます。古い長時間接続、ノードの遅延、更新通知では代用できません。
通常の手順でアプリを開き直し、同じ設定を有効にして再確認します。再起動後にまた失敗したら、新たな最初のエラーを残し、別の配布元によるデータの上書き、サービスからの読み戻し不可、実際の分類不足を分けて調べます。一度の更新通知だけで継続的に復旧したとは判断しないでください。
この問題の確認項目
- 実際のClash Verge Revアプリに今回の同期修正が含まれ、元のサービスモードが正常に動く。
- 実際のデータ配布元と形式が明確で、使用するデータベースに必要な分類がある。
- 元の問題のProfileを再検証して有効にでき、ルールを削除したり別の意味に書き換えたりしていない。
- 新たな実リクエストが想定したルールと出口を使い、普段の作業も正常に行える。
- 通常の手順で開き直した後も同じ設定を有効にでき、同期の警告があれば具体的な原因を確認済みである。
当サイトでは、この問題を再現するための実際のクライアントのインストールや実機検証は行っていません。この記事は公式リリースノート、固定したソースコード、Mihomoのドキュメントに基づいています。ウェブサイトの多言語、ソースレベル、ブラウザーのチェックは、利用する端末でのデータベースと実際の振り分けの確認には代えられません。
直らない場合は、ファイルと分類のエラーに応じて復旧する
GeoDataの更新自体が失敗する
まず元の配布元への到達性、使ったプロキシ経路、最初のダウンロードまたはファイルのエラーを確認し、使える原本を残します。出所不明のデータで補ったり、ディスク全体の権限やシステム時刻を変えて無理に通したりしないでください。
同期の警告が出る、またはアプリのディレクトリに対象ファイルがない
具体的なファイル名とサービスの状態を残し、プロジェクトがサポートする手順で、対応するサービスコンポーネントとアプリ側のデータを確認します。今回の修正は不足ファイルを自動で補うものではありません。サービスの実行ディレクトリへ手作業でファイルを追加しないでください。
更新と同期が済んでも、特定の分類がないと表示される
データ配布元の実際の分類一覧、名前の綴り、使用形式を確認し直します。配布元が違えば分類をそのまま置き換えられるとは限りません。この結果を引き続き古いデータの同期問題として扱わないでください。
更新後、それまで使えていた設定も使えなくなった
現在の状態を別に保存し、まず更新前に動作確認済みの設定、元の配布元、対応するデータベースのコピーを復元します。新しい分類はまだ使わないでください。アプリを戻す必要がある場合はプロジェクトがサポートする方法で行い、手元に一つしかないデータディレクトリを新旧のプログラムで共用しないようにします。
すぐにアプリを更新できない場合やデータを確認できない場合は、自分で動作を確認済みの古い設定で作業を続け、未対応のルールを残しておきます。これは作業を再開する方法で、旧版の同期不具合が修正されたわけではありません。すべてのGEOルールを恒久的に無効にする必要もありません。
問い合わせには、オペレーティングシステム、アプリの完全なバージョン、サービスモード、機密情報を除いた失敗ルール、データベースの配布元と形式を添え、更新、同期、検証のそれぞれの結果を説明します。最後のエラーだけを示したり、機密性のある接続先や完全なログ一式を公開したりしないでください。
