Windows Azure

Windows Azure Virtual Machineで提供されているOpenlogicのCentOS 6.3イメージにはカーネルヘッダー(kernel-headers)が含まれていません。
その為、開発ツールをインストールしようとすると、インストールできずに途方にくれてしまいます。
開発ツールを入れないとソースからビルドして、ミドルウェアをインストールできないので、
結構いや~んな感じです。

そんな問題に対して、OpenLogic Azure Support Teamが、対応方法を回答していました。
(参考:Openlogic Centos 6.3 image: no kernel-headers

sudo yum –disableexcludes=main install kernel-headers-2.6.32-279.14.1.el6.openlogic.x86_64

カーネルヘッダーをインストールしなさいということですね。

ちなみに、自動スクリプトで対応したいなら、gccなどのパッケージをインストールする前に、次のようなコードを使えばいいよっとアドバイスしている人もいました。

sudo yum -y -q –disableexcludes=main install kernel-headers-*.el6.openlogic.x86_64

Windows Azure

Virtual Machine名とホスト名とDNSの関係

image

 

Virtual Machineを作成する際に、Virtual Machine Nameを指定します。
ここで指定したVirtual Machine NameがLinux上のホスト名に登録されます。Linux上で、「> hostname」とコマンドを打って返ってくる文字列となります。

AzureのインターナルのDNSにも登録され同じDNS名に登録された仮想マシン間であれば、直接通信できます。DNSが名前解決してくれるので、Virtual Machine名で通信できます。

仮想マシン作成直後は、

Virtual Machine Name=ホスト名=DNS登録名

となっています。しかし、手動でホスト名を変更しても自動では、Virtual Machine Nameに反映されないため、ズレが発生してしまいます。
今のところ、仮想マシンを作成した後にVirtual Machine名を変更する術が提供されていないようなので、
後から変更はできないようです。
そのため、後からLinux上のホスト名を変更しても、他の仮想マシンから変更後のホスト名では接続することができません。

/etc/resolv.conf ネームサーバーの設定

次のような感じで設定されています。

; generated by /sbin/dhclient-script
search 2d2eae9005.test.27672059.asiaeast.internal.cloudapp.net
nameserver 10.146.190.200

Linuxのイメージを作成する方法

1.初期化処理を実行する

Linuxのイメージを作成するには、WindowsのSysprep的な処理を実行する必要があります。
Linuxでは、Windows Azure Linux Agentが、その機能を提供しています。

次のコマンドを実行すると、必要な初期化をしてくれます。

sudo waagent –deprovision

コマンドを実行すると、次のような警告と処理継続の確認が表示されます。

image

  • waagentサービスは停止します
  • 全てのSSHホストキーのペアーは削除されます
  • /etc/resolv.conf ネームサーバーの設定を削除します
  • DHCPリースのキャッシュを削除します
  • rootのパスワードを無効化します。rootでログインできなくなります。

この処理をすることで、ホスト名が初期化されます。この処理を飛ばすとホスト名が初期化されないため、イメージから仮想マシンを作成する際にVirtual Machine名を指定したものにならず、同じホスト名のままになり、2つ以上作成できないという悲劇が待っています。

確認方法として、$ cat /etc/sysconfig/network を確認すると、hostname が localhost.localdomain に変更されていることが重要と思われます。補足として、/etc/sysconfig/network-scripts/ifcfg-eth0 や /etc/resolv.conf も書き換えられます。

2.仮想マシンを停止し、Captureを実行する

仮想マシンのコンソールから抜けて、仮想マシンをシャットダウンします。

image

Captureボタンをクリックします。

ダイアログが表示されるので、「I have run the de-provision command on the virtual machine」にチェックを入れ、イメージ名を指定します。
「I have run the de-provision command on the virtual machine」のチェックは必須になっており、チェックを入れずにクリックしてもバリデーションチェックに引っかかります。
ちなみに、手順1をすっ飛ばして、ここのダイアログでチェックを入れてイメージを作成してもイメージは作成されます。しかし、初期化処理が不十分なため、イメージから2つ目以降の仮想マシンを作成しようとしても2つ目以降は正常に作成が完了しません。

image

イメージから仮想マシーンを作成したときのユーザとパスワード

キャプチャーをしようとしている仮想マシンには、仮想マシンを作成する際に指定したユーザーが存在しています。このユーザーは、キャプチャーしてイメージを作成した際に削除されません。

そのためキャプチャーしたイメージから新たに仮想マシンを作成する際に、管理者アカウントに別のユーザーを指定すると、ユーザーが追加で削除され、新旧の管理者アカウントが残ります。

image

上の図で、gloopsとnoraというユーザーがいることがわかります。
gloopsはイメージを作成したときに使用した仮想マシンの管理者アカウントです。
noraは、キャプチャーしたイメージから新たに仮想マシンを作成するときに指定した管理者アカウントです。

仮想マシン名とDNS名

次の図のように、仮想マシンは、DNS名に紐づきます。
同じDNS名に登録されている仮想マシン間はVirtual Machine名で直接通信でき、エンドポイントの設定に関わらずすべてのポートと通信することができます。。別のDNSにある仮想マシン間では、直接通信できません。
test01から、test03に通信するにはDNS名(example.cloudapp.net)でグローバルから接続する必要があり、その際には、エンドポイントで指定したポートでのみ通信できます。

image

参考

How to Capture an Image of a Virtual Machine Running Linux