GNU/Linux >> Linux Esercitazione >  >> Linux

Creazione di un'immagine Red Hat Enterprise Linux 7 personalizzata per Microsoft Azure

Hai intenzione di eseguire Red Hat Enterprise Linux (RHEL) su Azure o ci stai pensando, ma vuoi creare le tue immagini? In questo articolo, mi concentrerò sulla creazione di un'immagine RHEL 7 da eseguire su istanze di Azure Mv2 (ovvero Hyper-V Generation 2). La principale differenza rispetto a un'immagine standard è che utilizzerai l'interfaccia UEFI (Unified Extensible Firmware Interface) e pertanto sono necessarie opzioni aggiuntive.

Oltre al focus principale su Mv2, ti fornirò anche un buon set di comandi di partenza in modo da poter automatizzare il processo di creazione di quelle immagini ed eventualmente integrare quel processo nella tua pipeline CI/CD.

La maggior parte di queste istruzioni dovrebbe essere applicabile anche per la creazione di immagini di Red Hat Enterprise Linux 8, ma quella versione non era il mio obiettivo principale.

Configurazione dell'ambiente

Come ambiente di compilazione, Red Hat Enterprise Linux 8 ci fornisce il set di strumenti corretto per creare immagini avviabili UEFI. Per riprodurre tutto qui, avrai bisogno dei seguenti pacchetti installati:

  • libvirt-client
  • virt-install
  • libvirt
  • libvirt-daemon-kvm
  • azure-cli (istruzioni qui)
  • azcopy (istruzioni qui) nel $PATH (es. /usr/bin/ o ~/bin/ )

Avrai anche bisogno di una copia del DVD dei binari di Red Hat Enterprise Linux 7.7, che puoi scaricare qui se hai un abbonamento Red Hat valido. Salva questo DVD come /var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.iso .

Nota: Qualsiasi altra versione basata su Red Hat Enterprise Linux 7 o 8 dovrebbe farlo, ma questa procedura dettagliata è stata testata con 7.7.

Affinché quanto sopra funzioni se sei in esecuzione su una VM, avrai bisogno di KVM abilitato sull'host o passato alla VM. Se vuoi eseguire questo esempio su una VM remota o in un'altra pipeline CI/CD, ho fatto esattamente questo per poter automatizzare il processo, quindi puoi eseguire questo headless (senza X, interfaccia utente grafica e X inoltro necessario).

Costruzione di un'immagine in modo automatizzato

Abbiamo bisogno di alcuni pacchetti installati nella nostra immagine più alcune configurazioni impostate e si consiglia di installare il client Azure. Mentre stavo cercando il modo migliore per installare questo client in modo automatizzato, l'unica opzione che ho trovato è stata ottenerlo dal repository extra di CentOS 7 (contattami e fammi sapere se conosci un modo migliore).

Un esempio di kickstart.cfg il file può essere ottenuto qui. Adattalo alle tue esigenze, ma assicurati di lasciare almeno la configurazione di rete impostata su DHCP.

Costruzione dell'immagine con il file Kickstart e un semplice comando

Per creare l'immagine: 

$ 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

Come accennato in precedenza, dovrai avere l'immagine del DVD nella posizione corretta. Il mio esempio presuppone che tu:

  • Avere kickstart.cfg nel tuo attuale $PWD .
  • Vuoi un disco da 4 GB.
  • Stai usando il tuo libvirt locale /Installazione KVM.
  • Non ho requisiti speciali per quanto riguarda l'interfaccia di rete (sto usando le impostazioni predefinite).

Conversione dell'immagine nel formato corretto

Ho faticato a convertire l'immagine nel formato giusto, ma con i colleghi amichevoli e Google, ho finalmente capito il formato richiesto:VHD allineato a 1 MB.

L'ultima immagine creata dovrebbe essere quella corretta:

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

Usa sudo per accedere all'immagine, convertila in RAW e inseriscila nell'attuale $PWD

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

