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 イメージが提供されていますので、こちらを利用すると作業が簡単になります。

  1. まず、次の 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
  2. ダウンロードした .xz ファイルを解凍して、FreeBSD-10.0-RELEASE-amd64-*.vhd というファイルを展開します。この作業に役立つユーティリティ ソフトは多数ありますが、私はいつも 7-zip (英語) を使用しています。
  3. 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 http://<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 システムを準備する

この手順は簡単で、数個のコンポーネントをインストールし、いくつかの構成を行って、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+http://pkg.FreeBSD.org/freebsd:10:x86:64/latest, please wait…

Verifying signature with trusted certificate pkg.freebsd.org.2013102301done

Installing pkg-1.2.7_2done

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 = “http://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 = “http://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 が実行されます。以上で完了です。

Comments (0)

Skip to main content