Commit Graph

65 Commits

Author SHA1 Message Date
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
Nalin Dahyabhai bf41a3d707 Makefile: tweak the cross-compile target
What `go tool dist list` says the toolchain supports changes, so this
change removes these attempted cross-compile build targets.
* GOOS=darwin, GOARCH unspecified
* GOOS=darwin, GOARCH=386

Replace our use of slices of
github.com/opencontainers/runc/libcontainer/configs.Device structures
with a locally-defined type alias so that we can avoid importing the
package on non-Unixy systems.  The result is not going to be a very
useful binary on non-Linux systems, but it helps ensure that our
subpackages won't break compilation for other projects who consume us as
a library.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-09-24 12:09:48 -04:00
Nalin Dahyabhai 72e0721b2b Run(): ignore containers.conf's environment configuration
The hardwired default for containers.conf now includes a TERM variable,
and passing it through to commands that we "RUN" during a build can
subtly cause the resulting image to be different from one that `docker
build` would create, so stop using it there.

When a runtime runs the image we eventually produce, it'll consult the
configuration file, so the variable will still be set, even when it
isn't set in the image.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-09-17 14:43:37 -04:00
bors[bot] f39d40e632
Merge #2560
2560: Rework ADD/COPY to use the copier package r=giuseppe a=nalind

#### What type of PR is this?

/kind failing-test 

#### What this PR does / why we need it:

Use the copier package for ADD, COPY, and for ensuring that a specified directory exists in the working container's rootfs.  This should improve our speed when a .dockerignore file is being used, and correctness all around.

When evaluating cache for content that's being copied/added in, switch from (digest the data, check for a cache entry, then maybe copy the data and create the new layer) to (copy the data and create the new layer, digesting as we go, check for a cache entry, either commit or discard the new layer).  This reduces the amount of data that we read from disk, which helps when the data being read doesn't all fit in the kernel's cache, and if we end up keeping the result, costs us nothing compared to what we were doing before.

#### How to verify it

More of our conformance tests should pass, and existing tests should continue to pass.  (We do update a couple of integration tests, but I believe they were expecting incorrect behavior before.)

#### Which issue(s) this PR fixes:

Fixes #574.
Fixes #2476.

#### Special notes for your reviewer:

This is another part of #2480.

#### Does this PR introduce a user-facing change?

```
ADD and COPY should be faster when a .dockerignore file is being used.
```

Co-authored-by: Nalin Dahyabhai <nalin@redhat.com>
2020-08-22 11:49:27 +00:00
Nalin Dahyabhai 3835460c3b Use pipes for copying
Use the copier package to rework how we handle ADD and COPY.

When evaluating cache for content that's being copied/added in, switch
from (digest the data, check for a cache entry, then maybe copy the data
and create the new layer) to (copy the data and create the new layer,
digesting as we go, check for a cache entry, either commit or discard
the new layer).

Use the copier package for ADD, COPY, and for ensuring that a specified
directory exists in the working container's rootfs.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-08-21 12:34:00 -04:00
Giuseppe Scrivano 62dcf0c40c
run: include stdout in error message
improve the error message by including the command stdout, if any.
Stderr is already handled.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-08-21 14:11:57 +02:00
Giuseppe Scrivano e613e90e32
run: use the correct error for errors.Wrapf
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-08-21 13:59:41 +02:00
Daniel J Walsh 07732c3eab
Fix errors found in coverity scan
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-08-13 09:04:36 -04:00
TomSweeneyRedHat e3da008aea Don't bind /etc/host and /etc/resolv.conf if network is not present
If there's no network present in the container, don't bind
the /etc/hosts file as any changes to from the caller will
be lost when run exits. Ditto the /etc/resolv.conf file.

Addresses: #2478

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
2020-08-01 17:34:22 -04:00
Nalin Dahyabhai 92e0c3fdcf Rework conformance testing
Move the conformance tests from ginkgo to using the default testing
package and github.com/stretchr/testify/require, preserving the existing
tests and adding more.

Add conformance tests to our Cirrus configuration, currently marked as
an allowed failure.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-07-23 15:30:58 -04:00
Daniel J Walsh d2e0cd8988
Merge pull request #2434 from giuseppe/no-kill-error
linux: skip errors from the runtime kill
2020-07-14 13:29:07 -04:00
bors[bot] 0bad47cf24
Merge #2465
2465: Deduplicate environment variables r=rhatdan a=nalind

#### What type of PR is this?

> /kind cleanup

#### What this PR does / why we need it:

When combining lists of environment variables read from base images with defaults supplied from our own configuration, ensure that the resulting environment we produce only contains one value for any given variable.  While adding variables to a runtime spec using `github.com/opencontainers/runtime-tools/generate.Generator.AddProcessEnv()` ensures that later values in the list override values that occur earlier, we shouldn't be depending on that.

