2011年12月30日金曜日

KyotoTycoon「memcachedプロトコルでメッセージキュー」を試す



最近低GIダイエットのブログを中心に書いている気がしますが、年末ということで少し時間ができたので前々から導入しようと思っていたKyotoTycoonのメッセージキューを試すことにしました。メッセージキューによる非同期処理といえば、Q4MとかActiveMQをよく使っていていますが、これもKyotoTycoonでいいんじゃない?と思うこの頃です。
何よりmemcachedプロトコルで動作するのがとても助かりますよね。

今回の内容はこちらです。


  • ktserver起動ファイル(マスター)

  • ktserver起動ファイル(スレーブ)

  • ジョブの登録(PHP)

  • ジョブの取得と削除(PHP)

  • ベンチマークの結果

  • テスト中に気になったこと

  • kctのデフラグ

  • Net_KyotoTycoonでキューの件数を取得する(PHP)




参考 memcachedプロトコルでメッセージキューを実現する
http://fallabs.com/blog-ja/promenade.cgi?id=133


テスト環境は、以前試したこちらですが、yum updateしてCentOS 6.2になりました。

ktserver起動ファイル(マスター)


まずは、damontoolsでktserverを起動します。
起動オプションですが、メッセージキューで動作させるには、「必ずツリー系のデータベース(GrassDB、TreeDB、ForestDB)のいずれかを指定してサーバを起動する必要がある」そうです。なので、オススメ通りTreeDBで。
thオプションは1でもよいそうですが、冗長構成のためレプリケーションの使用を前提に4にしました。


#!/bin/sh

PATH=/usr/local/bin:/usr/bin:/bin
PATH=$PATH:/usr/local/kyototycoon/bin
export PATH

exec env - PATH=$PATH \
ktserver \
-host 127.0.0.1 \
-port 10001 \
-th 4 \
-log /path/to/log/queue_master.log \
-ls \
-ulog /path/to/log/ulog_queue_master \
-ulim 256M \
-sid 1 \
-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so \
-plex 'port=11311#opts=fq' \
'/path/to/db/queue_master.kct#ktopts=p' 2>&1



ktserver起動ファイル(スレーブ)




#!/bin/sh

PATH=/usr/local/bin:/usr/bin:/bin
PATH=$PATH:/usr/local/kyototycoon/bin
export PATH

exec env - PATH=$PATH \
ktserver \
-host 127.0.0.1 \
-port 10002 \
-log /path/to/log/queue_slave.log \
-ls \
-ulog /path/to/log/ulog_queue_slave \
-ulim 256M \
-sid 2 \
-th 4 \
-mhost 127.0.0.1 \
-mport 10001 \
-rts /path/to/log/rts.log \
-plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so \
-plex 'port=11312#opts=fq' \
'/path/to/db/queue_slave.kct#ktopts=p' 2>&1



ジョブの登録


このような非同期処理は、そもそもキューが溜まらないように処理していくはずなのですが、
性能評価なのである程度の件数(100万件×3の300万件)の平均値で計測します。

<?php

$data = array(
'name' => 'testname',
'testdata' =>
array(1,2,3,4,5,6,7,8,9,0,'abcdefghijklmnopqrstuvwxyz',
'userid' => 'testuserid',
'entry' => '2011-10-20 12:00:00'
)
);
$mem = new Memcached();
$mem->addServer('127.0.0.1', 11311);

$time_start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
$mem->set('testkey', $data);
}
$time_end = microtime(true);
echo ($time_end - $time_start) . "\n";



ジョブの取得と削除


ジョブは取得してその情報を元した処理が成功した後に削除することが想定されるため、1件ずつgetとdeleteを繰り返して計測します。

<?php

$key = 'testkey';
$m = new Memcached();
$m->addServer('127.0.0.1', 11311);

