• 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]


  • Xen – ホストOSに割り当てるメモリを設定する方法

    XenのホストOS (domain0) に割り当てるメモリを設定する方法。

    OS起動時にホストOSのメモリを設定する方法。

    ・/boot/grub/grub.conf
    # grub.conf generated by anaconda
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.15.1.el5
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.15.1.el5xen.img
    title CentOS (2.6.18-164.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.el5
        module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.el5xen.img
    

    ↓ 割り当てメモリを指定

    # grub.conf generated by anaconda
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-164.15.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.15.1.el5 dom0_mem=300M
        module /vmlinuz-2.6.18-164.15.1.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.15.1.el5xen.img
    title CentOS (2.6.18-164.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.el5
        module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/LogVol00
        module /initrd-2.6.18-164.el5xen.img
    

    そして再起動します。


  • Apache2.2+PHP5.2 完全インストール – part2 – PHPインストール

    今回は PHP5.2 系列のインストールです。

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

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

    Apacheのインストール は 前回で済んでいるものとします。

    ■準備

    # cd /usr/local/src/web
    # tar zxvf php-5.2.8.tar.gz
    ...
    ...
    ...
    # cd php-5.2.8
    

    ■インストール

    # ./configure \
    --prefix=/usr/local/php5 \
    --with-apxs2=/usr/local/apache2/bin/apxs \
    --without-sqlite \
    --enable-mbstring \
    --enable-zend-multibyte \
    --enable-ftp \
    --enable-sockets \
    --with-mysql=/usr/local/mysql5 \
    --with-gd \
    --with-jpeg-dir \
    --with-png-dir \
    --with-freetype-dir \
    --with-zlib \
    --with-openssl
    

    ===============configureオプションの解説===============
    –prefix=/usr/local/php5 : インストール場所を指定
    –with-apxs2=/usr/local/apache2/bin/apxs :インストール済みのApacheと連動させる。
    (DSOもジュールを作成する)
    –without-sqlite :SQLiteを使わない
    –enable-mbstring :マルチバイト関数をインストールする
    –enable-zend-multibyte :Zendのマルチバイトエンジンを有効にする
    –enable-ftp :FTPプロトコルをサポートする
    –enable-sockets :socketをサポートする(HTTPとか)
    –with-mysql=/usr/local/mysql5 :MySQLをサポートする
    –with-gd :DBエンジンをサポートする
    –with-jpeg-dir :Jpegライブラリをサポートする
    –with-png-dir :pngライブラリをサポートする
    –with-freetype-dir :FreeTypeをサポートする
    –with-zlib :zLibをサポートする
    –with-openssl :SSLをサポートする (HTTPSとか)
    ==============================

    ■エラー:その1

    ...
    checkig libxml2 install dir... no
    checking for xml2-config path...
    configure: error: xml2-config not found. Please check your libxml2 installation.
    #
    

    PHP5のインストールには xml2ライブラリが必要です。 libxml2のライブラリとソースファイルをインストールします。

    # yum install -y libxml2 libxml2-devel
    

    ■エラー:その2

    ...
    checking for fabsf... yes
    checking for floorf... yes
    configure: error: libjpeg.(a|so) not found.
    #
    

    libjpegライブラリが見つかりません。インストールします。

    # yum install -y libjpeg libjpeg-devel
    

    ■エラー:その3

    ...
    checking for floorf... yes
    checking for jpeg_read_header in -ljpeg... yes
    configure: error: libpng.(a|so) not found.
    #
    

    libpngライブラリが見つかりません。インストールします。

    # yum install -y libpng libpng-devel
    

    ■エラー:その4

    ...
    checking for jpeg_read_header in -ljpeg... yes
    checking for png_write_image in -lpng... yes
    If configure fails try --with-xpm-dir=<DIR>
    configure: error: freetype.h not found.
    #
    

    freetype.h が見つかりません、FreeTypeのライブラリ+ヘッダファイルをインストールします。

    # yum install -y freetype freetype-devel
    
    ...
    checking for MySQL support... yes
    checking for specified location of the MySQL UNIX socket... no
    checking for MySQL UNIX socket location... no
    configure: error: Cannot find MySQL header files under /usr/local/mysql5.
    Note that the MySQL client library is not bundled anymore!
    #
    

    MySQL clientのヘッダファイルが見つかりません。–with-mysql で指定したディレクトリにMySQLがインストールされていない可能性があります。

    ※)MySQL は、内容が複雑ですので ソースからインストールする事が多くなっています。ソースからインストールされた場合は、MySQLのconfigureに指定した –prefix を –with-mysql= に指定してください。

    一応 yum からインストールする方法を記載します。

    # yum install mysql mysql-server mysql-devel
    

    ■コンパイル/インストール

    # make
    # make test
    # make install
    

    ・設定ファイルを設置

    # cp php.ini-dist /usr/local/php5/lib/php.ini
    

    ■設定

    ・AddTypeの追記

    インストールが完了すると、Apacheの httpd.conf に一行の記述が追加されます。

    ・httpd.conf

    LoadModule php5_module modules/libphp5.so
    

    ↓手動で1行追加

    LoadModule php5_module modules/libphp5.so
    AddType application/x-httpd-php .php .phtml
    

    この AddType では、どのような拡張子をPHPとして扱うかを指定します。
    .php という拡張子のファイルを PHPで処理させたければ、ここに .php と指定します。

    ・SELinux の設定

    そのままでは、Apache が libphp5.so を読み込む処理が SELinux によって抑制されてしまい、起動できません。

    # service httpd start
    
    httpd を起動中: httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
    [失敗]
    #
    

    libphp5.so に対してのアクセスを許可します。

    # chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache2/modules/libphp5.so
    

    後は、サーバー固有の設定になりますので、 httpd.conf や php.ini などを用途に見合った設定にすれば終了です。
    お疲れ様でした。

    << | 1 | 2 |


  • 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