Commit Graph

5442 Commits

Author SHA1 Message Date
Kir Kolyshkin d519da5eb0 Dockerfile, Vagrantfile.centos7, .github: bats 1.3.0
Bump from bats 1.2.1 to 1.3.0.

Changes: https://github.com/bats-core/bats-core/releases/tag/v1.3.0

NOTE we're already using bats 1.3.0 on Fedora CI.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-12 11:34:54 -07:00
Kir Kolyshkin bdad2859f7 Dockerfile, Vagrantfile.centos7: use go 1.16
Dockerfile: switch from go 1.15 to go 1.16.x.

Vagrantfile.centos7: switch from go 1.15 to go 1.16.4.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-12 11:33:58 -07:00
Kir Kolyshkin 4e50d1c163 Merge pull request #2950 from cyphar/add-emeritus
EMERITUS: recognise previous maintainers
2021-05-11 11:44:58 -07:00
Aleksa Sarai f96530f2e4 EMERITUS: recognise previous maintainers
It's long past due that we recognise former maintainers for their work.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2021-05-12 01:12:12 +10:00
Aleksa Sarai 4d72b368af Merge branch 'pr-2927'
Aleksa Sarai (2):
  VERSION: release v1.0.0-rc94
  VERSION: back to development

Vote: +6 -0 !1
Closes #2927
2021-05-11 00:41:34 +10:00
Aleksa Sarai c73a6626be VERSION: back to development
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2021-05-10 11:17:40 +10:00
Aleksa Sarai 2c7861bc5e VERSION: release v1.0.0-rc94
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
v1.0.0-rc94
2021-05-10 11:17:34 +10:00
Aleksa Sarai 62250c13fe merge branch 'pr-2944'
Kir Kolyshkin (8):
  tests/int/helpers: rm old code
  libct/cg/sd/v2: call initPath from Path
  tests/int/update.bats: don't set cpuset in setup
  tests/int/helpers: generalize require cgroups_freezer
  tests/int: enable/use requires cgroups_<ctrl>
  tests/int/cgroups: don't check for hugetlb
  tests/int: run rootless_cgroup tests for v2+systemd
  Vagrantfile.fedora: set Delegate=yes

LGTMs: AkihiroSuda cyphar
Closes #2944
2021-05-10 11:16:11 +10:00
Kir Kolyshkin 12e9cac902 Vagrantfile.fedora: set Delegate=yes
Instead of listing all individual controllers we want to be delegated,
just say "yes" which means "all the controllers that are available".

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:07:33 -07:00
Kir Kolyshkin ac70a9a1b2 tests/int: run rootless_cgroup tests for v2+systemd
Before this commit, "require rootless_cgroup" feature check required "cgroup"
to be present in ROOTLESS_FEATURES. The idea of the requirement, though, is
to ensure that rootless runc can manage cgroups.

In case of systemd + cgroup v2, rootless runc can manage cgroups,
thanks to systemd delegation, so modify the feature check accordingly.

Next, convert (simplify) some of the existing users to the modified check.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:07:27 -07:00
Kir Kolyshkin 601cf5825f tests/int/cgroups: don't check for hugetlb
Systemd is not able to delegate hugetlb controller, and it is needed for
cgroup v2 + systemd + rootless case (which is currently skipped because
of "requires rootless_cgroup", but will be enabled by a later commit).

The failure being fixed looks like this:

> not ok 4 runc create (limits + cgrouppath + permission on the cgroup dir) succeeds
> # (from function `check_cgroup_value' in file /vagrant/tests/integration/helpers.bash, line 188,
> #  in test file /vagrant/tests/integration/cgroups.bats, line 53)
> #   `check_cgroup_value "cgroup.controllers" "$(cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/cgroup.controllers)"' failed
> # <....>
> # /sys/fs/cgroup/user.slice/user-2000.slice/user@2000.service/machine.slice/runc-cgroups-integration-test-20341.scope/cgroup.controllers
> # current cpuset cpu io memory pids !? cpuset cpu io memory hugetlb pids

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:07:25 -07:00
Kir Kolyshkin 40b9791916 tests/int: enable/use requires cgroups_<ctrl>
1. In case of cgroup v2 + systemd + rootless, get the list of controllers from
   the own cgroup, rather than from the root one (as systemd cgroup delegation
   is required in this case, and it might not be set or fully working).

