{"id":13509491,"url":"https://github.com/opencontainers/umoci","last_synced_at":"2025-04-29T18:59:45.947Z","repository":{"id":37472160,"uuid":"72283469","full_name":"opencontainers/umoci","owner":"opencontainers","description":"umoci modifies Open Container images","archived":false,"fork":false,"pushed_at":"2025-04-21T05:44:33.000Z","size":10623,"stargazers_count":790,"open_issues_count":66,"forks_count":101,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-29T18:59:40.197Z","etag":null,"topics":["container-image","containers","docker-image","go","oci","oci-image","rootless-containers"],"latest_commit_sha":null,"homepage":"https://umo.ci","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opencontainers.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-29T12:27:34.000Z","updated_at":"2025-04-28T21:41:02.000Z","dependencies_parsed_at":"2023-12-12T01:29:53.016Z","dependency_job_id":"0e1af37a-3353-4ff0-8ba5-fe53ba68baa4","html_url":"https://github.com/opencontainers/umoci","commit_stats":{"total_commits":751,"total_committers":31,"mean_commits":"24.225806451612904","dds":0.6151797603195739,"last_synced_commit":"afceb4b039de0d974985db69e07172c8668ce8e8"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencontainers%2Fumoci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencontainers%2Fumoci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencontainers%2Fumoci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opencontainers%2Fumoci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opencontainers","download_url":"https://codeload.github.com/opencontainers/umoci/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251565802,"owners_count":21609979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container-image","containers","docker-image","go","oci","oci-image","rootless-containers"],"created_at":"2024-08-01T02:01:08.544Z","updated_at":"2025-04-29T18:59:45.929Z","avatar_url":"https://github.com/opencontainers.png","language":"Go","readme":"\u003c!--\n  This comment is necessary to get Hugo to parse this page properly. For\n  whatever reason, it thinks files that start with HTML tags are not Markdown\n  documents (even though this is not actually the case). See\n  \u003chttps://github.com/gohugoio/hugo/issues/7296\u003e.\n --\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://umo.ci/\" alt=\"Project Website\"\u003e\n    \u003cimg src=\"https://umo.ci/umoci-black.png\" alt=\"umoci\" height=\"130\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!--\n  This hack is necessary to work around the fact we cannot conditionally hide\n  these images in Hugo (see \u003chttps://github.com/gohugoio/hugo/issues/7398\u003e).\n  Thankfully, GitHub won't render \u003cdiv\u003e tags, so we can abuse that to hide the\n  badges on the umo.ci website while still showing them in the GitHub README.\n --\u003e\n\u003cdiv style=\"display: none\"\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/opencontainers/umoci/releases/latest\" alt=\"Latest Release\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/opencontainers/umoci\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/opencontainers/umoci\" alt=\"Go Documentation\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/godoc-unstable-red?logo=go\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opencontainers/umoci/blob/master/COPYING\" alt=\"License: Apache-2.0\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/opencontainers/umoci\"/\u003e\u003c/a\u003e\n\n  \u003cbr/\u003e\n\n  \u003ca href=\"https://github.com/opencontainers/umoci/actions/workflows/ci.yml\" alt=\"Build Status\"\u003e\n    \u003cimg src=\"https://github.com/opencontainers/umoci/actions/workflows/ci.yml/badge.svg\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/opencontainers/umoci\" alt=\"Code Coverage\"\u003e\n    \u003cimg src=\"https://img.shields.io/codecov/c/gh/opencontainers/umoci?logo=codecov\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://app.netlify.com/sites/umoci/deploys\" alt=\"Netlify Status\"\u003e\n    \u003cimg src=\"https://img.shields.io/netlify/78e5d3da-f8b5-4a8e-8c7b-9e1effb23f2f?logo=netlify\"/\u003e\u003c/a\u003e\n\n  \u003cbr/\u003e\n\n  \u003ca href=\"https://bestpractices.coreinfrastructure.org/projects/1084\" alt=\"CII Best Practices\"\u003e\n    \u003cimg src=\"https://bestpractices.coreinfrastructure.org/projects/1084/badge\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/opencontainers/umoci\" alt=\"Go Report Card\"\u003e\n    \u003cimg src=\"https://goreportcard.com/badge/github.com/opencontainers/umoci\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://observatory.mozilla.org/analyze/umo.ci\" alt=\"Mozilla Observatory Grade\"\u003e\n    \u003cimg src=\"https://img.shields.io/mozilla-observatory/grade-score/umo.ci?label=umo.ci\u0026logo=mozilla\"/\u003e\u003c/a\u003e\n\n  \u003cbr/\u003e\n\n  \u003ca href=\"https://github.com/opencontainers/umoci/releases\" alt=\"Release Downloads\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/opencontainers/umoci/total\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://zenodo.org/badge/latestdoi/72283469\" alt=\"DOI Badge\"\u003e\n    \u003cimg src=\"https://zenodo.org/badge/72283469.svg\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://matrix.to/#/#opencontainers:matrix.org\" alt=\"Matrix Room\"\u003e\n    \u003cimg src=\"https://img.shields.io/matrix/opencontainers:matrix.org?logo=matrix\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003chr/\u003e\n\u003c/div\u003e\n\n**u**moci **m**odifies **O**pen **C**ontainer **i**mages.\n\numoci (pronounced [/u\u0026#720;mo\u0026#712;\u0026#680;i/][umoci-ipa] or approximately\n\"oo-mo-tchee\") is a reference implementation of the [OCI image\nspecification][oci-image-spec] and provides users with the ability to create,\nmanipulate, and otherwise interact with container images. It is designed to be\nas small and unopinonated as possible, so as to act as a foundation for larger\nsystems to be built on top of. The primary method of using umoci is as a\ncommand-line tool:\n\n```ShellSession\n  Extract image \"leap\" from image directory \"opensuse\" and place it\n  inside an OCI runtime-spec bundle at the path \"bundle\".\n% umoci unpack --image opensuse:leap bundle\n\n  Make some changes to the root filesystem (\"bundle/rootfs\").\n% runc run -b bundle ctr\nctr-sh$ zypper install -y foobarbaz\nctr-sh$ exit\n% echo foo \u003e bundle/rootfs/README\n\n  Create a new image (called \"new-leap\") in the image directory \"opensuse\",\n  based on \"leap\" which contains the changes made to \"bundle/rootfs\".\n% umoci repack --image opensuse:new-leap bundle\n\n  Modify the configuration of the \"new-leap\" image to specify a new author.\n% umoci config --image opensuse:new-leap \\\n\u003e              --author=\"Aleksa Sarai \u003ccyphar@cyphar.com\u003e\" \\\n\u003e              --config.workingdir=\"/var/www\"\n\n  Garbage-collect any unreferenced blobs in the image directory \"opensuse\".\n% umoci gc --layout opensuse\n```\n\nSee [the quick start guide][quickstart] for more accessible documentation about\nhow to use umoci. Notable users of umoci include:\n\n * [KIWI][kiwi], which uses umoci to support building both [base and derived\n   container images][kiwi-container] which are then converted to Docker images.\n * The [Open Build Service][obs], which uses umoci (through [KIWI][kiwi]) to\n   support building and publishing container images from its built-in container\n   registry. The openSUSE project has been using this method of building\n   container images in production since 2016.\n * [Stacker][stacker], which uses umoci as its core building primitive, and is\n   used by Cisco to build container images for some of their appliances since\n   2018.\n * [LXC][lxc] provides support for OCI container images through an [OCI\n   template][lxc-oci], which is implemented as a shell script that wraps umoci.\n   The fact that a container runtime with a vastly different model to OCI\n   container runtimes can make use of umoci is further evidence of its\n   unopinionated design.\n * [Incus][incus] provides support for OCI container images using umoci as\n   well.\n\nIf you wish to provide feedback or contribute, read the [`CONTRIBUTING.md`][contributing]\nfor this project to refresh your knowledge about how to submit good bug reports\nand patches. Information about how to privately submit security disclosures is\nalso provided.\n\n[quickstart]: https://umo.ci/quick-start/\n[umoci-ipa]: http://ipa-reader.xyz/?text=u%CB%90mo%CB%88%CA%A8i\u0026voice=Amy\n[oci-image-spec]: https://github.com/opencontainers/image-spec\n[kiwi]: https://osinside.github.io/kiwi/\n[kiwi-container]: https://osinside.github.io/kiwi/building/build_docker_container.html\n[obs]: https://openbuildservice.org/\n[stacker]: https://github.com/project-stacker/stacker\n[lxc]: https://linuxcontainers.org/\n[lxc-oci]: https://github.com/lxc/lxc/blob/lxc-4.0.2/templates/lxc-oci.in\n[incus]: https://linuxcontainers.org/incus\n[contributing]: /CONTRIBUTING.md\n\n### Install ###\n\nPre-built binaries can be downloaded from [umoci's releases page][releases]. As\numoci's builds are reproducible, a cryptographic checksum file is included in\nthe release assets. All of the assets are also signed with a [release\nkey][umoci-keyring], whose fingerprint is:\n\n```text\npub   rsa4096 2016-06-21 [SC] [expires: 2031-06-18]\n      5F36C6C61B5460124A75F5A69E18AA267DDB8DB4\nuid           [ultimate] Aleksa Sarai \u003casarai@suse.com\u003e\nuid           [ultimate] Aleksa Sarai \u003casarai@suse.de\u003e\nsub   rsa4096 2016-06-21 [E] [expires: 2031-06-18]\n```\n\numoci is also available from several distributions' repositories:\n\n* [openSUSE](https://software.opensuse.org/package/umoci)\n* [Gentoo](https://packages.gentoo.org/packages/app-emulation/umoci)\n* [Arch Linux (AUR)](https://aur.archlinux.org/packages/umoci/)\n\nTo build umoci from the [source code][source], a simple `make` should work on\nmost machines, as should `make install`.\n\n[releases]: https://github.com/opencontainers/umoci/releases\n[umoci-keyring]: /umoci.keyring\n[source]: https://github.com/opencontainers/umoci\n[go]: https://golang.org/\n\n### Usage ###\n\numoci has a subcommand-based command-line. For more detailed information, see\nthe generated man pages (which you can build with `make docs`). You can also\nread through our [quick start guide][quickstart].\n\n\u003c!-- TODO: Put the man pages on the website... --\u003e\n\n```text\n% umoci --help\nNAME:\n   umoci - umoci modifies Open Container images\n\nUSAGE:\n   umoci [global options] command [command options] [arguments...]\n\nVERSION:\n   0.4.6\n\nAUTHOR:\n   Aleksa Sarai \u003casarai@suse.com\u003e\n\nCOMMANDS:\n   raw      advanced internal image tooling\n   help, h  Shows a list of commands or help for one command\n\n   image:\n     config      modifies the image configuration of an OCI image\n     unpack      unpacks a reference into an OCI runtime bundle\n     repack      repacks an OCI runtime bundle into a reference\n     new         creates a blank tagged OCI image\n     tag         creates a new tag in an OCI image\n     remove, rm  removes a tag from an OCI image\n     stat        displays status information of an image manifest\n     insert      insert content into an OCI image\n\n   layout:\n     gc        garbage-collects an OCI image's blobs\n     init      create a new OCI layout\n     list, ls  lists the set of tags in an OCI layout\n\nGLOBAL OPTIONS:\n   --verbose      alias for --log=info\n   --log value    set the log level (debug, info, [warn], error, fatal) (default: \"warn\")\n   --help, -h     show help\n   --version, -v  print the version\n```\n\n[quickstart]: https://umo.ci/quick-start/\n\n### Releases and Stability ###\n\nWe regularly publish [new releases][releases], with each release being given a\nunique identifying version number (as governed by [Semantic Versioning\n(SemVer)][semver]). Information about previous releases including the list of\nnew features, bug fixes and resolved security issues is available in the\n[change log][changelog].\n\nNote that while umoci is currently usable as a Go library (and we do have\nseveral users of the Go APIs), the API is explicitly considered **unstable**\nuntil umoci `1.0` is released. However, the umoci CLI API is considered to be\nstable despite umoci not being a `1.0` project.\n\n[releases]: https://github.com/opencontainers/umoci/releases\n[semver]: http://semver.org/\n[changelog]: /CHANGELOG.md\n\n### Governance ###\n\numoci is an Open Container Initative project, and is thus bound by the [OCI\nCode of Conduct][oci-coc] and the [OCI Charter][oci-charter]. In addition, the\numoci project has its own specific [governance rules][governance] which\ndetermine how changes are accepted into the project, how maintainers are added\nor removed, how releases are proposed and released, and how the governance\nrules are changed. In the case of any conflict which cannot be resolved by this\nproject's governance rules, the [OCI Technical Oversight Board][oci-tob] may\nstep in to help resolve the issue.\n\n[oci-coc]: https://github.com/opencontainers/.github/blob/master/CODE_OF_CONDUCT.md\n[oci-charter]: https://github.com/opencontainers/tob/blob/master/CHARTER.md\n\u003c!-- TODO: Add proper governance documents. --\u003e\n[governance]: /GOVERNANCE.md\n[oci-tob]: https://opencontainers.org/about/tob/\n\n### History ###\n\numoci was originally developed in 2016 by Aleksa Sarai as part of the [openSUSE\nproject][opensuse], and was donated to the Open Container Initiative as a\nreference implementation of the [OCI image specification][oci-image-spec] in\nmid-2020.\n\n[opensuse]: https://www.opensuse.org/\n[oci-image-spec]: https://github.com/opencontainers/image-spec\n\n### License ###\n\numoci is licensed under the terms of the Apache 2.0 license.\n\n```text\numoci: Umoci Modifies Open Containers' Images\nCopyright (C) 2016-2025 SUSE LLC\nCopyright (C) 2018, 2020 Cisco Systems\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n### Citation ###\n\nIf you have used umoci in your research, please cite it like you would any\nother useful software. Here is a handy BibTex citation.\n\n```\n@misc{umoci,\n\ttitle = {umoci - Standalone Tool For Manipulating Container Images},\n\tauthor = {Aleksa Sarai et al.},\n\tyear = {2016},\n\turl = {https://umo.ci/},\n\tdoi = {http://dx.doi.org/10.5281/zenodo.1188474},\n}\n```\n\nThank you.\n","funding_links":[],"categories":["Go","go","Image"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencontainers%2Fumoci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencontainers%2Fumoci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencontainers%2Fumoci/lists"}