$cnt = 0;
$time_start = microtime(true);
for ($i = 0; $i < 1000000; $i++)
{
$val = $m->get($key);
if ($val)
{
$res = $m->delete($key);
if ($res)
{
$cnt++;
}
}
}
$time_end = microtime(true);
echo ($time_end - $time_start) . "\n";
echo $cnt . "\n";



バッチ処理によるベンチマークの結果









method性能(qps)
ジョブの登録(set)13806
ジョブの取得と削除(get & delete)6956

速度的にも申し分無く、ktserverの使用物理メモリーサイズも162mと少なく、kctファイルサイズ(300万件)も774Mでした。
また、setが高速なのは非同期処理に向いていると思います。
ちなみにkctのオプションに「#bnum=6000000#msiz=2g#pccap=2g」を追加して試してみたところget, deleteが10%ほど速くなりましたが、そもそも用途として1回のみの「登録」、「取得」、「削除」が想定されるので、富豪的にしてもあまり意味ないですね。

テスト中に気になったこと




  • データ削除してもkctファイルサイズが小さくならない。むしろ813Mと少し大きくなった。

  • kcやktの管理コマンドでキューのリアルタイムの件数が取得できない。-onl付けても無理。

これらは次の方法でなんとかなりそうです。

kctのデフラグ


デフラグするには、ktserverを停止してからkyotocabinetのkctreemgrコマンドを実行します。


kctreemgr defrag /path/to/queue_master.kct


今回の環境では、800MB程度ならおそらく2秒くらいで完了します。
デフラグは、そんなに肥大化しないと思うのとパフォーマンスには影響がなさそうなので、わざわざ止めてまでやる必要ないかもしれません。また、どうしてもやりたい場合も、スレーブ側を止めて切り替えるとかいろいろ手はあると思います。

Net_KyotoTycoonでキューの件数を取得する


あとkctreemgr、kttimedmgr 、ktremotemgrなどでキューの件数を取得してみましたが、ktserverを停止しないと正しい値(count)は取れなかったためNet_KyotoTycoonで取得することにしました。スレーブ側なら停止して取得してもよいかもしれませんが、APIで取得できるのでそこまでしなくてもいいですね。



  • 必要なモジュールのインストール

pear channel-discover openpear.org
pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit
pear install HTTP_Request2
pear install openpear/Net_KyotoTycoon-beta


<?php

require_once 'Net/KyotoTycoon.php';
$kt = new \Net\KyotoTycoon(array('host' => '127.0.0.1', 'port' => 10001, 'timeout' => 5));
$res = $kt->status();
echo $res['count'] . "\n";


もうこれは使うしかないですね。




2011年12月19日月曜日

CentOS 6.1でまだまだLAMP環境 PHP 5.3.8 インストール編



LAMPの「P」は、Perl、PHP、Pythonと様々なプログラミング言語ですが、今回はPHPをインストールします。
(これまでのインストールしたものは、CentOS 6.1Apache HTTP Server 2.2.21MySQL 5.5.19です。)
もうすぐバージョン5.4もリリースされそうですが、まだRC3なので安定板の最新バージョンである5.3.8をインストールします。ちなみにバージョン5.3.7のバグは、PHP界隈で今年の重大ニュースに入るのような・・・。

今回のphpインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。


PHP 5.3.8 インストール(apc, xdebugなどの追加モジュールは含まず)
curl http://dl.dropbox.com/u/30648910/install/php/php.sh | env PHP_VERSION=5.3.8 sh



必要なモジュールのインストール




cd /usr/local/src
curl -L -o rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -i rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

yum install \
flex.x86_64 \
gd-devel.x86_64 \
libxml2-devel.x86_64 \
gettext-devel.x86_64 \
libxslt-devel.x86_64 \
libcurl-devel.x86_64 \
libtool-ltdl-devel.x86_64 \
re2c.x86_64 \
libmcrypt-devel.x86_64

ln -s /usr/local/mysql/lib /usr/local/mysql/lib64
ldconfig



ソースコードからPHP 5.3.8をインストールする




