例: FreeBSD イメージ

この例は、OpenStack と bsd-cloudinit と互換性がある、最小の FreeBSD イメージを作成します。bsd-cloudinit プログラムは、独立してメンテナンスされており、活発に開発されています。プロジェクトの現状に関する最良の情報源は bsd-cloudinit です。

virtio ドライバーありの KVM が、OpenStack 運用者の間で最も幅広く使用されているため、これを仮想化プラットフォームとして使用します。クラウド仮想化環境に別のプラットフォームを使用する場合、イメージ作成時にそのプラットフォームを使用してください。

この例は、FreeBSD 10 イメージを作成する方法を示しています。FreeBSD 9.2 イメージを作成する場合、違いを記載されたこれらの手順を実行します。

FreeBSD イメージの作成方法

  1. 仮想ドライブを作成します。

    $ qemu-img create -f qcow2 freebsd.qcow2 1G
    

    FreeBSD の最小サポートディスク容量は 1GB です。目標はできる限り最小のベースイメージを作成することなので、この例は最小容量を使用します。この容量は、オプションの ドキュメントゲームlib32 コレクションを含めるには十分です。 Ports Collection を含める場合、さらに 1GB 必要です。 ソース を含める場合、512MB 追加します。

  2. インストーラーの ISO を取得します。

    $ curl ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-bootonly.iso \
      > FreeBSD-10.1-RELEASE-amd64-bootonly.iso
    
  3. 手元のコンピューターで仮想マシンを起動します。本番環境で使用するものと、同じハイパーバイザー、仮想ディスクドライバー、仮想ネットワークドライバーを使用します。

    以下のコマンドは、最小メモリ容量 256 MB を使用します。

    $ kvm -smp 1 -m 256 -cdrom FreeBSD-10.1-RELEASE-amd64-bootonly.iso \
      -drive if=virtio,file=freebsd.qcow2 \
      -net nic,model=virtio -net user
    

    インストールプロセスを高速化するために、メモリを最大で 1 GB まで指定できます。

    この仮想マシンは、パッケージをダウンロードするために、インターネットにアクセスできる必要があります。

    注釈

    同じハイパーバイザーを使用することにより、本番環境にあるデバイスと確実に同じものをエミュレートできます。しかしながら、準仮想化の代わりに完全仮想化を使用する場合、同じハイパーバイザーを使用する必要はありません。また、FreeBSD のデバイス名はデバイスドライバーと関連するため、同じ種類の仮想ハードウェアを使用する必要があります。本番環境のルートブロックデバイスの名前、主ネットワークインターフェースの名前がイメージの作成中に使用した名前と異なる場合、エラーが発生する可能性があります。

    これで、ダウンロードしたインストール ISO から起動し、前に作成した空の仮想ディスクを接続した、仮想マシンができました。

  4. オペレーティングシステムをインストールするために、仮想マシン内で以下の手順をすべて実行してください。

    1. プロンプト表示時、Install モードで ISO の実行を選択します。

    2. デフォルトのキーマップを使用するか、必要に応じて適切なキーマップを選択します。

    3. イメージのホスト名を指定します。 bsd-cloudinit を使用する場合、このイメージからインスタンスを起動するとき、OpenStack により提供される名前でこの名前を上書きします。

    4. オプションのシステムコンポーネント docgameslib32portssrc に関するプロンプトが表示されたとき、必要なもののみを選択します。追加コンポーネントを選択しなくても、完全に動作するインストールを実行できます。前に記載したとおり、1 GB 仮想ディスクを持つシステムは、docgameslib32 を含められます。ports コレクションは、少なくとも 1GB の追加領域が必要です。多くの ports をインストールする予定がある場合、さらに多くなるかもしれません。src コレクションは、512MB の追加が必要です。

    5. 主ネットワークインターフェースが DHCP を使用するよう設定します。この例では、このインターフェースは vtnet0 という名前で、virtio ネットワークデバイスを使用します。

    6. デフォルトのネットワークミラーを受け入れます。

    7. ディスクパーティションをセットアップします。

      ディスクパーティションは、イメージ作成プロセスの重要な要素であり、自動生成されるデフォルトのパーティション構成は、今のところ bsd-cloudinit で動作しません。

      デフォルトが正しく動作しないため、手動パーティションを選択する必要があります。パーティションエディターは、ブロックデバイスを 1 つだけ表示します。ディスクのデバイスドライバーに virtio を使用する場合、 vtbd0 という名前になります。このデバイスを選択し、 create コマンドを 3 回実行します。

      1. パーティションテーブルを作成するために、Create を選択します。この操作は、パーティションテーブルが存在しない場合のデフォルトです。次に、一覧から GPT GUID Partition Table を選択します。この選択がデフォルトです。

      2. 2 つのパーティションを作成します。

        • 1 番目のパーティション: マウントポイントを持たない 64 kB freebsd-boot パーティション。

        • 2 番目のパーティション: すべての残り領域を使用した / マウントポイントを持つ freebsd-ufs パーティション。

      以下の図は、1 GB 仮想ディスクを持つ、完成したパーティションテーブルを示します。

      _images/freebsd-partitions.png

      変更を反映するために、Finish を選択し、Commit を選択します。

      注釈

      この例を変更する場合、 / にマウントされるルートパーティションは、インスタンスタイプが提供するディスク容量へと実行時に拡張できるよう、ドライブの最後のパーティションにする必要があります。 bsd-cloudinit は、これが 2 番目のパーティションにあると仮定して、現在ハードコードされています。

  5. root パスワードを選択します。

  6. CMOS のタイムゾーンを選択します。

    仮想化された CMOS は、その時刻を必ず UTC で保存します。そのため、どちらかわからなければ、UTC を選択してください。

  7. 環境に合わせたタイムゾーンを選択します。

  8. ブート時に起動するサービス一覧から、 ssh を選択する必要があります。オプションとして、他のサービスを選択できます。

  9. オプションとして、ユーザーを追加します。

    このとき、ユーザーを追加する必要がありません。bsd-cloudinit プログラムは、freebsd ユーザーアカウントが存在しない場合、それを追加します。このユーザーアカウント用の ssh 鍵が OpenStack を用いて関連付けられます。このユーザーアカウントをカスタマイズする場合、いま作成します。例えば、ユーザーのシェルをカスタマイズしたい場合です。

  10. 最終設定

    このメニューにより、これまでの設定を更新できます。設定が正しいことを確認して、exit をクリックします。

  11. 終了後、手動設定ステップを実行するために、シェルを開けます。Yes を選択して、いくつかの OpenStack 固有の変更を実行します。

    1. コンソールをセットアップします。

      # echo 'console="comconsole,vidconsole"' >> /boot/loader.conf
      

      これは、コンソールの出力先をシリアルコンソールに設定します。 nova consolelog により、ここに表示されます。これは、設定した VNC や SPICE を用いたサイトのビデオコンソールです。

    2. ブート遅延を最小化します。

      # echo 'autoboot_delay="1"' >> /boot/loader.conf
      
    3. 最新の bsd-cloudinit-installer をダウンロードします。ダウンロードのコマンドは、 fetch コマンドが HTTPS URL を処理する方法が異なるため、FreeBSD 10.1 と 9.2 で異なります。

      FreeBSD 10.1 では、 fetch コマンドがデフォルトで SSL 接続相手を検証します。そのため、CA ルート証明書を含む ca_root_nss パッケージをインストールし、その場所を fetch に伝える必要があります。FreeBSD 10.1 の場合、これらのコマンドを実行します。

      # pkg install ca_root_nss
      # fetch --ca-cert=/usr/local/share/certs/ca-root-nss.crt \
        https://raw.github.com/pellaeon/bsd-cloudinit-installer/master/installer.sh
      

      FreeBSD 9.2 の fetch は、HTTPS の相互検証をサポートしません。FreeBSD 9.2 の場合、このコマンドを実行します。

      # fetch https://raw.github.com/pellaeon/bsd-cloudinit-installer/master/installer.sh
      
    4. インストーラーを実行します。

      # sh ./installer.sh
      

      このコマンドを実行して、最新の bsd-cloudinit パッケージをダウンロードしてインストールします。また、必要な前提パッケージをインストールします。

    5. sudo をインストールし、freebsd ユーザーがパスワードなしでアクセスできるよう設定します。

      # pkg install sudo
      # echo 'freebsd ALL=(ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/10-cloudinit
      
  12. システムを電源オフします。

    # shutdown -h now