hnakamur’s blog

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

ラベル kvm の投稿を表示しています。 すべての投稿を表示
ラベル kvm の投稿を表示しています。 すべての投稿を表示

2011-11-21

virt-cloneでコピー後eth0がeth1などに変わってしまうのを戻す

参考:Banym's Blog - Change network device name from eth1 back to eth0.

/etc/udev/rules.d/70-persistent-net.rulesを編集。NAME="eth0"の行のMACアドレスを書き換える。NAME="eth1"など使わない行は削除。
# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:2a:7a:d9", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

/etc/sysconfig/network-scripts/ifcfg-eth0の内容を適切に変更して、それ以外のifcfg-eth?は削除。その後ゲストを再起動。

2011-11-13

Scientific Linux 6.1にKVMのゲストインストール

参考:Scientific Linux 6 - KVM - 仮想マシン作成#1 : Server World

mkdir -p /var/kvm/images
virt-install -n www \
-r 1024 \
-f /var/kvm/images/www.img \
-s 20 \
--vcpus=2 \
--os-type linux \
--os-variant=rhel6 \
--network bridge=br0 \
--nographics \
--location='http://ftp.riken.jp/Linux/scientific/6.1/x86_64/os/' \
--extra-args='console=tty0 console=ttyS0,115200n8'

ゲストOSのインストール後、再起動したらhnakamur’s blog: Scientific Linux 6.1のyumレポジトリ設定を行った後、パッケージをアップデート。
yum update

私の環境は英語キーボードなので特に設定変更は不要。

ゲストOSをシャットダウンした状態で、イメージをテンプレート用にコピーしてとっておく。
virt-clone --original www --name template --file /var/kvm/images/template.img
クローンするたびにゲストでifconfig -aで見たときにイーサデバイスの名前がeth1, eth2と変わっていくことが判明。virt-clone したら eth0 が eth1 になっていた件 | MyNotebookでも同じ現象があったようだ。でも私のところではゲストをシャットダウンしても治らなかった。私のところでもその後さらにシャットダウンして起動で治りました。hnakamur’s blog: virt-cloneでコピー後eth0がeth1などに変わってしまうのを戻すの手順を行う必要があります。

ストレージプールの設定
mkdir /etc/libvirt/storage
cat << _EOF_ > /etc/libvirt/storage/disk01.xml
<pool type='dir'>
  <name>disk01</name>
  <capacity>0</capacity>
  <allocation>0</allocation>
  <available>0</available>
  <source>
  </source>
  <target>
    <path>/var/kvm/images</path>
    <permissions>
        <mode>0700</mode>
        <owner>-1</owner>
        <group>-1</group>
    </permissions>
  </target>
</pool>
_EOF_

virsh pool-define /etc/libvirt/storage/disk01.xml

virsh pool-start disk01

virsh pool-autostart disk01

virsh pool-list

virsh pool-info disk01


2011-11-12

Scientific Linux 6.1にKVMをインストール

参考:Scientific Linux 6 - KVM - インストール : Server World

kvm関連パッケージインストールとlibvirtd起動設定


必要なパッケージをインストール。
# yum -y install qemu-kvm libvirt python-virtinst bridge-utils

lsmodで確認してみると、modprobeは自動で実行されていました。
# lsmod | grep kvm
kvm_intel              47790  0 
kvm                   300762  1 kvm_intel

libvirtdを起動。
# /etc/init.d/libvirtd start
libvirtdの自動起動設定。
# chkconfig libvirtd on

ブリッジ設定


/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
#BOOTPROTO=none
HWADDR=6C:62:6D:67:2E:A4
#IPV6INIT=no
#IPV6_AUTOCONF=yes
#NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
BRIDGE=br0
#IPADDR=192.168.11.103
#PREFIX=24
#GATEWAY=192.168.11.1
#DNS1=192.168.11.1
#DEFROUTE=yes
#IPV4_FAILURE_FATAL=yes
#NAME=System eth0

/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
#HWADDR=6C:62:6D:67:2E:A4
IPV6INIT=no
IPV6_AUTOCONF=yes
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.11.103
PREFIX=24
GATEWAY=192.168.11.1
DNS1=192.168.11.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
#NAME=System br0

上記のように書き換えた後以下のコマンドを実行。
# /etc/init.d/network reload

2010-12-19

CentOSのKVMのゲストOSに2枚目のネットワークカードを追加

