MySQL用のユーザとグループを作成する。

# /usr/sbin/groupadd -g 202 mysql
# /usr/sbin/useradd -u 202 -g 202 -s /sbin/nologin mysql

MySQL用のデータ保存領域を作成する。

# mkdir /data/mysql

MySQLのコンパイル&インストール。
/usr/local/mysqlにインストールする。

$ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.50.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
$ tar xvzf mysql-5.1.50.tar.gz
$ cd mysql-5.1.50
$ ./configure --prefix=/usr/local/mysql --localstatedir=/data/mysql --with-charset=ujis --with-extra-charsets=all --with-mysqld-user=mysql
$ make
# paco -D make install

MySQLの設定ファイルをテンプレートからコピーして編集する。
とりあえず一か所のみ変更した。

# cp support-files/my-medium.cnf /etc/my.cnf

/etc/my.cnf

#skip-locking
skip-external-locking

権限テーブルを初期化するとデータベースファイルが作成される。

# /usr/local/mysql/bin/mysql_install_db --user=mysql
# ls -al /data/mysql/
total 752
drwx------ 4 mysql root    4096 Sep 24 19:49 .
drwxr-xr-x 3 root  root    4096 Sep 24 19:49 ..
drwx------ 2 mysql root    4096 Sep 24 19:49 mysql
-rw-rw---- 1 mysql mysql  19095 Sep 24 19:49 mysql-bin.000001
-rw-rw---- 1 mysql mysql 723139 Sep 24 19:49 mysql-bin.000002
-rw-rw---- 1 mysql mysql     38 Sep 24 19:49 mysql-bin.index
drwx------ 2 mysql root    4096 Sep 24 19:49 test

起動スクリプトをテンプレートからコピーして編集する。

# cp support-files/mysql.server /etc/init.d/mysql
# chmod 755 /etc/init.d/mysql
# /sbin/chkconfig --add mysql
# /sbin/chkconfig --list |grep mysql
mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off

起動確認。

# /sbin/service mysql start
Starting MySQL. SUCCESS!

# ps aux |grep sql
root     10144  0.1  0.2   3700  1304 pts/0    S    19:56   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/dti-vps-srv20.pid
mysql    11298  0.0  0.9  36136  5232 pts/0    Sl   19:56   0:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --log-error=/data/mysql/dti-vps-srv20.err --pid-file=/data/mysql/dti-vps-srv20.pid --socket=/tmp/mysql.sock --port=3306

# netstat -an |less
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     574871160 /tmp/mysql.sock

ログも確認しておく。
ここで[Warning]が出ているので/etc/my.cnfにて対応する。(上の説明を参照)

# tail -f /data/mysql/bruna.err
100924 19:56:48 mysqld_safe Starting mysqld daemon with databases from /data/mysql
100924 19:56:48 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
100924 19:56:48 [Note] Event Scheduler: Loaded 0 events
100924 19:56:48 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.
Version: '5.1.50-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution

【エラー情報1】
configureで下記のエラーが出た場合はncurses-develがないのでインストールしておく。

checking for termcap functions library... configure: error: No curses/termcap library found

夜寝る直前に携帯にアラートメールが飛んできた。眠かったのでWebアクセスできることだけを確認して睡眠。
今ログを見てみたら/dev/hde2がReadオンリーでマウントされている。

# tail /var/log/messages
Apr 19 00:04:53 bruna kernel: hde: dma_intr: status=0x51 { DriveReady SeekComplete Error }
Apr 19 00:04:53 bruna kernel: hde: dma_intr: error=0x40 { UncorrectableError }, LBAsect=226277, high=0, low=226277, sector=226277
Apr 19 00:04:53 bruna kernel: ide: failed opcode was: unknown
Apr 19 00:04:53 bruna kernel: end_request: I/O error, dev hde, sector 226277

試しに書き込みしてみたけど失敗。

