2:OS(CentOS Ver6.5)のインストール

追記:CentOS 6.7では問題なくインストール出来た。

組み立てが終了し、さっそくOSをインストールしようとCentOSの6.5をUSBでアッタッチしたBD- Driveからやったが、言語設定の後にドライバーの選択を求められるが、どのハードのドライバーをインストールするのか特定できない。今時SSDや HDDのドライバーではないと思うし、ビデオドライバーかなー、それともLAN関連?結局わからないのであきらめる。手元にCentOS6.4のLIVE DVDがあったので、ダメもとでやってみるとOSが立ち上がったぞ!!
記:このDVDは英語版だった。後のサブホストのインストールでも日本語が問題になったので、英語だからインストールが出来たみたい。
ではとディスクトップからinstall to Hard Driveをダブルクリックし、インストールを開始、無事インストールが終了し、BD-Driveを外し、再起動後、OSの初期設定を終わらせ、さらに再起動。
ログインでその他のユーザをクリックし、rootでログインをする。
いくつか問題、
1:IP がDHCPになっている。ホストは固定で運用したいので変更する。/etc/sysconfig/network-scripts/ifcfg-eth0 がないぞー! NetworkManagerが走っているのでその関係?でもifconfigをするとIPアドレスが表示されているので、どこかに設定が あるのだろー、だが何処にあるかは不明
2:言語がEnglishになっている?インストール時にJapaneseを指定(これはキーボードの設定だった。この時は言語の設定と勘違い)したが反映されていない。この時は英語判だったのに気がつかなかった。
3:ログイン画面に登録されているユーザーのリストが表示されている。私は好きでないし、セキュリティー上問題もあるので、ログイン時にユーザー名から入力するようにしたい。
まずは日本語化にする。関連パッケージのインストール
# yum groupinstall “Japanese Support”
次に /etc/sysconfig/i18nのLANGを

LANG="ja_JP.UTF-8"

に訂正し、保存後
# source /etc/sysconfig/i18n
次にログイン時のユーザーリストを表示しないようにするには、/etc/gconf/gconf.xml.defaults/%gconf-tree.xmlの22678行目くらいに下記があるので

<entry name="disable_user_list" mtime="1366723318" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm">
	<local_schema locale="C" short_desc="Do not show known users in the login window">
 		<default type="bool" value="false"/> ←ここを True に変更
 		<longdesc>Set to true to disable showing known users in the login window.</longdesc>
        /local_schema>
</entry>

上に示したようにfalseをtureに変更し保存。
その後、再起動すると日本語になっているが、downloadやDesktopなどを日本語にするか聞いてくるので、好みで。変更前は入力が日本語にならなかったが、変更後は入力できるようになる。
もし、日本語のキーボード・マップになっていない場合は /lib/kbd/keymaps/i386/qwerty/jp106.map.gz があることを確認し、/etc/sysconfig/keyboard を

KEYTABLE="jp106"
KEYBOARDTYPE="pc"

として保存後、再起動すれば日本語になる。保存前は MODEL=”pc105+inet” LAYOUT=”us” の二つがあったが、なくてもいいみたいです。
次にIPアドレスをを固定にするので、/etc/sysconfig/network-scripts/ifcfg-eth0 に下記を設定

DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.xx.xx
PREFIX=24
GATEWAY=192.168.xx.xx
NAME="System eth0"

IPアドレスはすぐにブリッジを作るのでいらなくなるが、その前に固定IPでネットワークのテストをしたいので設定しておく。
DHCPでなくなるので、DNSの設定をする。/etc/resolv.conf に

search kinryokai.net
nameserver 192.168.xx.xx
nameserver 8.8.8.8
nameserver 202.224.32.2

3行目はgoogleのDNS、4行目はISPのDNSです。
インストール時にホスト名を設定したが、反映していないので、/etc/sysconfig/networkのホスト名を

HOSTNAME=xxx.kinryokai.net

