個人的なメモなので詳細省きます。
VyattaとWindows AzureのVPNゲートウェイなりをつなごう!というのはデプロイ王子などたくさんの人が書いてたりしますが、VyattaそのものをWindows Azureで動かす、というのはあんまり無かったので試してみました。
※Windows Azureの仮想マシンで動かすわけですが、2種類の展開方法が仮想マシンにはあるわけですが、今回は一般化された「イメージ」ではなく、ローカルで作った仮想マシンをそのまま動かす方法を書きます。
※使うVyattaは Vyatta VC6.6R1 (amd64)です。
1. Vyattaイメージの作成
手元のHyper-V 3.0なサーバーにVyattaをインストールします。注意点としては以下の通り。
- 世代1で作ること
- NICは1枚にすること
- 仮想ハードディスは固定容量VHD
- DHCPにする
というところです。
VHDは2GBもあれば十分でしょう。先に作っておきます。
CD(ISO)からブートしてVyatta/vyattaでログインした後、install system でインストールします。
途中、なぜかHDDが2つ見えてしまいRAID1にするか聞かれます。謎い。とりあえずNoで。
後は適当に自動設定なりお好みで。
インストールが終わったらCD抜いて(切断して)再起動しましょう。
2. Vyattaの設定
普通に起動すると思うので、最低限以下の設定を行います。※configureで設定モードに入って設定後commit;save;exitね。
- DHCP化
DHCPにしないとAzure上に持っていってもどうしようもなくなるので。set interfaces ethernet eth0 address dhcp
- SSHの有効化
SSHでつなげられないとどうしようもないですよね。set service ssh
まぁそのほか設定しておきたいことがあれば設定しておきましょう。
3. Windows Azure Linux Agentのインストール
無くても動くのは動きますが一応入れておくことにします。どうもDebian系で有志の方が提供しているWindows Azure Linux Agent(waagent)はPython2.7系に依存しているらしく、Vyatta 6.6では超面倒くさそうなので素直にGitHubからwaagentを持ってきます。
/usr/bin/curl -L -O https://codeload.github.com/WindowsAzure/WALinuxAgent/zip/master
master とかでダウンロードされるのでunzipしましょう。
/usr/bin/unzip master
WALinuxAgent-master ディレクトリができました。
あとはWALinuxAgent-masterディレクトリにある waagent を /usr/sbinにコピーしてchmodとかで実行できるようにしておきましょう。
準備ができたのであとはインストール
sudo /usr/sbin/waagent -install
以上です。
4. Windows Azureへアップロードする前準備
さて本来ならここで一般化などの作業(一時ユーザー削除したりいろいろ)するわけですが、それするとWindows Azure上でイメージ展開に失敗するので、ここでは割愛。そのまま持っていくことを前提とします。
※ちなみに失敗する原因はプロビジョニング用の設定(ユーザーID/Passや証明書など)が入ったファイル(ovf-env.xml)をDVDとして接続し、WAAgentが読み込んで処理する、、のですがUDFフォーマットとしてマウントするのですね。でVyattaにはUDFモジュールがインストールされてないのでマウントできず失敗、となるわけです。。。回避方法募集中。
さてさて、1つ目。よくあるはまりポイントを回避しときましょう。
はまりました!
さて回避方法。
1. del interfaces;commit;save;する
2. /opt/vyatta/etc/config/config.boot からhw_id行を削除する
今回は2でやっちゃいました。
要はeth0なインターフェースにMACアドレス固定で設定されちゃって、Windows Azureなど別マシンに持っていくとMACアドレスが違う=ネットワークの設定ができない=\(^o^)/オワタになると。
MACアドレスが記述された行(hw_id)を消すか、インターフェースを消しておけば再起動時に再設定されるのでOK、ということです。
※この設定した後再起動しちゃうとまた固定化されたりするので気を付けましょう。
5. Windows AzureへVHDをアップロード
後は普通にAdd-AzureVhdとかでUploadしましょう。
Add-AzureVhd -Destination http://<Storage>.blob.core.windows.net/vhds/xxx.vhd -localfilepath "xxx.vhd"
アップロード後はOS(Linux)が含まれたDiskとしてAzure上で定義してあげましょう。
6. Vyatta on Azureを起動
VHDができたら、ギャラリーから仮想マシンを作成します。
後は特に一緒です。イメージから展開するのではないので、ユーザーIDや証明書のアップロードなどはありません。
7. 動作確認
sshでつないで適当に見てみましょう。
ちゃんとエージェントも起動しています。
vyatta@vyattacentral.cloudapp.net's password: Linux vyatta 3.3.8-1-amd64-vyatta #1 SMP Wed Mar 13 10:35:28 PDT 2013 x86_64 Welcome to Vyatta. This system is open-source software. The exact distribution terms for each module comprising the full system are described in the individual files in /usr/share/doc/*/copyright. Last login: Fri Jan 31 16:10:29 2014 from 192.168.245.16 vyatta@vyatta:~$ ps aux | grep waagent root 1598 0.4 1.4 58544 9776 ? Sl 16:36 0:00 /usr/bin/python /usr/sbin/waagent -daemon vyatta 2236 0.0 0.0 6076 576 pts/0 S+ 16:38 0:00 grep waagent
/var/log/waagent.log も一応見ておきましょうか。
vyatta@vyatta:~$ cat /var/log/waagent.log 2014/01/31 16:13:49 WARNING:Moved /lib/udev/rules.d/75-persistent-net-generator.rules -> /var/lib/waagent/75-persistent-net-generator.rules 2014/01/31 16:13:49 Configured SSH client probing to keep connections alive. 2014/01/31 16:36:24 Windows Azure Linux Agent Version: WALinuxAgent-1.4.1 2014/01/31 16:36:24 Linux Distribution Detected : Debian 2014/01/31 16:36:24 Module /lib/modules/3.3.8-1-amd64-vyatta/kernel/drivers/ata/ata_piix.ko driver for ATAPI CD-ROM is already present. 2014/01/31 16:36:24 VMM Init script not found. Provisioning for Azure 2014/01/31 16:36:24 Waiting for network. 2014/01/31 16:36:34 IPv4 address: 10.0.1.4 2014/01/31 16:36:34 MAC address: 00:15:5D:39:68:xx 2014/01/31 16:36:34 Probing for Windows Azure environment. 2014/01/31 16:36:34 DoDhcpWork: Setting socket.timeout=10, entering recv 2014/01/31 16:36:34 Discovered Windows Azure endpoint: 168.63.129.xx 2014/01/31 16:36:34 Fabric preferred wire protocol version: 2012-11-30 2014/01/31 16:36:34 Negotiated wire protocol version: 2011-12-31 2014/01/31 16:36:35 Retrieved GoalState from Windows Azure Fabric. 2014/01/31 16:36:35 ExpectedState: Started 2014/01/31 16:36:35 ContainerId: fce7b1a8-0793-4140-8570-6ebb03010bxx 2014/01/31 16:36:35 RoleInstanceId: 14c98930f6314e8a9b3d46f5569b88xx.vyattacentral 2014/01/31 16:36:35 Provisioning image started. 2014/01/31 16:36:35 Module /lib/modules/3.3.8-1-amd64-vyatta/kernel/drivers/ata/ata_piix.ko driver for ATAPI CD-ROM is already present. 2014/01/31 16:36:35 Waiting for DVD - sleeping 1 - 1 try... 2014/01/31 16:36:36 Resource disk (/dev/sdd1) is mounted at /mnt/resource with fstype ext4
まぁなんかいろいろ動いてそうです。でもやっぱりDVD系のマウントに失敗してるんですよねぇ。致命的ではなさそうなんですが。
2014/01/31 16:36:56 ERROR:CalledProcessError. Error Code: 32 2014/01/31 16:36:56 ERROR:CalledProcessError. Command string: "mount -v /dev/hdc /mnt/cdrom/secure" 2014/01/31 16:36:56 ERROR:CalledProcessError. Command result: "mount: you must specify the filesystem type 2014/01/31 16:36:56 ERROR:mount: you didn't specify a filesystem type for /dev/hdc 2014/01/31 16:36:56 ERROR: I will try all types mentioned in /etc/filesystems or /proc/filesystems" 2014/01/31 16:36:56 mount: you must specify the filesystem type 2014/01/31 16:36:56 mount: you didn't specify a filesystem type for /dev/hdc 2014/01/31 16:36:56 I will try all types mentioned in /etc/filesystems or /proc/filesystems
ふむ。
まぁWindows Azureからみたらちゃんと動いてます。
※イメージ展開するとプロビジョニング失敗するのでまぁこれでいいかという感じ。。
以上。