11:ゲストにapache(WEBサーバー)を設定

いよいよ今後稼働するゲストとして、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 このwebもう無い見たい)。 mysql用のDIRとwebmail用(これもOSの引越しの時に楽だから)。最後に pubic ここの下にvirtualhostの各ディレクトリーが入る。virtualhost用の各DIRはそれぞれのWEBマスター用にオーナーを変更しておく (FTPを使う場合)また、cgi-bin関係もやった方がいいかも。
長くなりそうなので次に続く。(12:ゲストにapacheを設定-2)

カテゴリー: CentOS 6 | コメントする

10:ゲストの領域をマウントする場合

クローンの設定を変更する時、ホスト側にマウントする方法。
多分領域を一つ指定し、作る場合の為に、デフォルトでは指定した領域にさらに領域を作っているので、単純な方法ではマウント出来ないので、その方法。
# 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番号

カテゴリー: CentOS 6 | コメントする

9:ゲストのクローンを作る。

今まで元になるゲストを作りました。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になった。

カテゴリー: CentOS 6 | コメントする

8:ゲストへ他のプログラムのインストール

ホストで行った ”2:他のプログラムのインストール” を参考に同じことをゲストにもする。
ただし iptables.sh は$BRの変更はせず $LAN のままにする事。
後、NTPサーバーはもちろん設定しない。

カテゴリー: CentOS 6 | コメントする

7:VNCサーバーをインストールする

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 と入力)でゲストにつながる

カテゴリー: CentOS 6 | コメントする

6:ゲストOSインストール後の処理

インストールが終わり、再起動の後、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’/>
にするとゲストの中でアンダーバーが入力出来る様になる。

カテゴリー: CentOS 6 | コメントする

5:ゲストOSを作る

このホストはX windowも入っているのでアプリケーション→システムツール→仮想マシンマネージャで作る。
ウィンドウが開いたら、今後の為に編集→設定で全般タブのシステムトレイアイコンにチェックを入れ起動が簡単に出きるようにする。
ツールの新しい仮想マシンの作成をクリック。
名前を適当に入れ、ローカルのインストールメディアにチェックを入れ次へ
isoイメージを使用にチェックを入れ、参照からイメージファイルを選択し進む。

 

 

 

 

 

ここは単に進む

 

 

 

 

 

 

管理しているストレージ….にチェックを入れ作ってあったLVMを指定。ここは一つだけしか指定出来ないが、後で変更できる

 

 

 

 

ここで肝心なのは”インストール前に設定をカスタマイズするにチェックを入れる亊。これをしないとディスクの追加が出来ない。又、詳細なオプションを広げ bridge “br0” が指定されている事を確認。

 

 

 

 

DISK 1を選び ADVANCED OPTIONS で virtio を選ぶ(この方がパーフォマンスがいいとどっかに書いてあった)そして適用をクリック後、ハードウェアを追加をクリック。

 

管理している…にチェックを入れ、参照からパーテイション(LVM)を選び、”virtio”にする亊。その後完了をクリック。同じように他の領域も追加する。私は四つの領域を使った。

 

ここで他のゲストOSと共有したい領域は図の様に、”共有可能” にチェックを入れておくと、他のゲストOSでも同じ領域を使う事が出来る。私はダウンロードの領域を各ゲストで共有をした。すべての設定が終わったら、左 上のインストールの開始をクリックし、インストールを始める。その後は、見慣れたインストール画面になるので、省略。

ホスト名の入力で気をつけなければならないのは、左下の ”ネットワークの設定” をクリックし、次に “eth0” を選び “編集” をクリック、表示されたウィンドウで(画像には無いが)”自動接続する” にチェックを入れる亊。”IPV4のセッテイング” タブを選び、方式を手動にする(固定IPにしたいので)。次に “追加” をクリックし、アドレス、ネットマスク、ゲートウエイを設定、DNSサーバーにホストOSのIPを入れ、”適用”、”閉じる” とクリックし、設定を終わらせる。(IPアドレスは一部隠してあります)
タイムゾーンの設定で、システムクロックでUTCを使用のチェックを外して置く。
イ ンストールのタイプを選ぶ所は ”カスタムレイアウトを作成する” を選んで、その後各領域を設定していくが、この時領域を選んで “編集” をクリックし、マウントポイントやフォーマットタイプなどを設定する。最後の共有の設定をした領域(VDD)は何もしないでそのまま次へ。
その後、インストールが始まる。