# touch test
touch: cannot touch `test': 読み込み専用ファイルシステムです

リブートして復旧するか試してみる予定。

2009/10/26 18:05Postfixのエラー

24日からメールキューが異常に増え続けている事象が発生していた。
Postfixのログを見ていたところ今まで見たことのないログが出ていた。

Oct 26 10:29:10 hostname postfix/local[11244]: 2855BAA111: to=<xxx@kaju.jp>, relay=local, delay=125911, delays=125901/9.5/0/0.24, dsn=4.3.0, s
atus=deferred (temporary failure. Command output: maildrop: signal 0x19 )

原因はmaildropのログが上限に達したため。

# ls -la /var/log/maildrop/
合計 145596
drwxrwxrwx  2 root      root      4096  2月  3  2007 .
drwxr-xr-x  8 root      root     20480 10月 25 00:00 ..
-rw-------  1 xxxx      xxxx  51200000 10月 24 12:29 maildrop.log

maildrop.logをクリアしたらキューの中のメールが無くなった。
ログローテーションの対象から漏れていたようなので設定しておく。

2009/08/02 11:38Disk容量削減

/homeのHDD使用率が90%近くなってきたので空き容量を確保してみました。
各ユーザのスパムメールが1GBくらいになっていたので、30日以上前のスパムメールを日付ごとに圧縮してバックアップディレクトリに待避させました。

#!/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=/home/user/Maildir/.Junk/cur
BACKDIR=/data/backup/mail/user/Junk

D=31
while [ $D -lt 365 ]
do

EXT=`date -d ''$D' days ago' +%Y%m%d`

mkdir -p $BACKDIR/$EXT
find $MAILDIR -daystart -type f -mtime $D -print | xargs mv --target-directory=$BACKDIR/$EXT
tar czf $BACKDIR/$EXT.tar.gz -C $BACKDIR $EXT
rm -rf $BACKDIR/$EXT

D=`expr $D + 1`
done

●対応前

$ df -k /home
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hde7              5036284   4046984    733468  85% /home

●対応後

$ df -k /home
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hde7              5036284   3481076   1299376  73% /home

Muninのグラフを見ていたらたまたま見つけたキューの中から消えないメール。
1件のみなのでメールサーバ自体のトラブルではないと思うけど、早速確認してみる。

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
xxxxxxxxxx     5306 Thu Feb  5 03:38:53  MAILER-DAEMON
(lost connection with mx.xxxxx.com[74.208.xx.xx] while performing the HELO handshake)
                                         moldieru@xxxxx.com

-- 5 Kbytes in 1 Request.

メールアドレスから判断する限りスパムメールなので削除する。

# /sbin/service/postfix stop
# postsuper -d QUEUE ID
postsuper: xxxxxxxxxx: removed
postsuper: Deleted: 1 message

# /sbin/service/postfix start

なお、内容を確認したい場合は次のコマンドで可能。

# /usr/local/sbin/postcat -q Queue ID

最後にメールキューを確認。

# mailq
Mail queue is empty

2008/12/12 19:21PHP 5.2.8

PHPをバージョンアップします。
アップデートバージョンはPHP 5.2.8です。
PHP 5.2.6、PHP 5.2.7と立て続けに脆弱性が見つかっているので早めにアップデートしましょう。

$ wget http://jp.php.net/get/php-5.2.8.tar.bz2/from/this/mirror
$ tar xvjf php-5.2.8
$ cd php-5.2.8
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs \
              --with-mysql=/usr/local/mysql \
              --with-zlib \
              --with-gd \
              --with-jpeg-dir=/usr/lib \
              --enable-mbstring \
              --enable-mbregex \
              --disable-ipv6
$ make
# make install

Apacheを再起動します。

# /sbin/service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

見た目には成功のように見えましたが、エラーログが出ていてApacheが起動していませんでした。
/var/log/httpd/error.log

PHP Warning:  [eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.2.6. Rebuild it for your PHP version (5.2.8) or
download precompiled binaries.\n in Unknown on line 0
PHP Fatal error:  Unable to start eAccelerator module in Unknown on line 0

eAcceleratorをPHP 5.2.8でコンパイルする必要があります。

$ tar xvjf eaccelerator-0.9.5.2.tar.bz2
$ cd eaccelerator-0.9.5.2
$ phpize
$ ./configure
$ make
# make install

もう一度Apacheを再起動します。

# /sbin/service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

今度は成功しました。

2008/06/14 22:40HDD高温対策

HDD温度
気温が高くなるにつれて我が家のPCのHDDも熱くなってきました。
冬の間は止めていたHDDの空冷ファンを動かしました。
これで少しは温度が下がってくれる事でしょう。

今のSSLの設定ではSSLv2が有効になっています。
SSLv2を無効にし、128bit以上の暗号強度を要求するようにします。

●SSLProtocotl all -SSLv2のみ

# openssl s_client -connect kaju.jp:443 -ssl2
CONNECTED(00000003)
30304:error:1407F0E5:SSL routines:SSL2_WRITE:ssl handshake failure:s2_pkt.c:429:

●SSLCipherSuite AES:RC4:3DES:!EXP:!ADH:!SSLv2のみ

# openssl s_client -connect kaju.jp:443 -ssl2
CONNECTED(00000003)

(省略)

30417:error:1406D0B8:SSL routines:GET_SERVER_HELLO:no cipher list:s2_clnt.c:469:

両方を有効にした場合はSSLProtocolの設定が優先的に動くようだ。
最終的な設定。
【/usr/local/apache2/conf/extra/httpd-ssl.conf】

SSLProtocotl all -SSLv2
SSLCipherSuite AES:RC4:3DES:!EXP:!ADH:!SSLv2

Webサーバ上で色々なWebアプリを動かしているのでSSL化してセキュリティの確保をしてみます。
SSLをするには証明書が必要なわけですが、いわゆるオレオレ証明書ではなく無料で証明書を発行してくれるStartSSLのサービスを使ってみます。

最初にWebサーバであるApacheがSSLに対応しているか確認しておきます。
mod_ssl.cが読み込まれていればOKです。

# /usr/local/apache2/bin/httpd -l |grep ssl
  mod_ssl.c

StartSSLのサイトでアカウントを作成して証明書の発行手続きをします。
証明書を発行してもらうためにはCSRが必要なのですがStartSSLの場合はCSRがなくても大丈夫です。
CSRを作成する場合は以下の手順で行います。

1.サーバの秘密鍵を作成
秘密鍵生成時にランダムな値が必要になるので/dev/randomを使用します。

# openssl genrsa -rand /dev/random -des3 -out kaju.jp.key 1024

2.CSRを作成
先ほど作った秘密鍵(kaju.jp.key)を使ってCSRを作成します。
証明書に含める情報を色々聞かれるので入力していきます。
※Common Nameは実際に動かすサーバのFQDNと同じにする必要があるので注意。

# openssl req -new -key kaju.jp.key -out kaju.jp.csr

3.サーバ証明書を発行
CSRをstartsslに送付するとサーバ証明書が発行されるのでWebサーバ上に保存します。

4.CA証明書と中間CA証明書の入手
startsslのCA証明書と中間CA証明書をWebサーバ上に保存します。

# wget https://www.startssl.com/certs/ca.crt
# wget https://www.startssl.com/certs/sub.class1.server.ca.crt

次にApacheの設定を行います。
【/usr/local/apache2/conf/httpd.conf】

Include conf/extra/httpd-ssl.conf

【/usr/local/apache2/conf/extra/httpd-ssl.conf】

Listen 443

<VirtualHost _default_:443>
    DocumentRoot "/usr/local/apache2/htdocs"
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
    ErrorLog /var/log/httpd/ssl_default_error.log
    TransferLog /var/log/httpd/ssl_default_access.log
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /usr/local/apache2/conf/kaju.jp.crt
    SSLCertificateKeyFile /usr/local/apache2/conf/kaju.jp.key
    SSLCertificateChainFile /usr/local/apache/conf/sub.class1.server.ca.crt
    SSLCACertificateFile /usr/local/apache/conf/ca.crt

CustomLog /var/log/httpd/ssl_request.log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

設定を確認してOKだったらApacheを再起動します。

# /usr/local/apache2/bin/apachectl configtest
Syntax OK

# /usr/local/apache2/bin/apachectl start
Apache/2.2.8 mod_ssl/2.2.8 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server kaju.jp:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.

プロセスの確認をしておきます。

# ps aux |grep httpd
root      9897 18.0  2.0 55948 10512 ?       Ss   14:53   0:01 /usr/local/apache2/bin/httpd -k start
apache    9898  0.0  1.6 55756 8456 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start
apache    9900  0.0  1.6 55948 8592 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start
apache    9901  0.0  1.6 55948 8588 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start
apache    9902  0.0  1.6 55948 8588 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start
apache    9903  0.0  1.6 55948 8588 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start
apache    9904  0.0  1.6 55948 8588 ?        S    14:53   0:00 /usr/local/apache2/bin/httpd -k start

# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN

2007/05/31 12:02FastCGIでエラー Part1

MovableType用に導入したFastCGIですがmt.fcgiにアクセスするとInternal Server Errorが出てしまってうまく動きませんでした。
Apacheのエラーログを見ると原因と思われるものがありましたよ。

[Wed May 30 16:01:28 2007] [notice] Apache/2.2.4 (Unix) configured -- resuming normal operations
Can't locate FCGI.pm in @INC (@INC contains: /usr/local/MT/mt-bin/extlib lib
(省略)
BEGIN failed--compilation aborted at /usr/local/MT/mt-bin/extlib/CGI/Fast.pm line 22.
Compilation failed in require at lib/MT/Bootstrap.pm line 51.
BEGIN failed--compilation aborted at /usr/local/MT/mt-bin/mt.fcgi line 11.
[Wed May 30 16:02:14 2007] [warn] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
[Wed May 30 16:02:17 2007] [notice] mod_fcgid: process /usr/local/MT/mt-bin/mt.fcgi(3996) exit(communication error), terminated by calling exit(), return code: 2

どうやらFCGI.pmが見つかっていない様子。
perl-FCGIパッケージが必要のようです。
早速インストールしました。

# yum install perl-FCGI

今度はちゃんと管理画面にアクセスできました。


© 2003-2014 うーたんの小部屋 | Powered by Wordpress