Move lcm certificate to lcm folder in OSM helm chart
[osm/devops.git] / installers / install_docker_ce.sh
index 64c23c2..5010f7e 100755 (executable)
 
 set +eux
 
+function configure_containerd() {
+    echo "Configuring containerd to expose CRI and use systemd cgroup"
+    sudo mv /etc/containerd/config.toml /etc/containerd/config.toml.orig 2>/dev/null
+    sudo bash -c "containerd config default > /etc/containerd/config.toml"
+    sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
+    if [ -n "${DOCKER_PROXY_URL}" ]; then
+        echo "Configuring ${DOCKER_PROXY_URL} as registry mirror in /etc/containerd/config.toml"
+        sudo sed -i "s#\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors\]#\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors\]\n        \[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"\]\n          endpoint = \[\"${DOCKER_PROXY_URL}\"\]\n        \[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.hub.docker.com\"]\n          endpoint = \[\"${DOCKER_PROXY_URL}\"]#" /etc/containerd/config.toml
+    fi
+    if [ -n "${OSM_BEHIND_PROXY}" ] ; then
+        echo "Configuring http proxies in /etc/systemd/system/containerd.service.d/http-proxy.conf"
+        if ! [ -f /etc/systemd/system/containerd.service.d/http-proxy.conf ] ; then
+            sudo mkdir -p /etc/systemd/system/containerd.service.d
+            cat << EOF | sudo tee -a /etc/systemd/system/containerd.service.d/http-proxy.conf
+[Service]
+EOF
+        fi
+        [ -n "${HTTP_PROXY}" ] && sudo bash -c "cat <<EOF >> /etc/systemd/system/containerd.service.d/http-proxy.conf
+Environment=\"HTTP_PROXY=${HTTP_PROXY}\"
+EOF"
+        [ -n "${HTTPS_PROXY}" ] && sudo bash -c "cat <<EOF >> /etc/systemd/system/containerd.service.d/http-proxy.conf
+Environment=\"HTTPS_PROXY=${HTTPS_PROXY}\"
+EOF"
+        [ -n "${NO_PROXY}" ] && sudo bash -c "cat <<EOF >> /etc/systemd/system/containerd.service.d/http-proxy.conf
+Environment=\"NO_PROXY=${NO_PROXY}\"
+EOF"
+    fi
+    sudo systemctl restart containerd
+}
+
 function install_docker_ce() {
     # installs and configures Docker CE
     [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+    echo "Removing previous installation of docker ..."
+    for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
     echo "Installing Docker CE ..."
-    sudo apt-get -qq update
-    sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
-    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add -
-    sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-    sudo apt-get -qq update
+    sudo apt-get -y update
+    sudo apt-get install -y apt-transport-https ca-certificates software-properties-common gnupg
+    sudo install -m 0755 -d /etc/apt/keyrings
+    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
+    sudo chmod a+r /etc/apt/keyrings/docker.gpg
+    echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
+    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
+    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+    sudo apt-get -y update
     sudo apt-get install -y docker-ce
-#    echo "Reconfiguring Docker to use systemd as cgroup driver"
-#    if [ ! -f /etc/docker/daemon.json ]; then
-#        sudo bash -c "cat <<EOF > /etc/docker/daemon.json
-#{
-#  \"exec-opts\": [\"native.cgroupdriver=systemd\"],
-#  \"log-driver\": \"json-file\",
-#  \"log-opts\": {
-#    \"max-size\": \"100m\"
-#  },
-#  \"storage-driver\": \"overlay2\"
-#}
-#EOF"
-#    else
-#        sudo sed -i "s|native.cgroupdriver=cgroupfs|native.cgroupdriver=systemd|" /etc/docker/daemon.json
-#    fi
+
     echo "Adding user to group 'docker'"
     sudo groupadd -f docker
     sudo usermod -aG docker $USER
-    sleep 2
-    #sudo systemctl enable docker
-    #sudo systemctl daemon-reload
-    #sudo systemctl restart docker
-    sudo service docker restart
-    echo "... restarted Docker service"
+
     if [ -n "${DOCKER_PROXY_URL}" ]; then
         echo "Configuring docker proxy ..."
         if [ -f /etc/docker/daemon.json ]; then
@@ -83,22 +100,17 @@ Environment=\"NO_PROXY=${NO_PROXY}\"
 EOF"
     fi
     if [ -n "${DOCKER_PROXY_URL}" ] || [ -n "${OSM_BEHIND_PROXY}" ] ; then
-        #sudo systemctl enable docker
         sudo systemctl daemon-reload
-        #sudo systemctl restart docker
-        sudo service docker restart
-        echo "... restarted Docker service again"
+        sudo systemctl restart docker
+        echo "... restarted Docker service"
     fi
 
-    echo "Configuring containerd"
-    sudo mv /etc/containerd/config.toml /etc/containerd/config.toml.orig 2>/dev/null
-    sudo bash -c "containerd config default > /etc/containerd/config.toml"
-    sudo sed -i "s#\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors\]#\[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors\]\n        \[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"\]\n          endpoint = \[\"${DOCKER_PROXY_URL}\"\]\n        \[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"registry.hub.docker.com\"]\n          endpoint = \[\"${DOCKER_PROXY_URL}\"]#" /etc/containerd/config.toml
-    sudo diff /etc/containerd/config.toml.orig /etc/containerd/config.toml
-    sudo service containerd restart
+    configure_containerd
 
     [ -z "${DEBUG_INSTALL}" ] || ! echo "File: /etc/docker/daemon.json" || cat /etc/docker/daemon.json
-    sg docker -c "docker version" || FATAL "Docker installation failed"
+    echo "Testing Docker CE installation ..."
+    sg docker -c "docker version" || FATAL_TRACK docker_ce "Docker installation failed. Cannot run docker version"
+    sg docker -c "docker run --rm hello-world" || FATAL_TRACK docker_ce "Docker installation failed. Cannot run hello-world"
     echo "... Docker CE installation done"
     [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
     return 0