#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail

# Enable overlayfs for dind if it can be tested to work.
function enable-overlay-storage() {
  local storage_dir=${1:-/var/lib/docker}

  local msg=""

  if grep -q overlay /proc/filesystems; then
    # Smoke test the overlay filesystem:

    # 1. create smoke dir in the storage dir being mounted
    local d="${storage_dir}/smoke"
    mkdir -p "${d}/upper" "${d}/lower" "${d}/work" "${d}/mount"

    # 2. try to mount an overlay fs on top of the smoke dir
    local overlay_works=1
    mount -t overlay overlay\
          -o"lowerdir=${d}/lower,upperdir=${d}/upper,workdir=${d}/work"\
          "${d}/mount" &&\
    # 3. try to write a file in the overlay mount
          echo foo > "${d}/mount/probe" || overlay_works=

    umount -f "${d}/mount" || true
    rm -rf "${d}" || true

    if [[ -n "${overlay_works}" ]]; then
      msg="Enabling overlay storage for docker-in-docker"
      sed -i -e 's+vfs+overlay+' /etc/sysconfig/docker-storage
    fi
  fi

  if [[ -z "${msg}" ]]; then
    msg="WARNING: Unable to enable overlay storage for docker-in-docker"
  fi

  echo "${msg}"
}

mount --make-shared /
mount --make-shared /run
enable-overlay-storage