GNU/Linux >> Linux の 問題 >  >> Linux

MicrosoftAzure用にカスタマイズされたRedHatEnterpriseLinux7イメージを構築する

AzureでRedHatEnterprise Linux(RHEL)を実行する予定ですか、それとも検討していますが、独自のイメージを作成したいですか?この記事では、Azure Mv2(別名Hyper-V Generation 2)インスタンスで実行するRHEL7イメージの作成に焦点を当てます。標準イメージとの主な違いは、Unified Extensible Firmware Interface(UEFI)を使用するため、追加のオプションが必要になることです。

Mv2の主な焦点とは別に、これらのイメージを作成するプロセスを自動化し、最終的にそのプロセスをCI / CDパイプラインに統合できるように、優れたスターターセットのコマンドも提供します。

これらの手順のほとんどは、Red Hat Enterprise Linux 8イメージの構築にも適用できるはずですが、そのバージョンは私の主な焦点ではありませんでした。

環境のセットアップ

ビルド環境として、Red Hat Enterprise Linux 8は、UEFIブート可能イメージをビルドするための正しいツールセットを提供します。ここですべてを再現するには、次のパッケージをインストールする必要があります。

  • libvirt-client
  • virt-install
  • libvirt
  • libvirt-daemon-kvm
  • azure-cli (ここでの説明)
  • azcopy (ここでの説明) $ PATH (例: / usr / bin / または〜/ bin /

また、Red Hat Enterprise Linux 7.7バイナリDVDのコピーも必要です。これは、有効なRedHatサブスクリプションをお持ちの場合はここからダウンロードできます。このDVDを/var/lib/libvirt/images/rhel-server-7.7-x86_64-dvd.isoとして保存します 。

注: 他のRedHatEnterprise Linux 7または8ベースのバージョンでもそれを実行できますが、このウォークスルーは7.7でテストされています。

VMで実行している場合に上記を機能させるには、ホストでKVMを有効にするか、VMにパススルーする必要があります。この例をリモートVMまたは別のCI/CDパイプラインで実行する場合は、プロセスを自動化できるようにするために正確に実行したので、このヘッドレス(X、グラフィカルUI、およびX転送が必要です。

自動化された方法で画像を作成する

イメージにいくつかのパッケージをインストールし、いくつかの構成を設定する必要があります。Azureクライアントをインストールすることをお勧めします。このクライアントを自動化された方法でインストールするための最良の方法を探していたとき、私が見つけた唯一のオプションは、CentOS 7エクストラリポジトリからそれを取得することでした(私に連絡して、より良い方法を知っているかどうか教えてください)。

サンプルのkickstart.cfg ファイルはこちらから入手できます。ニーズに合わせて調整しますが、少なくともネットワーク構成はDHCPに設定したままにしてください。

キックスタートファイルと簡単なコマンドを使用してイメージをビルドする

イメージを作成するには:

$ 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

上記のように、DVDイメージを正しい場所に置く必要があります。私の例では、次のことを前提としています。

  • kickstart.cfgを持っている 現在の$PWD
  • 4GBのディスクが必要です。
  • ローカルのlibvirtを使用しています /KVMインストール。
  • ネットワークインターフェースに関する特別な要件はありません(私はデフォルトを使用しています)。
画像を正しい形式に変換する

画像を適切な形式に変換するのに苦労しましたが、友好的な同僚とGoogleの協力を得て、必要な形式を最終的に理解しました。VHDを1MBに調整しました。

最後に作成されたイメージは正しいものである必要があります:

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

sudoを使用して画像にアクセスし、RAWに変換して、現在の$PWDに入れます

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

アクセスできることを確認してください。この時点以降、「通常の」(たとえば、ルート以外の使用を継続できます)

$ sudo chown $(whoami)* .raw

画像のサイズを計算します。

$ 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))

画像のサイズを変更します。

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

画像をRAWからVHDに変換し、正しいサイズを強制します

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

グループの作成

