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イメージにするには、以前に作成したリソースグループ「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を試してみませんか?今すぐ無料でダウンロードしてください。