1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
|
1.4.3 (2024-02-01)
------------------
- take hard links into account when computing disk usage
1.4.2 (2024-01-29)
------------------
- allow for start-stop-daemon to be in either /sbin or /usr/sbin
- mmdebstrap-autopkgtest-build-qemu: fix octal mode computation and hostname
1.4.1 (2024-01-09)
------------------
- set DPkg::Chroot-Directory in APT_CONFIG to simplify calling apt in hooks
- disallow running chrootless as root without fakeroot unless
--skip=check/chrootless is used
- only print short --help output if wrong args are passed
- read files passed as --aptopt and --dpkgopt outside the unshared namespace
1.4.0 (2023-10-24)
------------------
- add mmdebstrap-autopkgtest-build-qemu
- export container=mmdebstrap-unshare env variable in unshare-mode hooks
- add new skip options: output/dev, output/mknod, tar-in/mknod,
copy-in/mknod, sync-in/mknod
- stop copying qemu-$arch-static binary into the chroot
- tarfilter: add --type-exclude option
- set MMDEBSTRAP_FORMAT in hooks
- do not install priority:required in buildd variant following debootstrap
1.3.8 (2023-08-20)
------------------
- hooks/merged-usr: implement post-merging as debootstrap does
- exclude ./lost+found from tarball
1.3.7 (2023-06-21)
------------------
- add hooks/copy-host-apt-sources-and-preferences
1.3.6 (2023-06-16)
------------------
- bugfix release
1.3.5 (2023-03-20)
------------------
- bugfix release
1.3.4 (2023-03-16)
------------------
- more safeguards before automatically choosing unshare mode
1.3.3 (2023-02-19)
------------------
- testsuite improvements
1.3.2 (2023-02-16)
------------------
- unshare mode works in privileged docker containers
1.3.1 (2023-01-20)
------------------
- bugfix release
1.3.0 (2023-01-16)
------------------
- add hooks/maybe-jessie-or-older and hooks/maybe-merged-usr
- add --skip=check/signed-by
- hooks/jessie-or-older: split into two individual hook files
- skip running apt-get update if we are very sure that it was already run
- be more verbose when 'apt-get update' failed
- warn if a hook is named like one but not executable and if a hook is
executable but not named like one
- to find signed-by value, run gpg on the individual keys to print better
error messages in case it fails (gpg doesn't give an indication which file
it was unable to read) and print progress bar
- allow empty sources.list entries
1.2.5 (2023-01-04)
------------------
- bugfix release
1.2.4 (2022-12-23)
------------------
- bugfix release
- add jessie-or-older extract hook
1.2.3 (2022-11-16)
------------------
- use Text::ParseWords::shellwords instead of spawning a new shell
- mount and unmount once, instead for each run_chroot() call
1.2.2 (2022-10-27)
------------------
- allow /etc/apt/trusted.gpg.d/ not to exist
- always create /var/lib/dpkg/arch to make foreign architecture chrootless
tarballs bit-by-bit identical
- write an empty /etc/machine-id instead of writing 'uninitialized'
- only print progress bars on interactive terminals that are wide enough
1.2.1 (2022-09-08)
------------------
- bugfix release
1.2.0 (2022-09-05)
------------------
- remove proot mode
- error out if stdout is an interactive terminal
- replace taridshift by tarfilter --idshift
- tarfilter: add --transform option
- multiple --skip options can be separated by comma or whitespace
- also cleanup the contents of /run
- support apt patterns and paths with commas and whitespace in --include
- hooks: store the values of the --include option in MMDEBSTRAP_INCLUDE
- add new --skip options: chroot/start-stop-daemon, chroot/policy-rc.d
chroot/mount, chroot/mount/dev, chroot/mount/proc, chroot/mount/sys,
cleanup/run
1.1.0 (2022-07-26)
----------------
- mount a new /dev/pts instance into the chroot to make posix_openpt work
- adjust merged-/usr hook to work the same way as debootstrap
- add no-merged-usr hook
1.0.1 (2022-05-29)
------------------
- bugfix release
1.0.0 (2022-05-28)
------------------
- all documented interfaces are now considered stable
- allow file:// mirrors
- /var/cache/apt/archives/ is now allowed to contain *.deb packages
- add file-mirror-automount hook-dir
- set $MMDEBSTRAP_VERBOSITY in hooks
- rewrite coverage with multiple individual and skippable shell scripts
0.8.6 (2022-03-25)
------------------
- allow running root mode inside unshare mode
0.8.5 (2022-03-07)
------------------
- improve documentation
0.8.4 (2022-02-11)
------------------
- tarfilter: add --strip-components option
- don't install essential packages in run_install()
- remove /var/lib/dbus/machine-id
0.8.3 (2022-01-08)
------------------
- allow codenames with apt patterns (requires apt >= 2.3.14)
- don't overwrite existing files in setup code
- don't copy in qemu-user-static binary if it's not needed
0.8.2 (2021-12-14)
------------------
- use apt patterns to select priority variants (requires apt >= 2.3.10)
0.8.1 (2021-10-07)
------------------
- enforce dpkg >= 1.20.0 and apt >= 2.3.7
- allow working directory be not world readable
- do not run xz and zstd with --threads=0 since this is a bad default for
machines with more than 100 cores
- bit-by-bit identical chrootless mode
0.8.0 (2021-09-21)
------------------
- allow running inside chroot in root mode
- allow running without /dev, /sys or /proc
- new --format=null which gets automatically selected if the output is
/dev/null and doesn't produce a tarball or other permanent output
- allow ASCII-armored keyrings (requires gnupg >= 2.2.8)
- run zstd with --threads=0
- tarfilter: add --pax-exclude and --pax-include to strip extended attributes
- add --skip=setup, --skip=update and --skip=cleanup
- add --skip=cleanup/apt/lists and --skip=cleanup/apt/cache
- pass extended attributes (excluding system) to tar2sqfs
- use apt-get update -error-on=any (requires apt >= 2.1.16)
- support Debian 11 Buster
- use apt from outside using DPkg::Chroot-Directory (requires apt >= 2.3.7)
* build chroots without apt (for example from buildinfo files)
* no need to install additional packages like apt-transport-* or
ca-certificates inside the chroot
* no need for additional key material inside the chroot
* possible use of file:// and copy://
- use apt pattern to select essential set
- write 'uninitialized' to /etc/machine-id
- allow running in root mode without mount working, either because of missing
CAP_SYS_ADMIN or missing /usr/bin/mount
- make /etc/ld.so.cache under fakechroot mode bit-by-bit identical to root
and unshare mode
- move hooks/setup00-merged-usr.sh to hooks/merged-usr/setup00.sh
- add gpgvnoexpkeysig script for very old snapshot.d.o timestamps with expired
signature
0.7.5 (2021-02-06)
------------------
- skip emulation check for extract variant
- add new suite name trixie
- unset TMPDIR in hooks because there is no value that works inside as well as
outside the chroot
- expose hook name to hooks via MMDEBSTRAP_HOOK environment variable
0.7.4 (2021-01-16)
------------------
- Optimize mmtarfilter to handle many path exclusions
- Set MMDEBSTRAP_APT_CONFIG, MMDEBSTRAP_MODE and MMDEBSTRAP_HOOKSOCK for hook
scripts
- Do not run an additional env command inside the chroot
- Allow unshare mode as root user
- Additional checks whether root has the necessary privileges to mount
- Make most features work on Debian 10 Buster
0.7.3 (2020-12-02)
------------------
- bugfix release
0.7.2 (2020-11-28)
------------------
- check whether tools like dpkg and apt are installed at startup
- make it possible to seed /var/cache/apt/archives with deb packages
- if a suite name was specified, use the matching apt index to figure out the
package set to install
- use Debian::DistroInfo or /usr/share/distro-info/debian.csv (if available)
to figure out the security mirror for bullseye and beyond
- use argparse in tarfilter and taridshift for proper --help output
0.7.1 (2020-09-18)
------------------
- bugfix release
0.7.0 (2020-08-27)
-----------------
- the hook system (setup, extract, essential, customize and hook-dir) is made
public and is now a documented interface
- tarball is also created if the output is a named pipe or character special
- add --format option to control the output format independent of the output
filename or in cases where output is directed to stdout
- generate ext2 filesystems if output file ends with .ext2 or --format=ext2
- add --skip option to prevent some automatic actions from being carried out
- implement dpkg-realpath in perl so that we don't need to run tar inside the
chroot anymore for modes other than fakechroot and proot
- add ready-to-use hook scripts for eatmydata, merged-usr and busybox
- add tarfilter tool
- use distro-info-data and debootstrap to help with suite name and keyring
discovery
- no longer needs to install twice when --depkgopt=path-exclude is given
- variant=custom and hooks can be used as a debootstrap wrapper
- use File::Find instead of "du" to avoid different results on different
filesystems
- many, many bugfixes and documentation enhancements
0.6.1 (2020-03-08)
------------------
- replace /etc/machine-id with an empty file
- fix deterministic tar with pax and xattr support
- support deb822-style format apt sources
- mount /sys and /proc as read-only in root mode
- unset TMPDIR environment variable for everything running inside the chroot
0.6.0 (2020-01-16)
------------------
- allow multiple --architecture options
- allow multiple --include options
- enable parallel compression with xz by default
- add --man option
- add --keyring option overwriting apt's default keyring
- preserve extended attributes in tarball
- allow running tests on non-amd64 systems
- generate squashfs images if output file ends in .sqfs or .squashfs
- add --dry-run/--simulate options
- add taridshift tool
0.5.1 (2019-10-19)
------------------
- minor bugfixes and documentation clarification
- the --components option now takes component names as a comma or whitespace
separated list or as multiple --components options
- make_mirror.sh now has to be invoked manually before calling coverage.sh
0.5.0 (2019-10-05)
------------------
- do not unconditionally read sources.list stdin anymore
* if mmdebstrap is used via ssh without a pseudo-terminal, it will stall
forever
* as this is unexpected, one now has to explicitly request reading
sources.list from stdin in situations where it's ambiguous whether
that is requested
* thus, the following modes of operation don't work anymore:
$ mmdebstrap unstable /output/dir < sources.list
$ mmdebstrap unstable /output/dir http://mirror < sources.list
* instead, one now has to write:
$ mmdebstrap unstable /output/dir - < sources.list
$ mmdebstrap unstable /output/dir http://mirror - < sources.list
- fix binfmt_misc support on docker
- do not use qemu for architectures unequal the native architecture that can
be used without it
- do not copy /etc/resolv.conf or /etc/hostname if the host system doesn't
have them
- add --force-check-gpg dummy option
- allow hooks to remove start-stop-daemon
- add /var/lib/dpkg/arch in chrootless mode when chroot architecture differs
- create /var/lib/dpkg/cmethopt for dselect
- do not skip package installation in 'custom' variant
- fix EDSP output for external solvers so that apt doesn't mark itself as
Essential:yes
- also re-exec under fakechroot if fakechroot is picked in 'auto' mode
- chdir() before 'apt-get update' to accomodate for apt << 1.5
- add Dir::State::Status to apt config for apt << 1.3
- chmod 0755 on qemu-user-static binary
- select the right mirror for ubuntu, kali and tanglu
0.4.1 (2019-03-01)
------------------
- re-enable fakechroot mode testing
- disable apt sandboxing if necessary
- keep apt and dpkg lock files
0.4.0 (2019-02-23)
------------------
- disable merged-usr
- add --verbose option that prints apt and dpkg output instead of progress
bars
- add --quiet/--silent options which print nothing on stderr
- add --debug option for even more output than with --verbose
- add some no-op options to make mmdebstrap a drop-in replacement for certain
debootstrap wrappers like sbuild-createchroot
- add --logfile option which outputs to a file what would otherwise be written
to stderr
- add --version option
0.3.0 (2018-11-21)
------------------
- add chrootless mode
- add extract and custom variants
- make testsuite unprivileged through qemu and guestfish
- allow empty lost+found directory in target
- add 54 testcases and fix lots of bugs as a result
0.2.0 (2018-10-03)
------------------
- if no MIRROR was specified but there was data on standard input, then use
that data as the sources.list instead of falling back to the default mirror
- lots of bug fixes
0.1.0 (2018-09-24)
------------------
- initial release
|