Initial public busybox upstream commit
[busybox4maemo] / docs / tar_pax.txt
1 'pax headers' is POSIX 2003 (iirc) addition designed to fix
2 tar format limitations - older tar format has fixed fields
3 for everything (filename, uid, filesize etc) which can overflow.
4
5 pax Header Block
6
7 The pax header block shall be identical to the ustar header block
8 described in ustar Interchange Format, except that two additional
9 typeflag values are defined:
10
11 x
12     Represents extended header records for the following file in
13 the archive (which shall have its own ustar header block).
14
15 g
16     Represents global extended header records for the following
17 files in the archive. Each value shall affect all subsequent files
18 that do not override that value in their own extended header
19 record and until another global extended header record is reached
20 that provides another value for the same field. The typeflag g
21 global headers should not be used with interchange media that
22 could suffer partial data loss in transporting the archive.
23
24 For both of these types, the size field shall be the size of the
25 extended header records in octets. The other fields in the header
26 block are not meaningful to this version of the pax utility.
27 However, if this archive is read by a pax utility conforming to
28 the ISO POSIX-2:1993 standard, the header block fields are used to
29 create a regular file that contains the extended header records as
30 data. Therefore, header block field values should be selected to
31 provide reasonable file access to this regular file.
32
33 A further difference from the ustar header block is that data
34 blocks for files of typeflag 1 (the digit one) (hard link) may be
35 included, which means that the size field may be greater than
36 zero.
37
38 pax Extended Header
39
40 An extended header shall consist of one or more records, each
41 constructed as follows:
42
43 "%d %s=%s\n", <length>, <keyword>, <value>
44
45 The <length> field shall be the decimal length of the extended
46 header record in octets, including length string itself and the
47 trailing <newline>.
48
49 [skip]
50
51 atime
52     The file access time for the following file(s), equivalent to
53 the value of the st_atime member of the stat structure for a file,
54 as described by the stat() function. The access time shall be
55 restored if the process has the appropriate privilege required to
56 do so. The format of the <value> shall be as described in pax
57 Extended Header File Times.
58
59 charset
60     The name of the character set used to encode the data in the
61 following file(s).
62
63     The encoding is included in an extended header for information
64 only; when pax is used as described in IEEE Std 1003.1-2001, it
65 shall not translate the file data into any other encoding. The
66 BINARY entry indicates unencoded binary data.
67
68     When used in write or copy mode, it is implementation-defined
69 whether pax includes a charset extended header record for a file.
70
71 comment
72     A series of characters used as a comment. All characters in
73 the <value> field shall be ignored by pax.
74
75 gid
76     The group ID of the group that owns the file, expressed as a
77 decimal number using digits from the ISO/IEC 646:1991 standard.
78 This record shall override the gid field in the following header
79 block(s). When used in write or copy mode, pax shall include a gid
80 extended header record for each file whose group ID is greater
81 than 2097151 (octal 7777777).
82
83 gname
84     The group of the file(s), formatted as a group name in the
85 group database. This record shall override the gid and gname
86 fields in the following header block(s), and any gid extended
87 header record. When used in read, copy, or list mode, pax shall
88 translate the name from the UTF-8 encoding in the header record to
89 the character set appropriate for the group database on the
90 receiving system. If any of the UTF-8 characters cannot be
91 translated, and if the -o invalid= UTF-8 option is not specified,
92 the results are implementation-defined. When used in write or copy
93 mode, pax shall include a gname extended header record for each
94 file whose group name cannot be represented entirely with the
95 letters and digits of the portable character set.
96
97 linkpath
98     The pathname of a link being created to another file, of any
99 type, previously archived. This record shall override the linkname
100 field in the following ustar header block(s). The following ustar
101 header block shall determine the type of link created. If typeflag
102 of the following header block is 1, it shall be a hard link. If
103 typeflag is 2, it shall be a symbolic link and the linkpath value
104 shall be the contents of the symbolic link. The pax utility shall
105 translate the name of the link (contents of the symbolic link)
106 from the UTF-8 encoding to the character set appropriate for the
107 local file system. When used in write or copy mode, pax shall
108 include a linkpath extended header record for each link whose
109 pathname cannot be represented entirely with the members of the
110 portable character set other than NUL.
111
112 mtime
113     The file modification time of the following file(s),
114 equivalent to the value of the st_mtime member of the stat
115 structure for a file, as described in the stat() function. This
116 record shall override the mtime field in the following header
117 block(s). The modification time shall be restored if the process
118 has the appropriate privilege required to do so. The format of the
119 <value> shall be as described in pax Extended Header File Times.
120
121 path
122     The pathname of the following file(s). This record shall
123 override the name and prefix fields in the following header
124 block(s). The pax utility shall translate the pathname of the file
125 from the UTF-8 encoding to the character set appropriate for the
126 local file system.
127
128     When used in write or copy mode, pax shall include a path
129 extended header record for each file whose pathname cannot be
130 represented entirely with the members of the portable character
131 set other than NUL.
132
133 realtime.any
134     The keywords prefixed by "realtime." are reserved for future
135 standardization.
136
137 security.any
138     The keywords prefixed by "security." are reserved for future
139 standardization.
140
141 size
142     The size of the file in octets, expressed as a decimal number
143 using digits from the ISO/IEC 646:1991 standard. This record shall
144 override the size field in the following header block(s). When
145 used in write or copy mode, pax shall include a size extended
146 header record for each file with a size value greater than
147 8589934591 (octal 77777777777).
148
149 uid
150     The user ID of the file owner, expressed as a decimal number
151 using digits from the ISO/IEC 646:1991 standard. This record shall
152 override the uid field in the following header block(s). When used
153 in write or copy mode, pax shall include a uid extended header
154 record for each file whose owner ID is greater than 2097151 (octal
155 7777777).
156
157 uname
158     The owner of the following file(s), formatted as a user name
159 in the user database. This record shall override the uid and uname
160 fields in the following header block(s), and any uid extended
161 header record. When used in read, copy, or list mode, pax shall
162 translate the name from the UTF-8 encoding in the header record to
163 the character set appropriate for the user database on the
164 receiving system. If any of the UTF-8 characters cannot be
165 translated, and if the -o invalid= UTF-8 option is not specified,
166 the results are implementation-defined. When used in write or copy
167 mode, pax shall include a uname extended header record for each
168 file whose user name cannot be represented entirely with the
169 letters and digits of the portable character set.
170
171 If the <value> field is zero length, it shall delete any header
172 block field, previously entered extended header value, or global
173 extended header value of the same name.
174
175 If a keyword in an extended header record (or in a -o
176 option-argument) overrides or deletes a corresponding field in the
177 ustar header block, pax shall ignore the contents of that header
178 block field.
179
180 Unlike the ustar header block fields, NULs shall not delimit
181 <value>s; all characters within the <value> field shall be
182 considered data for the field. None of the length limitations of
183 the ustar header block fields in ustar Header Block shall apply to
184 the extended header records.
185
186 pax Extended Header File Times
187
188 Time records shall be formatted as a decimal representation of the
189 time in seconds since the Epoch. If a period ( '.' ) decimal point
190 character is present, the digits to the right of the point shall
191 represent the units of a subsecond timing granularity. In read or
192 copy mode, the pax utility shall truncate the time of a file to
193 the greatest value that is not greater than the input header
194 file time. In write or copy mode, the pax utility shall output a
195 time exactly if it can be represented exactly as a decimal number,
196 and otherwise shall generate only enough digits so that the same
197 time shall be recovered if the file is extracted on a system whose
198 underlying implementation supports the same time granularity.
199
200 Example from Linux kernel archive tarball:
201
202 00000000  70 61 78 5f 67 6c 6f 62  61 6c 5f 68 65 61 64 65  |pax_global_heade|
203 00000010  72 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |r...............|
204 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
205 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
206 00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
207 00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
208 00000060  00 00 00 00 30 30 30 30  36 36 36 00 30 30 30 30  |....0000666.0000|
209 00000070  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
210 00000080  30 30 30 30 30 36 34 00  30 30 30 30 30 30 30 30  |0000064.00000000|
211 00000090  30 30 30 00 30 30 31 34  30 35 33 00 67 00 00 00  |000.0014053.g...|
212 000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
213 000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
214 000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
215 000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
216 000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
217 000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
218 00000100  00 75 73 74 61 72 00 30  30 67 69 74 00 00 00 00  |.ustar.00git....|
219 00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
220 00000120  00 00 00 00 00 00 00 00  00 67 69 74 00 00 00 00  |.........git....|
221 00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
222 00000140  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
223 00000150  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
224 00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
225 00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
226 00000180  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
227 00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
228 000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
229 000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
230 000001c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
231 000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
232 000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
233 000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
234 00000200  35 32 20 63 6f 6d 6d 65  6e 74 3d 62 31 30 35 30  |52 comment=b1050|
235 00000210  32 62 32 32 61 31 32 30  39 64 36 62 34 37 36 33  |2b22a1209d6b4763|
236 00000220  39 64 38 38 62 38 31 32  62 32 31 66 62 35 39 34  |9d88b812b21fb594|
237 00000230  39 65 34 0a 00 00 00 00  00 00 00 00 00 00 00 00  |9e4.............|
238 00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
239 ...