multi user containerization* upgrades

This commit is contained in:
Brian Seymour 2018-10-24 00:34:33 -05:00
parent 7891b676eb
commit d5e61f6922
15 changed files with 54 additions and 30 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
api/api
lxc/i

View File

@ -24,6 +24,17 @@ chmod 777 $basepath/tmp/$epoch
cat $2 > $basepath$filepath
echo "${@:3}" > $basepath$argpath
# process incrementor
oldinc=$(cat $dir/i | awk '{$1=$1};1')
newinc=$(expr $oldinc + 1)
if (( newinc >= 151 )); then
newinc=1
echo 1 > $dir/i
else
echo $newinc > $dir/i
fi
bin=
case "$lang" in
"python2")
@ -67,7 +78,14 @@ case "$lang" in
exit
esac
# runner
lxc-attach -n piston -- \
/bin/bash -c "PATH=/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin bash /exec/$bin $epoch 2>&1 | head -c 65536"
/bin/bash -c "\
PATH=/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin \
bash /exec/$bin $newinc $epoch 2>&1 | head -c 65536"
# process janitor
lxc-attach -n piston -- \
/bin/bash -c "for i in {1..2000}; do pkill -u runner$newinc --signal SIGKILL; done" > /dev/null 2>&1 &
rm -rf $basepath/tmp/$epoch

View File

@ -1,3 +1,3 @@
cd /tmp/$1
cd /tmp/$2
timeout -s KILL 10 gcc -o binary -x c code.code
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' ./binary"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ./binary"

View File

@ -1,3 +1,3 @@
cd /tmp/$1
cd /tmp/$2
timeout -s KILL 10 g++ -o binary -x c++ code.code
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' ./binary"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ./binary"

View File

@ -1,3 +1,3 @@
cd /tmp/$1
cd /tmp/$2
timeout -s KILL 10 mcs $(echo code.code | sed 's/\///') -out:binary
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' mono binary"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 mono binary"

View File

@ -1,6 +1,6 @@
cd /tmp/$1
cd /tmp/$2
cp code.code interim.go
file="interim.go"
GOROOT=/usr/lib/go timeout -s KILL 10 go build $file
file=${file%%.*}
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' ./$file"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ./$file"

View File

@ -1,6 +1,6 @@
cd /tmp/$1
cd /tmp/$2
cp code.code interim.java
name=$(cat interim.java | grep -Eo 'public\s+class\s+([A-Za-z0-9]+)' | sed -n 's/ */ /gp' | cut -d' ' -f3)
mv interim.java $name.java
timeout -s KILL 10 javac $name.java
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' java $name"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 java $name"

View File

@ -1,4 +1,4 @@
cd /tmp/$1
cd /tmp/$2
timeout -s KILL 10 nasm -f elf64 -o binary.o code.code
timeout -s KILL 10 ld binary.o -o binary
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' ./binary"
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ./binary"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' nodejs code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 nodejs code.code"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' php code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 php code.code"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' python2 code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 python2 code.code"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' python3.6 code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 python3.6 code.code"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' Rscript code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 Rscript code.code"

View File

@ -1,2 +1,2 @@
cd /tmp/$1
timeout -s KILL 3 runuser ubuntu -c "cat args.args | xargs -d '\n' ruby code.code"
cd /tmp/$2
runuser -l runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ruby code.code"

View File

@ -15,11 +15,16 @@ sed -i 's/http:\/\/archive.ubuntu.com\/ubuntu/http:\/\/mirror.math.princeton.edu
apt-get update
apt-get -y install tzdata nano dpkg-dev build-essential python python3 ruby nodejs golang php7.2 r-base mono-complete nasm openjdk-8-jdk
# apply limits
echo 'ubuntu soft nproc 16' >> /etc/security/limits.conf
echo 'ubuntu hard nproc 16' >> /etc/security/limits.conf
echo 'ubuntu soft nofile 1024' >> /etc/security/limits.conf
echo 'ubuntu hard nofile 1024' >> /etc/security/limits.conf
# create users and apply limits
for i in {1..150}; do
#userdel runner$i
useradd -M runner$i
usermod -d /tmp runner$i
echo "runner$i soft nproc 64" >> /etc/security/limits.conf
echo "runner$i hard nproc 64" >> /etc/security/limits.conf
echo "runner$i soft nofile 2048" >> /etc/security/limits.conf
echo "runner$i hard nofile 2048" >> /etc/security/limits.conf
done
# remove home dir
rm -rf /home/ubuntu