カテゴリー: CentOS 6 | コメントする

4:ゲストOSを作る前にLVMで領域を作る

いよいよ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名 でアクティブにする。

カテゴリー: CentOS 6 | コメントする

3:ホストOSに簡易DNSサーバーを作る(dnsmasq)

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

カテゴリー: CentOS 6 | コメントする

2:他のプログラムのインストール

基本的にこれらの設定は http://centossrv.com の様に設定した。若干の補足のみを記入。
まずは tripwire のインストール。
今は、tripwire-2.4.2.2-src.tar.bz2 になっているので、読み替えて下さい。
私の場合は C コンパイラがなかったみたいで、インストールの所で
configure: error: no acceptable C compiler found in $PATH
と出たので
# yum install gcc
としたら
configure: error: C++ preprocessor “/lib/cpp” fails sanity check
とまたエラーが出た。C++はgccに含まれていない見たいなので
# yum -y install gcc-c++
とし、やっと出来た。

つぎは chkrootkit のインストール
RPMforgeにはchkrootkitは無かった。EPELリポジトリーも追加する。
EPELリポジトリ導入は(私は64bit環境)
# rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
でOK。
epel-release-6-8.noarch.rpmにバージョンが上がっている-2013-02-07追記
アンチウィルスソフト導入(Clam AntiVirus)は問題なく終わる。

iptablesの設定
このホストは特にサーバーを走らせないので、SSH以外は閉じておく。
iptables.sh を走らすとエラーが出た
iptables v1.4.7: invalid mask `’ specified
Try `iptables -h’ or ‘iptables –help’ for more information.
これはbr0を作ったのでeth0にはIPが割り当てられていないのが原因。
# インタフェース名定義の LAN=eth0 の下に
BR=br0
を追記。# 内部ネットワークのネットマスク取得の所を
LOCALNET_MASK=`ifconfig $BR|sed -e ‘s/^.*Mask:\([^ ]*\)$/\1/p’ -e d` ←$LANの代わりに $BR
# 内部ネットワークアドレス取得の所を
LOCALNET_ADDR=`netstat -rn|grep ” “$BR|grep $LOCALNET_MASK|cut -f1 -d’ ‘` ←$LANの代わりに ” “$BR、$BRだけだと virbr0 も該当する。
それとこのホストでは簡易DNSサーバーを走らすが、DNSサーバーはローカルネット以外に公開しないので53番は開けていない。(ローカルからのRQはすべてOKにしている)
これでOKになったが、終わるまでものすごく時間が掛かる。

NTPサーバー構築(ntpd)
ntpはインストールされていた。無ければyumでインストール
/etc/ntp.conf の設定(抜粋)

restrict 192.168.xx.0 mask 255.255.255.0 nomodify notrap ←コメントを外し、ローカルIPに合わせて設定
server 133.243.238.163
server 210.173.160.27
server 202.224.32.4

同期先サーバーの設定。IPになっているのはDNSを引かない分早いそうだ。ちなみに上からntp.nict.jp, ntp.jst.mfeed.ad.jp, ntp.asahi-net.or.jpで最後はプロバイダーのNTPサーバー。
手動で時刻を合わせる。
# ntpdate 133.243.238.163
28 Aug 11:46:47 ntpdate[5288]: adjust time server 133.243.238.163 offset -0.002803 sec
# service ntpd start
ntpd を起動中: [ OK ]
# chkconfig ntpd on
# chkconfig –list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

カテゴリー: CentOS 6 | コメントする