GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Erstellen eines benutzerdefinierten Red Hat Enterprise Linux 7-Images für Microsoft Azure

Planen Sie, Red Hat Enterprise Linux (RHEL) auf Azure auszuführen, oder erwägen Sie dies, möchten aber Ihre eigenen Images erstellen? In diesem Artikel konzentriere ich mich auf die Erstellung eines RHEL 7-Images zur Ausführung auf Azure Mv2-Instanzen (auch bekannt als Hyper-V Generation 2). Der Hauptunterschied zu einem Standard-Image besteht darin, dass Sie das Unified Extensible Firmware Interface (UEFI) verwenden und daher zusätzliche Optionen erforderlich sind.

Abgesehen von dem Hauptaugenmerk auf Mv2 gebe ich Ihnen auch einen guten Startsatz von Befehlen, damit Sie den Prozess der Erstellung dieser Images automatisieren und diesen Prozess schließlich in Ihre CI/CD-Pipeline integrieren können.

Die meisten dieser Anweisungen sollten auch für das Erstellen von Red Hat Enterprise Linux 8-Images gelten, aber diese Version war nicht mein Hauptaugenmerk.

Umgebung einrichten

Als Build-Umgebung stellt uns Red Hat Enterprise Linux 8 die richtigen Tools zur Verfügung, um UEFI-bootfähige Images zu erstellen. Um hier alles nachzubilden, müssen die folgenden Pakete installiert sein:

  • libvirt-client
  • virt-install
  • libvirt
  • libvirt-daemon-kvm
  • azure-cli (Anleitung hier)
  • azcopy (Anleitung hier) im $PATH (zB /usr/bin/ oder ~/bin/ )

Sie benötigen außerdem eine Kopie der Red Hat Enterprise Linux 7.7-Binärdateien-DVD, die Sie hier herunterladen können, wenn Sie über ein gültiges Red Hat-Abonnement verfügen. Speichern Sie diese DVD als /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso .

Hinweis: Jede andere Red Hat Enterprise Linux 7- oder 8-basierte Version sollte dies tun, aber diese exemplarische Vorgehensweise wurde mit 7.7 getestet.

Damit das oben Genannte funktioniert, wenn Sie es auf einer VM ausführen, muss KVM auf dem Host aktiviert oder an die VM weitergeleitet werden. Wenn Sie dieses Beispiel auf einer Remote-VM oder in einer anderen CI/CD-Pipeline ausführen möchten, habe ich genau das getan, um den Prozess automatisieren zu können, sodass Sie diesen Headless ausführen können (kein X, grafische Benutzeroberfläche und X-Weiterleitung erforderlich).

Automatisiertes Erstellen eines Images

Wir benötigen einige Pakete, die in unserem Image installiert sind, sowie einige Konfigurationssätze, und es wird empfohlen, den Azure-Client zu installieren. Während ich nach dem besten Weg gesucht habe, diesen Client automatisiert zu installieren, war die einzige Option, die ich gefunden habe, es aus dem Extras-Repository von CentOS 7 zu beziehen (kontaktieren Sie mich und lassen Sie es mich wissen, wenn Sie einen besseren Weg kennen).

Ein Beispiel für kickstart.cfg Datei kann hier bezogen werden. Passen Sie es an Ihre Bedürfnisse an, aber stellen Sie sicher, dass Sie zumindest die Netzwerkkonfiguration auf DHCP belassen.

Das Image mit der Kickstart-Datei und einem einfachen Befehl erstellen

So erstellen Sie das Bild: 

$ sudo virt-install \
       --name rhel77 \
       --memory 4096 \
       --vcpus 4 \
       --boot uefi \
       --os-variant rhel7.7 \
       -l /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso \
       --disk size=4 \
       --initrd-inject $(pwd)/kickstart.cfg \
       --extra-args="ks=file:/kickstart.cfg console=tty0 console=ttyS0,115200n8" \
       --graphics=none \
       --network network=default \
       --noreboot

