hacks/サーバ管理

2010年07月26日

[Ubuntu][PHP] curl関数を利用可にする

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

PHPからcurlを使うと何が良いのかは不明

要望があったので設定。

▼検証環境

  • Ubuntu-8.04 LTS
  • Linux 2.6.24-6-xen

▼環境構築

$ sudo apt-get install php5-curl
$ sudo /etc/init.d/apache2 restart

▼テストコード

<?php

if ($ch = curl_init('http://www.google.com/')) {
  echo curl_exec($ch);
  curl_close($ch);
}

この場合、Googleのトップページが表示されれば良い。



半袖 at 14:40|PermalinkComments(0)TrackBack(0)

2010年05月27日

[Hinemos][Debian][Ubuntu] Hinemos監視対象ノード設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

ジョブ処理しないので、Hinemos Agent不必要

Hinemos』を監視システムとして利用したい。

この場合、Hinemos Agentを利用したジョブ処理は不用。
Hinemos Agentはインストール不用で、snmpdの設定さえあれば良い。
「果たして、Hinemosを使う意味があるのか…?」と言う事は、今回の議論の対象外とする。

▼動作実績環境

  • Amazon EC2
  • Ubuntu 8.04 LTS(x86_64)
  • Linux 2.6.24-6-xen
  • Hinemos 3.1.4
  • snmp 5.4.1~dfsg-4ubuntu4.3

作業内容

監視対象ノード

▼snmpdインストール

$ sudo apt-get -y install snmpd

▼使用IPアドレスを変更

$ sudo cp -pi /etc/default/snmpd /etc/default/snmpd.0
$ sudo vi /etc/default/snmpd
$ diff /etc/default/snmpd.0 /etc/default/snmpd
11c11,12
< SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
---
> #SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
> SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 0.0.0.0'

▼managerからシステム情報を取得可能に設定変更

$ sudo cp -pi /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.0
$ sudo vi /etc/snmp/snmpd.conf
$ diff /etc/snmp/snmpd.conf.0 /etc/snmp/snmpd.conf
61,62c61,62
< com2sec paranoid  default         public
< #com2sec readonly  default         public
---
> #com2sec paranoid  default         public
> com2sec readonly  default         public

▼snmpd再起動

$ sudo /etc/init.d/snmpd restart

Hinemos Manager

▼システム情報取得可能かどうかを確認

$ snmpwalk -v 1 -c public [ 監視対象IPアドレス ] .1.3.6.1

※HOST情報を取得出来れば良い


あと書き

今回は、Amazon EC2のセキュリティグループ設定があるのでsnmp接続許可設定を無視している。
その他環境では、snmp接続の許可・拒否を考慮すべき。



半袖 at 16:00|PermalinkComments(0)TrackBack(0)

2010年05月21日

[AWS][AmazonEC2][Hinemos][CentOS] Amazon EC2にHinemos環境構築

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

Amazon EC2特有仕様により、環境構築に苦戦した

忘れないうちに手順をまとめておく。
苦戦要因は、IPアドレスだ。

Amazon EC2には、ローカルIPアドレスと、グローバルIPアドレスが存在する。
インスタンス内ではローカルIPアドレスを使用。

通常、Hinemosマネージャーに指定するのはIPアドレス。
果たして、Hinemosマネージャーに指定するIPアドレスは…?


▼動作実績環境

  • CentOS-5.5(x86_64)
  • Linux 2.6.21.7-2.fc8xen
  • Hinemos 3.1.4


事前作業

▼Security Groupに新グループ追加

  • tcp
    • 1098
    • 1099
    • 3873
    • 4444
    • 4445
    • 4446
    • 4457
    • 8009
    • 8080
    • 8083
    • 24457
  • udp
    • 514

追加したグループを指定し、インスタンス起動する


作業内容

▼必要に応じてインストール

# yum -y update
# yum -y install wget

▼Hinemosマネージャをダウンロード、伸張

# cd /tmp/
# wget 'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fhinemos%2F45345%2Fhinemos_manager-3.1.4_rhel5_32.tar.gz'
# tar zxvf hinemos_manager-3.1.4_rhel5_32.tar.gz
# cd Hinemos_Manager-3.1.4_rhel5_32/

▼syslog-ngインストール時にエラーになるので、syslog-ng.confのテンプレートを修正

# cp -pi syslog-ng_setup.conf syslog-ng_setup.conf.0
# vi syslog-ng_setup.conf
# diff syslog-ng_setup.conf.0 syslog-ng_setup.conf
21c21
< source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };
---
> source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); udp(ip(0.0.0.0) port(514)); };

※EC2のLinuxカーネルがIPv6を使えない為、IPv6アドレスにportをbindする際、起動に失敗する。失敗させないための策。

▼インストールスクリプトを実行

# export LANG=C
# ./manager_installer_EN.sh
Hinemos installation will be started, is that OK?(Y/N default:Y)
>>enter<<

The installation user and the installation directory are created.


User hinemos is created.
Creating mailbox file: File exists
Changing password for user hinemos.
New UNIX password:********
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:>>hinemos<<
passwd: all authentication tokens updated successfully.
User hinemos was created.
Installation directory /opt/hinemos was created.

Manager's IP address is set.
Please input IP address of the server which installed Hinemos manager.
[[ Public DNS Name ]]※ここでIPアドレスではなく、Public DNS Nameを指定する
Is it [[ Public DNS Name ]]? (Y/N default:Y)

Please input JBoss boot user name.(hinemos/root default:hinemos)
>>enter<<
hinemos is correct? (Y/N default:Y)
>>enter<<
Start copying required files into the installation directory.
Please input ftp server's IP address needed by corrective run (default:127.0.0.1)
>>enter<<

JRE
Do you agree to the above license terms? [yes or no]
yes
Starting system logger:                                    [  OK  ]

/etc/hosts is changed.
May I change /etc/hosts? (Y/N)
Y

/etc/hosts was changed.
Please confirm it after the end of the installation.

The database is initialized.
waiting for postgres to start...
done
postgres started
ALTER ROLE
waiting for server to shut down.... done
server stopped

LDAP is initialized.
The initialization of LDAP was completed.

Hinemos manager installation was completed.

▼初回起動テスト

# su - hinemos -c /opt/hinemos/bin/hinemos_start.sh
Hinemos starting

waiting for postgres to start...
done
postgres started

waiting for slapd to start...
done
slapd started

waiting for jboss to start...
......................done
jboss started
Hinemos started

▼システム起動時にHinemosが起動するように設定

# cp -pi /etc/rc.local /tmp/rc.local.0
# vi /etc/rc.local
# diff /tmp/rc.local.0 /etc/rc.local
9a10,11
>
> /usr/bin/id hinemos && su - hinemos -c /opt/hinemos/bin/hinemos_start.sh

▼/etc/hostsを修正

# cp -pi /etc/hosts /tmp/hosts.0
# diff /tmp/hosts.0 /etc/hosts
2c2,3
< [[ Public DNS Name ]]      domU-12-34-56-78-AB-90
---
> [[ Internal IPv4 ]]        domU-12-34-56-78-AB-90
> [[ Internal IPv4 ]]        [[ Public DNS Name ]]

インストールスクリプトは、IPアドレス指定を想定しているので、/etc/hostsが不正内容となる。その対応修正。

▼システム再起動

# reboot

▼この後、Hinemosクライアントを利用

  • user: hinemos
  • pass: ********
  • host: jnp://[[ Public DNS Name ]]:1099

ログインに成功したら環境構築成功。


あと書き

Amazon EC2では「Public DNS Name」を上手に利用するべきだと分かった。

  • 内部で名前解決するとローカルIPアドレス
  • 外部で名前解決すると、グローバルIPアドレス
  • ルーティングの関係?で、インスタンス内からグローバルIPアドレスへは通信出来ない
  • 唯一、内外共通で利用出来るのが「Public DNS Name」と言う訳だ

これは別エントリで改めてまとめる予定。



半袖 at 20:25|Permalink

[AWS][AmazonEC2][Github] EC2用vmイメージ構築スクリプトを作った

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

自分でシンプル環境を構築しよう

前回は、Xen domU用イメージ作成スクリプトを作った。
今回はAmazon EC2用イメージ作成スクリプトだ。

▼動作実績環境

  • CentOS-5.4(x86_64)
  • Linux 2.6.18-164.15.1.el5xen
  • yum 3.2.22
使用例

▼CentOS-5.5(2010/05/21現在最新)のツリーを作る

