#!/bin/sh set -e docker_version=19.03.13 #apt_yum_url="https://download.docker.com" apt_yum_url="https://mirrors.aliyun.com/docker-ce" rhel_repos=" rhel-7-server-extras-rpms rhui-REGION-rhel-server-extras rhui-rhel-7-server-rhui-extras-rpms rhui-rhel-7-for-arm-64-extras-rhui-rpms " mirror='' while [ $# -gt 0 ]; do case "$1" in --mirror) mirror="$2" shift ;; *) echo "Illegal option $1" ;; esac shift $(( $# > 0 ? 1 : 0 )) done case "$mirror" in AzureChinaCloud) apt_yum_url="https://mirror.azure.cn/docker-ce" ;; Aliyun) apt_yum_url="https://mirrors.aliyun.com/docker-ce" ;; esac command_exists() { command -v "$@" > /dev/null 2>&1 } config_daemon(){ sudo mkdir -p /etc/docker sudo cat > /etc/docker/daemon.json < /dev/null 2>&1 lsb_release_exit_code=$? set -e # Check if the command has exited successfully, it means we're in a forked distro if [ "$lsb_release_exit_code" = "0" ]; then # Print info about current distro cat <&1 | tr '[:upper:]' '[:lower:]' | grep -E 'id' | cut -d ':' -f 2 | tr -d '[[:space:]]') dist_version=$(lsb_release -a -u 2>&1 | tr '[:upper:]' '[:lower:]' | grep -E 'codename' | cut -d ':' -f 2 | tr -d '[[:space:]]') # Print info about upstream distro cat <&2 <&2 <&2 <&2 <> /etc/apt/sources.list") fi else pre_reqs="$pre_reqs software-properties-common" fi if ! command -v gpg > /dev/null; then pre_reqs="$pre_reqs gnupg" fi apt_repo="deb [arch=$(dpkg --print-architecture)] ${apt_yum_url}/linux/$lsb_dist $dist_version stable" ( set -x $sh_c 'apt-get update' $sh_c "apt-get install -y -q $pre_reqs" curl -fsSl "${apt_yum_url}/linux/$lsb_dist/gpg" | $sh_c 'apt-key add -' $sh_c "add-apt-repository \"$apt_repo\"" if [ "$lsb_dist" = "debian" ] && [ "$dist_version" = "wheezy" ]; then $sh_c 'sed -i "/deb-src.*download\.docker/d" /etc/apt/sources.list' fi $sh_c 'apt-get update' $sh_c "apt-get install -y -q docker-ce=$(apt-cache madison docker-ce | grep ${docker_version} | head -n 1 | cut -d ' ' -f 4)" ) config_daemon exit 0 ;; centos|fedora|redhat|oraclelinux) yum_repo="${apt_yum_url}/linux/centos/docker-ce.repo" if [ "$lsb_dist" = "fedora" ]; then if [ "$dist_version" -lt "24" ]; then echo "Error: Only Fedora >=24 are supported by $url" exit 1 fi pkg_manager="dnf" config_manager="dnf config-manager" enable_channel_flag="--set-enabled" pre_reqs="dnf-plugins-core" else pkg_manager="yum" config_manager="yum-config-manager" enable_channel_flag="--enable" pre_reqs="yum-utils" fi ( set -x if [ "$lsb_dist" = "redhat" ]; then for rhel_repo in $rhel_repos ; do $sh_c "$config_manager $enable_channel_flag $rhel_repo" done fi $sh_c "$pkg_manager install -y -q $pre_reqs" $sh_c "$config_manager --add-repo $yum_repo" $sh_c "$pkg_manager makecache fast" $sh_c "$pkg_manager install -y -q docker-ce-${docker_version}" if [ -d '/run/systemd/system' ]; then $sh_c 'service docker start' else $sh_c 'systemctl start docker' fi ) config_daemon exit 0 ;; esac # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-'EOF'", spaces are kept in the output cat >&2 <