Commit Graph

106 Commits

Author SHA1 Message Date
OpenShift Merge Robot d6b04349fe
Merge pull request #3593 from rhatdan/group
Rootless containers users should use additional groups
2021-10-21 17:45:42 +00:00
Daniel J Walsh 08b55f91cc
Rootless containers users should use additional groups
Fixes https://github.com/containers/buildah/issues/3592

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-10-20 14:22:42 -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
OpenShift Merge Robot e4a4f2c0d4
Merge pull request #3586 from rhatdan/docs
Add support for host.containers.internal in the /etc/hosts
2021-10-15 01:08:56 +02:00
Daniel J Walsh f8c152694c
Add support for host.containers.internal in the /etc/hosts
Also switch default hostname from truncated ContainerID to Container
name.

It makes more sense that a user would know the name of the container
versus the generated id, so we should use this as a default.

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-10-14 13:21:25 -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
Ashley Cui b9b3184632 Default secret mode to 400
Fixed a bug where buildah bud mounted secrets permissions were incorrect due to a decimal/octal conversion error. buildah bud mounted secrets now have a default permission of 400. Fixes #3557

Signed-off-by: Ashley Cui <acui@redhat.com>
2021-10-12 16:00:23 -04:00
Aditya Rajan e96df7060c
buildkit: Add support for --mount=type=tmpfs
Following PR adds supports for buildkit like `--mount=type=tmpfs` which
allows end users to mount a chunk of volatile memory instead of a persistent storage device.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-10-08 13:29:57 +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
OpenShift Merge Robot bc718ca758
Merge pull request #3540 from rhatdan/log-level
Plumb the remote logger throughut Buildah
2021-09-30 03:52:31 -04:00
OpenShift Merge Robot 455f2f11d9
Merge pull request #3525 from flouthoc/cleanup-run-directory-after-step
build: Cleanup transient mount destinations with every RUN step
2021-09-28 17:18:26 -04:00
Daniel J Walsh 00ba17b37a
Plumb the remote logger throughut Buildah
Users are not seeing Warnings when doing podman --remote build.
We need to wire the logrus messages all the way through the system.

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-09-28 14:48:16 -04:00
Nalin Dahyabhai c6e2a5e87d Replace fmt.Sprintf("%d", x) with strconv.Itoa(x)
Replace calls to fmt.Sprintf("%d", x) with strconv.Itoa(x), which is
slightly faster.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-09-27 18:27:22 -04:00
Aditya Rajan 4cb43961b8
Run: Cleanup run directory after every RUN step
Following commit ensures that we cleanup dangling `/run` after every RUN
command and make sure that it does not persists on physical image. Ensure
parity with how docker behaves with `.dockerenv`.

Signed-off-by: Aditya Rajan <arajan@redhat.com>
2021-09-27 19:59:20 +05:30
Nalin Dahyabhai a314d2a6ca Makefile: turn on race detection whenever it's available
Check if `go test` supports the -race flag on the build platform, and if
so, use it for unit tests instead of just assuming that it's always
available.

Use sync/atomic to safely use a uint32 instead of a bool to keep track
of whether or not the process we started for RUN has stopped.

[NO NEW TESTS NEEDED]

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-09-16 14:19:19 -04: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
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
openshift-ci[bot] c6908de514
Merge pull request #3424 from Luap99/resolv
Fix resolv.conf content with run --net=private
2021-08-10 17:29:29 +00: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
Paul Holzinger f90481d03a
Fix resolv.conf content with run --net=private
Make sure to use the correct resolv.conf in case of systemd-resolved.
Also filter out 127... nameserver when run in private netns.

Fixes #2780

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2021-08-06 12:32:43 +02:00
Valentin Rothberg 078efc2197 run: fix nil deref using the option's logger
[NO TESTS NEEDED] since I've no idea how to force it.

Reported-in: containers/podman/issues/11148
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2021-08-06 11:13:01 +02:00
Daniel J Walsh bb738d4406
Allow dst and destination for target in secret mounts
Fixes: https://github.com/containers/buildah/issues/3396

Patch from @mixedCase

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-07-22 14:47:22 -04:00
Daniel J Walsh 902d579a1f
Turn stdio back to blocking when command finishes
Fixes: https://github.com/containers/buildah/issues/3152

Sometimes after running buildah run in a terminal, commands executed afterwards which try to read from stdin fail with EAGAIN. This is because it sets O_NONBLOCK on the FD:

