XAR (скорочення від eXtensible ARchive format) — це формат архівування файлів і одночасно програма архіватор з відкритим вихідним кодом. Його було створено в рамках проєкту OpenDarwin і використовується в macOS, починаючи з версії 10.5 для процедур встановлення програмного забезпечення, а також для розширень браузера Safari, починаючи з версії 5.0. Формат XAR прийшов на зміну використанню архівів у форматі gzipped pax.Nabble — xar in Mac OS X
Одна з гілок розробки RPM, а саме RPM5, використовує формат xar.
Структура файлу Файл XAR складається з трьох секцій: заголовка, таблиці вмісту та області даних. Усі поля зберігаються з великим порядоком байтів (big endian).
Заголовок Зсув № Розмір (у байтах) Призначення 0 4 Підпис файлу, яка використовується для ідентифікації формату файлу як Xar. Це значення завжди має дорівнювати xar! 4 2 Розмір заголовка 6 2 Версія формату Xar для використання.На даний момент існує лише версія 1. 8 8 Довжина стисненого вмісту TOC (таблиці вмісту) 16 8 Довжина нестисненого вмісту TOC 24 4 Алгоритм хешування (контрольної суми) 28 0, 4, 36 іколи байти вирівнювання (padding) або назва алгоритму контрольної суми
Особливості формату Xar Xar відрізняється від cpio, tar або ar тим, що зберігає зміст архіву (TOC — table of contents) на початку файлу. Це ускладнює додавання нових даних до архіву, проте дозволяє уникнути повного перегляду архіву для витягування окремого файлу. Зміст зберігається у вигляді XML-документа, закодованого в UTF-8 та стисненого за допомогою zlib.
Кожен файл у складі архіву 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"> <data> <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>Documents</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">c0e013e53d829511835e2b429abb5198731e9a3e</extracted-checksum> </data> <group></group> <gid>20</gid> <user></user> <uid>501</uid> <mode>0664</mode> <type>file</type> <name>foobar.html</name> </file> </file> </file> </file> </file> </toc> </xar>
Примітки
Література
Original Xar project fork from original project Apple