Commit Graph

271 Commits

Author SHA1 Message Date
Giuseppe Scrivano 4d0eb18796
overlay: always honor mountProgram
if a mountProgram is specified, use it also in rootfull mode.

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

[NO NEW TESTS NEEDED]

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-01-27 12:14:42 +01:00
Giuseppe Scrivano 5a25fc6f83
overlay: move mount program invocation to separate function
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-01-27 11:01:55 +01:00
Giuseppe Scrivano a0d3ce33eb
overlay: move mount program lookup to separate function
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-01-27 11:00:55 +01:00
OpenShift Merge Robot 7fc46fca02
Merge pull request #3713 from abergmeier/systemflag
Allow processing of SystemContext from FlagSet
2022-01-26 18:36:15 +01: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
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
Daniel J Walsh 3b16a70308
Merge branch 'main' into systemflag 2022-01-21 13:25:31 -05:00
Aditya R 316e34d268
mount: add support for custom upper and workdir with overlay mounts
Allow users to specify non-volatile `upper` and `workdir` with overlay
mounts.

Usage

```console
buildah from alpine
buildah run -v /something/lower:/test:z,O,upperdir=/somewhere/upperdir,workdir=/somwhere/workdir alpine-working-container cat /test/hello
```

Signed-off-by: Aditya R <arajan@redhat.com>
2022-01-20 21:35:34 +05:30
Aditya Rajan db6943a170
overlay: add MountWithOptions to API which extends support for advanced overlay
Expose `MountWithOptions` for overlay which allows users to pass more
verbose configuration for overlay mounts.

For instance `upperdir, workerdir` and in future `volatile`.

Signed-off-by: Aditya R <arajan@redhat.com>
2022-01-20 14:54:02 +05:30
Andreas Bergmeier ea0506a494 Allow processing of SystemContext from FlagSet
In situations where you don't want/need Cobra climbing behavior nor
Cobra at all using FlagSet is the easier sell.

Signed-off-by: Andreas Bergmeier <abergmeier@gmx.net>
2022-01-18 22:48:37 +01:00
Kir Kolyshkin b03327d2a4 all: fix gosimple warning S1039
AKA "unnecessary use of fmt.Sprintf (gosimple)"

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2022-01-18 12:56:34 -08:00
Andreas Bergmeier a9351b260a Allow processing of id options from FlagSet
In situations where you don't want/need Cobra climbing behavior nor
Cobra at all using FlagSet is the easier sell.

Signed-off-by: Andreas Bergmeier <abergmeier@gmx.net>
2022-01-12 20:14:46 +01:00
Andreas Bergmeier ba3bd6ccec Allow processing of network options from FlagSet
In situations where you don't want/need Cobra climbing behavior nor
Cobra at all using FlagSet is the easier sell.

Signed-off-by: Andreas Bergmeier <abergmeier@gmx.net>
2022-01-11 21:29:28 +01:00
OpenShift Merge Robot 50498dfaa0
Merge pull request #3692 from abergmeier/patch-1
Allow processing of common options via FlagSet
2022-01-11 15:14:09 +01:00
Andreas Bergmeier 2a32f0bacd Allow processing of common options from FlagSet
In situations where you don't want/need Cobra climbing behavior nor
Cobra at all using FlagSet is the easier sell.

Signed-off-by: Andreas Bergmeier <abergmeier@gmx.net>
2022-01-10 21:47:07 +01: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
Aditya Rajan 93474047a2
parse: allow parsing anomaly non-human value for memory control group
Memory control group accepts an anomaly value of `-1` for setting `swap` to unlimited.
Buildah must accepts this value if specified.

Reference: https://github.com/opencontainers/runtime-spec/blob/main/config-linux.md#memory

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-12-16 17:29:08 +05:30
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
Daniel J Walsh 05d5d22dc6
Grab all of the containers.conf settings for namespaces.
Buildah is mainly building with Host Namespaces, this changes most
namespaces to be private matching Podman and using containers.conf

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-11-30 10:24:00 -05:00
Nalin Dahyabhai 785b3bf30a image: set MediaType in OCI manifests
In image-spec 1.0.2, the MediaType field is now available in OCI
manifests, so set it.

Update the imgtype helper to output the MediaType field as-is from OCI
image manifests instead of just always supplying the expected value.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-11-29 20:04:09 -05:00
Aditya Rajan b74d71d574
ssh-agent: Increase timeout before we explicitly close connection
There are cases where remote will close connection by itself with a message
make sure we give connection enough time instead of closing explictly
early.

Future improvement: Relay output and perform close instead of relying on  `ServeAgent` to flush
buffer by closing connection.