[NO TESTS NEEDED] Since I don't know how to test this.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-06-25 03:14:26 -04:00
Matthew Heon fdf344c651 Add support for default network creation
As part of the podman-machine work, we need to stop distributing
the default CNI configuration that has traditionally been
supplied by Podman, 87-podman.conflist. Buildah (as root) also
uses this file, and will be unable to set up container networking
without it.

The replacement we've introduced is the ability to automatically
create said configuration file using a package in
containers/common. This has already been added to Podman, and
this PR adds it to Buildah.

[NO TESTS NEEDED] as there's no real easy way to verify that
Buildah made the network - no explicit command for listing
networks.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2021-06-23 14:32:52 -04:00
Daniel J Walsh d7d078561c
Send logrus messages back to caller when building
We want Info, Warning and Debug logrus messages to be writen to the
buildah stderr. this way when podman-remote is using build, it will
get the messages back on the client side.

[NO TESTS NEEDED] Since this will be tested in Podman.

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-05-15 03:55:05 -04:00
Daniel J Walsh 79bdccafb9
Fix race condition
Ed has found situations where the container exits, before we can check
the state causing a failure, where I think we can complete successfully.

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

[NO TESTS NEEDED] since I have no way to generate this race condition.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-05-10 07:18:09 -04:00
OpenShift Merge Robot baae671fb5
Merge pull request #3187 from nalind/relay-errors
runUsingRuntime: when relaying error from the runtime, mention that it's from the runtime
2021-04-28 18:41:06 -04:00
Nalin Dahyabhai f6cd687a80 runUsingRuntime: when relaying error from the runtime, mention that
Mention that errors we relay from the runtime are from the runtime, to
hopefully reduce confusion when troubleshooting.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-04-28 15:48:29 -04:00
Nalin Dahyabhai 3f78f33dc5 Run(): avoid Mkdir() into the rootfs
Replace a call to idtools.MkdirAllAndChownNew() with a call to
copier.Mkdir().

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-04-27 16:54:32 -04:00
Ashley Cui c8002d9739 Add support for secret mounts
Add support for secrets. Secrets is a two-part flag that allows secret files to
be accessed for a certain RUN instruction, but not any other
instructions, as well as now showing up in the final image.

Signed-off-by: Ashley Cui <acui@redhat.com>
2021-04-23 09:19:43 -04:00
Ashley Cui 1c0e033a35 Rename rhel secrets to subscriptions
rename secrets to subscriptions and remove unused subscription package

Signed-off-by: Ashley Cui <acui@redhat.com>
2021-04-22 13:45:30 -04:00
OpenShift Merge Robot 18c5ab79a1
Merge pull request #3117 from rhatdan/mounts
Sort all mounts by destination directory
2021-04-02 14:14:09 +02:00
Urvashi Mohnani 3598ffb167 Check for symlink in builtin volume
Check if a builtin volume is a symlink. If it is,
follow the symlink and ensure that the destination
exists.
Add tests for symlink and no symlink case.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2021-04-01 13:38:46 -04:00
Daniel J Walsh d29b04dba7
Sort all mounts by destination directory
Currently depending on the sort order of mount points, we can overmount
a volume specified from the user. Podman has a function sortMount that
sorts all mounts based on destination directory to ensure all mounts
show up. This PR moves the function from Podman to Buildah. Once merged
I will change Podman to use the buildah function.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-03-31 16:26:09 -04:00
Nalin Dahyabhai 0b4d973238 COPY --chown: expand the conformance test
Expand conformance test coverage for COPY --chown, and correct our
behavior when the argument is a single number: instead of assuming the
number is the UID and GID = 0, the GID should be the same as the UID.

This means that we can't quite use the same function for parsing the
arguments for COPY --chown and USER, as they evidently have different
defaults for the case where the argument is a single number.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2021-03-22 16:37:12 -04:00
Daniel J Walsh 514a3f1a91
Shrink the vendoring size of pkc/cli
This PR removes the pkg/auth which brings in docker/docker
since it really is not needed, and was only there to help users
discover the settings of where the authfile was, when the environment
variables were set.  Would almost never be of any value.