$ git clone git://github.com/hansode/vmbuilder.git
$ cd vmbuilder/ec2/redhat/
$ sudo make-domu-tree.sh --dist=centos --ver=5.5 --arch=i386

※ --dist=fedora とすると、fedoraのツリーが構築される。


誰かが作るであろう最新版CentOSのAMIを、もう、待つ必要がない。
次はDebian系のイメージに着手予定。



半袖 at 15:10|PermalinkComments(0)TrackBack(0)

[Hinemos][syslog-ng] 【解決】Re: Hinemosマネージャのインストール中に syslog-ng起動失敗

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

【結果】問題解決に成功した

Hinemos』をインストール。
インストール検証環境にてインストールを行い、動作確認を終えた。
その後、別環境への環境構築を行ったら問題にぶち当たった。

▼対象環境

  • Amazon EC2
  • CentOS-5.5 (i386)
  • Linux 2.6.21.7-2.fc8xen
  • Hinemos hinemos_manager-3.1.4_rhel5_32.tar.gz

▼syslog-ng起動失敗

# /etc/init.d/syslog-ng restart
Shutting down system logger:                               [  OK  ]
Starting system logger: Error creating socket; error='Bad file descriptor (9)'
Error initializing source driver; source='s_net'
                                                           [FAILED]

同じ現象に遭遇した人を発見。

Re: Hinemosマネージャのインストール中にsyslog-ng起動失敗
どなたか解決の方法をお知りでしたら、助けていただければ幸いです。

・・・?未解決のまま終わっている。


未解決は宜しく無い

こう言った原因解明にはstraceコマンドが便利だ。
困った時のstraceコマンド。

# strace /sbin/syslog-ng -d -f /etc/syslog-ng/syslog-ng.conf
...(省略)...
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(3, {sa_family=AF_INET, sin_port=htons(514), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(3, 255)                          = 0
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [0], 4) = 0
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address family not supported by protocol)
fcntl64(4294967295, F_GETFL)            = -1 EBADF (Bad file descriptor)
fcntl64(4294967295, F_GETFD)            = -1 EBADF (Bad file descriptor)
time(NULL)                              = 1274413588
write(2, "Error creating socket; error='Ba"..., 55Error creating socket; error='Bad file descriptor (9)'
) = 55
time(NULL)                              = 1274413588
write(2, "Error initializing source driver"..., 49Error initializing source driver; source='s_net'
) = 49
exit_group(2)                           = ?

PF_INET6…?

▼/etc/syslog-ng/syslog-ng.confを調査

source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };

なるほど。

▼/etc/syslog-ng/syslog-ng.confを修正

# cp -pi /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.0
# vi /etc/syslog-ng/syslog-ng.conf
# diff /etc/syslog-ng/syslog-ng.conf.0 /etc/syslog-ng/syslog-ng.conf
92c92
< source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };
---
> source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); udp(ip(0.0.0.0) port(514)); };

# /etc/init.d/syslog-ng restart
Shutting down system logger:                               [FAILED]
Starting system logger:                                    [  OK  ]

tcp6とudp6の設置を削除。
無事にsyslog-ngが起動した。


あと書き
  • IPv6未対応環境だったのが原因
  • 今回はIPv6を必要としないので問題ない
  • 問題は解決しよう。

問題解決した時の達成感がタマラナイ。



半袖 at 13:15|PermalinkComments(0)TrackBack(0)

2010年04月28日

[Xen][domU][Github] vmイメージ構築スクリプト用のリポジトリを作った

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

RedHat系 domU環境構築

検証用に小さなdomUを用意したくなる事が多い。
domU作りの勉強がてら手順をまとめ、スクリプト化した。

現状はXen domU用のツリーを作る所までのスクリプトだけ。

▼動作実績環境

  • CentOS-5.4(x86_64)
  • Linux 2.6.18-164.15.1.el5xen
  • yum 3.2.22
使用例

▼cloneを作成

$ git clone git://github.com/hansode/vmbuilder.git
$ cd vmbuilder/xen/redhat/

▼Fedora Core 8(i386)の場合

$ sudo ./make-domu-tree.sh --dist=fedora --ver=8 --arch=i386

▼CentOS 5(i386)の場合

$ sudo ./make-domu-tree.sh --dist=centos --ver=5 --arch=i386

これ以降はddでイメージを作ってrsyncで同期するなり焼くなりは自由。

▼イメージへの同期例

$ sudo dd if=/dev/zero of=vm_i386_1gb.img bs=1G count=1
$ sudo mkfs.ext3 -F ./vm_i386_1gb.img

$ mkdir mnt
$ sudo mount -o loop ./vm_i386_1gb.img ./mnt/

$ sudo rsync -avx ./fedora-8_i386/ ./mnt/ 
$ sudo sync

$ sudo umount ./mnt/

AMI登録用イメージスクリプトを近日登録予定。



半袖 at 18:15|PermalinkComments(0)TrackBack(0)

2010年04月20日

[Nginx][Ubuntu][Debian] ちょっとした検証用Nginxをビルド

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

何度か繰り返しているので書き残す

自分用メモ

▼検証環境

  • Ubuntu 8.04 (i386)
  • Amazon EC2(ami-5d59be34 canonical-cloud-us/ubuntu-hardy-20090422-i386.manifest.xml)

▼戦略

  • ひとまずパッケージからNginxをインストール
  • /etc/default/nginxを修正
  • Nginxをソースからビルドして/opt/nginx/へインストール
作業内容

▼パッケージでnginxをインストール

$ sudo apt-get install nginx

▼ビルド依存パッケージをインストール

$ sudo apt-get install gcc make libc6-dev libssl-dev

▼nginxをビルド

$ cd /tmp/
$ wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.02.tar.gz

$ tar zxvf nginx-0.7.65.tar.
$ tar zxvf pcre-8.02.tar.gz

$ cd nginx-0.7.65

$ ./configure \
 --prefix=/opt/nginx \
 --with-pcre=/tmp/pcre-8.02 \
 --with-http_realip_module
$ make

▼nginxをインストール

$ sudo make install

▼インストール後のnginx状態を確認

$ /opt/nginx/sbin/nginx -V
nginx version: nginx/0.7.65
built by gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
configure arguments: --prefix=/opt/nginx --with-pcre=/tmp/pcre-8.02 --with-http_realip_module

▼起動設定ファイル修正(新規追加)

$ sudo vi /etc/default/nginx
DAEMON=/opt/nginx/sbin/nginx
DAEMON_OPTS='-c /opt/nginx/conf/nginx.conf'

▼nginx.conf生成

$ cd /opt/nginx/conf/
$ sudo mv -i nginx.conf nginx.conf.0
$ sudo vi nginx.conf

▼nginx.conf生成

user www-data;
worker_processes  4;

error_log  /var/log/nginx/error-passenger.log;
pid        /var/run/nginx-passenger.pid;

events {
    worker_connections  1024;
}

