Commit Graph

445 Commits

Author SHA1 Message Date
Nalin Dahyabhai 9637a24425 cmd/buildah: add "manifest create --amend"
When `buildah manifest create` is given the `--amend` flag and a list
with the name that was specified for the to-be-created list already
exists, just reuse the list.

Make the `--insecure` flag, if we see it, conflict with `--tls-verify`,
but have the reverse of the effect that `--tls-verify` does, and teach
the `buildah manifest` `add`, `create`, and `push` subcommands about
it.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-08-16 19:43:41 -04:00
Aditya R 17e6fe01c2 docs: specify git protocol is not supported for github hosted repo
Build from URL does not supports `git://` is source is hosted on Github.
Reason: https://github.blog/2021-09-01-improving-git-protocol-security-github/

[CI:DOCS]
[NO NEW TESTS NEEDED]
[NO TESTS NEEDED]

Closes: https://github.com/containers/buildah/issues/4103

Signed-off-by: Aditya R <arajan@redhat.com>
2022-08-11 13:30:54 +05:30
Aditya R b7f51ea3d7
build: support filtering cache by duration using --cache-ttl
`build` or `bud` now supports a new flag `--cache-ttl` which accepts
duration and allows end users to ignore cache images which are not under
the specified duration.

Following flag is useful for setups/platforms which heavily relies on
`--layer` and buildah caching but want recompute certain `RUN` steps
after specified duration to make sure specific `RUN` steps are always
updated. Example `RUN dnf update` or `RUN dnf install`

Closes: https://github.com/containers/buildah/issues/4160
Somewhat similar to kaniko's: https://github.com/GoogleContainerTools/kaniko#--cache-ttl-duration

Signed-off-by: Aditya R <arajan@redhat.com>
2022-08-05 11:50:15 +05:30
Aditya R b218fdf322
build: support building from commit when using git repo as build context
When using URL to a git repo as build context allow specifying `commit`
to make sure specific `commit` is used as the build context.

Examples

```console
buildah build -t test myrepo.git#abcef123
buildah build -t test myrepo.git#abcef123
buildah build -t test myrepo.git#abcef123:somesubdir
```
Closes: https://github.com/containers/buildah/issues/4148

Signed-off-by: Aditya R <arajan@redhat.com>
2022-08-03 18:50:44 +05:30
Nalin Dahyabhai 5f34c5e2fa Fix a copy/paste error
Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-08-01 14:31:27 -04:00
Aditya R 6f660bde17
build,cache: support pulling/pushing cache layers to/from remote sources
Following commit

* Initiates `cacheKey` or `layerKey` for intermediate images generated
  for layers.
* Allows end users to upload cached layers with `cacheKey` to remote
  sources using `--cache-to`. `--cache-to` is a optional flag to be used
with `buildah build` which publishes cached layers to remote sources.
* Allows end users to use cached layers from `remote` sources with
  `--cache-from`. `--cache-from` is a optional flag to be used with
`buildah build` and it pulls cached layers from remote sources in a step
by step manner only if is a valid cache hit.

Example
* Populate cache source or use cached layers if already present
```bash
buildah build -t test --layers --cache-to registry/myrepo/cache --cache-from registry/myrepo/cache .
```

Future:
* `cacheKey` or `layerKey` model is only being used when working with
  remote sources however local cache lookup can be also optimized if its
is altered to use `cacheKey` model instead of iterating through all the
images in local storage. As discussed here

References:
* Feature is quite similar to `kaniko`'s `--cache-repo`: https://github.com/GoogleContainerTools/kaniko#--cache-repo

Closes: issues#620

Signed-off-by: Aditya R <arajan@redhat.com>
2022-07-26 01:49:13 +05:30
Aditya R eb4ec4a9ea
docs, run: show SELinux label flag for cache and bind mounts
Buildah cache and bind mounts already support setting SELinux label on
the mounted destination lets document that.

See: https://github.com/containers/buildah/blob/main/tests/bud/buildkit-mount/Dockerfilecachewrite

[NO NEW TESTS NEEDED]
[NO TESTS NEEDED]
[CI:DOCS]

Closes: https://github.com/containers/podman/issues/14964