に変更し、NetworkManagerを止める(後で仮想化をインストールし、ブリッジを作りますが、NetworkManagerはブリッジをサポートしていないそうな。なのでここで止めるのが正解)
# service NetworkManager stop
# chkconfig NetworkManager off
NetworkManagerを止めないと、resolve.confが書き換えられてしまうので注意。
そ して、ネットワークドライバーを変更する。現在のドライバーはマザーボードのLANチップであるRealtekのRTL8111GR用のr8169が自動 的にインストールされているが、r8169は何かと問題が多い。その前にソースからインストール出来るように環境を作る。
注: ここで順番が大事、順番を間違えるとドライバーがダウンロードできなくなる。全てをダウンロード後、再起動してから、LANドライバーをインストールする 事。これは”Base” “Development tools”のインストールによりカーネルもアップデートされるが、再起動しないと有効になっていない為、順番を間違えるとネットワークが使えなくなる。
# yum -y groupinstall “Base” “Development tools”
でインストール。
ついでに日本語環境で有用なnkfをインストールしておく。
# yum -y install nkf
ドライバーはrealtekのRealtekのWEBからUnix (Linux)用の LINUX driver for kernel 3.x and 2.6.x and 2.4.x をダウンロードし、その保存した場所をカレントディレクトリーにし(CDをする)現在はrealtekのWEBにGBE Ethernet LINUX driver r8169 for kernel up to 5.6 がダウンロードできる見たいだが、テストをしていないので何とも言えない
# tar vjxf r8168-8.038.00.tar.bz2
# cd r8168-8.038.00
# ./autoru.sh
とすると、r8169を削除し、r8168を入れてくれる。この時

make: *** /lib/modules/2.6.32-358.el6.x86_64/build: そのようなファイルやディレクトリはありません.  中止.

と出る時は再起動し、再度行う。
追 記:ある時再起動後、キーボードとマウスが動かないので、ログインすら出来ない。”Development tools” を入れたらカーネルのアップデートもあり、それでかなー。古いカーネルでは入力が出来る。色々調べたら、USBキーボードの取り付けをUSB3(青い USB)にするとOKになった。
そして再起動。あれネットに繋がらない。入り色調べたらネットワークが走っていないみたい。なので
# service network start
# chkconfig network on
でやっと正常に繋がった。

その後、OSがupdateされる度にr8169に戻るので、update後は必ず ./autoru.sh 必要になる

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

1:ハードを決める

CPU:仮想化でホストを3つくらい作るので最低でも4コアがほしい。TDPはなるべく少ないもの。という訳でCPUはAMDのATHLON 5350にしました。これは4コア、2GHz、TDP:25Wです。
マザーボード:前回は19インチラックを考慮し制作したが、今回はなるべく小さく作りたいので、ITX規格のマザーボードにする。使用したのはASRockのAM1H-ITXにした。最大の理由は19V単一電源で動作すること。
RAM:マザーが決まったのでDDR3にしかできない。手持ちの4GBを2つで8GBにした。
SSD:KVMホスト、仮想化で作る各サブホストなどと、WEBコンテンツ用領域(これはアクセス速度がHDDより早くなるので)などと考えると200GB以上必要そう。やっぱりサムソンが安いので250GBを使用。
HDD: 各ホストのスワップ領域(頻繁に書き込みがありSSDは使用したくないので)、ファイルサーバー用の領域(これはSSDを使った方が早くなるが、かなり大 きなサイズなのでSSDだとまだ高い)、各ホストのバックアップ用の領域などを考え、2.5インチ、7200rpmの1TBのHDDにした。

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

17:mysqlのインストール

mysqlサーバーをインストールします。
# yum -y install mysql-server
mysqlの設定をしますが ( /etc/my.cnf )、私の場合はWEBサーバーのデーターをmysqlにしまってありますが、その移行をスムーズにする為に、デフォルトとは違うdatadirを指定します

[mysqld]
 	datadir=/webdata/mysql ← 右辺を変更
 	socket=/var/lib/mysql/mysql.sock
 	user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
 	symbolic-links=0

[mysqld_safe]
 	log-error=/var/log/mysqld.log
 	pid-file=/var/run/mysqld/mysqld.pid

サーバーを起動し、再起動後も有効に
# service mysqld start
# chkconfig mysqld on
私の場合はmysqlのデーターを、現在アクティブなWEBからコピーしたので、パスワードの設定等は既に入っていますが、デフォルトではその設定が必要です。
https://centossrv.com/mariadb.shtmlを参考に進めて下さい。ここはmysql では無くmariadbですが、ほぼ同じです。
あと、XOOPSで必要になるphp-mysqlもインストールする。
# yum install php-mysql

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

