Commit Graph

6052 Commits

Author SHA1 Message Date
Kir Kolyshkin cff41a893c ci: fix TestNilResources when systemd not available
Split the test into two -- for fs and systemd cgroup managers, and only
run the second one if systemd is available.

Prevents the following failure during `make unittest`:

> === RUN   TestNilResources
>     manager_test.go:27: systemd not running on this host, cannot use systemd cgroups manager
> --- FAIL: TestNilResources (0.22s)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 962019d64e)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:46:40 -07:00
Kir Kolyshkin 37405ca009 Fix running tests under Docker/Podman and cgroup v2
For "make integration", the tests are run inside a Docker/Podman
container. Problem is, if cgroup v2 is used, the in-container
/sys/fs/cgroup/cgroup.subtree_control is empty.

The added script, used as Docker entrypoint, moves the current process
into a sub-cgroup, and then adds all controllers in top-level
cgroup.subtree_control.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit cfc801b7ed)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:46:15 -07:00
Kir Kolyshkin 1c52424228 [1.1] ci/gha: rm unsup Go 1.19.x, add 1.21.x
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:44:33 -07:00
Kir Kolyshkin ac310917d5 ci/cirrus: improve host_info
1. Do not use echo, as this results in lines like this:

	...
	echo "-----"
	-----
	...

2. Move "cat /proc/cpuinfo" to be the last one, as the output is usually
   very long.

3. Add "go version" to CentOS jobs.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit fd1a79ffc8)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:38:38 -07:00
Kir Kolyshkin ecccc4329c [1.1] ci/cirrus: use Go 1.19.x not 1.19
[XXX 1.1 note: the above subject and the rest of the commit message
is the original description from the cherry-picked commit which talks
about 1.19 -- while in fact it is now 1.20.]

This variable is used in curl to download a go release, so we are using
the initial Go 1.19 release in Cirrus CI, not the latest Go 1.19.x
release.

From the CI perspective, it makes more sense to use the latest release.

Add some jq magic to extract the latest minor release information
from the download page, and use it.

This brings Cirrus CI jobs logic in line with all the others (GHA,
Dockerfile), where by 1.20 we actually mean "latest 1.20.x".

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 873d7bb3a3)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:38:38 -07:00
Kir Kolyshkin bb2401eeef [1.1] ci/cirrus: use Go 1.20
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-08-08 18:38:30 -07:00
Kir Kolyshkin aa68c400a8 Merge pull request #3961 from lifubang/backport-ModeStricky
[1.1] Fix some file mode bits missing when doing mount syscall
2023-08-02 22:14:30 -07:00
lifubang aaed58c87b add a test case about missing stricky bit
Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit 83137c6884)
Signed-off-by: lifubang <lifubang@acmcoder.com>
2023-08-03 11:41:34 +08:00
lifubang 3d3a2b38b4 fix some file mode bits missing when doing mount syscall
Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit 6092a4b42d)
2023-08-03 11:31:03 +08:00
Kir Kolyshkin 0699bf314f Merge pull request #3958 from akhilerm/upgrade-deprecate-actions
[1.1] deps: Update github actions packages in validate workflow
2023-08-02 18:00:24 -07:00
Akhil Mohan 7c36375ae5 Update github actions packages in validate workflow
Resolve nodejs 12 deprecation warnings by updating
lumaxis/shellcheck-problem-matchers and actions/upload-artifact

Signed-off-by: Akhil Mohan <makhil@vmware.com>
2023-08-02 17:10:10 +05:30
Aleksa Sarai dd03bb89ed merge pr #3940 into release-1.1
Akihiro Suda (2):
  VERSION: back to development
  VERSION: release 1.1.8

LGTMs: kolyshkin AkihiroSuda cyphar lifubang
Closes #3940
2023-07-19 23:39:58 +10:00
Akihiro Suda 1fa89476d4 VERSION: back to development
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2023-07-19 14:15:36 +09:00
Akihiro Suda 82f18fe0e4 VERSION: release 1.1.8
Thanks to lifubang for suggesting the release name ("海纳百川 有容乃大")

Co-authored-by: lifubang <lifubang@acmcoder.com>
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
v1.1.8
2023-07-19 14:15:32 +09:00
lfbzhm 096277c761 Merge pull request #3921 from jiusanzhou/1.1-bugfix/skip-update-while-frozen-faield
[1.1] libct/cg/sd/v1: do not update non-frozen cgroup after frozen failed.
2023-07-16 08:16:43 +08:00
Akihiro Suda 828eb47c39 Merge pull request #3932 from kolyshkin/1.1-3888
[1.1] runc delete: call systemd's reset-failed
2023-07-12 13:20:45 +08:00
Kir Kolyshkin ef6491ec9f tests/int/delete: make sure runc delete removes failed unit
The passing run (with the fix) looks like this:

