Skip to content

Commit 57bebfc

Browse files
authored
Add the omegajail-cgroups-wrapper binary (#26)
This change adds a new binary that can be called before the `omegaup-runner` such that it hs the correct cgroups setup for calling omegajail, in either cgroups v1 or v2.
1 parent ee71ab0 commit 57bebfc

5 files changed

Lines changed: 34 additions & 4 deletions

File tree

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,6 @@
5555
!tools/mkroot
5656
!tools/omegajail-setup
5757
!tools/omegajail-container-wrapper
58+
!tools/omegajail-cgroups-wrapper
5859
!policies/*.policy
5960
!policies/*.frequency

Dockerfile.distrib

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ COPY ./cxxopts/include/ ./cxxopts/include/
1919
COPY ./minijail/ ./minijail/
2020
COPY Makefile *.h *.cpp ./
2121
COPY tools/omegajail-setup ./tools/
22+
COPY tools/omegajail-cgroups-wrapper ./tools/
2223
COPY ./policies/*.policy ./policies/*.frequency ./policies/
2324

2425
ARG OMEGAJAIL_RELEASE

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ policies/%.bpf: policies/%.policy policies/omegajail.policy | minijail/constants
7070
install: ${BINARIES} tools/omegajail-setup ${POLICIES}
7171
install -d $(DESTDIR)/bin
7272
install -t $(DESTDIR)/bin ${BINARIES} tools/omegajail-setup
73+
install -t $(DESTDIR)/bin ${BINARIES} tools/omegajail-cgroups-wrapper
7374
install -d $(DESTDIR)/policies
7475
install -t $(DESTDIR)/policies -m 0644 ${POLICIES}
7576

tools/omegajail-cgroups-wrapper

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/bin/bash
2+
3+
# Wraps the original omegaup runner binary to set its cgroups up.
4+
5+
set -e
6+
7+
if [[ -f /sys/fs/cgroup/cgroup.controllers ]]; then
8+
mkdir -p "/sys/fs/cgroup/system.slice/omegaup-runner.service"/{omegaup-runner,omegajail}
9+
10+
# Move the process to another group to avoid violating the "no processes in
11+
# intermediate nodes" rule.
12+
echo $$ > "/sys/fs/cgroup/system.slice/omegaup-runner.service/omegaup-runner/cgroup.procs"
13+
# Delegate the memory subtree control for both the OG cgroup and the one where
14+
# all the omegajail processes will live in.
15+
echo '+memory' > "/sys/fs/cgroup/system.slice/omegaup-runner.service/cgroup.subtree_control"
16+
echo '+memory' > "/sys/fs/cgroup/system.slice/omegaup-runner.service/omegajail/cgroup.subtree_control"
17+
else
18+
mkdir -p "/sys/fs/cgroup/memory/system.slice/omegaup-runner.service"/{omegaup-runner,omegajail}
19+
20+
# Move the process to another group to avoid violating the "no processes in
21+
# intermediate nodes" rule.
22+
echo $$ > "/sys/fs/cgroup/memory/system.slice/omegaup-runner.service/omegaup-runner/cgroup.procs"
23+
fi
24+
25+
# Now that all the cgroups are set, let's start the process.
26+
exec "$@"

tools/omegajail-setup

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#!/bin/bash
22

3-
# Performs per-boot setup of the environment needed for omegajail.
3+
# Performs setup of the omegaup cgroups needed for omegajail.
44
# Should be run as root.
55

66
set -e
77

8-
# Create a memory cgroup and make omegaup an admin.
9-
/bin/mkdir -p -m 0775 /sys/fs/cgroup/memory/omegajail
10-
/bin/chgrp omegaup /sys/fs/cgroup/memory/omegajail
8+
# Make omegup the admin of the delegated memory cgroup.
9+
if [[ ! -f /sys/fs/cgroup/cgroup.controllers ]]; then
10+
chown omegaup:omegaup -R /sys/fs/cgroup/memory/system.slice/omegaup-runner.service
11+
fi

0 commit comments

Comments
 (0)