github.com/tych0/umoci@v0.4.2/CHANGELOG.md (about)

     1  # Change Log
     2  All notable changes to this project will be documented in this file.
     3  
     4  The format is based on [Keep a Changelog](http://keepachangelog.com/)
     5  and this project adheres to [Semantic Versioning](http://semver.org/).
     6  
     7  ## [Unreleased]
     8  
     9  ## [0.4.2] - 2018-09-11
    10  ## Added
    11  - umoci now has an exposed Go API. At the moment it's unclear whether it will
    12    be changed significantly, but at the least now users can use
    13    umoci-as-a-library in a fairly sane way. openSUSE/umoci#245
    14  - Added `umoci unpack --keep-dirlinks` (in the same vein as rsync's flag with
    15    the same name) which allows layers that contain entries which have a symlink
    16    as a path component. openSUSE/umoci#246
    17  - `umoci insert` now supports whiteouts in two significant ways. You can use
    18    `--whiteout` to "insert" a deletion of a given path, while you can use
    19    `--opaque` to replace a directory by adding an opaque whiteout (the default
    20    behaviour causes the old and new directories to be merged).
    21    openSUSE/umoci#257
    22  
    23  ## Fixed
    24  - Docker has changed how they handle whiteouts for non-existent files. The
    25    specification is loose on this (and in umoci we've always been liberal with
    26    whiteout generation -- to avoid cases where someone was confused we didn't
    27    have a whiteout for every entry). But now that they have deviated from the
    28    spec, in the interest of playing nice, we can just follow their new
    29    restriction (even though it is not supported by the spec). This also makes
    30    our layers *slightly* smaller. openSUSE/umoci#254
    31  - `umoci unpack` now no longer erases `system.nfs4_acl` and also has some more
    32    sophisticated handling of forbidden xattrs. openSUSE/umoci#252
    33    openSUSE/umoci#248
    34  - `umoci unpack` now appears to work correctly on SELinux-enabled systems
    35    (previously we had various issues where `umoci` wouldn't like it when it was
    36    trying to ensure the filesystem was reproducibly generated and SELinux xattrs
    37    would act strangely). To fix this, now `umoci unpack` will only cause errors
    38    if it has been asked to change a forbidden xattr to a value different than
    39    it's current on-disk value. openSUSE/umoci#235 openSUSE/umoci#259
    40  
    41  ## [0.4.1] - 2018-08-16
    42  ### Added
    43  - The number of possible tags that are now valid with `umoci` subcommands has
    44    increased significantly due to an expansion in the specification of the
    45    format of the `ref.name` annotation. To quote the specification, the
    46    following is the EBNF of valid `refname` values. openSUSE/umoci#234
    47    ```
    48    refname   ::= component ("/" component)*
    49    component ::= alphanum (separator alphanum)*
    50    alphanum  ::= [A-Za-z0-9]+
    51    separator ::= [-._:@+] | "--"
    52    ```
    53  - A new `umoci insert` subcommand which adds a given file to a path inside the
    54    container. openSUSE/umoci#237
    55  - A new `umoci raw unpack` subcommand in order to allow users to unpack images
    56    without needing a configuration or any of the manifest generation.
    57    openSUSE/umoci#239
    58  - `umoci` how has a logo. Thanks to [Max Bailey][maxbailey] for contributing
    59    this to the project. openSUSE/umoci#165 openSUSE/umoci#249
    60  
    61  ### Fixed
    62  - `umoci unpack` now handles out-of-order regular whiteouts correctly (though
    63    this ordering is not recommended by the spec -- nor is it required). This is
    64    an extension of openSUSE/umoci#229 that was missed during review.
    65    openSUSE/umoci#232
    66  - `umoci unpack` and `umoci repack` now make use of a far more optimised `gzip`
    67    compression library. In some benchmarks this has resulted in `umoci repack`
    68    speedups of up to 3x (though of course, you should do your own benchmarks).
    69    `umoci unpack` unfortunately doesn't have as significant of a performance
    70    improvement, due to the nature of `gzip` decompression (in future we may
    71    switch to `zlib` wrappers). openSUSE/umoci#225 openSUSE/umoci#233
    72  
    73  [maxbailey]: http://www.maxbailey.me/
    74  
    75  ## [0.4.0] - 2018-03-10
    76  ### Added
    77  - `umoci repack` now supports `--refresh-bundle` which will update the
    78    OCI bundle's metadata (mtree and umoci-specific manifests) after packing the
    79    image tag. This means that the bundle can be used as a base layer for
    80    future diffs without needing to unpack the image again. openSUSE/umoci#196
    81  - Added a website, and reworked the documentation to be better structured. You
    82    can visit the website at [`umo.ci`][umo.ci]. openSUSE/umoci#188
    83  - Added support for the `user.rootlesscontainers` specification, which allows
    84    for persistent on-disk emulation of `chown(2)` inside rootless containers.
    85    This implementation is interoperable with [@AkihiroSuda's `PRoot`
    86    fork][as-proot-fork] (though we do not test its interoperability at the
    87    moment) as both tools use [the same protobuf
    88    specification][rootlesscontainers-proto]. openSUSE/umoci#227
    89  - `umoci unpack` now has support for opaque whiteouts (whiteouts which remove
    90    all children of a directory in the lower layer), though `umoci repack` does
    91    not currently have support for generating them. While this is technically a
    92    spec requirement, through testing we've never encountered an actual user of
    93    these whiteouts. openSUSE/umoci#224 openSUSE/umoci#229
    94  - `umoci unpack` will now use some rootless tricks inside user namespaces for
    95    operations that are known to fail (such as `mknod(2)`) while other operations
    96    will be carried out as normal (such as `lchown(2)`). It should be noted that
    97    the `/proc/self/uid_map` checking we do can be tricked into not detecting
    98    user namespaces, but you would need to be trying to break it on purpose.
    99    openSUSE/umoci#171 openSUSE/umoci#230
   100  
   101  ### Fixed
   102  - Fix a bug in our "parent directory restore" code, which is responsible for
   103    ensuring that the mtime and other similar properties of a directory are not
   104    modified by extraction inside said directory. The bug would manifest as
   105    xattrs not being restored properly in certain edge-cases (which we
   106    incidentally hit in a test-case). openSUSE/umoci#161 openSUSE/umoci#162
   107  - `umoci unpack` will now "clean up" the bundle generated if an error occurs
   108    during unpacking. Previously this didn't happen, which made cleaning up the
   109    responsibility of the caller (which was quite difficult if you were
   110    unprivileged). This is a breaking change, but is in the error path so it's
   111    not critical. openSUSE/umoci#174 openSUSE/umoci#187
   112  - `umoci gc` now will no longer remove unknown files and directories that
   113    aren't `flock(2)`ed, thus ensuring that any possible OCI image-spec
   114    extensions or other users of an image being operated on will no longer
   115    break.  openSUSE/umoci#198
   116  - `umoci unpack --rootless` will now correctly handle regular file unpacking
   117    when overwriting a file that `umoci` doesn't have write access to. In
   118    addition, the semantics of pre-existing hardlinks to a clobbered file are
   119    clarified (the hard-links will not refer to the new layer's inode).
   120    openSUSE/umoci#222 openSUSE/umoci#223
   121  
   122  [as-proot-fork]: https://github.com/AkihiroSuda/runrootless
   123  [rootlesscontainers-proto]: https://rootlesscontaine.rs/proto/rootlesscontainers.proto
   124  [umo.ci]: https://umo.ci/
   125  
   126  ## [0.3.1] - 2017-10-04
   127  ### Fixed
   128  - Fix several minor bugs in `hack/release.sh` that caused the release artefacts
   129    to not match the intended style, as well as making it more generic so other
   130    projects can use it. openSUSE/umoci#155 openSUSE/umoci#163
   131  - A recent configuration issue caused `go vet` and `go lint` to not run as part
   132    of our CI jobs. This means that some of the information submitted as part of
   133    [CII best practices badging][cii] was not accurate. This has been corrected,
   134    and after review we concluded that only stylistic issues were discovered by
   135    static analysis. openSUSE/umoci#158
   136  - 32-bit unit test builds were broken in a refactor in [0.3.0]. This has been
   137    fixed, and we've added tests to our CI to ensure that something like this
   138    won't go unnoticed in the future. openSUSE/umoci#157
   139  - `umoci unpack` would not correctly preserve set{uid,gid} bits. While this
   140    would not cause issues when building an image (as we only create a manifest
   141    of the final extracted rootfs), it would cause issues for other users of
   142    `umoci`. openSUSE/umoci#166 openSUSE/umoci#169
   143  - Updated to [v0.4.1 of `go-mtree`][gomtree-v0.4.1], which fixes several minor
   144    bugs with manifest generation. openSUSE/umoci#176
   145  - `umoci unpack` would not handle "weird" tar archive layers previously (it
   146    would error out with DiffID errors). While this wouldn't cause issues for
   147    layers generated using Go's `archive/tar` implementation, it would cause
   148    issues for GNU gzip and other such tools. openSUSE/umoci#178
   149    openSUSE/umoci#179
   150  
   151  ### Changed
   152  - `umoci unpack`'s mapping options (`--uid-map` and `--gid-map`) have had an
   153    interface change, to better match the [`user_namespaces(7)`][user_namespaces]
   154    interfaces. Note that this is a **breaking change**, but the workaround is to
   155    switch to the trivially different (but now more consistent) format.
   156    openSUSE/umoci#167
   157  
   158  ### Security
   159  - `umoci unpack` used to create the bundle and rootfs with world
   160    read-and-execute permissions by default. This could potentially result in an
   161    unsafe rootfs (containing dangerous setuid binaries for instance) being
   162    accessible by an unprivileged user. This has been fixed by always setting the
   163    mode of the bundle to `0700`, which requires a user to explicitly work around
   164    this basic protection. This scenario was documented in our security
   165    documentation previously, but has now been fixed. openSUSE/umoci#181
   166    openSUSE/umoci#182
   167  
   168  [cii]: https://bestpractices.coreinfrastructure.org/projects/1084
   169  [gomtree-v0.4.1]: https://github.com/vbatts/go-mtree/releases/tag/v0.4.1
   170  [user_namespaces]: http://man7.org/linux/man-pages/man7/user_namespaces.7.html
   171  
   172  ## [0.3.0] - 2017-07-20
   173  ### Added
   174  - `umoci` now passes all of the requirements for the [CII best practices bading
   175    program][cii]. openSUSE/umoci#134
   176  - `umoci` also now has more extensive architecture, quick-start and roadmap
   177    documentation. openSUSE/umoci#134
   178  - `umoci` now supports [`1.0.0` of the OCI image
   179    specification][ispec-v1.0.0] and [`1.0.0` of the OCI runtime
   180    specification][rspec-v1.0.0], which are the first milestone release. Note
   181    that there are still some remaining UX issues with `--image` and other parts
   182    of `umoci` which may be subject to change in future versions. In particular,
   183    this update of the specification now means that images may have ambiguous
   184    tags. `umoci` will warn you if an operation may have an ambiguous result, but
   185    we plan to improve this functionality far more in the future.
   186    openSUSE/umoci#133 openSUSE/umoci#142
   187  - `umoci` also now supports more complicated descriptor walk structures, and
   188    also handles mutation of such structures more sanely. At the moment, this
   189    functionality has not been used "in the wild" and `umoci` doesn't have the UX
   190    to create such structures (yet) but these will be implemented in future
   191    versions. openSUSE/umoci#145
   192  - `umoci repack` now supports `--mask-path` to ignore changes in the rootfs
   193    that are in a child of at least one of the provided masks when generating new
   194    layers. openSUSE/umoci#127
   195  
   196  ### Changed
   197  - Error messages from `github.com/openSUSE/umoci/oci/cas/drivers/dir` actually
   198    make sense now. openSUSE/umoci#121
   199  - `umoci unpack` now generates `config.json` blobs according to the [still
   200    proposed][ispec-pr492] OCI image specification conversion document.
   201    openSUSE/umoci#120
   202  - `umoci repack` also now automatically adding `Config.Volumes` from the image
   203    configuration to the set of masked paths.  This matches recently added
   204    [recommendations by the spec][ispec-pr694], but is a backwards-incompatible
   205    change because the new default is that `Config.Volumes` **will** be masked.
   206    If you wish to retain the old semantics, use `--no-mask-volumes` (though make
   207    sure to be aware of the reasoning behind `Config.Volume` masking).
   208    openSUSE/umoci#127
   209  - `umoci` now uses [`SecureJoin`][securejoin] rather than a patched version of
   210    `FollowSymlinkInScope`. The two implementations are roughly equivalent, but
   211    `SecureJoin` has a nicer API and is maintained as a separate project.
   212  - Switched to using `golang.org/x/sys/unix` over `syscall` where possible,
   213    which makes the codebase significantly cleaner. openSUSE/umoci#141
   214  
   215  [cii]: https://bestpractices.coreinfrastructure.org/projects/1084
   216  [rspec-v1.0.0]: https://github.com/opencontainers/runtime-spec/releases/tag/v1.0.0
   217  [ispec-v1.0.0]: https://github.com/opencontainers/image-spec/releases/tag/v1.0.0
   218  [ispec-pr492]: https://github.com/opencontainers/image-spec/pull/492
   219  [ispec-pr694]: https://github.com/opencontainers/image-spec/pull/694
   220  [securejoin]: https://github.com/cyphar/filepath-securejoin
   221  
   222  ## [0.2.1] - 2017-04-12
   223  ### Added
   224  - `hack/release.sh` automates the process of generating all of the published
   225    artefacts for releases. The new script also generates signed source code
   226    archives. openSUSE/umoci#116
   227  
   228  ### Changed
   229  - `umoci` now outputs configurations that are compliant with [`v1.0.0-rc5` of
   230    the OCI runtime-spec][rspec-v1.0.0-rc5]. This means that now you can use runc
   231    v1.0.0-rc3 with `umoci` (and rootless containers should work out of the box
   232    if you use a development build of runc). openSUSE/umoci#114
   233  - `umoci unpack` no longer adds a dummy linux.seccomp entry, and instead just
   234    sets it to null. openSUSE/umoci#114
   235  
   236  [rspec-v1.0.0-rc5]: https://github.com/opencontainers/runtime-spec/releases/tag/v1.0.0-rc5
   237  
   238  ## [0.2.0] - 2017-04-11
   239  ### Added
   240  - `umoci` now has some automated scripts for generated RPMs that are used in
   241    openSUSE to automatically submit packages to OBS. openSUSE/umoci#101
   242  - `--clear=config.{cmd,entrypoint}` is now supported. While this interface is a
   243    bit weird (`cmd` and `entrypoint` aren't treated atomically) this makes the
   244    UX more consistent while we come up with a better `cmd` and `entrypoint` UX.
   245    openSUSE/umoci#107
   246  - New subcommand: `umoci raw runtime-config`. It generates the runtime-spec
   247    config.json for a particular image without also unpacking the root
   248    filesystem, allowing for users of `umoci` that are regularly parsing
   249    `config.json` without caring about the root filesystem to be more efficient.
   250    However, a downside of this approach is that some image-spec fields
   251    (`Config.User`) require a root filesystem in order to make sense, which is
   252    why this command is hidden under the `umoci-raw(1)` subcommand (to make sure
   253    only users that understand what they're doing use it). openSUSE/umoci#110
   254  
   255  ### Changed
   256  - `umoci`'s `oci/cas` and `oci/config` libraries have been massively refactored
   257    and rewritten, to allow for third-parties to use the OCI libraries. The plan
   258    is for these to eventually become part of an OCI project. openSUSE/umoci#90
   259  - The `oci/cas` interface has been modifed to switch from `*ispec.Descriptor`
   260    to `ispec.Descriptor`. This is a breaking, but fairly insignificant, change.
   261    openSUSE/umoci#89
   262  
   263  ### Fixed
   264  - `umoci` now uses an updated version of `go-mtree`, which has a complete
   265    rewrite of `Vis` and `Unvis`. The rewrite ensures that unicode handling is
   266    handled in a far more consistent and sane way. openSUSE/umoci#88
   267  - `umoci` used to set `process.user.additionalGids` to the "normal value" when
   268    unpacking an image in rootless mode, causing issues when trying to actually
   269    run said bundle with runC. openSUSE/umoci#109
   270  
   271  ## [0.1.0] - 2017-02-11
   272  ### Added
   273  - `CHANGELOG.md` has now been added. openSUSE/umoci#76
   274  
   275  ### Changed
   276  - `umoci` now supports `v1.0.0-rc4` images, which has made fairly minimal
   277    changes to the schema (mainly related to `mediaType`s). While this change
   278    **is** backwards compatible (several fields were removed from the schema, but
   279    the specification allows for "additional fields"), tools using older versions
   280    of the specification may fail to operate on newer OCI images. There was no UX
   281    change associated with this update.
   282  
   283  ### Fixed
   284  - `umoci tag` would fail to clobber existing tags, which was in contrast to how
   285    the rest of the tag clobbering commands operated. This has been fixed and is
   286    now consistent with the other commands. openSUSE/umoci#78
   287  - `umoci repack` now can correctly handle unicode-encoded filenames, allowing
   288    the creation of containers that have oddly named files. This required fixes
   289    to go-mtree (where the issue was). openSUSE/umoci#80
   290  
   291  ## [0.0.0] - 2017-02-07
   292  ### Added
   293  - Unit tests are massively expanded, as well as the integration tests.
   294    openSUSE/umoci#68 openSUSE/umoci#69
   295  - Full coverage profiles (unit+integration) are generated to get all
   296    information about how much code is tested. openSUSE/umoci#68
   297    openSUSE/umoci#69
   298  
   299  ### Fixed
   300  - Static compilation now works properly. openSUSE/umoci#64
   301  - 32-bit architecture builds are fixed. openSUSE/umoci#70
   302  
   303  ### Changed
   304  - Unit tests can now be run inside `%check` of an `rpmbuild` script, allowing
   305    for proper testing. openSUSE/umoci#65.
   306  - The logging output has been cleaned up to be much nicer for end-users to
   307    read. openSUSE/umoci#73
   308  - Project has been moved to an openSUSE project. openSUSE/umoci#75
   309  
   310  ## [0.0.0-rc3] - 2016-12-19
   311  ### Added
   312  - `unpack`, `repack`: `xattr` support which also handles `security.selinux.*`
   313    difficulties. openSUSE/umoci#49 openSUSE/umoci#52
   314  - `config`, `unpack`: Ensure that environment variables are not duplicated in
   315    the extracted or stored configurations. openSUSE/umoci#30
   316  - Add support for read-only CAS operations for read-only filesystems.
   317    openSUSE/umoci#47
   318  - Add some helpful output about `--rootless` if `umoci` fails with `EPERM`.
   319  - Enable stack traces with errors if the `--debug` flag was given to `umoci`.
   320    This requires a patch to `pkg/errors`.
   321  
   322  ### Changed
   323  - `gc`: Garbage collection now also garbage collects temporary directories.
   324    openSUSE/umoci#17
   325  - Clean-ups to vendoring of `go-mtree` so that it's much more
   326    upstream-friendly.
   327  
   328  ## [0.0.0-rc2] - 2016-12-12
   329  ### Added
   330  - `unpack`, `repack`: Support for rootless unpacking and repacking.
   331    openSUSE/umoci#26
   332  - `unpack`, `repack`: UID and GID mapping when unpacking and repacking.
   333    openSUSE/umoci#26
   334  - `tag`, `rm`, `ls`: Tag modification commands such as `umoci tag`, `umoci rm`
   335    and `umoci ls`. openSUSE/umoci#6 openSUSE/umoci#27
   336  - `stat`: Output information about an image. Currently only shows the history
   337    information. Only the **JSON** output is stable. openSUSE/umoci#38
   338  - `init`, `new`: New commands have been created to allow for image creation
   339    from scratch. openSUSE/umoci#5 openSUSE/umoci#42
   340  - `gc`: Garbage collection of images. openSUSE/umoci#6
   341  - Full integration and unit testing, with OCI validation to ensure that we
   342    always create valid images. openSUSE/umoci#12
   343  
   344  ### Changed
   345  - `unpack`, `repack`: Create history entries automatically (with options to
   346    modify the entries). openSUSE/umoci#36
   347  - `unpack`: Store information about its source to ensure consistency when doing
   348    a `repack`. openSUSE/umoci#14
   349  - The `--image` and `--from` arguments have been combined into a single
   350    `<path>[:<tag>]` argument for `--image`. openSUSE/umoci#39
   351  - `unpack`: Configuration annotations are now extracted, though there are still
   352    some discussions happening upstream about the correct way of doing this.
   353    openSUSE/umoci#43
   354  
   355  ### Fixed
   356  - `repack`: Errors encountered during generation of delta layers are now
   357    correctly propagated. openSUSE/umoci#33
   358  - `unpack`: Hardlinks are now extracted as real hardlinks. openSUSE/umoci#25
   359  
   360  ### Security
   361  - `unpack`, `repack`: Symlinks are now correctly resolved inside the unpacked
   362    rootfs. openSUSE/umoci#27
   363  
   364  ## 0.0.0-rc1 - 2016-11-10
   365  ### Added
   366  - Proof of concept with major functionality implemented.
   367    + `unpack`
   368    + `repack`
   369    + `config`
   370  
   371  [Unreleased]: https://github.com/openSUSE/umoci/compare/v0.4.2...HEAD
   372  [0.4.2]: https://github.com/openSUSE/umoci/compare/v0.4.1...v0.4.2
   373  [0.4.1]: https://github.com/openSUSE/umoci/compare/v0.4.0...v0.4.1
   374  [0.4.0]: https://github.com/openSUSE/umoci/compare/v0.3.1...v0.4.0
   375  [0.3.1]: https://github.com/openSUSE/umoci/compare/v0.3.0...v0.3.1
   376  [0.3.0]: https://github.com/openSUSE/umoci/compare/v0.2.1...v0.3.0
   377  [0.2.1]: https://github.com/openSUSE/umoci/compare/v0.2.0...v0.2.1
   378  [0.2.0]: https://github.com/openSUSE/umoci/compare/v0.1.0...v0.2.0
   379  [0.1.0]: https://github.com/openSUSE/umoci/compare/v0.0.0...v0.1.0
   380  [0.0.0]: https://github.com/openSUSE/umoci/compare/v0.0.0-rc3...v0.0.0
   381  [0.0.0-rc3]: https://github.com/openSUSE/umoci/compare/v0.0.0-rc2...v0.0.0-rc3
   382  [0.0.0-rc2]: https://github.com/openSUSE/umoci/compare/v0.0.0-rc1...v0.0.0-rc2