これで、独自にカスタマイズしたRed Hat EnterpriseLinux7イメージができました。おそらく、Azureにアップロードし、それを使用してインスタンスを実行する方法を考えているでしょう。さらに読む。ビルドプロセス全体をテストする必要があったので、これも実行しました。

Azureには常にリソースグループが必要です。 westus2を選択しました 私の地域と同じですが、他の地域でも同様に行う必要があります(Mv2インスタンスがある場合)。私のリソースグループの名前は、単に myresourcegroupです。 。別の名前を使用したい場合は、私が使用したすべての場所でその名前を置き換える必要があります。

グループを作成するには、westus2にAZリソースグループを作成し、「myresourcegroup」という名前を付けます。

$ sudo az group create -l westus2 -n myresourcegroup

ディスクイメージをアップロードしてAzureイメージにする

ディスクイメージをアップロードしてAzureイメージにするには、以前に作成したリソースグループ「myresourcegroup」に「rhel-7」という名前のディスクをAzureで作成します。

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

Hyper-VGen2とオペレーティングシステムの種類が正しいLinuxであることを確認してください。

$ 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

アップロードするにはSASURIが必要です。

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

これはazcopyを使用します 画像をコピーするには( azcopy $ PATHにある必要があります どこか)

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

アップロードが完了したら、アクセスを取り消す必要があります。そうしないと、ディスクイメージを使用できません。

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

最後に、Hyper-V、Gen2OSイメージとしてマークを付けます。

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

イメージの実行

この時点では、すべてが明確で、イメージの実行は簡単であると想像できます。すべてが正しく配置されていれば、そうです。しかし、この例を実行したとき、前の段落の最後の手順を完全に忘れて、ディスクイメージにAzureイメージのマークを付けなかったため、SSHキーまたはadmin-username<を提供できませんでした。 / code> 。

とにかく、上記の手順で、イメージを実行する準備が整いました。次のコマンドは、このツールをrootユーザーとして実行し、rootユーザーのSSHキーを使用していることを前提としています。私がここに持っているものをあなたのニーズに適応させてください:

$ 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

起動診断が必要な場合は、次のコマンドを使用して、「storageaccount123」という名前のいわゆるストレージアカウントを作成する必要があります。

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

上記のazvm create 起動診断とメッセージを先ほど作成したストレージアカウントに記録するには、コマンドを次のパラメータで拡張する必要があります。

-boot-diagnostics-storage storageaccount123

注: 起動診断を有効にする必要はありません。有効にする場合は、必ずストレージアカウント名を変更する必要があります。

Azureインスタンスにログインする

az vm createから コマンドを実行すると、IPアドレスを含む出力が得られます。 SSHキーに次のものが提供されている場合、自動的にログインできるようになります。

$ ssh cloud-user @

まとめ

AzureMv2インスタンス用のRedHatEnterprise Linux 7イメージを自動化された方法で作成する可能性を探る前は、Azureの使用経験がなかったため、かなりの旅でした。 Azureに関しては、まだ自分が専門家だとは思っていません。おそらく、足りないものがあります。必要に応じて、この設定を強化するためにご意見をお聞かせください。

この記事で使用したスクリプトとコマンドは、ここにあります。クローンだけでなく、プルリクエストも歓迎します!

Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。


Linux
  1. Red Hat Enterprise Linuxを登録し、Ansibleにサブスクリプションを添付します

  2. Red Hat EnterpriseLinux7および8でのIPv6アドレスの設定

  3. AzureでRedHatEnterpriseLinuxを実行する際の考慮事項

  1. Ansibleを使用してMicrosoftSQLServer2019をRedHatEnterpriseLinux8にデプロイする

  2. Red Hat Enterprise Linuxを無料で入手するにはどうすればよいですか?

  3. Red Hat Enterprise Linux への IBM DB2 のインストール

  1. Red HatEnterpriseLinuxをグラフィカルモードでインストールする

  2. Red HatEnterpriseLinuxをテキストモードでインストールする

  3. Red HatEnterpriseLinuxインストールISOイメージの最適化