オプションはいろいろ付けてます。
開発環境ならいろいろ入れた方がよいかと思います。
本番環境では、必要なもの以外は除去してビルドするのがよいでしょう。
しかし、最近のサーバはメモリー容量も多いので、後で使うかも?とか、汎用的なサーバにしたいとか、開発環境と同じオプションでなければテストにならない!という心配性の方は、同じオプションでよいと思います。
ただし、AWS EC2(small,micro)やVPSのようなメモリーが少ない環境では、使うのもだけ付けるのがよいのは言うまでもありません。あとはお好みで。

cd /usr/local/src
curl -L -o php-5.3.8.tar.gz http://jp2.php.net/get/php-5.3.8.tar.gz/from/jp.php.net/mirror
tar zxfv php-5.3.8.tar.gz
cd php-5.3.8
./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-libdir=lib64 \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-xpm-dir=/usr \
--with-libxml-dir=/usr \
--with-freetype-dir=/usr \
--with-gettext \
--with-zlib \
--with-openssl \
--with-mcrypt \
--with-xsl \
--with-curl \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-exif \
--enable-soap \
--enable-sockets \
--enable-zip

make
make install

cp php.ini-development /usr/local/php/lib/php.ini



パスの追加





  • bashの場合

echo "PATH=\$PATH:/usr/local/php/bin" >> $HOME/.bashrc
source $HOME/.bahrc


  • zshの場合

echo "PATH=\$PATH:/usr/local/php/bin" >> $HOME/.zshrc
source $HOME/.zshrc



コマンドでバージョンや設定を確認する





  • バージョン情報

php -v


PHP 5.3.8 (cli) (built: Dec 19 2011 12:34:56)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies



  • 設定情報

php -i | grep iconv


Registered Stream Filters => zlib.*, convert.iconv.*, mcrypt.*, mdecrypt.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
iconv
iconv support => enabled
iconv implementation => glibc
iconv library version => 2.12
iconv.input_encoding => ISO-8859-1 => ISO-8859-1
iconv.internal_encoding => ISO-8859-1 => ISO-8859-1
iconv.output_encoding => ISO-8859-1 => ISO-8859-1




ライブラリーや拡張モジュールのインストール


PHPでは、pear、peclコマンドを使用して標準ライブラリーや拡張モジュールをインストールします。
いくつかインストールしてみます。



  • apc (PHPアクセラレータ)

pecl install apc
デフォルトのまま[Enter]キーを押しつづければインストールできます。


  • xdebug (デバッグ用エクステンション)

pecl install xdebug


  • php.iniの修正

これらの拡張モジュールを有効にするには、php.iniに設定を追記します。

上記2つのモジュールを有効にする場合
vi /usr/local/php/lib/php.ini
extension=apc.so
extension=xdebug.so

php.iniを書き換えて保存したらapacheを再起動します。
/usr/local/apache2/bin/apachectl graceful


  • pearのアップグレード

pear upgrade PEAR
pear upgrade-all


  • Net_IPv4のインストール

pear install Net_IPv4




apacheの設定例




ここでは、VirtualHostに追加する場合の例です。
<VirtualHost *>
 ServerName www.example.com

 DocumentRoot /path/to/example/htdocs
 DirectoryIndex index.php index.html

 ErrorLog  "|/usr/local/sbin/cronolog /usr/local/apache2/logs/example/error_log.%Y-%m-%d"
 CustomLog "/usr/local/apache2/logs/example/access_log.%Y-%m-%d" combined

 <FilesMatch \.php$>
  SetHandler application/x-httpd-php
 </FilesMatch>

 <Directory /path/to/example/htdocs>
  Order Deny,Allow
  Deny from all
  Allow from all
      Options All -Indexes
 </Directory>
</VirtualHost>




インストールされるモジュール