Wie oben erwähnt, müssen Sie das DVD-Image an der richtigen Stelle haben. Mein Beispiel geht davon aus, dass Sie:

  • Habe kickstart.cfg in Ihrem aktuellen $PWD .
  • Möchten Sie eine 4-GB-Festplatte.
  • Verwenden Sie Ihre lokale libvirt /KVM installieren.
  • Haben keine besonderen Anforderungen an die Netzwerkschnittstelle (ich verwende die Standardeinstellungen).

Konvertieren des Bildes in das richtige Format

Ich hatte Mühe, das Bild in das richtige Format zu konvertieren, aber mit freundlichen Kollegen und Google fand ich schließlich das erforderliche Format heraus:VHD ausgerichtet auf 1 MB.

Das zuletzt erstellte Image sollte das richtige sein:

$ image=$(ls -1tr /var/lib/libvirt/images/rhel*|tail -1)

Verwenden Sie sudo, um auf das Bild zuzugreifen, konvertieren Sie es in RAW und fügen Sie es in das aktuelle $PWD

ein

$ sudo qemu-img convert -f qcow2 -O raw $image rhel-7.7.raw

Stellen Sie sicher, dass wir darauf zugreifen können - nach diesem Punkt kann eine „normale“ (z. B. Nicht-Root-Nutzung) fortgesetzt werden.

$ sudo chown $(whoami) *.raw

Berechnen Sie die Größe des Bildes.

$ MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.7.raw" | \ gawk 'match($0, /"virtuelle Größe" :([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB))

Größe des Bildes ändern.

$ sudo qemu-img resize -f raw rhel-7.7.raw $rounded_size

Konvertieren Sie das Bild von RAW in VHD und erzwingen Sie die richtige Größe

$ sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.7.raw rhel-7.7.vhd

Erstellen einer Gruppe

Jetzt haben Sie Ihr eigenes angepasstes Red Hat Enterprise Linux 7-Image. Sie fragen sich wahrscheinlich, wie Sie es in Azure hochladen und zum Ausführen einer Instanz verwenden können. Lesen Sie weiter. Da ich meinen gesamten Build-Prozess testen musste, habe ich dies auch getan.

Sie benötigen immer eine Ressourcengruppe in Azure. Ich habe westus2 gewählt wie meine Region, aber jede andere sollte es auch tun (wenn sie Mv2-Instanzen haben). Der Name meiner Ressourcengruppe ist einfach myresourcegroup . Wenn Sie einen anderen Namen verwenden möchten, müssen Sie ihn überall dort ersetzen, wo ich ihn verwendet habe.

Um Ihre Gruppe zu erstellen, erstellen Sie eine AZ-Ressourcengruppe in westus2 und nennen Sie „myresourcegroup“.

$ sudo az group create -l westus2 -n myresourcegroup

Hochladen des Disk-Images und Erstellen eines Azure-Images

Um das Disk-Image hochzuladen und es in ein Azure-Image umzuwandeln, erstellen Sie das Laufwerk in Azure mit dem Namen „rhel-7“ in unserer zuvor erstellten Ressourcengruppe „myresourcegroup“.

$ sudo az disk delete --name rhel-7 -g myresourcegroup -y

Stellen Sie sicher, dass es sich um Hyper-V Gen 2 und den Betriebssystemtyp Linux mit der richtigen Größe handelt.

$ sudo az disk create --hyper-v-generation V2 -g myresourcegroup -n rhel-7 --os-type Linux -l westus2 --for-upload --upload-size-bytes $(wc -c rhel-7.7.vhd|awk '{ print $1 }') --sku standard_lrs

Zum Hochladen benötigen Sie ein SASURI.

$ SASURI=$(az disk grant-access -n rhel-7 -g myresourcegroup --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)

Dies verwendet azcopy um das Bild zu kopieren (azcopy muss sich in Ihrem $PATH befinden irgendwo)

$ sudo azcopy $(pwd)/rhel-7.7.vhd $SASURI --blob-type PageBlob

Nachdem der Upload abgeschlossen ist, müssen wir den Zugriff widerrufen, sonst kann das Disk-Image nicht verwendet werden.

$ sudo az disk revoke-access -n rhel-7 -g myresourcegroup

Markieren Sie es schließlich als Hyper-V, Gen 2 OS-Image.

