知識ベース

Xar(アーカイバ)

XARe X tensible AR chive formatの略 )は、オープンソースのファイルアーカイバーであり、アーカイバーのファイルフォーマットです。 OpenDarwinプロジェクト内で作成され、macOS X 10.5以降でソフトウェアインストールルーチン、およびSafari 5.0以降のブラウザ拡張機能で使用されます。 Xarは、gzip圧縮されたpaxファイルの使用を置き換えました。

RPMの開発ブランチであるRPM5は、xarを使用します。

ファイル構造

このファイルは、ヘッダー、目次、およびヒープの3つのセクションで構成されています。すべてのフィールドはビッグエンディアン順に保存されます。

ヘッダ

オフセット# サイズ
(バイト単位)
目的
0 4 ファイル形式をXarとして識別するために使用されるファイル署名。
これは常にxarと等しくなります!
4 2 ヘッダーサイズ
6 2 使用するXar形式のバージョン。
現在、バージョン1のみがあります。
8 8 TOC圧縮データの長さ。
16 8 TOC非圧縮データの長さ。
24 4 チェックサムアルゴリズム:
  • 0 =なし
  • 1 = SHA1
  • 2 = MD5
  • 3 = SHA-256
  • 4 = SHA-512
28 0、4、36 時々パディングバイトまたはチェックサムアルゴリズム名

目次

Xarはcpio、tar、またはarとは異なり、TOC(目次)をファイルの先頭に保存し、アーカイブへの追加をより複雑にしますが、個々の含まれているファイルを抽出するためにアーカイブをスキャンする必要はありません。 。目次は、zlib圧縮、UTF-8エンコード、XMLドキュメントとして保存されます。 Xarに保存される各ファイルは、独立して圧縮/エンコードされます。これにより、gzipを使用してファイルをエンコードし、bzip2などの異なる方法を使用して同じアーカイブ内の別のファイルをエンコードすることができます。一部のシステムでは、アーカイブメンバーをxzまたはlzma圧縮方式でエンコードすることもできます。

目次の例

?xml version = "1.0" encoding = "UTF-8"?> xar> toc> checksum style = "sha1"> offset> 0 / offset> size> 20 / size> / checksum > file id = "1"> group> staff / group> gid> 20 / gid> user> joe / user> uid> 501 / uid> mode> 0755 / mode> type> directory / type> name> com.foobar / name> file id = "2"> group> / group> gid> 20 / gid> user> / user> uid> 501 / uid> mode> 0775 / mode> type> directory / type> name> Contents / name> file id = "3"> data> length> 428 / length> offset > 20 / offset> size> 1005 / size> encoding style = "application / x-gzip" /> archived-checksum style = "SHA1"> a5f6f1461213a904f831d4ef6f214638342842ed / archived-checksum> extracted-checksum style = "SHA1"> 21d21a0c90378248ce0dfb6f345376d1b00d65fc / extracted-checksum> / data> group> / group> gid> 20 / gid> user> / user> uid> 501 / uid> mode> 0664 / mode> type> file / type> name> Info.plist / name> / file> file id = "4"> group> / group> gid> 20 / gid> user > / user> uid> 501 / uid> mode> 0775 / mode> type> directory / type> name> Resources / name> file id = "5"> da ta> length> 14868 / length> offset> 448 / offset> size> 274432 / size> encoding style = "application / x-gzip" /> archived-checksum style = "SHA1"> efe5c97921de7ccc5aebc158d158e9d4280d6814 / archived-checksum> extracted-checksum style = "SHA1"> 45c8be42d1d9afdb57ddd5e9311453010ec46161 / extracted-checksum> / data> group> / group> gid> 20 / gid> user> / user> uid> 501 / uid> mode> 0664 / mode> type> file / type> name> foobar / name> / file> file id = "6"> data> length> 17635 / length> offset> 15316 / offset> size> 45056 / size> encoding style = "application / x-gzip" /> archived-checksum style = "SHA1"> 3c761ffcc81ee6e232e4f4a1c4a81654c26c4e52 / archived-checksum> extracted-checksum style = "SHA1"> 0ea31f8ef0e5987a1838a64ab5c26ebf3ee4bc37 / extracted-checksum> / data> group> / group> gid> 20 / gid> user> / user> uid> 501 / uid > mode> 0664 / mode> type> file / type> name> docSet.skidx / name> / file> file id = "7"> group> / group> gid> 20 / gid> user> / user> uid> 501 / uid> mode> 0775 / mode> type> directory / type> name> Docu ments / name> file id = "8"> data> length> 35790 / length> offset> 32951 / offset> size> 209242 / size> encoding style = "application / x-gzip "/> archived-checksum style =" SHA1 "> 5242cd71585c34e722932f324706f8c00e1ae0c5 / archived-checksum> extracted-checksum style =" SHA1 "> c0e013e53d829511835e2b429abb51​​98731e9a3e / extracted-checksum> / data> gid / g> id> > 20 / gid> user> / user> uid> 501 / uid> mode> 0664 / mode> type> file / type> name> foobar.html / name> / file > / file> / file> / file> / file> / toc> / xar>