----
delete.bats
 ✓ runc delete removes failed systemd unit [4556]
   runc spec (status=0):

   runc run -d --console-socket /tmp/bats-run-B08vu1/runc.lbQwU5/tty/sock test-failed-unit (status=0):

   Warning: The unit file, source configuration file or drop-ins of runc-cgroups-integration-test-12869.scope changed on disk. Run 'systemctl daemon-reload' to reload units.
   × runc-cgroups-integration-test-12869.scope - libcontainer container integration-test-12869
        Loaded: loaded (/run/systemd/transient/runc-cgroups-integration-test-12869.scope; transient)
     Transient: yes
       Drop-In: /run/systemd/transient/runc-cgroups-integration-test-12869.scope.d
                └─50-DevicePolicy.conf, 50-DeviceAllow.conf
        Active: failed (Result: timeout) since Tue 2023-06-13 14:41:38 PDT; 751ms ago
      Duration: 2.144s
           CPU: 8ms

   Jun 13 14:41:34 kir-rhat systemd[1]: Started runc-cgroups-integration-test-12869.scope - libcontainer container integration-test-12869.
   Jun 13 14:41:37 kir-rhat systemd[1]: runc-cgroups-integration-test-12869.scope: Scope reached runtime time limit. Stopping.
   Jun 13 14:41:38 kir-rhat systemd[1]: runc-cgroups-integration-test-12869.scope: Stopping timed out. Killing.
   Jun 13 14:41:38 kir-rhat systemd[1]: runc-cgroups-integration-test-12869.scope: Killing process 1107438 (sleep) with signal SIGKILL.
   Jun 13 14:41:38 kir-rhat systemd[1]: runc-cgroups-integration-test-12869.scope: Failed with result 'timeout'.
   runc delete test-failed-unit (status=0):

   Unit runc-cgroups-integration-test-12869.scope could not be found.
----

Before the fix, the test was failing like this:

