kata-containers/tools/packaging/static-build/scripts/kata-configure-docker.sh
Daniel Knittl-Frank fdcde7968a cli: use new prefixless config options in tools scripts
Update all tools/packaging scripts to prefer the new options over the
old ones (e.g. `--config` instead of `--kata-config`).

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
2021-02-10 07:55:18 +01:00

147 lines
3.2 KiB
Bash

#!/bin/bash
# Copyright (c) 2019 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#
# Description: Script to configure Docker for the static
# version of Kata Containers.
[ -z "${DEBUG}" ] || set -x
set -o errexit
set -o nounset
set -o pipefail
docker_config_dir="/etc/docker"
docker_config_file="${docker_config_file:-${docker_config_dir}/daemon.json}"
# The static version of Kata Containers is entirely contained within
# this directory.
readonly static_base_dir="/opt/kata"
# Path to runtime in static archive file
readonly runtime_path="${static_base_dir}/bin/kata-runtime"
die()
{
local msg="$*"
echo >&2 "ERROR: $msg"
exit 1
}
info()
{
local msg="$*"
echo >&2 "INFO: $msg"
}
configure_docker()
{
local file="$1"
[ -z "$file" ] && die "need file"
mkdir -p "${docker_config_dir}"
if [ -e "$docker_config_file" ]
then
local today=$(date '+%Y-%m-%d')
local backup="${docker_config_file}.${today}"
info "Backing up original Docker config file '$docker_config_file' to '$backup'"
sudo cp "${docker_config_file}" "${docker_config_file}.${today}"
else
# Create a minimal valid JSON document
echo "{}" > "${docker_config_file}"
fi
local config_files=$(tar tvf "$file" |\
grep "/configuration-.*\.toml" |\
grep -v -- '->' |\
awk '{print $NF}' |\
sed 's/^\.//g' || true)
[ -z "$config_files" ] && die "cannot find any configuration files in '$file'"
local config
local -a runtimes
for config in $(echo "$config_files" | tr '\n' ' ')
do
local runtime
runtime=$(echo "$config" |\
awk -F \/ '{print $NF}' |\
sed -e 's/configuration/kata/g' -e 's/\.toml//g')
runtimes+=("$runtime")
local result
result=$(cat "$docker_config_file" |\
jq \
--arg config "$config" \
--arg runtime "$runtime" \
--arg runtime_path "$runtime_path" \
'.runtimes[$runtime] = {path: $runtime_path, "runtimeArgs": ["--config", $config]}')
echo "$result" > "$docker_config_file"
done
info "Validating $docker_config_file"
jq -S . "$docker_config_file" &>/dev/null
info "Restarting Docker to apply new configuration"
$chronic sudo systemctl restart docker
info "Docker configured for the following additional runtimes: ${runtimes[@]}"
}
setup()
{
source "/etc/os-release" || source "/usr/lib/os-release"
# Used to manipulate $docker_config_file
local pkg="jq"
case "$ID" in
opensuse*) distro="opensuse" ;;
*) distro="$ID" ;;
esac
# Use chronic(1) if available
chronic=
command -v chronic && chronic=chronic
if command -v "$pkg" &>/dev/null
then
return 0
fi
info "Cannot find $pkg command so installing package"
case "$distro" in
centos|rhel) $chronic sudo -E yum -y install "$pkg" ;;
debian|ubuntu) $chronic sudo -E apt-get --no-install-recommends install -y "$pkg" ;;
fedora) $chronic sudo -E dnf -y install "$pkg" ;;
opensuse|sles) $chronic sudo -E zypper -y install "$pkg" ;;
*) die "do not know how to install command $pkg' for distro '$distro'" ;;
esac
}
main()
{
local file="$1"
[ -z "$file" ] && die "need full path to Kata Containers static archive file"
echo "$file" | grep -q "^kata-static-.*\.tar.xz" || die "invalid file: '$file'"
[ $(id -u) -eq 0 ] || die "must be run as root"
setup
configure_docker "$file"
}
main "$@"