Move imagebuildah.BuildOptions to define.BuildOptions

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-03-03 14:18:35 -05:00
Daniel J Walsh 4704e6cb3f
Eliminate the use of containers/building import in pkg subdirs
We want to shrink the size of the import when importing pkg from
buildah. This should help us shrink the size of the golang bindings
in podman.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-02-12 12:43:08 -05:00
Daniel J Walsh 3446328c77
build(deps): bump github.com/containers/common from 0.34.0 to 0.34.2
Bumps [github.com/containers/common](https://github.com/containers/common) from 0.33.1 to 0.34.2.
- [Release notes](https://github.com/containers/common/releases)
- [Commits](https://github.com/containers/common/compare/v0.33.1...v0.34.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2021-02-08 18:06:36 -05:00
Eduardo Vega b1ae9c1f3a Use chown function for U volume flag from containers/common repository
Signed-off-by: Eduardo Vega <edvegavalerio@gmail.com>
2021-02-08 08:04:29 -06:00
Giuseppe Scrivano 4026fa9696
run: fix check for host pid namespace
check the pidns is shared with the host only when the pidns mode is
specified.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2021-02-05 19:51:10 +01:00
Josh Soref c7963db369 Spelling
Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>
2020-12-21 16:47:18 -05:00
Eduardo Vega 1f4e751770 Add U volume flag to chown source volumes
Signed-off-by: Eduardo Vega <edvegavalerio@gmail.com>
2020-12-16 14:07:26 -06:00
Daniel J Walsh d9a7f13665
Add container information to .containerenv
We have been asked to leak some container information
and image information into the container to be used
by certain tools. (Toolbox and others)

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-11-24 15:56:38 -05:00
Daniel J Walsh 2099ad769f
Switch to using containers/common pkg's
pkg/secrets has been moved and slightly been rewrittin
in containers/common, along with pkg/umask.

Convert Buildah to use these packages rather then internal
packages.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-11-20 15:46:30 -05:00
Nalin Dahyabhai 002c88e256 Run: don't forcibly disable UTS namespaces in rootless mode
I can't remember why we disabled UTS namespaces for rootless isolation,
but it doesn't look necessary.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-11-12 14:46:06 -05:00
Nalin Dahyabhai 21397a1be2 Run: correctly call copier.Mkdir
Make sure the directory we're creating is explicitly below the chroot we
want to create it under.

Fix a similar incorrect call in imagebuildah.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-11-06 16:53:36 -05:00
Daniel J Walsh e8f92e09a1
(*Builder).Run: MkdirAll: handle EEXIST error
It is not entirely correct to always ignore EEXIST here. It should only
be ignored in one special case: when a working directory already exists,
and is an absolute symlink to another directory under container root.

MkdirAll reports an error because the symlink is broken in the host
context (without chroot).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-11-03 20:29:48 -05:00
Daniel J Walsh dc03c3e2f6
fix MkdirAll usage
This subtle bug keeps lurking in because error checking for `Mkdir()`
and `MkdirAll()` is slightly different wrt `EEXIST`/`IsExist`:

 - for `Mkdir()`, `IsExist` error should (usually) be ignored
   (unless you want to make sure directory was not there before)
   as it means "the destination directory was already there";

 - for `MkdirAll()`, `IsExist` error should NEVER be ignored.

This commit removes ignoring the IsExist error, as it should not
be ignored.

[v2: skip patching (*Builder).Run]

For more details, a quote from opencontainers/runc PR #162:

-quote-

TL;DR: check for IsExist(err) after a failed MkdirAll() is both
redundant and wrong -- so two reasons to remove it.

Quoting MkdirAll documentation:

> MkdirAll creates a directory named path, along with any necessary
> parents, and returns nil, or else returns an error. If path
> is already a directory, MkdirAll does nothing and returns nil.

This means two things:

1. If a directory to be created already exists, no error is
returned.

2. If the error returned is IsExist (EEXIST), it means there exists
a non-directory with the same name as MkdirAll need to use for
directory. Example: we want to MkdirAll("a/b"), but file "a"
(or "a/b") already exists, so MkdirAll fails.

The above is a theory, based on quoted documentation and my UNIX
knowledge.

3. In practice, though, current MkdirAll implementation [1] returns
ENOTDIR in most of cases described in #2, with the exception when
there is a race between MkdirAll and someone else creating the
last component of MkdirAll argument as a file. In this very case
MkdirAll() will indeed return EEXIST.

Because of #1, IsExist check after MkdirAll is not needed.

Because of #2 and #3, ignoring IsExist error is just plain wrong,
as directory we require is not created. It's cleaner to report
the error now.

Note this error is all over the tree, I guess due to copy-paste,
or trying to follow the same usage pattern as for Mkdir(),
or some not quite correct examples on the Internet.

> [1] https://github.com/golang/go/blob/f9ed2f75/src/os/path.go

-end-quote-

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-11-03 15:39:21 -05:00
Daniel J Walsh 39f4cfb79d
Stop excessive wrapping
Golang built in functions like os.Create and others print the name of
the file system object when they fail.  Wrapping them a second time
with the file system object, makes the error message look like crap
when reported to the user.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-10-15 14:03:13 -04:00