2. Use "requires cgroups_<controller>" in tests that need those
   controllers.

Tested on Fedora 31 (which does not support delegation of cpuset controller).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:07:08 -07:00
Kir Kolyshkin 44fcbfd68f tests/int/helpers: generalize require cgroups_freezer
With this, something like cgroups_pids can be used (to be added
by the next commit).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:06:13 -07:00
Kir Kolyshkin 353f2ad193 tests/int/update.bats: don't set cpuset in setup
Setting cpuset.cpus requires cpuset controller, which might
not be available in case of cgroup v2 + systemd < 244.

Rather than require cpuset support from every test case, do not set the initial
cpuset value from setup(), and do not check it.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:06:08 -07:00
Kir Kolyshkin 4f8ccc5ff5 libct/cg/sd/v2: call initPath from Path
Sometimes Path() is called before m.path is initialized (in particular,
this happens from (*linuxContainer).newInitConfig), so we do need to
make sure to call initPath.

This fixes the following integration tests (for cgroup v2 + systemd case,
currently not enabled -- to be enabled by further commits):

 *  runc run (blkio weight)
 * runc run (cgroupv2 mount inside container)

Fixes: ff692f289b ("Fix cgroup2 mount for rootless case")
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:05:56 -07:00
Kir Kolyshkin 0ed1f8022d tests/int/helpers: rm old code
This was added by commit ca4f427af, together with set_resources_limit,
and was needed for the latter, since sed was used to update resources.

Now when we switched to jq in commit 79fe41d3c1, this kludge is no
longer needed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-07 22:05:49 -07:00
Qiang Huang fc8a0d97a9 Merge pull request #2913 from liusdu/interative
tiny fix iterative checkpoint test case
2021-05-08 10:16:30 +08:00
Akihiro Suda f577072d61 Merge pull request #2937 from kolyshkin/dbus-cm-leak-alt
libct/cg/sd: fix dbus connection leak (alternative)
2021-05-08 03:18:52 +09:00
Kir Kolyshkin af2e03c50f ci/gha: bump shellcheck 0.7.1 -> 0.7.2
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 20:11:09 -07:00
Kir Kolyshkin 2d1bb91dca ci/gha: bump shfmt 3.2.0 -> 3.2.4
Changes: https://github.com/mvdan/sh/releases

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 20:09:52 -07:00
Kir Kolyshkin a7feb42395 libct/int: add TestFdLeaksSystemd
Add a test to check that container.Run do not leak file descriptors.

Before the previous commit, it fails like this:

    exec_test.go:2030: extra fd 8 -> socket:[659703]
    exec_test.go:2030: extra fd 11 -> socket:[658715]
    exec_test.go:2033: found 2 extra fds after container.Run

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:37:55 -07:00
Kir Kolyshkin c7f847ed3a libct/cg/sd: use global dbus connection
Using per cgroup manager dbus connection instances means
that every cgroup manager instance gets a new connection,
and those connections are never closed, ultimately resulting
in file descriptors limit being hit.

Revert back to using a single global dbus connection for everything,
without changing the callers.

NOTE that it is assumed a runtime can't use both root and rootless
dbus at the same time. If this happens, we panic.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:37:55 -07:00
Kir Kolyshkin 99c5c504ea libct/cg/sd: introduce and use getManagerProperty
Commit 47ef9a104f forgot to wrap GetManagerProperty("ControlGroup")
into retryOnDisconnect. Since there's one other user of
GetManagerProperty, add getManagerProperty wrapper and use it.

Fixes: 47ef9a104f

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:37:55 -07:00
Kir Kolyshkin 0fabed76c1 libct/int/checkpoint_test: use kill(0) for pid check
os.FindProcess never returns an error on Unix/Linux.
Use kill(0) to actually check if the process exists.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:36:24 -07:00
Kir Kolyshkin 7eb1405b60 libct/int/checkpoint_test: use waitProcess helper
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:36:24 -07:00
Kir Kolyshkin 72d7a8249d libct/int/checkpoint_test: use t.Helper
Otherwise showFile log statements show its own file/line info,
rather than that of the caller's.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:36:24 -07:00
Kir Kolyshkin bcca796848 libct/int: simplify/fix showing errors
Instead of manually figuring out the file and line number of the caller,
use t.Helper() so t.Fatal prints the correct one.

