Azure上でRed Hat Enterprise Linux 7.3を動かすためのVMイメージを作成する

#はじめに
2015年11月に正式にAzure上でRed Hat Enterprise Linux(RHEL)が利用可能となりました。
その後2016年2月にAzure Marketplace上からRHELが簡単にデプロイできるようになりました。

ただし、Marketplace上からRHELをデプロイして利用する場合には以下の注意事項があります。

- インスタンス料金がOS代の他にソフトウェア代金が必要になる
- Azureサブスクリプションに無料利用可能分があってもソフトウェア代金は別途課金
- RHELのサポートは英語

詳しくは[Azure で Red Hat ソリューションを使用する](https://azure.microsoft.com/ja-jp/campaigns/redhat/)を参照ください。

既にオンプレミスでRHELを利用しており有効なサブスクリプションがある場合には、上記のMarketplace上からRHELをデプロイすると既存ライセンスが無駄になってしまいます。
この場合には自前でAzureで動作可能なVMイメージ(VHDファイル)を事前に作成して、それをAzure上にアップロードして仮想マシンをデプロイする手順を踏みます(2017年1月現在)

このへんの手順は[Azure 用の Red Hat ベースの仮想マシンの準備](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-redhat-create-upload-vhd?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#rhel7xhyperv)に書かれているのですが、Hyper-V側の設定や、RHELのインストール手順については詳しく書かれていないので、実際に私が試した結果を公開します。

#必要なもの
必要なものは以下の通りです。

- Azureサブスクリプション(試用版でOK)
- Hyper-Vが動作可能なクライアントPC
- 有効なRHELサブスクリプション

2017年1月から始まった[Red Hat on Azure Partner Network](https://rhazure.azurewebsites.net/)への参加をしますとRHELの試用についてもハードルが低くなると思います。
また、RHELサブスクリプションをAzure等のパブリッククラウドで利用するための[Red Hat Cloud Access](https://www.redhat.com/ja/technologies/cloud-computing/cloud-access)にも事前に申し込む必要があります。

#事前準備
事前にRed HatのサイトからRHELのバイナリDVDイメージ(isoファイル)をダウンロードしておきます。

![image](https://qiita-image-store.s3.amazonaws.com/0/137436/538218e2-74f1-c17d-9db9-9e1e1b8acbcf.png)

#Hyper-V上でのイメージ作成
##仮想マシンの作成
クライアントPC上から「Hyper-Vマネージャー」を起動して、まずは「仮想スイッチマネージャー」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/2862978a-fb07-4ed8-e4df-2dbf8e3c00ec.png)

RHELのイメージ作成時にはインターネット接続が必須となりますので、外部NWに接続可能なクライアントPC側のネットワークインタフェースを指定した仮想スイッチ(本例ではexternal-switch)を作成しておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/6ef3e80d-3bd6-c7af-73aa-b469544d7483.png)

操作メニューから「新規」「仮想マシン」を選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/cece10e0-d212-8df1-5206-f9ce0f036dae.png)

仮想マシンの新規作成ウイザードが開くので「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d0f85eb6-6c00-6361-26d1-f5c099670b6f.png)

仮想マシン名を適当に入力して「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/df8ec030-37bd-cc26-bd3e-7ce14992efc3.png)

世代の指定では必ず「第1世代」を選択し、「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/60eceaeb-b7ca-aab5-a2d3-de0278c32344.png)

メモリの割り当てはデフォルトの1024MBで特に問題ないので、そのまま「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/22c95a9c-ff77-7de9-b748-89d600d4bc09.png)

ネットワークの構成では先ほど確認した仮想スイッチを指定して、「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/14bb442b-c8f5-7570-f31d-7d858b387a5a.png)

仮想ハードディスクの接続は「後で仮想ハードディスクを接続する」を必ず選び、「次へ」をクリックします。
(ここで仮想ハードディスクを作成するとAzureで認識できないVHDX形式になってしまう)
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/dbd32928-9d54-b17c-fe47-9a6c189cb231.png)

最後に「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/22067d0f-a3b1-01af-207a-15ea3978f803.png)

操作メニューから先ほど作成した仮想マシンの「設定」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/1fac4147-ccb0-38f4-dfbf-00a7cb4b9f3f.png)

左のツリーから「IDEコントローラー0」を選択して、「ハードドライブ」の「追加」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/2bc06879-a20d-2381-a331-956c7e4e567d.png)

「仮想ハードディスク」を選択後、「新規」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/989e7fe8-b3a1-127e-f43f-b75fd015a544.png)

仮想ハードディスクの新規作成ウィザードが開くので「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/83b0dd29-3c59-bd1e-87e1-5bd0328864bd.png)

ディスクフォーマットの選択では「VHD」を選択して、「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/2e161da2-b733-ee60-f572-62d25f82f3e2.png)

ディスク種類の選択では「容量固定」を選択して、「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/1326e589-df77-6ad3-c0a8-c55207748729.png)

作成するVHDファイルの名前と場所を適当に入力して、「次へ」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/267e1f05-84e4-330e-9aaf-882c649d3332.png)

「新しい空の仮想ハードディスクを作成する」を選択して、サイズには30GB(任意)を入力します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/9dc4bb9b-a373-2791-8bc7-e44b160fede3.png)

最後に「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/be820939-67b0-c318-d07f-5dac1700d098.png)

容量固定のディスク作成には暫く時間がかかりますので待ちます。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/887b363e-fbcd-ef15-25d1-48ab59fbdb62.png)

