Plamo Linux 5.1 で vagrant を Libvirt Provider 経由で使う
(追記)こちらのエントリの方法の方が断然オススメです!!
久々の更新なのに,今回も公式文書にある通りにやったら出来た,程度なので相変わらず情報が少ないです... (長いわりにねえ) :p
最近何か色々な所で何かやろうとすると「vagrant を使います」みたいな記載を見かけることが多くなりました.そのたびに「けっ,なんで KVM も LXC も動く環境なのに VirtualBox いれなアカンねん」と思ってスルーしてたのですが,そうも言ってられなくなりました (って程でもないですが :p).
折角 KVM も libvirt も入ってる 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 では使えないオプションを使ってたりしてなんだかなあ,というところです.
- 64bit 版パッケージは作ってみました.netcat_openbsd と libbsd を入れてください.-> ftp://plamo.linet.gr.jp/pub/Plamo-test/for-5.0/x86_64/netcat-openbsd
- TLS 経由で接続する場合 (libvirt.connect_via_ssh = true),前述のリモート接続の文書にあるような設定をする必要があります (今回はやってません)
- ssh 経由で接続する場合 (libvirt.connect_via_ssh = true),netcat が Plamo 標準の GNU netcat ではダメで,netcat-openbsd が必要になります.前述の libvirt 公式にはしっかり GNU netcat へのリンクがあるのに,内部的に GNU netcat では使えないオプションを使ってたりしてなんだかなあ,というところです.
これは vagrant の問題でも vagrant-libvirt の問題でもなく,libvirt のお話です.
さて,パッケージが準備できたところで
- Plamo 標準 netcat パッケージを削除します
# removepkg netcat
- 作成した netcat-openbsd, libbsd パッケージをインストールします.
# installpkg libbsd-0.6.0-x86_64-P1.txz netcat_openbsd-1.105-x86_64-P1.txz
- vagrant の rpm パッケージをダウンロードします
$ wget http://files.vagrantup.com/packages/7ec0ee1d00a916f80b109a298bab08e391945243/vagrant_1.2.7_i686.rpm
- インストールします.特に依存関係もなく,ファイルは /usr/bin/vagrant 以外は /opt/vagrant 以下に入りますので,他に影響を与えることもありません.
# rpm -ivh vagrant_1.2.7_x86_64.rpm
- 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)'! - とりあえず 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'! - Vagrant ファイルを作成します.
$ mkdir vagrant; cd vagrant
$ vi Vagrantfile - 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... - 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 ってことで色々出来ないことも多いのかもしれませんが,とりあえず起動しましたってことで.