webdata用に領域を割り当てたので、fstabにその記述をするが(ホスト側から指定される領域を決めておく(例:/dev/sde マウントポイント ext4 1 4。最後の数字はバックアップするかとその順番だが、私が使う予定の amanda で関係するのかなー、不明である)、まだホスト側から割り当ててもらっていないので、あくまで記入のみ。又、ここを間違えると起動に失敗するので、慎重に。
私はここで失敗をした。最初は /dev/sde1 と最後に数字を付けていたら、再起動時にエラーが出た。KVMではホストからゲストに領域を渡す時数字を付けると渡された領域にさらに領域があると思う様だ。だから数字は付けてはいけない。
ゲストの再起動に失敗し、途中で止まったら、rootのパスワードを入れ、haltでゲストを止める。ホスト側にゲストの領域をマウント(10:ゲストの領域をマウントする場合を参照)し、訂正後、再起動。
次にwebdata用のマウントポイントを作って置く。
ここで一度シャットダウンし、ホスト側の設定をする。
これからはホスト側の設定。
起動設定の変更
gedit /etc/libvirt/qemu/ゲスト名.xml に下記の設定を追加。
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/Data/webdata'/>
<target dev='vde' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0A' function='0x0'/>
</disk>
多分場所はどこでもいいと思うが、私は一連の領域(<disk>)の設定の最後に付け加えた。'vde'はゲストの/etc/fstabに記載に合わせる亊、slot='0x0A' はslotで検索し、使っている最後の番号の次にすること。又、前には変更し無かったutcだが気持ち悪いので <clock offset='localtime'/> に変更した。
又、ここで失敗。どんなに設定を見直しても合っているのに、同じ場所でエラーが出る。/dev/sde 何てデバイスは無いと言われる。
遅かった事もあって、その日は寝た。次の日ホストを起動し、ゲストを起動すると何事も無かったの様に正常起動した。ググると virsh define /etc/libvirt/qemu/ゲスト.xml と定義を再読み込みさせないといけないみたい。
後日の為にわざと .xml ファイルをいじりテストする。libvirt を再起動したらいいのではと思い service libvirtd restart で再起動したら、仮想マシンマネージャに "localhost(qemu) - not connected" と表示された。ここは慌てず、右クリックし、接続をクリックで表示された。これでもいいけど、やっぱり王道をいくべきだ。
やっと正常になったので、ゲストを起動し、ここから又、ゲストでの操作。
今度はゲストからインターネットに繋がらない。
原因は不明だが、どういう訳か "NetworkManager" が走っていたので、これを止め、/etc/resolve.conf を書き直し、service network restart でOKになった。
ゲストの再起動で随分時間をとられたが、
ここでやっと virtualhost の設定をする。
/etc/httpd/conf.d/virtualhost.conf に
NameVirtualHost *:80
# kinryokai
<VirtualHost *:80>
DocumentRoot /webdata/public/kinryokai
ServerName www..kinryokai.net
ServerAlias kinryokai.net
ErrorLog logs/kinryokai_error_log
CustomLog logs/kinryokai_access_log combined env=!no_log
<Directory "/webdata/public/kinryokai/upfiles">
SetEnvIf Referer "^http.://www\..kinryokai\.net" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Directory>
<Directory "/webdata/public/kinryokai/uploads">
SetEnvIf Referer "^http.://www\.kinryokai\.net" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Directory>
ScriptAlias /cgi-kinryo/ "/webdata/cgi/cgi-kinryo/"
<Directory "/webdata/cgi/cgi-kinryo">
AllowOverride None
Options None
SetEnvIf Referer "^http.://www\.kinryokai\.net" cgi-kinryo_ok
order deny,allow
deny from all
allow from env=cgi-kinryo_ok
</Directory>
</VirtualHost>
この設定の意味はcentocsrv.comを参考にしてください。[注:ここにはXOOPSがリンクを張らないようにメアドやURLに!やピリオドをわざと入れています。]
又、 "/webdata/public/kinryokai/upfiles"と "/webdata/public/kinryokai/uploads" の設定はここに画像などを置いておくので、他のWEBからリンクを張られ、遅くなるのを防ぐ設定です。
もう一度 conf のチェック
# apachctl configtest
もしエラーが出たら設定を見直す。webdavの設定がまだですが、後でやります。
エラーが無ければapacheを走らす。
# service httpd start
# chkconfig httpd on
内部の他のホストから受けるため80番と443番を開けます。
/root/iptables.shの
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 行頭の#を取りコメントを外す。
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 行頭の#を取りコメントを外す。
# sh iptables.sh
で設定を読み込みます。(時間がかかります)
この環境はテストなので外部からは受け付けませんが、必要ならルーターの設定を忘れずに。
webのチェックはcentocsrv.com/apache.shtmlを参考に行いますが、local networkの外からと(現用のWEBが動いている)、.htaccessはやりませんでした(使わない方針)。
多分私の環境だけだと思いますが、http://localhost では真っ白な画面になった。(原因:XOOPSで作ってあるWEBのデーターをコピーしたが、mysqlの設定と、php-mysqlのインストールが終わっていない為だった)
http://localhost/index.html で正常に表示された。
いよいよ今後稼働するゲストとして、WEBやメールサーバーを設定していく。
基本的にはhttp://centossrv.com/apache.shtmlを参考にした。apacheはデフォルトでインストール済みなので、php等をインストール
# yum -y install php php-mbstring
/etc/httpd/conf/httpd.conf の設定。基本的にはhttp://centossrv.com と同じだが、変更した部分だけを記す。
KeepAlive ON ←多分少しはコネクションをキープした方が良さそうだから。
ServerAdmin xxxxxx@kinryokai.net
#ServerName www.example.com:80 ←virtualhost.conf で設定
#DocumentRoot "/var/www/html" ←virtualhost.conf で設定
<Directory />
Options Includes ExecCGI FollowSymLinks ←Includes ExecCGI を記入
AllowOverride None ←.htaccessは使わないので、noneのまま
</Directory>
<Directory "/var/www/html"> から </Directory> までを消去。これはdocument rootの設定だが、virtualhost.conf で設定
DirectoryIndex index.html index.php index.html.var ←index.phpを追加
SetEnvIf Request_URI "\.(gif|jpg|png|JPG|GIF|PNG|bmp|css|ico|ICO)$" no_log ←追加
SetEnvIf Request_URI "default\.ida" no_log ←追加
SetEnvIf Request_URI "cmd\.exe" no_log ←追加
SetEnvIf Request_URI "root\.exe" no_log ←追加
SetEnvIf Request_URI "Admin\.dll" no_log ←追加
SetEnvIf Request_URI "NULL\.IDA" no_log ←追加
SetEnvIf Remote_Addr 192.168 no_log ←追加
SetEnvIf Remote_Addr 127.0.0.1 no_log ←追加
#CustomLog logs/access_log combined env=!no_log ←コメントアウト、virtualhost.confで設定
Alias /icons/ "/webdata/icons/" ←場所を変更
<Directory "/webdata/icons">
#<IfModule mod_dav_fs.c> ←webdav.conf で設定
# Location of the WebDAV lock database.
# DAVLockDB /var/lib/dav/lockdb
#</IfModule>
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ←virualhost.confで設定
#<Directory "/var/www/cgi-bin">
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
AllowOverride Noneは少し説明がいるかな。理由は
http://apache.org/docs/ja/howto/htaccess.html の”いつ .htaccess ファイルを使う(使わない)か。”を参照
LanguagePriorityの所は ja を最初にした。
section 3 は virtual host の設定だから全部消去、virtualhost.conf で設定していく。
iconsの場所を変えたので
# mv /var/www/icons /webdata/icons
ここで一度confが正しいかチェック
# apachectl configtest
注記:ある時別のホストの設定で
httpd を起動中: no listening sockets available, shutting down
Unable to open logs
とエラーが出たが、どうしても原因が分からない。だって apachectl configtest をやってもエラーが出ない。httpd.confを一行づつ見直してやっと判明
Listen 80 の前に#が付いていてコメントアウトされていた。hostnameの設定で www.kinryokai.net:80 等とポートを指定しているのでコメントアウトしてもいいのかと思っていた。
perlへのリンクを張る。
# ln -s /usr/bin/perl /usr/local/bin/perl
リンクが張れたか確認
# whereis perl
リンクの指定時の右辺が表示されればOK。
私はwebのデーターは別ディスクの別のパーティションにしている。理由はサーバーの引越しの時、このディスクを新しいOSに持っていけばいいから。
と言うわけでその領域の作成を/dev/sdbにLVMで作る(これはハードディスクでなくSSDにした。理由はアクセスが早いのと省電力化、可動部を少なくし信頼度をあげる)。
# pvcreate /dev/sdb1 #sdb1は例
# vgcreate VG名 /dev/sdb1 #sdb1は例
# lvcreate -L 作るサイズ(例:10G)-n LV名 VG名
作った領域をフォーマット
# mkfs.ext4 /dev/VG名/LV名
ここに色々なディレクトリーを作る。
htdigest用のDIR、awstats用のDIR(html用とperl用を分けた方がいい)、cgi-bin用のDIR(これはvirtualhost分用意。理由はコミュニティーで使う出欠表を入れたいから。参考web:http://www.hidekik.com/attlist4/attlist4.html)。mysql用のDIRとwebmail用(これもOSの引越しの時に楽だから)。最後に pubic ここの下にvirtualhostの各ディレクトリーが入る。virtualhost用の各DIRはそれぞれのWEBマスター用にオーナーを変更しておく(FTPを使う場合)また、cgi-bin関係もやった方がいいかも。
長くなりそうなので次に続く。(12:ゲストにapacheを設定-2)
クローンの設定を変更する時、ホスト側にマウントする方法。
多分領域を一つ指定し、作る場合の為に、デフォルトでは指定した領域にさらに領域を作っているので、単純な方法ではマウント出来ないので、その方法。
# losetup -f ←loop No を調べる
/dev/loop0
# losetup /dev/loop番号 /dev/VG名/LV名 私の場合はLVMに作っていたので
# kpartx -a /dev/loop番号
# ls /dev/mapper ←パーティションの確認、指定したloopナンバーの後にP1等がついている(例:loop0p1)。もし2つ以上含まれていればその分最後の番号が増える。私の場合はすべて一つだけだった。
# mount /dev/mapper/loop番号p番号 ←(例:loop0p1)
やっとマウント出来た。
今回は無かったが、この中にさらにLVMを作っていることがある。そんな場合は pvscan をすると、新しく増えたボリュームがあるので
# vgchange -ay
でVGをアクティブにし
# lvscan
をすると新しいLVがあるので、
# mount /dev/VG名/LV名 /マウントポイント
でマウントする
後始末は umount してから
# vgchange -an /dev/VG名 ←vgchange -ay をしていなければ必要無い
# kpartx -d /dev/loop番号
# losetup -d /dev/loop番号
今まで元になるゲストを作りました。KVMはクローンが簡単に作れるため、共通の設定やプログラムをやりました。いよいよ実際にWEBサーバーやファイルサーバーになるゲストを作ります。
作ったゲストを停止し、右クリックで、クローンを選びます。
表示されたウインドウで名前に使いたい名前を入れ、各ストレージの "ディスククローン”をクリックすると表示される詳細を選び、参照、ローカルを参照で割り当てたい領域(あらかじめ使う領域は作って置く)を選んで、OKをクリックすると、上書きの確認が現れ、これもOK。これを領域全部に設定して行きますが(私は四つ)、四つ目は共有(私の場合)になっているので何もしない。
最後にクローンをクリックすると作業が始まります。各領域をコピーしているので、少し時間が掛かります。終わると仮想マシンマネージャー(アプリケーション→システムツール→仮想マシンマネージャー)に入れた名前でゲストが出来ていますが、このままでは競合する部分がありますので、変更をしていきます。ホスト側のOSにゲストの領域をマウントしてもいいのですが、各領域は中にさらに領域を作っており、簡単にはマウント出来ないので、実際に走らせた方が簡単です。ただしクローンのオリジナル側は止めて置かないとIP等のの競合が起こる。
クローンで作ったOSを走らせると、ネットワークでエラーが出ていて、VNCで継げないのでログインする。
まず、IPを変更。/etc/sysconfig/network-scripts/ifcfg-eth0 のIPADDRESS=の所を使いたいIPに変更。
次にホスト名が被っているので、/etc/sysconfig/network のHOSTNAME= の所を使いたいホスト名に変更。
又NetworkManagerが悪さをしていると思いserviceを調べたが走っていない、
/var/log/dmseg に udev: renamed network interface eth0 to eth1 があった。
これでググると http://d.hatena.ne.jp/ngyuki/20110805/p1 に回答があった。
さっそく /etc/udev/rules.d/70-persistent-net.rules をどっかに移し、再起動するとOKになった。
2012/09/27追記
別のクローンを作った時、同じ事をやっても継らなかった。自動的に作られた /etc/udev/rules.d/70-persistent-net.rules の最後の行を見ると NAME="eth1" となっている。これを NAME="eth0" に変更し再起動。今度はブート時にMACアドレスが予想とは違うと言われ、
まだネットワークが使えない。/etc/sysconfig/network-scripts/ifcfg-eth0 でMACの指定があり、これが /etc/libvirt/qemu の下にあるゲストのxmlファイルの指定と違うのでエラーが出ている。このゲストはクローンで作ったのでMACアドレスはxmlファイルで指定されるので、ifcfg-eth0の方はコメントアウトし,ついでにUUIDもコメントアウトし、再起動したらOKになった.
kvmのVNCは使いにくいので(マウスの切り替えが面倒なのと、私が使ってる縦900ドットのディスプレイでは縦をスクロールしないといけない)
xinet経由で走らせたいので
# yum list installed xinetd
インストールされていなかったので、xinetd をインストール、ついでにtigervnc も
# yum install xinetd tigervnc-server
/etc/servicesの最後に
vnc 5901/tcp # vnc serve ← vncを5901ポートで待ち受ける。
と記入。/etc/xinetd.d/vnc を下記のように作成
service vnc
{
disable = no
socket_type = stream
wait = no
user = nobody
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -once -securitytypes=none -geometry 1200x800 -depth 24
log_on_failure +=USERID
}
/etc/gdm/custom.conf を下記のように修正
[daemon]
RemoteGreeter=/usr/libexec/gdmgreeter
[security]
AllowRemoteRoot=true
[xdmcp]
Enable=true
この時=の両側にスペースを入れてはいけない。
/root/iptables.shの修正、各種サービスを公開する場合の設定(ここまで) の前に
# VNC server
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT_COUNTRY
を追記し
# sh iptables.sh
で設定を反映させる。
# service xinetd start ← xinetdをスタート
# chkconfig xinetd on ←再起動後も走らす
最後にこのゲストでなくホスト側でVNCビュアーを入れる
# yum install tigervnc
これでVNCビュアーの窓に IPアドレス:1 (ポート5901は 1 と入力)でゲストにつながる
インストールが終わり、再起動の後、kdumpでエラーが出るがそのまま進んで、初期設定の画面で、同意し、ユーザー設定をし、NTPの設定でこのゲストを走らせているホストをのIPを指定(NTPサーバーが走っているので)するがネットワークにエラーがあり、アクセス出来ないと言われるが強引に進む。kdumpはメモリーが足りないと(これでエラーか)言われるが、使わないのでそのまま進む。
これで再起動になり、ログインする。ネットワークのエラーはNetworkManagerが悪さをしている見たいなので、システム→管理→サービスから停止し、再起動後も有効にならないように無効にしておく。
/etc/resolv.confの編集(NetworkManagerが勝手に書き込んだ分を修正)
search kinryokai.net
nameserver 192.168.135.30
nameserver 192.168.135.1
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
この様に設定した。これはゲストが走っているホストの設定とほぼ同じ。
これでもネットワークが使えなかったので、
/etc/sysconfig/network-scripts/ifcfg-eth0を見ると、どういう訳か
ONBOOT="no"になっていたのでONBOOT="yes" に変更した。service network restart でネットワークを再起動したら、使えるようになった。
インストール時に指定しなかった領域を設定する。
これはホストからは ”vdd” で渡されている、私はここを他のゲストとの共有領域とし、ダウンロードしたものを置いておく事に使うので、
# mkdir /Download
# gedit /etc/fstab
で
/dev/vdd /Download ext4 defaults 1 3
を最後に追加し、
# mount -a
でfstabを再読み込みした。
# chmod 777 /Download
もやっておいた。
後で気がついたがホスト側のこのゲスト設定ファイルを見ていると(/var/run/libvirt/qemu/test.xml)<clock offset='utc'/>になっているが(どうして!インストール時にUTCを外したが?)でも実際はローカルタイムになっているのでそのままいじらなかった。これは予想だがNTPサーバーにこのゲストが走っているホストのを指定し、それがローカルタイムだからだと思う。
最後に、このままだとゲストでアンダーバーが入力出来ないので、
/var/run/libvirt/qemu/test.xml(最後はゲストの名前.xml)の
<graphic type='vnc' port='5900' autoport='yes'/> の所を
<graphic type='vnc' port='5900' autoport='yes' keymap='ja'/>
にするとゲストの中でアンダーバーが入力出来る様になる。
このホストはX windowも入っているのでアプリケーション→システムツール→仮想マシンマネージャで作る。
ウィンドウが開いたら、今後の為に編集→設定で全般タブのシステムトレイアイコンにチェックを入れ起動が簡単に出きるようにする。
ツールの新しい仮想マシンの作成をクリック。
名前を適当に入れ、ローカルのインストールメディアにチェックを入れ次へ
isoイメージを使用にチェックを入れ、参照からイメージファイルを選択し進む。
ここは単に進む
管理しているストレージ....にチェックを入れ作ってあったLVMを指定。ここは一つだけしか指定出来ないが、後で変更できる
ここで肝心なのは”インストール前に設定をカスタマイズするにチェックを入れる亊。これをしないとディスクの追加が出来ない。又、詳細なオプションを広げ bridge "br0" が指定されている事を確認。
DISK 1を選び ADVANCED OPTIONS で virtio を選ぶ(この方がパーフォマンスがいいとどっかに書いてあった)そして適用をクリック後、ハードウェアを追加をクリック。
管理している...にチェックを入れ、参照からパーテイション(LVM)を選び、”virtio”にする亊。その後完了をクリック。同じように他の領域も追加する。私は四つの領域を使った。
ここで他のゲストOSと共有したい領域は図の様に、”共有可能” にチェックを入れておくと、他のゲストOSでも同じ領域を使う事が出来る。私はダウンロードの領域を各ゲストで共有をした。すべての設定が終わったら、左上のインストールの開始をクリックし、インストールを始める。その後は、見慣れたインストール画面になるので、省略。
ホスト名の入力で気をつけなければならないのは、左下の ”ネットワークの設定” をクリックし、次に "eth0” を選び "編集” をクリック、表示されたウィンドウで(画像には無いが)”自動接続する” にチェックを入れる亊。”IPV4のセッテイング” タブを選び、方式を手動にする(固定IPにしたいので)。次に "追加” をクリックし、アドレス、ネットマスク、ゲートウエイを設定、DNSサーバーにホストOSのIPを入れ、"適用”、"閉じる” とクリックし、設定を終わらせる。(IPアドレスは一部隠してあります)
タイムゾーンの設定で、システムクロックでUTCを使用のチェックを外して置く。
インストールのタイプを選ぶ所は ”カスタムレイアウトを作成する” を選んで、その後各領域を設定していくが、この時領域を選んで "編集” をクリックし、マウントポイントやフォーマットタイプなどを設定する。最後の共有の設定をした領域(VDD)は何もしないでそのまま次へ。
その後、インストールが始まる。
いよいよKVMでゲストOSをインストールするが、その前にゲストOSの保存場所を作って置く。私はイメージファイルにしたくないのでLVMでゲストOS様の領域を作った。このサーバーのディスク構成は
128GBのSSD:ここにホストOS、ゲストOS様の領域を作る
120GBのSSD:これにはゲストOS用のデーター領域を作る。分けた理由は万一OSの再インストールや、将来の物理マシンの変更時にデーターを簡単に持っていく為。ディスクを持っていけばよい。
750GBのハードディスク:ここはファイルサーバーのデーター領域や、バックアップの保存場所、各OSのSWAP領域を作る。SSDにSWAP領域を作りたく無い為。
LVMコマンドは(例)
PVを作る:pvcreate /dev/sda2 (sda2は環境に合わせる)
VGを作る:vgcreate VG名 /dev/sda2 (sda2は環境に合わせる)
LVを作る:lvcreate -L 10G -n LV名 VG名 (10Gは作るサイズ)
LVを広げる:lvextend -L +5G /dev/VG名/LV名 (+5Gは増やすサイズ)
LVを削除:lvremove /dev/VG名/LV名
VGの非アクティブ化:vgchange -an /dev/VG名
VGのアクティブ化:vgchange -ay /dev/VG名
LVの名前変更:lvrename VG名/旧LV名 VG名/新LV名
VGの名前変更:vgrename 旧VG名 新VG名
ボリューム名がダブっていたら(デフォルトの名前を使うとよく起こる)
vgchange -an /dev/VG名 で非アクティブにし、vgrename 旧VG名 新VG名 で変更し、vgchange -ay /dev/VG名 でアクティブにする。
dnsmasqは初めからインストールされていたので設定だけ。
もしインストールされていなかったらyumでインストールする。
/etc/dnsmasq.conf の設定
domain-needed
bogus-priv
interface=br0
no-dhcp-interface=br0
コメントを外し、下の2行はbr0を記入。後はデフォルトのまま、と言ってもすべてコメントアウトされていたが。
/etc/resolv.conf の設定だが、これは最初にしてある(1:インストール後の設定)が、最後に書いてあるようにnameserver 192.168.135.30のコメントを外す。そしてdnsmasqを走らす。
# service dnsmasq start
# chkconfig dnsmasq on
# chkconfig --list dnsmasq
dnsmasq 0:off 1:off 2:on 3:on 4:on 5:on 6:off