16:NFSを設定する。

nfs-utilsは最初からインストールされていたので、/etc/idmapd.conf を設定する。

Domain = kinryokai.net ←コメントを外し、自分のドメインにする。

/etc/exports は

/Download/NfsDir 192.168.xxx.0/24(rw,no_root_squash,no_all_squash) 

この意味は、このサブホストの /Download/NfsDir を他のホストから見えるように、アクセスできるホストは192.168.xxx. つまりlocal network からだけ、RWモードで、rootを許可し、そのままの権限でアクセスさせる。
# service rpcbind start
rpcbind を起動中: [ OK ]
# service nfslock start
NFS statd を起動中: [ OK ]
# service nfs start
NFS サービスを起動中: [ OK ]
NFS クォータを起動中: [ OK ]
NFS mountd を起動中: [ OK ]
NFS デーモンを起動中: [ OK ]
とそれぞれのサービスをスタートさせる。
上記はCentos6の時、Centos5は service rpcbind start がservice portmap start になる。
私は今だけ使うので、再起動後に有効にする必要は無いので chkconfig には設定を加えなかった。
ここからはNFSクライアント側の設定
nfs-utils はインストール済みだったので、/etc/idmapd.conf を設定する。

Domain = kinryokai.net ←コメントを外し、自分のドメインにする。

クライアント側で必要なサービスを走らせる。
下記はCentos5の時、Centos6では portmap の代わりに rpcbind と rpcidmapd をstartする。
# service portmap start
portmap を起動中: [ OK ]
# service nfslock start
NFS statd を起動中: [ OK ]
# service netfs start
その他のファイルシステムをマウント中: [ OK ]
# mount -t nfs -o rw web.kinryokai.net:/Download/NfsDir /test1
mount: mount to NFS server ‘web.kinryokai.net’ failed: System Error: Connection refused.
とエラーが出た。そう言えば web.kinryokai.net を簡易DNSであるdnsmasqが走っているホストの /etc/hosts に設定をしていなかったので、設定後、dnsmasq を再起動するとマウント出来た。

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

15:Apacheアクセスログ解析(AWStats)とリファラースパム防止の設定

http://www.starplatinum.jp/awstats/awstats70/を参考にしました。このページの “AWStats Ver.7.0完全日本語版のダウンロード” からダウンロードし、解凍をしておきます。(/Download/awstats/AWStats70_Jpn に解凍)
私はvirtualhostで数個のWEBを動かすつもりなのでプログラム(.pl)は共通に出来るが、設定ファイルは独立していなければならない。と言う事で
data DIRは /webdata/awstats/URLごとのDIR/ に置く
プログラム(cgi-bin.pl)は /webdata/cgi/awstatsに置く。設定ファイルは /etc/awstats/awstats.www.kinryokai.net.conf とする
cgi-bin関係のファイルをコピーしrenameする。
# cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/cgi-bin/ /webdata/cgi/
# mv /webdata/cgi/cgi-bin/ /webdata/cgi/awstats
icon関連をコピーしますが、私はデフォルト(/var/www/icons)では無く /webdata/icons にしていますので
# cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/icon/ /webdata/icons/
後で、必要になるファイルを/usr/share/perl5にコピー
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_updateall.pl /usr/share/perl5/
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_buildstaticpages.pl /usr/share/perl5/
awstatsを動かすにはCustomlog をcombined にしなくてはならないが、前の /etc/httpd/conf.d/virtualhost.confの設定で
CustomLog logs/kinryokai_access_log combined env=!no_log にしているので問題ない。
/etc/awstats/awstats.www.kinryokai.net.conf の設定をしますがサンプルがありますのでそれを変更します。
# mkdir /etc/awstats
# mv /webdata/cgi/awstats/awstats.model_jp.conf /etc/awstats/awstats.www.kinryokai.net.conf
同じ場所にある awstats.model.confは使いませんので削除しておきます。
# gedit /etc/awstats/awstats.www.kinryokai.net.conf

LogFile="/var/log/httpd/kinryokai_access_log"
SiteDomain="www.kinryokai.net"
HostAliases="localhost 127.0.0.1 REGEX[kinryokai\.net$]"
DirData="/webdata/awstats/URLごとのDIR"
DirCgi="/awstats"
DirIcons="/icon"