freetype-2.3.11-6.el6_1.8.x86_64
fontconfig-2.8.0-3.el6.x86_64
libjpeg-6b-46.el6.x86_64
libpng-1.2.46-1.el6_1.x86_64
libICE-1.0.6-1.el6.x86_64
xorg-x11-proto-devel-7.4-35.el6.noarch
libSM-1.1.0-7.1.el6.x86_64
libtiff-3.9.4-1.el6_0.3.x86_64
freetype-devel-2.3.11-6.el6_1.8.x86_64
libXau-1.0.5-1.el6.x86_64
libxcb-1.5-1.el6.x86_64
libXau-devel-1.0.5-1.el6.x86_64
atk-1.28.0-2.el6.x86_64
libxcb-devel-1.5-1.el6.x86_64
fontconfig-devel-2.8.0-3.el6.x86_64
libpng-devel-1.2.46-1.el6_1.x86_64
libjpeg-devel-6b-46.el6.x86_64
jasper-libs-1.900.1-15.el6.x86_64
cvs-1.11.23-11.el6_0.1.x86_64
gettext-0.17-16.el6.x86_64
hicolor-icon-theme-0.11-1.1.el6.noarch
avahi-libs-0.6.25-11.el6.x86_64
gettext-libs-0.17-16.el6.x86_64
libtasn1-2.3-3.el6.x86_64
gnutls-2.8.5-4.el6.x86_64
cups-libs-1.4.2-39.el6_1.1.x86_64
libgpg-error-devel-1.7-3.el6.x86_64
libgcrypt-devel-1.4.5-5.el6_1.2.x86_64
alsa-lib-1.0.21-3.el6.x86_64
pixman-0.18.4-1.el6_0.1.x86_64
libXdmcp-1.0.3-1.el6.x86_64
libXdmcp-devel-1.0.3-1.el6.x86_64
libthai-0.1.12-3.el6.x86_64
libmcrypt-2.5.7-1.2.el6.rf.x86_64
zip-3.0-1.el6.x86_64
libart_lgpl-2.3.20-5.1.el6.x86_64
libxslt-1.1.26-2.el6.x86_64
libxml2-devel-2.7.6-1.el6.x86_64
libX11-common-1.3-2.el6.noarch
libX11-1.3-2.el6.x86_64
libXext-1.1-3.el6.x86_64
libXrender-0.9.5-1.el6.x86_64
libXfixes-4.0.4-1.el6.x86_64
cairo-1.8.8-3.1.el6.x86_64
libXrandr-1.3.0-4.el6.x86_64
libXi-1.3-3.el6.x86_64
libXpm-3.5.8-2.el6.x86_64
libX11-devel-1.3-2.el6.x86_64
gd-2.0.35-10.el6.x86_64
libXtst-1.0.99.2-3.el6.x86_64
libXcomposite-0.4.1-2.el6.x86_64
libXcursor-1.1.10-2.el6.x86_64
libXdamage-1.1.2-1.el6.x86_64
libXft-2.1.13-4.1.el6.x86_64
pango-1.28.1-3.el6_0.centos.5.x86_64
libXinerama-1.1-1.el6.x86_64
gtk2-2.18.9-6.el6.centos.x86_64
libgcj-4.4.5-6.el6.x86_64
libXt-1.0.7-1.el6.x86_64
libXpm-devel-3.5.8-2.el6.x86_64
gd-devel-2.0.35-10.el6.x86_64
gettext-devel-0.17-16.el6.x86_64
libxslt-devel-1.1.26-2.el6.x86_64
libmcrypt-devel-2.5.7-1.2.el6.rf.x86_64
re2c-0.13.5-1.el6.rf.x86_64
flex-2.5.35-8.el6.x86_64
libidn-devel-1.18-2.el6.x86_64
libcurl-devel-7.19.7-26.el6_1.2.x86_64
libtool-ltdl-2.2.6-15.5.el6.x86_64
libtool-ltdl-devel-2.2.6-15.5.el6.x86_64


