Betriebssysteme für Trusted Cloud by S3NS anpassen

In diesem Dokument wird beschrieben, wie Sie Betriebssystem-Images (OS) inTrusted Cloud by S3NS anpassen, um die Enterprise-Betriebssystem-Images zu verwenden, für die Sie Lizenzen haben.

Trusted Cloud by S3NS stellt Betriebssystem-Images für Debian, Ubuntu LTS, Rocky Linux und Container-Optimized OS bereit. Wenn Sie eines dieser bereitgestellten Images verwenden möchten, erstellen Sie eine Instanz und wählen Sie das gewünschte Image während der Instanzerstellung aus.

Wenn Sie eine Lizenz für ein Enterprise-Betriebssystem haben, für das Trusted Cloud by S3NS kein Betriebssystem-Image bereitgestellt wird, z. B. Windows, Red Hat Enterprise Linux (RHEL) oder SUSE Linux Enterprise Server (SLES), verwenden Sie das in diesem Dokument bereitgestellte Skript, um ein Image für die Verwendung mit Ihrer Lizenz anzupassen. Das Skript installiert die Treiber, die Sie benötigen, um mit Ihrem Image Instanzen in Trusted Cloud by S3NSzu erstellen.

Hinweise

Skript zur Betriebssystemanpassung

Damit Sie Bilder für Trusted Cloud by S3NSanpassen können, Trusted Cloud by S3NS bietet ein Skript, das die folgenden Schritte ausführt:

  1. Erstellt eine Instanz mit dem Laufwerk aus Cloud Storage und führt das Tool zur Betriebssystemanpassung auf dem Laufwerk der Instanz aus. Bei diesem Vorgang werden die Treiber installiert, die für die Funktion Ihres Betriebssystem-Images auf Trusted Cloud by S3NSerforderlich sind.
  2. Extrahiert den Bericht zur Betriebssystemanpassung und kopiert die Ausgabedateien auf Ihren lokalen Computer. Dieser Bericht enthält Informationen zu den Ergebnissen des Anpassungsprozesses sowie Details zum erkannten Betriebssystem. Wenn das Skript nicht erfolgreich ausgeführt wird, enthält der Bericht Fehler, Warnungen und Maßnahmen zur Behebung von Anpassungsproblemen.
  3. Erstellt ein Image vom Laufwerk der Instanz. Anschließend können Sie dieses Image verwenden, um Instanzen auf Trusted Cloud by S3NSzu erstellen.
  4. Löscht die Instanz und das Laufwerk, die während dieses Vorgangs erstellt wurden. Bei diesem Schritt werden nicht benötigte Ressourcen aus Ihrem Projekt entfernt.

Mit dem folgenden Skript werden Bilder für die Verwendung in Trusted Cloud by S3NSangepasst:

Vollständiges Skript zur Betriebssystemanpassung

#!/usr/bin/env bash

# Sets variables

set -e
set -x
set -o pipefail

UNIQUE_ID=''
TPC_PREFIX=''
ZONE=''
PROJECT=''
INPUT_IMAGE=''
INPUT_DISK=''
IMAGE_NAME=''
ADAPTATION_INSTANCE_TYPE='c3-highcpu-4' # needs to support nested virtualization



usage() {
  echo ""
  echo "Usage:"
  echo "       $0 -g  -o -z -t  -p "
  echo ""
  echo ""
  echo "Parameters:"
  echo "       -i  OR -d  OR -g "
  echo "       -o "
  echo "       -z "
  echo "       -t "
  echo "       -p "
  echo "       -h (help)"
  echo ""
}

while getopts ":i:d:g:o:z:t:p:h" opt; do
  case "${opt}" in
    i)
      INPUT_IMAGE="${OPTARG}"
      ;;
    d)
      INPUT_DISK="${OPTARG}"
      ;;
    g)
      INPUT_GCS_OBJECT="${OPTARG}"
      ;;
    o)
      IMAGE_NAME="${OPTARG}"
      ;;
    z)
      ZONE="${OPTARG}"
      ;;
    t)
      TPC_PREFIX="${OPTARG}"
      ;;
    p)
      PROJECT="${OPTARG}"
      ;;
    h)
      echo "$0 help:"
      usage
      exit 0
      ;;
    *)
      echo "Unknown arg -${opt} ${OPTARG}"
      usage
      exit 1
      ;;
  esac
done
shift $((OPTIND-1))

# Defines errors

if [[ -n "${INPUT_IMAGE}" && -n "${INPUT_DISK}" ]] ||
   [[ -n "${INPUT_IMAGE}" && -n "${INPUT_GCS_OBJECT}" ]] ||
   [[ -n "${INPUT_DISK}" && -n "${INPUT_GCS_OBJECT}" ]]; then
  echo "Only one of -i, -d, or -g must be specified"
  usage
  exit 1
fi

if [[ -z "${IMAGE_NAME}" ]]; then
  echo "The name of the image must be specified"
  usage
  exit 1
fi

if [[ -z "${ZONE}" ]]; then
  echo "Zone must be specified"
  usage
  exit 1
fi

if [[ -z "${TPC_PREFIX}" ]]; then
  echo "TPC prefix must be specified"
  usage
  exit 1
fi

if [[ -z "${PROJECT}" ]]; then
  echo "Project must be specified"
  usage
  exit 1
fi

# Creates disk

OS_ADAPTATION_IMAGE="projects/${TPC_PREFIX}:v2v-community/global/images/family/v2v-tpc-stable"

if [[ -z "${UNIQUE_ID}" ]]; then
  UNIQUE_ID=$(head /dev/urandom | tr -dc a-z0-9 | head -c4)
fi