ゲストOSが1枚のネットワークカードでブリッジで動いていることとホスト側では2枚のネットワークカードの両方をブリッジに設定済みであることを前提とします。
なお、この方法は試しにやってみたらできたという手順なので、もっとよい手順があるかもしれません。

ゲストOSで/etc/sysconfig/network-scripts/ifcfg-eth0をコピーしてifcfg-eth1を作成し、適宜編集。MACアドレスを適当に変更(但し頭の54:52:00:は変えずに下3オクテットのみを変えます。上3オクテットはKVMで決まっている値のため(ソース失念))。
また/etc/sysconfig/networkのGATEWAYも編集(hnakamur’s blog: CentOSでネットワークカード2枚挿しの場合のゲートウェイの設定を参照)。

ゲストOSをシャットダウン。

ホストOSでドメインのxml(/etc/libvirt/qemu/<ドメイン名>.xml)を編集。interfaceのタグをコピペして、mac addressを先程ゲストOSでeth1に割り当てた値にし、bridgeをホストのもう一つのブリッジデバイス(br1)にします。
<domain type='kvm'>
  …(略)…
  <devices>
    …(略)…
    <interface type='bridge'>
      <mac address='54:52:00:4f:0a:85'/>
      <source bridge='br0'/>
    </interface>
    <interface type='bridge'>
      <mac address='54:52:00:4f:0a:86'/>
      <source bridge='br1'/>
    </interface>
    …(略)…
  </devices>
</domain>

以下のコマンドで設定を反映。
# virsh define /etc/libvirt/qemu/<ドメイン名>.xml

2010-12-16

LVMを使用しているKVMのゲストのディスクイメージ拡張

参考:
あやの日常あるいは平穏な日々: 【CI鯖】LVM拡張を試みる
CentOS で LVM 物理/論理ボリュームサイズを縮小する - maruko2 Note.
2010-12-29追記:こちら↑を参考にスワップパーティションは一旦削除してから拡張してその後スワップパーティションを作り直すほうがよいです。そうしない場合system-config-lvmで見るとLogVol00の物理領域がLogVol01を挟んで2つに分かれてしまいました。

イメージファイルの拡張


まずイメージファイルのフォーマットを確認します。
# qemu-img info /var/lib/libvirt/images/vm1.img
実行結果はこんな感じ。
image: /var/lib/libvirt/images/vm1.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 7.5G
もしfile format: rawとなっていなければ、qemu-img convertでrawに変換します。

10Gに6G追加する場合は以下のようにします。イメージファイルのバックアップをとった上で、ddのseekを使って末尾に6Gの領域を追加します。
# cd /var/lib/libvirt/images
# cp vm1.img vm1.img.bak
# dd if=/dev/zero of=vm1.img bs=1G count=6 seek=10


# cd /var/lib/libvirt/images
# mv vm1.img vm1.img.bak
# dd if=/dev/zero of=zero6G.img bs=1G count=6
# cat vm1.img.bak zero6G.img > vm1.img



hnakamur’s blog: KVMのゲストのHDDをマウントしてLive CDからブートの手順でLive CDからブートします。

テキストモード「Boot (text mode)」を選択し、ログインプロンプトが出たらrootでパスワード無しでログインします。

fdisk /dev/hda
Linux LVMのパーティションを一旦削除して、サイズを拡大して作り直し、パーティションタイプをLinux LVM(8e)にします。
/dev/hda2がLinux LVMの場合は、p、d、2、n、p、2、Enter、Enter、t、2、8e、w、qとなります。

再起動します。
# reboot

物理ボリュームの拡張


テキストモード「Boot (text mode)」を選択し、ログインプロンプトが出たらrootでパスワード無しでログインします。

現在の物理ボリュームの状態を確認します。
# pvs

/dev/hda2を拡張します。
# pvresize /dev/hda2

変更後の物理ボリュームの状態を確認します。
# pvs

論理ボリュームの拡張


ここではVolGroup00/LogVol00を拡張します。私の環境ではこれがルートパーティションになっています。

現在の論理ボリュームの状態を確認します。
# lvs

論理ボリュームを拡張します。
# lvextend -L+6G /dev/VolGroup00/LogVol00

変更後の論理ボリュームの状態を確認します。
# lvs

ファイルシステムの拡張


マウント解除。
# umount /dev/VolGroup00/LogVol00