----
delete.bats
 ✗ runc delete removes failed systemd unit
   (in test file tests/integration/delete.bats, line 194)
     `run -4 systemctl status "$SD_UNIT_NAME"' failed, expected exit code 4, got 3
  ....
----

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit ad040b1caf)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-07-08 11:58:29 -07:00
Kir Kolyshkin ebdd4fa6b1 [1.1] tests/int: add "requires systemd_vNNN"
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 58a811f6aa)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-07-08 11:57:32 -07:00
Kir Kolyshkin 1188c5a192 runc delete: call systemd's reset-failed
runc delete is supposed to remove all the container's artefacts.
In case systemd cgroup driver is used, and the systemd unit has failed
(e.g. oom-killed), systemd won't remove the unit (that is, unless the
"CollectMode: inactive-or-failed" property is set).

Call reset-failed from manager.Destroy so the failed unit will be
removed during "runc delete".

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 43564a7b55)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-07-08 11:54:41 -07:00
Kir Kolyshkin 71e7600768 libct/cg/sd: remove logging from resetFailedUnit
Sometimes we call resetFailedUnit as a cleanup measure, and we don't
care if it fails or not. So, move error reporting to its callers, and
ignore error in cases we don't really expect it to succeed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 91b4cd25b7)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-07-08 11:54:20 -07:00
Kir Kolyshkin 3a4b3af661 tests/int/cgroups: remove useless/wrong setting
There is no such thing as linux.resources.memorySwap (the mem+swap is
set as linux.resources.memory.swap).

As it is not used in this test anyway, remove it.

Fixes: 4929c05ad1
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit dacb3aaa0d)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-07-08 11:53:51 -07:00
Zoe 6bc3f22a31 libct/cg/sd/v1: do not update non-frozen cgroup after frozen failed.
In code we have frozen the cgroup to avoid the processes get
an occasional "permission denied" error, while the systemd's application of device
rules is done disruptively. When the processes in the container can not
be frozen over 2 seconds (which defined in fs/freezer.go),
we still update the cgroup which resulting the container get an occasional
"permission denied" error in some cases.

Return error directly without updating cgroup, when freeze fails.

Fixes: #3803

Signed-off-by: Zoe <hi@zoe.im>
2023-06-30 19:23:36 +08:00
Sebastiaan van Stijn ca73c9fd4b Merge pull request #3918 from kolyshkin/1.1-3553
[1.1] ci/cirrus: enable some rootless tests on cs9
2023-06-29 01:37:36 +02:00
Akihiro Suda 3b5356155c Merge pull request #3917 from kolyshkin/1.1-3899
[1.1] docs/systemd: fix a broken link
2023-06-29 07:49:54 +09:00
Akihiro Suda 1cdfa95f39 Merge pull request #3905 from CARV-ICS-FORTH/release-1.1-riscv64
Backport riscv64 support into 1.1.x
2023-06-29 07:49:28 +09:00
Kir Kolyshkin 0d93d7d13f release: add riscv64 binary
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit a14cc4059d)
2023-06-28 22:34:45 +03:00
Akihiro Suda 9164fe17a7 libct/seccomp: add riscv64
Co-authored-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 1d7b297128)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin ed47e31a05 Makefile: set CGO_ENABLED=1 when needed
It doesn't matter whether static or dynamic linking is used, runc
always needs libcontainer/nsenter, which is written in C and thus
requires cgo. Same is true for libcontainer/integration.

In addition, contrib/pkg/seccompagent also needs cgo (if seccomp build
tag is set), as it need to be linked against libseccomp C library.

By default, cgo is disabled when cross-compiling, meaning that
CGO_ENABLED=1 has to be set explicitly in such cases.

In all other cases (e.g. other contrib binaries) we do not need cgo.

Remove CGO_ENABLED=1 from GO_BUILD_STATIC (as it does not have anything
to do with static linking), and add it to all targets that require it.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit dafcacb522)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin 923ae4da8c Makefile: add support for static PIE
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 21e32d47d3)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin 2abca872b1 Makefile: fix GO_BUILDMODE setting
1. Set to empty value by default.

2. Assume Linux (remove GOOS check, since we do not support other OSes).

3. Instead of using a "not-supported" list, use a "supported" list
   (as Go release notes usually say which platforms are supported).
   As of today, -buildmode=pie is supported for:

 * linux/386, linux/amd64, linux/arm, linux/arm64, and linux/ppc64le
   (since Go 1.6, see https://tip.golang.org/doc/go1.6#compiler)

 * linux/s390x (since Go 1.7, which adds the initial port)

 * linux/riscv64 (since Go 1.16, see
   https://tip.golang.org/doc/go1.16#riscv)

   NOTE this does not mean we support these architectures; it is merely
   a way to see if -buildmode=pie can be used.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit ab5c60d02f)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin 120ec5bda3 Makefile: add LDFLAGS_COMMON and LDFLAGS_STATIC
LDFLAGS_COMMON are used from two places, so it makes sense to dedup.

LDFLAGS_STATIC is a preparation for the next commit.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit f2f6e59937)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin b994011369 Dockerfile: don't use crossbuild-essential-*
All we need is gcc, libc-dev, and binutils. In addition to that,
crossbuild-essential installs g++, libstdc++-dev, and a bunch of perl
packages and libraries which we do not need.

This should speed up image building, as well as make it smaller.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit f0f1b5f969)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin 028fc57aaa Dockerfile: rm dpkg --add-architecture lines
Dockerfile used to install libseccomp-dev packages for different
architectures. This is no longer true since commit f30244ee1b, which
changed to cross-compiling libseccomp (so we can get a static library
to link against).

Thus, adding extra architectures is no longer needed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 476aa18abe)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin 4449ce8486 Dockerfile: nit
We do not use all the files from scripts, only seccomp.sh and lib.sh.

This prevents unneeded rebuild of the image if e.g.
scripts/release_build.sh has changed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit d542ad65ba)
2023-06-28 22:34:45 +03:00
Kir Kolyshkin d375351b79 ci/cirrus: enable rootless tests on cs9
We were not running localrootlessintegration test on CentOS Stream 9
because of some failures fixed by previous commits.

Enable rootless integration with both systemd and fs drivers.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 78d31a4941)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-28 09:42:53 -07:00
Kir Kolyshkin e1a8b52f3a tests/int/cgroups: filter out rdma
Filter out rdma controller since systemd is unable to delegate it.
Similar to commits 05272718f4 and 601cf5825f.

(cherry picked from commit e83ca51913)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-28 09:41:58 -07:00
Sebastiaan van Stijn 207bd9d62a Merge pull request #3916 from neersighted/backport_3912
[1.1] Fix tmpfs mode opts when dir already exists
2023-06-28 18:41:50 +02:00
Kir Kolyshkin 02e065efc3 docs/systemd: fix a broken link
Apparently, developer.gnome.org/documentation no longer hosts the
documentation we used to refer to. Link to docs.gtk.org instead.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 73b5dc027d)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-28 09:32:22 -07:00
Brian Goff 9af462e4a7 Fix tmpfs mode opts when dir already exists
When a directory already exists (or after a container is restarted) the
perms of the directory being mounted to were being used even when a
different permission is set on the tmpfs mount options.

This prepends the original directory perms to the mount options.
If the perms were already set in the mount opts then those perms will
win.
This eliminates the need to perform a chmod after mount entirely.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit 9fa8b9de3e)
Resolved conflicts:
	tests/integration/run.bats
Signed-off-by: Bjorn Neergaard <bjorn.neergaard@docker.com>
2023-06-28 08:21:04 -06:00
Sebastiaan van Stijn c3ce1a1bf2 Merge pull request #3892 from kolyshkin/1.1-3887
[1.1] man/runc: fixes
2023-06-28 15:24:30 +02:00
Sebastiaan van Stijn 3c840a980f Merge pull request #3909 from kolyshkin/1.1-3907
[1.1] .codespellrc: update for 2.2.5
2023-06-28 15:23:22 +02:00
Kir Kolyshkin 7d1bdc7d42 .codespellrc: update for 2.2.5
Remove some old exceptions (no longer needed), add a new one
(codespell 2.2.5 flags "(mis)features" in docs/terminal.md).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit e3627658fa)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-21 11:14:07 -07:00
Akihiro Suda 217744230d Merge pull request #3891 from kolyshkin/1.1-fix-cs9-oom
[1.1] tests/int: increase num retries for oom tests
2023-06-12 17:52:04 +09:00
Kir Kolyshkin 8397943ec9 man/runc: fixes
1. Fix some missing punctuation, use proper case.

2. Remove "runc init" (previously removed from "runc --help" by commit
   7a0302f0d7).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 511c76143b)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-07 17:29:18 -07:00
Kir Kolyshkin f9da684d02 tests/int: increase num retries for oom tests
This test is occasionally failing on CS9.

The test case always takes about 7 seconds on my laptop (decreasing
memory, using a different memory eater in shell etc. doesn't help).

Increase the number of iterations from 10 to 30 to make sure we don't
see any flakes.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit fed0b12436)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-07 17:21:12 -07:00
Kir Kolyshkin 7db472f1c1 Merge pull request #3878 from kolyshkin/1.1-bump-vagrant
[1.1] bump Fedora, Vagrant, bats
2023-06-07 11:26:07 -07:00
Kir Kolyshkin 7fa912ed23 ci/cirrus: limit numcpu
... so we can run all four jobs in parallel.

While at it, fix the comment in the file.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit bb4dbbc4f5)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-06 14:15:19 -07:00
Kir Kolyshkin e9c1ca081e Fix Vagrant caching
As of today, vagrant stopped working, my best guess is due to bad
caching. Here's an excerpt from logs:

...
vagrant plugin install vagrant-libvirt
Installing the 'vagrant-libvirt' plugin. This can take a few minutes...
Building native extensions. This could take a while...
Installed the plugin 'vagrant-libvirt (0.12.1)'!
...
uname -s ; cat Vagrantfile.$DISTRO
Linux
...

Downloaded 481Mb in 4.096201s.
Cache hit for vagrant-8be35383dc00f23d080ff00b2a724c938d650254861f26b67624c28e3fe5e6ae!
...
Vagrant failed to initialize at a very early stage:
The plugins failed to initialize correctly. This may be due to manual
modifications made within the Vagrant home directory.
...
Error message given during initialization: Unable to resolve dependency:
user requested 'vagrant-libvirt (= 0.12.0)'
...

The problem is, vagrant cache overwrites newer plugin with an older one.

Let's only cache the downloaded image.

Also, change the cache fingerprint script (remove "Linux").

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 650efb2c22)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-06 14:15:11 -07:00
Kir Kolyshkin e2265a92cd ci: bump bats 1.8.2 -> 1.9.0
As Fedora 38 uses bats 1.9.0, let's switch to this version in other
places.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 13091eeefa)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-06 14:14:59 -07:00
Kir Kolyshkin bbddb6bdd7 Vagrantfile.fedora: bump to 38
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit a19200096e)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2023-06-06 14:14:59 -07:00