Azure で FreeBSD を実行する
このポストは、5 月 22 日に投稿した Running FreeBSD in Azure の翻訳です。
このブログ記事の読者の多くの方がご存知かと思いますが、マイクロソフトは長年 Linux コミュニティと共同で作業を行っており、Linux カーネル用のデバイス ドライバーを多数提供しています。これは Linux 統合サービス (英語) と呼ばれています。これらのドライバーは、Linux システムを Hyper-V および Microsoft Azure 環境下で動作させるうえで必要なものです。
さらに最近では FreeBSD コミュニティとも協力して、同様のドライバーを FreeBSD 10 にも提供しています。これらは、FreeBSD 用の BSD 統合サービス (BIS) と呼ばれています。今回の記事では、FreeBSD 10 のイメージを Microsoft Azure で実行するための準備とアップロード方法について説明します。
免責事項: この記事では FreeBSD を Azure で実行するための詳細な手順を説明しますが、現時点では FreeBSD は Microsoft Azure の推奨プラットフォーム (英語) ではなく、このためサポート対象外となっています。
基礎となる FreeBSD イメージを取得する
この記事では、FreeBSD 10 x86_64 のイメージを Microsoft Azure で使用するための準備について説明します。最初に、FreeBSD をローカルの Hyper-V (Windows Server 2012 R2 を推奨) にインストールします。FreeBSD コミュニティで VHD 形式での事前生成済み FreeBSD イメージが提供されていますので、こちらを利用すると作業が簡単になります。
- まず、次の URL にアクセスします。
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/VM-IMAGES/10.0-RELEASE/amd64/Latest/
次に、下記のような URL から最新の *.vhd.xz ファイルをダウンロードします。
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/VM-IMAGES/10.0-RELEASE/amd64/Latest/FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd.xz - ダウンロードした .xz ファイルを解凍して、FreeBSD-10.0-RELEASE-amd64-*.vhd というファイルを展開します。この作業に役立つユーティリティ ソフトは多数ありますが、私はいつも 7-zip (英語) を使用しています。
- Hyper-V で仮想マシンを新規作成し、展開した VHD を IDE ディスクとして追加します (下図参照)。
FreeBSD の VHD のサイズを変更する (必要な場合)
インストール用 ISO ファイルを使用して FreeBSD をユーザー自身の手で Hyper-V の VM にインストールする場合は、このセクションの手順は省略できます。しかし、ftp.freebsd.org で提供されている事前生成済みの VHD を使用する場合は、VHD のサイズを変更して Azure との互換性を確保する必要があります。
Microsoft Azure 用の VHD を作成する場合、VHD のサイズはメガバイト単位の整数である必要があります。この条件を満たしていない場合、Azure で FreeBSD イメージを新規作成するときに、次のようなエラー メッセージが表示されます。
“The VHD https://<mystorageaccount>.blob.core.windows.net/vhds/FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).”
上記の例では、21,475,270,656 バイトは 20,480.4140625 MB となるため、VHD が 21,000 MB ちょうどになるようにディスクのサイズを変更します。これは、Powershell または Hyper-V の管理コンソールから簡単に実行できます。
- Hyper-V サーバーの場合、Powershell のコマンド プロンプトを開き、Resize-VHD コマンドレットを実行して VHD のサイズを増やします。
PS > Resize-VHD -Path \<PATH>\FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd -SizeBytes 21GB
- Hyper-V の管理コンソールからでも、ディスクのサイズを変更できます。この場合、FreeBSD の VM の設定メニューで FreeBSD の仮想 IDE ドライブを選択し、[Edit] をクリックして VHD 編集ウィザードを開きます。
次に、FreeBSD システムを起動して、ルートとしてログインします。コミュニティが提供している事前生成済みの VHD では、ルート パスワードが既定では設定されていないため、パスワードの入力は不要です。
ログイン完了後 gpart を実行し、ディスクのパーティションを確認します。VHD のサイズを変更したため、ディスク da0 は CORRUPT とマークされているはずです。
root@:~# gpart show
34 41942973 da0 GPT (21G) [CORRUPT]
34 1024 1 freebsd-boot (512K)
1058 2097152 2 freebsd-swap (1.0G)
2098210 39844797 3 freebsd-ufs (19G)
この状態で問題ありません。次のコマンドを実行して da0 を修正します。
root@:~# gpart recover da0
da0 recovered
root@:~# gpart show
=> 34 44040125 da0 GPT (21G)
34 1024 1 freebsd-boot (512K)
1058 2097152 2 freebsd-swap (1.0G)
2098210 39844797 3 freebsd-ufs (19G)
41943007 2097152 - free - (1.0G)
オプションで、FreeBSD のルート パーティションのサイズを変更し、解放された空間を回収することもできます。ただし、ルートのファイル システムのサイズを変更するには FreeBSD Live CD から起動する必要があるため、余分な手間が掛かります。それでも解放された空間を回収する場合は、次の手順でルートのファイル システムを拡張します。
rroot@:~# gpart resize -i 3 da0
da0p3 resized
root@:~# gpart show
=> 34 44040125 da0 GPT (21G)
34 1024 1 freebsd-boot (512K)
1058 2097152 2 freebsd-swap (1.0G)
2098210 41941949 3 freebsd-ufs (20G)
root@:~# growfs /dev/da0p3
これで VHD の準備が完了しました。次に、Azure 用 FreeBSD システムの準備を行います。
Azure 用 FreeBSD システムを準備するs
この手順は簡単で、数個のコンポーネントをインストールし、いくつかの構成を行って、Azure でシステムを実行できるようにするだけです。
- ネットワークを有効にする
hn0 インターフェイスを構成して、/etc/rc.d/netif を使用してネットワークを停止および開始できるようにします。
root@:~# echo 'ifconfig_hn0="SYNCDHCP"' >> /etc/rc.conf
root@:~# service netif restart
- SSH を有効にする
/etc/rc.conf で SSH デーモンを有効にし、さらにホスト キーを新規作成します。
root@:~# echo 'sshd_enable="YES"' >> /etc/rc.conf
root@:~# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
root@:~# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
root@:~# service sshd restart
FreeBSD のゲストに対して SSH を使用して構成を続行する場合、非特権ユーザーを新規作成するか、ルート ユーザーのパスワードを設定し、/etc/ssh/sshd_config で “PermitRootLogin yes” を設定します (この方法は推奨しません)。
- Python 2.7 およびその他の必要なモジュールをインストールする
root@:~# pkg install python27 py27-asn1
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/freebsd:10:x86:64/latest, please wait…
Verifying signature with trusted certificate pkg.freebsd.org.2013102301… done
Installing pkg-1.2.7_2… done
If you are upgrading from the old package format, first run:
# pkg2ng
Updating repository catalogue
digests.txz 100% 1071KB 1.1MB/s 1.1MB/s 00:00
packagesite.txz 100% 4929KB 4.8MB/s 4.8MB/s 00:01
Incremental update completed, 22926 packages processed:
0 packages updated, 0 removed and 22926 added.
The following 4 packages will be installed:
Installing gettext: 0.18.3.1
Installing python27: 2.7.6_4
Installing py27-setuptools27: 2.0.1
Installing py27-asn1: 0.1.4_1,1
The installation will require 81 MB more space
12 MB to be downloaded
Proceed with installing packages [y/N]: y
ここで、/usr/bin/python に格納されている Python 2.7 のバイナリを見つけやすいように、シンボリック リンクを新規作成する必要があります。
root@:~# ln -s /usr/local/bin/python2.7 /usr/bin/python
- sudo をインストールする
通常、Azure ではルート アカウントを無効化し、非特権ユーザー アカウントから sudo を使用して権限を昇格させコマンドを実行します。
root@:~# pkg install sudo
- Azure Linux エージェントをインストールする
Azure Linux エージェントの最新リリースは、次の Github の URL から入手できます。
https://github.com/Azure/WALinuxAgent/releases (英語)
FreeBSD 用にはバージョン 2.0.5 以降を使用することを推奨します。しかし、一般的にはリモート 2.0 ブランチが非常に安定しているため、ここではこのブランチの最新のエージェントを直接プルします。これにより、FreeBSD のサポート対象となっている最新のエージェントを取得できます。
root@:~# pkg install wget
......
root@:~# wget https://raw.githubusercontent.com/Azure/WALinuxAgent/2.0/waagent
root@:~# mv ./waagent /usr/sbin/
root@:~# chmod 755 /usr/sbin/waagent
root@:~# /usr/sbin/waagent -install
これで、Azure エージェントのインストールが完了し、実行状態になりました。
- ( 任意 ) Azure に VHD をアップロードする前にシステムのプロビジョニング解除を実行するプロビジョニング解除は、イメージの「汎用化」を目的として行います。この操作では、SSH のホスト キーの削除、ルート ユーザーの無効化とパスワードの削除、DHCP キャッシュ エントリの削除などを行います。一般的にはこの操作は推奨されますが、この VHD を広く共有する予定がない場合は、この手順は省略可能です。
root@:~# /usr/sbin/waagent –deprovision
WARNING! The waagent service will be stopped.
WARNING! All SSH host key pairs will be deleted.
WARNING! Cached DHCP leases will be deleted.
WARNING! Nameserver configuration in /etc/resolv.conf will be deleted.
WARNING! root password will be disabled. You will not be able to login as root.
Do you want to proceed (y/n)? y
注 : このコマンドを実行した後、ovf-env.xml ファイルが存在しないために警告メッセージが表示される場合があります。この警告は無視してかまいません。
- FreeBSD 仮想マシンをシャットダウンする
これですべて完了しました。 一連の作業は簡単に完了させることができたかと思います。
FreeBSD VHD を Azure にアップロードする
VHD を Azure にアップロードする方法は複数あります。この記事では、Azure Powershell ツールを使用して VHD をストレージ アカウントにアップロードします。
- まず、Hyper-V サーバーの FreeBSD 仮想マシンがシャットダウンされていることを確認します。
- 次に、Add-AzureVhd コマンドレットで VHD をアップロードします。
PS C:\> $destination = “https://MYACCOUNT.blob.core.windows.net/vhds/FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd”
PS C:\> $localfile = “C:\PATH\FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd”
PS C:\> Add-AzureVhd -Destination $destination -LocalFilePath $localfile
- アップロード完了後は、VHD を使用してイメージを作成できます。ここから、任意の数の FreeBSD 仮想マシンを Azure にプロビジョニングできます。
PS C:\> $destination = “https://MYACCOUNT.blob.core.windows.net/vhds/FreeBSD-10.0-RELEASE-amd64-20140116-r260789.vhd”
PS C:\> Add-AzureVMImage -ImageName FreeBSD10.0 -MediaLocation $destination -OS Linux
Powershell ツールでは “-OS FreeBSD” パラメーターが現時点ではサポートされていないため、ここでは OS の種類は “Linux” を使用する必要があるので、ご注意ください。
FreeBSD 仮想マシンを Azure で作成する
これで、FreeBSD 仮想マシンを Azure で新規作成する準備が整いました。この作業でも Powershell または CLI ツールを使用できます。また、通常の方法でポータルから FreeBSD 10 のイメージをプロビジョニングすることもできます。
- Azure 管理ポータル (https://manage.windowsazure.com/) にログインし、[NEW]、[COMPUTE]、[VIRTUAL MACHINE]、[FROM GALLERY] の順にクリックします。
- [MY IMAGES] をクリックします。
- [Choose an Image] メニューで [MY IMAGES] を選択します。
- 使用する FreeBSD 10 のイメージを選択し、画面の指示に従ってホスト名とパスワードまたは SSH キーを設定します。
プロビジョニングが完了すると、Azure で新規作成した FreeBSD 10 の VM が実行されます。以上で完了です。