Linux(CentOS)、Apache、MySQL、PHPのインストールが完了してLAMP構成となりました。
情報閲覧系のサイトならピュアPHPでもある程度作れる環境になったと思います。

ソースコードでインストールするといろいろなオプションがあることに気づくと思います。
また、1つではなく複合的な技術で成り立っているのもよくわかるのではないでしょうか。
実は、全部yumだけでインストール可能なんですが、あえてやらない方が仕様とか理解が深まりますね。




2011年12月16日金曜日

CentOS 6.1でまだまだLAMP環境 Apache HTTP Server 2.2.21 インストール編



新しいサービスなどではWebサーバにNginxが使われることが多くなってきた感じがますが、
既存のサービスでは、まだまだapacheが使われていることが多いと思います。
何が使われているかを調べるには、curlコマンドが便利です。
気になるサイトを調べてみてはいかがでしょうか。
はてなダイアリーとはてなブログでも違うようですね。



  • はてなダイアリー

curl -s -I http://d.hatena.ne.jp/ | grep "^Server"
Server: Apache


  • はてなブログ

curl -s -I http://hatenablog.com/ | grep "^Server"
Server: nginx/1.0.3

※オプション(-I)は、半角英字大文字のアイです。


それでは、前々回(CentOS 6.1)、前回(MySQL 5.5.19)、に引き続きApache HTTP Server 2.2.21をインストールします。

今回のapacheインストール手順と同じ処理を行うバッチを作成しました。
管理者権限があれば次の1行でインストールできます。
ご使用になられた場合の損害は一切責任を負いませんのでご了承ください。
Apache HTTP Server 2.2.21(WebDAV,Proxy関連のオプションは含まれません)
curl http://dl.dropbox.com/u/30648910/install/apache/apache.sh | env APACHE_VERSION=2.2.21 sh

cronolog 1.6.2
curl http://dl.dropbox.com/u/30648910/install/cronolog.sh | sh


必要なモジュールのインストール




yum -y install \
make.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
libtool.x86_64 \
autoconf.noarch \
perl.x86_64 \
openssl.x86_64 \
openssl-devel.x86_64



ソースコードからapache 2.2.21をインストール




cd /usr/local/src
curl -L -o httpd-2.2.21.tar.gz http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.21.tar.gz
tar zxfv httpd-2.2.21.tar.gz
cd httpd-2.2.21

追加するオプションはいろいろあるので一例です。

./configure --prefix=/usr/local/apache2 \
--enable-cache \
--enable-disk-cache \
--enable-mem-cache \
--enable-logio \
--enable-headers \
--enable-ssl \
--enable-rewrite \
--enable-so

make
make install



  • gitやsubversionのリポジトリをWebDAV経由で公開したい場合

--enable-dav
--enable-dav-fs
--enable-dav-lock


  • プロキシーサーバの機能を追加したい場合(必要に応じて追加するモジュールを選択)

--enable-proxy
--enable-proxy-connect
--enable-proxy-ftp
--enable-proxy-http
--enable-proxy-scgi
--enable-proxy-ajp
--enable-proxy-balancer



他にもいろいろな拡張モジュールがあるので、気になるのもは試してください。
http://httpd.apache.org/docs/2.2/ja/mod/




apache再起動無しで、ログファイルの日毎自動ローテート




apacheの標準でもrotatelogsがありますが、
日毎(毎日0時0分)にapacheの再起動無しでローテートしたいので、
次の2つをインストールします。


  • mod_log_rotateのインストール


mkdir /usr/local/src/mod_log_rotate
cd /usr/local/src/mod_log_rotate
curl -o mod_log_rotate.c http://hexten.net/assets/apache2/mod_log_rotate.c
/usr/local/apache2/bin/apxs -i -a -c mod_log_rotate.c



  • cronologのインストール


cd /usr/local/src
curl -L -o cronolog-1.6.2.tar.gz http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar zxfv cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install



自動ローテートの設定例




  • mod_log_rotateを有効化(httpd.confに追記)


