Linux管理をはじめて数年、これまでPleskにお任せして避けてきた自力サーバー管理をはじめることになった。自宅サーバーもやってみたいし。
[1] [2]
アクセスログを解析したい!というケースが多いのだが、UNIXコマンドを使ってcronバッチで処理するというのがお手軽だ。
例えば特定のURLに対するアクセスのリファラ(参照元)を、ドメインごとに分けたい!などというケースであれば

grep index.php access_log | cut -d " " -f 11 |  sort | sed 's/\\(.*\\)\\/[^/]*$/\\1\\//' | uniq -c | sort -r

こんな感じのコマンドで実現可能。
このコマンドでやっていることは
grep 対象となるファイル(index.php)に対する行だけをアクセスログから抽出する
cut アクセスログの中から、参照元(リファラ)だけを抽出
sort ソートする
sed 最後のスラッシュまでを取得する
uniq 重複した行を1行にまとめて、重複回数を表示する
sort アクセスが多かったドメインから表示したいので降順にする
このような処理だ。

このコマンドでは
http://aaa.jp/dir/index.php
http://aaa.jp/dir/top.php
この2つのURLは同じものとして扱われるが、
http://aaa.jp/dir/index.php
http://aaa.jp/dir2/index.php
この2つのURLは別ものとして扱う。単純にドメインごとにしてしまうと、ブログからのアクセスなどがわけわからなくなるので、ディレクトリ単位で集計するイメージだ。
これによってどのサイトから、どのブログからどれくらいアクセスが発生しているかが分かる。

PR
サーバ開通時、webminは入っている状態。

FTPユーザ作成
http://private.isle.jp/support/manualhtml/webmin/ftp_user/

/etc/httpd/conf/httpd.confを修正
Options Indexes FollowSymLinksをOptions -Indexes FollowSymLinks

WebminでProFTPDとApacheを起動する設定に。

Mysqlをアンインストールする
yum remove mysql

tritonインストール
http://withoutplesk.blog.shinobi.jp/Entry/7/


webminに入っているmysqlの設定、ディレクトリが違うので
/usr/local/mysql/bin
に変更

tritonnフォルダのsupport-filesディレクトリから起動シェルをコピー