上記は変更した部分のみ書き出してあります。
次に jcode.pm をインストールしますが、
http://blog.96q.org/2008/04/21/jcodepm-install/ (2020年11月現在、応答が遅くエラーになる)を参考にインストールしますが、
# perl -MCPAN -e shell したら、エラーが出た。そういえば cpan2rpm をインストールしていなかった。
色々googleで調べるとJcodeは yum でインストール出きることが分かったので、上のエラーは別の機会にやるとして、肝心のjcode.pmをインストールする
# yum -y install perl-Jcode
で、/usr/share/perl5/Jcode.pm にインストールされた。
と、ここで困ったことになった。と言うのは私はプログラムはvirtualhost全部で同じプログラム(perl)を使おうとしているが、上記WEBによると、utf8_decode.plの中にホスト名前を設定する所がある。そうするとプログラムが共通にならない。
utf8_decode.pl をハックして、ホスト分のチェックをするようにしてもいいが(実は私はperlをあまり理解していないので大変そう)、この数年のWEBのログを見てみる と(完全に見た訳ではないが)全角で記録されている部分が見あたらなった。このutf8_decode.plと言うものは(多分)ログに全角がある時に使 うと思うので、私はこの変換をしないことにした。
と言う事はawstatsだけならcpan2rpmとJcode.pmはインストールしなくても よかったが、わざわざ消すこともないのでそのままにする。/etc/awstats/にあるconfファイルはvirtualhost分用意をするので、 プログラムは共通化出来る。
なので、http://www.starplatinum.jp/awstats/awstats70/ の3、4、5はやらない。
今はテストでapacheを動かしているので、ログは無いに等しいので、現在アクティブなWEBからログをコピーする。
ここはNFSでお互い参照出来る様にする。(NFSの設定はここのCentOS 6.3に挑戦 : 16:NFSを設定する。を参照)
ロ グはNFSの設定で /Download/NfsDir にコピーしたので、これを本来の場所である /var/log/httpd に移し、(この時、ついでにアクティブなWEBのawstatsのデーターも(*.www.kinryokai.net.*)も/webdata /awstats/URLごとのDIRに移して置いた)
AWStatsデータベース初期作成スクリプトを作ります。/root/awstatsinit.sh として下記を記入します。

#!/bin/sh
logfile=`grep ^LogFile /etc/awstats/awstats.$1.conf|sed -e 's/LogFile="\([^ ]*\)"/\1/p' -e d`
			# ↑ ログのパスを抽出
for log in `ls $logfile*|sort -r`
do
    /webdata/cgi/awstats/awstats.pl -config=$1 -update -logfile=$log
done

/webdata/cgi/awstats/awstats.pl は私の場合、各自の環境に合わせて下さい。
# sh awstatsinit.sh www.kinryokai.net
で更新処理をしますが、ログの量によっては時間がかかります。終わると
Create/Update database for config “/etc/awstats/awstats.www.kinryokai.net.conf” by AWStats version 7.0 (build 1.971)
From data in log file “/var/log/httpd/kinryokai_access_log”…
Phase 1 : First bypass old records, searching new record…
Direct access to last remembered record is out of file.
So searching it from beginning of log file…
Jumped lines in file: 0
Parsed lines in file: 20371
Found 0 dropped records,
Found 0 comments,
Found 0 blank records,
Found 1 corrupted records,
Found 20370 old records,
Found 0 new qualified records.
と表示された。(最後のみ取り出し、この繰り返しがlogの個数分続く)
/etc/httpd/conf.d/awstats.confに

Alias /icon/ /webdata/icons/
ScriptAlias /awstats/ /webdata/cgi/awstats/
<Directory /webdata/cgi/awstats/>
	DirectoryIndex awstats.pl
	Options ExecCGI
	order deny,allow
	deny from all
	allow from all
	#allow from 192.168
</Directory>

