diff --git a/Tools/setup/requirements.txt b/Tools/setup/requirements.txt
index 45ce9f7186b1e2c1db1aa2e18286851c9aa089f3..86fbb688b338bca25f5c96c803462e5e62507bf2 100644
--- a/Tools/setup/requirements.txt
+++ b/Tools/setup/requirements.txt
@@ -1,10 +1,12 @@
 argparse>=1.2
+cerberus
 empy>=3.3
 jinja2>=2.8
 numpy>=1.13
 pandas>=0.21
 pyserial>=3.0
 pyulog>=0.5.0
+pyyaml
 setuptools>=39.2.0
 toml>=0.9
 wheel>=0.31.1
diff --git a/Tools/setup/ubuntu.sh b/Tools/setup/ubuntu.sh
index 4c1d859db761f90c3110f197a8acd694e688c75c..211553335e1d435586494abe49f1d68043a02fa7 100755
--- a/Tools/setup/ubuntu.sh
+++ b/Tools/setup/ubuntu.sh
@@ -1,5 +1,20 @@
 #! /usr/bin/env bash
 
+
+# detect if running in docker
+if [ -f /.dockerenv ]; then
+	echo "Running within docker, installing initial dependencies";
+	apt-get --quiet -y update && apt-get --quiet -y install \
+		ca-certificates \
+		curl \
+		gnupg \
+		gosu \
+		lsb-core \
+		sudo \
+		wget \
+		;
+fi
+
 # script directory
 DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
 
@@ -18,27 +33,32 @@ then
 elif [[ "${UBUNTU_RELEASE}" == "18.04" ]]
 then
 	echo "Ubuntu 18.04"
-	echo "WARNING, instructions only tested on Ubuntu 16.04"
 fi
 
 export DEBIAN_FRONTEND=noninteractive
+
 sudo apt-get update -yy --quiet
 sudo apt-get -yy --quiet --no-install-recommends install \
+	astyle \
 	bzip2 \
-	ca-certificates \
 	ccache \
 	cmake \
+	cppcheck \
+	doxygen \
 	g++ \
 	gcc \
+	gdb \
 	git \
 	lcov \
 	make \
 	ninja-build \
-	python-pip
+	python-pip \
+	python-pygments \
+	python-setuptools \
 	rsync \
+	shellcheck \
 	unzip \
 	wget \
-	wget \
 	xsltproc \
 	zip
 
@@ -50,4 +70,8 @@ python -m pip install --user -r ${DIR}/requirements.txt
 # TODO: only install when necessary
 sudo apt-get -y --quiet --no-install-recommends install \
 	default-jre-headless \
-	default-jdk-headless \
+	default-jdk-headless
+
+# TODO: nuttx, raspberrypi, armhf generic
+
+# TODO: gazebo or ROS optional