#!/bin/sh
# Скрипт производит архивацию образов kubernetes указанных версий
# в указанный первым параметром каталог
# Второй параметры задает через запятую архивируемые архитектуры.
# Если второй параметр имеет значение all архивируются все архитектуры: amd64 arm64 arm ppc64le 386
# Третий необязаьельный параметр определяет платформу - k8s-c10f1, k8s-p10. Если не указан, определяется по файлу /etc/os-release
# Скрипт производит загрузку kubernet-образов с регистратора k8s-c10f1 в containers-storage: системы
# с последующим помещением их в указанный первым параметром каталог в подкаталог с именем архитектуры ($ociDir/$arch)
# Для улучшения последующей компресии слои образа помещаются несжатыми (параметр --dest-oci-accept-uncompressed-layers)
# После окончания наполнения подкаталога архитектуры он архивируется, сжимается и помещается в файл $ociDir/$arch.tar.xz
#
# Так как скрипт производит загрузку образов различных архитектур
# последняя загруженная в containers-storage: архитектура может отличаться от текущей архитектуры процессора
# При необходимости нужно будет произвести перезагрузку образов для рабочей архитектуры процессора
export TEXTDOMAINDIR='/usr/share/locale'
export TEXTDOMAIN='podsec-k8s'

PROGRAMM=$0
if [ $# -le 1 ]
then
  echo "$(gettext 'Image archiving directory not specified')" >&2
  echo "$(gettext 'Format'):\n\t$PROGRAMM $(gettext '<image_archiving_directory> <architecture>,<architecture>'),...|all\n')" >&2
  exit 1
fi

if [ $# -lt 2 ]
then
  echo "$(gettext 'No list of architectures specified')" >&2
  echo "$(gettext 'Format'):\n\t$PROGRAMM $(gettext '<image_archiving_directory> <architecture>,<architecture>'),...|all\n')" >&2
  exit 1
fi

if [ $USER != 'root' -o $(id -u) != 0 -o $(id -g) != 0 ]
then
  echo "$(gettext 'Script') $PROGRAMM $(gettext 'must be run as root user')" >&2
  exit 1
fi

if [ ! -d /root/.config/containers ]
then
  mkdir -p /root/.config/containers
fi

if [ -f /root/.config/containers/policy.json ]
then
  mv /root/.config/containers/policy.json /root/.config/containers/policy_prev.json
fi

echo '{"default":[{"type":"insecureAcceptAnything"}]}' |
jq . > /root/.config/containers/policy.json



ociDir=$1
arch=$2
shift;shift
source podsec-u7s-functions
source podsec-get-platform

getPlatform # Устанавливает переменную U7S_PLATFORM
installKubeadm # Устанавливает требуемую доступную версию kubeadm и переменную U7S_KUBEVERSION при ее отсутствии
setRegistryName # устанавливает имя регистратора образов в переменнную U7S_REGISTRY_PLATFORM
U7S_REGISTRY=$U7S_ALTREGISTRY
U7S_REGISTRY_PLATFORM="$U7S_REGISTRY/$U7S_PLATFORM"

if [ $# -gt 0 ]
then
  platform=$1
  shift
  if [ ${platform:0:4} = 'k8s-' ]
  then
    echo "C 11.11.2024 префикс k8- в имени образа не поддерживается (см. https://www.altlinux.org/Registry_(%D0%9D%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0))"
    exit 1
  fi
  if [ "$platform" != "$U7S_PLATFORM" ]
  then
    echo "$(gettext 'Current platform') $U7S_PLATFORM $(gettext 'does not match the downloaded one')" >&2
    echo "$(gettext 'Continue')? (Yes/no)" >&2
    read answer
    if [ "$answer" == 'n' ]
    then
      exit 1
    fi
  fi
  export U7S_PLATFORM=$platform
fi

case $arch in
  amd64 | arm64 | arm | ppc64le | 386) :;;
  *)
    echo "$(gettext 'Unknown architecture') $arch" >&2
    echo "$(gettext 'Acceptable:') : amd64, arm64, arm, ppc64le, 386" >&2
    echo "$(gettext 'Format'):\n\t$PROGRAMM $(gettext '<image_archiving_directory> <architecture>,<architecture>'),...|all\n')" >&2
    exit 2
esac

echo "$(gettext 'Downloading kubernetes images of architecture') $arch $(gettext 'platforms') $U7S_PLATFORM" >&2
storage="share/usernetes/images/$U7S_PLATFORM/$arch"
eval mkdir -p ~$USER/.local/$storage

getKuberImages $arch $storage $USER


# U7S_IMAGES+=" $@"
podsec-save-oci $ociDir "$arch" ""  $U7S_IMAGES

if [ -f /root/.config/containers/policy_prev.json ]
then
  mv /root/.config/containers/policy_prev.json /root/.config/containers/policy.json
fi

