Upgrade to Debian 9 (a.k.a. stretch)

Change-Id: Ibc0b20a8fd331816cfcccc7a8877efe12fdf8e37
diff --git a/vm/Vagrantfile b/vm/Vagrantfile
index 1404131..e72e26a 100644
--- a/vm/Vagrantfile
+++ b/vm/Vagrantfile
@@ -16,12 +16,12 @@
   # please see the online documentation at vagrantup.com.
 
   # Every Vagrant virtual environment requires a box to build off of.
-  config.vm.box = "debian/jessie64"
+  config.vm.box = "debian/stretch64"
 
   config.vm.provider "virtualbox" do |vb|
     # Don't boot with headless mode
     vb.gui = true
-    vb.name = "FRC971-Development-2017"
+    vb.name = "FRC971-Development-2018"
 
     # There are two shortcuts for modifying number of CPUs and amount of
     # memory. Modify them to your liking.
diff --git a/vm/setup_apt.sh b/vm/setup_apt.sh
index d31a372..a2c2d28 100755
--- a/vm/setup_apt.sh
+++ b/vm/setup_apt.sh
@@ -7,8 +7,8 @@
 
 # Set up contrib and non-free so we can install some more interesting programs.
 cat > /etc/apt/sources.list.d/contrib.list <<EOT
-deb  http://ftp.us.debian.org/debian/ jessie contrib non-free
-deb-src  http://ftp.us.debian.org/debian/ jessie contrib non-free
+deb  http://ftp.us.debian.org/debian/ stretch contrib non-free
+deb-src  http://ftp.us.debian.org/debian/ stretch contrib non-free
 EOT
 
 # Get a list of the latest packages.
diff --git a/vm/setup_code_building.sh b/vm/setup_code_building.sh
index cbb8fcd..0ddc65f 100755
--- a/vm/setup_code_building.sh
+++ b/vm/setup_code_building.sh
@@ -6,15 +6,17 @@
 export DEBIAN_FRONTEND=noninteractive
 
 readonly PKGS=(
-  bazel
-  clang-3.6
-  clang-format-3.5
+  clang-3.9
+  clang-format-3.9
+  curl
   gfortran
   git
+  g++
   libblas-dev
   liblapack-dev
   libpython3-dev
   libpython-dev
+  openjdk-8-jdk
   python3
   python3-matplotlib
   python3-numpy
@@ -23,22 +25,18 @@
   python-scipy
   resolvconf
   ruby
+  zlib1g-dev
 )
 
 # Set up the backports repo.
 cat > /etc/apt/sources.list.d/backports.list <<EOT
-deb http://http.debian.net/debian jessie-backports main
+deb http://http.debian.net/debian stretch-backports main contrib
 EOT
 
 # Set up the LLVM repo.
-cat > /etc/apt/sources.list.d/llvm-3.6.list <<EOT
-deb  http://llvm.org/apt/jessie/ llvm-toolchain-jessie-3.6 main
-deb-src  http://llvm.org/apt/jessie/ llvm-toolchain-jessie-3.6 main
-EOT
-
-# Set up the 971-managed bazel repo.
-cat > /etc/apt/sources.list.d/bazel-971.list <<EOT
-deb http://robotics.mvla.net/files/frc971/packages jessie main
+cat > /etc/apt/sources.list.d/llvm-apt.list <<EOT
+deb http://apt.llvm.org/jessie/ llvm-toolchain-jessie main
+deb-src http://apt.llvm.org/jessie/ llvm-toolchain-jessie main
 EOT
 
 # Enable user namespace for sandboxing.
@@ -46,19 +44,19 @@
 kernel.unprivileged_userns_clone = 1
 EOT
 
-# We need to explicitly pull in the java certificates from backports. Otherwise
-# bazel won't install properly.
-cat > /etc/apt/preferences.d/java_certificates <<EOT
-Package: ca-certificates-java
-Pin: release a=jessie-backports
-Pin-Priority: 900
-EOT
-
 # Accept the LLVM GPG key so we can install their packages.
 wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | apt-key add -
 
 # Install all the packages that we need/want.
 apt-get update
 for pkg in "${PKGS[@]}"; do
-  apt-get install -y -f --force-yes "$pkg"
+  apt-get install -y -f --allow-change-held-packages "$pkg"
 done
+
+# Install bazel if necessary.
+if ! dpkg -l bazel > /dev/null; then
+  pushd /tmp
+  curl -OL 'https://github.com/bazelbuild/bazel/releases/download/0.8.1/bazel_0.8.1-linux-x86_64.deb'
+  dpkg -i bazel_0.8.1-linux-x86_64.deb
+  popd
+fi
diff --git a/vm/setup_extra_storage.sh b/vm/setup_extra_storage.sh
index 5fcf4cb..49951d4 100755
--- a/vm/setup_extra_storage.sh
+++ b/vm/setup_extra_storage.sh
@@ -6,6 +6,8 @@
 readonly EXTRA_USER=user
 readonly EXTRA_STORAGE=/home/"${EXTRA_USER}"
 
+apt-get install whois
+
 if ! grep -q "$EXTRA_STORAGE" /etc/passwd; then
   PASSWORD="$(echo "$EXTRA_USER" | mkpasswd -s)"
   useradd \