と記入し、httpd を再起動して設定ファイルを読み込ませる。この設定はすべてのホストから見れてしまう設定になっています。
テ ストをしたいが、www.kinryokai.net としてもアクティブなWEBを参照し、このテストのWEBには来ないので、dnsmasq がこのサブホストの親で走っているので、それを一時的に変更する。親ホストに移って /etc/hosts の “192.168.xxx.xxx www.kinryokai.net www” のIPをこのテスト用のサブホストのIPに変更し、dnsmasq を再起動してから、ブラウザで www.kinryokai.net/awstats/awstats.pl にアクセスすると表示される筈.
ここからはまだ確認が終わっておりませんので、間違えがあるかも
httdのログの内容をawstatsに反映させてからロテイトするように、/etc/logrotate.d/httpd を

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    prerotate ←ここから
        `/usr/share/perl5/awstats_updateall\.pl` now -confdir="/etc/awstats" \
        -awstatsprog="/webdata/cgi/awstats/awstats\.pl >/dev/null
    endscript ←ここまで追記
    #delaycompress ←圧縮はしないのでコメントアウト
     postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

1時間毎にawstatsを更新する為に /etc/cron.hourly/awstats を作成

/usr/share/perl5/awstats_updateall.pl now -confdir="/etc" \
awstatsprog="/webdata/cgi/awstats/awstats.pl" >/dev/null

perlプログラムへのパスは各自の環境に合わせて下さい。
静的なHTMLのデータの作成
まずは/etc/httpd/conf.d/virtualhost.conf の </VirtualHost>の前に下記を追加します。

Alias /awreport /webdata/awreport/kinryo
<Directory /webdata/cgi/awstats/>
    DirectoryIndex awstats.pl
    Options ExecCGI
    order deny,allow
    deny from all
    allow from all
#allow from 192.168
</Directory>

1日1回データーを作ります。そのスクリプトは(注:2013/2/21訂正)

#!/bin/sh

site=$1
DirReport=$2

reportbuild() {
    # AWStatsデータベース更新中断時ロックファイル残存対処(ここから)
    if [ -f /tmp/awstats.$site.lock ]; then
        ps -p `cat /tmp/awstats.$site.lock |awk '{print $6}'`
        if [ $? -ne 0 ]; then
            echo /tmp/awstats.$site.lock removed >&2
            rm -f /tmp/awstats.$site.lock 
        fi
    fi
    # AWStatsデータベース更新中断時ロックファイル残存対処(ここまで)
    /usr/share/perl5/awstats_buildstaticpages.pl \
    -awstatsprog=/webdata/cgi/awstats/awstats.pl\
    -config=$site -update -lang=jp -dir=$DirReport \
    -year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
    # 個別ページリンク切れ対処(ここから)
    sed -i "s/href=\"${site}/href=\"awstats.${site}/g" \
    $DirReport/$YEAR$MONTH.html
    # 個別ページリンク切れ対処(ここまで)
    if [ "$YEAR$MONTH" = $(date +%Y%m) ]; then
        mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/index.html
    else
         mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/$YEAR$MONTH.html
    fi
}