Before:
> utils_test.go:85: exec_test.go:536: unexpected error: container_linux.go:380: starting container process caused: exec: "catt": executable file not found in $PATH

After:
> exec_test.go:536: unexpected error: container_linux.go:380: starting container process caused: exec: "catt": executable file not found in $PATH

(the error is introduced by s/cat/catt/)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 12:36:24 -07:00
Kir Kolyshkin ee36ccf591 Merge pull request #2941 from kolyshkin/another-kludge-to-fix-freeze
freezer: add delay after freeze

LGTMs: AkihiroSuda mrunalp dqminh
2021-05-06 12:28:53 -07:00
Kir Kolyshkin 524abc59f4 freezer: add delay after freeze
I hate to keep adding those kludges, but lately TestFreeze (and
TestSystemdFreeze) from libcontainer/integration fails a lot. The
failure comes and goes, and is probably this is caused by a slow host
allocated for the test, and a slow VM on top of it.

To remediate, add a small sleep on every 25th iteration in between
asking the kernel to freeze and checking its status.

In the worst case scenario (failure to freeze), this adds about 0.4 ms
(40 x 10 us) to the duration of the call.

It is hard to measure how this affects CI as GHA plays a roulette when
allocating a node to run the test on, but it seems to help. With
additional debug info, I saw somewhat frequent "frozen after 24 retries"
or "frozen after 49 retries", meaning it succeeded right after the added
sleep.

While at it, rewrite/improve the comments.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-06 10:51:46 -07:00
Kir Kolyshkin e1d842cfa6 libct/intelrdt: fix unit test
1. These tests can't be run in parallel since they do check
   a global variable (mbaScEnabled).

2. findIntelRdtMountpointDir() relies on mbaScEnabled to be initially
   set to the default value (false) and this the test fails if run
   more than once:

> go test -count 2
> ...
> intelrdt_test.go:243: expected mbaScEnabled=false, got true
>    --- FAIL: TestFindIntelRdtMountpointDir/Valid_mountinfo_with_MBA_Software_Controller_disabled (0.00s)

Fixes: 2c70d2384
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-05 14:07:10 -07:00
Akihiro Suda 4638b379fc Merge pull request #2929 from bwh-mind/ppc32
Update golang.org/x/sys to add linux/ppc support
2021-05-06 03:52:42 +09:00
Akihiro Suda f9176c909a Merge pull request #2909 from kolyshkin/libct-int-better-names
libct/int: misc cleanups and fixes
2021-05-06 02:21:19 +09:00
Mrunal Patel 2965ffc7e3 Merge pull request #2933 from oss-qm/submit/makefile_go_cmd
Makefile: allow overriding go command by environment
2021-05-04 09:57:45 -07:00
Enrico Weigelt, metux IT consult 541fc19e54 Makefile: allow overriding go command by environment
This is required for environments/build systems where a specific
go version / command needs to be used.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2021-05-04 12:41:12 +02:00
Mrunal Patel c73d766ee6 Merge pull request #2931 from kolyshkin/fix-release-sh
script/release.sh: add -a to force rebuild
2021-05-03 11:23:07 -07:00
Kir Kolyshkin 06a9ea36de script/release.sh: add -a to force rebuild
https://golang.org/cmd/go/#hdr-Build_and_test_caching says:

> If you have made changes to the C libraries on your system, you will
> need to clean the cache explicitly or else use the -a build flag
> (see 'go help build') to force rebuilding of packages that depend
> on the updated C libraries.

This means that:

1. We need to either 'go clean -cache' or 'go build -a' when building
   the release binary. Adding '-a' seems less intrusive / more focused.

2. The check for existing libseccomp.a (added by commit d748280aa)
   is no longer needed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-05-03 10:30:23 -07:00
Ben Hutchings 91b01682ae Update golang.org/x/sys to add linux/ppc support
This package was recently updated to add support for Linux on
32-bit PowerPC (ppc), implemented by gccgo.

Signed-off-by: Ben Hutchings <ben.hutchings@essensium.com>
2021-05-03 00:38:11 +02:00
Aleksa Sarai d279ebd97d merge branch 'pr-2925'
Akihiro Suda (4):
  Revert "Makefile: rm go 1.13 workaround"
  libcontainer: avoid using t.Cleanup
  go.mod: demote to Go 1.13
  CI: enable Go 1.13 again