[NO NEW TESTS NEEDED]

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-11-17 15:05:37 +05:30
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
OpenShift Merge Robot ecd74746cc
Merge pull request #3598 from ashley-cui/envs
Add support for env var secret sources
2021-10-31 09:58:44 +00:00
Aditya Rajan 8ba02cde81
networkpolicy: Should be enabled instead of default when explictly set
NetworkPolicy should be set as NetworkEnabled when expliclty specified using
`--network` instead of silently marking it as NetworkDefault.

NetworkDefault is equivalent to NetworkEnabled but we can use
NetworkEnabled to verify if user explicitly used `--network` and prevent
override from builder configs.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-10-27 14:49:56 +05:30
Ashley Cui 326edb312e Add support for env var secret sources
Run secrets can now be created from an environment variable. The
environment variable is read and is briefly stored as a file on /dev/shm
when it's being used, and the file is removed after the RUN command is
finished.

Fixes: #3524

Signed-off-by: Ashley Cui <acui@redhat.com>
2021-10-26 13:18:00 -04:00
chenk008 03186a3307 Support overlayfs path contains colon
In linux, directory can contains colon.
Add support to mount path contains colon.

buildah run --volume /root/a\\🅱️/root/test:O

Signed-off-by: chenk008 <kongchen28@gmail.com>
2021-10-20 14:40:38 +08:00
Daniel J Walsh a8b15f8d45
Report ignorefile location when no content added
Users have accidently had a .containerignore or .dockerignore
file in their context directly which blocked all content.
Currently we report that no globs matched, but do not
identify where the globs came from.

This change is an attempt to add this data to the error.
Example: https://github.com/containers/buildah/issues/3318

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-10-15 05:14:07 -04:00
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
Aditya Rajan 70cfc09f7b
mount: add tmpcopyup to tmpfs mount option
Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-10-08 17:25:40 +05:30
Aditya Rajan f0d3140e5a
build: Add support for buildkit like --mount=type=bind
Following commit adds support for using buildkit like
`--mount=type=bind` with `RUN` statements. Mounts created by `--mount`
are transient in nature and only scoped to current RUN statements.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-10-06 13:45:53 +05:30
Nalin Dahyabhai 100d5b12eb buildah build: add --all-platforms
Add a --all-platforms that instructs the builder to build for the
intersection of all platforms for which the build's base images are
available.  Returns an error if any of them aren't references to
manifest lists.  We've learned that we can't really trust architecture
and OS information stored in image config blobs, so we don't try to
salvage that case.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-09-29 15:43:46 -04:00
Nalin Dahyabhai 9d545aac8c Makefile: check for `-race` using `-mod=vendor`
When checking if `go test` supports `-race` on the current platform, use
`-mod=vendor` if it's available, so that the compiler won't try to pull
down our dependencies, and run it against a package that has fewer
dependencies.

Run `go tool dist list` once, and filter its results to derive the
cross-compile target lists, rather than running it three times.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-09-23 14:36:02 -04:00
Daniel J Walsh 4dc36e85b4
Add support for rootless overlay mounts
This patch sets the userxattr field when run in rootless mode.

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

Patch came from @flouthoc  Aditya Rajan <arajan@redhat.com>

[NO TESTS NEEDED] Since this can not be tested in CI/CD system yet.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-09-09 13:27:46 -04:00
Aditya Rajan 5a24cd02b7 build: mirror --authfile to filesystem if pointing to FD instead of file
Following PR makes sure that buildah mirrors --authfile to a temporary
file in filesystem if arg is pointing to an FD instead of actual file
as FD can be only consumed once.

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

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-09-07 14:51:07 +05:30
Kirill Shirinkin 2d822034f8 Rename bud to build, while keeping an alias for to bud.
Signed-off-by: Kirill Shirinkin <kirill@hey.com>
2021-08-25 17:56:58 +02:00
Nalin Dahyabhai 1ec4983d50 Replace golang.org/x/crypto/ssh/terminal with golang.org/x/term
The golang.org/x/crypto/ssh/terminal package has been deprecated and
replaced upstream by golang.org/x/term, so switch to that.  It's a
simple 1:1 replacement.

[NO NEW TESTS NEEDED]

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-08-24 15:35:12 -04:00
Daniel J Walsh 9faf946354
Move DiscoverContainerfile to pkg/util directory
Then podman can use it

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-08-20 05:36:47 -04:00
Nalin Dahyabhai 32c68951a4 imagebuildah: handle --manifest directly
When we're told to add built images to a manifest list, manipulate the
list ourselves, so that if we're creating a list, we won't have a
partially-populated list if some of the builds fail.

