aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Labastie <pierre.labastie@neuf.fr>2023-11-16 16:10:46 +0100
committerPierre Labastie <pierre.labastie@neuf.fr>2023-11-16 16:10:46 +0100
commit249d4ade208ff645ee5d5d409a4dba6f08561fa4 (patch)
tree9156f90ed93e2f10c5d54aec46e772521e18170a
parent09ac7fc548e3de4f0afdde85eb25a70e3e6f33d6 (diff)
Fix (again) the run-in-cgroup.sh script
When using "sh << EOF", what is between this line and EOF runs with no attached terminal. But we need a terminal for running the build. So we have to use "sh -c ". But then nesting of double quotes, $, etc is too complicated. So run as root, and become back user only when exec'ing. For some reason $@ does not work, so use a variable set to $@.
-rwxr-xr-xcommon/run-in-cgroup.sh11
1 files changed, 6 insertions, 5 deletions
diff --git a/common/run-in-cgroup.sh b/common/run-in-cgroup.sh
index 8794cd4289..3f57857c59 100755
--- a/common/run-in-cgroup.sh
+++ b/common/run-in-cgroup.sh
@@ -5,6 +5,8 @@ if [ -z "$CPUSPEC" ] || [ "$#" -lt 1 ]; then
exit 1
fi
+ARGS="$@"
+
set +e
if type systemd-run >/dev/null 2>&1 ; then # systemd
@@ -17,12 +19,11 @@ elif type loginctl >/dev/null 2>&1 ; then #elogind
sudo sh -c "echo +cpuset > /sys/fs/cgroup/cgroup.subtree_control"
(
sudo sh -c "echo $BASHPID > /sys/fs/cgroup/jhalfs/cgroup.procs"
- sudo -u $(whoami) sh <<EOF
+ sudo sh -c "
SESS_CGROUP=/sys/fs/cgroup/\$XDG_SESSION_ID
- sudo sh -c "echo \\"$CPUSPEC\\" > \$SESS_CGROUP/cpuset.cpus"
- (sudo sh -c "echo \$BASHPID > \$SESS_CGROUP/cgroup.procs" &&
- exec $@)
-EOF
+ echo $CPUSPEC > \$SESS_CGROUP/cpuset.cpus
+ ( echo \$BASHPID > \$SESS_CGROUP/cgroup.procs &&
+ exec sudo -u $(whoami) $ARGS )"
)
sudo rmdir /sys/fs/cgroup/jhalfs
else # no session manager