-
Notifications
You must be signed in to change notification settings - Fork 676
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Any chance of changing the whiteout file approach? #24
Comments
To be clear, you are saying that the .wh approach is limited? And the If so, I agree. On Thu, Apr 14, 2016, 17:16 Timothy Hobbs notifications@github.com wrote:
|
Creating a list of files to be whited out, and keeping that outside of |
I wholly agree and intend to see it done as a whiteout file list. On Thu, Apr 14, 2016, 17:26 Timothy Hobbs notifications@github.com wrote:
|
I think this is something we should think about for post v1.0.0. I whole heartedly agree but in the ideal case the initial v1 serialization spec is binary compatible with the existing docker serialization to save the sanity of all of the existing registry folks like acr, gcr.io, Quay, Hub, etc. |
Would it be possible to use the whiteout list file IFF a |
@timthelion Yes, that would be the right way of approaching it. It would be a schema bump which would be a version break. Happy to consider adding this feature to fix the issue but I do want to hold off until we get post v1.0.0 (in a couple of months). |
@philips so basically, you want to have the 1.0 release be supported by Docker/CoreOS/whatever, without actually haven't to change Docker/CoreOS/whatever's code? Basically, there will be no actual technical changes to the spec before 1.0? |
@timthelion No breaking technical changes. |
On Thu, Apr 14, 2016 at 02:26:16PM -0700, Timothy Hobbs wrote:
If we don't mind picking up a non-standard tar entry, star |
Now that |
You could add a new whiteout approach in 1.1. You'd only need to go to 2.0 if you remove or make backward-incompatible changes to an existing approach. |
A backwards-compatible change means either that a 1.1 image must be processed correctly by a 1.0 extractor, or that a 1.0 image must be processed correctly by a 1.1 extractor; depending on your point of view. In the case of 1.1-image-on-1.0-extractor, the extractor will not know about any way to produce a file named Either way, it seems to me that it's impossible to construct an image which extracts a Perhaps there's something I'm missing. Perhaps these limitations are acceptable to the project members. Otherwise, it's something that should be addressed before |
Interesting. There is an option of approaching whiteouts like overlayfs On Mon, Oct 17, 2016, 18:37 Adrian Colley notifications@github.com wrote:
|
Unfortunately, support for extended attributes varies widely and incompatibly among tar implementations. And that gets us into the tarpit of the #342 discussion (pun accidental, I swear). But it works if the chosen tar format supports it. |
On Mon, Oct 17, 2016 at 03:30:51PM -0700, Adrian Colley wrote:
This should be made very clear in the spec, leaving it open to
Agreed, which is why I want a 1.0 extractor to error out if you give
Well, you can have ‘.wh.foo’ entries. They're just interpreted as
Backwards-compat means “the old stuff still works with the new tools”. |
@wking OK, I see your point. 1.0 images can work on 1.x extractors so long as they don't attempt to create non-whiteout |
After spending some more intimate time with whiteout files ( What good does changing this provide? I don't see how this allows layers to have "arbitrary data". |
On Wed, Oct 19, 2016 at 04:47:27PM -0700, Stephen Day wrote:
As @timthelion describes in the topic post 1, the current approach a. An external ‘whiteouts’ 1. all either give us an non-overloaded place to store the “delete the |
@wking Is there a realistic use case for distributing Please, for the love of god, stop doing this. |
On Wed, Oct 19, 2016 at 05:53:25PM -0700, Stephen Day wrote:
I don't have a personal use case for it, but I would like to avoid |
@wking I don't really get this: the proposed layout is not how images are laid out. Such a provision requires either having in-band whiteout or a container format, which complicates unpacking. A tar of a tar, while we do it in image layout, should be avoided. If we use overlay style device, now do you implement devices with windows on NTFS? Sure, you can put them in the tar file, but what happens when they are unpacked? How do you encode these in other archive formats that don't have device support, like zip? |
On Fri, Oct 21, 2016 at 11:40:17AM -0700, Stephen Day wrote:
I agree, which is why I prefer the
I think you're talking about @VBatt's
If we land “ The
You don't, but that's not a big deal. We don't have an |
On Tue, Oct 25, 2016 at 11:12:15AM -0700, Timothy Hobbs wrote:
You can extend at any time by minting new media types. You don't have to add support for something like this now on the off-chance that we'll use it later.
This has the same path-restriction as the current |
Excelent. I of course don't want to restrict the possible paths at all, On 10/25/2016 08:20 PM, W. Trevor King wrote:
|
@timthelion Besides the contrived examples, do you have an extant proof that someone has actually run into a naming collision with whiteout files? I think there are problems in nested container scenarios but that can be solved with filesystem passthrough. Look, I am not saying that AUFS whiteouts are ideal, but I thought the goal here was to define a container standard based on working systems. Especially, one that people actually use. If we always focus on the limitations, we'll never realize the benefits. |
"It's already implemented" is literally the only good thing to say about the I'm really only an outsider throwing peanuts from the gallery, but if I were dictator, I'd make the |
On Tue, Oct 25, 2016 at 05:37:37PM -0700, Adrian Colley wrote:
imageLayoutVersion has nothing to do with it. The thing we'd be |
a couple points:
|
On Fri, Oct 28, 2016 at 06:05:57AM -0700, Vincent Batts wrote:
I don't think we'd need to fork archive/tar to support SCHILY.filetype $ zgrep TMPFS_XATTR /proc/config.gz With SCHILY.filetype we'd just be putting a different payload in that |
On Fri, Oct 28, 2016 at 08:20:06AM -0700, W. Trevor King wrote:
Looking into this more today, it turns out that there is an issue with I don't understand why overlayfs uses one approach (c0/0) for whiteout 3,4 So I'm ok with the following ways for specifying “this is a whiteout”: a. Follow overlayfs into overloading c0/0, which likely works (and b. Follow overlayfs into coining a new SCHILY.xattr.trusted c. Wait until Go fixes their pax extended header processing and use |
I was reading about the Tar archive format the other day, and I noticed that we could just use One thing I ran into with |
On Sat, Nov 05, 2016 at 04:42:46AM -0700, Aleksa Sarai wrote:
This is the same approach as SCHILY.filetype whiteout, but without
Layers only need to contain the paths they're touching. If you want ./a/b/c This is covered by the “extracted like a regular tar archive” wording |
I just ran into this issue with this commit: cyphar/umoci@2a421289266d. Basically if you call |
lstat(2) returns EPERM if you try to get information about a whiteout path. This is one of the reasons I think that matching the AUFS semantics is insane. Ref: opencontainers/image-spec#24 Signed-off-by: Aleksa Sarai <asarai@suse.com>
lstat(2) returns EPERM if you try to get information about a whiteout path. This is one of the reasons I think that matching the AUFS semantics is insane. Ref: opencontainers/image-spec#24 Signed-off-by: Aleksa Sarai <asarai@suse.com>
On Sat, Nov 05, 2016 at 07:52:54AM -0700, W. Trevor King wrote:
I'd rather wait for golang/go#14472 and use the pax extended header,
to avoid accidentally misinterpreting some other tar extension that
has decided to use a ‘W’ type for something else.
golang/go#14472 was fixed today, so once Go 1.10 is cut (in February)
the SCHILY.filetype approach will be supportable using the Go stdlib.
Collecting a new list of potential approaches (because there have been
some new ones since [1]):
a. An external ‘whiteouts’ [2].
b. SCHILY.filetype set to whiteout (like BSD) [3].
c. Device set to 0 (like overlayfs for non-directories) [4,5].
d. SCHILY.xattr.trusted.overlay.opaque set to y (like overlayfs for
directories) [5].
e. Setting SCHILY.xattr.trusted.oci.whiteout (or
OPENCONTAINER.whiteout, or whatever) to y in the same spirit as
overlayfs but with an OCI-specific key [6].
f. Typeflag set to W [7].
I'd prefer not to do a, since it complicates unpacking if we need more
information than the tar content itself. I'm fine with any of the
other options, although b, c, and e seem the least likely to result in
collisions with third-party pax extensions applying semantics other
than “this is a whiteout entry”.
[1]: #24 (comment)
[2]: #24 (comment)
[3]: #24 (comment)
[4]: #24 (comment)
[5]: #24 (comment)
[6]: #24 (comment)
[7]: #24 (comment)
|
@wking I think that (b) or (e) are the two best options. (e) is the best from a "let's create a standard that you have to explicitly implement" perspective, but (b) is the best from a "let's do what other people do already" (I consider the BSDs to be a better source of inspiration in this area than Linux filesystem internals). As for (c) and (d), they feel like they'd either be inconsistent with overlayfs anyway (since overlayfs does both) and would likely be inconsistent with how a normal user of a |
On Sat, Aug 26, 2017 at 11:31:11PM +0000, Aleksa Sarai wrote:
@wking I think that (b) or (e) are the two best options. (e) is the
best from a "let's create a standard that you have to explicitly
implement" perspective, but (b) is the best from a "let's do what
other people do already" (I consider the BSDs to be a better source
of inspiration in this area that Linux filesystem internals).
Sounds good to me. Does someone want to pick one of those so we can
file a PR for a new layer media type that uses the chosen whiteout
approach?
|
What problem are we trying to solve here? There is already millions of container images using this approach. Tweaking this won't actually make the format better; it just means that complaint implementations now need to handle two variations, instead of one. If we are going to make an incompatible format, it would be better to move away from a layered diff approach to something tree oriented (like https://github.com/containerd/continuity). |
This conversation is going around in circles. @stevvooe, you keep on
coming back and saying basically the same things.
I am, however, now against any changes, we should never break a standard
after 1.0. And 1.0 was a long time ago. Docker's 1.0 that is.
When I'm discussing this with you @stevvooe, I feel like Docker Inc.
doesn't really want OCI to be an independent project. I feel like you
want a facade of independence, a facade of industry consensus, behind
which you can be the puppet masters. It feels to me like this is more a
game of obstructionism than a real technical discussion, and I don't
think there's any point in me or anyone else fighting that. Your
reasons, that there were millions of containers using the standard, were
true before the standard even existed, before the name OCI was ever
dreamed up, and the only reason that's true is because this IS the
Docker standard. Nothing more. You're making me feel that, in reality,
this is Docker's project, and the rest of us should either accept that
fact, or pack up and go home.
…On 08/31/2017 03:22 AM, Stephen Day wrote:
What problem are we trying to solve here? There is already millions of
container images using this approach. Tweaking this won't actually
make the format better; it just means that complaint implementations
now need to handle two variations, instead of one.
If we are going to make an incompatible format, it would be better to
move away from a layered diff approach to something tree oriented
(like https://github.com/containerd/continuity).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#24 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/ABU7-OEws7wr63vhhFru9hdqppyfHuZwks5sdgrNgaJpZM4IHyeg>.
|
On Thu, Aug 31, 2017 at 10:49:39AM -0700, Timothy Hobbs wrote:
I am, however, now against any changes, we should never break a
standard after 1.0. And 1.0 was a long time ago. Docker's 1.0 that
is.
I don't think anyone is arguing for removing
application/vnd.oci.image.layer.v1.tar and friends [1] which will
continue to use the current .wh.* approach [2]. This is about
specifying a new format that doesn't suffer from the .wh.* limitations
[3,4].
And to @stevvooe's most recent point [5], I would be very happy with a
Merkle tree that had (sub)file granularity. #577 is probably a more
targetted issue for that. And however that happens, it's going to be
a pretty large shift.
Using any of [6] (SCHILY.filetype set to ‘whiteout’ or
SCHILY.xattr.trusted.oci.whiteout set to ‘y’ in an
application/vnd.oci.image.layer.v2.tar family of media types) would be
a much smaller shift that is much easier to support. If we expect
#577 to be addressed in the near future, then there's probably no
point in a v2.tar family. But if we expect #577 to linger for years,
then I think it's worth creating a v2.tar family to address the v1.tar
limitations.
[1]: https://github.com/opencontainers/image-spec/blob/v1.0.0/layer.md#image-layer-filesystem-changeset
[2]: https://github.com/opencontainers/image-spec/blob/v1.0.0/layer.md#whiteouts
[3]: #24 (comment)
[4]: #24 (comment)
[5]: #24 (comment)
[6]: #24 (comment)
|
@timthelion please keep things civil, we have a code of conduct that we expect our community to abide by: https://www.opencontainers.org/about/code-of-conduct |
This came up again recently at Container Camp UK in London. @cyphar and I were discussing what other options would be a migration path from the AUFS inherited approach. And as we also want to enable ourselves for a non-TAR future. |
It seems unfortunate that a new standard should use a method which unecesarilly limits the standard. With the .wh file approach, base images can no longer contain arbitrary data. This means, for example, that you cannot have an image with example OCI image-spec data stored in it. Is there any possibility of changing this to use, for example, a white out list instead. So that the files that made a layer would be:
That would mean that truely arbitrary data could be stored in the images, which would be really nice :)
The text was updated successfully, but these errors were encountered: