Adatta i sistemi operativi per Cloud de Confiance by S3NS

Questo documento descrive come adattare le immagini sistema operativo (OS) in Cloud de Confiance by S3NS modo da utilizzare le immagini sistema operativo aziendali per cui hai le licenze.

Cloud de Confiance by S3NS fornisce immagini sistema operativo per Debian, Ubuntu LTS, Rocky Linux e Container-Optimized OS. Se vuoi utilizzare una di queste immagini fornite, procedi alla creazione di un'istanza e seleziona l'immagine che vuoi utilizzare durante la creazione dell'istanza.

Se hai una licenza per un sistema operativo aziendale per cui non fornisce un'immagine sistema operativo, ad esempio Windows, Red Hat Enterprise Linux (RHEL) o SUSE Linux Enterprise Server (SLES), utilizza lo script fornito in questo documento per adattare un'immagine da utilizzare con la tua licenza. Cloud de Confiance by S3NS Lo script installa i driver necessari per utilizzare l'immagine per creare istanze in Cloud de Confiance by S3NS.

Prima di iniziare

Sistemi operativi supportati

Il processo dello script di adattamento del sistema operativo, che utilizza lo strumento v2v-tpc, è destinato solo all'adattamento dei seguenti sistemi operativi Bring Your Own License (BYOL):

  • Windows Server 2016, 2019, 2022, 2025
  • Red Hat Enterprise Linux (RHEL) 8.x, 9.x, 10.x
  • SUSE Linux Enterprise Server (SLES) 12.x, 15.x

Per eseguire altri sistemi operativi come AlmaLinux o Fedora Cloud, utilizza una delle immagini sistema operativo disponibili pubblicamente.

Script di adattamento del sistema operativo

Per aiutarti ad adattare le immagini per Cloud de Confiance by S3NS, Cloud de Confiance by S3NS fornisce uno script che completa i seguenti passaggi:

  1. Crea un'istanza con il disco da Cloud Storage ed esegue lo strumento di adattamento del sistema operativo sul disco dell'istanza. Questo processo installa i driver necessari per il funzionamento dell'immagine sistema operativo su Cloud de Confiance by S3NS.
  2. Estrae il report di adattamento del sistema operativo e copia i file di output sulla macchina locale. Questo report fornisce informazioni sui risultati del processo di adattamento, nonché dettagli sul sistema operativo rilevato. Se lo script non viene eseguito correttamente, il report fornisce errori, avvisi e azioni da intraprendere per risolvere i problemi di adattamento.
  3. Crea un'immagine dal disco dell'istanza. Puoi quindi utilizzare questa immagine per creare istanze su Cloud de Confiance by S3NS.
  4. Elimina l'istanza e il disco creati durante questo processo. Questo passaggio rimuove le risorse non necessarie dal progetto.

Lo script seguente adatta le immagini per l'utilizzo in Cloud de Confiance by S3NS:

Script di adattamento completo del sistema operativo

#!/usr/bin/env bash

# Sets variables

set -e
set -x
set -o pipefail

UNIQUE_ID=''
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}"
      ;;
    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 "${PROJECT}" ]]; then
  echo "Project must be specified"
  usage
  exit 1
fi

# Creates disk

OS_ADAPTATION_IMAGE="projects/s3ns-system: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/s3ns-system:${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}"

Esegui lo script di adattamento del sistema operativo

Per adattare l'immagine sistema operativo per Cloud de Confiance by S3NS, segui questi passaggi:

  1. Crea uno script shell.
  2. Copia lo script di adattamento del sistema operativo e incollalo nel file dello script shell.
  3. Esegui lo script shell con i seguenti flag:

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

    Sostituisci quanto segue:

    • SCRIPT_NAME: il nome del file dello script di adattamento del sistema operativo
    • INPUT_GCS_OBJECT: il percorso del disco nel bucket Cloud Storage
    • IMAGE_NAME: il nome dell'immagine adattata
    • ZONE: la zona dell'immagine adattata
    • PROJECT: l' Cloud de Confiance by S3NS ID progetto

Dopo l'esecuzione corretta dello script, viene stampato il seguente messaggio:

Adapted image: IMAGE_NAME

Passaggi successivi

Crea un'istanza dall'immagine.