In diesem Dokument wird beschrieben, wie Sie Betriebssystem-Images (OS) inGoogle Cloud anpassen, um die Enterprise-Betriebssystem-Images zu verwenden, für die Sie Lizenzen haben.
Google Cloud bietet Betriebssystem-Images für Debian, Ubuntu LTS, Rocky Linux und Container-Optimized OS. 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 Google Cloud 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 erforderlich sind, damit Sie Ihr Image zum Erstellen von Instanzen in Google Cloudverwenden können.
Hinweise
- Installieren Sie den
jq
-Befehlszeilenprozessor. - Wenn Sie das noch nicht getan haben, laden Sie ein Laufwerk mit dem Betriebssystem-Image, das Sie verwenden möchten, in einen Cloud Storage-Bucket hoch.
- Prüfen Sie, ob Sie die erforderlichen Berechtigungen zum Erstellen benutzerdefinierter Bilder haben.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud -Dienste und APIs überprüft. Zum Ausführen von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:
Select the tab for how you plan to use the samples on this page:
gcloud
-
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud init
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
- Set a default region and zone.
REST
Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, nutzen Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.
Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:
gcloud init
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.
Skript zur Betriebssystemanpassung
Damit Sie Bilder für Google Cloudanpassen können, Google Cloud bietet ein Skript, das die folgenden Schritte ausführt:
- 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 Google Clouderforderlich sind.
- 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.
- Erstellt ein Image vom Laufwerk der Instanz. Anschließend können Sie dieses Image verwenden, um Instanzen auf Google Cloudzu erstellen.
- 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 Google Cloudangepasst:
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 echo " -oOR -g " " 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.googleapis.com/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 Google Cloudan:
- Erstellen Sie ein Shell-Skript.
- Kopieren Sie das Script zur Anpassung an das Betriebssystem und fügen Sie es in Ihre Shell-Script-Datei ein.
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 BetriebssystemanpassungsskriptINPUT_GCS_OBJECT
: der Pfad zum Laufwerk in Ihrem Cloud Storage-BucketIMAGE_NAME
: der Name für das angepasste ImageZONE
: die Zone für das angepasste BildPROJECT
: Ihre Google Cloud -Projekt-IDTPC_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
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-09-11 (UTC).
-