This also lets us include all of the platform information (including
variant info, which we can't sniff out after the fact) that we were
given when we started building the images.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-08-17 11:05:28 -04:00
flouthoc e62df2b67a Adds GenerateStructure helper function to support rootfs-overlay.
Following function generates a permanent overlayfs struct as compared to tempdir.

[NO NEW TESTS NEEDED]

Signed-off-by: flouthoc <flouthoc.git@gmail.com>
2021-08-12 00:48:36 +05:30
Daniel J Walsh 6064a95baa
Run codespell to fix spelling
[NO TESTS NEEDED]

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-08-11 10:15:44 -04:00
openshift-ci[bot] 88f55c8f15
Merge pull request #3409 from ashley-cui/sshagent
Implement SSH RUN mount
2021-08-06 22:35:40 +00:00
Ashley Cui 3a5635f90b Implement SSH RUN mount
Allow ssh socket from host or certain ssh keys to be exposed to a
certain RUN instruction, but not any other instructions, as well as not
showing up in the final image.
This is done by spawining a new agent from buildah and mounting
the listening socket inside the run. SSH_AUTH_SOCK inside the container
will be set to the socket mountpoint. The defualt mountpoint is
/run/buildkit/ssh_agent.{i}

Signed-off-by: Ashley Cui <acui@redhat.com>
2021-08-06 09:00:06 -04:00
Nalin Dahyabhai ae08e01e49 bud: teach --platform to take a list
Add a pkg/parse.PlatformsFromOptions() which understands a "variant"
value as an optional third value in an OS/ARCH[/VARIANT] argument value,
which accepts a comma-separated list of them, and which returns a list
of platforms.

Teach "from" and "pull" about the --platform option and add integration
tests for them, warning if --platform was given multiple values.

Add a define.BuildOptions.JobSemaphore which an imagebuildah executor
will use in preference to one that it might allocate for itself.

In main(), allocate a JobSemaphore if the number of jobs is not 0 (which
we treat as "unlimited", and continue to allow executors to do).

In addManifest(), take a lock on the manifest list's image ID so that we
don't overwrite changes that another thread might be making while we're
attempting to make changes to it.  In main(), create an empty list if
the list doesn't already exist before we start down this path, so that
we don't get two threads trying to create that manifest list at the same
time later on.  Two processes could still try to create the same list
twice, but it's an incremental improvement.

Finally, if we've been given multiple platforms to build for, run their
builds concurrently and gather up their results.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-08-04 15:23:10 -04:00
OpenShift Merge Robot ec35bc428a
Merge pull request #3101 from vrothberg/source
buildah source - create and manage source images
2021-07-15 15:38:10 -04:00
Valentin Rothberg 8696bfc7ad buildah source - create and manage source images
Add new `buildah source {create,add,push,pull}` commands.  All commands
are marked as experimental.  None of it is meant to be officially
supported at the time of writing.  All code resides in `internal/source`
and is hence not visible to external consumers of Buildah; just to be
on the safe side.

A source container or source image is an OCI artifact, that is an OCI
image with custom config (media type).  There is a longer history behind
source images which are intended to ship the source artifacts of an
ordinary "executable" container image.  Until now, source images at
Red Hat are built with github.com/containers/BuildSourceImage.  We had a
growing desire (and always the long-term plan) to eventually replace
BuildSurceImage with something else, in this case Buildah.

This commit adds the initial base functionality along with tests to make
sure we're not regressing.  The new commands do the following:

* `create` - creates an empty and initialized source image
* `add` - tar up a local path and add it as a layer to the souce image
* `push/pull` - intentionally separate commands from `buildah push/pull`
                to allow for an easier usage and prevent the
                implementations from undesired (future) interference

Further note: also vendor in c/image@master which ships a required fix.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2021-07-13 13:48:48 +02:00
Daniel J Walsh b5c130e7db
Reuse code from containers/common/pkg/parse
At some point code from buildah/pkg/parse we copied into
containers/common/pkg/parse.  Buildah should use the new code
now, so that we only have to make changes in one place.

[NO TESTS NEEDED] Since there is no new code added.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-07-12 14:58:58 -04:00
Miloslav Trmač b4f407e631 Don't use alltransports.ParseImageName with known transports
Call the per-transport API directly, which is marginally more
efficient.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
2021-06-17 20:02:38 +02:00
Dan Čermák a6b3b6f672
Add rusage-logfile flag to optionally send rusage to a file
Currently the rusage is reported to stdout and rather cumbersome to parse. The
new flag rusage-logfile can be used to specify a file to which the log will be
written instead.

Signed-off-by: Dan Čermák <dcermak@suse.com>
2021-06-02 08:07:37 +02:00