ファイルシステムチェック。
# e2fsck -f /dev/VolGroup00/LogVol00

ファイルシステムのリサイズ。
# resize2fs /dev/VolGroup00/LogVol00

Live CDをシャットダウン

# shutdown -h now

KVMのゲストのHDDをマウントしてLive CDからブート

Live CDの入手と配備

CentOS-5.5-x86_64-LiveCD.isoをCentOSミラーサイトからダウンロードして/var/lib/libvirt/images/に置きます(場所はどこでも可)。

KVMでゲストを起動

libvirtで起動しようと試みましたが失敗(後述)したので、qemu-kvmコマンドで起動します。
/usr/libexec/qemu-kvm -m 1024 -smp 1 -boot d \
-drive file=/var/lib/libvirt/images/vm1.img,if=ide \
-cdrom /var/lib/libvirt/images/CentOS-5.5-x86_64-LiveCD.iso \
-vnc localhost:1

この後UltraVNCなどのvncviewerで接続します。

(失敗メモ) libvirtでCD-ROMからブートを試みるも失敗


/etc/libvirt/qemu/vm1.xmlを以下のように書き換えます。
<domain type='kvm'>
  <name>ora1</name>
  <uuid>97f129e6-9b87-9998-0247-d573d774be81</uuid>
  <memory>2097152</memory>
  <currentMemory>2097152</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
    <boot dev='cdrom'/>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' cache='none'/>
      <source file='/var/lib/libvirt/images/vm1.img'/>
      <target dev='hda' bus='ide'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <source file='/var/lib/libvirt/images/CentOS-5.5-x86_64-LiveCD.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
    <interface type='network'>
      <mac address='54:52:00:54:37:df'/>
      <source network='default'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5901' autoport='no'/>
  </devices>
</domain>
変更内容は
<boot dev='cdrom'/>

<disk type='file' device='cdrom'>
      <driver name='qemu'/>
      <source file='/var/lib/libvirt/images/CentOS-5.5-x86_64-LiveCD.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>
の追加です。


上記の定義を反映。
# virsh define /etc/libvirt/qemu/vm1.xml

起動してコンソールに接続
# virsh start vm1; virsh console vm1

gparted-live-0.7.1-1.isoもダウンロードして/var/lib/libvirt/images/に配置し、
<source file='/var/lib/libvirt/images/CentOS-5.5-x86_64-LiveCD.iso'/>

<source file='/var/lib/libvirt/images/gparted-live-0.7.1-1.iso'/>
に変えてみても同じでした。

おそらくCentOS-5.5-x86_64-LiveCD.isoとgparted-live-0.7.1-1.isoはシリアルコンソールで繋がるように作られていないということなのかと思います。

2010-11-19

KVMでブリッジを使う設定でCentOSをインストール

参考:CentOS/KVMによるサーバ仮想化 - OSSでLinuxサーバ構築


前提

DNSサーバ兼DHCPサーバがLAN内に存在。IPアドレスは192.168.0.1とします。

ホスト、ゲストとも固定IPを使用。IPアドレスはそれぞれ192.168.0.2、192.168.0.3とします。


ホスト側のネットワーク変更


/etc/sysconfig/network-scripts/ifcfg-br0を作成。

# Bridge
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=192.168.0.1
TYPE=Bridge
DELAY=0

/etc/sysconfig/network-scripts/ifcfg-eth0を編集(HWADDRは編集前の値をそのまま残す)。

DEVICE=eth0
TYPE=Ethernet
HWADDR=00:00:00:00:00:00
ONBOOT=yes
BRIDGE=br0


以下のコマンドを実行してネットワーク再起動。

# /etc/init.d/network restart

ゲストのブリッジ用にホストのiptablesを変更。これを忘れるとゲストで名前解決が出来ないので注意。

/etc/sysctl.confを編集して以下の設定を追加または変更。

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

以下のコマンドを実行して設定を即座に反映。

# sysctl -p /etc/sysctl.conf
# /etc/init.d/libvirtd reload

以下のコマンドでゲストOSをインストール(一旦DHCPでインストールします)。

# virt-install --connect qemu:///system -n vm1 -r 512 --vcpus=1 \
 --disk path=/var/lib/libvirt/images/vm1.img,size=100 \
 --os-type linux --accelerate \
 --bridge=br0 \
 --location='http://ftp.riken.jp/Linux/centos/5.5/os/x86_64' \
 --extra-args='console=tty0 console=ttyS0,115200n8'

