134 lines
2.3 KiB
Bash
Executable File
134 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
CONTAINER_IMAGE="registry.makerforce.io/ambrose/env"
|
|
CONTAINER_IMAGE_PWN="registry.makerforce.io/ambrose/pwn"
|
|
CONTAINER_HOME="/home/ambrose"
|
|
|
|
OPTIND=1
|
|
|
|
workdir=""
|
|
delete=""
|
|
name=""
|
|
ports="\n\t"
|
|
volumes=""
|
|
image="$CONTAINER_IMAGE"
|
|
|
|
show_help() {
|
|
cat << EOF
|
|
Usage: ${0##*/} [-xwt] [-n NAME] [-p PORT]... [-v LIST]... [CMD]...
|
|
${0##*/} -l
|
|
${0##*/} -a NAME
|
|
${0##*/} -e NAME [CMD]...
|
|
${0##*/} -h
|
|
Starts an env Docker container. If CMD is specified, starts CMD
|
|
instead of a shell.
|
|
|
|
-x delete Docker container after exit. will loose data
|
|
-w forward \$PWD into $CONTAINER_HOME/src, and start there
|
|
-n NAME give container a NAME
|
|
-p PORT forward host PORT to container PORT
|
|
-v LIST mount volume LIST. specify as LOCAL:MOUNT
|
|
-t run pwntools instead
|
|
-l list running containers and exit
|
|
-a NAME attach to a running container
|
|
-e NAME execute zsh or CMD on a running container
|
|
-h display this help and exit
|
|
|
|
EOF
|
|
}
|
|
|
|
list_running() {
|
|
docker ps \
|
|
--filter \
|
|
label=org.label-schema.vcs-url=https://git.makerforce.io/ambrose/env.git \
|
|
--format \
|
|
"table {{.Names}}\t{{.RunningFor}}\t{{.Ports}}\t{{.Command}}"
|
|
}
|
|
|
|
while getopts "xwn:p:v:tla:e:h" opt; do
|
|
case "$opt" in
|
|
x)
|
|
delete="--rm "
|
|
;;
|
|
w)
|
|
workdir="\n\t--workdir $CONTAINER_HOME/src "
|
|
volumes="$volumes\n\t-v '$PWD':$CONTAINER_HOME/src "
|
|
;;
|
|
n)
|
|
name="--name $OPTARG "
|
|
;;
|
|
p)
|
|
ports="$ports-p $OPTARG:$OPTARG "
|
|
;;
|
|
v)
|
|
volumes="$volumes\n\t-v '$OPTARG' "
|
|
;;
|
|
t)
|
|
image="$CONTAINER_IMAGE_PWN"
|
|
;;
|
|
l)
|
|
list_running
|
|
exit 0
|
|
;;
|
|
a)
|
|
mode_attach="true"
|
|
name="$OPTARG"
|
|
;;
|
|
e)
|
|
mode_execute="true"
|
|
name="$OPTARG"
|
|
;;
|
|
h)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
:)
|
|
echo "Option -$OPTARG requires an argument." >&2
|
|
show_help
|
|
exit 1
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND-1))
|
|
[ "$1" = "--" ] && shift
|
|
|
|
if [ "$ports" = "\n\t" ]; then
|
|
ports=""
|
|
fi
|
|
|
|
if [ "$mode_attach" = "true" ]; then
|
|
docker attach \
|
|
$name
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$mode_execute" = "true" ]; then
|
|
cmd="$@"
|
|
if [ -z "$@" ]; then
|
|
cmd="/bin/zsh"
|
|
fi
|
|
docker exec -it \
|
|
$name \
|
|
$cmd
|
|
exit 0
|
|
fi
|
|
|
|
docker pull $image
|
|
|
|
cmd="\n\
|
|
docker run -it $delete$name$ports$workdir$volumes\n\
|
|
$image \n\
|
|
$@\
|
|
"
|
|
|
|
echo
|
|
echo "Running: $cmd"
|
|
|
|
bash -c "`echo $cmd | tr -d '\n'`" # Ugh...
|