MooseX::ClassAttribute の挙動ってこれでいいの?
流行に乗って Punc にも Moose を取り入れようと思って、MooseX::ClassAttribute でクラス属性をハンドリングできるようにしてみたのですが、子クラスのクラス属性をセットすると、親クラスのクラス属性まで変わってしまう。
package Parent;
use Moose;
use MooseX::ClassAttribute;
class_has 'x' => ( is => 'rw' );
package Child;
use Moose;
extends 'Parent';
package main;
Parent->x('Parent');
warn Parent->x;
Child->x('Child');
warn Parent->x;
これが一般的に望ましい動作なのかどうかわからないので、とりあえず Class::Data::Inheritable 使うように書き直した。
KLab 勉強会 #4 & Func & Punc
KLab 勉強会 #4 で、Func についてしゃべってきました。その時の様子は Ustream でご覧いただけます。また資料は後日 DSAS 開発者の部屋にアップされると思います。
スピーカのために壇上に水が用意されていることはよくあると思いますが、今回は僕のためにドクターペッパーが用意されているというスペシャルな待遇に感激しました。
で、Func についてしゃべった中で、いくつかいけてない点をあげたのですが、特に RedHat 系 Linux にしか対応してない、というところに不満もあり、また、モジュールを Perl で書きたいという思いもあり、じゃあ Perl で実装しちゃえ、ってことで、Punc - Perl Unified Network Controller なるものをつくりはじめました。
今のところプロトタイプでしかないため、まだまだ完成には程遠いですが、RedHat 系 Linux 上でサービスの起動状態を確認する、ということができるまでにはなっています。他の OS 用のモジュールを追加すれば、自動で判別して適切なモジュールを選択してくれる機能も実装しています。
YAPC::Asia 2008 でお話しする予定の システム管理フレームワークのアーキテクチャと Perl による実装 では、この Punc について詳しく解説する予定です。
Virt-Factory はもう古いらしい。時代は oVirt
Puppet Dojo で知り合った方から、Virt-Factory はもうアクティブじゃなくなって、今はoVirt という新しいプロジェクトに移ってる、ということをお聞きして、Virt-Factory のサイトに行ってみたら本当にそう書いてある!Xen が動かせるマシンが調達できたら、本格的に Virt-Factory 検証しよう、と思ってしばらくアクセスしてなかったら、いつの間にやらこんなことに…
つーわけで、Virt-Factory は捨てて oVirt の検証していくです。
Installing Instructions を見てみると、パッケージを配布してるわけじゃなく、QEMU/KVM の仮想マシンイメージとして配布されてる模様。まずはこのイメージを動かすところまでやってみる。
検証環境は CentOS 5 x86_64 です。手順は上記サイトの「Installing the management appliance」の通りではあるのですが、説明があまり親切ではないし、その通りではうまくいかないところもあったので、試してみたい方は、以下の手順も合わせて参考にしてみてください。。
まずは VM イメージを取得。場所はどこでもいいんですが、自分は ~/vm というディレクトリを作成して、その下に置いた。
$ mkdir ~/vm
$ cd ~/vm
$ wget http://ovirt.org/download/wui-appliance.dsk.bz2
$ bzip2 -d wui-appliance.dsk.bz2
次に必要なパッケージのインストール。
$ sudo yum install libvirt qemu kvm
以下のような ~/vm/wui-appliance.xml を作成。
<domain type="kvm">
<name>wui-appliance</name>
<memory>768000</memory>
<currentMemory>768000</currentMemory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
<boot dev="hd"/>
</os>
<clock offset="utc"/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-kvm</emulator>
<disk type="file">
<source file="/home/miya/vm/wui-appliance.dsk"/>
<target dev="hda"/>
</disk>
<interface type="bridge">
<mac address="00:16:3e:08:97:e7"/>
<source bridge="xenbr0"/>
</interface>
<input type="mouse" bus="ps2"/>
<graphics type="vnc" port="-1" listen="0.0.0.0"/>
</devices>
</domain>
libvirtd を起動して、virsh で qemu に接続、create でさきほどの XML ファイルを指定して VM 作成。
$ sudo /sbin/chkconfig libvirtd on
$ sudo /etc/init.d/libvirtd start
$ sudo virsh --connect qemu:///system
virsh # create wui-appliance.xml
Domain wui-appliance created from wui-appliance.xml
virsh # list
Id Name State
----------------------------------
1 wui-appliance running
以上で VM 起動まで完了。で、VM に SSH とかでアクセスしたいんだけど、IP アドレスがわからない!(VM の IP アドレスを外から知る方法をご存知な方は教えてください。)というわけで、virt-manager からつないでみることにする。
$ sudo yum install virt-manager
virt-manager 入れたのはいいけど、CentOS は X 使えるようにしていないことに気づく。とりあえず手元の PC の cygwin に X が入ってたので、cygwin のシェルで
$ startxwin.sh
$ xhost +
でもって CentOS 上で
$ export DISPLAY=192.168.10.19:0.0
$ virt-manager
で virt-manager 起動。
Error: Macro Image(01.jpg) failedCannot reference local attachment from here
無事に画面が出たので、QEMU を選択して接続。
Error: Macro Image(02.jpg) failedCannot reference local attachment from here
VM が見えるので選択して、右下の「Open」をクリック。
Error: Macro Image(03.jpg) failedCannot reference local attachment from here
無事アクセスできた。root のパスワードは ovirtwui 。
ここまでやってから、XML で MAC アドレス指定してるんだから、DHCP サーバのログから IP アドレス調べればいいだけだった、ということに気づく。
今日はここまで。
Updated on 2008/03/04 01:20
Y コンビネータ を Perl で考えてみる
計算機科学を学んでいる人にとっては今更な話題らしいですが、経済学部出身の自分には目新しい話題なので書いてみます。(といっても、全然知らなかった、というわけでもないんですが。)
id:amachang さんのエントリにある最終形のみを Perl で書くとこんな感じかな。
my $Y = sub {
my $f = shift;
return sub {
my $g = shift;
return sub {
my $m = shift;
return $f->($g->($g))->($m);
}
}->(
sub {
my $g = shift;
return sub {
my $m = shift;
return $f->($g->($g))->($m);
};
}
)
};
my $fib = sub {
my $f = shift;
return sub {
my $n = shift;
return $n <= 2 ? 1 : $f->($n - 1) + $f->($n - 2);
};
};
warn $Y->($fib)->(10);
なぜこれで再帰として動作するかを考えるにあたって、id:gotin さんのエントリと同内容のことを、Perl で考えてみる。
簡単にするために最終形の Y コンビネータになる前の中間形のコードで考える。
my $Y = sub {
my $f = shift;
my $g;
return $g = sub {
my $n = shift;
$f->($g)->($n);
}
};
my $fib = sub {
my $f = shift;
return sub {
my $n = shift;
return $n <= 2 ? 1 : $f->($n - 1) + $f->($n - 2);
}
};
warn $Y->($fib)->(5);
$Y->($fib) は、 my $Y = sub { ... } において、$f に $fib が代入され、結果として以下の関数が返ることになる。
sub {
my $n = shift;
$fib->($g)->($n);
}
そうなると $Y->($fib)->(5) は、以下のように変換できる。
$fib->($g) は、my $fib = sub { ... } の $f に $g が代入されるので、$fib->($g)->(5) は、
sub {
my $n = shift;
return $n <= 2 ? 1 : $g->($n - 1) + $g->($n - 2);
}->(5);
ということになる。
なのでこの $n に 5 が代入され、結果として $fib->($g)->(5) は以下のように変換される。
$g->(4) ... [A]
+ $g->(3) ... [B]
[A] を更に変換してみると、$g->(4) は $fib->($g)->(4) となり、
sub {
my $n = shift;
return $n <= 2 ? 1 : $g->($n - 1) + $g->($n - 2);
}->(4);
を実行するのと同じ。というわけで、$g->(4) は、
$g->(3) + $g->(2) ... [A]
になる。同様に [B] を変換すると、
$g->(2) + $g->(1) ... [B]
となる。今までのところまでをまとめると、$Y->($fib)->(5) は以下のように変換される。
$g->(3) + $g->(2) ... [A]
+ $g->(2) + $g->(1) ... [B]
で、$g->(3) は [B] の変換と同様なので、更に以下のように変換される。
$g->(2) + $g->(1) + $g->(2) ... [A]
+ $g->(2) + $g->(1) ... [B]
ここで $g->(2) は、
sub {
my $n = shift;
return $n <= 2 ? 1 : $g->($n - 1) + $g->($n - 2);
}->(2);
であり、$n <= 2 であれば 1 が返る。ということは、$g->(2) も $g->(1) も 1 だから、[A] + [B] は以下のように変換される。
1 + 1 + 1 ... [A]
+ 1 + 1 ... [B]
というわけで、結果は 5 になる。ということらしい。なんとなくわかった。
Virt-Factory クライアントをサーバへ登録する
前回に続き、今回はクライアント側の手順です。クライアント側では、必要なソフトウェアのインストールと、サーバへの登録を行います。
クライアントのサーバへの登録は、既に OS がインストールされた状態から行う方法と、OS がインストールされていないまっさらな状態から行う方法の2つがあります。
以下、2つの方法について手順を解説します。これもサーバと一緒で、Fedora 7 で試しています。
既に OS がインストールされた状態から行う方法
SELinux と iptables をオフに
とりあえず検証目的なので、こいつらはオフにしときます。手順は省略。
yum リポジトリの設定
これは サーバ側の設定 と同じなので省略。
必要なパッケージのインストール
Virt-Factory は仮想サーバの管理を行うためのものなので、当然何らかの仮想環境が必要。というわけで、Xen カーネルとツールをインストール。
$ sudo yum install kernel-xen xen
それから、Python をアップデートしないと、後述する virt-factory-node-server でエラーが出たので、アップデートしておく。
$ sudo yum update python
Xen カーネルで起動するために、再起動する。
現在の Virt-Factory は、Cobbler/Koan 0.6.2 を前提にしているため、バージョン指定で 0.6.2 をインストール。
$ sudo yum install koan-0.6.2-1.fc7
その他必要なパッケージをインストール。
$ sudo yum install virt-factory-nodes virt-factory-register libvirt-python
サーバへの登録
Virt-Factory クライアントをサーバに登録するためには、次のコマンドを実行します。
$ sudo vf_register --serverurl=http://server.example.org:5150 --profile=Container
server.example.org の部分は、サーバ側で Python の socket.gethostname() で取得できるホスト名と同一である必要があります。(qpid でのメッセージング処理の関係で。)
登録が正常に完了すれば、サーバ側で ampm コマンドを実行して、確認することができます。(Web UI でも確認できます。)
$ sudo ampm list hosts
hostname: client.example.org id: 1 profile_name: Container::F-7-xen-i386
最後に virt-factory-node-server を起動します。
$ sudo /sbin/chkconfig virt-factory-node-server on
$ sudo /etc/init.d/virt-factory-node-server start
OS がインストールされていない状態からの登録
OS がインストールされていない場合、PXE ブートからネットワークインストールを行い、その流れでサーバへの登録まで一気にやってしまいます。これは、前回の手順でインポートしたプロファイルの中で、これらの手順をすべてやるように指定されているので、特にこれ以上何かを設定する必要はありません。マシンを PXE ブートし、boot: プロンプトでプロファイル名 (Container::F-7-xen-i386)を入力すれば、あとは全て自動的に進んでいくはずです。(まだきちんと検証できてません。)
また、事前に Web UI で MAC アドレスを登録しておけば、boot: プロンプトにプロファイル名を入れる必要すらありません。
以上で、Virt-Factory クライアントのサーバへの登録は完了です。この後、ampm コマンドで、リモートの Virt-Factory クライアント上にコマンド一発でゲスト OS をインストールしたり、ゲスト OS の起動や停止をリモートから行ったり、複数のリモートクライアント上にあるゲスト OS をすべてリストアップしたり、といった、Virt-Factory のメインの使い方に入るわけですが、この解説はまた次回に。
Virt-Factory サーバのインストールと設定
前回紹介した Virt-Factory について、まずはサーバ側のインストールと設定手順を解説します。yappo さんと hirose31 さんに wktk されてしまったので、もう後には引けません。
おおまかな手順は 本家サイトのドキュメント の通りなのですが、ここの通りやってもうまくいかないので、試してみたい方は以下の手順を参考にしてください。
なお、本家から提供されているパッケージが Fedora 7 用のものしかないため、楽をするために Fedora 7 で検証しています。また、現時点での Virt-Factory のバージョンは 0.0.4 です。
SELinux と iptables をオフに
とりあえず検証目的なので、こいつらはオフにしときます。手順は省略。
yum リポジトリの設定
virt-factory.et.redhat.com のリポジトリを見に行くようにする。
$ sudo wget http://virt-factory.et.redhat.com/download/repo/virt-factory.repo --output-document=/etc/yum.repos.d/virt-factory.repo
virt-factory.repo の内容が間違ってるので、以下のように修正。
-
/etc/yum.repos.d/virt-factory.repo
| old |
new |
|
| 1 | 1 | [virt-factory-fedora] |
|---|
| 2 | 2 | name=Virt-factory packages |
|---|
| 3 | | baseurl=http://virt-factory.et.redhat.com/download/repo/fc$releasever/stable/$arch/ |
|---|
| | 3 | baseurl=http://virt-factory.et.redhat.com/download/repo/f$releasever/stable/i386/ |
|---|
| 4 | 4 | enabled=1 |
|---|
| 5 | 5 | gpgcheck=0 |
|---|
| 6 | 6 | |
|---|
| 7 | 7 | [virt-factory-srpms] |
|---|
| 8 | 8 | name=Virt-factory src packages |
|---|
| 9 | | baseurl=http://virt-factory.et.redhat.com/download/repo/fc$releasever/stable/srpms |
|---|
| | 9 | baseurl=http://virt-factory.et.redhat.com/download/repo/f$releasever/stable/srpms |
|---|
| 10 | 10 | enabled=0 |
|---|
| 11 | 11 | gpgcheck=0 |
$arch の部分は Fedora 7 32bit だと i686 になってしまうが、リポジトリのディレクトリは i386 なので、修正が必要。64bit だと $arch 部分はそのままでいいかも。
必要なパッケージのインストール
普通に virt-factory-server パッケージを yum で入れると、依存関係で cobbler と koan が一緒にインストールされるのですが、updates にある cobbler 0.6.4 と koan 0.6.3 がインストールされてしまって、virt-factory-server が正常に動きません。なので、virt-factory.et.redhat.com にある 0.6.2 を明示的にインストールしてやります。
$ sudo yum install cobbler-0.6.2-1.fc7 koan-0.6.2-1.fc7
次に、Virt-Factory サーバ本体である virt-factory-server パッケージをインストールします。また、依存関係にはないものの、python-setuptools も必要なので一緒に入れておきます。
$ sudo yum install virt-factory-server python-setuptools
PostgreSQL の初期化
Virt-Factory はデータベースとして PostgreSQL を利用しています。(MySQL への対応予定もあるらしい。)以下のコマンドを実行して、Virt-Factory から PostgreSQL が利用できる状態にします。
$ sudo /etc/init.d/postgresql initdb
$ sudo vf_fix_db_auth
デーモンの起動
Puppet を利用してるので、とりあえず Puppet サーバを起動しておきます。(が、この段階では起動しなくても問題ないです。)
$ sudo /sbin/chkconfig puppetmaster on
$ sudo /etc/init.d/puppetmaster start
次に qpidd を起動します。これは必ず起動しておく必要があります。qpidd は、Virt-Factory のクライアント/サーバ間でのメッセージングのために利用されています。
$ sudo /sbin/chkconfig qpidd on
$ sudo /etc/init.d/qpidd start
最後に virt-factory-server を起動します。
$ sudo /sbin/chkconfig virt-factory-server on
$ sudo /etc/init.d/virt-factory-server start
初回は起動時はデータベースとかテーブルを自動で作ってくれます。
vf_server import の実行
vf_server import により、以下の内容が実行されます。
- /etc/virt-factory/settings の repos セクションに基づく yum リポジトリミラーの作成
- /etc/virt-factory/settings の mirrors セクションに基づくディストリビューションミラーの作成
- プロファイルの作成
ただし、プロファイルは cobbler import で作成されるものと一緒で、Virt-Factory に適したものではないため、捨ててしまって構いません。
まず、/etc/virt-factory/settings を2箇所いじります。mirrors のところは元は FC-7 になってるのですが、F-7 にしておく必要があります。
address は Virt-Factory サーバの IP アドレスを指定します。今回の import とは直接関係しませんが、どのみち変える必要があるので変えておきます。
mirrors:
F-7: [ 'rsync://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/7/Fedora/i386/os/', '']
this_server:
address: '192.168.25.134'
または、iso ファイルをダウンロードしてきて、
$ sudo mkdir /mnt/dvdiso
$ sudo mount -t iso9660 -o loop F-7-i386-DVD.iso /mnt/dvdiso
とマウントして、/etc/virt-factory/settings には
mirrors:
F-7: [ '/mnt/dvdiso', '']
と設定してもいいです。検証で何度もやる場合には、iso イメージを持ってきておいた方が早いですね。
Virt-Factory でインストールするディストリビューションが Fedora 7 以外の場合には、repos セクションや mirrors セクションを適切に修正する必要があります。
設定ができたら、以下のコマンドを実行します。
$ sudo vf_server import
cobbler report で結果を確認できます。distro, repo, profile が登録されていることが確認できます。
$ sudo cobbler report
distro : F-7-i386
kernel : /var/www/cobbler/ks_mirror/F-7/images/pxeboot/vmlinuz
initrd : /var/www/cobbler/ks_mirror/F-7/images/pxeboot/initrd.img
kernel options : {}
architecture : x86
ks metadata : {'tree': 'http://@@server@@/cblr/links/F-7-i386'}
breed : redhat
distro : F-7-xen-i386
kernel : /var/www/cobbler/ks_mirror/F-7/images/xen/vmlinuz
initrd : /var/www/cobbler/ks_mirror/F-7/images/xen/initrd.img
kernel options : {}
architecture : x86
ks metadata : {'tree': 'http://@@server@@/cblr/links/F-7-xen-i386'}
breed : redhat
repo : F-7-i386-core-lite
mirror : http://download.fedora.redhat.com/pub/fedora/linux/releases/7/Everything/i386/os/
keep updated : True
local filename : F-7-i386-core-lite
rpm list : ['m2crypto', 'python-simplejson']
createrepo_flags : -c cache
repo : F-7-i386-updates-lite
mirror : http://download.fedora.redhat.com/pub/fedora/linux/updates/7/i386/
keep updated : True
local filename : F-7-i386-updates-lite
rpm list : ['cobbler', 'koan', 'python-cheetah', 'yum-utils', 'puppet',
'facter']
createrepo_flags : -c cache
repo : F-7-i386-vf_repo
mirror : http://virt-factory.et.redhat.com/download/repo/f7/stable/i386/
keep updated : True
local filename : F-7-i386-vf_repo
rpm list :
createrepo_flags : -c cache
repo : F-7-x86_64-core-lite
mirror : http://download.fedora.redhat.com/pub/fedora/linux/releases/7/Everything/x86_64/os/
keep updated : True
local filename : F-7-x86_64-core-lite
rpm list : ['m2crypto', 'python-simplejson']
createrepo_flags : -c cache
repo : F-7-x86_64-vf_repo
mirror : http://virt-factory.et.redhat.com/download/repo/f7/stable/x86_64/
keep updated : True
local filename : F-7-x86_64-vf_repo
rpm list :
createrepo_flags : -c cache
profile : F-7-i386
distro : F-7-i386
kickstart : /etc/cobbler/kickstart_fc6.ks
kernel options : {}
ks metadata : {}
virt file size : 5
virt ram : 512
virt type : auto
virt path :
repos : []
profile : F-7-xen-i386
distro : F-7-xen-i386
kickstart : /etc/cobbler/kickstart_fc6.ks
kernel options : {}
ks metadata : {}
virt file size : 5
virt ram : 512
virt type : auto
virt path :
repos : []
サンプルプロファイルのインポート
virt-factory.et.redhat.com にサンプルプロファイルがあるので、こいつをインポートしてみます。
$ sudo rpm -Uvh http://virt-factory.et.redhat.com/download/profiles/vf-profile-Container-1-2.fc7.noarch.rpm
$ sudo rpm -Uvh http://virt-factory.et.redhat.com/download/profiles/vf-profile-Test1-1.234-2.fc7.noarch.rpm
$ sudo vf_import
cobbler report を実行すると、以下の4つのプロファイルが登録されていることが確認できます。
profile : Container::F-7-i386
distro : F-7-i386
kickstart : /var/lib/virt-factory/kick-fc6.ks
kernel options : {}
ks metadata : {'server_name': '192.168.10.14', 'node_bare_packages': 'libvirt\npython-virtinst\nqemu\nkvm\n', 'cryptpw': '$1$mF86/UHC$WvcIcX2t6crBz2onWxyac.', 'server_param': '--server=http://192.168.10.14:5150', 'node_common_packages': 'koan\npuppet\nvirt-factory-nodes\nvirt-factory-register\nqemu\nkvm\n', 'network_param': '--allow-bridge-config', 'extra_post_magic': '/sbin/chkconfig 345 qemu on\n', 'node_virt_packages': '', 'token_param': '--profile=Container::F-7-i386'}
virt file size : 0
virt ram : 0
virt type : qemu
virt path :
repos : ['F-7-i386-updates-lite', 'F-7-i386-core-lite', 'F-7-i386-vf_repo']
profile : Container::F-7-xen-i386
distro : F-7-xen-i386
kickstart : /var/lib/virt-factory/kick-fc6.ks
kernel options : {}
ks metadata : {'server_name': '192.168.10.14', 'node_bare_packages': 'libvirt\npython-virtinst\nxend\n', 'cryptpw': '$1$mF86/UHC$WvcIcX2t6crBz2onWxyac.', 'server_param': '--server=http://192.168.10.14:5150', 'node_common_packages': 'koan\npuppet\nvirt-factory-nodes\nvirt-factory-register\nxen\nkernel-xen\n', 'network_param': '--allow-bridge-config', 'extra_post_magic': '', 'node_virt_packages': '', 'token_param': '--profile=Container::F-7-xen-i386'}
virt file size : 0
virt ram : 0
virt type : xenpv
virt path :
repos : ['F-7-i386-updates-lite', 'F-7-i386-core-lite', 'F-7-i386-vf_repo']
profile : Test1::F-7-i386
distro : F-7-i386
kickstart : /var/lib/virt-factory/kick-fc6.ks
kernel options : {}
ks metadata : {'server_name': '192.168.10.14', 'node_bare_packages': '', 'cryptpw': '$1$mF86/UHC$WvcIcX2t6crBz2onWxyac.', 'server_param': '--server=http://192.168.10.14:5150', 'node_common_packages': 'koan\npuppet\nvirt-factory-nodes\nvirt-factory-register\nqemu\nkvm\n', 'network_param': '', 'node_virt_packages': '', 'token_param': '--profile=Test1::F-7-i386'}
virt file size : 5
virt ram : 512
virt type : qemu
virt path :
repos : ['F-7-i386-updates-lite', 'F-7-i386-core-lite', 'F-7-i386-vf_repo']
profile : Test1::F-7-xen-i386
distro : F-7-xen-i386
kickstart : /var/lib/virt-factory/kick-fc6.ks
kernel options : {}
ks metadata : {'server_name': '192.168.10.14', 'node_bare_packages': '', 'cryptpw': '$1$mF86/UHC$WvcIcX2t6crBz2onWxyac.', 'server_param': '--server=http://192.168.10.14:5150', 'node_common_packages': 'koan\npuppet\nvirt-factory-nodes\nvirt-factory-register\nxen\nkernel-xen\n', 'network_param': '', 'node_virt_packages': '', 'token_param': '--profile=Test1::F-7-xen-i386'}
virt file size : 5
virt ram : 512
virt type : xenpv
virt path :
repos : ['F-7-i386-updates-lite', 'F-7-i386-core-lite', 'F-7-i386-vf_repo']
cobbler import した時のプロファイルと違って、ks_metadata に koan, pupppet, virt-factory-nodes, virt-factory-register など、Virt-Factory クライアントとして必要なパッケージが含まれていたり、キックスタートファイル(/var/lib/virt-factory/kick-fc6.ks )の %post セクションで、Virt-Factory クライアントとして必要な処理が実行されています。
Web UI のインストール、設定、起動
virt-factory-wui パッケージをインストールするのですが、そのままインストールすると、rubygem-rails-2.0.1-1.fc7 がインストールされてしまい、動作しません。なので、明示的に rubygem-rails-1.2.3-1.fc7 をインストールします。
$ sudo yum install rubygem-rails-1.2.3-1.fc7
その後 virt-factory-wui パッケージをインストールします。
$ sudo yum install virt-factory-wui
デフォルトでは 127.0.0.1 でリッスンするようになっているので、他のマシンからアクセスする場合には、/etc/init.d/virt-factory-wui を書き換えます。
-
/etc/init.d/virt-factory-wui
| old |
new |
|
| 10 | 10 | VIRTFACTORY_DIR=/usr/share/virt-factory-wui |
|---|
| 11 | 11 | MONGREL_LOG=/var/log/virt-factory-wui/mongrel.log |
|---|
| 12 | 12 | MONGREL_PID=/var/run/virt-factory-wui/mongrel.pid |
|---|
| 13 | | ADDR=127.0.0.1 |
|---|
| | 13 | ADDR=0.0.0.0 |
|---|
| 14 | 14 | RAILS_ENVIRONMENT=production |
|---|
| 15 | 15 | USER=virtfact |
|---|
| 16 | 16 | GROUP=virtfact |
起動します。
$ sudo /sbin/chkconfig virt-factory-wui on
$ sudo /etc/init.d/virt-factory-wui start
css ファイルへのパスがおかしいので、/usr/share/virt-factory-wui/app/views/layouts/virt-factory-layout.rhtml を修正します。
-
/usr/share/virt-factory-wui/app/views/layouts/virt-factory-layout.rhtml
| old |
new |
|
| 7 | 7 | <!-- dynamically filled in page title --> |
|---|
| 8 | 8 | <title>virt-factory: <%= @page_title %></title> |
|---|
| 9 | 9 | |
|---|
| 10 | | <link rel="stylesheet" href="<%= ActionController::AbstractRequest.relative_url_root %>/style.css" type="text/css" /> |
|---|
| | 10 | <link rel="stylesheet" href="/style.css" type="text/css" /> |
|---|
| 11 | 11 | |
|---|
| 12 | 12 | </head> |
3000番 ポートにアクセスして、admin, fedora でログインします。
virt-factory-ampm のインストール
virt-factory-ampm は、Virt-Factory のコマンドラインクライアントで、リモートホスト上に仮想マシンを作成したり、仮想マシンの起動/停止を行ったり、といったことができます。
$ sudo yum install virt-factory-ampm
このままだと ampm コマンドを実行する度に no config file found と言われてうざいので、空の .ampm_config を作成しておきます。
$ touch ~/.ampm_config
help を見ると、どんなことができるかがざっとわかります。
$ ampm --help
global options
--help, -h
--verbose, -v
--server <server url>
--username <username>
--passowrd <password>
valid modes include:
pause, create, list, start, add, shutdown, query, unpause, delete
pause:
Pause a guest
ampm pause guest_name [--guest_id] <guest_id>
create:
Create a new guest
--help, -h
--verbose, -v
--host <hostname> the host to run the guest on
--profile <profilename> the profile to create the guest with
list:
List information about virt-factory
valid sub modes are hosts, guests, status, profiles, tasks, users
hosts list machines capabable of running guests
guests list virtulized guests
status list status of virtulized guests
profiles list profiles available for creating guests or hosts
tasks list tasks that are queued
users list users
start:
Start up a guest
ampm start guest_name [--guest_id] <guest_id>
add:
Add a new user to virt-factory
--username <username>
--password <password>
--first <first_name
--middle <middle_name>
--last <last_name>
--email <email address>
--description <desription>
shutdown:
Shutdown a guest
ampm shutdown guest_name [--guest_id] <guest_id>
query:
Query a guest for more info about what host or profile a guest is running
--help, -h
--verbose, -v
--host <host> which host a guest is running on
--profile <profile> which profile a guest is running
unpause:
Unpause a guest
ampm unpause guest_name [--guest_id] <guest_id>
delete:
Delete a task, profile, or user
--help, -h
--verbose, -v
--task_id <task_id> delete a task from the task queue
--user_id <user_id> delete a user
次回はクライアント側のインストールと設定手順について解説予定です。解説アップしました。
Updated on 2008/01/12 15:41
Virt-Factory
Cobbler や Koan について触れたところで、次は Virt-Factory です。
Yappo さんが Xen 環境で Cobbler/Koan が動くことを検証してくださったので、心置きなく Virt-Factory の紹介ができます。こちらの身勝手なお願いに応じてくれた Yappo さん、ありがとうございます。
Virt-Factory は、大量の仮想サーバの管理を楽に行うためのツールで、Cobbler/Koan + Puppet + これらをラップするサーバ/クライアントデーモンとコマンドラインツール + Web UI + XMLRPC API、といった感じです。具体的には、以下のような感じ。
- Cobbler/Koan、Puppet の統合
- Cobbler による PXE ブート + ネットワークインストール環境の構築。単に Cobbler を利用する場合とは違い、キックスタートファイルに、Virt-Factory に必要なパッケージのインストールや、インストール後に必要な処理の実行を含めてくれる。
- Koan によるホスト OS や Xen/QEMU ゲスト OS のコマンド一発インストール。Koan を使う場合は、ホスト OS 上で実行する必要があるが、Virt-Factory を使うと中央のサーバからリモートで実行できる。
- リモートのホスト OS 上にある仮想サーバの状況を、中央のサーバで一元管理できる。
- Cobbler でのキックスタートファイル作成時に、Puppet パッケージのインストール処理を含めてくれたり、プロファイル属性として Puppet クラスを指定できたりとか。おそらく Puppet サーバのノード管理とも連携するんじゃないだろうか。(ここはまだちゃんと検証できてない。)
- Web UI でプロファイルやシステムの登録、管理などができる
- Web UI やコマンドラインツールは XMLRPC API と連携してる
とてもよさげなツールではあるのですが、色んなツールを統合してるだけあって、できることが多すぎてわけがわからないし、本家サイトのインストール/セットアップドキュメントの通りにやっても動かないし、ドキュメントも不十分で、これから触ってみようと思う方は苦労するかと思いますので、インストール手順から使い方まで、自分が理解できた範囲で、今後数回にわけてご紹介していこうと思います。
ただしプロダクトとしてはまだ発展途上という感じで、すぐに実践投入できるものではなさそうです。
とりあえず次回は Virt-Factory サーバのインストールと設定について解説予定です。解説をアップしました。
Updated on 2008/01/05 20:17
Koan で Cobbler を更に便利に
Koan (Kickstart over a network) を使うと、Cobbler と連携して、PXE ブートを使わずに OS を再インストールしたり、Xen または QEMU のゲスト OS をコマンド一発でインストールすることができます。
以下、Fedora 7 で Koan を試してみたメモ。
Koan のインストール
$ sudo yum install koan
プロファイルやシステムの一覧を表示
プロファイル一覧を表示する。
$ sudo koan --server=cobbler.example.org --list-profile
fc7-i386
fc7-xen-i386
システム一覧を表示する。
$ sudo koan --server=cobbler.example.org --list-system
test-server.example.org
cobbler.example.org は cobbler が動いてるサーバ。koan による OS インストールを行うときには、プロファイルかシステムのどちらかを指定する。
OS の再インストール
OS を再インストールする時には、--replace-self オプション と --profile または --system を指定して koan を実行。
$ sudo koan --server=cobbler.example.org --replace-self --profile=f7-i386
- using kickstart from cobbler: http://cobbler.example.org/cblr/kickstarts/f7-i386/ks.cfg
downloading initrd initrd.img to /boot/initrd.img
url=http://cobbler.example.org/cobbler/images/f7-i386/initrd.img
- using kickstart from cobbler: http://cobbler.example.org/cobbler/images/f7-i386/initrd.img
downloading kernel vmlinuz to /boot/vmlinuz
url=http://cobbler.example.org/cobbler/images/f7-i386/vmlinuz
- using kickstart from cobbler: http://cobbler.example.org/cobbler/images/f7-i386/vmlinuz
- kickstart: http://cobbler.example.org/cblr/kickstarts/f7-i386/ks.cfg
- downloading http://cobbler.example.org/cblr/kickstarts/f7-i386/ks.cfg
- using kickstart from cobbler: http://cobbler.example.org/cblr/kickstarts/f7-i386/ks.cfg
- ['/bin/bash', '/var/spool/koan/insert.sh']
cpio
14535 blocks
14538 blocks
done
- ['/sbin/grubby', '--grub', '--add-kernel', '/boot/vmlinuz', '--initrd', '/boot/initrd.img', '--make-default', '--title', 'kick1199098439', '--args', 'ksdevice=eth0 lang= kssendmac syslog=cobbler.example.org:25150 text ks=file:ks.cfg', '--copy-default']
- reboot to apply changes
ネットワークインストール用の /boot/initrd.img とか /boot/vmlinuz とかを cobbler サーバからダウンロードして、/boot/grub/menu.lst を書き換えてくれる。
あとは再起動すれば、OS の再インストールが勝手にはじまる。
Xen ゲスト OS のインストール
Xen のインストールと Xen カーネルの起動
当然 Xen 環境が必要になるので、Xen をインストール。
$ sudo yum install kernel-xen xen
インストール後、/boot/grub/menu.lst を書き換えて、デフォルトで Xen カーネルが起動するようにして再起動する。
koan コマンドでの Xen ゲスト OS インストール
--replace-self ではなく --virt を指定する。
$ sudo koan --server=cobbler.example.org --virt --profile=f7-xen-i386
これで Xen ゲスト OS のインストールがはじまる、はずなんだけど、うちの環境では Segmentation Fault になってしまった。VMWare 上で Xen を動かすというのは無理があるのかもしれない。
実機で試したいところだけど、試せるサーバがないので保留。Yappo さんあたりが試してレポートしてくれるに違いない、きっと。
Cobbler Web UI
前回のエントリで書いた Cobbler にはウェブ UI がある。その設定方法のメモ。設定方法はここを参照した。Cobbler のバージョンが 0.7 以降の場合はこっちを参照。
まずは /var/lib/cobbler/settings の xmlrpc_rw_enabled を 1 に設定。
xmlrpc_rw_enabled: 1
これを見て想像がつくと思うけど、cobblerd が XMLRPC リクエストを受け付けるようになる。
次に /etc/cobbler/auth.conf で、cobblerd の XMLRPC へのアクセスを許可するユーザ ID とパスワードを設定する。
[xmlrpc_service_users]
admin = password
/etc/cobbler/auth.conf が httpd ユーザから読めるようにする。
$ sudo chown apache /etc/cobbler/auth.conf
SELinux を利用している場合はこの設定も必要らしい。(自分は SELinux は disabled にしてる。)
$ sudo chcon -t httpd_sys_content_t /etc/cobbler/auth.conf
$ sudo setsebool httpd_can_network_connect true
httpd で認証するユーザ名とパスワードを設定する。これは /etc/cobbler/auth.conf で設定したものと同じにする。
$ sudo htdigest /var/www/cgi-bin/cobbler/.htpasswd "Cobbler WebUI Authentication" admin
あとは http://cobbler.example.org/cgi-bin/cobbler/webui.cgi にアクセスすれば OK。以下のスクリーンショットは Profile を表示させたところ。
Error: Macro Image(cobbler_web_ui.jpg) failedCannot reference local attachment from here
この画面見てて気づいたんだけど、Cobbler では system の登録ができて、MAC アドレスを登録して Profile を指定しておけば、PXE ブート時にイメージ名を入力しなくても、勝手に指定された Profile のイメージでブートしてくれる。
system の登録はコマンドラインでもできる。
$ sudo cobbler system add --name=test-server --mac=00:0C:29:7E:3A:8B --profile=f7-i386
Cobbler が素敵すぎる
ネットワークインストール環境がさくっと構築できる Cobbler がおもしろそうなので触ってみたメモ。参考にしたサイトは以下の通り。
以下、Fedora 7 で Cobbler を動かしてみたメモ。
インストール
yum で一発インストール。
$ sudo yum install cobbler
設定
cobbler check コマンドを実行すると、見直すべき設定ポイントを教えてくれる。親切。
$ sudo cobbler check
The following potential problems were detected:
#0: The 'server' field in /var/lib/cobbler/settings must be set to something other than localhost, or kickstarting features will not work. This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
#1: For PXE to be functional, the 'next_server' field in /var/lib/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
#2: service cobblerd is not running
#3: syslinux should be installed but is not, expecting to find something at /usr/lib/syslinux/pxelinux.0
#4: service xinetd is not running
#5: change 'disable' to 'no' in /etc/xinetd.d/tftp
#6: service httpd is not running
#7: since iptables may be running, ensure 69, 80, 25150, and 25151 are unblocked#8: reposync is not installed, need for cobbler reposync, install/upgrade yum-utils?
#9: yumdownloader is not installed, needed for cobbler repo add with --rpm-list
parameter, install/upgrade yum-utils?
これを元に設定変更を行っていく。まずは /var/lib/cobbler/settings を以下のように修正。
manage_dhcp: 1
next_server: '192.168.10.12'
server: 192.168.10.12
192.168.10.12 は Cobbler が動いているマシンの IP アドレス。
cobblerd を起動。
$ sudo /sbin/chkconfig cobblerd on
$ sudo /etc/init.d/cobblerd start
syslinux をインストール。
$ sudo yum install syslinux
tftpd と xinetd を起動。
$ sudo /sbin/chkconfig tftp on
$ sudo /sbin/chkconfig xinetd on
$ sudo /etc/init.d/xinetd start
httpd を起動。
$ sudo /sbin/chkconfig httpd on
$ sudo /etc/init.d/httpd start
iptables はとりあえずオフにしとく。
$ sudo /sbin/chkconfig iptables off
$ sudo /etc/init.d/iptables stop
yum-utils のインストール。
$ sudo yum install yum-utils
/etc/cobbler/dhcp.template を以下のような感じで修正。
# ******************************************************************
# Cobbler managed dhcpd.conf file
#
# generated from cobbler dhcp.conf template ($date)
#
# ******************************************************************
ddns-update-style interim;
allow booting;
allow bootp;
ignore client-updates;
set vendorclass = option vendor-class-identifier;
subnet 192.168.10.0 netmask 255.255.255.0 {
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.10.100 192.168.10.254;
filename "/pxelinux.0";
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
}
$insert_cobbler_system_definitions
dhcp をインストールしておく。dhcpd はこの段階では起動しなくていい。(起動してもエラーになる。)
$ sudo yum install dhcp
$ sudo /sbin/chkconfig dhcpd on
ネットワークインストールに必要なファイルの用意
インストールイメージとか、キックスタートファイルとかを作成。
$ sudo cobbler import --path=rsync://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/7/Fedora/i386/os --name=f7
このコマンド一発で必要なものを全部つくってくれる。超簡単。時間はかかるけど。
cobbler report を実行すると、どこにどんなファイルがあるかとかを表示してくれる。
$ sudo cobbler report
distro : f7-i386
kernel : /var/www/cobbler/ks_mirror/f7/images/pxeboot/vmlinuz
initrd : /var/www/cobbler/ks_mirror/f7/images/pxeboot/initrd.img
kernel options : {}
architecture : x86
ks metadata : {'tree': 'http://@@server@@/cblr/links/f7-i386'}
breed : redhat
distro : f7-xen-i386
kernel : /var/www/cobbler/ks_mirror/f7/images/xen/vmlinuz
initrd : /var/www/cobbler/ks_mirror/f7/images/xen/initrd.img
kernel options : {}
architecture : x86
ks metadata : {'tree': 'http://@@server@@/cblr/links/f7-xen-i386'}
breed : redhat
profile : f7-i386
distro : f7-i386
kickstart : /etc/cobbler/kickstart_fc6.ks
kernel options : {}
ks metadata : {}
virt file size : 5
virt ram : 512
virt type : auto
virt path :
virt bridge : xenbr0
virt cpus : 1
repos : []
dhcp tag : default
server : <<inherit>>
profile : f7-xen-i386
distro : f7-xen-i386
kickstart : /etc/cobbler/kickstart_fc6.ks
kernel options : {}
ks metadata : {}
virt file size : 5
virt ram : 512
virt type : auto
virt path :
virt bridge : xenbr0
virt cpus : 1
repos : []
dhcp tag : default
server : <<inherit>>
これを見て分かるとおり、Xen 用のイメージなんかも勝手に作ってくれる。
あとは必要に応じてキックスタートファイル(/etc/cobbler/kickstart_fc6.ks)なんかをいじる。何かファイルを修正したりしたら、cobbler sync を忘れずに実行。
$ sudo cobbler sync
ネットワークインストールを実行する
ここまできたら、別のマシンを PXE ブートで起動して、boot プロンプトで cobbler import で作成したイメージの名前を入力。
boot: f7-i386
あとは勝手にインストールが始まる。
以下のように system 登録しておくと、PXE ブート時にイメージ名を入力しなくても、勝手に割り当てられたイメージでブートしてくれる。
$ sudo cobbler system add --name=test-server --mac=00:0C:29:7E:3A:8B --profile=f7-i386
Updated on 2007/12/29 00:19