RotateLogs On
RotateLogsLocalTime On



  • http.confやvirtualhostディレクティブでログファイルの設定をします。


CustomLog "/usr/local/apache2/logs/access_log.%Y-%m-%d" combined
ErrorLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/error_log.%Y-%m-%d"




yumインストール時に追加されたモジュール




keyutils-libs-devel-1.4-1.el6.x86_64
libsepol-devel-2.0.41-3.el6.x86_64
libselinux-devel-2.0.94-5.el6.x86_64
zlib-devel-1.2.3-26.el6.x86_64
libcom_err-devel-1.41.12-7.el6.x86_64
krb5-devel-1.9-9.el6_1.2.x86_64
openssl-devel-1.0.0-10.el6_1.5.x86_64



次回は、PHPのインストールを予定しています。




2011年12月11日日曜日

CentOS 6.1でまだまだLAMP環境 OSインストール編



Webサービスを構築するソフトウェアは、LAMP(Linux, Apache, MySQL, Perl or PHP or Python)がよく使われていますが、最近は、LAMP以外のプログラミング言語、データベース、KVS、キャッシュなどの様々な技術を用いることも多くなり、ここ数年で選択肢がかなり広がった印象があります。

nginxやnode.jsのように、イベント駆動やノンブロキッキングの処理に注目があつまっていたり、
HTML5を用いたリアルタイムWebなど新しい技術なしでは実装が難しいというのも理由かもしれません。

そんな状況で、LAMPという言葉自体はもう古いものですが、中身は古くなったというよりは、安定してかつ新しい機能やライブラリーも増えてより便利になったという印象です。また、他が注目されているとはいえ、まだまだ多くのWebサービスを支えている技術はLAMPであるのもまた事実です。これまでのノウハウが活用できるというのもメリットですぐにやめられない理由の1つだと思います。

そんな当たり前の技術となったLAMPですが、CentOS 6.1がリリースされたタイミングなので、
最近のバージョンで、LAMP構成のサーバを作成してみようと思います。
これからWebエンジニアを目指す人でも、クラウドの時代でも、最低限知っておいて損はないと思います。

まずは、CentOS 6.1のインストールから


  • CentOS 6.1 インストール事前準備

  • CentOS 6.1 インストール(最小構成)

  • よく使うコマンドのインストールと環境構築

  • sshの鍵作成

  • LAN以外からの22番ポート(ssh)へアクセスを不可にする

  • この手順でインストールしたモジュール(依存関係も含む)




CentOS 6.1 インストール事前準備



▼ファイルをダウンロードする
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD1.iso
http://ftp.jaist.ac.jp/pub/Linux/CentOS/6.1/isos/x86_64/CentOS-6.1-x86_64-bin-DVD2.iso
※以下の作業で必要なのは、CentOS-6.1-x86_64-bin-DVD1.isoのみ

▼ダウンロードしたファイルをDVD-Rに焼く
Macの場合は、標準のディスクユーティリティで作成可能
1. [アプリケーション]→[ユーティリティ]→[ディスクユーティリ]を開く
2. [ディスクを作成]をクリック
3. ダウンロードした[CentOS-6.1-x86_64-bin-DVD1.iso]を選択して[ディスクを作成]ボタンをクリック
4. DVD-Rをセットする
5. [ディスクを作成]ボタンをクリック

しばらく待てばできあがり。
必要であれば、[CentOS-6.1-x86_64-bin-DVD2.iso]も同様の手順で焼く



CentOS 6.1 インストール(最小構成)




▼インストールメディアから起動
1. サーバ電源ON
2. 先ほど焼いたメディア(DVD)をサーバにセットする
3. DVDから起動したら[Enter]キーを押す
※DVDで起動しない場合は、BIOSの設定変更が必要

4. Install or upgrade an existing systemを選択して[Enter]キーを押す
5. [SKIP]を選択して[Enter]キーを押す
※事前にDVDをチェック済みなので。メディアをチェックしたい場合はそのまま[OK]をクリック
6. [Next]を選択してクリック