インストールが終わったら、virsh consoleなどで繋いで、ゲストの/etc/sysconfig/network-scripts/ifcfg-eth0を以下のように書き換え(HWADDRは編集前の値をそのまま残す)。

DEVICE=eth0
BOOTPROTO=none
HWADDR=00:00:00:00:00:00
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.0.3
GATEWAY=192.168.0.1
DNS1=192.168.0.1
TYPE=Ethernet

以下のコマンドでゲストのネットワークを再起動。

# /etc/init.d/network restart

2010-09-18

CentOS5.5でkvm

qemuを入れずにkvm-qemu-imgを入れる。
# yum install kvm-qemu-img kvm libvirt virt-manager
# modprobe kvm-amd
# /etc/init.d/libvirtd start
# virt-install --connect qemu:///system -n vm01 -r 512 --vcpus=1 \
 --disk path=/var/lib/libvirt/images/vm01.img,size=10 \
 --os-type linux --accelerate \
 --os-variant=virtio26 \
 --network network:default \
 --location='http://ftp.riken.jp/Linux/centos/5.5/os/i386' \
 --extra-args='console=tty0 console=ttyS0,115200n8'

http://www.centos.org/modules/newbb/viewtopic.php?topic_id=25077&forum=41
http://www.listware.net/201007/centos-virt/101980-centos-virt-virt-install-error-on-centos-54-64bit-and-kvm.html

virt-install \
 --connect qemu:///system \
 --name vm02 \
 --ram 512 \
 --vcpus=1 \
 --file /var/lib/libvirt/images/vm02.img \
 --file-size=10 \
 --nographics \
 --os-type=linux \
 --os-variant=virtio26 \
 --network network:default \
 --accelerate \
 --location='http://ftp.riken.jp/Linux/centos/5.5/os/x86_64' \
 --extra-args='ks=http://192.168.122.1/vm02-ks.cfg console=tty0 console=ttyS0,115200n8'

2009-10-09

CentOSのネットワークインストール

KVMでCentOS 5.3のネットワークインストール

KVMでCentOSをテキストモードでインストールすると同様に仮想環境を作ったのですが、今度はネットワークインストールにしてみました。

$ wget ftp://ftp.riken.go.jp/Linux/centos/5.3/isos/i386/CentOS-5.3-i386-netinstall.iso
$ qemu-img create -f qcow2 vm10.qcow2 10G
$ sudo kvm -hda vm10.qcow2 -cdrom CentOS-5.3-i386-netinstall.iso -boot d -m 512 -curses

最初に"640 x 480 Graphic mode"と表示されたときにlinux text<ENTER>と押します。

途中でインストールメディアを聞かれるところでは、タイプをFTP、サーバーはftp.riken.go.jp、パスは/Linux/centos/5.3/os/i386/を指定します。

インストールするパッケージではServerのGUIなしにしてカステムでeditorsのvim-enhanced以外を全てオフにします。これでも合計650Mだそうです。

CentOS 5.3 のネットワークインストールでエラー - BitWalkerによるとCentOS 5.3のnetinstallにはメモリが512MB以上必要とのことです。

libvirtに登録

既存のKVMのゲストOSイメージをlibvirtに登録と同様ですが、ネットワークはブリッジではなくデフォルトのNATにして、-sオプションは不要なので外しました。詳しくはman virt-installで。

$ sudo virt-install -n cent1 -r 512 -vcpus=1 -f cent1.qcow2 -c /dev/null --os-type linux \
--accelerate --nographics -m 52:54:00:12:34:56

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

2009-08-20

virt-cloneでゲストOSイメージをコピー

コピー実行

以下のコマンドで起動します。

$ sudo virt-clone --original vm10 --name vm11 --file vm11.qcow2 --mac 52:54:00:12:34:57

設定変更

その後vm11を起動してホスト名、MACアドレス、IPアドレスを変更します。

ホスト名変更

# vi /etc/sysconfig/network
HOSTNAME=vm11 # この行を修正

さらに今すぐ変更するためにコマンドも実行します。

# hostname vm11

一旦ログアウトしてログインし直すとプロンプトも変わりました。

MACアドレス、IPアドレスを変更

