github.com/dctrud/umoci@v0.4.3-0.20191016193643-05a1d37de015/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