TenForward

技術ブログ。はてなダイアリーから移転しました

Plamo Linux 5.1 で vagrant を Libvirt Provider 経由で使う

(追記)こちらのエントリの方法の方が断然オススメです!!

久々の更新なのに,今回も公式文書にある通りにやったら出来た,程度なので相変わらず情報が少ないです... (長いわりにねえ) :p

最近何か色々な所で何かやろうとすると「vagrant を使います」みたいな記載を見かけることが多くなりました.そのたびに「けっ,なんで KVM も LXC も動く環境なのに VirtualBox いれなアカンねん」と思ってスルーしてたのですが,そうも言ってられなくなりました (って程でもないですが :p).

折角 KVMlibvirt も入ってる Plamo 5.1 環境ですので,この libvirt を使って vagrant というのをやってみました.

まあ vagrant もフツーに入れて,vagrant-libvirt もフツーに入れて,書いてある通りにやるだけなのですがね.ただし,注意点があって,

  • ローカルで libvirt が動いていても,一応 localhost 宛のリモート接続扱いになります.リモート接続については libvirt: Remote support に書いてあります.
    • ssh 経由で接続する場合 (libvirt.connect_via_ssh = true),netcat が Plamo 標準の GNU netcat ではダメで,netcat-openbsd が必要になります.前述の libvirt 公式にはしっかり GNU netcat へのリンクがあるのに,内部的に GNU netcat では使えないオプションを使ってたりしてなんだかなあ,というところです.
    • TLS 経由で接続する場合 (libvirt.connect_via_ssh = true),前述のリモート接続の文書にあるような設定をする必要があります (今回はやってません)

これは vagrant の問題でも vagrant-libvirt の問題でもなく,libvirt のお話です.

さて,パッケージが準備できたところで

  1. Plamo 標準 netcat パッケージを削除します
    # removepkg netcat
  2. 作成した netcat-openbsd, libbsd パッケージをインストールします.
    # installpkg libbsd-0.6.0-x86_64-P1.txz netcat_openbsd-1.105-x86_64-P1.txz
  3. vagrantrpm パッケージをダウンロードします
    $ wget http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/vagrant_1.2.7_i686.rpm
  4. インストールします.特に依存関係もなく,ファイルは /usr/bin/vagrant 以外は /opt/vagrant 以下に入りますので,他に影響を与えることもありません.
    # rpm -ivh vagrant_1.2.7_x86_64.rpm
  5. libvirt プラグインインストール
    $ vagrant plugin install vagrant-libvirt
    Installing the 'vagrant-libvirt' plugin. This can take a few minutes...
    Installed the plugin 'vagrant-libvirt (0.0.6)'!
  6. とりあえず CentOS Box を追加します.
    $ vagrant box add centos64 http://kwok.cz/centos64.box
    Downloading or copying the box...
    Extracting box...te: 7941k/s, Estimated time remaining: 0:00:01)
    Successfully added box 'centos64' with provider 'libvirt'!
  7. Vagrant ファイルを作成します.
    $ mkdir vagrant; cd vagrant
    $ vi Vagrantfile
  8. vagrant up
    $ vagrant up --provider=libvirt

    Bringing machine 'test_vm' up with 'libvirt' provider...
    [test_vm] Creating image (snapshot of base box volume).
    [test_vm] Creating domain with the following settings...
    [test_vm] -- Name: test_vm_1377154935
    [test_vm] -- Domain type: kvm
    [test_vm] -- Cpus: 1
    [test_vm] -- Memory: 512M
    [test_vm] -- Base box: centos64
    [test_vm] -- Storage pool: default
    [test_vm] -- Image: /var/lib/libvirt/images/test_vm_1377154935.img
    [test_vm] Creating shared folders metadata...
    [test_vm] Starting domain.
    [test_vm] Waiting for domain to get an IP address...
    [test_vm] Waiting for SSH to become available...
    [test_vm] Rsyncing folder: /home/karma/work/vagrant/test_vm/ => /vagrant
    [test_vm] Configuring and enabling network interfaces...
  9. ssh で接続
    $ vagrant ssh
    Last login: Mon Mar 25 21:38:15 2013
    [root@centos64 ~]# ls
    anaconda-ks.cfg install.log install.log.syslog
    [root@centos64 ~]# ifconfig
    eth0 Link encap:Ethernet HWaddr 52:54:00:2D:ED:33
    inet addr:192.168.122.166 Bcast:192.168.122.255 Mask:255.255.255.0
    inet6 addr: fe80::5054:ff:fe2d:ed33/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:372 errors:0 dropped:0 overruns:0 frame:0
    TX packets:287 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:45530 (44.4 KiB) TX bytes:34629 (33.8 KiB)

    lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

    [root@centos64 ~]# uname -a
    Linux centos64.vagrantup.com 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    [root@centos64 ~]#

普通に libvirt の NAT の内側のネットワーク上で起動しています.

ちなみに Vagrantfile はこんな (vagrant-libvirt のドキュメントとほぼ同じ)

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.ssh.username = "root"

  config.vm.define :test_vm do |test_vm|
    test_vm.vm.box = "centos64"
  end

  config.vm.provider :libvirt do |libvirt|
    libvirt.driver = "qemu"
    libvirt.host = "localhost"
    libvirt.connect_via_ssh = true
    libvirt.username = "karma"
    libvirt.storage_pool_name = "default"
  end
end

起動後は普通に virt-manager でも見えますね.

vagrant-libvirt って Version 0.0.6 ってことで色々出来ないことも多いのかもしれませんが,とりあえず起動しましたってことで.