piston/lxc/execute

135 lines
2.0 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
dir="$( cd "$( dirname "$0" )" && pwd )"
2018-11-02 06:21:22 +01:00
touch $dir/lockfile
if [ -z "$1" ]; then
echo "invalid args"
exit
fi
if [ -z "$2" ]; then
echo "invalid args"
exit
fi
lang=$1
2018-11-02 06:21:22 +01:00
epoch=$(date +%s%N)
basepath="/var/lib/lxc/piston/rootfs"
filepath="/tmp/$epoch/code.code"
argpath="/tmp/$epoch/args.args"
arg=$(basename $argpath)
# write arg file
mkdir -p $basepath/tmp/$epoch
chmod 777 $basepath/tmp/$epoch
cat $2 > $basepath$filepath
echo "${@:3}" > $basepath$argpath
2018-10-24 07:34:33 +02:00
# process incrementor
2018-11-02 06:21:22 +01:00
exec 200>$dir/lockfile
flock -x 200
2018-10-24 07:34:33 +02:00
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
2018-11-02 06:21:22 +01:00
exec 200>&-
2018-10-24 07:34:33 +02:00
bin=
case "$lang" in
"awk")
bin=awk
;;
"bash")
bin=bash
;;
2020-10-03 01:51:00 +02:00
"brainfuck" | "bf")
bin=brainfuck
;;
"c")
bin=c
;;
"cpp" | "c++")
bin=cpp
;;
"csharp" | "cs" | "c#")
bin=csharp
;;
"elixir" | "exs")
bin=elixir
;;
"go")
bin=go
;;
"java")
bin=java
;;
2020-05-02 06:00:46 +02:00
"julia" | "jl")
bin=julia
;;
2020-06-04 21:01:14 +02:00
"kotlin")
bin=kotlin
;;
2020-10-07 06:40:14 +02:00
"lua")
bin=lua
;;
"nasm" | "asm")
bin=nasm
;;
"node" | "js" | "javascript")
bin=node
;;
2020-06-05 03:01:21 +02:00
"perl")
bin=perl
;;
"php")
bin=php
;;
"python2")
bin=python2
;;
"python3" | "python")
bin=python3
;;
"ruby")
bin=ruby
2018-10-31 04:51:00 +01:00
;;
2019-05-31 21:01:10 +02:00
"rust")
bin=rust
;;
"swift")
bin=swift
;;
2020-06-09 05:46:39 +02:00
"emacs" | "elisp" | "el")
2020-02-29 17:29:22 +01:00
bin=emacs
;;
"bash")
bin=bash
;;
2019-08-08 18:42:30 +02:00
"typescript" | "ts")
bin=typescript
;;
*)
echo "invalid language"
exit
esac
2018-10-24 07:34:33 +02:00
# runner
timeout -s KILL 10 \
lxc-attach --clear-env -n piston -- \
/bin/bash -l -c "bash /exec/$bin $newinc $epoch 2>&1 | head -c 65536"
2018-10-24 07:34:33 +02:00
# process janitor
lxc-attach --clear-env -n piston -- \
/bin/bash -l -c "\
2018-10-25 01:34:25 +02:00
for i in {1..100}; do pkill -u runner$newinc --signal SIGKILL; done ;\
2018-11-02 01:44:25 +01:00
find /tmp -user runner$newinc -exec /bin/rm -rf {} \;\
2018-10-25 01:40:21 +02:00
" > /dev/null 2>&1 &
2018-10-22 23:53:55 +02:00
rm -rf $basepath/tmp/$epoch