Skip to content

Instantly share code, notes, and snippets.

@rajiteh
Last active January 9, 2022 09:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rajiteh/ecf83e43c9c7f8443ff2f398e279c3f1 to your computer and use it in GitHub Desktop.
Save rajiteh/ecf83e43c9c7f8443ff2f398e279c3f1 to your computer and use it in GitHub Desktop.
RancherOS docker version updater.
#!/bin/bash
# RancherOS docker version updater.
# Author: @rajiteh
# License: BSD
#
# How to use:
# You need to use a persistent console (tested on ubuntu).
# Set up the script to be called at console initalization time.
#
# Example cloud-config.yml usage.
#
# write_files:
# - path: /etc/rc.local
# permissions: "0755"
# owner: root
# content: |
# #!/bin/bash
# set -ex
# DOCKER_VERSION=1.12.0
# DOCKER_URL=https://experimental.docker.com/builds/Linux/x86_64/docker-1.12.0.tgz
# SCRIPT_URL=https://gist.githubusercontent.com/rajiteh/ecf83e43c9c7f8443ff2f398e279c3f1/raw/9cba8e0024437a00ae1fd671a1cdebc809961415/switch-rancheros-docker.sh
# _tmp=$(mktemp)
# # Wait for networking to be available.
# for i in {1..15}; do curl -fSso $_tmp $SCRIPT_URL && break || sleep 2; done
# source $_tmp
# rancher:
# console: ubuntu
set -e
echo "DOCKER_VERSION : ${DOCKER_VERSION}"
echo "DOCKER_URL : ${DOCKER_URL}"
if [[ -z "${DOCKER_URL}" ]] || [[ -z "${DOCKER_VERSION}" ]]; then
echo "DOCKER_URL or DOCKER_VERSION not set."
return 1
fi
function get_docker_versions {
c=$(/usr/bin/docker --version | sed -n 's/.*version \([^,]*\).*/\1/p')
d=$(/usr/bin/dockerd --version | sed -n 's/.*version \([^,]*\).*/\1/p')
echo "${c}|${d}"
}
_workdir=/tmp/docker-temp
_installed_versions="$(get_docker_versions)"
_expected_versions="${DOCKER_VERSION}|${DOCKER_VERSION}"
if [[ "${_installed_versions}" == "${_expected_versions}" ]]; then
echo "Docker versions match."
return 0
fi
echo "Detected docker client|server versions: ${_installed_versions}"
mkdir -p "${_workdir}"
rm -rf "${_workdir}/dock*"
cd ${_workdir}
echo "Downloading: ${DOCKER_URL}"
curl -s "${DOCKER_URL}" -o docker.download
echo "Extracting."
tar xzf docker.download
cd docker/
_docker_bins=$(ls docker*)
_bin_paths=("/usr/local/bin" "/usr/bin")
echo "Copying and setting up symlinks."
for bin in ${_docker_bins[@]}; do
sudo rm -f "/usr/local/bin/${bin}-${DOCKER_VERSION}"
sudo cp "${bin}" "/usr/local/bin/${bin}-${DOCKER_VERSION}"
for bin_path in ${_bin_paths[@]}; do
sudo rm -f "${bin_path}/${bin}"
sudo ln -s "/usr/local/bin/${bin}-${DOCKER_VERSION}" "${bin_path}/${bin}"
done
echo "Processed : ${bin}"
done
echo "New docker client|server versions: $(get_docker_versions)"
echo "Restarting.."
sleep 2
sudo reboot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment