summary refs log tree commit diff
path: root/bin/enter
diff options
context:
space:
mode:
Diffstat (limited to 'bin/enter')
-rwxr-xr-xbin/enter20
1 files changed, 16 insertions, 4 deletions
diff --git a/bin/enter b/bin/enter
index 77d79e3..68db3d5 100755
--- a/bin/enter
+++ b/bin/enter
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 set -e
 [ -n "$DEBUG" ] && set -x
 
@@ -11,6 +11,7 @@ become=
 verbose=
 cwd=$PWD
 no_tty=
+read_only=
 
 usage() {
 	printf "usage: %s OPTIONS -- [ARGS]\n" "$(basename "$0")"
@@ -24,12 +25,13 @@ usage() {
 	printf "  -v (be verbose)\n"
 	printf "  -c CWD\n"
 	printf "  -T (not tty)\n"
+	printf "  -W (readonly)\n"
 	printf "\n"
 	printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n"
 	exit 2
 }
 
-while getopts t:i:f:o:c:vBDTh o; do
+while getopts t:i:f:o:c:vBDTWh o; do
 	case $o in
 		t) target="$OPTARG" ;;
 		i) img="$OPTARG" ;;
@@ -40,6 +42,7 @@ while getopts t:i:f:o:c:vBDTh o; do
 		B) become=1 ;;
 		v) verbose=1 ;;
 		T) no_tty=1 ;;
+		W) read_only=1 ;;
 		h | ?) usage ;;
 	esac
 done
@@ -85,6 +88,9 @@ extra_args=
 [ -z "$no_tty" ] \
 	&& extra_args="${extra_args} --tty"
 
+[ -n "$read_only" ] \
+	&& read_only=",ro"
+
 ep="sh"
 [ -n "$1" ] && {
 	ep="$1"
@@ -93,8 +99,14 @@ ep="sh"
 
 [ -n "$verbose" ] && { set -x; }
 
-cname=$(mktemp --dry-run enterXXXX)
+if dev=$(echo "$@" | grep -Po '\/dev\/[^ ]*'); then
+	extra_args="${extra_args} --device=${dev}"
+fi
+
+cname=$(mktemp --dry-run enter_XXXX)
 exec docker run --name "$cname" --rm -i \
+	--env-file <(safe-env) \
 	--uts host \
+	--ipc host \
 	--entrypoint="$ep" \
-	--mount=type=bind,src="$cwd",dst=/src -w /src $extra_args "$img" $@
+	--mount=type=bind,src="$cwd",dst=/src"$read_only" -w /src $extra_args "$img" $@