summary refs log tree commit diff
path: root/bin/enter
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2020-06-13 14:23:57 +0200
committerRobert Günzler <r@gnzler.io>2020-06-13 14:23:57 +0200
commit85e4f3c44aa01c6fea732965a747f26731adab73 (patch)
tree7a42f106448a6029e9f5816967c7311ce4084b22 /bin/enter
parent898cd6f445cc995b8383a73ecd1a27c19560f92d (diff)
move some scripts from bin/hibiki to bin
Diffstat (limited to 'bin/enter')
-rwxr-xr-xbin/enter54
1 files changed, 54 insertions, 0 deletions
diff --git a/bin/enter b/bin/enter
new file mode 100755
index 0000000..d646541
--- /dev/null
+++ b/bin/enter
@@ -0,0 +1,54 @@
+#!/bin/sh
+set -e
+[ -n "$DEBUG" ] && set -x
+
+target=
+img=""
+dockerfile="${PWD}/Dockerfile"
+become=
+priv=
+
+usage() {
+	printf "usage: %s OPTIONS -- [DOCKER RUN ARGS]\n" "$(basename "$0")"
+	printf "\n"
+	printf "  -t TARGET\n"
+	printf "  -i IMAGE\n"
+	printf "  -f DOCKERFILE\n"
+	printf "  -u (become user)\n"
+	printf "  -D (run with elevated privileged, but not privileged)\n"
+	printf "\n"
+	printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n"
+	exit 2
+}
+
+while getopts t:i:f:uDh o; do
+	case $o in
+	t) 	target="$OPTARG" ;;
+	i) 	img="$OPTARG" ;;
+	f) 	dockerfile="$OPTARG" ;;
+	u) 	become=1 ;;
+	D)	priv=1 ;;
+	h|?) 	usage ;;
+	esac
+done
+shift $((OPTIND - 1))
+
+[ -z "$img" ] && img="$(basename "$(dirname "$(readlink -f -- "$dockerfile")")")"
+
+extra_args=
+[ -n "$become" ] && extra_args="${extra_args}--user=$(id -u):$(id -g) "
+[ -n "$priv"   ] && {
+	extra_args="${extra_args}--tmpfs=/run --tmpfs=/sys/fs/cgroup ";
+	extra_args="${extra_args}--sysctl=net.ipv4.ip_forward=1 ";
+	extra_args="${extra_args}--security-opt=apparmor:unconfined --security-opt=seccomp:unconfined ";
+	extra_args="${extra_args}--cap-add NET_ADMIN --cap-add SYS_ADMIN --cap-add SYS_RESOURCE ";
+	extra_args="${extra_args}--tmpfs=/var/lib/docker ";
+}
+
+# allow setting this to some non-file value to skip building
+# > enter -i alpine -f none
+# for a quick alpine based container with $PWD mounted in
+[ -f "$dockerfile" ] && \
+	docker build --tag="$img" --target="$target" --file="$dockerfile" "$(dirname "$dockerfile")"
+
+exec docker run --rm -it --mount=type=bind,src="$PWD",dst=/src -w /src $@ $extra_args "$img"