• LVMパーティションを拡張する。

    自宅のXen仮想サーバー機でLVMパーティションのキャパシティがオーバーしました。
    このままでは仕事にならないので、LVMパーティションの容量を拡張します。

    LVMパーティションを拡張する。

    ・現在のサイズに8GBを追加で割り当てる。
    
    # lvextend -L+8G /dev/VolGroup00/LogVol02
    

    ・パーティションを50GBに拡張する。

    # lvextend -L 50G /dev/VolGroup00/LogVol02
    

    ext2/ext3 のファイルシステムをチェックする

    # e2fsck -f /dev/VolGroup00/LogVol02
    

    ext2 / ext3 ファイルシステムをリサイズする

    # resize2fs /dev/VolGroup00/LogVol02
    

    *)同時にフォーマットもされる。


  • MySQLのインストール (yum)

    yumを使ってCentOSにMySQLをインストールします。

    ・MySQLサーバーとクライアントをインストールします。

    # yum install -y mysql mysql-server
    

    ・/etc/my.cnf 編集

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1
    
    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    ↓文字化け対策のため2行追加
    
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Default to using old password format for compatibility with mysql 3.x
    # clients (those using the mysqlclient10 compatibility package).
    old_passwords=1
    
    default-character-set=utf8  # デフォルトのキャラセットをutf8に設定
    skip-character-set-client-handshake  # 余計な文字コード変換しない
    
    # Disabling symbolic-links is recommended to prevent assorted security risks;
    # to do so, uncomment this line:
    # symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    ・MySQLサーバー起動

    # service mysqld start
    

    ・OS起動時にMySQLも起動する。

    # chkconfig mysqld on
    

    [/text]


  • Apache2.2+PHP5.2 完全インストール – part1 – Apacheインストール

    さて今回は、サーバー構築のメジャーどころ。ウェブサーバーを構築します。

    対象OS : CentOS, RH*, Fedora, FreeBSD, NetBSD, OpenBSD

    ※)途中 yum コマンドを使います。*BSD系OSの場合は yumの変わりにPortsツリーを使いインストールしてください。

    ウェブサーバーの構築には、Apache 2.2 系列と、今をときめく PHP 5.2 系列を導入します。

    ■準備

    ・作業ディレクトリ作成

    # mkdir -p /usr/local/src/web
    # cd /usr/local/src/web
    

    ・httpd-2.2.11.tar.gz をダウンロード

    # wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.11.tar.gz
    

    ・php-5.2.8.tar.gz をダウンロード

    # wget http://jp.php.net/get/php-5.2.8.tar.gz/from/jp2.php.net/mirror
    

    ■Apache2.2.*のインストール

    ・Apacheを展開

    # tar zxvf httpd-2.2.11.tar.gz
    # cd httpd-2.2.11
    

    ・コンフィギュア

    # ./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-ssl
    

    =====configure オプション詳細=====
    –prefix=/usr/local/apache2/ : インストール場所を /usr/local/apache2
    –enable-so : DSOモジュールを有効化
    –enable-rewrite : Rewriteを有効化。(リダイレクトなど)
    –enable-ssl : SSLを有効にする。
    ======================

    ■エラーがでたら・その1

    ...
    ...
    configure: error: in `/usr/local/src/web/httpd-2.2.11/srclib/apr':
    configure: error: no acceptable C compiler found in $PATH
    See `config.log' for more details.
    configure failed for srclib/apr
    #
    

    このエラーが出たら Cコンパイラが見当たらないという事なので、C コンパイラがインストールされていない可能性があります。CentOSを含む RHのクローンOS であれば、次のようにして Cコンパイラをインストールします。

    # yum install -y gcc gcc-c++
    

    インストールが完了したら、再度 configure。

    ■エラーがでたら・その2

    ...
    ...
    checking for openssl/ssl.h... no
    no OpenSSL headers found
    checking for SSL-C version... checking sslc.h usability... no
    checking sslc.h presence... no
    checking for sslc.h... no
    no SSL-C headers found
    configure: error: ...No recognized SSL/TLS toolkit detected
    #
    

    このエラーは、OpenSSLのヘッダファイルが見つからない事を意味します。OpenSSLのヘッダファイルをインストールします。

    # yum install -y openssl-devel
    

    インストールが完了したら、再度 configure。

    では、コンパイルします。

    ・コンパイル

    # make
    

    ・インストール

    # make install
    

    ■設定

    ・iptablesで80番ポートを開放 (RHのクローンの場合のみ)

    # vi /etc/sysconfig/iptables
    

    ・/etc/sysconfig/iptables

    # vi /etc/sysconfig/iptables
    
    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    ...
    

    ↓追加

    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    ...
    

    ・iptables を再起動

    # service iptables restart
    

    ここまで進んだら、一度動作確認を行っておきます。
    ・Apacheの動作確認。

    # /usr/local/apache2/bin/apachectl start
    

    ブラウザを使い、http://IPアドレス/ にアクセスしてください。
    Apacheが正常に動作している事を示す「It works!」と表示されるハズです。

    確認できたらプロセスを一度終了させておきます。

    # /usr/local/apache2/bin/apachectl stop
    

    ・自動起動設定 – RHクローンの場合

    # cp build/rpm/httpd.init /etc/rc.d/init.d/httpd
    # chkconfig --add httpd
    # chkconfig httpd on
    

    そして、この httpd というファイルですが、$PREFIXを指定した構成でインストールした場合、httpd.conf のパスがデフォルトではなくなっているので、httpd内に記述された httpd.conf のパスがずれてしまいます。
    そのせいで、「設定ファイルがありません」などとエラーを吐きますので、正確なパスへと修正してください。

    このサイトページ通りにインストールした場合、httpd.conf のパスは /usr/local/apache2/conf/httpd.conf となります。

    同じように httpd コマンドへのパスも修正します。
    /usr/local/apache2/bin/httpd

    ・自動起動設定 – FreeBSD、NetBSD、OpenBSDの場合
    /etc/rc.local に次の行を追加します。

    # vi /etc/rc.local
    

    ========== /etc/rc.local (SSLなし) ==========

    # Apache
    if [ -x /usr/local/apache2/bin/apachectl ]; then
    echo -n ' Apache start\n';
    /usr/local/apache2/bin/apachectl start
    fi
    

    ========== /etc/rc.local (SSLあり) ==========

    # Apache
    if [ -x /usr/local/apache2/bin/apachectl ]; then
    echo -n ' Apache start\n';
    /usr/local/apache2/bin/apachectl startssl
    fi
    

    ■Apacheサーバー設定

    Apache2.2から設定ファイルの配置が変わりました。
    ベースの設定ファイルが $PREFIX/conf/httpd.conf というファイルで、種別ごとの詳細設定は $PREFIX/conf/extra/httpd-*.conf といったように、分割されました。

    ■Apacheサーバー設定 – CGIの利用
    CGIを利用する場合は、httpd.conf にあります。
    ・httpd.conf

    #AddHandler cgi-script .cgi
    

    という行の先頭のコメントアウトを外し、有効にします。

    ※)この場合、Perl以外にも /bin/sh や C言語で作成したCGIも実行されます。
    Perlのみに抑制したい場合は、mod_perl や File ディレクティブなどで制御してください。

    ■Apacheサーバー設定 – 最低限のセキュア設定。

    ・conf/extra/httpd-default.conf

    ServerSignature Off
    

    conf/extra/httpd-default.conf にあります、ServerSignature ディレクティブを On から Off に設定します。この ServerSignature では、404やディレクトリのインデックスを表示するページで、ApacheやOSのバージョンを出力するかを設定できます。Off とすることで出力を抑制できます。

    ServerTokens ProductOnly
    

    conf/extra/httpd-default.conf にあります、ServerTokens ディレクティブを Full から ProductOnly に設定します。 ServerTokens では、HTTPヘッダにApacheのバージョン番号を含めるかを指定します。Apacheのバージョンはセキュリティの為に、公開しない方が望ましいでしょう。

    次回は、PHPをインストールします。

    | 1 | 2 | >>


  • Xen – ゲストOSに複数のNICを認識させる

    今回は、XenのゲストOSに eth0、eth1 などの複数のネットワークインターフェイスを割り当てます。

    (まだ Xen のインストールもご紹介いていませんが・・・)

    次のような要件の時に必要になります。

    ・ゲストOSを 複数のネットワークセグメントに参加させたい場合。
    ・限りあるグローバルIPアドレスを、サービスを提供するゲストOSだけに割り当てたい場合。

    では、どのようにして追加するのでしょうか。
    まずは、大まかな流れから。

    1. ホストOSに2枚目以降のブリッジデバイスを追加。
    2. xend 再起動。
    3. ゲストOSのインストール、または再設定。

    このような流れになります。
    次は、実際にやってみます。

    ■ 1.ホストOSに2枚目以降のブリッジデバイスを追加

    通常、Xenを起動する時は、/etc/xen/scripts/network-bridge というスクリプトが走ります。network-bridgeは、xenbr0 というブリッジデバイをOSにエントリします。デフォルトでは network-bridge は、xenbr0 というブリッジデバイスを1つだけ登録します。このブリッジデバイスは、ホストOSが接続されている物理ネットワークセグメントに ゲストOSを参加させ るのに必要です。ホストOSとゲストOSのブリッジのような働きをします。

    そして、ゲストOSで複数のNICを利用したい場合は、ネットワークインターフェイス分だけ ブリッジデバイスを用意します。

    まずは、ブリッジデバイスの用意。
    ブリッジデバイス制御スクリプトを /etc/xen/scripts/network-bridge から /etc/xen/scripts/network-bridge.multi に変更します。

    
    # vi /etc/xen/xend-config.sxp
    
    
    
    ...
    (network-script network-bridge)
    ...
    

    ↓修正

    
    ...
    (network-script network-bridge.multi)
    ...
    
    

    そして、 /etc/xen/scripts/network-bridge.multi を用意します。

    # vi /etc/xen/scripts/network-bridge.multi
    
    
     #!/bin/sh
     set -e
    
    OP=$1
     shift
    
    script=/etc/xen/scripts/network-bridge
    
    case ${OP} in
     start)
     $script start vifnum=0 bridge=xenbr0 netdev=eth0
     $script start vifnum=1 bridge=xenbr1 netdev=eth1
     $script start vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    stop)
     $script stop vifnum=0 bridge=xenbr0 netdev=eth0
     $script stop vifnum=1 bridge=xenbr1 netdev=eth1
     $script stop vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    status)
     $script status vifnum=0 bridge=xenbr0 netdev=eth0
     $script status vifnum=1 bridge=xenbr1 netdev=eth1
     $script status vifnum=2 bridge=xenbr2 netdev=eth2
     ;;
    
    *)
     echo 'Unknown command: ' ${OP}
     echo 'Valid commands are: start, stop, status'
     exit 1
     esac
    

    実行権限を付与。

    
    # chmod +x /etc/xen/scripts/network-bridge.multi
    
    

    ■ 2. xend 再起動

    そして、xend を再起動します。

    
    # service xend restart
    
    

    これで、xenbr0、xenbr1、xenbr2 という3つのブリッジデバイスが用意できました。
    ifconfig で確認できます。

    
    # ifconfig
    
    

    ■ 3. ゲストOSのインストール、または再設定

    次は、ゲストOSのインストールです。

    
    # virt-install -n guestos01 -r 500 --vcpus=1 \
      -f /dev/VolGroup00/guestos01 --nographics \
      -l http://ftp.riken.jp/Linux/centos/5.2/os/i386/ \
      -m 00:16:3e:51:59:f2 -b xenbr0 \
      -m 00:16:3e:51:59:f3 -b xenbr1
    

    この様に「-m」オプションと「-b」オプションで、MACアドレスとブリッジデバイスを2つずつ指定します。

    これで、ゲストOSがNIC2毎を認識してくれるので、あとは、通常のNIC2枚刺しの時のようにインストール作業を進めることができます。

    既存のゲストOSにNICを追加する場合は、xm console <name> などとして、コンソールから作業をした方が、ネットワークの設定を安全に行えます。

    ちなみに、「-m」 で指定する仮想NICのMACアドレスは、割り当てるIPv4アドレスの 下8ビットを16進数に変換して割り当ててます。そうする事でMACアドレスのバッディングを防げます。


  • ファイルディスクリプタの上限管理

    Apache on CentOS で大量のバーチャルホストを設定したら次の様なエラーが出ました。

     [Fri Sep 04 23:17:11 2009] [error] (24)Too many open files: could not open transfer log file /var/log/httpd/aaaaaaaaaauo-access_log.
     [Fri Sep 04 23:18:18 2009] [error] (24)Too many open files: could not open transfer log file /var/log/httpd/aaaaaaaaaauo-access_log.
     

    「開くファイルが多すぎるてこれ以上開けない」という内容っぽいです。どうやらCentOSが同時に開けるファイル数を越えてしまったようです。

     # cat /proc/sys/fs/file-nr
     1728    0    22560
     

    左から、現在割り当てられているディスクリプタ数、使用中のディスクリプタ数、OSの上限ディスクリプタ数。

     # vi /etc/sysctl.conf
    
     -----sysctl.conf-----
     fs.file-max = 45120
     ---------------
     

    と設定し、

    # sysctl -p

    で適用。
    再度確認。

     # cat /proc/sys/fs/file-nr
     1728    0    45120
     

    ■ユーザごとのディスクリプタの上限

     # ulimit -n
     1024
     

    増やす。
    最終行に追記。

     # vi /etc/security/limits.conf
     -----limits.conf-----
     root    soft    nofile  44769
     root    hard    nofile  44769
     ----------------------
     

    再ログインして確認。

     # ulimit -n
     44769