ls $DirReport/* > /dev/null 2>&1
if [ $? -eq 0 ]; then
    YEAR=`date --date '1 days ago' +%Y`
    MONTH=`date --date '1 days ago' +%m`
    for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4`
					# ↑ 全virtual host名を抽出する
    do
         DirReport=/webdata/awreport/`echo $site|cut -d . -f 2`
         reportbuild
    done
else
    DirAwstats=`grep ^DirData /etc/awstats/awstats.$site.conf|awk -F= '{print $2}'|tr -d \"`
    				# ↑ awstatsのデーターがあるdirectoryを抽出
    for log in `ls $DirAwstats/awstats*.$site.txt`
    do
        YEAR=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats..\([^ ]*\)/\1/p' -e d`
        MONTH=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats\([^ ]*\)..../\1/p' -e d`
        reportbuild
    done
fi

私の環境はvrtualhostが5個も走っているので、色々参考に考えましたが、まだ検証していないので、このスクリプトはまったく自信がありません。多分数ヶ所間違えていると思います。検証をしたら、この一文を取ります。
これをawstatsreport.shとして/rootにしまい、パーミッションを変更し、毎日零時にHTML作成スクリプトを走らせます。
# chmod 700 awstatsreport.sh
# echo “00 00 * * * root /root/awstatsreport.sh > /dev/null” > /etc/cron.d/awstatsreport
その後、http://centossrv.com/referer_spam.shtmlを参考にリファラースパムの防止設定をして置きます。
但し、私はvirtual hostで数個のwebがありますので、スクリプトを変更してあります。
refererlogdel.shの最後は restart ではなく graceful にしました。
awstatslogchk.sh は

#!/bin/bash
 if [ $# -eq 0 ]; then
     for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4|cut -d . -f 2`
 					# ↑ 全virtual host名を抽出する
     do
          log=/webdata/awstats/`echo $site`/awstats*.txt
     done
 else
     # 引数に月年(例:032013)を与えた時
     log=/webdata/awstats/`echo $site`/awstats${1}*.txt
 fi
 for host in `cat /etc/httpd/conf.d/referer_spam.conf|awk '{print $3}'|sed -e 's/^(.*)\([^ ]*\)/\1/p' -e d`
               # ↑ referer_spamのリストを抽出
 do
     grep "$host" $log > /dev/null
     if [ $? -eq 0 ]; then
         echo "$host delete"
         sed -i "/$host/d" $log
     fi
 done

また、awstatsreport.sh を走らす時は
# /root/awstatsreport.sh www.kinryokai.net /webdata/awreport

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

14:Webページパスワード制限と通信内容圧縮(mod_deflate)

前にも書いたが 私は自宅に固定IPでサーバーがありroot権限を使えるので、.htaccess は使わない。又、今時のブラウザはダイジェスト認証に対応しているそうな。と言うわけでどのブラウザがどのバージョンから対応しているのか調べたが、一覧 を見つけられなかった。英語で調べれば出てくるかも知れないが、やっていない。でもIEではバージョン5からネットスケープでは6から、と言う事は firefoxは最初から??
まあ、どちらもかなり前のバージョンから対応しているが
http://blogs.yahoo.co.jp/mazbeer/309776.htmlにおもしろい記事を見つけた。一度見てみるといい。がやっぱり自分のスキルをあげる為にも、ここはdigest認証でやる。
パスワードファイルを作る
# htdigest -c “/webdata/HtDigest/.htpass” “User Auth” ユーザー名 ←-c は初回だけ、ファイル名はフルパスで指定し、後でvirtualhost.conf で指定するものと同じに。
# cat /webdata/HtDigest/.htpass
ユーザー名:User Auth:92907bf81772949bd4b75a328e
見たいにファイルが出来ている。又、ここではapacheはユーザー、グループ共nobodyでなく、apacheで動いているので、ユーザーapacheで読み取りが出来る事
/etc/httpd/conf.d/virtualhost.confの最後の</virtual>の前に下記を追加

<Directory "/webdata/public/kinryokai/meibo"> ←パスワードをかけたいDIRの指定
    AuthType Digest
    AuthName "User Auth" ← htdigestで指定したものと同じに
    AuthUserFile "/webdata/HtDigest/.htpass"
    Require valid-user
</Directory>

Require valid-userは .htpass に指定している全ユーザーがアクセスできる。特定のユーザーの場合は Require User ユーザー名1 ユーザー名2
# mkdir /webdata/public/kinryokai/meibo
でDIRを作り、
# chown apache. /webdata/public/kinryokai/meibo
でオーナーをアパッチにし、テスト用のファイル(meibo.pdf)をここに保存、その際、このファイルもapacheが読めるようにして置く。
これでapacheを再起動してと
# service httpd restart
ブラウザで http://localhost/upfiles/meibo/meibo.pdf’にアクセスすると、認証画面の後にファイルが表示される。
通信内容圧縮(mod_deflate)はcentossrv.com/apache-deflate.shtmlを参考に設定して置く

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

13:apacheの暗号化を有効にする

ここも私のバイブルであるhttp://centossrv.com/apache-ssl.shtmlを参考に、少し注意点を、/etc/httpd/conf.d/ssl.confで
管理者のメアドは webmater@xxxx.xxでかまわない。デフォルトでroot宛に、さらにそのrootは前に設定してある /etc/aliases で、自分のメアドに転送される。その他の変更は(変更した部分のみ)

DocumentRoot "/webdata/public/kinryokai"
#<Directory "/var/www/cgi-bin">
<Directory "/webdata/cgi/cgi-kinryo">

に変更。私はvirtualhost ホストで5つのwebがあるが、SSLが使えるのは一つのwebだけなので、メインのURLで設定をした。
最後に apacheを再起動

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

12:ゲストにapacheを設定-2

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を参考にしてください
又、 “/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 で正常に表示された。

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

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 | コメントする