# service network stop
# cd /etc/sysconfig/network-scripts
# ls ifcfg-eth0*
ifcfg-eth0  ifcfg-eth0.bak
# rm ifcfg-eth0
# mv ifcfg-eth0.bak ifcfg-eth0
# vi ifcfg-eth0
HWADDR=52:54:00:12:34:57 # この行と
IPADDR=192.168.11.242    # この行を修正
# service network start

設定変更用のスクリプト

毎回手動で上記の設定変更を行うのも面倒なので、シェルスクリプトを書いてみました。ゲストOSに入れておきます。

#!/bin/bash
if [ $EUID -ne 0 ]; then
    echo "This script must be run by root." 1>&2
    exit 1
fi

if [ $# -ne 1 ]; then
    echo "Usage: chgvm hostname" 1>&2
    exit 1
fi

hostname=$1

case $hostname in
vm10)
    ipaddr=192.168.11.241
    macaddr=52:54:00:12:34:56
    ;;
vm11)
    ipaddr=192.168.11.242
    macaddr=52:54:00:12:34:57
    ;;
*)
    echo "Wrong hostname: $1" 1>&2
    exit 1
esac

hostname $hostname
sed -i -e "s/^HOSTNAME=.*/HOSTNAME=$hostname/" /etc/sysconfig/network

service network stop

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=$macaddr
NETMASK=255.255.255.0
IPADDR=$ipaddr
GATEWAY=192.168.11.1
TYPE=Ethernet
EOF

service network start

上記のvirt-cloneでコピーした後、以下のようにして変更します。

host$ sudo virsh start vm11
host$ sudo virsh console vm11
# ここでrootでログインして上記のシェルスクリプトを実行

virt-cloneした後はネットワークの設定がvm10と同一になっているので、まずvm11だけを起動してsshではなくconsoleからログインして、上記のシェルスクリプトで設定を変えるという手順をとる必要があります。

既存のKVMのゲストOSイメージをlibvirtに登録

手順

既存のKVMのゲストOSイメージをlibvirtに登録するのは、通常の手順としては用意されていないそうです。インストールに見せかけて即座に失敗するがエントリは作られるという方法で実現します。

ここでも--os-variant=centos5を試してみたのですがやはりエラーになってしまいました。

$ sudo virt-install -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
> --os-type linux --accelerate --network=bridge:br0 --hvm -c /dev/null --nographics -m 52:54:00:12:34:56 --os-variant=centos5
ERROR    OS variant 'centos5; does not exist in our dictionary for OS type 'linux'
Traceback (most recent call last):
  File "/usr/bin/virt-install", line 709, in 
    main()
  File "/usr/bin/virt-install", line 590, in main
    guest.set_os_variant(options.os_variant)
  File "/usr/lib/python2.6/dist-packages/virtinst/Guest.py", line 683, in set_os_variant
    {'var' : val, 'ty' : self._os_type}
ValueError: OS variant 'centos5; does not exist in our dictionary for OS type 'linux'

--os-variantをつけずに実行するとOKでした。

$ sudo virt-install -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
> --os-type linux --accelerate --network=bridge:br0 --hvm -c /dev/null --nographics -m 52:54:00:12:34:56

ここで別の端末でpsでプロセスIDを調べてkill -9します。

$ sudo virsh
virsh # destroy vm10
virsh # quit

-mで指定するMACアドレスは、一旦VMを起動してifconfigで調べておいたものです。virt-installの前にはシャットダウンしておきます。

man virt-installによるとXenの場合'00:16:3e'で始まる必要があり、QEMUの場合'54:52:00''52:54:00'で始まる必要があるそうです(2011-11-25追記: MACアドレスの値が間違っていました。タイプではなくコピペすべき>自分。←実はマニュアルが修正されていたようです。Bug 620838 – mistype in virt-install manpage - 54:52 should be 52:54)。 -mを指定しないとvirt-installがランダムに生成した値になりました(確か'00:16:3e'で始まっていました)。

この後確認すると/etc/libvirt/qemu/vm10.xmlという設定ファイルが作られていました。

参考にしたページ

KVMのゲストOSのネットワークをブリッジにする

Networking - KVMを参考にしました。

sudo kvm -hda vm10.qcow2 -m 256 -curses -net nic,00:23:7d:29:e1:02 -net tap,script=/etc/kvm/kvm-ifup

