更新定義ファイル

概要

ゴースト更新システム(ネットワーク更新)で使用される更新定義ファイルの仕様である。
更新定義ファイルにはゴーストを構成するファイルの一覧とそのハッシュ値が記録されており、ベースウェアはこれをサーバから取得してローカルのファイルと比較し、差分更新を行う。

現在有効な形式は以下の2種類である。旧形式のupdates.dau (Version 1) は廃止済みのため省略する。

updates2.dau (Version 2)
バイト値1区切りのバイナリ寄りの形式。
updates.txt (Version 3)
バイト値1区切りだが行プレフィックスを持つテキスト形式。

updates2.dau (Version 2)

バイト値1をフィールド区切りとし、各行をCRLFで終端する形式である。

文字コード

デフォルトはOSデフォルトのcharset。先頭エントリの末尾に charset=文字コード名 フィールドを付加することで指定できる。

行フォーマット

各行は以下の形式である。

ファイルパス\x01MD5ハッシュ\x01拡張フィールド1\x01拡張フィールド2\x01...

\x01 はバイト値1を示す。改行はCRLF。

サンプル

ghost/master/descript.txt\x01a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4\x01size=1234\x01date=2024-01-15T12:34:56\x01charset=Shift_JIS\x01
ghost/master/shiori.dll\x01f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3\x01size=65536\x01date=2024-01-15T12:34:56\x01
shell/master/surface0.png\x01deadbeefdeadbeefdeadbeefdeadbeef\x01size=32768\x01date=2024-01-15T12:34:56\x01

\x01 は実際にはバイト値1である。charset= は先頭エントリの末尾にのみ付加される。

updates.txt (Version 3)

updates2.dauと同じバイト値1区切りだが、各行に行種別プレフィックスを持つテキスト形式である。

行種別

各行は行頭のプレフィックスにより種別が決まる。file, でも charset, でもない行は無視される。

charset,文字コード名
以降の行の文字コードを指定する。ファイル先頭付近に記述する。
file,データ群...
file, プレフィックスの後の内容はupdates2.dauと同一フォーマットである。

サンプル

charset,Shift_JIS
file,ghost/master/descript.txt\x01a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4\x01size=1234\x01date=2024-01-15T12:34:56\x01
file,ghost/master/shiori.dll\x01f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3\x01size=65536\x01date=2024-01-15T12:34:56\x01
file,shell/master/surface0.png\x01deadbeefdeadbeefdeadbeefdeadbeef\x01size=32768\x01date=2024-01-15T12:34:56\x01

\x01 は実際にはバイト値1である。

フィールド詳細

updates2.dauおよびupdates.txtの file, 行で共通のフィールド定義である。

必須フィールド
ファイルパス (位置[0])
更新対象ファイルの相対パス。スラッシュ (/) 区切り。
MD5ハッシュ (位置[1])
ファイル内容のMD5ハッシュ。32文字の16進数文字列。
拡張フィールド (位置[2]以降)

key=value 形式で記述する。すべて省略可能。

size=数値
ファイルサイズ(バイト単位)。
date=文字列
ISO 8601形式の日時文字列。例: 2024-01-15T12:34:56
charset=文字列
文字コード名。updates2.dauの先頭エントリの末尾にのみ付加される。文字コード判定のみに使われ、定義ファイルとしての読み込み時は無視される。

パスの扱い

URLエンコード

全エントリがパーセントエンコード済みの場合はデコードして使用する。そうでない場合はURL側のみエンコードされる。

セキュリティチェック

以下の条件に該当するエントリは無効として扱われる。

  • MD5がない。
  • 末尾が / または \(ディレクトリエントリ)。
  • ..\../ を含む(ディレクトリトラバーサル防止)。

生成処理

SSPの「更新ファイル作成」機能などにより、ゴーストのファイル一覧からupdates2.dau / updates.txtを生成できる。

ファイル走査

ディレクトリを再帰的に走査する。以下のファイルは除外される。

  • 隠しファイル (FILE_ATTRIBUTE_HIDDEN)
  • developer_options.txtnoupdate で指定されたファイル
  • .gitignore形式のフィルタファイルで除外されたファイル
ghost\masterへのコピー

ディレクトリ直下に ghost\master フォルダが存在する場合、生成した更新ファイルをそこにもコピーする。