Signed-off-by: Aditya R <arajan@redhat.com>
2022-07-19 15:16:48 +05:30
Valentin Rothberg 48c888a6b3 [CI:DOCS] improve pull-policy documentation
Going through containers/podman/issues/14846 let me improve the
code documentation in containers/common/pull/1085 which is now
copied over to Buildah and will eventually into Podman.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-07-07 16:29:43 +02:00
Aditya R 5686018e79
build: support OCI hooks for ephemeral build containers
Following PR adds support for OCI hooks attached to each of ephemeral
build contains which are created by `RUN` step invoked during `buildah
build` command.

Following PR also adds `--hooks-dir` flag to `buildah build` option
which allows end-users to specify one or more configuration directories
for OCI-hooks.

Note: Following PR migrates `pkg/hooks` from `podman` to `buildah` so
buildah could implement this feature and once merged `podman` can start
using `buildah/pkg/hooks`.

For usage see man-page and example test-case.

See: https://github.com/opencontainers/runtime-spec/blob/main/config.md#posix-platform-hooks

Closes: https://github.com/containers/buildah/issues/4068

Signed-off-by: Aditya R <arajan@redhat.com>
2022-06-28 11:21:28 +05:30
Aditya R 20c5c5c6d8
build, userns: add support for --userns=auto
Buildah now supports `--userns=auto` which can automatically pick an empty range and create an user namespace for the container.

The `--userns=auto` flag, requires that the user name containers and a range of subordinate user ids that the build container is allowed to use be specified in the /etc/subuid and /etc/subgid files.

Example: `containers:2147483647:2147483648`.

Buildah allocates unique ranges of UIDs and GIDs from the containers subordinate user ids. The size of the ranges is based on the number of UIDs required in the image. The number of UIDs and GIDs can be overridden with the size option.

Valid auto options:

    * gidmapping=CONTAINER_GID:HOST_GID:SIZE: to force a GID mapping to be present in the user namespace.

    * size=SIZE: to specify an explicit size for the automatic user namespace. e.g. --userns=auto:size=8192. If size is not specified, auto will estimate a size for the user namespace.

    * uidmapping=CONTAINER_UID:HOST_UID:SIZE: to force a UID mapping to be present in the user namespace.

Signed-off-by: Aditya R <arajan@redhat.com>
2022-06-20 13:08:02 +05:30
Lokesh Mandvekar 7cf6dbd44d
[CI:DOCS] Tutorial 04 - Include Debian/Ubuntu deps
Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>
2022-06-06 14:51:57 -04:00
Aditya R 495add9369
build, multiarch: support splitting build logs for --platform
Support splitting build logs for multi-arch builds ( `--platform` ) by
using `--logfile` and `--logsplit` which splits generated log file in the
convention `${file}_${platform_os}_${platform_arch}`.

Closes: https://github.com/containers/buildah/issues/3960

Signed-off-by: Aditya R <arajan@redhat.com>
2022-06-06 20:23:23 +05:30
Aditya R c61ecc6964
build, commit: allow disabling image history with --omit-history
As per `OCI` `image-spec` setting history is optional so buildah must
support these use-cases via `--omit-history=true` some of the use-cases
are discussed below.

* There are use-cases when image-spec contributes to the image size by
  adding build history to image-spec in certain use-cases this image
history is not required by the end-users but there is no way to remove
it. See: https://github.com/containers/buildah/issues/3513

* Certain build tools don't honor setting build history in image spec
  however buildah does not allow processing images without build history
