#!/usr/bin/env bash -ex
set -euo pipefail
shopt -s inherit_errexit nullglob
YW = ` echo "\033[33m" `
RD = ` echo "\033[01;31m" `
BL = ` echo "\033[36m" `
GN = ` echo "\033[1;92m" `
CL = ` echo "\033[m" `
RETRY_NUM = 10
RETRY_EVERY = 3
NUM = $RETRY_NUM
CM = " ${ GN } ✓ ${ CL } "
CROSS = " ${ RD } ✗ ${ CL } "
BFR = "\\r\\033[K"
HOLD = "-"
function msg_info( ) {
local msg = " $1 "
echo -ne " ${ HOLD } ${ YW } ${ msg } ... "
}
function msg_ok( ) {
local msg = " $1 "
echo -e " ${ BFR } ${ CM } ${ GN } ${ msg } ${ CL } "
}
msg_info "Setting up Container OS "
sed -i " / $LANG / s/\(^# \)// " /etc/locale.gen
locale-gen >/dev/null
while [ " $( hostname -I) " = "" ] ; do
1>& 2 echo -en " ${ CROSS } ${ RD } No Network! "
sleep $RETRY_EVERY
( ( NUM--) )
if [ $NUM -eq 0 ]
then
1>& 2 echo -e " ${ CROSS } ${ RD } No Network After $RETRY_NUM Tries ${ CL } "
exit 1
fi
done
msg_ok "Set up Container OS"
msg_ok " Network Connected: ${ BL } $( hostname -I) "
msg_info "Updating Container OS"
apt update & >/dev/null
apt-get -qqy upgrade & >/dev/null
msg_ok "Updated Container OS"
msg_info "Installing Dependencies"
apt-get install -y curl & >/dev/null
apt-get install -y sudo & >/dev/null
msg_ok "Installed Dependencies"
get_latest_release( ) {
curl -sL https://api.github.com/repos/$1 /releases/latest | grep '"tag_name":' | cut -d'"' -f4
}
DOCKER_LATEST_VERSION = $( get_latest_release "moby/moby" )
PORTAINER_LATEST_VERSION = $( get_latest_release "portainer/portainer" )
DOCKER_COMPOSE_LATEST_VERSION = $( get_latest_release "docker/compose" )
msg_info " Installing Docker $DOCKER_LATEST_VERSION "
DOCKER_CONFIG_PATH = '/etc/docker/daemon.json'
mkdir -p $( dirname $DOCKER_CONFIG_PATH )
cat >$DOCKER_CONFIG_PATH <<'EOF'
{
"log-driver" : "journald"
}
EOF
sh <( curl -sSL https://get.docker.com) & >/dev/null
msg_ok " Installed Docker $DOCKER_LATEST_VERSION "
read -r -p "Would you like to add Portainer? <Y/n> " prompt
if [ [ $prompt = = "y" || $prompt = = "Y" || $prompt = = "yes" || $prompt = = "Yes" ] ]
then
PORTAINER = "Y"
else
PORTAINER = "N"
fi
if [ [ $PORTAINER = = "Y" ] ] ; then
msg_info " Installing Portainer $PORTAINER_LATEST_VERSION "
docker volume create portainer_data >/dev/null
docker run -d \
-p 8000:8000 \
-p 9000:9000 \
--name= portainer \
--restart= always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest & >/dev/null
msg_ok " Installed Portainer $PORTAINER_LATEST_VERSION "
fi
read -r -p "Would you like to add Docker Compose? <Y/n> " prompt
if [ [ $prompt = = "y" || $prompt = = "Y" || $prompt = = "yes" || $prompt = = "Yes" ] ]
then
DOCKER_COMPOSE = "Y"
else
DOCKER_COMPOSE = "N"
fi
if [ [ $DOCKER_COMPOSE = = "Y" ] ] ; then
msg_info " Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION "
DOCKER_CONFIG = ${ DOCKER_CONFIG :- $HOME /.docker }
mkdir -p $DOCKER_CONFIG /cli-plugins
curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION /docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG /cli-plugins/docker-compose
msg_ok " Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION "
fi
PASS = $( grep -w "root" /etc/shadow | cut -b6) ;
if [ [ $PASS != $ ] ] ; then
msg_info "Customizing Container"
rm /etc/motd
rm /etc/update-motd.d/10-uname
touch ~/.hushlogin
GETTY_OVERRIDE = "/etc/systemd/system/container-getty@1.service.d/override.conf"
mkdir -p $( dirname $GETTY_OVERRIDE )
cat << EOF > $GE TTY_OVERRIDE
[ Service]
ExecStart =
ExecStart = -/sbin/agetty --autologin root --noclear --keep-baud tty%I 115200,38400,9600 \$ TERM
EOF
systemctl daemon-reload
systemctl restart $( basename $( dirname $GETTY_OVERRIDE ) | sed 's/\.d//' )
msg_ok "Customized Container"
fi
msg_info "Cleaning up"
apt-get autoremove >/dev/null
apt-get autoclean >/dev/null
rm -rf /var/{ cache,log} /* /var/lib/apt/lists/*
msg_ok "Cleaned"