#### How to verify it

#### Which issue(s) this PR fixes:

None

#### Special notes for your reviewer:

Related to https://github.com/openshift/imagebuilder/pull/169.

#### Does this PR introduce a user-facing change?

```
None
```

Co-authored-by: Nalin Dahyabhai <nalin@redhat.com>
2020-07-14 16:37:29 +00:00
Nalin Dahyabhai abda6f3156 Deduplicate environment variables
When combining lists of environment variables, or environment variables
combined with build arguments, always deduplicate sets of values.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-07-13 18:09:57 -04:00
Daniel J Walsh 68389aa4ec
Mask out /sys/dev to prevent information leak
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-13 16:18:37 -04:00
Giuseppe Scrivano ddf7f01876
linux: skip errors from the runtime kill
fix a race condition where the container process could exit before the
runtime sends the signal, causing the command to fail.

Part of: https://github.com/containers/crun/issues/422

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-07-09 22:44:56 +02:00
Daniel J Walsh c00b434cd2
Mask over the /sys/fs/selinux in mask branch
This is required so that the mount point shows up when buildah
is vendored into Podman.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-08 14:03:47 -04:00
dependabot-preview[bot] 9fb931ca7a
Bump github.com/containers/common from 0.14.0 to 0.15.2
Bumps [github.com/containers/common](https://github.com/containers/common) from 0.14.0 to 0.15.2.
- [Release notes](https://github.com/containers/common/releases)
- [Commits](https://github.com/containers/common/compare/v0.14.0...v0.15.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-07-08 05:23:48 -04:00
Brandon Lum 40df1c6e3b Fix errorf conventions
Signed-off-by: Brandon Lum <lumjjb@gmail.com>
2020-04-04 01:12:25 +00:00
Daniel J Walsh b2e7110255
vendor in latest containers/storage 1.18.0 and containers/common v0.7.0
This vendor moves containers/common/pkg/unshare to containers/storage/pkg/unshare

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-03-31 09:56:18 -04:00
Nick Carboni 7535471ff6 Don't add args to the RUN environment from the Builder
The correct args are already contained in the RunOptions.
They were resolved by the imagebuilder library's Step
(edcddd8483/builder.go (L311-L317))
function

This was previously adding args that should not have been accessible
in the current stage as they were not first referenced by an ARG
command

Signed-off-by: Nick Carboni <ncarboni@redhat.com>
2020-03-26 13:43:49 -04:00
Daniel J Walsh 8bcc55a5ee
Fix FORWARD_NULL errors found by Coverity
Error: FORWARD_NULL (CWE-476): [#def50]

These errors could lead to crashes in the code.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-03-10 10:16:14 -04:00
Giuseppe Scrivano 5723277f23
run_linux: fix tight loop if file is not pollable
do not attempt again to poll the file if it is not pollable and the
the errno is not syscall.EINTR or syscall.EAGAIN.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-03-02 13:30:26 +01:00
TomSweeneyRedHat 31cffe9040 Search for local runtime per values in containers.conf
After determining the type of runtime to use,
either "runc" or "crun" dependent upon the system, search
the list of that type of runtime in the containers.conf
file.  It includes the location of those runtimes in a
number of different architectures.  Once found, set the
runtime to use to that value.

Fixes: #2113

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>
2020-02-26 19:35:37 -05:00
bors[bot] c9e5ff00e5
Merge #2173
2173: Update to containers/common v0.3.0 r=vrothberg a=rhatdan

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Co-authored-by: Daniel J Walsh <dwalsh@redhat.com>
2020-02-19 10:26:43 +00:00
Daniel J Walsh fc6baddc97
Update to containers/common v0.3.0
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-02-18 17:45:01 -05:00
Nalin Dahyabhai f3a5653c92 run: adjust the order in which elements are added to $PATH
When building the slice of environment variables to add to the
configuration for a container that we're about to run, in case of
conflicts, we want the values from the base image or working container
to override the global defaults, and we want values that were passed to
us through the API to override them both.

In cases of conflicts, values which occur later in the slice override
values which occurred earlier, so we want to add them in this order:
* values from containers.conf
* values from the base image or working container
* values passed to us through the API

We previously applied the containers.conf defaults after the base image
or working container's value, and that meant that containers.conf's
values always took precedence over the values in the image.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
2020-02-17 15:40:42 -05:00
Daniel J Walsh cca09881c3
Repair buildah so it can use containers.conf on the server side
In porting containers.conf to libpod, we found that buildah needed
to handle the containers.conf on the server side rather then from
the CLI.

Since the `podman-remote build` would probably not have the same content
as containers.conf on the server, the processesing of the defaults needs
to be handled in imagebuildah.  The CapAdd and CapDrop values need to be
passed in.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-02-10 09:41:31 -05:00
Daniel J Walsh 09d1c24e3d Add support for containers.conf
This is a rework of Qi Wang's patches.
Import package pkg/config from containers/common to read containers.conf
This patch allows users to specify default values stored in containers.conf
that will modify the behaviour of buildah tool.

Signed-off-by: Qi Wang <qiwan@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #2011
Approved by: TomSweeneyRedHat
2020-01-15 17:24:36 +00:00
Daniel J Walsh 41b7852611 Rework overlay pkg for use with libpod
Podman uses the overlay mounts differently then in buildah.  Specifically the
overlay mount points can be used over and over again when starting and stopping
the container.  Since the paths are backed into the contianer config, we have
to be able to cleanout just the Upper and Merged directory rather then destroying
and recreating the overlay directories on each container start.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1822
Approved by: vrothberg
2019-12-22 12:04:13 +00:00
Daniel J Walsh fb7d2b6bd6
Add support for FIPS-Mode backends
If host is running in fips mode, then RHEL8.2 and beyond container images
will come with a directory /usr/share/crypto-policies/back-ends/FIPS.
This directory needs to be bind mounted over /etc/crypto-policies/back-ends in
order to make all tools in the container follow the FIPS Mode rules.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-12-19 08:53:56 -05:00
Daniel J Walsh 8fc5b0116f Start using containers/common
We have moved share code from buildah, podman and others into containers/common.

Specifically for this PR we are moving to use containers/common/pkg/unshare and
containers/common/pkg/cgroups.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #2010
Approved by: QiWang19
2019-12-06 14:37:27 +00:00
Urvashi Mohnani 54ef0073bc Add disableFips option to secrets pkg
If disableFips is set, then we don't mount the FIPS
secret even if the machine is in FIPs mode. This is
to help users run workloads that are not fips compliant
in openshift even if their machine is in FIPs mode.
This is needed in CRI-O.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2019-10-31 10:04:01 -04:00
Daniel J Walsh 20a33e0791 Add --devices flag to bud and from
Some Dockerfiles (fuse-overlay) require additional devices to be in the
build environment.

This patch allows the user to specify additional devices.

Also I noticed that CapAdd and CapDrop was not working in buildah bud situations,
so this patch also fixes this.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1820
Approved by: @TomSweeneyRedHat
2019-09-07 17:32:43 +00:00
Daniel J Walsh 7f0b60c6f7
Add support for /run/.containerenv
Container processes want to check for the existence of this file
to determine if they are running inside of a container.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-09-06 11:56:27 -04:00
Nalin Dahyabhai 6b5f8badc1 Correctly detect ExitError values from Run()
Correctly detect ExitError error values returned by buildah.Run().

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>

Closes: #1816
Approved by: TomSweeneyRedHat
2019-08-22 18:29:17 +00:00
Nalin Dahyabhai db2b3e48ac add: add a DryRun flag to AddAndCopyOptions
Add a DryRun flag to AddAndCopyOptions, so that we can "copy" content to
digest it.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>

Closes: #1792
Approved by: TomSweeneyRedHat
2019-08-16 20:16:40 +00:00
Giuseppe Scrivano 7180312fdf run_linux: fix mounting /sys in a userns
fix the detection code for running in a user namespace.  When buildah
is running in rootless mode, a user namespace is automatically created
even if there are no mappings configured.

Closes: https://github.com/containers/libpod/issues/2972

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1775
Approved by: rhatdan
2019-08-11 12:41:51 +00:00
Nalin Dahyabhai be51b9bd24 Update to match updated runtime-tools API
Some method argument types changed in runtime-tools. Compensate.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>

Closes: #1720
Approved by: vrothberg
2019-07-17 12:41:32 +00:00
Sascha Grunert 16e301031e Add unparam linter and apply fixes
This commit enabled the `unparam` linter and applies all reported issues.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>

Closes: #1719
Approved by: rhatdan
2019-07-16 21:21:32 +00:00
Qi Wang 130cf4516f Add --mount for buildah run
support mount type of bind and tmpfs

Signed-off-by: Qi Wang <qiwan@redhat.com>

Closes: #1673
Approved by: rhatdan
2019-07-02 08:48:55 +00:00
Giuseppe Scrivano 4d9da85473 rootless: add the built-in slirp DNS server
add the slirp built-in DNS server when using slirp4netns.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1688
Approved by: TomSweeneyRedHat
2019-06-26 13:33:12 +00:00
Valentin Rothberg d3b5960957 run_linux.go: ignore unchecked errors
Reported by golangci-lint.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>

Closes: #1678
Approved by: rhatdan
2019-06-19 11:33:36 +00:00