http {
    include       /opt/nginx/conf/mime.types;
    include       /opt/nginx/conf/conf.d/*.conf; # ex. passenger.conf
    default_type  application/octet-stream;

    access_log  /var/log/nginx/access-passenger.log;

    proxy_redirect          off;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout   1;
    proxy_send_timeout      90;
    proxy_read_timeout      90;
    proxy_buffers           32 4k;

    sendfile       on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;

    include vh/*.conf;
}

▼VirtualHost用設定ファイルディレクトリ作成

$ sudo mkdir vh
$ sudo vi vh/ec2.conf

▼vh/ec2.conf生成

server {
    listen 80;
    server_name ec2.example.com;

    # mod_real_ip
    set_real_ip_from        10.0.0.0/8;
    real_ip_header     X-FORWARDED-FOR;

    error_page  404              /404.html;
}

▼nginx起動

$ sudo /etc/init.d/nginx start


半袖 at 21:30|PermalinkComments(0)TrackBack(0)

[Nginx][HTTP] HTTPヘッダーのSserverフィールドからバージョン番号を隠蔽

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

バージョン番号を隠蔽したい

▼検証環境

  • Ubuntu 8.04 (i386)
  • Linux 2.6.24-6-xen
  • Nginx 0.7.65
作業内容

▼nginx.confを修正

> server_tokens off;

リロードして設定を反映させる

▼動作確認

$ HEAD http://ec2.example.com/path/to/page
404 Not Found
Connection: close
Date: Tue, 20 Apr 2010 10:03:48 GMT
Server: nginx
Content-Length: 162
Content-Type: text/html
Client-Date: Tue, 20 Apr 2010 10:03:48 GMT
Client-Peer: 184.73.69.193:80
Client-Response-Num: 1

Serverフィールドの値が「nginx」のみとなった事を確認。



半袖 at 21:00|PermalinkComments(0)TrackBack(0)

[Nginx][CGI][fcgiwrap][Ubuntu] NginxでCGI

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

apt-getだけで完結しなかった

▼検証環境

  • Ubuntu 8.04 (i386)

作業内容

▼fcgiwrap依存パッケージ

$ sudo apt-get install libfcgi-dev

▼fcgiwrapをビルド・インストール

$ cd /tmp
$ wget http://github.com/gnosek/fcgiwrap/tarball/master
$ tar zxvf gnosek-fcgiwrap-28ac6f9.tar.gz
$ cd gnosek-fcgiwrap-28ac6f9/
$ make
$ sudo install -m 755 fcgiwrap /usr/local/bin/fcgiwrap

▼spawn-fcgiをビルド・インストール

$ cd /tmp
$ wget http://freshmeat.net/urls/fe79d49e03a1762e9faf02b1ea482490
$ tar zxvf spawn-fcgi-1.6.3.tar.gz
$ cd spawn-fcgi-1.6.3
$ ./configure
$ make
$ sudo make install

▼spawn-fcgi起動スクリプト配置: /etc/init.d/spawn-fcgi

#!/bin/sh
#

NAME=spawn-fcgi
DESC=spawn-fcgi
PIDFILE=/var/run/$NAME.pid
PROGRAM=/usr/local/bin/spawn-fcgi
ADDR=127.0.0.1
PORT=9000
USER=www-data
GROUP=www-data
FCGIWRAP=/usr/local/bin/fcgiwrap


if [ -f /etc/default/spawn-fcgi ]; then
        . /etc/default/spawn-fcgi
fi

set -e

case "$1" in
        start)
                echo -n "Starting $DESC: "
                $PROGRAM -f $FCGIWRAP -P $PIDFILE -a $ADDR -p $PORT -u $USER -g $GROUP
                echo "$NAME."
                ;;
        stop)
                echo -n "Stopping $DESC: "
                [ -f $PIDFILE ] || exit 1
                PID=`cat $PIDFILE`
                kill $PID
                echo "$NAME."
                ;;
        restart)
                $0 stop
                sleep 1
                $0 start
                ;;
        *)
                echo "Usage: /etc/init.d/$NAME [start|stop]" >&2
                exit 1;
                ;;
esac

exit 0

▼spawn-fcgiを起動対象サービスに追加

$ sudo chmod +x /etc/init.d/spawn-fcgi
$ sudo /usr/sbin/update-rc.d -f spawn-fcgi defaults
$ sudo /etc/init.d/spawn-fcgi start

▼nginx.conf編集

    location ~ ^/cgi-bin/.*\.cgi$
    {
      fastcgi_pass    127.0.0.1:9000;
      fastcgi_read_timeout    5m;
      fastcgi_index    index.cgi;
      include    /opt/nginx/conf/fastcgi_params;
    }

serverディレクティブ内に追記



半袖 at 18:30|PermalinkComments(0)TrackBack(0)

2010年04月16日

[CentOS][Linux] /etc/sysconfig/network-scripts/ifcfg-Xをハックする (2/N) eth0からeth1に割り当てるIPアドレスを動的生成

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

eth1に割り当てるIPアドレスに規則がある場合、どうにかしたい

共通化したい情熱があればこそ、こんな事をやりたくなる。

▼要件

  • eth0にはstaticかdhcpにより、IPアドレスが割り当てられる
  • eth0とeth1は、違うサブネット
  • eth1のIPアドレスの4オクテット目がeth0と同じ

▼設定例

  • eth0: 192.168.10.10
  • eth1: 192.168.11.10
レシピ

▼検証環境

  • CentOS-5.4(i386)

▼/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=${CONFIG##ifcfg-}
BOOTPROTO=static
ONBOOT=yes
NETMASk=255.255.255.0

subnet=192.168.11

IPADDR=${subnet}.$(
  base_nic=eth0
  ifconfig ${base_nic} |\
    grep 'inet addr:'  |\
    awk '{print $2}'   |\
    sed 's,addr:,,;'   |\
    awk -F\. '{print $4}'
)
あと書き

注目したいのは、シェルスクリプトを埋め込んでいる事。
ifcfg*には、「key=value」しか書けない と言う訳ではない。

シェルスクリプトを埋め込める事に気づくと、設定に対する世界観が変わる。
多少プログラムを書けると設定に対するアプローチが変わる。

「プログラマブル設定ファイル」

こんな事をやってると、ますます「変態」と言われそうだ。
光栄です。



半袖 at 14:30|PermalinkComments(0)TrackBack(0)

2010年04月15日

[CentOS][Linux] /etc/sysconfig/network-scripts/ifcfg-Xをハックする (1/N) ファイル名からデバイス名を指定する

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

ファイル名から推測出来るデバイス名を、何故指定するのか…

検証環境

  • CentOS-5.4(i386)

まずはサンプル。

▼/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

ファイル名は「ifcfg-eth0」だ。
設定ファイル内で「DEVICE=eth0」を指定。

eth0用設定をしているのに、何故 DEVICE=eth0 を指定するのか…?

ふと、疑問が生まれた。


「eth0」を値に持つ変数はないのか?

変数名「CONFIG」に「ifcfg-eth0」が入ってる事が判明。
これをシェル変数の文字列処理にて分解すると、 eth0 を得られる。

▼/etc/sysconfig/network-scripts/ifcfg-eth0 修正版

DEVICE=${CONFIG##ifcfg-}
BOOTPROTO=dhcp
ONBOOT=yes

これで再利用可能なifcfg-ethXが出来上がった。


再利用可能な状態へ変更してみる

ファイル名のsuffixが「.bak」であれば無視されるのを利用する。

▼/etc/sysconfig/network-scripts/ifcfg-ethX.bak

# vi ifcfg-ethX.bak
-----
DEVICE=${CONFIG##ifcfg-}
BOOTPROTO=dhcp
ONBOOT=yes
-----

▼eth0, eth1, eth2 を設定すると

# cd /etc/sysconfig/network-scripts/

# ln -s ifcfg-ethX.bak ifcfg-eth0
# ln -s ifcfg-ethX.bak ifcfg-eth1
# ln -s ifcfg-ethX.bak ifcfg-eth2

設定内容が同じである事が自明ならば、一元化された設定ファイルで管理が可能になる。

後は、 /etc/init.d/network restart して検証し、
可能であればシステム再起動して問題ないことまで確認する。



半袖 at 22:35|PermalinkComments(0)TrackBack(0)

[Wakame][Ruby] [CentOS] RPM非依存のRuby環境構築

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

wakame-vdc』がこっそりgithubにて公開された

wakame-vdcデモ環境構築時に行った作業記録である。

▼検証環境

  • CentOS-5.4(i386)

▼要望:Ruby-1.8.7をインストールしたい

  • 手順は暫定版で良い
  • CentOS-5.4のRubyは、1.8.6
  • 他のパッケージと依存関係を持たせたくない
  • パッケージに依存する場所へインストールしたくない

こんな背景があった上での下記作業記録。

作業内容

▼ディレクトリ構成

  • /opt/wakame/ruby-187

▼Ruby-1.8.7をインストール

# cd /tmp
# wget ftp://core.ring.gr.jp/pub/lang/ruby/1.8/ruby-1.8.7-p249.tar.gz
# tar zxvf ruby-1.8.7-p249.tar.gz
# cd ruby-1.8.7-p249
# ./configure --prefix=/opt/wakame/ruby-187/
# make
# make test
test succeeded
# make install

▼RubyGemsをインストール

# cd /tmp
# wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz
# tar zxvf rubygems-1.3.6.tgz
# cd rubygems-1.3.6
# export PATH=$PATH:/opt/wakame/ruby-187/bin/
# ruby ./setup.rb

▼必要なGEMパッケージをインストール

# export PATH=$PATH:/opt/wakame/ruby-187/bin/
# ruby ./setup.rb
# gem list
# gem install rake --version=0.8.7 --no-rdoc --no-ri --bindir /opt/wakame/ruby-187/bin
# gem install rack --version=1.1.0 --no-rdoc --no-ri --bindir /opt/wakame/ruby-187/bin
# gem install bundler --version=0.9.11 --no-rdoc --no-ri --bindir /opt/wakame/ruby-187/bin
# gem install fastthread --version=1.0.7 --no-rdoc --no-ri --bindir /opt/wakame/ruby-187/bin
# gem install passenger --version=2.2.11 --no-rdoc --no-ri --bindir /opt/wakame/ruby-187/bin

▼インストール済GEMパッケージ一覧

# gem list
*** LOCAL GEMS ***

bundler (0.9.11)
fastthread (1.0.7)
passenger (2.2.11)
rack (1.1.0)
rake (0.8.7)

この後、wakame-vdcの環境が構築されて行く。



半袖 at 20:55|PermalinkComments(1)TrackBack(0)

2010年04月13日

[Linux][CentOS][GRUB] 起動オプションに新たな引数を追加指定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

例えばシステム起動時に runlevel=[0-5] を指定したい

▼検証環境

  • CentOS 5.4(i386)
  • Linux 2.6.18-164.15.1.el5xen

▼材料

  • /boot/grub/menu.list
  • /etc/rc.d/rc.sysinit
作業内容

▼/boot/grub/menu.list を修正

default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
title CUI| CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-3.4.0
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/sda3 quiet selinux=0 runlevel=3
        module /initrd-2.6.18-164.15.1.el5xen.img-cui
title GSB | CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-3.4.0
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/sda3 quiet selinux=0 runlevel=5
        module /initrd-2.6.18-164.15.1.el5xen.img-gui

それぞれ、runlevel=? を追加


▼/etc/rc.d/rc.sysinit の行末に追記

> if strstr "$cmdline" runlevel=; then
>   for arg in $cmdline ; do
>     runlevel=${arg##runlevel=}
>     case "${runlevel}" in
>     3) # runlevel 3の場合
>       command...;
>       ;;
>     5) # runlevel 5の場合
>       command...;
>       ;;
>     esac
>   done
> fi
  • strstr関数は、/etc/init.d/functions で定義されている
  • 起動時に指定されたオプションは、/proc/cmdline に存在する
  • /proc/cmdlineは、/etc/rc.d/rc.sysinit内で「cmdline=$(cat /proc/cmdline)」として変数が用意されている


半袖 at 22:05|PermalinkComments(0)TrackBack(0)

[Nginx][GeoIP] 接続元の国指定で何かしらの処理する

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

ソフトウェア輸出禁止国などを設定する場合に重宝する

例えば日本からの接続のみ403にしたい。(…なんて事は滅多にないだろう)

delegated-apnic-latestから、IPアドレス範囲リストを生成し、HttpAccessModuleでdeny設定しても良い。
それよりも、GeoLite Countryと言う国別IPアドレスを利用するのが手っ取り早い。

▼材料

▼geo.confを生成

$ wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
$ tar zxvf nginx-0.7.65.tar.gz
$ wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
$ unzip GeoIPCountryCSV.zip
$ perl ./nginx-0.7.65/contrib/geo2nginx.pl < ./GeoIPCountryWhois.csv > geo.conf
$ sudo mv -i geo.conf /etc/nginx/.

▼nginx.confを修正

geo $geo {
        default  --;
        include /etc/nginx/geo.conf; # ←GeoIPCountryWhois.csvから生成
}

location / {
        if ($geo = 'JP') {
                return 403;
        }
}

後はNginxに設定を反映させれば完了。


▼運用へ向けて

  • geo.confの定期メンテナンスを忘れない事
  • cronを利用した自動更新や、Puppetなどを利用しても良いだろう


半袖 at 21:20|PermalinkComments(0)TrackBack(0)

[Postfix][MTA] 携帯キャリア向け配送制限設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

キャリア別に同時接続数制限したい

キャリアのMTAに対して大量にメールを配送すると、接続一時拒否される事がある。
その対策の1つが、配送数制御。

▼検証環境

  • Fedora release 8
  • Postfix 2.5.5
作業内容

▼/etc/postfix/main.cf 必要に応じて修正

> transport_maps = hash:/etc/postfix/transport

▼/etc/postfix/master.cfに追記

> smtp-softbank.ne.jp unix -      -       n       -       1       smtp
>       -o smtp_destination_concurrency_limit=1
> smtp-ezweb.ne.jp    unix -      -       n       -       1       smtp
>       -o smtp_destination_concurrency_limit=1
> smtp-docomo.ne.jp   unix -      -       n       -       1       smtp
>       -o smtp_destination_concurrency_limit=1

▼/etc/postfix/transportに追記

> softbank.ne.jp  smtp-softbank.ne.jp:
> ezweb.ne.jp     smtp-ezweb.ne.jp:
> docomo.ne.jp    smtp-docomo.ne.jp:

▼transport.dbを構築

# cd /etc/postfix
# postmap transport

▼Postfixに設定を反映

# /etc/init.d/postfix reload

あとは日々ログを観察しつつ、
システムに似合ったsmtp_destination_concurrency_limitの設定値を割り出して行く。



半袖 at 16:10|PermalinkComments(0)TrackBack(0)

2010年04月12日

[RPM] rpmコマンドオプションまとめ

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

rpmコマンドの復習

これまでの半年は作業環境はCentOSが多かった。
いつの間にか苦手だったrpmコマンドをそこそこ使いこなせるようになった。
復習を兼ね、下記にまとめる。

インストール済パッケージ

▼インストール済パッケージ一覧

$ rpm -qa

▼インストル済パッケージを新しい順に一覧表示

$ rpm -qa --last

▼パッケージ情報を表示

$ rpm -qi [package]

▼ファイル一覧表示

$ rpm -ql [package]

▼依存パッケージを表示

$ rpm -qR [package]

▼ドキュメント一覧

$ rpm -qd [package]

▼設定ファイル一覧

$ rpm -qc [package]

▼ファイルが所属するパッケージ名を表示

$ rpm -qf /path/to/file

▼ファイルの設定ファイルを表示

$ rpm -qcf /path/to/command

▼ファイルのドキュメントを表示

$ rpm -qdf /path/to/command


未インストールパッケージ

未インストールの場合は「p」を使う。

▼未インストールパッケージのファイル一覧表示

$ rpm -qpl [package].rpm

▼未インストールパッケージの依存関係表示

$ rpm -qpR [package].rpm

▼未インストールの設定ファイルを表示

$ rpm -qpc [package].rpm

▼未インストールのドキュメント表示

$ rpm -qpd [package].rpm


半袖 at 18:00|PermalinkComments(0)TrackBack(0)

2010年04月07日

[UNIX] ユーザーのパスワード削除

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

時々使うのに忘れてる

SSHで鍵認証のみ許可された環境構築時に利用。
Amazon EC2のAMI作りには欠かせない。

# passwd -d [ user-name ]


半袖 at 11:25|PermalinkComments(0)TrackBack(0)

2010年04月02日

[Linux][CentOS] CentOSで任意のブリッジを追加

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

閉じた環境を構築したい

▼検証環境

  • CentOS-5.4(i386)

■作業内容

▼設定ファイル生成

# vi /etc/sysconfig/network-scripts/ifcfg-newbr0
DEVICE=newbr0
BOOTPROTO=static
BROADCAST=172.16.1.255
IPADDR=172.16.1.1
NETMASK=255.255.255.0
NETWORK=172.16.1.0
TYPE=Bridge
ONBOOT=yes

▼設定反映

# /etc/init.d/network restart

▼内容確認

# ifconfig newbr0
newbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:172.16.1.1  Bcast:172.16.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3157 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:426121 (416.1 KiB)  TX bytes:243853 (238.1 KiB)


半袖 at 19:20|PermalinkComments(0)TrackBack(0)

2010年01月25日

ファイルロック処理が実装されてないログファイルを、なるべく安全にログローテート

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

思わず手直ししたくなるスクリプト

「ログを吐き出しているけど、ロック処理が無い…」と言う、何とも初歩的なスクリプトがあったとする。
そんなログをローテートしたい。

▼要望

  • ログローテートする
  • ログは全て保存し、消さない
  • ファイル名に日付を付けたい

▼/etc/logrotate.d/foo-bar

/var/log/foo-bar.log {
    daily
    rotate 1
    missingok
    create 0644  www-data www-data
    sharedscripts
    postrotate
      basename=/var/log/foo-bar.log
      suffix=`date -d '1 day ago' +%Y%m%d-%s`.$$
      srcfile=${basename}.1
      dstfile=${basename}.${suffix}
      if [ -f ${srcfile} -a ! -f ${dstfile} ]; then
        (mv ${srcfile} ${dstfile} && gzip ${dstfile}) || :
      fi
    endscript
}

▼手動でローテートしてみる

$ sudo logrotate -f /etc/logrotate.d/foo-bar
$ sudo logrotate -f /etc/logrotate.d/foo-bar

$ ls -la /var/log/foo-bar*

▼作業後確認項目

  • 複数のログが生成されていれば良い
  • あとは日時ローテートされている事を確認出来れば良い
後書き

スクリプトでのロック処理実装は置いておくとして、

  • logrotate設定ファイル内にファイル操作処理を記述出来るのは嬉しい。
  • サーバ管理においてはシェルスクリプトを書ける事、それは大きな武器だと再認識。


半袖 at 13:55|PermalinkComments(0)TrackBack(0)

2009年07月09日

10分でredemineのホスティングサービスを作る

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

概要

プロジェクトおよび顧客の数だけ増えて行きそうだったので、 今後の為に、量産しやすい仕組みを作ってみた。

  • 「http://$(案件名).redmine.example.jp/」でアクセスする事を想定
  • 案件名指定でredmineを追加可能にする

作業環境

作業内容

■インスタンス作成

▼domU作成

$ sudo xen-create-image --ip=192.0.2.41 --gateway=192.0.2.1 --netmask=255.255.255.0 --hostname=redmine
$ sudo xm create -c /etc/xen/domains/redmine.cfg

▼rootパスワード変更

# passwd

▼作業アカウント作成

# groupadd redmine
# useradd -d /home/redmine -s /bin/bash -m -g redmine redmine
# passwd redmine
# exit

一旦ログアウトし、PuTTY等を使い、redmineアカウントでSSH接続


■MySQL設定

▼文字コードをutf8にする

$ cd /etc/mysql/
$ sudo cp -pi my.cnf my.cnf.0
$ diff my.cnf.0 my.cnf
21a22
> default-character-set = utf8
42c43,45
< language     = /usr/share/mysql/english
---
> #language    = /usr/share/mysql/english
> language     = /usr/share/mysql/japanese
> default-character-set = utf8
$ sudo /etc/init.d/mysql restart

■passenger環境構築

▼環境構築時に必要とされるパッケージをインストール

$ sudo apt-get install apache2-mpm-prefork mysql-server mysql-client dnsmasq ruby rdoc irb ri
$ sudo apt-get install apache2-prefork-dev ruby-dev make g++ libopenssl-ruby subversion

$ cd /tmp
$ wget http://ftp.us.debian.org/debian/pool/main/libg/libgems-ruby/rubygems1.8_1.3.4-1_all.deb
$ wget http://ftp.us.debian.org/debian/pool/main/libg/libgems-ruby/rubygems_1.3.4-1_all.deb
$ suod dpkg -i *.deb

2009/07/07時点では、rubygems関連パッケージのバージョンは1.3.4-1。必要に応じて変更。

▼ユーザー共通環境変数設定

$ sudo vi /etc/environment
$ diff /tmp/environment /etc/environment
0a1,2
> PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
> LANG="en_US.UTF-8"

▼railsをインストール(RedMine-0.8はrails-2.1.2に依存)

$ sudo GEM_HOME=/usr/local/gems gem install rails --no-ri --no-rdoc --version=2.1.2

▼passengerをインストール

$ sudo GEM_HOME=/usr/local/gems gem install passenger --no-ri --no-rdoc

▼passengerをビルド

$ cd /usr/local/gems/gems/passenger-2.2.4/; pwd
/usr/local/gems/gems/passenger-2.2.4
$ sudo GEM_HOME=/usr/local/gems ./bin/passenger-install-apache2-module

▼apache2用設定

$ sudo vi /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /usr/local/gems/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
PassengerRoot  /usr/local/gems/gems/passenger-2.2.4
PassengerRuby /usr/local/bin/passenger_ruby.sh

▼passenger用ラッパースクリプト作成

$ sudo vi /usr/local/bin/passenger_ruby.sh
#!/bin/sh
. /etc/environment
export RUBYLIB GEM_HOME
exec /usr/bin/ruby $@
$ sudo chmod 755 /usr/local/bin/passenger_ruby.sh

▼passengerモジュールを読み込み対象に追加

$ sudo /usr/sbin/a2enmod passenger

▼mod_rewriteを使うのでロード対象モジュールに追加

$ sudo /usr/sbin/a2enmod rewrite

▼apache2を再起動

$ sudo /etc/init.d/apache2 force-reload

■Redmineの設定

▼redmine用ディレクトリ準備

$ cd /home/redmine
$ mkdir etc
$ mkdir etc/apache2
$ mkdir etc/redmine
$ mkdir lib

▼redmineのスケルトンを用意

$ cd /home/redmine/etc/redmine
$ svn checkout http://redmine.rubyforge.org/svn/branches/0.8-stable skel

▼make-redmine.shを作成

$ cd /home/redmine
$ vi make-redmine.sh
#!/bin/sh
#
# http://blog.hanosde.org/
#
GEM_HOME=/usr/local/gems

name=$1
prefix=/home/redmine
libdir=${prefix}/lib
etcdir=${prefix}/etc
domain=redmine.example.jp
fqdn=${name}.${domain}

echo fqdn:${fqdn}

# check
[ -z "${name}" ] && { exit 1; }
[ -d "${libdir}/${name}" ] && { exit 1; }

# rsync
rsync -au ${etcdir}/redmine/skel/ ${libdir}/${name}

# database.yml
cat <<EOS | tee ${libdir}/${name}/config/database.yml
production:
  adapter: mysql
  database: redmine_${name}
  host: localhost
  socket: /var/run/mysqld/mysqld.sock
  username: root
  password:
  encoding: utf8
EOS

# create database
mysqladmin -uroot create redmine_${name}

# initialize redmine
cd ${libdir}/${name}
/usr/local/gems/bin/rake db:migrate RAILS_ENV=production
echo en | /usr/local/gems/bin/rake redmine:load_default_data RAILS_ENV=production

# apache virtualhost config
cat <<EOS | tee ${etcdir}/apache2/${fqdn}
<VirtualHost *:80>
  ServerName ${fqdn}

  DocumentRoot ${libdir}/${name}/public
  ErrorLog  /var/log/apache2/${fqdn}-error.log
  CustomLog /var/log/apache2/${fqdn}-access.log combined

  RailsEnv production
</VirtualHost>
EOS

# ensite virtualhost
sudo ln -s ${etcdir}/apache2/${fqdn} /etc/apache2/sites-available/
sudo /usr/sbin/a2ensite ${fqdn}

exit 0

▼実行権限付与

$ chmod +x make-redmine.sh

▼apache2リロード

$ sudo /etc/init.d/apache2 reload

■Redmine VirtuaHostを新規追加

▼例として、foo.redmine.example.jpを追加

$ cd /home/redmine
$ ./make-redmine.sh foo
$ sudo /etc/init.d/apache2 reload

その後は http://foo.redmine.example.jp/ へアクセスして表示を確認


あとがき

ひとまずredmineを使えるようにするまでの作業が面倒だった。

もしこの先に何かをやるならば、
Webインターフェースから追加する仕組み、アカウント発行などの仕組みを取り入れればいいだろう。

個人的には追加スクリプトを作る所までで要件を満たせるので終わりにしておく。



半袖 at 12:20|PermalinkComments(0)TrackBack(0)

2009年07月06日

5分でSambaを使ったファイルサーバを作る

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

作業環境

ファイルサーバが必要になったのでSambaで構築。

  • Debian GNU/Linux 5.0.2
  • Samba 2:3.2.5-4lenny6

作業内容

▼domU作成

$ sudo xen-create-image --ip=192.0.2.10 --gateway=192.0.2.1 --netmask=255.255.255.0 --hostname=fileserver

▼domU起動

$ sudo xm create -c /etc/xen/domains/fileserver.cfg

▼rootパスワード設定

# passwd

▼作業アカウント作成

# groupadd hansode
# useradd -d /home/hansode -s /bin/bash -m -g hansode hansode
# passwd hansode
# exit

ここで一度抜けてPuTTYなどでssh接続

▼パッケージアップグレード

$ sudo apt-get update && sudo apt-get dist-upgrade

▼sambaをインストール

$ sudo apt-get install samba
WORKGROUP: HANSODE
DHCPうんぬん: NO
$ sudo apt-get install samba-tools
$ sudo apt-get install samba-doc

▼UNIXアカウント登録

$ for user in nagasode g-pan
echo ... ${user}
sudo useradd -g axsh -b /bin/true -d /home/${user} -m ${user}
sudo smbpasswd -a ${user}
done

▼sambaの設定変更

$ cd /etc/samba
$ sudo mkdir old
$ sudo cp -pi smb.conf old/smb.conf.`date +%Y%m%d-%s`.$$

$ sudo vi smb.conf
$ diff old/smb.conf.20090703-1246590736.1274 smb.conf
242c242,243
<    read only = yes
---
>    #read only = yes
>    read only = no
281,288c282,289
< [printers]
<    comment = All Printers
<    browseable = no
<    path = /var/spool/samba
<    printable = yes
<    guest ok = no
<    read only = yes
<    create mask = 0700
---
> #[printers]
> #   comment = All Printers
> #   browseable = no
> #   path = /var/spool/samba
> #   printable = yes
> #   guest ok = no
> #   read only = yes
> #   create mask = 0700
292,297c293,298
< [print$]
<    comment = Printer Drivers
<    path = /var/lib/samba/printers
<    browseable = yes
<    read only = yes
<    guest ok = no
---
> #[print$]
> #   comment = Printer Drivers
> #   path = /var/lib/samba/printers
> #   browseable = yes
> #   read only = yes
> #   guest ok = no
325a327,332
> [project]
>    comment = axsh fileserver project
>    path = /home/samba/project
>    guest ok = no
>    read only = no
>    share modes = yes
326a334,335
>    create mask = 2770
>    directory mask = 2770

▼共有ディレクトリ準備

$ sudo mkdir -p /home/samba/project
$ sudo chgrp hansode /home/samba/project
$ sudo chmod 2770 /home/samba/project

▼samba再起動

$ sudo /etc/init.d/samba restart


半袖 at 14:20|PermalinkComments(0)TrackBack(0)

2009年02月28日

さくらレンタルサーバでDebianを使う (環境構築編)

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

さくらレンタルサーバでDebianを使うの続き

chroot環境構築時の方針は下記のものとする

  • host環境は可能な限り手をつけない
  • デーモンプロセスはdaemontoolsで管理する物とする
  • host環境用sshとguest環境用sshをそれぞれ用意する

作業内容

作業対象を明確化するため、プロンプトで示す

プロンプト内用
debianDebianがインストールされている別サーバ
hostchroot呼び出し元
guestchroot環境下

chroot環境構築下準備
debian環境にてchrootツリーを作っておく

debian$ mkdir sid
debian$ sudo /usr/sbin/debootstrap sid sid
debian$ sudo tar zcvpf sid.tar.gz sid
debian$ scp sid.tar.gz admin@192.0.2.205:~/

host環境にてchroot用ディレクトリ作成

host$ su
host# cd /home
host# mkdir -p chroot/debian
host# cd chroot/debian

debianツリーを伸長

host# tar zxvpf sid.tar.gz

子環境用に必要な物をマウント

host# mount -t proc proc /home/chroot/debian/sid/proc
host# mount -t devpts devpts /home/chroot/debian/sid/dev/pts
host# mount -o bind /dev /home/chroot/debian/sid/dev
host# mount -o bind / /home/chroot/debian/sid/mnt

リゾルバ設定

host# cp -pi /etc/resolv.conf sid/etc/.

パッケージを更新

guest# export PATH=/bin:/usr/bin:/sbin:/usr/sbin
guest# apt-get update
guest# apt-get dist-upgrade

daemontools起動設定

guest# apt-get install daemontools
guest# exit
host# vi /etc/inittab
SV:123456:respawn:/usr/sbin/chroot /home/chroot/debian/sid /usr/bin/svscanboot
host# /sbin/telinit q

親環境のhttpdを停止

host# /sbin/chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
host# /sbin/chkconfig --del httpd
host# /sbin/chkconfig --list httpd
service httpd supports chkconfig, but is not referenc

OpenSSH設定

guest# apt-get install openssh-server
guest# apt-get install ucspi-tcp
guest# cd /etc/service
guest# ./addsv.sh ssh
guest# cd .ssh; pwd
guest# vi run

※addsv.shはdaemontoolsの/service/に、サービスを追加するスクリプト「addsv.sh」 を参照。

#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH

exec 2>&1
sleep 3

exec envdir ./env sh -c '
  /usr/bin/tcpserver -HRDl0 -x ./tcp.ssh.cdb \
  -u 0 -g 0 0 ${PORT:-2022} /usr/sbin/sshd -i -e
'
guest# mkdir env
guest# echo 2022 > env/PORT
guest# echo :allow > tcp.ssh
guest# tcprule ./tcp.ssh.cdb ./tcp.ssh.tmp < ./tcp.ssh
guest# cd ../; pwd
guest# mv -i .ssh ssh

これ以降の作業は2022番ポートを指定してssh接続。
必要に応じてパッケージをインストールして行く。


まとめ

  • hostのinittabにてguestのsvscanを実行するのがポイント
  • chrootのツリーを他サーバへ持っていけば簡単に論理移転可能と言うメリットがある


半袖 at 17:15|PermalinkComments(0)TrackBack(0)

2009年02月15日

さくらレンタルサーバでDebianを使う

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

調べてみると「Fedora 7」だった

使われずにいた「さくらのレンタルサーバ」を使って良いと言われ、
サーバ状況を確認してみると「Fedora7」

  • 可能であればDebianにしたい
  • 1年後に論理移転予定
  • 今ある環境には手をつけたくない

これを実現させる為に自分が選んだのは、chroot。
chroot環境内にDebianを用意する。

chrootの利点

  • 親環境の古いライブラリに依存しない
  • Xenとは違い、無駄なオーバーヘッドが無い

今回はネットワークリソースが親環境と共有されても問題が無いので、
chrootを使う事で要求を満たせる。

具体的な構築方法は、また次回



半袖 at 17:45|PermalinkComments(0)TrackBack(0)

2009年01月20日

X-Powered-By: PHP/x.y.z を非表示化

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

作業概要

HTTPレスポンスヘッダーにPHPのバージョンを表示させたくないと言うので隠ぺい作業。
※Serverフィールドに出て来るPHPのバージョン情報非表示設定は今回の議論の対象外。

  • php.iniで「expose_php = Off」にする
  • Apacheをreloadして設定繁栄

作業内容

ディストリビューション名、バージョン確認

-bash-3.2# cat /etc/redhat-release
CentOS release 5.2 (Final)

php.iniのバックアップ

-bash-3.2# cp -pi /etc/php.ini /etc/php.ini.0

php.ini編集

-bash-3.2# vi /etc/php.ini
-bash-3.2# diff /etc/php.ini.0 /etc/php.ini
293c293,294
< expose_php = On
---
> ;expose_php = On
> expose_php = Off

設定反映前の状態確認

-bash-3.2# HEAD http://localhost/ | egrep ^X
X-Powered-By: PHP/5.2.6

設定反映

-bash-3.2# /etc/init.d/httpd reload
Reloading httpd:                                           [  OK  ]

設定反映後の状態確認

-bash-3.2# HEAD http://localhost/ | egrep ^X

出力されていない事を確認出来た。


プログラミングPHP 第2版
Rasmus Lerdorf Kevin Tatroe Peter MacIntyre
オライリー・ジャパン
売り上げランキング: 55870


半袖 at 11:05|PermalinkComments(0)TrackBack(1)

2008年10月06日

Amazon EC2のデータをS3へバックアップ

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

無くなってからでは遅い

消えたら困る大事なデータを定期的にS3へバックアップする

同期ツールをインストール

今回はaws-s3を採用

$ gem install aws-s3

同期スクリプト配置

  • 保持期間は1か月分
  • ファイル名には日付(+%d)を入れておく
  • 一カ月後には同ファイル名でファイルが生成され、上書きされて行く
  • 例)
    • mysql_redmine.sql.01.gz
    • svn_ec2.01.gz
$ cd /root
$ vi ec2-daily-backup.sh
-----
#!/bin/sh
 
# env.
AWS_ACCESS_KEY_ID=**********
AWS_SECRET_ACCESS_KEY=**********
export AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY
 
#
# vars.
#
theday=$(date +%d)
 
## mysql
db_name=redmine
db_backup_gzip=/var/backup/daily/mysql/mysql_${db_name}.sql.${theday}.gz
## subversion
svn_name=ec2
svn_backup_gzip=/var/backup/daily/svn/svn_${svn_name}.${theday}.gz
 
# dump
mysqldump --default-character-set=utf8 -uroot ${db_name} | gzip > ${db_backup_gzip}
svnadmin dump /home/svn/repos/ec2/ | gzip > ${svn_backup_gzip}
 
# sync
s3sync -v ${db_backup_gzip}  redmine:backup
s3sync -v ${svn_backup_gzip} redmine:backup

実行権限付与

$ chmod +x ./ec2-daily-backup.sh

一度実行して確認

$ sh -n ./ec2-daily-backup.sh 
$ ./ec2-daily-backup.sh 

更にS3Foxなどで確認

crontabのエントリ修正

エントリ追加

$ crontab -e
----
0 0 * * * /root/ec2-daily-backup.sh >/dev/null 2>&1
----

エントリの内容確認

$ crontab -l


半袖 at 14:50|PermalinkComments(0)TrackBack(0)

Amazon EC2をS3へフルバックアップ

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

概要

  • EC2をA3へバックアップする手順をまとめた文書

補足

  • EC2はインスタンスを停止させるとデータがクリアされてしまうのでデータのバックアップが必要
  • そこでEC2用ストレージであるS3へバックアップを行う
  • 今回はAMIまるごとバックアップ

作業内容

EC2のイメージのバックアップファイル作成
$ ec2-bundle-vol -d /mnt -k /mnt/pk-*****.pem -c /mnt/cert-*****.pem -u 2337-8359-0872
Please specify a value for arch [i386]: <--- エンター
Copying / into the image file /mnt/image...
Excluding:
         /sys
         /proc
         /proc/sys/fs/binfmt_misc
         /dev
         /media
         /mnt
         /proc
         /sys
         /mnt/image
         /mnt/img-mnt
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.002869 seconds, 365 MB/s
mke2fs 1.39 (29-May-2006)
/etc/fstab:
         # Legacy /etc/fstab
         # Supplied by: ec2-ami-tools-1.3-20041
         /dev/sda1 /     ext3    defaults 1 1
         /dev/sda2 /mnt  ext3    defaults 0 0
         /dev/sda3 swap  swap    defaults 0 0
         none      /proc proc    defaults 0 0
         none      /sys  sysfs   defaults 0 0
Bundling image file...

.....

Creating bundle manifest...
ec2-bundle-vol complete.

ファイルが作成されている事を確認

  • image.manifest.xml
  • image.part.*
S3へアップロード

先の手順で生成されたimage.manifest.xmlが必要

  • -b でバケット名を指定可能
  • -aでアクセスキーを指定
  • -sで秘密アクセスキー指定
# ec2-upload-bundle -b centos5.0-2008081101 -m /mnt/image.manifest.xml -a アクセスキー -s 秘密アクセスキー
Uploading bundled image parts to https://s3.amazonaws.com:443/centos5.0-2008081101 ...
Uploading manifest ...
Uploaded manifest to https://s3.amazonaws.com:443/centos5.0-2008081101/image.manifest.xml.
Bundle upload completed.
AMIへ登録

FirefoxのアドオンElasticfoxを利用

  1. タブから「AMIs and Instances」を選択
  2. 「Machine Images (AMIs)」から「+」をクリック
  3. 「AIM Manifest Path:」に 「centos5.0-2008081101/image.manifest.xml」を指定して「OK」
  4. 「Machine Images (AMIs)」に「centos5.0-2008081101/image.manifest.xml」がある事を確認


半袖 at 14:30|PermalinkComments(2)TrackBack(0)

2008年10月03日

手頃なメールサーバを作る(Postfix+Dovecot+MySQL+Postfixadmin)

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

改めてメールサーバ構築のまとめ


久しぶりにメールサーバの設定作業を行った。
自分自身の復習目的に、以前書いたメールサーバ構築関連エントリのまとめなおしてみた。
自宅や中小企業用にはこれで間に合うのではないだろうか。


メールサーバ構成概要


postadmin
主な機能
  • Submissionポート
  • SMTP-Auth
  • IMAP4
  • メールアカウント管理ツール
  • 複数バーチャルドメイン
前提条件として下記アプリケーションがインストール済みであるものとする

PostfixAdminの設定


環境概要

PostfixAdmindirectory/var/lib/postfixadmin/
URIhttp://postfixadmin.example.com/
Mailbox$(domain)/$(local-part)
MySQLdb_hostlocalhost
db_namepostfixadmin
db_userpostfix
db_pass********

ユーザー用Maildirディレクトリデザイン補足

今回、
  • 『$(local-part)@$(domain)』のメールボックスを、
  • 『$(domain)/$(local-part)』となるようにする
これは単にvpopmailの構成が好きだったから。

PostfixAdminで設定する。
設定すべき変数が下記2つ。
$CONF['domain_path']'NO'(無し)
'YES'$(domain)/
$CONF['domain_in_mailbox']'YES'$(local-part)@$(domain)
'NO'$(local-part)

今回の設定。
$CONF['domain_path']'YES'
$CONF['domain_in_mailbox']'NO'

作業内容

# mkdir -p /var/lib/postfixadmin
# cd /var/lib/postfixadminostfixadmin; pwd
/var/lib/postfixadmin
# wget http://downloads.sourceforge.net/postfixadmin/postfixadmin_2.2.0.tar.gz?modtime=1209482958&big_mirror=0
# tar zxvf postfixadmin_2.2.0.tar.gz
# ln -s postfixadmin-2.2.0 htdocs
Apacheのconfig生成
# cd /etc/httpd/conf/vhosts-available/; pwd
/etc/httpd/conf/vhosts-available
# vi postfixadmin.example.com
.....(省略).....

# cd ../; pwd
/etc/httpd/conf
# ln -s `pwd`/vhosts-available/postfixadmin.example.com `pwd`/vhosts-enabled/
問題なければ反映(reload)
# /usr/sbin/apachectl configtest
Syntax OK
# /etc/init.d/httpd reload
Reloading httpd:                                           [  OK  ]
ここではsetup.phpへアクセス出きることのみを確認。
→ http://postfixadmin.example.com/setup.php
※まだ設定途中なのでエラーが多々出る。

DBアクセス用アカウント作成
$ mysql -uroot
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY '********';
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
PostfixAdminの設定
# pwd
/var/lib/postfixadmin/htdocs
# cp -pi config.inc.php config.inc.php.0
# vi config.inc.php
# diff config.inc.php.0 config.inc.php
31c31
< $CONF['configured'] = false;
---

> $CONF['configured'] = true;
51,53c51,53
< $CONF['database_host'] = 'localhost';
< $CONF['database_user'] = 'postfixadmin';
< $CONF['database_password'] = 'postfixadmin';
---
> $CONF['database_host'] = 'localhost';
> $CONF['database_user'] = 'postfix';
> $CONF['database_password'] = '********';
123c123
< $CONF['domain_path'] = 'NO';
---
> $CONF['domain_path'] = 'YES';
129c129

< $CONF['domain_in_mailbox'] = 'YES';
---
> $CONF['domain_in_mailbox'] = 'NO';
再び http://postfixadmin.example.com/setup.php を確認。
  • 各項目がOKとなる事を確認。
  • 管理アカウント作成を要請されるので、管理アカウントを作成する。
  • この時点でPostfixAdminがtableを生成してくれる
設定内容に問題がなければsetup.phpをリネームする。
※ここでsetup.phpが残っていると管理画面へアクセス出来ない。
# mv -i setup.php setup.php.deleted
管理画面へアクセス出切る事を確認する。
→ http://postfixadmin.example.com/

この時点でドメインとメールアカウントの管理を行えるようになる。
しかし、まだメール配送(Postfix)の設定がない。


Postfixの設定


  • vpopmailの様なディレクトリ構成にする
  • SMTP-Authの認証はDovecotに任せる
  • Submissionポート(tcp/587)

設定概要

virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/
設定ファイル/var/lib/vpostmail/etc/*.cf


作業内容

masterにsubmissionポートを追加。
# cd /etc/postfix/
# vi master.cf
> submission inet n       -       n       -       -       smtpd
バーチャルドメイン用アカウント作成。
# /usr/sbin/useradd -u 12000 -s /bin/false vpostmail
バーチャルドメイン用にmain.cf修正
また、SASLの設定も追加する。
# pwd
/etc/postfix
# cp -pi main.cf main.cf.0
# vi main.cf
# diff main.cf.0 main.cf
> virtual_gid_maps = static:12000
> virtual_uid_maps = static:12000
> virtual_mailbox_limit   = 51200000
> virtual_minimum_uid     = 1001
> virtual_transport       = virtual
> virtual_mailbox_base    = /var/lib/vpostmail/domain
> virtual_mailbox_domains = mysql:/var/lib/vpostmail/etc/mysql_virtual_domains_maps.cf
> virtual_mailbox_maps    = mysql:/var/lib/vpostmail/etc/mysql_virtual_mailbox_maps.cf
> virtual_alias_maps      = mysql:/var/lib/vpostmail/etc/mysql_virtual_alias_maps.cf
>
> smtpd_sasl_auth_enable = yes
> smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
> smtpd_sasl_type = dovecot
> smtpd_sasl_path = private/auth
メールボックス用ディレクトリ。
今回は/var/lib/vpostmail/配下に作っていく。
# mkdir /var/lib/vpostmail/
# cd /var/lib/vpostmail/; pwd
/var/lib/vpostmail
# mkdir etc domain
vpostmailアカウントが
domainディレクトリにファイルを書き込むのでオーナーを変更する。
# chown vpostmail:vpostmail domain
Postfix-mysql用設定
# cd etc/; pwd
/var/lib/vpostmail/etc

# vi mysql_virtual_alias_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT goto FROM alias WHERE address='%s'

# vi mysql_virtual_domains_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT description FROM domain WHERE domain='%s'

# vi mysql_virtual_mailbox_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT concat(maildir,'Maildir/') FROM mailbox WHERE username='%s'
/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/としたいので、
concatを用いて「Maildir/」を追加する。
これにより、後に設定するdovecotの管理が簡単になる。

etc配下のconfigにはMySQL用パスワードが載ってるので読めないようにする。
オーナーをpostfixへ変更。
# cd ../; pwd
/var/lib/vpostmail
# chown -R postfix:postfix etc/
# ls -ld etc/
drwx------  2 postfix postfix 4096 May  7 20:35 etc/
設定内容確認
# /etc/init.d/postfix check
問題なければ反映
# /etc/init.d/postfix reload
Reloading postfix:                                         [  OK  ]
送信テスト
$ telnet localhost 25
helo localhost
mail from:foo@example.net
rcpt to:bar@example.com
data
Subject: test

test
test
.
quit
ログ確認

# tail -F /var/log/maillog
.....
エラーが出てなければOK


Dovecotの設定


メールを受信

PostfixはMTAなので、POP3用サーバが別途必要。
今回はMySQLと連動叶なDovecotを使った。


設定概要

virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/
設定ファイル/etc/dovecot-mysql.conf



作業内容

dovecotをMySQL対応にする。
# yum install dovecot-mysql
dovecot.confの修正。
imapとpop3を使えるようにする。
結果的に設定ファイルはシンプルなものになった。
# cd /etc/; pwd
/etc
# cp -pi dovecot.conf dovecot.conf.0
# vi dovecot.conf
protocols = imap pop3

auth default {
  mechanisms = plain
  passdb pam {
  }
  passdb sql {
    args = /etc/dovecot-mysql.conf
  }
  userdb passwd {
  }
  userdb sql {
    args = /etc/dovecot-mysql.conf
  }
  user = root

  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}
MySQL用の設定。
※12000はvpostmailのuidとgid。
# cat /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=********
default_pass_scheme = MD5
user_query = SELECT concat('/var/lib/vpostmail/domain/', maildir) as home, 12000 as uid, 12000 as gid FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' AND active = '1'

設定を反映させる
[root@www etc]# /etc/init.d/dovecot reload
Stopping Dovecot Imap:                                     [  OK  ]
Starting Dovecot Imap:                                     [  OK  ]
POPの確認
$ telnet localhost 25
user foo@example.com
pass ********
list
retr 1
.....
ここで認証が通れば問題なし。
複数バーチャルドメイン対応メール環境が出来上がった。


まとめ


  • この構成にはスパムメール対策がない事に気づいた
  • そのうちスパムメール対策も追加した物をまとめる…かも知れない



半袖 at 16:15|PermalinkComments(1)TrackBack(0)

2008年10月01日

mongrel_clusterを使わず、似たような事をdaemontoolsで実現させる

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

mongrel_clusterのメモでまとめたとおり


mongrel_clusterは
  • 単に複数mongrel_railsの起動を起動管理
  • 設定をYAML形式で記述可能
  • フォアグラウンドでは起動させられない

mongrel_cluster


daemontoolsを導入するに辺り、
fghackを使ってmongrel_clusterを管理すると言うてがあるのだろうけど、
自分はmongrel_clusterを使わない事にした。

mongrel_clusterが何をやっているのかを知ってからは、
mongrel_clusetr対する熱がすっかり冷めてしまったのだ…。


課題


何を解決しなければ行けないのかを上げてみる
  • serversの扱いをどうするのか
  • YAMLの設定項目はどのように設定するか
こんな所だろう。


解決策


daemontoolsをある程度使っている人ならば恐らく当たり前な事。
  • serversの数だけserviceを作成
  • YAMLの設定項目はenvdirで設定する
図解するとこうなる。

mongrel_cluster


作業内容


サービス追加
# cd /servie/
# ./addsv.sh mongrel_cluster-0
※addsv.shはdaemontoolsの/service/に、サービスを追加するスクリプト「addsv.sh」 を参照。


runファイル設定
# cd /service/.mongrel_cluster-0
# vi run
ここではenvuidgidではなく、USERとGROUPを指定する。
管理の都合など、どうしてもUSERで指定するアカウントで環境変数を指定したいと言う方はenvuidgidを使って下さい。
#!/bin/sh

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH

exec 2>&1
sleep 10

exec envdir ./env sh -c '
 [ -d "${CHDIR}" ] || exit 1
 id "${USER}"      || exit 1
 exec mongrel_rails start \
  -e ${ENVIRONMENT:-DEVELOPMENT} \
  -a ${ADDRESS:-127.0.0.1} \
  -p ${PORT:-3000} \
  -c ${CHDIR} \
  -r ${ROOT:-public} \
  --user  ${USER} \
  --group ${GROUP} \
'
envdirディレクトリ作成
# mkdir env
# cd env
envdir用ファイル作成
# echo 127.0.0.1 > ADDRESS
# echo /var/lib/rails/project/ > CHDIR
# echo production > ENVIRONMENT
# echo www-data > GROUP
# echo 8080 > PORT
# echo rails > USER
runの確認
# cd ../
# sh -n ./run
# sh -x ./run
問題無ければサービス対象にする
# cd /service
# mv -i .mongrel_cluster-0 mongrel_cluster-0
同じ作業を繰り返し、
ノード名とPORTファイルの設定が違うmongrelサービスのノードを増加させて行く。

ノード名env/PORT
/service/mongrel_cluster-08080
/service/mongrel_cluster-18081
/service/mongrel_cluster-28082
/service/mongrel_cluster-38083


あくしゅ!はこの仕組みで管理してます。


まとめ


mongerel_clusterを使わないメリット。
  • daemontoolsにより、プロセスが異常終了しても起動してくれる
  • グループの中の特定ノードだけ起動停止が可能になる
  • ログの扱いはmultilog任せ
デメリットは…考えない。
daemontoolsは素敵です。


関連リンク



半袖 at 16:25|PermalinkComments(0)TrackBack(0)

2008年09月30日

mongrel_clusterのメモ

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

mongrel_cluster
  • mongrel_cluster_ctlがmongrel_railsを起動管理する
  • 設定ファイルはYAML形式
    • 代表的設定項目
      • 起動サーバ数
      • 開始ポート番号
      • 起動サーバ数が2以上であれば、
        「開始ポート番号+1」をポート番号として2つ目のmongrel_railsを起動
  • mod_proxy_balancerなどのロードバランサーと組み合わせた環境向け



思い込み


「cluster」と言うから素晴らしい仕組みだと思い込んでいたら、大したことはない。
  • 単に複数mongrel_railsの起動を起動管理
  • 設定をYAML形式で記述可能
  • フォアグラウンドでは起動させられない
daemontoolsでmongrel_clusterを管理しようと思ったけど、無理だと分かった。
さて困ったな。


半袖 at 00:00|PermalinkComments(2)TrackBack(1)

2008年08月12日

CentOSでタイムゾーンをJSTへ変更する

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

そう言う事か


00:00に実行されるようcronを設定し、一夜が明けた。

確認してみると、動いてない…?
何故だ…と思ったら、タイムゾーンがJSTになっていなかった。

# cp /usr/share/zoneinfo/Japan /etc/localtime
# date

これで解決。


CentOS徹底入門 第2版 (DVD付)
飛田 伸一郎 中島 能和
翔泳社
売り上げランキング: 8472


半袖 at 10:55|PermalinkComments(1)TrackBack(0)