since setting build history is still optional as per `OCI` image-spec
( https://github.com/opencontainers/image-spec/blob/main/config.md#properties)
so buildah must support such use-cases.

Closes: https://github.com/containers/buildah/issues/4025
Closes: https://github.com/containers/buildah/issues/3513

Signed-off-by: Aditya R <arajan@redhat.com>
2022-06-03 00:40:48 +05:30
Aditya R c2adbade7c
buildkit: supports additionalBuildContext in builds via --build-context
As builds got more complicated, the ability to only access files from one location became quite limiting. With `multi-stage` builds where you can `copy` files from other parts of the Containerfile by adding the `--from` flag and pointing it to the name of another Containerfile stage or a remote image.

The new named build context feature is an extension of this pattern. You can now define additional build contexts when running the build command, give them a name, and then access them inside a Dockerfile the same way you previously did with build stages.

Additional build contexts can be defined with a new `--build-context [name]=[value]` flag. The key component defines the name for your build context and the value can be:

```console

    Local directory – e.g. --build-context project2=../path/to/project2/src
    HTTP URL to a tarball – e.g. --build-context src=https://example.org/releases/src.tar
    Container image – Define with a docker-image:// prefix, e.g. --build-context alpine=docker-image://alpine:3.15, ( also supports docker://, container-image:// )
```

On the Containerfile side, you can reference the build context on all commands that accept the “from” parameter. Here’s how that might look:
```Dockerfile
FROM [name]
COPY --from=[name] ...
RUN --mount=from=[name] …
```

The value of [name] is matched with the following priority order:

* Named build context defined with `--build-context [name]=..`
* Stage defined with `AS [name]` inside Dockerfile
* Remote image `[name]` in a container registry

Added Features

* Pinning images for `FROM` and `COPY`
* Specifying multiple buildcontexts from different projects
  and using them with `--from` in `ADD` and `COPY` directive
* Override a Remote Dependency with a Local One.
* Using additional context from external `Tar`

Signed-off-by: Aditya R <arajan@redhat.com>
2022-05-17 23:43:51 +05:30
Valentin Rothberg 73e0ad7129 buildah source pull/push: show progress bar
Render the progress bar on stdout by default.  Add a --quiet/-q option
to re-silence if desired.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-17 14:00:28 +02:00
OpenShift Merge Robot 6fc2b10ddf
Merge pull request #3994 from rhatdan/cpp
Add --cpp-flag flag to buildah build
2022-05-16 19:23:44 +02:00
Daniel J Walsh c80e6a3119
Add --cpp-flag flag to buildah build
Allow users to pass in CPP flags to the C Preprocessor.

Fixes: https://github.com/containers/buildah/issues/3816

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-05-16 09:26:36 -04:00
Aditya R 784a8c4ce2
build: accept branch and subdirectory when context is git repo
When using `build -t <tag> <some-url-to-git-repo>` buildah does not
accepts syntax `url#branch:subdir` following commit allows end users to
switch context to any subdirectory in the git repo.

Usage
```console
buildah build -t test 'https://github.com/containers/podman.git#main:contrib/hello'
```

Signed-off-by: Aditya R <arajan@redhat.com>
2022-05-13 21:55:30 +05:30
Nalin Dahyabhai fccc78955c Make `buildah build --label foo` create an empty "foo" label again
Restore podman's CLI compatibility with `docker build` by making its
`--label` and `--annotate` options create empty labels and annotations
when they're given a name but no `=` or value.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-05-04 16:03:28 -04:00
Nalin Dahyabhai 08bd38f5f8 help output: get more consistent about option usage text
Make more of our usage information in --help output consistent with
itself, i.e., initial lower case.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-05-03 16:11:26 -04:00
Nalin Dahyabhai 1680e26eb4 Handle OS version and features flags
Teach `buildah build` and `buildah config` about the OS version and
features fields.  We don't tend to use them on Linux, but they're in the
OCI and Docker config structures, so we need to be able to preserve and
manipulate their values, much as we do for variant information.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-05-03 16:11:25 -04:00
Nalin Dahyabhai 041aeff03e buildah build: --annotation and --label should remove values
Have the handling of the `--annotation` and `--label` options for
`buildah build` explicitly remove values when they're not given an "="
before an empty value, instead of setting them to empty values.  The
final result doesn't seem to care about the distinction.

Allow the value of the `io.buildah.version` label to be manually
specified on the `buildah build` command line if someone really wants to
override the value that we would otherwise set by default.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-05-03 16:08:27 -04:00
Nalin Dahyabhai 4be3b7dec9 buildah build: add a --env
Add a `--env` option to `buildah build` that functions similarly to the
`buildah config --env` option, to complement `buildah build`'s
`--unsetenv` option.

Document that `buildah config`'s `--env` function fetches the current
value for a variable when the name is supplied, but no `=` or value
follows it.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-05-03 16:08:18 -04:00
Aditya R d0336f2147
buildkit: add support for custom build output with --output
Allows end-users to export final build content or rootfs to external formats.

By default, a local container image is created from the build result. The --output (or -o) flag allows you to override this behavior, and a specify a custom exporter. For example, custom exporters allow you to export the build artifacts as files on the local filesystem instead of a Container image, which can be useful for generating local binaries, code generation etc.

The value for --output is a CSV-formatted string defining the exporter type and options. Currently, local and tar exporters are supported. The local exporter writes the resulting build files to a directory on the client side. The tar exporter is similar but writes the files as a single tarball (.tar).

```console
buildah build --output type=local,dest=dir .
buildah build --output type=tar,dest=rootfs.tar .
buildah build -o dir .
```
Reference: https://docs.docker.com/engine/reference/commandline/build/#custom-build-outputs

Signed-off-by: Aditya R <arajan@redhat.com>
2022-04-29 21:44:38 +05:30
Doug Rabson 4547ae025c Fix docs build on FreeBSD
The sed implementation has a strict interpretation of posix 'basic'
regular expressions. It would be better to re-implement this using
'extended' regular expressions but for now, just use GNU sed.

Signed-off-by: Doug Rabson <dfr@rabson.org>
2022-04-28 11:01:05 +01:00
Aditya R e81dd7983c
build, commit: allow removing default identity labels
Allow end users to remove default identity labels if they want to.
Since there are instances where images can be reproduced across version
hence users must have option to suppress default labels.

Closes: https://github.com/containers/buildah/issues/3826

Signed-off-by: Aditya R <arajan@redhat.com>
2022-04-04 11:07:01 +05:30
Ed Santiago ae8995568b [CI:DOCS] man pages: sort flags, and keep them that way
Enforce alphabetical ordering of command-line options in
man pages. Not as simple as with podman, because conventions
are different.

Reference: https://github.com/containers/podman/pull/13625

Signed-off-by: Ed Santiago <santiago@redhat.com>
2022-03-24 08:27:06 -06:00
Daniel J Walsh deb9c69efe
Add --no-hosts flag to eliminate use of /etc/hosts within containers
Users want to turn off addition of /etc/hosts file while building
container images, this would allow them to customize the /etc/hosts
file within the image.

Fixes: https://github.com/containers/buildah/issues/3808

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-03-10 08:52:28 -05:00
Morten Linderud 488e8654ea
docs: Remove Containerfile and containeringore
These where moved to buildah but because they are useful for podman and
the other tooling they are moved back into the common project.

Partially reverts a9e66ec72b

Signed-off-by: Morten Linderud <morten@linderud.pw>
2022-02-22 21:14:33 +01:00
Giuseppe Scrivano 5a999cfbd5
buildah: new global option --cgroup-manager
allow to override the cgroup manager with a global option
--cgroup-manager=MANAGER that has the same semantic as Podman.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-02-14 14:39:21 +01:00
Daniel J Walsh 61579f4c83
Merge pull request #3745 from eriksjolund/fix_typos_and_improve_language
[CI:DOCS] Fix typos and improve language
2022-01-26 12:35:20 -05:00
OpenShift Merge Robot bed25d00cc
Merge pull request #3720 from Luap99/networks
buildah build --network add support for custom networks
2022-01-25 19:47:44 -05:00
Daniel J Walsh d92da92e4d
Update docs/buildah-build.1.md
Co-authored-by: Tom Sweeney <tsweeney@redhat.com>
2022-01-25 19:43:32 -05:00
Erik Sjölund 76e9dbf8a6 [CI:DOCS] Fix typos and improve language
Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2022-01-25 21:55:55 +01:00
Paul Holzinger 08d636a28b
buildah bud --network add support for custom networks
The backend logic already supports specifying custom network names. This
only adds the support for the frontend parsing.

Fixes containers/podman#12282

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-01-25 21:02:43 +01:00
tomsweeneyredhat 8c250d495d Make pull commands be consistent
Per @edsantiago 's suggestion, make the pull commands consistent, always
accepting a value.  Currently we have:

--pull
--pull=true
--pull=false
--pull-never
--pull-always

With this changes, we will only have pull with a variety of options,
ala:

--pull
--pull=true
--pull=false
--pull=never
--pull=always

For backward compatibility, the --pull-never and --pull-always
options will remain operational, however they are not documented
and are conisdered deprecated.

Signed-off-by: tomsweeneyredhat <tsweeney@redhat.com>
2022-01-25 12:13:44 -05:00
Nalin Dahyabhai 652a8e1a52 docs/buildah-build.1.md: don't imply that -v isn't just a RUN thing
The current wording doesn't clearly state that volumes specified using
-v are only a factor when executing RUN instructions.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2022-01-24 17:24:43 -05:00
Paul Holzinger d7ccff3edb
Fix default CNI paths
We need to use the default from containers.conf and not hardcode them in
buildah. This fixes an issue with the cni network backend since it would
try to access /etc/cni/net.d/ even as rootless user. This regression was
introduced in commit f9cff07b81.

Also hide the cni flags as we do not expect users to change this. The
recommended way is to change them in containers.conf.

[NO NEW TESTS NEEDED]

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-01-10 15:49:43 +01:00
Aditya Rajan 719b660462
buildkit: add from field to bind and cache mounts so images can be used as source
Following commit adds buildkit like support for `from` field to `--mount=type=bind`
and `--mount=type=cache` so images and stage can be used as mount source.

Usage looks like
```dockerfile
RUN --mount=type=bind,source=.,from=<your-image>,target=/path ls /path
```
and
```dockerfile
RUN --mount=type=cache,from=<your-image>,target=/path ls /path
```

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2022-01-08 16:58:38 +05:30
OpenShift Merge Robot 080d8393f0
Merge pull request #3654 from MaximUltimatum/patch-1
[CI:DOCS] Simple README fix
2021-12-03 15:30:47 +01:00
Daniel J Walsh b480ce832f
Turn on rootless cgroupv2 tests
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-11-30 10:24:01 -05:00
Maximilien McDermott 2c366d1e54 Simple README fix
Signed-off-by: MaximUltimatum <mcder018@live.com>
2021-11-29 09:24:33 -06:00
Nalin Dahyabhai 40317d6237 docs/tutorials: update
Update tutorials to not expect `buildah run` to do anything if it isn't
given a command to run.  In some cases (including when we need to listen
for incoming connections when we might well not be root) this means we
use `podman run` instead.

Try to avoid using the terms container and image as though they're
interchangeable, which just creates confusion.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-11-15 14:35:55 -05:00
Nalin Dahyabhai 8651267bde Clarify that manifest defaults to localhost as the registry name
Clarify that --manifest also prepends localhost if no registry name is
included in the value, and check for duplicate values between tags and
the manifest name, which doesn't end well.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-11-15 13:18:45 -05:00
Daniel J Walsh a5d9f1cb28
Add --unsetenv option to buildah commit and build
This option will allow users to remove environment variables from the
final image.

Fixes: https://github.com/containers/buildah/issues/3512

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-11-09 16:17:21 -05:00
Nalin Dahyabhai 9f9f32cedd config: support the variant field
Add the variant field, along with methods for setting and querying it,
and expose them in the `buildah config` and `buildah inspect` commands.

When setting an initial architecture for a container based on an image
which doesn't contain an architecture, or from "scratch", normalize the
architecture name we've been given, and set both it and the variant
field at the same time.

Provide normalized architecture+variant values in `buildah info`.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-11-05 09:37:00 -04:00
Daniel J Walsh e1dd52ef44
Fix tutorial to specify command on buildah run line
Fixes: https://github.com/containers/buildah/issues/3564

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-11-04 03:59:41 -07:00
Aditya Rajan 5c216525ce
docs: Use guaranteed path for go-md2man
Its not guaranteed that host contains go-md2man so use the one which is
built by buildah.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-11-01 16:29:06 +05:30
Aditya Rajan fc69aa68c2
buildkit: add support for mount=type=cache
Following PR inroduces a new mount type=cache in parity to buildkit
which allows users to share persistant cache between different builds.

Allowing users to cache content generated by bussiness logic or enhance
build performance by caching components across builds.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-10-14 16:07:11 +05:30
Chris Evich 73b9f078b3
[CI:DOCS] Include manifest example usage
This duplicates https://github.com/containers/podman/pull/11889 which is
annoying, but there seems no easy way to avoid it.  The
commands/examples have been 'translated' for Buildah.

Signed-off-by: Chris Evich <cevich@redhat.com>
2021-10-11 16:58:50 -04:00