##DVD isoイメージからRHELの起動およびインストール
仮想マシンの設定画面から「IDEコントローラー1」をクリックして、メディアとして「イメージファイル」を選択後、ファイル名に先にRed HatのサイトからダウンロードしたRHELのisoファイルの場所を指定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/928a19b3-5a2d-465d-59a2-103971566f04.png)

Hyper-Vマネージャーから対象仮想マシンの「接続」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/314d4159-b464-abaa-a25d-12f4feed2dd4.png)

別ウインドウで表示された仮想マシンのコンソール画面から電源ボタンをクリックして仮想マシンを起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/29b9d607-82f2-a11d-a1cf-71c796d5c8ad.png)

インストーラーの起動確認画面が出るので1分以内に[enter]を押してインストーラーを起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/4db7d927-5d3c-b76d-68d6-9e4b3a2dc1da.png)

暫く待つと、グラフィカルなRHELインストーラーの画面が表示されるので、左の言語一覧から「日本語」を選択して、「続行」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/7138a8a4-55a4-86ff-897d-e749878b5a64.png)

インストール概要画面にて「インストール先」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/825ed67a-4b84-6fdf-fa89-ed766a36820f.png)

「その他のストレージオプション」にて「パーティションを自分で構成する」を選択後、「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/c18b07ab-6364-1ebe-83ae-f489333273ff.png)

手動パーティション設定画面に変わるので、「新しいマウントポイントに次のパーティションスキーム設定を使用させます」の欄を「標準パーティション」に変更します。
その後「＋」ボタンをクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/c2b8890d-472d-e2c7-09bf-63019e28ff71.png)

新規のマウントポイントとして「/」を入力するかリストから選択後、「マウントポイントの追加」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/1cd65d87-3bda-d995-50df-fb627f940c42.png)

ルートパーティション(/)がVHDの最大サイズである30GBで割り当てられたので「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/1cf01473-87a0-778c-76c6-5553f6763a13.png)

画面下部に警告メッセージが表示されますが、これはswap領域が無いためです。Azure移行後にswap領域は再設定するため、このメッセージは無視して再度「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d8bbf55a-ce40-5575-6ea4-641252635b04.png)

変更の概要画面が表示されるので「変更を許可する」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/68d3bcd6-f8e8-5ec8-2a4f-fe3453667b19.png)

「インストールの開始」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/a6b6ca5d-dd56-8bac-d11e-eb681c07edb3.png)

インストール中に設定画面が表示されるので「ROOTパスワード」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/046af97c-09ba-775d-0cb8-5dea817fc65c.png)

ROOTパスワードを2回入力後、「完了」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/f08f5cea-b635-cf17-3daa-eb53b5b14070.png)

暫く待つとインストールが完了します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/d1a001e0-c915-b8dc-496f-35e09aa10b23.png)

仮想マシンの設定画面でIDEコントローラー1のメディアを「なし」に変更後、仮想マシンを再起動します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/b8b57d8f-9eae-3364-8a28-1778cea0b65b.png)

無事起動してrootでログインが完了しました。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/92c63772-56f4-be13-ec16-24edeb947fa8.png)

##Azure上で動かすための各種設定
MSから提供されているドキュメント[Hyper-V マネージャーからの RHEL 7.1/7.2 仮想マシンの準備](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-redhat-create-upload-vhd?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#rhel7xhyperv)がそのままRHEL 7.3でも有効なので、この手順通りに実施します。

一点注意として、(5)で次回起動時にはネットワークサービスを有効にしていますが、この手順実施時点では実際にはネットワークサービスは起動していません。
そのため(6)の「subscription-manager」コマンド実行前に以下のコマンドを実行しておくといいです。

```
# sudo service network start
```

参考までに上記手順で変更したファイル類について変更後の内容を以下に示します。

```
[root@localhost ~]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=localhost.localdomain
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
[root@localhost ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true“
[root@localhost ~]# cat /etc/ssh/sshd_config |grep ClientAliveInterval
ClientAliveInterval 180
```

一通り最後まで手順が終わったら仮想マシンコンソールから「操作」「シャットダウン」で仮想マシンを停止します。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/bfa3e474-9bfc-db01-79c2-230f663ebe00.png)

Hyper-Vマネージャーから今回作成した仮想マシンの「削除」をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/eebdfed2-272a-7450-0a05-ee70af0374b2.png)

削除確認画面で「削除する」をクリックします。
こちらで仮想マシンを削除してもVHDファイルは消えませんのでご安心を。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/a7e86734-2c5d-c0ac-f532-466158956e28.png)

Azureのカスタムイメージとして利用可能なVHDファイルが出来上がりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/137436/22d4044d-57a5-1635-adf1-aa9fbef0e73c.png)

#おわりに
この記事ではRHELのカスタムイメージを作成するところまでを紹介しました。
カスタムイメージから仮想マシンをデプロイする方法として、以下のサイトが参考になります。

[Linux オペレーティング システムを格納した仮想ハード ディスクの作成とアップロード](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-classic-create-upload-vhd)

ただしこちらの手順はAzure CLIを利用した方法となっています。
JSONテンプレート(+Azure Storage Explorer)を使用したカスタムイメージからのデプロイ方法については「[Azure Resource Manager(ARM)の小ネタ:仮想マシンのカスタムイメージをJSONテンプレートからデプロイ](http://qiita.com/yotan/items/4d59a62a584874b49f5f)」を参照してください。