Source code
Revision control
Copy as Markdown
Other Tools
#!/usr/bin/env bash
set -ve
test "$(whoami)" == 'root'
# We do want to install recommended packages.
sed -i /APT::Install-Recommends/d /etc/apt/apt.conf.d/99taskcluster
# To speed up docker image build times as well as number of network/disk I/O
# build a list of packages to be installed and call it in one go.
apt_packages=()
apt_packages+=('autoconf2.13')
apt_packages+=('bluez-cups')
apt_packages+=('build-essential')
apt_packages+=('ca-certificates')
apt_packages+=('ccache')
apt_packages+=('curl')
apt_packages+=('dbus-x11')
apt_packages+=('fontconfig')
apt_packages+=('fonts-dejavu')
apt_packages+=('fonts-kacst')
apt_packages+=('fonts-kacst-one')
apt_packages+=('fonts-liberation')
apt_packages+=('fonts-stix')
apt_packages+=('fonts-unfonts-core')
apt_packages+=('fonts-unfonts-extra')
apt_packages+=('fonts-vlgothic')
apt_packages+=('g++-multilib')
apt_packages+=('gcc-multilib')
apt_packages+=('gir1.2-gnomebluetooth-3.0')
apt_packages+=('gnome-icon-theme')
apt_packages+=('gnome-keyring')
apt_packages+=('gstreamer1.0-gtk3')
apt_packages+=('gstreamer1.0-plugins-base')
apt_packages+=('gstreamer1.0-plugins-good')
apt_packages+=('gstreamer1.0-tools')
apt_packages+=('gstreamer1.0-pulseaudio')
apt_packages+=('language-pack-en-base')
apt_packages+=('libc6-dbg')
apt_packages+=('libasound2-dev')
apt_packages+=('libavcodec-extra60')
apt_packages+=('libcanberra-gtk3-module')
apt_packages+=('libcanberra-pulse')
apt_packages+=('libcurl4-openssl-dev')
apt_packages+=('libdbus-1-dev')
apt_packages+=('libfreetype6')
apt_packages+=('libgstreamer-plugins-base1.0-dev')
apt_packages+=('libgstreamer1.0-dev')
apt_packages+=('libgtk-3-0t64')
apt_packages+=('libiw-dev')
apt_packages+=('libx11-xcb1')
apt_packages+=('libxcb1')
apt_packages+=('libxcb-render0')
apt_packages+=('libxcb-shm0')
apt_packages+=('libxcb-glx0')
apt_packages+=('libxcb-shape0')
apt_packages+=('libnotify-dev')
apt_packages+=('libpulse0')
apt_packages+=('libpulse-dev')
apt_packages+=('libxt-dev')
apt_packages+=('libxxf86vm1')
apt_packages+=('llvm')
apt_packages+=('llvm-dev')
apt_packages+=('llvm-runtime')
apt_packages+=('mesa-common-dev')
apt_packages+=('net-tools')
apt_packages+=('pulseaudio-utils')
apt_packages+=('python3-pip')
apt_packages+=('python3-pyatspi')
apt_packages+=('qemu-system-x86')
apt_packages+=('rlwrap')
apt_packages+=('screen')
apt_packages+=('software-properties-common')
apt_packages+=('sudo')
apt_packages+=('ubuntu-desktop')
apt_packages+=('unzip')
apt_packages+=('uuid')
apt_packages+=('wget')
apt_packages+=('xvfb')
apt_packages+=('xwit')
apt_packages+=('yasm')
apt_packages+=('zip')
# xvinfo for test-linux.sh to monitor Xvfb startup
apt_packages+=('x11-utils')
apt_packages+=('x11vnc')
apt_packages+=('x11-xserver-utils')
# Build a list of packages to install from the multiverse repo.
apt_packages+=('ubuntu-restricted-extras')
# APT update takes very long on Ubuntu. Run it at the last possible minute.
apt-get update
# Also force the cleanup after installation of packages to reduce image size.
apt-get install --allow-downgrades "${apt_packages[@]}"
# gsd-power can't start without logind, but it's marked as required in the
# gnome-session config; remove it so the session doesn't start with the fail
# whale
sed -i 's/org.gnome.SettingsDaemon.Power;//' /usr/share/gnome-session/sessions/ubuntu.session
# Enable i386 packages
dpkg --add-architecture i386
apt-get update
# Make sure we have libraries for 32-bit tests
apt_packages=()
apt_packages+=('libavcodec-extra60:i386')
apt_packages+=('libpulse0:i386')
apt_packages+=('libxt6:i386')
apt_packages+=('libxtst6:i386')
apt_packages+=('libsecret-1-0:i386')
apt_packages+=('libgtk-3-0:i386')
apt_packages+=('libx11-xcb1:i386')
apt_packages+=('libxcb1:i386')
apt_packages+=('libasound2:i386')
apt-get install --allow-downgrades "${apt_packages[@]}"
rm -rf /var/lib/apt/lists/*
# Build a list of packages to purge from the image.
apt_packages=()
apt_packages+=('gnome-calendar')
apt_packages+=('gnome-initial-setup')
apt_packages+=('libx11-doc')
apt_packages+=('manpages-dev')
apt_packages+=('orca')
apt_packages+=('rhythmbox')
apt_packages+=('thunderbird')
apt_packages+=('ubuntu-release-upgrader*')
apt_packages+=('update-manager-core')
apt_packages+=('update-manager')
apt_packages+=('yelp')
# Purge unnecessary packages
apt-get purge "${apt_packages[@]}"
# We don't need no docs!
rm -rf /usr/share/help /usr/share/doc /usr/share/man
# Remove all locale files other than en_US.UTF-8
rm -rf /usr/share/locale/ /usr/share/locale-langpack/ /usr/share/locales/
# Remove systemd tmpfiles that confuse gnome-shell into thinking it should talk to logind
rm -rf /run/systemd/seats
# Further cleanup
apt-get autoremove --purge
rm -f "$0"