検証用に VM をつくったり消したり、ってことをよくやるんですが、毎回毎回同じような設定をするのがいやなので、うちでは Cobbler + Puppet でこんな風にやってるよ、という例を紹介します。最近 KVM に移行しましたが、ブリッジの設定以外は、Xen でもほぼそのまま適用できると思います。
VM 作成のざっくりとした流れは次のような感じで、3 ステップで完了します。まず koan コマンドで以下のように VM インストールします。
$ sudo koan --server localhost --virt --system=template --virt-name=test-vm
インストールが終わったら、VM を起動して、コンソールにアクセスします。
$ sudo virsh start test-vm
$ sudo virsh console test-vm
puppet をインストールして、実行します。
# yum -y install puppet
# puppetd --server puppet.hoge.com --verbose --no-daemonize --onetime
この時点で、毎回 VM を作成するたびに行っている、以下のような設定が既に完了している、という状態となります。
以下、このようなことを、具体的にどのような設定で実現しているのか、ざっくりとですが説明します。
Cobbler サーバを立てて、インストール、設定を行います。ここの手順については省略。この辺 を参照してください。(ただ若干情報古いです。)
$ sudo cobbler import \
--mirror=rsync://ftp.jaist.ac.jp/pub/Linux/CentOS/5.4/os/x86_64/ \
--name=CentOS5.4-x86_64
cobbler repo add で、参照すべき yum リポジトリを追加します。
$ sudo cobbler repo add \
--name=CentOS5-epel \
--mirror=http://download.fedoraproject.org/pub/epel/5/x86_64/ \
--mirror-locally=N
$ sudo cobbler repo add \
--name=CentOS5-dag \
--mirror=http://ftp.riken.jp/Linux/dag/redhat/el5/en/x86_64/dag/ \
--mirror-locally=N
$ sudo cobbler repo add \
--name=CentOS5-mizzy \
--mirror=http://hoge.mizzy.org/yum/centos/5/x86_64/ \
--mirror-locally=N
$ sudo cobbler reposync
$ sudo cobbler profile edit \
--name=CentOS5.4-x86_64 \
--repos="CentOS5-epel CentOS5-dag CentOS5-mizzy"
ここ を参考に、br0 というブリッジインターフェースをまず作成。こいつを VM 上の eth0 のブリッジとして利用するように、template という名前の system を登録する。
$ sudo cobbler system add \
--name=template \
--profile=CentOS5.4-x86_64 \
$ sudo cobbler system edit \
--name=template \
--interface=eth0 \
--virt-bridge=br0
また、libvirt 標準の virbr0 を eth1 のブリッジとして利用するように、system edit する。(eth1 は外と通信する必要がなく、 VM 同士でだけ通信できればいいので、virbr0 がそのまま使える。)
$ sudo cobbler system edit \
--name=template \
--interface=eth1 \
--virt-bridge=virbr0
(本当は system じゃなくて profile でやりたいけど、profile では複数のブリッジの設定ができないっぽいので。)
Cobbler で参照してる kickstart ファイルに、以下のように設定するだけ。
firewall --disabled
selinux --disabled
Puppet サーバを用意し、以下のようなマニフェスト作成。Puppet のインストールや設定については省略。
ntp パッケージをインストールして、ntpd を起動。
package { 'ntp': ensure => present }
service { 'ntpd':
enable => true,
ensure => running,
}
この辺は kickstart で設定しても構わない。
package {
'zsh':
ensure => present;
'screen':
ensure => present;
'vim-enhanced':
ensure => present;
'perl-ack':
ensure => present;
'subversion':
ensure => present;
'subversion':
ensure => present;
'git-all':
ensure => '1.6.5.2-1';
}
あらかじめ作成しておいた /etc/sudoers を Puppet で配布。
package { 'sudo': ensure => installed }
file { '/etc/sudoers':
source => "puppet://$server/dist/base/etc/sudoers",
mode => 440,
}
必要なパッケージインストール、NSS や PAM まわりの設定、nscd の起動なんかを行う。
package {
'nss_ldap':
ensure => present;
'openldap':
ensure => present;
'nscd':
ensure => present;
}
service { 'nscd':
enable => true,
ensure => running,
require => Package['nscd'],
}
file { '/etc/pam.d/system-auth-ac':
source => "puppet://$server/dist/base/etc/pam.d/system-auth-ac",
}
file { '/etc/nsswitch.conf':
source => "puppet://$server/dist/base/etc/nsswitch.conf",
}
file { '/etc/ldap.conf':
source => "puppet://$server/dist/base/etc/ldap.conf",
}
必要なパッケージのインストール、portmap や autofs の起動、/etc/auto.master, /etc/auto.home の設定を行う。
package {
'autofs':
ensure => present;
'portmap':
ensure => present;
'nfs-utils':
ensure => present;
}
service { 'portmap':
enable => true,
ensure => running,
require => Package['portmap'],
before => Service['autofs'],
}
service { 'autofs':
enable => true,
ensure => running,
require => Package['autofs'],
subscribe => [ File['/etc/auto.master'], File['/etc/auto.home'] ],
}
file { '/etc/auto.master':
content => '/home /etc/auto.home',
}
file { '/etc/auto.home':
content => '* -fstype=nfs,soft,int,rsize=32768,wsize=32768,nosuid,nocache fileserver.hoge.com:/home/&',
}
上記のような感じで Cobbler や Puppet の環境を構築しておくと、最初に書いたとおり、以下のようなステップで、必要な設定がなされた VM の作成がさくっと完了します。
;; VM インストール
$ sudo koan --server localhost --virt --system=template --virt-name=test-vm
;; インストール後、起動してコンソールアクセス
$ sudo virsh start test-vm
$ sudo virsh console test-vm
;; puppet インストールし/実行
# yum -y install puppet
# puppetd --server puppet.hoge.com --verbose --no-daemonize --onetime
ここを参照すると、Cobbler は RedHat 系だけではなく、Debian, Ubuntu, SuSE あたりにも利用できるみたいなので、他の Linux ディストリビューションでも、同じような手順でいけそうですね。
他の OS だとどうなんだろう?