hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2009-09-29

KVM/libvirtでUbuntu 9.04 server 64bit版サーバーをホストOS、32bit版サーバーをゲストOSとする環境構築

背景

Javaで4GB以上の最大メモリを使いたくてUbuntu 9.04 server 64bit版上で64bit版のJavaを使用していたのですが、32bit版でしか動かないバイナリのみ提供のとあるプログラムを動かす必要が出てきました。

Ubuntu Linux 64bit版で32bit向けバイナリを使えるようにする | おいぬま日報を参考にia32-libsを試してみましたが、いくつかライブラリが自動でインストールされたものの、お目当ての実行ファイルは結局動作せず。

武藤さんのdebian-amd64のページを見るとchrootでできるみたいですが、chrootがよくわかってない私がやるとはまりそうなのでこの道は止めました。

ということで、Ubuntu 9.04 server 64bit版をホストOSとし、Ubuntu 9.04 server 32bit版をゲストOSとする環境構築を行いました。

Ubuntu 9.04 Server 32bit版をゲストOSとしてインストール

うまくいかなかった手順

当初はKVMでCentOSをテキストモードでインストールすると同様にUbuntu 9.04 Server 32bit版のCD-ROM ISOイメージからインストールしようとしました。しかし、"640 x 480 Graphic mode"からリターンキーで進んでも一旦コンソールになったあと再び"640 x 480 Graphic mode"になってしまいます。手元の環境でVirtualBoxでインストールしながら同じようにリターンキーを押していくということも試しましたが、進んでるかどうかさっぱりわからないので止めました。

作業環境からホストOSにvnc viewerでアクセスできるようなネットワーク構成を組んでいればそれでもよかったのですが、このときは外出先からアクセスしていてsshとhttp/httpsでしかアクセスできないのでこの手は使えませんでした。

ubuntu-vm-builderを使うと簡単にインストールできます(でも結局vncは必要)

ubuntu-vm-builderでのゲストOSインストール

調べてみるとKVM Create Guests - Community Ubuntu Documentationでubuntu-vm-builderという便利なものが紹介されていました。これだと自動でインストールしてくれます。

$ sudo aptitude install ubuntu-vm-builder
$ sudo ubuntu-vm-builder --addpkg vim openssh-server --libvirt qemu:///system

デフォルトで作られるアカウントのID/パスワードはubuntu/ubuntuでした。

--libvertオプションはlibvirtの管理下に登録するために必要とのこと。

--addpkgでopenssh-serverを指定しておくと最初からsshサーバーがインストールされて、ゲストOSを起動後ホストOSからsshでアクセスできるとのことなんですが、なんかうまくいかなかったようです。で、この作業をしていたときは家だったのでゲストOS起動後、LAN経由でvnc viewerでアクセスできたので、なんとかなりました。ただし、vncサーバーがデフォルトではlocalhostからしかアクセスできないようになっているので設定変更と反映が必要でした。

ゲストOSのIPアドレスを固定するようにホストOSのDHCPを設定

まずゲストOSの設定ファイルを見て

$ sudo vi /etc/libvirt/qemu/ubuntu.xml

MACアドレスを確認します。

    ...
    <interface type='network'>
      <mac address='52:54:00:52:42:d9'/>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    ...

DHCPの設定を変更します。

$ sudo vi /etc/libvirt/qemu/networks/default.xml

適当に自動割り当てのrangeを狭くして、MACアドレスを指定した行を追加します。

<network>
  <name>default</name>
  <uuid>ae240447-f8ad-b557-a039-4e8bae931331</uuid>
  <forward mode='nat'/>
  <bridge name='virbr1' stp='on' forwardDelay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.100' end='192.168.122.254' />
      <host mac='52:54:00:52:42:d9' name='ubuntu' ip='192.168.122.11' />
    </dhcp>
  </ip>
</network>

保存したらdnsmasqを再起動します。

まずdnsmasqのPIDを調べてkillします。KVM以外でdnsmasqを動かしていなければ以下のコマンドで調べてそのままkillできます。

$ sudo kill `ps --no-heading -o pid -C dnsmasq`

ネットワーク設定をlibvirtに反映します。

$ sudo virsh net-define /etc/libvirt/qemu/networks/default.xml

ゲストOS上のvncサーバーにホストOS以外のマシンからアクセスできるようにする設定

まず現状どうなっているかの確認はpsでkvmのコマンドラインを見ます。

$ ps ww -C kvm

ホストOS上で以下の設定を行います。

$ sudo vi /etc/libvirt/qemu/ubuntu.xml

このファイルについてはlibvirt: Domain XML formatに説明があります。

以下のように<devices>のセクションにvncのエントリを追加し、listen='0.0.0.0'を追加します。

    ...
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
  </devices>
</domain>

編集したら以下のコマンドで反映します(ゲストOSは予め止めておきます)

$ sudo virsh define /etc/libvirt/qemu/ubuntu.xml

なおGraphical framebuffersの説明によるとport='-1'という書き方は古くてautoport='yes'と書けとのことでしたが、virsh defineで反映すると勝手にport='-1'も追加されていました。

再度以下のコマンドを実行して

$ ps ww -C kvm

-vncのパラメータが-vnc 0.0.0.0:0となっていればOKです。

ホストOSと同一LANにある別のマシンからゲストOSにアクセス

上の-vncのパラメータのコロンの後がディスプレイ番号(ポート番号はディスプレイ番号+5900)なので、そこにアクセスします。

MacBook/Snow LeopardからChicken of the VNC | Get Chicken of the VNC at SourceForge.netを使ってアクセスしました。

ゲストOS上にsshサーバーをインストール

vnc viewerでつなぐとコンソールのログインプロンプトが出ているのでログインしてopenssh-severをインストールします。

$ sudo aptitude install openssh-server

0 件のコメント:

ブログ アーカイブ