1. LinuxOS(CentOS 5.2)をインストールする。(sshはデフォルトで起動。ファイアウォール、セキュリティはとりあえず無効化する。)
2. vsftpdの設定。
3. sambaの設定。
4. perl-5.8.8の設定 (/usr/local/bin/perl)
5. J-Code, Crypt-CBC, Crypt-Blowfish 等のCPANモジュールのロード、実装。
6. gnomeのサービス設定を用いて、実行モード3/4/5でsamba,httpd,vsftpdを起動時実行に変更保存する。
7. Windows VISTA側から putty, ffftp, MS-Network等を利用して接続確認を行う。
8. GUIの「仮想化サーバーマネージャー」を利用してゲストOS(CentOS等)を必要数インストールする。
9. 手順8でインストールしたゲストOSそれぞれについて上述1-7の手順を繰り返す。
10. /etc/inittabを変更し、CUI起動に設定して再起動する。
#1 ローカルホストに適当なurl設定をおこなうために、ローカルdns設定を予め行うこと。
CentOS 5.2のインストールを行う場合、x86/64bit対応のCPUを搭載したサーバーが望ましい。さらに、仮想化に対応したIntel-VTあるいはAMD-V対応であった方がなおさら良い。Pentium3/4など古めの32bitCPUなサーバーはこの際であるから、ヤフオクなどで処分してしまうのが吉である。というのも、CentOS5.2は後述するように、xenを利用した仮想化サーバーの構築に対応しており、しかも実に簡単に実装できる。インストールの際のオプションで仮想化サーバーの項目にチェックを入れれば、インストール終了時のリブートでxenが即時的に動作するようになるからだ。この点で、dual-core以上の今的なCPU搭載サーバーなら何でも良い。
それと、xen仮想サーバーを立ち上げる前提で言えば、32bit版より断然64bit版を推奨したい。仮想化サーバーとして利用するなら4GB上限の32bit系CPU/OSでは役不足。また、複数のゲストOSを同時起動させるならば、メモリは大容量である方が望ましいし、昨今2GBのメモリーはとても安価である(2000円以下で買えたりする)。
インストールメディアはDVD1枚にまとまっていた方が何かと都合がよい。CD-ROMだと7枚組。ディストリビューションの配布サイトの多くはCD-ROMベースのイメージ配布がメインだが、理研サーバーのようにDVD1枚イメージを置いていてくれているサイトも少なからずある。ゲストOSを複数インストールする場合、DVD-Rなメディアで1枚にまとまっていた方が断然手間が省ける。
インストールはディストリビューションCD/DVDの自動起動によるGUIベースでも、"linux text"コマンドによるCUIインストールのいずれでも構わない。/etc/inittabを書き換えれば起動をCUI/GUIのいずれかに変更することはいつでもできるからだ。長年CUI利用のインストールや設定を繰り返してきたが、最近、Fedra5/8/9を使うようになって以降、LinuxでもGUIを使うことが普通になった。GUIの「サーバー設定」toolやネットワーク設定がお気軽簡単で便利であるというのがその理由。
最近は大容量HDDも安価なので、インストールはマイ・ルール的に「全部入り」がお約束。サーバー導入の目的が「サーバー構築術」の習得にあるなら話は別でそれはそれで楽しいものではある。だが、私のサーバー導入の目的は「運用利用」それ自体なので、unix/linux的な難しげな手動設定は限りなく省力化したいと考えている。だからインストールに際してはできるだけGUIとマウスだけで行い、最後にCUIに戻して24時間放置で運用するようにしている。
CentOS 5.2のOSそれ自体のインストールで生じる問題・トラブルはあまり無いが一点だけ。gcc/cc がデフォルトでインストールされなかったことには驚いた。Linuxは80年代末の初期ディストリビューションCDのYagadrasi(0.97)が最初で96年頃からslackware, WalnutCreekのCD-ROMセット, RedHat3,4,5,6,7,8,9と使い続けてきた。cコンパイラがインストールされなかったのは今回が初めてだ。ただし、インストール直後にRPMコマンドとかで所在確認すると未インストール。そこであえてGUIのパッケージ確認でチェックするとインストール済みと表示される。もしかすると、5.2のディストビューションパッケージの実装それ自体に問題があるだけなのかもしれない。これも後述するがgcc/ccはyumインストールで簡単にインストール可能である。
Linux起動時、x/gnome表示あるいは文字端末表示のいずれかは/etc/inittabの設定で選択可能。18行目。
d:5:initdefault: x/gnome表示モードで起動
d:3:initdefault: 文字端末モードで起動。サーバー利用時はこちらを推奨。
CUI画面からgnomeを起動する場合は、startx コマンドでGUIを起動できる。
vsftpdはインストール時点では自動起動されない。chkconfigコマンド等で自動起動設定する必要がある。ただしデフォルトの設定だとanonymous設定で起動されるのでcgi等の転送には不向き。
/etc/vsftpd/vsftpd.conf の11行目、のYES設定をNOに変更するだけでユーザ認証に切り替わる。
anonymous_enable =YES → NO
demon類の起動設定を行う場合はGUIであるgnomeのサーバー設定メニューにある「サービス設定」が超便利。クリックだけで任意のdemonを起動、停止、再起動したり、Boot時のランレベル3(CUI)、ランレベル5(x/gnome)などの自動的起動の設定が行える。
GUIなgnomeは何も操作していなくても結構マシンに負荷がかかる。純然なサーバー利用の場合はCUI起動が望ましい。gnome起動はすなわちランレベルが5なので、サーバー利用時をCUI起動としてvsftpd等を自動起動するのであればこの「サービス設定」でrun-level3のチェックマークにチェックを入れて設定保存すること。
CUIあるいは文字端末からコマンドでデーモンを起動・停止・再起動する場合は以下の様に打ち入れる。
/etc/rc.d/init.d/httpd restart httpdをリスタート /etc/rc.d/init.d/vsftpd start vsftpdをスタート /etc/rc.d/init.d/smb stop sambaを停止
ls /etc/rc.d/init.d でディレクトリ確認すれば、起動・停止・再起動可能なインストール済みのdemonが一覧できる。
CentOS5.2等、最近のディストビューションはGUI設定がそこそこ使い易く改良改善されている。WEBベースの901なswatも不要かもしれない。ただし、sambaユーザの追加、パスワード設定などにはsambaそれ自体がversion3に更新され、パスワードファイルの構成に変更があり、GUIツールが未対応であるため、結果バグに似た挙動があってうまく設定できない。以下にユーザ認証ベースの設定手順をメモ書きしておく。
まず最初にすべきは、smbpasswdの生成。smbpasswdファイルはデフォルトでは存在していないのであらかじめユーザが自己責任で生成する必要がある。 以下が/etc/passwdをコピペして使う例。ただしnobodyとかも全部smbpasswdに含めるのは難ありかも。
cat /etc/passwd | sh mksmbpasswd.sh > /etc/samba/smbpasswd
CentOS5.2のGUI/gnomeに組み込まれている「Sambaサーバー設定」toolはversionが1.2.39。2005年版なのでsamba version3 には適応していないのであろう。sambaのシステム構成についてはうまく設定できるようであるが、ユーザ登録機能ではユーザマップ(smbpasswdファイルそれ自体)の削除操作だけで、/etc/samba/passdb.tcbやsecrets.tdbの操作では追加も削除も失敗するようである。それ故、sambaのユーザ追加・削除・変更などは以下のpdbeditコマンドで行うのがよい。pdbeditはsamba version3対応のパスワードファイルの生成・変換も同時に行う。ただしユーザ名一覧としてのsmbpasswdのユーザを全てパスワードファイルに登録変換するわけではない。よって、次にすべきは、sambaユーザの追加設定。以下のコマンドで行う。コマンドを打ち入れるとパスワードを聞いてくるので、Windows機で使用しているパスワードを入力する。
pdbedit -a ユーザ名
sambaユーザの設定を終えたら、X/Gnomeのsambaサーバー設定ツールを起動する。root権限が必須。このツールでは、最初にワークグループを指定する。次に、セキュリティ。セキュリティは指定ユーザ限定とする。書き込み許可のチェックマークを入れておくこと(ただしこの設定も挙動観察でいえばどうも無意味に近い)。次にsamba公開するサーバーのディレクトリの切り出し位置を指定する。指定後にタブ切り替えで、そのディレクトリパスのアクセスを許可するユーザを指定する。一覧は上記smbpasswdファイルに登録されていなければ指定できない。Windowsのネットワーク設定などから見られるsambaサーバーの論理名は、Linux機のIP/DNS等を設定するnetwork設定で指定されたドメイン名 "xxx.hoge.com"の最左端なサブドメイン名"xxx"が使用される。ここまで設定した後、x/gnomeのサービス設定を開いて、3-4-5レベル全開でチェックマークを入れ、smbを再起動させる。nmbの指定は不要。設定保存すれば次回リブート時から自動起動するようになる。
CentOS5.2など、設定によってはgcc/ccがインストールできない。その場合のyum/RPMは以下のコマンドで。
# yum install gcc* compat-gcc* compat-glibc* compat-lib*
/usr/bin/perlで直接実行、エラー無しにも関わらず、cgiモジュールがapacheでサーバーエラーが生じる場合は、cgiファイルの改行コードがLFだけであるかどうかを確認すること。ftp転送中とかでsjis変換されていると改行コードがCR/LFとなる場合があり、この場合だとエラーが生じる。ソースコードはUTF-8記述が望ましい。
CentOS5.2にインストールされているJavaはGNUのJavaだが、Sun MicrosystemsのJavaの方が標準度もあり一般的。共存切り替えで利用することもできるが、ここではGNU版を削除し、Sun版と取り替えてしまうやりかた記しておく。
JavaSEはここからダウンロードする。
#sh ./jre-6u11-linux-i586-rpm.bin ;Javaのバイナリファイルのインストール
#yum -y remove java-1.4.2-gcj-compat ;GNU Javaの削除
以下の三行を /etc/profile に追加
export JAVA_HOME=/usr/java/latest
export PATH=:/bin
export CLASSPATH=.:/jre/lib:/lib:/lib/tools.jar
#source /etc/profile ;上記環境変数の変更を即時反映。
#env ;環境変数の確認
JavaSE/servletをブラウザで表示させるためのtoolであるtomcat(6.0.18)をはApache Tomcat 6のページからダウンロードする。
poundをロードバランサとして使用するとログ記録のためのリモートホストのIP情報が全てpoundサーバーのIPで記録されてしまう。ログ取得をperl記述で次のように行っているなら($ip_addr = $ENV{'REMOTE_ADDR'};)、この記述を($ip_addr = $ENV{'HTTP_X_FORWARDED_FOR'};)と書き換えればよい。ただし、httpd側でIPからリモートホストのドメイン名をリゾルブ解決( $host_name = $ENV{'REMOTE_USER'};)して拾ってくるように設定されていても効き目はないので要注意。
CentOS5.2の良い点は、仮想化ツールのxenが組み込み済みであること。特にIntelならVT, AMDならAMD Virtualization(AMD-V)対応のCPUを利用すればxenの完全仮想化機能を利用することができる。この点でAthron64なサーバーはOK。Celeron420/430/440なサーバーでは完全仮想化機能は利用できない。要注意。
完全仮想化の用途はケースバイケースだが、poundを利用したクラスタリング・システムのワークベンチの構築などにxenは最適。この場合、domain0サーバーではpoundを走らせ、appacheは停止。ゲストOSとして複数のCentOS5.2を組み込み、それぞれをゲスト・httpdサーバーとして構成する。こうした場合、少なくとも3~5台程度のゲストOSの組み込みが必要となる。従来ならその台数だけサーバー実機を用意しなければならなかった。電気代もバカにならない。しかし仮想化サーバーなら電気代は1台分で全てまかなえる。
仮想化を行う場合、CentOS5.2の64bit版を使用しメモリは8GBフル実装が望ましい。最近は2GBのDDR2メモリーもとても安価(2000円以下で買える)なのでメモリーは可能な限り増設すべきだと思う。xen/LinuxはSwapに弱い。メモリーが不足してスワップが走るような状態になると、xenは暴走して突然リセットという事態になる場合がまだある(特にインストール時のファイルを利用したドライブの新規作成時)。
xenで仮想化ゲスト・サーバーを組み込む場合、簡単なのは10GB~40GB程度のサイズ指定のファイルベースのゲストOS設定。パーティションを別切りで設定する場合、ファイルシステムは特定ディレクトリを占有するような論理的な構成では組み込めない。あくまで物理パーティションが要求される。CentOS5.2の場合、そうした物理パーティションは1台のHDDでは2つまでしか設定できないようなので、ゲストOSを複数用意する場合はdomain0の管理下にあるファイルベースの組み込みが安易ではあるが現実的。ただしファイルベースで構築するとファイルを管理しているdomain0の負荷が大きくなる。オーバーヘッドも大きくAthron3500+な単独サーバー利用時と比較して1.5倍程度処理が遅くなる。マルチコアなCPUを利用すればこのdomain0の負荷は軽減されるかもしれない。仮想化利用はマルチコアなCPUを利用すべきだが、ワークベンチ利用ならシングルコアなCPUでも十分実用的。特にトラブルなく安定して使えている。
実際にdomain0からゲストOSを全てCentOS5.2(64bit版)で構成してみた。ゲストOSは合計で6セット。CPUはHP ML115G1/8GB/500GBHDD/。シングルコアなので負荷が重くなるとCPU使用率が100%推移することが多々ある。特にインストール直後やアップデート直後にLinuxはバックグラウンドでmanファイルやライブラリファイルの集約toolが起動して長時間高負荷状態になる。この高負荷状態は一時的・過渡的だから安定稼働状態なればそうそう高負荷にはならない。個人利用ならロードは0.0推移が普通。
ゲストOSのインストールや稼働管理を行うために利用するツールはx/gnomeの「仮想化サーバーマネージャー」。簡易だが実に便利なツールだ。ゲストOSをファイルベースで組み込むなら何の設定もなしに速攻で組み込んで行ける。簡易であるが難点はある。例えばスナップショット起動ができないこと。それとゲストOSの起動は手動で行わなければならないこと。24時間運用ならdomain0を再起動する必要はそれほど無いから問題も少ないが面倒ではある。このGUIツールを使う限りcronリブートなどの設定はできない。またGUI/gnomeを走らせたままだとCPUの負荷が常時かかる。load換算で0.2程度だが、サーバー利用中は無駄な負荷でもある。本体の起動はレベル3なCUI起動にすべきである。設定時のみstartxコマンドでGUI/gnomeを起動し、サーバー利用時はログアウトしCUIに戻して放置しておくのが良い。GUIからCUIに戻してもxen/ゲストOSは動いたままだから心配はない。もちろんxenそれ自体の設定で起動時にゲストOSの自動起動させることは可能。現時点ではワークベンチ的に使用しているので選択的な起動ができる余地があったほうが良いと考えてあえて自動起動するような設定はしていない。
これまでdomain0/ゲストOS(CentOS5.2)×6の合計7サーバーを仮想化状態で半年近く安定稼働させていたが、仮想コンソールの表示が遅いので現在はVirtualBoxに切り替えている。
CentOS 5.2は、インストール直後の状態でDNSは起動していない。/etc/rc.d/init.d/named startとコマンドすればとりあえずクライアント用のDNSサーバーとして利用可能になるはず。ただしこの場合、ネット設定でゲートウェイ設定を行い、インターネット接続が可能な状態でなければならない。
BIND9は巨大なブログラムなので全てを使い切るのも説明するのも難しい。そういうことは他にお願いするとして、ここでは、あくまで個人の私的な利用に限ったローカルドメインのDNSのメモ書きに留める。
ローカル・ドメインの設定とは、192.168.0.0~192.168.255.255までのローカルネットIPに接続された機器にドメイン名を割り振って利用する場合の設定。たとえば、pilots.eva などというドメインを自分自身で勝手に設定し、以下の様にドメイン名を割り振ることができる。
dns.pilots.eva 192.168.1.10 www.pilots.eva 192.168.1.10 rei.pilots.eva 192.168.1.11 asuka.pilots.eva 192.168.1.12 sinji.pilots.eva 192.168.1.13
上記のような身勝手ドメインといえども、きちんと設定すれば、自宅サーバーもイントラネットサーバーとしてドメイン名を用いて自在にアクセスできる。ただしあくまでイントラネット利用に限るが、ローカルサーバー上のリンクページをクリックして他のリアル・サーバーにアクセスした際、先方のアクセスログのリファラ記録には身勝手なローカルサーバー名が記録として残るようである。
CentOSのBIND9の設定は手動設定が望ましい。というのも、CentOSの設定ではセキュリティ強化の観点からchroot機能を用いられていて、named.conf等の設定ファイルが/etc/から/var/named/chroot/etc/ 他に蜃気楼的に移動しているからである。
/var/named/chroot/以下はサーバーのルートディレクトリの配置イメージであるが、root権限者でなければ見ることが許されない。そうしたセキュリティがかけられている。よってBIND9/DNSの設定を行う場合は、/var/named/chroot/etc/named.conf が設定ファイルとなる。
/var/named/chroot/etc/named.confの例
=====================================================
//
// BIND 9 簡易設定
//
// ローカルホストのリゾルバ。
// キーボード操作によりホスト自身が参照する場合のDNSの定義設定
view "localhost_resolver"
{
match-clients { localhost; };
match-destinations { localhost; };
recursion yes; // インターネット内の様々なドメイン名参照を許可するという意味
// RFC1912で定義される localhost, localdomainの定義ファイル。BIND9のパッケージに含まれているもの。
include "/etc/named.def";
// all views must contain the root hints zone:
// rootservers.defはroot name サーバーのIPアドレスを記録したファイル。
zone "." IN {type hint; file "/etc/rootservers.def"; };
zone "pilots.eva" {
type master;
file "/etc/pilots.eva.db";
};
// ローカルドメインといえど、きちんと逆引き定義はするのが吉。
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/1.168.192.in-addr.arpa.zone.db";
};
};
// イントラネット接続クライアント向けのリゾルバ定義。
// 以下はイントラネット内のクライアントPC(Windows/Mac等)がDNS参照する場合に応答する部分の記述。
view "internal_resolver"
{
match-clients { localnets; };
match-destinations { localnets; };
recursion yes; // インターネット内の様々なドメイン名参照を許可するという意味
// all views must contain the root hints zone:
// rootservers.defはroot name サーバーのIPアドレスを記録したファイル。
zone "." IN {type hint; file "/etc/rootservers.def"; };
// 以下にローカルドメインを定義するファイルの所在を記述する
zone "pilots.eva" {
type master;
file "/etc/pilots.eva.db";
};
// ローカルドメインといえど、きちんと逆引き定義はするのが吉。
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/1.168.192.in-addr.arpa.zone.db";
};
};
//以下はローカル利用の場合は不要。
//公開サーバーを設置する場合のドメイン定義ファイルの所在は以下に記述する。
view "external_resolver"
{
match-clients { !localnets; !localhost; };
match-destinations { !localnets; !localhost; };
recursion no; // BIND9の公開サーバーはnoがお約束。DDoS攻撃の踏み台化の防止がその理由。
zone "." IN {type hint; file "/etc/rootservers.def"; };
};
正引きファイル:/var/named/chroot/etc/pilots.eva.db の例
=====================================================
$TTL 1H @ SOA ns1.pilots.eva. root.pilots.eva. ( 24
3H
1H
1W
1H )IN NS @ @ IN A 192.168.1.10 dns IN A 192.168.1.10 www IN A 192.168.1.10 rei IN A 192.168.1.11 asuka IN A 192.168.1.12 sinji IN A 192.168.1.13
逆引きファイル:/var/named/chroot/etc/1.168.192.in-addr.arpa.zone.db の例
=====================================================
$TTL 86400 @ IN SOA ns1.pilots.eva. root.localhost ( 1 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttk
)
IN NS ns1.pilots.eva. 2 IN PTR mac.pilots.eva. 3 IN PTR xp.pilots.eva. 5 IN PTR vista.pilots.eva. 10 IN PTR www.pilots.eva. 11 IN PTR rei.pilots.eva. 12 IN PTR asuka.pilots.eva. 13 IN PTR sinji.pilots.eva.
dns | IN | A | 192.168.1.10 |
www | IN | A | 192.168.1.10 |
ikari | IN | A | 192.168.1.11 |
gendou.ikari | IN | A | 192.168.1.11 |
yui.ikari | IN | A | 192.168.1.11 |
shinji.ikari | IN | A | 192.168.1.11 |