## Base packages and setup
export DEBIAN_FRONTEND=noninteractive
echo "exit 101" > /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d
apt-get clean
apt-get update

# Useful tools
apt-get -y install curl wget tmux vim-nox byobu iputils-ping traceroute htop tree lsof

# Add apt-mk repository
echo "deb [arch=amd64] http://apt-mk.mirantis.com/trusty/ nightly salt" > /etc/apt/sources.list.d/mcp_salt.list
echo "deb [arch=amd64] http://apt-mk.mirantis.com/trusty/ nightly extra" > /etc/apt/sources.list.d/mcp_extra.list
curl -sf http://apt-mk.mirantis.com/public.gpg | apt-key add -

# Cleanup old kernels, ensure latest is installed via virtual package
apt-get purge -y linux-image-* linux-headers-*
if [ ! -f /tmp/no_install_kernel ]; then
    apt-get install -y linux-generic-lts-xenial

    # Update grub cmdline
    sed -i 's|GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"|g' /etc/default/grub
    sed -i 's|GRUB_CMDLINE_LINUX=.*|GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"|g' /etc/default/grub
    update-grub
fi

apt-get -y upgrade
apt-get -y dist-upgrade

apt-get autoremove --purge

# Tmux fixes
cat << 'EOF' >> /etc/tmux.conf
set -g default-terminal "screen-256color"
set -g set-titles on
set -g xterm-keys on
EOF

# Install common prerequisites
apt-get -y install apt-transport-https python-apt python-m2crypto python-psutil

# Setup cloud-init
apt-get -y install cloud-init

# Motd
apt-get install -y update-motd
rm -f /etc/update-motd.d/*
cat << EOF >> /etc/update-motd.d/52-info
Ubuntu 14.04 "Trusty" Mirantis cloud image
Build date: $(date -u -R)

EOF
chmod +x /etc/update-motd.d/52-info