メモ

  • 00:23:7d:29:e1:02はランダムなMACアドレスです。ifconfigで表示された他のアドレスを変更してでっちあげました。
  • tunctlは無くてもいけました。ちなみにuml-utilitiesパッケージに含まれているらしい。
$ sudo aptitude show uml-utilities
Package: uml-utilities
State: not installed
Version: 20070815-1.1ubuntu2
Priority: extra
Section: universe/otherosfs
Maintainer: Ubuntu MOTU Developers 
Uncompressed Size: 336k
Depends: adduser, libc6 (>= 2.4), libfuse2 (>= 2.6), libncurses5 (>= 5.6+20071006-3), libreadline5 (>= 5.2), lsb-base (>= 3.0-10)
Suggests: user-mode-linux
Description: User-mode Linux (utility programs)
 User-mode Linux is a port of the Linux kernel to its own system call interface.  It provides a kind of virtual machine, which runs
 Linux as a user process under another Linux kernel.  This is useful for kernel development, sandboxing, jailing, experimentation,
 and many other things. 
 
 This package contains userspace utilities for use with User-mode Linux, including uml_mconsole, uml_moo, uml_switch, uml_net and
 tunctl.

KVMでCentOSをテキストモードでインストールする

KVMのインストール

基本的にはKVM Installation - Community Ubuntu Documentationに従って実行しました。

$ sudo apt-get install kvm libvirt-bin python-vm-builder qemu bridge-utils
$ sudo adduser $USER libvirtd

ゲストOS環境作成

以下のページを参考にしました。

うまく行かなかった手順

$ sudo aptitude install python-virtinst
$ qemu-img create -f qcow2 vm10.qcow2 10G
$ sudo virt-install --connect qemu:///system -n vm10 -r 512 --vcpus=1 -f vm10.qcow2 -s 12 \
  -c CentOS-5.3-i386-bin-DVD.iso --vnc --noautoconsole --os-type linux \
  --accelerate --network=bridge:br0 --hvm

シングルコアなのでvcpusは1に。上記の2つめの記事に従って--os-variant=は指定しない(man virt-installを見ると--os-variant=centos5でよさそうなのだがやってみるとうまくいかない)。インストールは始まるが、途中で"800 x 600 Graphic mode"と表示されてしまいだめだった。

さらに--nographicsオプションをつけて実行してみたが、途中で行頭に?が表示された状態でにっちもさっちもいかなくなった。

Shadows of epiphany » Blog Archive » How to run KVM without Xというページも見つけたがこれは試していない。

うまく行った手順

ググってみるとvirt-installerは使わずに直接KVMを使えばいけるらしい。あと、qemuとkvmはコマンドレベルで互換性があり、qemuと書く代わりにkvmと書けば動くそうだ。試したらそのままいけました。QemuやKVMのドキュメントやmanを見て以下のようにした。

$ qemu-img create -f qcow2 vm10.qcow2 10G
$ sudo kvm -hda vm10.qcow2 -cdrom CentOS-5.3-i386-bin-DVD.iso -boot d -m 256 -curses

大切なのは最初に"640 x 480 Graphic mode"と表示された時。見えないがこのタイミングでCentOS5インストール - CentOSで自宅サーバー構築の1枚目のスクリーンショットの画面が表示されている。単に<ENTER>を押すとGUIインストールが始まってしまうので、linux text<ENTER>と入力すること。

試した環境

ハードウェア
HP ML115G5
CPU
AMD Athlon 1640B (2.7GHz、L2 512KB、45W、AM2)
RAM
8GB
ホストOS
Ubuntu 9.04 server i386
$ uname -a
Linux sunshine12 2.6.28-15-server #49-Ubuntu SMP Tue Aug 18 19:30:06 UTC 2009 i686 GNU/Linux
$ dpkg -l | egrep '(kvm|libvirt-bin|python-vm-builder|qemu|bridge-utils)'
ii  bridge-utils                              1.4-5                             Utilities for configuring the Linux Ethernet
ii  kvm                                       1:84+dfsg-0ubuntu12.3             Full virtualization on i386 and amd64 hardwa
ii  libvirt-bin                               0.6.1-0ubuntu5.1                  the programs for the libvirt library
ii  python-vm-builder                         0.10-0ubuntu2                     VM builder
ii  qemu                                      0.10.0-1ubuntu1                   fast processor emulator

ブログ アーカイブ