Перейти к основному содержимому

5.2.1.2.1. Containerd

Этапы установки компонента

  • Создание рабочих директорий.
  • Переменные окружения.
  • Инструкция загрузки.
  • Настройка прав.
  • Сервис загрузки.
  • Запуск сервиса загрузки.

Создание рабочих директорий

mkdir -p /etc/default/containerd

Переменные окружения

cat <<EOF > /etc/default/containerd/download.env
COMPONENT_VERSION="1.7.19"
REPOSITORY="https://github.com/containerd/containerd/releases/download"
EOF

Инструкция загрузки

cat <<"EOF" > /etc/default/containerd/download-script.sh
#!/bin/bash
set -Eeuo pipefail


COMPONENT_VERSION="${COMPONENT_VERSION:-1.7.19}"
REPOSITORY="${REPOSITORY:-https://github.com/containerd/containerd/releases/download}"
PATH_BIN="${REPOSITORY}/v${COMPONENT_VERSION}/containerd-${COMPONENT_VERSION}-linux-amd64.tar.gz"
PATH_SHA256="${REPOSITORY}/v${COMPONENT_VERSION}/containerd-${COMPONENT_VERSION}-linux-amd64.tar.gz.sha256sum"
INSTALL_PATH="/usr/local/bin/"


LOG_TAG="containerd-installer"
TMP_DIR="$(mktemp -d)"

logger -t "$LOG_TAG" "[INFO] Checking current containerd version..."

CURRENT_VERSION=$($INSTALL_PATH/containerd --version 2>/dev/null | awk '{print $3}' | sed 's/v//') || CURRENT_VERSION="none"
COMPONENT_VERSION_CLEAN=$(echo "$COMPONENT_VERSION" | sed 's/^v//')

logger -t "$LOG_TAG" "[INFO] Current: $CURRENT_VERSION, Target: $COMPONENT_VERSION_CLEAN"

if [[ "$CURRENT_VERSION" != "$COMPONENT_VERSION_CLEAN" ]]; then
logger -t "$LOG_TAG" "[INFO] Download URL: $PATH_BIN"
logger -t "$LOG_TAG" "[INFO] Updating containerd to version $COMPONENT_VERSION_CLEAN..."

cd "$TMP_DIR"
logger -t "$LOG_TAG" "[INFO] Working directory: $PWD"

logger -t "$LOG_TAG" "[INFO] Downloading containerd..."
curl -fsSL -o "containerd-${COMPONENT_VERSION}-linux-amd64.tar.gz" "$PATH_BIN" || { logger -t "$LOG_TAG" "[ERROR] Failed to download containerd"; exit 1; }

logger -t "$LOG_TAG" "[INFO] Downloading checksum file..."
curl -fsSL -o "containerd.sha256sum" "$PATH_SHA256" || { logger -t "$LOG_TAG" "[ERROR] Failed to download checksum file"; exit 1; }

logger -t "$LOG_TAG" "[INFO] Verifying checksum..."
sha256sum -c containerd.sha256sum | grep 'OK' || { logger -t "$LOG_TAG" "[ERROR] Checksum verification failed!"; exit 1; }

logger -t "$LOG_TAG" "[INFO] Extracting files..."
tar -C "$TMP_DIR" -xvf "containerd-${COMPONENT_VERSION}-linux-amd64.tar.gz"

logger -t "$LOG_TAG" "[INFO] Installing binaries..."
install -m 755 "$TMP_DIR/bin/containerd" $INSTALL_PATH
install -m 755 "$TMP_DIR/bin/containerd-shim"* $INSTALL_PATH
install -m 755 "$TMP_DIR/bin/ctr" $INSTALL_PATH

logger -t "$LOG_TAG" "[INFO] Containerd successfully updated to $COMPONENT_VERSION."
rm -rf "$TMP_DIR"

else
logger -t "$LOG_TAG" "[INFO] Containerd is already up to date. Skipping installation."
fi
EOF

Настройка прав

chmod +x /etc/default/containerd/download-script.sh

Сервис загрузки

cat <<EOF > /usr/lib/systemd/system/containerd-install.service
[Unit]
Description=Install and update in-cloud component containerd
After=network.target
Wants=network-online.target

[Service]
Type=oneshot
EnvironmentFile=-/etc/default/containerd/download.env
ExecStart=/bin/bash -c "/etc/default/containerd/download-script.sh"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Запуск сервиса загрузки

systemctl enable containerd-install.service
systemctl start containerd-install.service