▼インストールする言語の選択
7. [Japanese]を選択して[Next]をクリック
8. [日本語]を選択して[次へ]をクリック

▼インストールするストレージデバイスの選択
9. [基本ストレージデバイス]を選択して[次へ]をクリック
10. [新規インストール]を選択して[次へ]をクリック

▼ホスト名の設定(適宜変更してください)
11. ホスト名を入力して同じ画面の[ネットワークの設定]をクリック
例 sv.example.local

▼ネットワークの設定(適宜変更してください)
12. [有線]タブの[System eth0]を選択して[編集...]ボタンをクリック
13. [自動接続する]にチェックをつける

サーバ用途なのであまりないと思いますが、[DHCP]を使用する場合は14-16の手順は不要

14. [IPv4のセッティング]タブをクリックする
15. 方式を[自動(DHCP)]から[手動]に変更する
16. [追加]ボタンをクリックして次の項目を入力する


設定例 (環境にあわせて変更してください)
アドレス : 192.168.1.100
ネットマスク : 24 (または255.255.255.0)
ゲートウェイ : 192.168.1.1
DNSサーバ : 8.8.8.8 (例 Google Public DNS)
ドメインを検索:example.local


17. [適用]ボタンをクリック
18. [閉じる]ボタンをクリック
19. [次へ]をクリック

▼時間の設定(適宜変更してください)
20. [アジア/東京]を選択する
21. [システムクロックでUTCを使用]のチェックを外す
22. [次へ]をクリック

▼管理者パスワードの設定
23. [rootのパスワードと[確認]にパスワードを入力する
24. [次へ]をクリック

▼ディスク構成(適宜変更してください)
25. [すべての領域を使用する]を選択する
26. [パーティションのレイアウトをレビューまたは修正]を選択する
27. [次へ]をクリック
28. [lv_home]を選択して[削除]ボタンをクリック
29. [削除]ボタンをクリック
30. [lv_root]を選択して[編集]をクリック
31. サイズにし最大値を入力して[OK]ボタンをクリック
32. [次へ]ボタンをクリック
33. [変更をディスクに書き込む]ボタンをクリック
34. [次へ]をクリック

▼インストールオプションの選択(最小構成)
35. [Minimal]を選択して[次へ]をクリック
36. インストールが完了したら[再起動]ボタンをクリックする



よく使うコマンドのインストールと環境構築




ここからは外部(インターネットなど)からこのサーバへアクセスできない環境での作業を前提とする
▼セットアップ
ここからはリモートで作業する
ssh root@192.168.1.100
管理者用パスワードを入力してログインする

▼モジュールアップデート


yum -y update


▼SELinuxの無効化


setenforce 0

vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

完全に無効化するには再起動が必要
reboot

再起動後にgetenforceコマンドでDisabledと表示されればOK


▼シェルをzshに変更する(zsh好きなら)


yum -y install zsh
chsh -s /bin/zsh

変更可能なシェル確認
chsh --list-shells


▼コピー関連コマンド(rsync, scp)のインストール


yum -y install \
rsync.x86_64 \
openssh-clients.x86_64


▼圧縮・解凍関連コマンド(unzip)のインストール


yum -y install \
unzip.x86_64


▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


yum -y install \
bind-utils.x86_64 \
jwhois.x86_64 \
traceroute.x86_64 \
tcpdump.x86_64 \
telnet.x86_64


▼ソースのコンパイルに使用するモジュールのインストール


yum -y install \
autoconf.noarch \
automake.noarch \
cmake.x86_64 \
gcc.x86_64 \
gcc-c++.x86_64 \
make.x86_64 \
libtool.x86_64


あとはお好みで追加する。 wgetとか



sshの鍵作成




1. ssh-keygenコマンドを実行する
ssh-keygen -t rsa

下記のメッセージが表示される
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [Enterキーを押す]
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): [パスフレーズを入力してEnterキーを押す]
Enter same passphrase again: [再度パスフレーズを入力してEnterキーを押す]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