$ sudo az image create -g myresourcegroup -n rhel-7 --os-type Linux --hyper-v-generation V2 --source rhel-7

Bild ausführen

Man könnte sich vorstellen, dass zu diesem Zeitpunkt alles klar und das Ausführen eines Images einfach wäre. Wenn Sie alles richtig gemacht haben, ja, das stimmt. Aber als ich dieses Beispiel durchgearbeitet habe, habe ich den letzten Schritt im vorherigen Absatz völlig vergessen und das Disk-Image nicht als Azure-Image markiert, was dazu führte, dass der SSH-Schlüssel oder admin-username .

Wie auch immer, mit den obigen Anweisungen sollten Sie bereit sein, das Image auszuführen. Der folgende Befehl geht davon aus, dass Sie dieses Tool als Root-Benutzer ausführen und den SSH-Schlüssel des Root-Benutzers verwenden. Passe das, was ich hier habe, an deine Bedürfnisse an:

$ sudo az vm create  \
      --resource-group myresourcegroup \
      --location westus2 \
      --name rhel-7 \
      --image rhel-7 \
      --admin-username cloud-user \
      --ssh-key-value @/root/.ssh/id_rsa.pub

Wenn Sie eine Boot-Diagnose benötigen, müssen Sie mit dem folgenden Befehl ein sogenanntes Speicherkonto mit dem Namen „storageaccount123“ erstellen:

$ sudo az storage account create -n storageaccount123 -g myresourcegroup -l westus2 --sku Standard_LRS

Das obige az vm create Der Befehl muss um den folgenden Parameter erweitert werden, um die Boot-Diagnose und Meldungen in dem gerade erstellten Speicherkonto zu protokollieren:

--boot-diagnostics-storage storageaccount123

Hinweis: Sie müssen die Startdiagnose nicht aktivieren, und wenn Sie dies tun, müssen Sie auf jeden Fall den Namen des Speicherkontos anpassen.

Anmelden bei der Azure-Instanz

Aus dem az vm create Befehl, sollten Sie eine Ausgabe mit der IP-Adresse erhalten. Sie sollten sich jetzt automatisch anmelden können, vorausgesetzt, der SSH-Schlüssel wird bereitgestellt mit:

$ ssh cloud-user@

Abschluss

Bevor ich die Möglichkeiten zum automatisierten Erstellen von Red Hat Enterprise Linux 7-Images für Azure Mv2-Instanzen erkundete, hatte ich keine vorherige Erfahrung mit Azure, und daher war es eine ziemliche Reise. Ich würde mich immer noch nicht als Experten bezeichnen, wenn es um Azure geht, und es fehlen wahrscheinlich einige Dinge. Ich würde gerne Ihre Meinung hören, um dieses Setup bei Bedarf zu verbessern.

Die Skripte und Befehle, die ich für diesen Artikel verwendet habe, finden Sie hier. Pull-Requests sind ebenso willkommen wie Clones!

Möchten Sie Red Hat Enterprise Linux ausprobieren? Laden Sie es jetzt kostenlos herunter.


Linux
  1. Verwendung von Ansible zur Bereitstellung von Microsoft SQL Server 2019 auf Red Hat Enterprise Linux 8

  2. So bereiten Sie sich auf die Zertifizierungsprüfungen für Linux-Systemadministratoren vor

  3. Wie erhalte ich Red Hat Enterprise Linux kostenlos?

  4. Was ist Red Hat Linux?

  5. IBM DB2-Installation auf Red Hat Enterprise Linux

RHEL 6 – Schritt-für-Schritt-Installationsanleitung für Red Hat Enterprise Linux Server

Red Hat Enterprise Linux (RHEL) 8 Installationsschritte mit Screenshots

Microsoft Azure Series – Erstellen einer virtuellen Linux-Maschine aus einem benutzerdefinierten Image

Installieren Sie Red Hat Enterprise Linux Server vom ISO-Image

So installieren Sie Red Hat Enterprise Linux 8 (RHEL 8)

Arbeiten mit dem Echtzeit-Kernel für Red Hat Enterprise Linux