pkg/archive
Josh Hawn f70214084c Exclude .wh..wh.* AUFS metadata on layer export
In an effort to make layer content 'stable' between import
and export from two different graph drivers, we must resolve
an issue where AUFS produces metadata files in its layers
which other drivers explicitly ignore when importing.

The issue presents itself like this:

    - Generate a layer using AUFS
    - On commit of that container, the new stored layer contains
      AUFS metadata files/dirs. The stored layer content has some
      tarsum value: '1234567'
    - `docker save` that image to a USB drive and `docker load`
      into another docker engine instance which uses another
      graph driver, say 'btrfs'
    - On load, this graph driver explicitly ignores any AUFS metadata
      that it encounters. The stored layer content now has some
      different tarsum value: 'abcdefg'.

The only (apparent) useful aufs metadata to keep are the psuedo link
files located at `/.wh..wh.plink/`. Thes files hold information at the
RW layer about hard linked files between this layer and another layer.
The other graph drivers make sure to copy up these psuedo linked files
but I've tested out a few different situations and it seems that this
is unnecessary (In my test, AUFS already copies up the other hard linked
files to the RW layer).

This changeset adds explicit exclusion of the AUFS metadata files and
directories (NOTE: not the whiteout files!) on commit of a container
using the AUFS storage driver.

Also included is a change to the archive package. It now explicitly
ignores the root directory from being included in the resulting tar archive
for 2 reasons: 1) it's unnecessary. 2) It's another difference between
what other graph drivers produce when exporting a layer to a tar archive.

Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
2014-10-28 10:14:05 -07:00
..
testdata Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
archive.go Exclude .wh..wh.* AUFS metadata on layer export 2014-10-28 10:14:05 -07:00
archive_test.go archive: tests and benchmarks for hardlinks 2014-10-24 08:58:31 -04:00
changes.go Use logrus everywhere for logging 2014-10-24 15:03:06 -07:00
changes_test.go Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
diff.go Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
MAINTAINERS Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
README.md Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
time_linux.go Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
time_unsupported.go Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00
wrap.go Move archive package into pkg/archive 2014-09-29 23:23:36 -07:00

This code provides helper functions for dealing with archive files.