Assicurati di potervi accedere - dopo questo punto, un "normale" (ad es. l'uso non root può continuare)

$ sudo chown $(whoami) *.raw

Calcola la dimensione dell'immagine.

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

Ridimensiona l'immagine.

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

Converti l'immagine da RAW a VHD e forza la dimensione corretta

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

Creazione di un gruppo

Ora hai la tua immagine personalizzata di Red Hat Enterprise Linux 7. Probabilmente ti starai chiedendo come caricarlo in Azure e usarlo per eseguire un'istanza. Leggi oltre. Dato che dovevo testare l'intero processo di creazione, l'ho fatto anche io.

Avrai sempre bisogno di un gruppo di risorse in Azure. Ho scelto westus2 come la mia regione, ma anche qualsiasi altro dovrebbe fare (se hanno istanze Mv2). Il nome del mio gruppo di risorse è semplicemente myresourcegroup . Se vuoi usare un altro nome, dovrai sostituirlo ovunque l'ho usato.

Per creare il tuo gruppo, crea un gruppo di risorse AZ in westus2 e denomina "myresourcegroup".

$ sudo az group create -l westus2 -n myresourcegroup

Caricare l'immagine del disco e renderla un'immagine di Azure

Per caricare l'immagine del disco e trasformarla in un'immagine di Azure, crea il disco in Azure con il nome "rhel-7", nel nostro gruppo di risorse creato in precedenza "myresourcegroup".

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

Assicurati che sia Hyper-V Gen 2 e il tipo di sistema operativo Linux con le dimensioni corrette.

$ 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

Hai bisogno di un SASURI per il caricamento.

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

Questo utilizza azcopy per copiare l'immagine (azcopy deve essere nel tuo $PATH da qualche parte)

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

Al termine del caricamento, è necessario revocare l'accesso, altrimenti l'immagine del disco non può essere utilizzata.

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

Infine, contrassegnala come immagine del sistema operativo Hyper-V, Gen 2.

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

Esecuzione dell'immagine

Si potrebbe immaginare che a questo punto tutto fosse chiaro e che eseguire un'immagine sarebbe stato facile. Se hai tutto correttamente a posto, sì, è vero. Ma quando ho lavorato su questo esempio, mi sono completamente dimenticato dell'ultimo passaggio del paragrafo precedente e non ho contrassegnato l'immagine del disco come un'immagine di Azure, il che ha comportato l'impossibilità di fornire la chiave SSH o admin-username .

Ad ogni modo, con le istruzioni di cui sopra, dovresti essere pronto per eseguire l'immagine. Il comando seguente presuppone che tu stia eseguendo questo strumento come utente root e che utilizzi la chiave SSH dell'utente root. Adatta quello che ho qui alle tue esigenze:

$ 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

Se hai bisogno della diagnostica di avvio, dovrai creare un cosiddetto account di archiviazione con il nome "storageaccount123" utilizzando il comando seguente:

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

Quanto sopra az vm create il comando deve essere esteso con il parametro seguente per registrare la diagnostica di avvio e i messaggi nell'account di archiviazione appena creato:

--boot-diagnostics-storage storageaccount123

Nota: Non è necessario abilitare la diagnostica di avvio e, in tal caso, dovrai sicuramente adattare il nome dell'account di archiviazione.

Accesso all'istanza di Azure

Da az vm create comando, dovresti ottenere un output contenente l'indirizzo IP. Ora dovresti essere in grado di accedere automaticamente, dato che la chiave SSH è fornita con:

$ ssh cloud-user@<azure-ip>

Conclusione

Prima di esplorare le possibilità di creare immagini di Red Hat Enterprise Linux 7 per le istanze di Azure Mv2 in modo automatizzato, non avevo precedenti esperienze con Azure, quindi è stato un bel viaggio. Non mi considererei ancora un esperto quando si tratta di Azure e probabilmente mancano delle cose. Mi piacerebbe sentire le vostre opinioni per migliorare questa configurazione, se necessario.

Gli script e i comandi che ho usato per questo articolo possono essere trovati qui. Le richieste pull sono benvenute, così come i cloni!

Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.


Linux
  1. Installa Red Hat Enterprise Linux in modalità grafica

  2. Installa Red Hat Enterprise Linux in modalità testo

  3. Utilizzo di Ansible per distribuire Microsoft SQL Server 2019 su Red Hat Enterprise Linux 8

  4. Come prepararsi per gli esami di certificazione di amministratore di sistema Linux

  5. Come ottenere Red Hat Enterprise Linux gratuitamente?

RHEL 6 – Guida all'installazione del server Red Hat Enterprise Linux passo dopo passo

Red Hat Enterprise Linux (RHEL) 8 passaggi di installazione con schermate

Serie Microsoft Azure - Creazione di una macchina virtuale Linux da un'immagine personalizzata

Installa Red Hat Enterprise Linux Server dall'immagine ISO

Come installare Red Hat Enterprise Linux 8 (RHEL 8)

Lavorare con il kernel in tempo reale per Red Hat Enterprise Linux