秘密鍵 : /root/.ssh/id_rsa
公開鍵 : /root/.ssh/id_rsa.pub

※scpコマンドなどで秘密鍵をリモートアクセスするPCに保存します。

3. 公開鍵authorized_keysに登録する
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

4. アクセス権を変更する
chmod -R 700 $HOME/.ssh
chmod -R 600 $HOME/.ssh/*

5. 鍵のみの認証に変更(パスワード認証を許可しない)
vi /etc/ssh/sshd_config
PasswordAuthentication no

6. sshdを再起動する
/etc/init.d/sshd restart

以後、秘密鍵を使用してログインします。



LAN以外からの22番ポート(ssh)へアクセスを不可にする




vi /etc/sysconfig/iptables

次のように修正して保存する
修正前
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

修正後
-A INPUT -s 192.168.1.0/24 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

iptablesを再起動する
/etc/init.d/iptables restart



この手順でインストールしたモジュール(依存関係も含む)




▼シェルをzshに変更する(zsh好きなら)


  • zsh-4.3.10-4.1.el6.x86_64



▼コピー関連コマンド(rsync, scp)のインストール


  • libedit-2.11-4.20080712cvs.1.el6.x86_64

  • openssh-clients-5.3p1-52.el6_1.2.x86_64

  • rsync-3.0.6-5.el6_0.1.x86_64



▼圧縮・解凍関連コマンド(unzip)のインストール


  • unzip-6.0-1.el6.x86_64



▼ネットワーク関連コマンド(dig, nslookup, whois, traceroute, tcpdump, telnet)のインストール


  • libpcap-1.0.0-6.20091201git117cb5.el6.x86_64

  • bind-libs-9.7.3-2.el6_1.P3.3.x86_64

  • bind-utils-9.7.3-2.el6_1.P3.3.x86_64

  • tcpdump-4.0.0-3.20090921gitdf3cb4.1.el6.x86_64

  • traceroute-2.0.14-2.el6.x86_64

  • jwhois-4.0-19.el6.x86_64

  • telnet-0.17-47.el6.x86_64

▼ソースのコンパイルに使用するモジュールのインストール


  • xmlrpc-c-1.16.24-1200.1840.el6_1.4.x86_64

  • mpfr-2.4.1-6.el6.x86_64

  • cpp-4.4.5-6.el6.x86_64

  • xmlrpc-c-client-1.16.24-1200.1840.el6_1.4.x86_64

  • perl-Pod-Escapes-1.04-119.el6_1.1.x86_64

  • perl-libs-5.10.1-119.el6_1.1.x86_64

  • perl-Pod-Simple-3.13-119.el6_1.1.x86_64

  • perl-Module-Pluggable-3.90-119.el6_1.1.x86_64

  • perl-version-0.77-119.el6_1.1.x86_64

  • perl-5.10.1-119.el6_1.1.x86_64

  • autoconf-2.63-5.1.el6.noarch

  • automake-1.11.1-1.2.el6.noarch

  • libgomp-4.4.5-6.el6.x86_64

  • kernel-headers-2.6.32-131.21.1.el6.x86_64

  • glibc-headers-2.12-1.25.el6_1.3.x86_64

  • glibc-devel-2.12-1.25.el6_1.3.x86_64

  • ppl-0.10.2-11.el6.x86_64

  • cloog-ppl-0.15.7-1.2.el6.x86_64

  • gcc-4.4.5-6.el6.x86_64

  • libstdc++-devel-4.4.5-6.el6.x86_64

  • gcc-c++-4.4.5-6.el6.x86_64

  • libtool-2.2.6-15.5.el6.x86_64

  • cmake-2.6.4-5.el6.x86_64

  • make-3.81-19.el6.x86_64



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