/usr/local/mysql/data ディレクトリを作成、所有者をmysqlに変更
data/*.errを見ながらエラーがなくなるまでやる

phpをインストール
    http://withoutplesk.blog.shinobi.jp/Entry/15/
    http://withoutplesk.blog.shinobi.jp/Entry/8/
   
   
libjpgなどでエラーが出る。
yum install libpng-devel
yum install libmcrypt-devel
yum install libtidy-devel
   
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
rm ltconfig
rm ltmain.sh
wget http://fink.sourceforge.net/files/ltconfig
wget http://fink.sourceforge.net/files/ltmain.sh
./configure --enable-shared --enable-static
mkdir /usr/local/man/man1
make
make install



phpmyadminをインストール
    http://withoutplesk.blog.shinobi.jp/Entry/9/

webminをアップグレード
    webmin.com からRPMパッケージをインストール

virtualminをインストール
    http://withoutplesk.blog.shinobi.jp/Entry/16/
http://webmin.com/vdownload.htmlのOther Download Formatsからwebminmoduleを選ぶ。
   
A problem was found with your Postfix virtual maps : No map sources were found in the Postfix configuration

postfixの設定の仮想ドメインMap specificationsを選択し、hash:/etc/postfix/virtual
   
    The Suexec command on your system is configured to only run scripts under /var/www, but the Virtualmin base directory is /home. CGI and PHP scripts run as domain owners will not be executed.
        Home directory baseを/var/wwwにする
   

webminの操作にも慣れてきたし、今までPleskにどれだけサーバリソースを使わされていたかということも痛いほどよく分かった。
webminは面倒なこともあるが、基本的に最初の設定が完了すればあとはPleskと大差ないユーザビリティを備えていると思う。そんなわけで、もう二度とPleskは使わない・・・言い切ってしまいたいところなのだが、実は問題が一つだけあった。
私の仕事では、一台のサーバに異なるドメインの複数サイトをホスティングすることがあるが、普通にwebminをインストールした状態では実現できない。
そこで、Virtualminという複数ドメインのホスティングをサポートするためのwebmin追加モジュールをインストールすることにした。

まずはVirtualminのページ左上にある「Virtualmin Installer」をクリックする。VirtualminにはGPL版とPro版があり、Pro版は有料ライセンスが必要。今回はGPL版をインストールする。

wget http://software.virtualmin.com/gpl/scripts/install.sh

インストール用のシェルスクリプトに実行権限を付与して、実行する。
chmod +x install.sh
./install.sh


私の環境では10分くらいでインストールが完了した。
感動的に簡単だ。
先日この記事でphpをソースからビルド・インストールしたと書いたが、サイトを作っていくうちにmb_send_mailが動作していないことが分かった。
エラーも出ないし、なんだか理由が分からなかったが、いろいろ調べていくうちにコンパイル時の問題であることが分かった。
mb_send_mailでメールが送れなくて、phpをソースからインストールしたという方は、phpのソースディレクトリの「main/php_config.h」このファイルの中に
#define HAVE_SENDMAIL 1
という行があるかどうか見てほしい。もしなかったら、原因はこれだ。
上記のファイルに「#define HAVE_SENDMAIL 1」という一行を追加する。私は適当に「#define ・・・」が続いている最後の行に追加した。

次に /etc/php.ini をどこかにコピーしてバックアップを取っておき、httpdを終了させておく。

phpをコンパイルする前に、ソースディレクトリに移動して
make distclean
を実行し、その上で再度phpをコンパイルする。前の記事でも書いたが、あらためてもう一回私が使ったconfigureオプションを掲載しておく。

'./configure' \
'--prefix=/usr/local' \
'--with-mysql=/usr/local/mysql' \
'--with-pdo-mysql=/usr/local/mysql' \
'--with-apxs2=/usr/sbin/apxs' \
'--enable-mbstring' \
'--enable-mbregex' \
'--with-jpeg-dir' \
'--enable-ftp' \
'--enable-exif' \
'--enable-sockets' \
'--with-openssl' \
'--with-zlib' \
'--with-gd' \
'--with-curl' \
'--enable-zend-multibyte' \
'--enable-pcntl' \
'--with-mcrypt' \
'--with-tidy'

で、makeするわけだが、私の環境では下記のようなエラーが出てmakeできなかった。

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] エラー 1


lltdlがインストールされていないのが原因なので、インストールする。
yum install libtool-ltdl libtool-ltdl-devel

で、
make
make install


以前使っていたサーバから新しいサーバへ引越する手順で結構めんどくさいのがMySQLのデータ引越。
DNSも外にあるのでAレコードの変更だけで済むし、コンテンツファイルはまぁサイズが大きくてもtarしてftpで転送するだけなので大した時間はかからない。
mysqlもmysqldumpでファイルを付くって、新しいサーバでコマンドラインから投入すれば数分で済むと思っていた。

ところが、やってみるとこれが非常に時間がかかる。遅い。遅すぎる・・・
私のサイトのテーブルは20Mくらいのサイズしかないのだが、試しに移行してみると1時間かかっても終了しなかった。1テーブルだけ(1.4メガくらい)を移行テストしてみたところ、10分かかった。

とんでもなく遅い。なんでこんなに時間がかかるんだ。
でネットでいろいろ調べてみた方法を試してみた。

・mysqldumpにオプションを付加する方法
--disable-keys をつけると、インサートのたびにキー更新せず、insertが全部完了してからテーブルのインデックスを作るので早くなる。
ただ、私の環境では --opt を付加してmysqldumpを実行しているので、これはもともとそうなっていた。

--extended-insert をつけると1行で複数のinsert文を作るので早くなる。これも同様に私の環境では既にそうなっていた。

--no-autocommit をつけるとまとめてコミットするので早くなる、とのことだったので試してみたが、結局前よりも遅くなった。

・移行先のmysql設定を見直してみる
net_buffer_lengthのサイズを大きくしてみたが効果なし。

key_buffer=256M
query_cache_size=32M
こんな設定も試してみたが変化なし。関係ないらしい。

myisam_max_sort_file_size=2G
tmpdir=/home/tmp
これも変化がなかった。このmyisam_max_sort_file_sizeをべらぼうにデカイ値にするという記事もあったが、試してみたところshow variables;でエラーになってしまったのでやめた。

で、最終的にはmysqlのデータファイルをまんまコピーするという荒技を試してみた。

・mysqlのデータを単純にコピーする方法
mysqladmin variables | grep datadir これを実行するとmysqlのデータがどこに格納されているかが分かる。そのディレクトリにあるDB名のディレクトリを丸ごと圧縮する。
tar zcvf db_backup.tar.gz dbname
こんな感じで。
このファイルを移行先のサーバにFTPで転送し、
zip -dc db_backup.tar.gz | tar xvf -
これで解凍・展開する。展開するとopt、frm、MYD、MYIなどの拡張子のファイルが沢山できるので、同じようにmysqlのデータ格納ディレクトリを調べて、db名のディレクトリに丸ごとコピーする。

データが更新されていたらうまくいかないのでテーブルをロックする、などの注意書きもあったのだが、私の場合は特にそういうことをしなくてもうまくいった。
割とDB更新が多いサイトを運営しているが、3回試して3回ともうまくいった。しかも移行元と移行先でmysqlのバージョンが違っているにもかかわらず。
単純にコピーしたいだけの引越ならこれが一番簡単ではないだろうか。ていうかmysqlはそういうたぐいの方法を用意するべきじゃない?

ちなみにデータベース名やデータベースユーザ名は移行元と先で統一して実験した。
tritonnの公式ページに記載されているインデックスの設定方法だと、アルファベットの大文字小文字が別物として扱われるようで、例えばAと検索するとaが結果として帰ってこない。
大文字小文字、半角全角を区別せずに検索結果としてヒットさせたい場合のインデックス設定は下記の通り

alter table テーブル名 add FULLTEXT INDEX インデックス名 USING SENNA, NORMALIZE (カラム名);


apacheのデフォルト設定だと.htaccessファイルが使えないので、/etc/httpd/httpd.confを下記のように修正した。

<Directory "/var/www/html">
AllowOverride None
<Directory/>

<Directory "/var/www/html">
AllowOverride All
<Directory/>


ディレクティブと設定行が分かるようにしています。途中の関係ない行を省略しています。
サーバーはメールサーバーとしても利用するので、postfixとdovecotをインストールしよう。
昨日の記事に書いたyumでインストール自体はとても簡単にできた。

yum -y install postfix
yum -y install dovecot


なんて簡単なんだ・・嬉しい限り。
/var/log/yum.logを見るとインストールされたパッケージのバージョンなどが確認できる。私の場合

Mar 09 03:38:55 Installed: dovecot - 1.0.7-2.el5.x86_64
Mar 09 04:24:46 Installed: postfix - 2:2.3.3-2.1.el5_2.x86_64


こんな風になっていた。
それぞれの設定については少し手こずったが、いろんなページを見ながらなんとか完了した。

しかしどうしてもメールが受信できない・・・なぜ?
別ドメインからメール送信をしてみたのだが、メールが届かない。メーラーのログを見ると、ログインも正常に出来ているしリストの取得も出来ているのだが、新着無しという(0件)結果。
じゃああだぐしが送ったメールはいったいどこへいってしまったのだろう・・

/var/log/maillogを見ると、下記のようなログが出ていた。
Mar  9 22:38:36 mydomain postfix/smtpd[5880]: connect from smtp21.m3.home.ne.jp[220.152.44.19]
Mar  9 22:38:36 mydomain postfix/smtpd[5880]: 31CE413889DC: client=smtp21.m3.home.ne.jp[220.152.44.19]
Mar  9 22:38:36 mydomain postfix/cleanup[5889]: 31CE413889DC: message-id=<【メッセージID】>
Mar  9 22:38:36 mydomain postfix/qmgr[4061]: 31CE413889DC: from=<【送信元のメアド】>, size=959, nrcpt=1 (queue active)
Mar  9 22:38:36 mydomain postfix/smtpd[5880]: disconnect from smtp21.m3.home.ne.jp[220.152.44.19]
Mar  9 22:38:36 mydomain postfix/local[5893]: 31CE413889DC: to=<root@mydomain.jp>, orig_to=<info@mydomain.jp>, relay=local, delay=0.1, delays=0.09/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Mar  9 22:38:36 mydomain postfix/qmgr[4061]: 31CE413889DC: removed


一見するとなんのエラーもワーニングも出てない。maillogの見方も、実はよく分からない。
でもなんとなく最後の二行が怪しいのでよく見てみると、

to=<root@mydomain.jp>, orig_to=<info@mydomain.jp>

なんだかinfo@に送ったメールがroot@に転送されているようだ。rootのメールディレクトリを見てみると、これまでに送ったテストメールっぽいものが貯まっていた。
いろいろ調べていると、

/etc/aliases
このファイルにinfoユーザがエイリアス登録されていることが分かった。
このinfoが記載されている行を # でコメントにしたところ、正常にメール受信が出来た。
私の環境ではrpmはインストールされているが、いろいろ調べているとyumというパッケージ管理ソフトが必要な場面が結構あるので、yumをインストールしてみることにした。

yumのパッケージは
http://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/
ここからダウンロードした。OSやCPUによってディレクトリが変わるので注意してくらさい。

http://ftp.riken.jp/Linux/centos/5.2/os/x86_64/CentOS/yum-3.2.8-9.el5.centos.1.noarch.rpm
今回はこれをインストールしてみよう
rpm -ihv yum-3.2.8-9.el5.centos.1.noarch.rpm

python-elementtree は yum-3.2.8-9.el5.centos.1.noarch に必要とされています
python-iniparse は yum-3.2.8-9.el5.centos.1.noarch に必要とされています
python-sqlite は yum-3.2.8-9.el5.centos.1.noarch に必要とされています
urlgrabber >= 3.1.0 は yum-3.2.8-9.el5.centos.1.noarch に必要とされています
yum-metadata-parser >= 1.1.0 は yum-3.2.8-9.el5.centos.1.noarch に必要とされています


こんな感じのエラーが出たが、上述のダウンロード元URLに全部置いてあったので、順番にインストール。最後にもう一回
rpm -ihv yum-3.2.8-9.el5.centos.1.noarch.rpm

これでyumが無事インストールできた。
途中でmysqlをインストールしています・・的なメッセージが出ていたような気がするが、tritonnは上書きされていなかったようだ。でも念のためyumのインストールは最初のほうにやったほうがいいだろうと思う。

yum -y install dovecot
試しにdovecotをインストールしてみた。いやあ、こういうインストールシールド的なパッケージ管理ソフトはいいですね。guiがないけど簡単でいいです。
tritonnからは少し離れるのだが、pleskを使っていてphpMyAdminがとても便利だったので、これを別途インストールしてみた。
phpMyAdminの偉いところは、プログラムがphpで書かれているという点だ。phpで書かれているのでビルドなどをする必要がなく、web公開ディレクトリにぽんと置いておけば動作する。

今回は
http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-3.1.3-all-languages.tar.gz
このバージョンをwgetコマンドでダウンロードした。
gzip -dc phpMyAdmin* | tar xvf -
解凍したら、configファイルを作成する。
cp config.sample.inc.php config.inc.php
作成したconfigは一カ所だけ修正
$cfg['blowfish_secret'] = 'パスフレーズ'
ここに適当な英数字を入れておけばいいのだそうだ。何のためなのかはよく分からない。
で、phpのディレクトリごとweb公開ディレクトリに移動する
mv phpMyAdmin-3.1.3-all-languages /var/www/html/phpMyAdmin
な感じだ。ディレクトリ名は変えておいたほうがセキュリティ的にもいい気がする。

私の環境では、これだけできちんと動いた。ログインもできたしデータベースの作成なども問題なし。
ただ特権の画面で全てのアカウントがログイン可能になっていたので、「すべて」と記載された特権情報を3件削除した。
あと念のためディレクトリにはベーシック認証をかけておいた。
フリーエリア
カレンダー
12 2012/01 02
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
Powered by ニンジャブログ  Designed by ゆきぱんだ
Copyright © Plesk卒業日記 All Rights Reserved
ブログ / [PR]保育士 住宅 ローン