LGTMs: kolyskhin cyphar
Closes #2925
2021-05-02 01:23:39 +10:00
Kir Kolyshkin b15ddb4739 Merge pull request #2919 from cyphar/warn-unknown-architecture
cloned_binary: switch from #error to #warning for SYS_memfd_create
2021-04-30 10:47:58 -07:00
Akihiro Suda c061bc78aa Merge pull request #2906 from kolyshkin/set-allow-nil 2021-04-30 21:01:15 +09:00
Akihiro Suda ee4612bcdc CI: enable Go 1.13 again
Dockre/Moby still builds runc with Go 1.13, so we should still support
Go 1.13.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-04-30 19:15:51 +09:00
Akihiro Suda e2dd9220dd go.mod: demote to Go 1.13
Dockre/Moby still builds runc with Go 1.13, so we should still support
Go 1.13.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-04-30 19:15:45 +09:00
Akihiro Suda 45f49e8fca libcontainer: avoid using t.Cleanup
t.Cleanup is not present in Go 1.13.
Dockre/Moby still builds runc with Go 1.13, so we should still support
Go 1.13.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-04-30 19:13:05 +09:00
Akihiro Suda 1a659bc68e Revert "Makefile: rm go 1.13 workaround"
This reverts commit d0cbef576f.

Dockre/Moby still builds runc with Go 1.13, so we should still support
Go 1.13.

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-04-30 19:12:07 +09:00
Aleksa Sarai 016717a550 merge branch 'pr-2926'
Sebastiaan van Stijn (1):
  cgroups/systemd: replace deprecated dbus functions

LGTMs: AkihiroSuda cyphar
Closes #2926
2021-04-30 18:14:00 +10:00
Akihiro Suda 8f85f4f1f2 Merge pull request #2921 from kolyshkin/faster-openfile 2021-04-30 17:06:37 +09:00
Kir Kolyshkin abf12ce0db libc/cg: improve Manager docs
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-04-29 15:30:12 -07:00
Kir Kolyshkin 3f65946756 libct/cg: make Set accept configs.Resources
A cgroup manager's Set method sets cgroup resources, but historically
it was accepting configs.Cgroups.

Refactor it to accept resources only. This is an improvement from the
API point of view, as the method can not change cgroup configuration
(such as path to the cgroup etc), it can only set (modify) its
resources/limits.

This also lays the foundation for complicated resource updates, as now
Set has two sets of resources -- the one that was previously specified
during cgroup manager creation (or the previous Set), and the one passed
in the argument, so it could deduce the difference between these. This
is a long term goal though.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-04-29 15:24:19 -07:00
Kir Kolyshkin af0710a0f8 libct/cg/sd/v2: fix Set argument
For some reason, systemd cgroup v2 driver's Set is not using its
container argument when generating systemd unit properties.

This bug is not detected by our update tests as we run a new binary
every time and thus a new instance of a cgroup manager.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-04-29 15:12:56 -07:00
Kir Kolyshkin 850b2c47b2 libct/cg/fscommon.OpenFile: speed up ro case
Commit 88e8350de2, among the other things, replaced filepath.Join with
securejoin.SecureJoin for both reads and writes to cgroupfs.

Commits e76ac1c054 and 31f0f5b7e0 switched more code to use
fscommon.ReadFile (and thus securejoin). Commit 0228226e6d introduced
fscommon.OpenFile (which uses securejoin as the fallback if openat2(2)
is not available, which is the case for older kernels), and commit
c95e69007c switched most of cgroup/fs[2] code to use it.

As a result, fs.GetStats() method became noticeable slower, mostly due
to securejoin calling os.Lstat and filepath.Clean.

Using securejoin as a security measure for cgroupfs files is
not well justified, as cgroupfs do not contain symlinks, and none of the
code using it have uncleaned paths. In particular, fs/fs2/systemd
managers do check and sanitize their paths.

This commit modifies the code to not use securejoin. Instead, it checks
that the opened file is indeed on cgroupfs.

Using BenchmarkGetStats on a CentOS 8 VM, I see the following
improvement:

Before:
> BenchmarkGetStats-8               8376            625135 ns/op

After:
> BenchmarkGetStats-8   	   12226	    485015 ns/op

An intermediate version, with no fstatfs to check fstype:
> BenchmarkGetStats-8              13162            452281 ns/op

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-04-29 14:55:02 -07:00