#!/usr/bin/env bash # Copyright 2019 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script is for installing node problem detector (NPD) on a running node # in metric-only mode, as a setup for NPD e2e tests. set -o errexit set -o nounset set -o pipefail readonly BIN_DIR=/home/kubernetes/bin readonly CONFIG_DIR=/home/kubernetes/node-problem-detector/config function print-help() { echo "Usage: e2e-install.sh [flags] [command]" echo echo "Available flags:" echo " -t [TARBALL] Specify the path of the NPD tarball (generated by 'make build-tar')." echo echo "Available commands:" echo " help Print this help message" echo " install Installs NPD to the this machine" echo echo "Examples:" echo " e2e-install.sh help" echo " e2e-install.sh -t /tmp/npd.tar.gz install" } function install-npd() { if [[ -z "${TARBALL}" ]]; then echo "ERROR: tarball flag is missing." exit 1 fi readonly workdir=$(mktemp -d) tar -xf "${TARBALL}" --directory "${workdir}" echo "Preparing NPD binary directory." mkdir -p "${BIN_DIR}" mount --bind "${BIN_DIR}" "${BIN_DIR}" # Below remount is to work around COS's noexec mount on /home. mount -o remount,exec "${BIN_DIR}" echo "Stopping NPD" systemctl stop node-problem-detector.service || true echo "Installing NPD binary." cp "${workdir}"/bin/node-problem-detector "${BIN_DIR}" echo "Installing log-counter binary." cp "${workdir}"/bin/log-counter "${BIN_DIR}" echo "Installing NPD configurations." mkdir -p "${CONFIG_DIR}" cp -r "${workdir}"/config/* "${CONFIG_DIR}" echo "Installing NPD systemd service." cp "${workdir}"/config/systemd/node-problem-detector-metric-only.service /etc/systemd/system/node-problem-detector.service echo "Installing problem maker binary, used only for e2e testing." cp "${workdir}"/test/bin/problem-maker "${BIN_DIR}" rm -rf "${workdir}" # Start systemd service. echo "Starting NPD systemd service." systemctl daemon-reload systemctl start node-problem-detector.service } function main() { case ${1:-} in help) print-help;; install) install-npd;; *) print-help;; esac } TARBALL="" while getopts "t:" opt; do case ${opt} in t) TARBALL="${OPTARG}";; esac done shift "$((OPTIND-1))" main "${@}"