if [[ -n "${INPUT_IMAGE}" ]]; then
  DISK_ID="${IMAGE_NAME}-disk-${UNIQUE_ID}"
  echo "Creating disk ${DISK_ID} from image ${INPUT_IMAGE}..."
  gcloud compute disks create "${DISK_ID}" --zone="${ZONE}" --image "${INPUT_IMAGE}"
elif [[ -n "${INPUT_GCS_OBJECT}" ]]; then
  DISK_ID="${IMAGE_NAME}-disk-${UNIQUE_ID}"

  echo "Creating disk ${DISK_ID} from GCS object ${INPUT_GCS_OBJECT}..."
  CURL_OUTPUT=$(curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H 'Content-Type: application/json' \
    -X POST  \
    "https://compute.s3nsapis.fr/compute/v1/projects/${TPC_PREFIX}:${PROJECT}/zones/${ZONE}/disks" \
    -d '{"name":"'"${DISK_ID}"'", "sourceStorageObject":"'"${INPUT_GCS_OBJECT}"'"}')
  OPERATION_ID=$(jq -r '.name' <<< "${CURL_OUTPUT}")
  while ! gcloud compute operations describe --zone "${ZONE}" --format=json \
    "${OPERATION_ID}" | jq -e '.status == "DONE"' >/dev/null; do
    sleep 5
  done
elif [[ -n "${INPUT_DISK}" ]]; then
  DISK_ID="${INPUT_DISK}"
fi

QUERY_PATH='v2v/report'
DEVICE_NAME="dev-${UNIQUE_ID}"
OUTPUT_DIR='/var/v2v'
STARTUP_SCRIPT="docker run --privileged -v /dev:/dev -v ${OUTPUT_DIR}:${OUTPUT_DIR} v2v-tpc -vv --log file=${OUTPUT_DIR}/output.log,level=trace --report file=${OUTPUT_DIR}/report.json --report file=http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/${QUERY_PATH},headers=Metadata-Flavor=Google --license=byol --in-place --drive file=/dev/disk/by-id/google-${DEVICE_NAME},format=raw"

# Creates instance and runs adaptation tool on disk

echo "Adapting disk ${DISK_ID}"

INSTANCE="os-adaptation-instance-${UNIQUE_ID}"
gcloud compute instances create "${INSTANCE}" \
  --zone="${ZONE}" \
  --machine-type="${ADAPTATION_INSTANCE_TYPE}" \
  --enable-nested-virtualization \
  --metadata="^@@@^enable-guest-attributes=TRUE@@@startup-script=${STARTUP_SCRIPT}" \
  --create-disk="auto-delete=yes,boot=yes,image=${OS_ADAPTATION_IMAGE}" \
  --disk="name=${DISK_ID},auto-delete=no,device-name=${DEVICE_NAME}"


# Retrieves report

while [[ -z "${REPORT}" ]]; do
  sleep 5
  set +e
  REPORT=$(gcloud compute instances get-guest-attributes "${INSTANCE}" \
    --zone="${ZONE}" \
    --query-path="${QUERY_PATH}" \
    --format='value(value)') 2>/dev/null
  echo -n '.'
  set -e
done
echo "Operating System adaptation report:"
jq . <<< "${REPORT}"

gcloud compute scp --recurse "${INSTANCE}:${OUTPUT_DIR}" "$(pwd)"
echo "Output file: $(pwd)/v2v/output.log, Report file: $(pwd)/v2v/report.json"

echo "Deleting ${INSTANCE}..."
gcloud compute instances delete "${INSTANCE}" --zone="${ZONE}" --quiet

if jq --exit-status '.status != "SUCCESS"' <<< "${REPORT}" >/dev/null; then
  echo "Operating System adaptation failed"
  exit 1
fi

# Creates image

echo "Operating System adaptation successful, creating image..."

IMAGE="image-${UNIQUE_ID}"
gcloud compute images create "${IMAGE}" \
  --source-disk-zone="${ZONE}" \
  --guest-os-features="$(jq --raw-output '.guest_os_features | join(",")' <<< "${REPORT}")" \
  --source-disk="${DISK_ID}"

if [[ -z "${INPUT_DISK}" ]]; then
  gcloud compute disks delete "${DISK_ID}" --zone="${ZONE}" --quiet
fi

echo "Adapted image: ${IMAGE}"

Betriebssystemanpassungsskript ausführen

So passen Sie Ihr Betriebssystem-Image für Trusted Cloud by S3NSan:

  1. Erstellen Sie ein Shell-Skript.
  2. Kopieren Sie das Script zur Anpassung an das Betriebssystem und fügen Sie es in Ihre Shell-Script-Datei ein.
  3. Führen Sie Ihr Shell-Skript mit den folgenden Flags aus:

    SCRIPT_NAME \
     -g 'INPUT_GCS_OBJECT' \
     -o 'IMAGE_NAME' \
     -z 'ZONE' \
     -p 'PROJECT' \
     -t 'TPC_PREFIX'

    Ersetzen Sie Folgendes:

    • SCRIPT_NAME: der Name der Datei mit dem Betriebssystemanpassungsskript
    • INPUT_GCS_OBJECT: der Pfad zum Laufwerk in Ihrem Cloud Storage-Bucket
    • IMAGE_NAME: der Name für das angepasste Image
    • ZONE: die Zone für das angepasste Bild
    • PROJECT: Ihre Trusted Cloud by S3NS -Projekt-ID
    • TPC_PREFIX: ein Präfix, das für Ihre Ressourcennamen verwendet wird

Nachdem das Skript erfolgreich ausgeführt wurde, wird die folgende Meldung ausgegeben:

Adapted image: IMAGE_NAME

Nächste Schritte

Instanz aus Ihrem Image erstellen