התאמת מערכות הפעלה ל-Cloud de Confiance by S3NS

במאמר הזה מוסבר איך להתאים תמונות של מערכת הפעלה (OS) ב-Cloud de Confiance by S3NS כדי להשתמש בתמונות של מערכת הפעלה לארגונים שיש לכם רישיונות עבורן.

‫Cloud de Confiance by S3NS מספקת תמונות של מערכת הפעלה ל-Debian,‏ Ubuntu LTS,‏ Rocky Linux ומערכת הפעלה שמותאמת לקונטיינרים. אם רוצים להשתמש באחת מהתמונות שסופקו, צריך ליצור מופע ולבחור את התמונה הרצויה במהלך יצירת המופע.

אם יש לכם רישיון למערכת הפעלה ארגונית ש Cloud de Confiance by S3NS לא מספקת תמונת מערכת הפעלה, כמו Windows,‏ Red Hat Enterprise Linux ‏ (RHEL) או SUSE Linux Enterprise Server ‏ (SLES), אתם יכולים להשתמש בסקריפט שמופיע במסמך הזה כדי להתאים תמונה לשימוש עם הרישיון שלכם. הסקריפט מתקין את הדרייברים שנדרשים כדי להשתמש בתמונה ליצירת מופעים ב- Cloud de Confiance by S3NS.

לפני שמתחילים

  • מתקינים את מעבד שורת הפקודה של jq.
  • אם עדיין לא עשיתם זאת, מעלים דיסק שמכיל את קובץ האימג' של מערכת ההפעלה שבה רוצים להשתמש לקטגוריה של Cloud Storage.
  • חשוב לוודא שיש לכם את ההרשאות הנדרשות ליצירת תמונות בהתאמה אישית.
  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

    צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל
  • REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Cloud de Confiance .

מערכות הפעלה נתמכות

תהליך הסקריפט להתאמה למערכת ההפעלה, שמתבצע באמצעות הכלי v2v-tpc, מיועד רק להתאמה של מערכות ההפעלה הבאות בשיטת 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

כדי להריץ מערכות הפעלה אחרות כמו AlmaLinux או Fedora Cloud, משתמשים באחת מתמונות מערכת ההפעלה שזמינות לציבור.

סקריפט להתאמת מערכת ההפעלה

כדי לעזור לכם להתאים תמונות ל- Cloud de Confiance by S3NS, Cloud de Confiance by S3NS מספק סקריפט שמבצע את השלבים הבאים:

  1. יוצר מכונה עם הדיסק מ-Cloud Storage ומריץ את כלי ההתאמה של מערכת ההפעלה בדיסק של המכונה. במהלך התהליך הזה מותקנים מנהלי ההתקנים שנדרשים כדי שקובץ האימג' של מערכת ההפעלה יפעל ב- Cloud de Confiance by S3NS.
  2. מחלץ את דוח ההתאמה של מערכת ההפעלה ומעתיק את קובצי הפלט למחשב המקומי. בדוח הזה מופיע מידע על התוצאות של תהליך ההתאמה, וגם פרטים על מערכת ההפעלה שזוהתה. אם הסקריפט לא פועל כמו שצריך, בדוח מופיעות שגיאות, אזהרות ופעולות שצריך לבצע כדי לפתור בעיות בהתאמה.
  3. יוצרת תמונה מהדיסק של המכונה. אחר כך אפשר להשתמש בתמונה הזו כדי ליצור מכונות ב- Cloud de Confiance by S3NS.
  4. המערכת מוחקת את המכונה ואת הדיסק שנוצרו במהלך התהליך הזה. בשלב הזה מנקים מהפרויקט משאבים מיותרים.

הסקריפט הבא מתאים תמונות לשימוש ב- Cloud de Confiance by S3NS:

סקריפט מלא להתאמה של מערכת ההפעלה

#!/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}"

הרצת סקריפט ההתאמה למערכת ההפעלה

כדי להתאים את קובץ האימג' של מערכת ההפעלה ל- Cloud de Confiance by S3NS, צריך לבצע את הפעולות הבאות:

  1. יוצרים סקריפט מעטפת.
  2. מעתיקים את סקריפט ההתאמה למערכת ההפעלה ומדביקים אותו בקובץ הסקריפט של המעטפת.
  3. מריצים את סקריפט המעטפת עם הדגלים הבאים:

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

    מחליפים את מה שכתוב בשדות הבאים:

    • SCRIPT_NAME: השם של קובץ הסקריפט להתאמה למערכת ההפעלה
    • INPUT_GCS_OBJECT: הנתיב לדיסק בקטגוריית Cloud Storage
    • IMAGE_NAME: השם של התמונה המותאמת
    • ZONE: האזור של התמונה המותאמת
    • PROJECT: מזהה הפרויקט ב- Cloud de Confiance by S3NS

אחרי שהסקריפט פועל בהצלחה, הוא מדפיס את ההודעה הבאה:

Adapted image: IMAGE_NAME

המאמרים הבאים

יצירת מכונה מהתמונה.