2010年12月15日水曜日

サルでもわかるOAuthとXAuthの仕組みと違い


APIやWEBサービスを利用する際によく見かけるのがOAuth(オーオース)とxAuth。



しかし、OAuthは仕組みがやや複雑であるため、詳しく解説されると逆に混乱し簡易すぎるとよくわからない仕組みと理解されがちです。



そこで、自分なりにイイ感じにスッキリまとめたので紹介します。



前書き


近年Webサービスが爆発的に普及してきました。



代表的なサービスではGoogle Yahoo mixi Twitter Facebookなどでしょうか。



これらのWEBサービスを利用又は開発する際に問題になるのがユーザ管理です。



IDやパスワードを預かるWEBサービスではユーザ登録の手間やセキュリティの強化など、利用する側も開発する側にも少なからず煩わしい手続きと思われてきました。



そこで登場したのがOpenIDです。



OpenIDとは


OpenIDはWebサービスごとにIDを作成しなくても予め所有しているIDがOpenID対応であればOpenIDに対応したサービスを利用する際にユーザ登録などの手間を省くことができます。



OpenIDの基本は認証を行うためのシステムなので機能的な制限を与えることはできません。



例えば「HogeサービスがTwitterの情報を取得できるようにしたい。ただし読み込みだけで書き込みの権限をHogeサービスには与えたくない。」といったような事はOpenIDでは実現できません。



そこで特定の機能のみのアクセスを認可する仕組みとしてOAuthが登場しました。



OAuthとは



特定の機能のみ認可するシステムがOAuthですがいくつかのデメリットがあります。



  • 実装が複雑(支援するライブラリーがたくさんある)

  • 基本的にWebサービス向け

  • デスクトップアプリケーションには不向き


OAuthはWebサービスで利用される事を想定しているため、デスクトップアプリケーションでOAuthを利用する場合は



ブラウザを経由するかアプリケーションに搭載した独自のブラウザを利用する必要があります。



簡単な図を書いてみました。


f:id:koujirou6218:20101214185715j:image


背景

Hoge解析でTwitterの情報を取得してHoge解析したい



  1. [ユーザ]Hoge解析でTwitterを利用する意志を示す(リンクをクリックするなど)

  2. [Hoge解析]ユーザからTwitter連携の意志を受け取ったのでTwitterに移動

  3. [ユーザ]Twitterにログインする

  4. [Twitter]Hoge解析が必要としている機能を許可するとTwitterはHoge解析にアクセストークンを渡す

  5. [Hoge解析]TwitterからもらったアクセストークンでTwitterの情報を取得する

  6. [ユーザ]Hoge解析を楽しむ



今後Hoge解析は6を繰り返して情報を取得する。



OAuthのメリット



  • Hoge解析にIDやパスワードを渡す必要がない

  • 必要な権限のみHogeサービスに渡せる

  • Hoge解析が権限を悪用してもTwitter側で拒否できる(パスワードやIDを変える必要がない)

  • 悪用時の被害を最低限に抑えられる



xAuthとは



xAuthはTwitterAPI認証時に以前はBASIC認証を利用していたのですがその代わりとして準備された物です。



xAuthはOAuthの簡易版というよりもBASIC認証にかなり近い物です。



これも簡単な図を書いてみました。


f:id:koujirou6218:20101214185716j:image



  1. [ユーザ]Hoge解析にTwitterで利用しているIDとパスワードを渡す

  2. [Hoge解析]渡されたIDとパスワードを利用してTwitterにアクセストークンを求める

  3. [Twitter]Hoge解析にアクセストークンを渡す

  4. [Hoge解析]TwitterからもらったアクセストークンでTwitterの情報を取得する

  5. [ユーザ]Hoge解析を楽しむ


(適当なタイミングHoge解析はIDとパスワードを破棄する)


このように一度WebサービスにIDとパスワードを渡さなければいけない点がOAuthと大きく異なります。



デメリット



  • Hoge解析がIDとパスワードを本当に破棄いているのかがユーザはわからない



メリット



  • 開発時にOAuthよりも認証方法が簡単

  • デスクトップアプリケーションでもブラウザなしで認証できる



OAuthとxAuthの違い



既にお分かりだと思いますが、xAuthはベーシック認証の拡張でありOAuthのようなセキュアなプロトコルではない点です。



OAuthは認証の過程で署名などがありアクセストークンの自体も保護されいるので非常にセキュアなプロトコルです。



しかしxAuthはIDとパスワードが平文で流れる可能性があり、Webサービスが確実にIDとパスワードを破棄したことを確認できません。



xAuthに限らず最近はOAuthを利用してあたかも通常のサービスに見せかけたSPAMや乗っ取りなどが発生しているのでOAuthを許可する時はどの権限を



渡そうとしているのかをよく確認してください。特に書き込み(write)のアクセス権を渡す場合は注意してください。



2010年12月9日木曜日

Googleが開発した脆弱性診断ツールを使ってみた


ratproxyはWebアプリケーションの脆弱性を“受動的”に検査するためのツールです。



動作的にはratproxyがプロクシサーバとなり、ブラウザでratproxy経由で診断サイトにアクセスすることで診断します。



脆弱性診断ツールの種類


脆弱性診断を行うツールは、WebScarab、Paros、Burp、ProxMonなどがあります。



これらのツールは“能動的”に脆弱性を探し出します。



能動的とは、予め脆弱性となりうるパラメータやパターンなどを診断サイトに対し実行します。



これらは機械的に実行されるので、診断サイトに大きな負荷がかかったり大量のログが出力されます。



ratproxyのインストール


OSはCentOS 64bitです。


openssl-develがインストールされていないとエラーがでるので予めインストールしておきます。



yum install openssl-devel





ratproxyのダウンロード


ダウンロード後解凍し、makeします。



wget http://ratproxy.googlecode.com/files/ratproxy-1.58.tar.gz


tar -zxvf ratproxy-1.58.tar.gz


cd ratproxy


make



これでratproxyを利用する準備が整いました。



起動


r:リモートアクセスを許可


w:ログを出力


lextifscgjm:ログを詳細に表示するためのオプション群(ドキュメント参照)



ratproxyドキュメント



特にrオプションは、ratproxyをVMにインストールしホストマシンからratproxy経由で診断サイトをアクセスする場合は必須です。


デフォルトでポート8080が利用されますが、pオプションでポート指定も可能です。



./ratproxy -r -w test.log -lextifscgjm




VMをNATで構築している場合はポートフォワーディングを行うことを忘れないでください。



ブラウザにプロキシを入力


各ブラウザのプロキシ設定でratproxyのIPとポート番号を入力します。


そして、診断対象のサイトにアクセスします。



ログ解析


起動時にwオプションで指定したログを解析することでHTMLとして出力できます。




./ratproxy-report.sh test.log >report.html




ログの細かい見方については、messages.listにて記載されています。



結果


ratproxyはログ解析結果を見ていただければわかるのですが、ratproxy経由でアクセスすることで通過する通信を監視しそこから発見できる脆弱性を表示するだけのツールなのでWebScarabのように大量に解析結果が表示されるわけではありません。



逆にratproxyで発見できるHIGHなどの脆弱性は安易に実行される可能性があります。



最後にratproxyのドキュメントを読んでわかったのですが“能動的手法”を補う物であるのでratproxyとWebScarabなどの能動的脆弱性診断ツールを使うとより効果的でしょう。



2010年12月4日土曜日

eAcceleratorはAPCより速いのか


eAcceleratorはAPCより速いのか


PHPはプログラムを実行前に中間形式にコンパイルし実行します。



この作業はプログラムが呼び出される度に行われるので多くのファイルのIncludeしているプログラムやいわゆる重たいプログラムなどには非常にコストの高い作業になります。



今回紹介するAPCやeAcceleratorは中間形式にコンパイルする作業をキャッシュし保持します。そのため、呼び出される度にコンパイル作業を大幅に高速化する事ができます。



これらのキャッシュ機能を提供するのがAPCとeAcceleratorです。



APCとeAcceleratorの違い


APCとeAcceleratorは殆ど同じ動作をしますがeAcceleratorの方がやや機能が上回っています。


eAcceleratorの機能


  1. キャッシュ圧縮(圧縮レベル調整可能)

  2. 共有メモリキャッシュ、ディスクキャッシュの選択




前回書いたさくらVPSで一日6万PVを処理するためにしたことで書いた後にコメントでもいただいたのですがeAcceleratorの方が速いという噂をよく聞きます。



ベンチマーク方法



  • OS:CentOS 64bit

  • メモリ:512M

  • CPU:2992.510Mhz

  • APC:3.1.6

  • eAccelerator:0.9.6.1

  • アプリケーション:ApacheBench

  • スレッド数:100

  • リクエスト数:1000

  • 対象サイト: PukiWiki 1.4.7_notb (デフォルト設定)

  • ページ:index.php 

  • PHP:モジュールモード


正確なキャッシング能力を測るために10回実行してから、計測しました。


必ずローカル環境で試してください



ベンチマーク結果


アクセレーターなし















アクセレーターなし(ms)
1回目13003
2回目16107
3回目13787
4回目14540
5回目12691
6回目12253
7回目12452
8回目10731
9回目12714
10回目12718
平均13099.6
Failed requests合計12回

APC















アクセレーターAPC(ms)
1回目1086
2回目1019
3回目1027
4回目1018
5回目1031
6回目1016
7回目1029
8回目1015
9回目1016
10回目1021
平均1027.8
Failed requests合計0回

eAccelerator


















アクセレーターeAccelerator(ms)
キャッシュ方式ディスク&メモリ
圧縮有効
1回目1051
2回目1034
3回目1054
4回目1022
5回目1028
6回目1016
7回目1037
8回目1072
9回目1056
10回目1110
平均1058
Failed requests合計0回


















アクセレーターeAccelerator(ms)
キャッシュ方式ディスク&メモリ
圧縮無効
1回目1011
2回目1048
3回目1036
4回目1043
5回目1086
6回目1038
7回目1044
8回目1451
9回目1577
10回目1055
平均1148.9
Failed requests合計0回


















アクセレーターeAccelerator(ms)
キャッシュ方式メモリ
圧縮有効
1回目1073
2回目1082
3回目1917
4回目1070
5回目1044
6回目1038
7回目1024
8回目1036
9回目1032
10回目994
平均1131
Failed requests合計0回


















アクセレーターeAccelerator(ms)
キャッシュ方式メモリ
圧縮無効
1回目1837
2回目1182
3回目1187
4回目1028
5回目1529
6回目1044
7回目1026
8回目1366
9回目1061
10回目1024
平均1228.4
Failed requests合計0回


















アクセレーターeAccelerator(ms)
キャッシュ方式ディスク
圧縮有効
1回目1047
2回目1032
3回目1034
4回目1043
5回目1059
6回目1029
7回目1083
8回目1035
9回目1493
10回目1058
平均1091.3
Failed requests合計0回


















アクセレーターeAccelerator(ms)
キャッシュ方式ディスク
圧縮無効
1回目1156
2回目1088
3回目1033
4回目1019
5回目999
6回目1018
7回目1007
8回目993
9回目996
10回目1002
平均1031.1
Failed requests合計0回


結果


APCが最も高速で比較的安定した値を出していました。



eAcceleratorではキャッシュモードをディスクにして圧縮を有効にした方が速い結果には驚きでしたが、APCと4ms程度の差でしたので殆ど差がないと言ってもいいと思います。



ただ、これらのベンチマークは動作するプログラムなどによって大きく異なる可能性が高いのでプログラムごとにベンチマークを取った方がいいでしょう。



2010年11月30日火曜日

さくらVPSで一日6万PVを処理するためにしたこと


さくらVPSで6万PV程度のサイトを運用することになったので、その際の記録を残しておきます。



さくらレンタルサーバ⇒さくらVPS


さくらレンタルサーバで運用している時は、ちょくちょく503が発生しておりこれを解決するためにさくらVPSへの移行を行いました。



レンタルサーバの時は、ログ解析や監視ツールなどを導入していなかったので503の頻度やパターンは不明です。(安易な判断でVPSに移行したので、この点は反省です)



本来は原因を追及し、プログラムの改修やサーバ負荷の分散などをすべきですが時間の都合で省いてしまいました。



構成


運用するサイトはpukiwikiで構成されたサイトです。



pukiwikiは、PHPで書かれており大量のデータをRDBを利用せずに構築できる点が大きなメリットです。



今回は1サイトですが、複数のサイトを運用する可能性を考慮してVirtualHostも利用します。



さくらVPSの性能


  1. OS:CentOS

  2. CPU:XeonQuadを共有利用(2コア)

  3. メモリ:512M



Apacheのインストール


CentOSにはyumがあるのですが、不要なモジュールやパッケージをインストールを避け最新版のApcheを利用したかたったのでソースからインストールしました。


Apacheの最新版


configure

pukiwikiに関わらず基本的なサイトであれば以下のオプションで動作するはずです。



"./configure" \


"--enable-so" \


"--enable-rewrite" \


"--enable-expires" \


"--disable-proxy" \


"--disable-deflate" \


"--disable-cache" \


"--disable-disk-cache" \


"--disable-auth-basic" \


"--disable-authn-file" \


"--disable-authn-default" \


"--disable-authz-groupfile" \


"--disable-authz-user" \


"--disable-filter" \


"--disable-autoindex" \


"--disable-negotiation" \


"--disable-actions" \


"--disable-asis" \


"--disable-cgi" \


"--disable-env" \


"--disable-include" \


"--disable-userdir" \


"--disable-imap" \


"--disable-cgid" \


"--disable-charset-lite" \


"--disable-imagemap" \


"--disable-setenvif" \



httpd.conf

次の設定ファイルのみ有効にします。



#プロセスやスレッドをコントロールするための設定


Include conf/extra/httpd-mpm.conf


#バーチャルホストの設定


Include conf/extra/httpd-vhosts.conf


#Apacheの基本的な設定セキュリティ設定


Include conf/extra/httpd-default.conf




httpd-mpm.conf

mpm_prefork_moduleのみに注目してください。


mpm_worker_moduleはマルチスレッド対応のmpmですが不安定な一面があるのでpreforkに移行しました。




StartServers 10 # Apache起動時に起動するプロセス数


MinSpareServers 50 #最低待機プロセス数


MaxSpareServers 70 #最大待機プロセス数


MaxClients 110 #最大起動するプロセス数(これ以上はプロセスを起動しない)


MaxRequestsPerChild 1000


MaxMemFree 2048



MaxRequestsPerChildとMaxMemFreeについては後ほど説明したいと思います。




Apacheは起動するとデフォルトで5個ぐらいのプロセスを起動するのですが6万PVを処理するには平均で70プロセス程度、ピーク時で100プロセス程度起動します。



1プロセス1リクエストを処理した後にプロセスが終了するので、5⇔70プロセスの起動と終了を何度も繰り返すので非常にオーバーヘッドが大きくなってしまいます。



Apacheプロセス起動と終了に生じるオーバーヘッドを下げるためにmpmで予めプロセスを起動しておきます。


それがStartServers、MinSpareServers、MaxSpareServersの設定になります。




<IfModule mpm_prefork_module>


StartServers 10


MinSpareServers 50


MaxSpareServers 70


MaxClients 110


MaxRequestsPerChild 1000


MaxMemFree 2048


</IfModule>




httpd-default.conf

KeepAliveは諸刃の刃なので、ONにするときはよく検証しましょう。


できるかぎりサーバの情報は伏せておきたいので情報表示はOffにします。



Timeout 300


KeepAlive Off


MaxKeepAliveRequests 100


KeepAliveTimeout 5


UseCanonicalName Off


AccessFileName .htaccess


ServerTokens Prod


ServerSignature Off


HostnameLookups Off


TraceEnable Off




PHPのインストール


PHPもソースからインストールします。


バージョン:5.2.14


PHPダウンロード


PHPも同様に必要最低限の機能のみインストールします。


configure



'./configure' \


'--with-apxs2=/usr/local/apache2/bin/apxs' \


'--enable-zend-multibyte' \


'--with-zlib' \


'--with-xmlrpc' \


'--with-gd' \


'--with-jpeg-dir=/usr/local' \


'--with-png-dir=/usr/local' \


'--enable-mbstring' \




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



zlibがないとエラーがでますが、zlibなどはyumからインストールしていただいて結構です。


やっておくと便利



ln -s /usr/local/lib/php.ini /etc/


ln -s /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ ./extensions





サーバ停止


上記の設定後、3日にロードアベレージが60程度まで上昇しサーバが停止しました。



サーバ停止の原因を探るため、topを見たところ一部のApacheプロセスがメモリを30%程度占有していることが判明しました。



同時にSWAPもどんどん増え、メモリ不足に陥りサーバが停止している事がわかりました。



PHPのメモリを制限する


php.iniのmemory_limit = 128M と恐ろしいことになっていたのでApacheが平均的に使用しているメモリ+αのサイズを設定しました。




memory_limit = 128M ⇒ memory_limit = 16M




APCを入れてみる


PHPの中間キャッシュを行うAPCを導入しました。



その結果、極端にメモリを消費するPHPファイルを除き高速に処理されるようになりました。



約、2倍ぐらい処理速度が向上しました。



導入後、キャッシュ利用サイズが7M程度なのでAPCに8Mのメモリを割り当てる設定にしました。


php.iniの変更

追記



extension=apc.so



追記後、Apacheを再起動してください。


副作用

PHPが利用できるメモリを制限したところ、予想通りですが“Fatal error: Allowed memory size”のエラーが一部のPHPファイルで発生しているのが確認できました。



問題のファイル名を調べてみると、Wiki内にテーブルや内部リンクが多くある場合メモリリークが発生しやすいようです。



この副作用で、どのプログラムが問題を起こしているのかを発見することができました。



このプログラムに関しては、Pukiwikiに情報がありメモリリークを軽減させるパッチがあったので適用させることで、比較的テーブルや内部リンクが多いページでもメモリリークが発生することはなくなりました。



Apacheのメモリを制限する


PHP側のメモリリークはなくなったものの、Wikiのテーブルや内部リンクの多いページにアクセスされ続けるとApacheがどんどんメモリを利用して解放しない現象が発生しました。



メモリ利用と解放の動き



Apacheがメモリ要求


OS→lib→Apache



Apcheのメモリ使用終了


OS lib←Apache



OSがメモリを要求 Apacheがメモリ解放


OS←lib Apache





このような動作をしているようでOSがメモリを要求しない限りlib(メインメモリーアロケータ)がメモリを解放しないので、OSがメモリを要求してこない限りApacheが使用するメモリはどんどん増えていきます。



物理メモリに余裕があれば殆どの場合問題にはなりにくい問題なのですが512MしかないのでOSのメモリ要求とApacheのメモリ要求で使い果たしてしまうようです。



ApacheにはMaxMemFreeという機能があります。




MaxMemFree ディレクティブは free() が呼ばれない限り、 主アロケータが保持できる空のメモリの最大値をキロバイト単位で設定します。 設定されていないか、零に設定されているときは、無制限になります。




なんとも難解な日本語で書かれているのですが、つまりlib(メインアロケータ)が保持できるメモリを制限し設定値以上のメモリはlib(メインアロケータ)はOSに返すのでApacheがメモリを食い続けるという現象がなくなりロードアベレージがかなり下がりました。



メモリ使用量は多いがCPU使用量は低いプロセスが多くあったので、定期的にプロセスのメモリを解放することにしました。




MaxRequestsPerChild 0 ⇒ MaxRequestsPerChild 5000




MaxRequestsPerChildは、プロセスが最大処理できるリクエスト数を設定するための物です。



設定値以上のリクエストを処理するとプロセスを再起動させるので、効率よく負荷の高いプロセスにメモリを割り振ることが可能です。




結果


平均ロードアベレージ:1.07


平均CPU使用率:22.1%


ブラウザがページを表示するまでの平均時間:0.87


平均未使用メモリ:42M


SWAP:30K


HTTP 503発生回数:0回



このような感じで現在も安定して動作しています。


WikiはRDBを利用しないためメモリ使用量が抑えられましたが、MySQLを利用する場合は13%~17%程度メモリ使用量が増加するのでmpmの設定でプロセス数を減らしメモリをどこかで浮かせる必要があります。


SWAP


SWAPが少し発生していたので、vmstatを見ていたところSWAPインが1日数十回発生するだけでSWAPアウトが発生していないのでメモリに置いていても利用頻度の低いデータはSWAPに移動されるのでそれが原因だと思われます。



監視


レンタルサーバでは、ログ解析や障害検知を行えていなかったのでZabbixとVISITORS Web Log Analyzerを導入しました。


Zabbixサーバは別のサーバに導入し、クライアントのみをインストールしています。




2010年11月20日土曜日

インフラエンジニアになるまで~就活~


おそらく今回の「インフラエンジニアになるまで」の最終章となる就活編です。



どのように職種を選んだのか


高校から大学まで長らくサーバやネットワークに関係する、バイトや学問に付けて、就職ももちろんインフラ系だと心の奥底では思っていたのですがいざ自分が就活をする身になった時、かなり悩みます。




そこで気づいた事は、いつでも会社は変えられるが職種は変えられない(変えにくい)点です。





就職後、その職種について年単位で専門知識を身につけていき、それらの知識や技術を人生に活かしていく必要があるためです。



これまでの経験や、知識を考慮して慎重に職種を選ぶ必要があります。



技術者の場合、何十年とまったく同じ内容の仕事をすることはないので少なくとも10年は“この仕事はできる”というのを見つけるといいと思います。




  1. これまで身につけた知識や技術を活かしたい

  2. 何かを実現したい


だいたいこの2つにパターンが分かれると思います。



1の場合は、必然的にかなり職種が絞られるので職種には困らないと思います。


2の場合は、1よりも目的が曖昧になりやすいので「なぜそれを実現したいのか?」「実現すると何がいいのか?」などの点を詰めておく必要があります。



会社選び


先ほどの1と2が決まれば、次は会社を選ぶ必要があります。



この選ぶ基準は非常にシンプルです。


とにかく“自分のやりたいことができ、自分の能力を発揮できる”という点です。



つまり、働く環境が重要なポイントです。



働く環境の見つけ方

働く前に、働く環境を知るのは難しいです。



しかし、知るチャンスはインターンシップや企業説明会、特に先輩社員などが出席している説明会に出席するといいと思います。



また、学校によっては先輩社員を紹介してくれる制度もあるようなので活用してみるといいでしょう。


ここで注意すべき点は、インターネットの情報や人の情報に頼りすぎない点です。



主観的な意見、一方的な解釈、一部局所的な解釈には特に気をつけましょう。



先輩社員や人事の方も、人間なのでその人に合わない人がいます。



説明会やインターンシップなどを活用してできるだけ多くの情報を仕入れましょう。




メーカ系かIT系


インフラエンジニアは、殆どの場合メーカ系かIT系に絞られます。



メーカ系



  • NTT

  • Cisco

  • Oracle

  • IIJ

  • CTC

  • IBM



IT系



  • mixi

  • GREE

  • Dwango

  • DeNA

  • サイボウズ

  • はてな




メーカ系では、自社のソリューションを扱う事が圧倒的に多く、その分野に関して比較的長いスパンで請け負うことが多いので、その分野に関してプロフェッショナルを目指す人向きだと思います。


IT系では、メーカ系ほど分業化が進んでない場合が多く、特定のソリューションに偏らない設計にする事が多いので幅広い知識を身につけられるジェネラリストを目指す人向きだと思います。



もちろん、メーカ系⇔IT系に転職する方も多くいるので最初の駆け出しとして自分が目指したい方向性を決めるのに参考にしてください。



採用試験内容


殆どの場合次のような順序で試験が行われます。




  1. 筆記試験(1回 or 2回)

  2. 専門試験

  3. 面接



筆記試験に関しては、SPIやGABなどが行われます。


これに関しては十分対策が行えるので80%以上の正答率を目指して対策しておきましょう。


可能であれば、TOEICなども受けておきましょう。



専門試験

企業によってかなり異なるのですが参考程度に記載しておきます。



  • ソートアルゴリズムの穴埋め問題(C Java)

  • インターネットの仕組み

  • ハブ ルータ スイッチの違い



面接

基本的な質問以外を記載しておきます。



  • これまで最も苦労して解決した技術ネタ

  • なぜLinuxが幅広く使われるのか

  • オープンソースについてどう思うか

  • プログラマーじゃなくなぜインフラなのか



最後に


インフラは現在の、ネット社会では欠かせない物です。




  • ちゃんと動いてて当たり

  • 時には夜中に起こされる

  • 基本的に表舞台にはでない

  • 表舞台にでるのは何かあった時だけ

  • 自分で経験を積むのが難しい




などの厳しい面もありますが、非常にやりがいのある仕事です。


最近は安価なVPSも登場し始めたのでVPSを借りてWebサーバを構築し運用するのも大きな経験になります。




ここまでお読みいただきありがとうございます。


これから、就活の方はこれまで学んだり経験してきた事を最大限にアピールする時です。経験は成功談だけでなく失敗談も重要な経験値です。失敗してどのようにリカバリーしたのか。そこで何を学んだのか。などをまとめて就活に挑んでください。




2010年11月13日土曜日

Apacheのlogrotate時にApacheが停止する問題


ずいぶん前からなのですが、Apacheのlogrotate後に本来再起動するはずが再起動しない問題がありました。



具体的な症状



  • Apacheのlogrotate後に再起動しない

  • logrotateはされている

  • プロセスを見るとApacheは立ち上がっている

  • ブラウザからHTTPにアクセスできない

  • ログを見るとApacheにSTOPシグナルが送られている



このような状況です。



原因


logrotate後にApacheにSTOPシグナルが送られ、その後ApacheにSTARTシグナルが送られているのですがSTOPでは停止しない時があったり、停止している間にSTARTシグナルが送られてきてエラーになっているようです。


特にアクセスが多い日に発生しているように見受けられましたのでメモリ解放にやや時間がかかるようです。



対策


STOPでは終了しないので、killしてApacheを強制終了させることにしました。



コード


apacheのlogrotate用のコードです。



概要


  • Apacheを強制終了する

  • 強制終了しない場合を考えて5秒まって5回繰り返す

  • 強制終了後、起動する

  • 起動しない場合メールを送る


準備

/etc/init.d/httpd を /usr/bin/ap にコピーしてください。




cp /etc/init.d/httpd /usr/bin/ap






/var/log/apache/*log {


rotate 30


daily


missingok


sharedscripts


postrotate


for max in $(seq 1 5)


do


HTTPD_P=`pgrep httpd | wc -l`


if [ "$HTTPD_P" != 0 ]


then


`/usr/bin/pkill httpd` > /dev/null


sleep 5s


elif [ "$HTTPD_P" = 0 ]


then


/usr/bin/ap start > /dev/null


break


fi


done


HTTPD_P=`pgrep httpd | wc -l`


if [ "$HTTPD_P" = 0 ]


then


echo Can Not Run HTTPD | mail -s HTTPD ALERT メールアドレス


fi



endscript


}





2010年11月12日金曜日

インフラエンジニアになるまで~大学へ~


表現があまり得意でないので,読みにくい記事ですがお読みいただいてありがとうございます.


続きを書きたいと思います.



大学に入学してから


おそらく殆どの人が高校3年生の時大きな選択を迫られたはずです.



やりたい事をするのか?新しい未来を開拓するのか?



基本情報処理,シスアド,CCNA,Perl,HTML,Linuxなどのスキルや知識がありました.



私はこの知識を今後にも活かし,高めようと決め情報工学を学べる大学へ進学しました.



入学した大学は産学協同で行うプロジェクトが盛んに行われており,そのプロジェクトが持つ各Webサーバの管理などをさせていただきました.



そこで主に学んだのは,ApacheのVirtualHostの機能や仕組み,DNSの機能や仕組み,DiscQuotaなどの1つのWebサーバを複数のドメインやプロジェクトで使うために必要な機能を知りました.



ネットワークへ


産学協同の活動から半年程度で私は活動から離れ,ネットワークを勉強できる環境を探しました.



ネットワークとは主にルータやスイッチなどですね.CCNAの資格を持っていたので,知り合いからCCNAの資格が活かせるバイトを紹介していただきました.



そのバイトでは,主にルータやスイッチを用いてパフォーマンス検証や構築提案などを行っていました.そこで学んだのは,チーム全体として成果を上げる手段,人のマネージメント方法など.



技術的にはOSI参照モデルを元にしたネットワークの仕組み,ネットワーク構築,リスクヘッジ,リスク分散などただネットワークを構築するだけでなくリスクを回避する方法や回避できない場合の軽減などを学びました.



そのバイト先には3年近くお世話になり,複雑な思いを抱きながら退職しました.



このような会社で学べたのは運がよかったと思っています.残念ながらネットワークやサーバ系のバイトやインターンシップを殆どありません.



しかし,最近は高負荷分散方法や大規模ネットワーク構築などの書籍が販売され内容もネットワークの知識がそこまで無くても知識として蓄える事ができます.



またVMなどを利用して仮想的に分散処理を行い,その分散処理はどのような状況において有効なのか,また逆に不得意とするのかなどの手順をまとめ,分析するだけでも大きな力になります.



たくさんサイトを作った


学生の頃は,本当に多くのサイトを作りました.



その殆どはPerlかPHPで書かれていました.まだレンタルサーバにMySQLやPostgreなどのDBが入っていないときはユーザ情報などはテキストに残していたのですがDBが普及し始めDBの勉強を始めました.



最近ではとくにかくDBを使うサイトが多くなってきており,DBの知識は必須です.



理想



  • LinuxにDBをインストールする(できればソースから)

  • ついでにPHPなど必要なパッケージやモジュールもインストールする(できればソースから)

  • Apacheもインストールする(できればソースから)

  • LinuxApacheMysqlPhp(LAMP)構成でサイトを作る

  • SEOを適用してユーザを集める

  • 収益モデルを考える

  • サーバをチューニングする

  • プログラムを見直す


この程度できれば十分だと思います.さくらVPSなど安価なVPSサーバが出てきているので,それらを利用するといいかもしれません.


次は、就活について書こうと思います.




2010年11月9日火曜日

インフラエンジニアになるまで~生い立ち編~


気づけば今の会社に入って,半年が経ちました.


いい環境,いい先輩に恵まれ毎日試行錯誤しながら頑張っています.


「新卒インフラエンジニア1年目」という記事を書き始めた理由は,私自身がITインフラエンジニアとして活躍したいと思った時にとても情報収集に困りました.



  • 一体現場ではどのような技術がどのように使われているのか?

  • 社内ではどのようにインフラを構築しているのか?

  • どのようなライフサイクルなのか?

  • 今までどのような環境で勉強していたのか?

  • 入社までに何をすればいいのか?



など多くの疑問がありました.



このような,情報は一部の採用情報ページにしか載っておらずせいぜい分かっても社内での過ごし方程度でしょう.


そのような思いと,情報を収集するだけでなくエンジニアとして情報を発信していかなくてはならないという気持ちからこのBlogを業務の片手間に書いてます.



このBlogが今後のインフラエンジニアや今活躍しているエンジニアの方に役に立てればいいと思ってます.




なぜインフラエンジニアなのか


私が初めて,インターネットを利用したのは高校2年生の情報の授業の時です.当時は既にADSLが普及し始めていたので他の人よりもかなり遅く利用し始めました.



当時,初めて見たサイトはYahooでした.Yahooを利用した時,非常に感動した記憶が今でも鮮明に思い返すことがあります.



「キーワードを入力すればたった数秒で多くの情報を表示してくれる.なんて素晴らしいサービスなんだろうか」と思いました.



そして,私もYahooのようなサイトを作りたいと思ったわけですね.



Yahooを作るためにはどのような,技術が必要なのか?というのを調べまくりました.



そして,分かったのはHTMLです.「どうやらHTMLというのを使えばYahooができるらしい」と思ったわけです.



HTMLは開始と終了のタグからなるマークアップランゲージだと独学で様々なサイトにお世話になりながらなんとか1つのHTMLを作りました.



そこで,新たな疑問にぶつかります.「このHTMLをどうやって公開すればいいのか?」という問題です.



HTMLを公開するにはサーバという物が必要みたいだと気づきました.当時既に無料レンタルサーバが多く存在していました.



また,有料でも500円程度出せば広告なしのサーバを借りることができました.



無料のレンタルサーバを借りて無事にHPを開設することができましたが,Yahooのように検索結果に応じて表示を変えることができない事に気づきました.



そこで私はCGIという存在を知り,Perlを中心としたプログラミングを勉強しました.



当時はYahooやGoogleのAPIなどは公開されていないので,自力で検索エンジンを作るのは非常に困難でした.結果的に検索エンジンではなく,掲示板を作ったのを覚えています.



しかし,無料のレンタルサーバではPerlで書いた掲示板が動かないことが判明しました.サーバについて色々調べると,自宅サーバなるものが存在すること知り自分のPCにApaheをインストールしルータのポートも解放するなど2週間程度かけてなんとか公開しました.



その時の達成感はおそらくエンジニアしか味わえないのではないでしょうか.



掲示板の人気が徐々に出てきたため自宅サーバにも大きな負荷がかかるようになりました.サーバのチューニングや高負荷に耐えられるルータにリプレイスするなどの作業を行いました.



その時,秒間10アクセス処理するのはこんなに難しいのか!(当時の私の中では非常にアクセスが多い方でした)と実感しサーバやネットワーク機器をチューニングしたりするのが楽しくなり,ネットワーク機器やサーバに触れる時間が多くなりました.



続きは近々公開します.




2010年11月6日土曜日

Amazon EC2が無料だったので使ってみた


現在、AmazonEC2が新規ユーザのみ1年間無料キャンペーンを行っている。



  1. EC2 micro instance 750時間分

  2. Elastic Load Balancer 750時間分、15GB

  3. Elastic Block Storage 10GB

  4. S3 5GB

  5. In/Out それぞれ15GBのデータ転送

  6. SimpleDB 25時間分 + 1GB

  7. Simple Queue Service 100,000 リクエスト

  8. Simple Notification Service 100,000 リクエスト



ロードバランサーまで無料で使えるという、恐ろしいサービス。



AmazonEC2基本


私はAmazonEC2既存ユーザだっため、無料対象外なのですが使ってみたので解説したいと思います。


インスタンス

AmazonEC2は、さくらレンタルサーバなどと同様のサービスと理解していただいて結構です。(以後、EC2と記載します)


EC2では、サーバの単位をインスタンスという単位で表します。


インスタンスにはそれぞれ、性能がありCPUのコア数やメモリ量が異なります。


CPU

CPUはEC2ではECUと表します。


ECUの性能は、AMD Opteron or Intel Xeon 1G~1.2GHzとされておりその時に応じて変動します。



HDD

EC2には基本的にHDDは搭載されていないためElastic Block Storage(EBS)を使用してEC2でマウントする必要があります。



micro instance


今回利用するmicro instanceは、最も低スペックのインスタンスです。


メモリは613Mです。


ECUに関しては2ECUまで自動に変動しますが、無料は1ECUまでなので注意してください。



インスタンス選択からSSH接続まで


ユーザ登録が完了するとAmazonCloudサービスのコントロールパネルにアクセスします。


コントロールパネルでEC2やEBS、S3などを一括管理することができます。


1.Launch Instanceでインスタンスを作成開始


f:id:koujirou6218:20101105165257j:image



2.OSを選択


今回はLinuxOSを選択します。


32bitか64bitも選択します。


f:id:koujirou6218:20101105165258j:image


OSはAmazonがカスタマイズしたLinuxになります。



3.インスタンスを選択


無料対象の一番上にあるmicro instanceを選択します。


f:id:koujirou6218:20101105165259j:image



4.セキュリティの設定


予め開けておくポートと、鍵認証のための設定を行います。


EC2はデフォルトでは鍵認証のみのサポートなるので鍵を生成し、PCに保存してください。


file_name.pemがダウンロードできると思います。



SSHは必ず開けておいてください。Webサーバを構築する場合はHTTPとMySQLも開けておくと便利でしょう。


f:id:koujirou6218:20101105165300j:image



以上で基本的な設定は終わりです。


5.SSHの設定


先ほどダウンロードしてきたpemファイルからPuttyで利用できる鍵を作ります。


今回はPuTTYgenを利用します。


PuTTYgen



PuTTYgenを起動しConversions⇒Import Key で先ほどpemファイルを読み込みます。


その後何も入力せずに、Save Private keyで出力し保存します。



6.SSH接続


先ほど生成したppkファイルをPuTTYで読み込み接続します。


デフォルトではrootでログインできません。


ec2-userと入力してください。




7.rootパスワードの設定


rootパスワードの変更にはsudoを使います。




sudo passwd root





以上でSSHの設定は終わりです。



デフォルトインストールパッケージ



MAKEDEV.x86_64 3.24-5.3.amzn1 installed


acl.x86_64 2.2.39-6.8.amzn1 installed


alsa-lib.x86_64 1.0.17-1.6.amzn1 installed


anacron.x86_64 2.3-45.6.amzn1 installed


at.x86_64 3.1.8-84.7.amzn1 installed


attr.x86_64 2.4.32-1.1.7.amzn1 installed


audit-libs.i386 1.7.17-3.10.amzn1 installed


audit-libs.x86_64 1.7.17-3.10.amzn1 installed


audit-libs-python.x86_64 1.7.17-3.10.amzn1 installed


authconfig.x86_64 5.3.21-6.9.amzn1 installed


aws-amitools-ec2.noarch 1.3.56066-2.5.amzn1 installed


aws-apitools-as.noarch 1.0.9.0-2.1.amzn1 installed


aws-apitools-common.noarch 1.0.0-3.0.amzn1 installed


aws-apitools-ec2.noarch 1.3.57419-2.3.amzn1 installed


aws-apitools-elb.noarch 1.0.9.3-2.2.amzn1 installed


aws-apitools-iam.noarch 1.0.0-3.4.amzn1 installed


aws-apitools-mon.noarch 1.0.2.3-2.1.amzn1 installed


aws-apitools-rds.noarch 1.2.006-2.2.amzn1 installed


basesystem.noarch 8.0-5.1.1.7.amzn1 installed


bash.x86_64 3.2-24.5.amzn1 installed


bc.x86_64 1.06-21.9.amzn1 installed


bind-libs.x86_64 32:9.7.0-5.P2.6.amzn1 installed


bind-utils.x86_64 32:9.7.0-5.P2.6.amzn1 installed


binutils.x86_64 2.20.51.0.2-5.11.17.amzn1 installed


bzip2.x86_64 1.0.6-1.6.amzn1 installed


bzip2-libs.x86_64 1.0.6-1.6.amzn1 installed


ca-certificates.noarch 2010.63-3.2.amzn1 installed


checkpolicy.x86_64 2.0.21-2.3.amzn1 installed


chkconfig.x86_64 1.3.30.2-2.7.amzn1 installed


cloud-init.noarch 0.5.14-12.amzn1 installed


conman.x86_64 0.2.5-2.3.5.amzn1 installed


coreutils.x86_64 5.97-23.9.amzn1 installed


cpio.x86_64 2.6-23.8.amzn1 installed


cpuspeed.x86_64 1:1.5-13.2.amzn1 installed


cracklib.i386 2.8.16-2.8.amzn1 installed


cracklib.x86_64 2.8.16-2.8.amzn1 installed


cracklib-dicts.x86_64 2.8.16-2.8.amzn1 installed


crontabs.noarch 1.10-8.9.amzn1 installed


cryptsetup-luks.x86_64 1.1.1-1.3.amzn1 installed


cryptsetup-luks-libs.x86_64 1.1.1-1.3.amzn1 installed


curl.x86_64 7.19.7-15.16.amzn1 installed


cyrus-sasl.x86_64 2.1.23-8.3.amzn1 installed


cyrus-sasl-lib.i386 2.1.23-8.3.amzn1 installed


cyrus-sasl-lib.x86_64 2.1.23-8.3.amzn1 installed


cyrus-sasl-plain.i386 2.1.23-8.3.amzn1 installed


cyrus-sasl-plain.x86_64 2.1.23-8.3.amzn1 installed


db4.i386 4.7.25-15.4.amzn1 installed


db4.x86_64 4.7.25-15.4.amzn1 installed


db4-utils.x86_64 4.7.25-15.4.amzn1 installed


dbus-glib.x86_64 0.73-8.8.amzn1 installed


dbus-libs.x86_64 1:1.2.24-1.10.amzn1 installed


dbus-python.x86_64 0.83.0-6.1.5.amzn1 installed


device-mapper.x86_64 1.02.48-3.8.amzn1 installed


device-mapper-event.x86_64 1.02.48-3.8.amzn1 installed


device-mapper-event-libs.i386 1.02.48-3.8.amzn1 installed


device-mapper-event-libs.x86_64 1.02.48-3.8.amzn1 installed


device-mapper-libs.i386 1.02.48-3.8.amzn1 installed


device-mapper-libs.x86_64 1.02.48-3.8.amzn1 installed


device-mapper-multipath.x86_64 0.4.9-21.6.amzn1 installed


device-mapper-multipath-libs.x86_64


0.4.9-21.6.amzn1 installed


dhclient.x86_64 12:3.0.5-23.8.amzn1 installed


dhcpv6-client.x86_64 1.0.22-1.10.amzn1 installed


diffutils.x86_64 2.8.1-27.6.amzn1 installed


dmraid.i386 1.0.0.rc16-8.3.amzn1 installed


dmraid.x86_64 1.0.0.rc16-8.3.amzn1 installed


dmraid-events.x86_64 1.0.0.rc16-8.3.amzn1 installed


dosfstools.x86_64 2.11-9.6.amzn1 installed


dump.x86_64 1:0.4-0.4.b42.3.amzn1 installed


e2fsprogs.x86_64 1.41.12-2.7.amzn1 installed


e2fsprogs-libs.x86_64 1.41.12-2.7.amzn1 installed


ec2-utils.noarch 0.2-1.3.amzn1 installed


ed.x86_64 0.2-39.8.amzn1 installed


elfutils-libelf.x86_64 0.147-0.1.6.amzn1 installed


ethtool.x86_64 6-4.8.amzn1 installed


expat.x86_64 1.95.8-8.3.8.amzn1 installed


expect.x86_64 5.44.1.15-1.8.amzn1 installed


file.x86_64 5.04-4.5.amzn1 installed


file-libs.x86_64 5.04-4.5.amzn1 installed


filesystem.x86_64 2.4.0-3.7.amzn1 installed


findutils.x86_64 1:4.2.27-6.8.amzn1 installed


fipscheck.x86_64 1.2.0-4.1.5.amzn1 installed


fipscheck-lib.x86_64 1.2.0-4.1.5.amzn1 installed


freetype.x86_64 2.3.11-3.5.amzn1 installed


gamin.x86_64 0.1.10-9.6.amzn1 installed


gamin-python.x86_64 0.1.10-9.6.amzn1 installed


gawk.x86_64 3.1.5-14.8.amzn1 installed


gdbm.x86_64 1.8.0-35.3.amzn1 installed


get_reference_source.noarch 1.0.2-1.9.amzn1 installed


giflib.x86_64 4.1.6-3.1.2.amzn1 installed


glib2.x86_64 2.22.5-3.5.amzn1 installed


glibc.i686 2.12-1.2.21.amzn1 installed


glibc.x86_64 2.12-1.2.21.amzn1 installed


glibc-common.x86_64 2.12-1.2.21.amzn1 installed


gnupg.x86_64 1.4.5-14.7.amzn1 installed


gnupg2.x86_64 2.0.10-3.9.amzn1 installed


gpgme.x86_64 1.1.8-3.3.amzn1 installed


gpm-libs.x86_64 1.20.6-10.3.amzn1 installed


grep.x86_64 2.5.1-55.6.amzn1 installed


groff.x86_64 1.18.1.4-19.4.amzn1 installed


gzip.x86_64 1.3.12-17.4.amzn1 installed


hdparm.x86_64 9.16-3.3.7.amzn1 installed


hesiod.i386 3.1.0-19.3.amzn1 installed


hesiod.x86_64 3.1.0-19.3.amzn1 installed


hmaccalc.x86_64 0.9.6-3.8.amzn1 installed


hwdata.noarch 0.213.18-1.5.amzn1 installed


info.x86_64 4.8-14.6.amzn1 installed


initscripts.x86_64 8.45.30-2.11.amzn1 installed


iproute.x86_64 2.6.32-5.5.amzn1 installed


ipsec-tools.x86_64 0.7.3-1.8.amzn1 installed


iptables.x86_64 1.4.7-1.4.amzn1 installed


iptstate.x86_64 1.4-2.6.amzn1 installed


iputils.x86_64 20071127-12.3.amzn1 installed


irqbalance.x86_64 2:0.55-25.2.amzn1 installed


java-1.6.0-openjdk.x86_64 1:1.6.0.0-44.1.9.1.15.amzn1 installed


jline.noarch 0.9.94-0.8.4.amzn1 installed


jpackage-utils.noarch 1.7.5-3.11.9.amzn1 installed


kernel.x86_64 2.6.34.7-56.40.amzn1 installed


keyutils-libs.i386 1.2-1.8.amzn1 installed


keyutils-libs.x86_64 1.2-1.8.amzn1 installed


kpartx.x86_64 0.4.9-21.6.amzn1 installed


krb5-libs.i386 1.8.1-6.10.amzn1 installed


krb5-libs.x86_64 1.8.1-6.10.amzn1 installed


krb5-workstation.x86_64 1.8.1-6.10.amzn1 installed


ksh.x86_64 20100202-1.6.amzn1 installed


less.x86_64 436-2.6.amzn1 installed


libX11.x86_64 1.3-1.7.amzn1 installed


libX11-common.x86_64 1.3-1.7.amzn1 installed


libXau.x86_64 1.0.5-1.5.amzn1 installed


libXext.x86_64 1.1-2.5.amzn1 installed


libXi.x86_64 1.3-2.2.amzn1 installed


libXrender.x86_64 0.9.5-1.2.amzn1 installed


libXtst.x86_64 1.0.99.2-3.2.amzn1 installed


libacl.x86_64 2.2.39-6.8.amzn1 installed


libaio.i386 0.3.107-10.4.amzn1 installed


libaio.x86_64 0.3.107-10.4.amzn1 installed


libattr.x86_64 2.4.32-1.1.7.amzn1 installed


libblkid.x86_64 2.17.2-3.8.amzn1 installed


libcap.x86_64 2.16-5.2.4.amzn1 installed


libcap-ng.x86_64 0.6.4-2.6.amzn1 installed


libcom_err.i386 1.41.12-2.7.amzn1 installed


libcom_err.x86_64 1.41.12-2.7.amzn1 installed


libcurl.x86_64 7.19.7-15.16.amzn1 installed


libedit.x86_64 2.11-4.20080712cvs.1.2.amzn1 installed


libgcc.i386 4.1.2-48.14.amzn1 installed


libgcc.x86_64 4.1.2-48.14.amzn1 installed


libgcrypt.x86_64 1.4.4-5.6.amzn1 installed


libgpg-error.x86_64 1.7-3.4.amzn1 installed


libhugetlbfs.x86_64 2.7-3.2.amzn1 installed


libidn.x86_64 0.6.5-1.1.7.amzn1 installed


libjpeg.x86_64 6b-46.2.amzn1 installed


libksba.x86_64 1.0.5-2.4.amzn1 installed


libnl.x86_64 1.1-11.2.amzn1 installed


libpcap.x86_64 14:1.0.0-5.20091201git117cb5.5.amzn1 installed


libpng.x86_64 2:1.2.10-7.1.8.amzn1 installed


libselinux.i386 2.0.94-1.6.amzn1 installed


libselinux.x86_64 2.0.94-1.6.amzn1 installed


libselinux-python.x86_64 2.0.94-1.6.amzn1 installed


libselinux-utils.x86_64 2.0.94-1.6.amzn1 installed


libsemanage.x86_64 2.0.43-4.2.amzn1 installed


libsemanage-python.x86_64 2.0.43-4.2.amzn1 installed


libsepol.i386 2.0.41-3.4.amzn1 installed


libsepol.x86_64 2.0.41-3.4.amzn1 installed


libss.x86_64 1.41.12-2.7.amzn1 installed


libssh2.x86_64 1.2.2-5.2.amzn1 installed


libstdc++.x86_64 4.1.2-48.14.amzn1 installed


libsysfs.x86_64 2.0.0-6.9.amzn1 installed


libudev.i386 147-2.18.9.amzn1 installed


libudev.x86_64 147-2.18.9.amzn1 installed


libusb.x86_64 0.1.12-5.1.8.amzn1 installed


libuser.x86_64 0.54.7-2.1.7.amzn1 installed


libutempter.x86_64 1.1.4-4.4.amzn1 installed


libuuid.x86_64 2.17.2-3.8.amzn1 installed


libxcb.x86_64 1.6-1.14.amzn1 installed


libxml2.x86_64 2.7.6-1.6.amzn1 installed


libxml2-python.x86_64 2.7.6-1.6.amzn1 installed


logrotate.x86_64 3.7.8-7.4.amzn1 installed


logwatch.noarch 7.3-8.8.amzn1 installed


lsof.x86_64 4.78-3.7.amzn1 installed


lua.x86_64 5.1.4-4.1.2.amzn1 installed


lvm2.x86_64 2.02.66-3.8.amzn1 installed


lvm2-libs.x86_64 2.02.66-3.8.amzn1 installed


m2crypto.x86_64 0.20.2-6.3.amzn1 installed


mailx.x86_64 12.4-6.2.amzn1 installed


make.x86_64 1:3.81-3.5.amzn1 installed


man.x86_64 1.6f-28.4.amzn1 installed


man-pages.noarch 3.22-10.4.amzn1 installed


mdadm.x86_64 2.6.9-3.7.amzn1 installed


mgetty.x86_64 1.1.33-9.6.amzn1 installed


mingetty.x86_64 1.07-5.2.2.7.amzn1 installed


mkbootdisk.x86_64 1.5.3-2.1.7.amzn1 installed


mkinitrd.i386 5.1.19.6-61.20.amzn1 installed


mkinitrd.x86_64 5.1.19.6-61.20.amzn1 installed


mktemp.x86_64 3:1.5-23.2.2.7.amzn1 installed


mlocate.x86_64 0.15-2.9.amzn1 installed


module-init-tools.x86_64 3.3-0.pre3.1.60.7.amzn1 installed


mtools.x86_64 3.9.10-2.6.amzn1 installed


nano.x86_64 2.0.6-1.8.amzn1 installed


nash.x86_64 5.1.19.6-61.20.amzn1 installed


nc.x86_64 1.84-10.6.amzn1 installed


ncurses.x86_64 5.7-3.20090208.4.amzn1 installed


ncurses-base.x86_64 5.7-3.20090208.4.amzn1 installed


ncurses-libs.i386 5.7-3.20090208.4.amzn1 installed


ncurses-libs.x86_64 5.7-3.20090208.4.amzn1 installed


net-tools.x86_64 1.60-102.2.amzn1 installed


newt.x86_64 0.52.11-1.4.amzn1 installed


nspr.x86_64 4.8.4-2.5.amzn1 installed


nss.x86_64 3.12.6-2.10.amzn1 installed


nss-softokn.x86_64 3.12.4-17.7.amzn1 installed


nss-softokn-freebl.i386 3.12.4-17.7.amzn1 installed


nss-softokn-freebl.x86_64 3.12.4-17.7.amzn1 installed


nss-sysinit.x86_64 3.12.6-2.10.amzn1 installed


nss-util.x86_64 3.12.6-1.2.amzn1 installed


ntp.x86_64 4.2.4p8-2.10.amzn1 installed


ntpdate.x86_64 4.2.4p8-2.10.amzn1 installed


ntsysv.x86_64 1.3.30.2-2.7.amzn1 installed


numactl.i386 2.0.3-8.5.amzn1 installed


numactl.x86_64 2.0.3-8.5.amzn1 installed


openldap.i386 2.4.19-11.7.amzn1 installed


openldap.x86_64 2.4.19-11.7.amzn1 installed


openssh.x86_64 5.3p1-15.12.amzn1 installed


openssh-clients.x86_64 5.3p1-15.12.amzn1 installed


openssh-server.x86_64 5.3p1-15.12.amzn1 installed


openssl.i686 1.0.0a-1.2.amzn1 installed


openssl.x86_64 1.0.0a-1.2.amzn1 installed


pam.i386 1.1.1-4.9.amzn1 installed


pam.x86_64 1.1.1-4.9.amzn1 installed


pam_ccreds.i386 3-5.9.amzn1 installed


pam_ccreds.x86_64 3-5.9.amzn1 installed


pam_krb5.i386 2.3.11-1.8.amzn1 installed


pam_krb5.x86_64 2.3.11-1.8.amzn1 installed


pam_passwdqc.i386 1.0.2-1.2.2.7.amzn1 installed


pam_passwdqc.x86_64 1.0.2-1.2.2.7.amzn1 installed


passwd.x86_64 0.77-4.4.amzn1 installed


pax.x86_64 3.4-2.7.amzn1 installed


pcre.x86_64 6.6-2.8.amzn1 installed


perl.x86_64 4:5.10.1-109.7.amzn1 installed


perl-Module-Pluggable.x86_64 1:3.90-109.7.amzn1 installed


perl-Pod-Escapes.x86_64 1:1.04-109.7.amzn1 installed


perl-Pod-Simple.x86_64 1:3.13-109.7.amzn1 installed


perl-libs.x86_64 4:5.10.1-109.7.amzn1 installed


perl-version.x86_64 3:0.77-109.7.amzn1 installed


pinentry.x86_64 0.7.3-3.6.amzn1 installed


pkgconfig.x86_64 1:0.21-2.4.amzn1 installed


policycoreutils.x86_64 2.0.82-28.1.5.amzn1 installed


policycoreutils-python.x86_64 2.0.82-28.1.5.amzn1 installed


popt.x86_64 1.13-7.6.amzn1 installed


prelink.x86_64 0.4.3-3.2.amzn1 installed


procmail.x86_64 3.22-25.1.2.amzn1 installed


procps.x86_64 3.2.7-16.6.amzn1 installed


psacct.x86_64 6.3.2-44.6.amzn1 installed


psmisc.x86_64 22.2-7.7.amzn1 installed


pth.x86_64 2.0.7-6.7.amzn1 installed


pygobject2.x86_64 2.20.0-4.8.amzn1 installed


pygpgme.x86_64 0.1-18.20090824bzr68.6.amzn1 installed


python.noarch 1:2.6-1.19.amzn1 installed


python-cheetah.x86_64 2.4.1-1.6.amzn1 installed


python-configobj.noarch 4.6.0-2.1.5.amzn1 installed


python-iniparse.noarch 0.3.1-2.1.5.amzn1 installed


python-markdown.noarch 2.0.1-3.1.3.amzn1 installed


python-pycurl.x86_64 7.19.0-5.3.amzn1 installed


python-pygments.noarch 1.1.1-1.3.amzn1 installed


python-setuptools.noarch 0.6.10-1.7.amzn1 installed


python-sqlite.x86_64 2.6.0-1.8.amzn1 installed


python-urlgrabber.noarch 3.9.1-6.4.amzn1 installed


python-yaml.noarch 3.05-1.rf.6.amzn1 installed


python26.x86_64 2.6.5-2.14.amzn1 installed


python26-libs.x86_64 2.6.5-2.14.amzn1 installed


quota.x86_64 1:3.17-10.4.amzn1 installed


rdist.x86_64 1:6.1.5-44.9.amzn1 installed


readahead.x86_64 1:1.3-8.9.amzn1 installed


readline.i386 5.1-3.7.amzn1 installed


readline.x86_64 5.1-3.7.amzn1 installed


rhino.noarch 1.7-0.7.r2.2.6.amzn1 installed


rmt.x86_64 1:0.4-0.4.b42.3.amzn1 installed


rng-utils.x86_64 1:2.0-1.14.1.6.amzn1 installed


rootfiles.noarch 8.1-2.7.amzn1 installed


rpm.x86_64 4.8.0-9.27.amzn1 installed


rpm-libs.x86_64 4.8.0-9.27.amzn1 installed


rpm-python.x86_64 4.8.0-9.27.amzn1 installed


rsync.x86_64 2.6.8-3.1.8.amzn1 installed


ruby.x86_64 1.8.7.302-1.2.amzn1 installed


ruby-libs.x86_64 1.8.7.302-1.2.amzn1 installed


sed.x86_64 4.2.1-5.4.amzn1 installed


selinux-policy.noarch 2.4.6-279.9.amzn1 installed


selinux-policy-targeted.noarch 2.4.6-279.9.amzn1 installed


sendmail.i386 8.14.4-7.9.amzn1 installed


sendmail.x86_64 8.14.4-7.9.amzn1 installed


setools.x86_64 3.3.6-4.1.9.amzn1 installed


setools-console.x86_64 3.3.6-4.1.9.amzn1 installed


setools-libs.x86_64 3.3.6-4.1.9.amzn1 installed


setools-libs-python.x86_64 3.3.6-4.1.9.amzn1 installed


setserial.x86_64 2.17-19.2.2.7.amzn1 installed


setup.noarch 2.5.58-7.6.amzn1 installed


sgpio.x86_64 1.2.0_10-2.6.amzn1 installed


shadow-utils.x86_64 2:4.1.4.2-6.5.amzn1 installed


slang.x86_64 2.0.6-4.6.amzn1 installed


sos.noarch 2.1-0.6.amzn1 installed


sqlite.x86_64 3.6.20-1.6.amzn1 installed


sudo.x86_64 1.7.2p2-4.5.amzn1 installed


symlinks.x86_64 1.2-24.3.9.amzn1 installed


sysfsutils.x86_64 2.0.0-6.9.amzn1 installed


sysklogd.x86_64 1.4.1-46.8.amzn1 installed


syslinux.x86_64 3.11-4.7.amzn1 installed


system-release.noarch 1-0.9.2 installed


sysvinit.x86_64 2.87-3.dsf.7.amzn1 installed


tar.x86_64 2:1.15.1-30.6.amzn1 installed


tcl.x86_64 1:8.5.7-5.3.amzn1 installed


tcp_wrappers.x86_64 7.6-56.3.6.amzn1 installed


tcp_wrappers-libs.x86_64 7.6-56.3.6.amzn1 installed


tcpdump.x86_64 14:4.0.0-3.20090921gitdf3cb4.1.4.amzn1 installed


tcsh.x86_64 6.17-7.5.amzn1 installed


time.x86_64 1.7-27.7.amzn1 installed


tmpwatch.x86_64 2.9.16-3.7.amzn1 installed


traceroute.x86_64 3:2.0.1-5.6.amzn1 installed


tzdata.noarch 2010i-1.5.amzn1 installed


tzdata-java.noarch 2010i-1.5.amzn1 installed


udev.x86_64 147-2.18.9.amzn1 installed


unzip.x86_64 5.52-3.6.amzn1 installed


usermode.x86_64 1.88-3.12.amzn1 installed


ustr.x86_64 1.0.4-9.1.5.amzn1 installed


util-linux-ng.x86_64 2.17.2-3.8.amzn1 installed


vim-common.x86_64 2:7.0.109-6.11.amzn1 installed


vim-enhanced.x86_64 2:7.0.109-6.11.amzn1 installed


vim-minimal.x86_64 2:7.0.109-6.11.amzn1 installed


vixie-cron.x86_64 4:4.1-77.6.amzn1 installed


wget.x86_64 1.12-1.4.5.amzn1 installed


which.x86_64 2.16-7.7.amzn1 installed


words.noarch 3.0-9.1.7.amzn1 installed


xz.x86_64 4.999.9-0.3.beta.20091007git.4.amzn1 installed


xz-libs.x86_64 4.999.9-0.3.beta.20091007git.4.amzn1 installed


xz-lzma-compat.x86_64 4.999.9-0.3.beta.20091007git.4.amzn1 installed


yum.noarch 3.2.27-9.7.amzn1 installed


yum-metadata-parser.x86_64 1.1.2-14.1.4.amzn1 installed


yum-plugin-fastestmirror.noarch 1.1.26-9.5.amzn1 installed


yum-plugin-security.noarch 1.1.26-9.5.amzn1 installed


yum-updatesd.noarch 1:0.9-2.8.amzn1 installed


zip.x86_64 3.0-1.7.amzn1 installed


zlib.i386 1.2.3-24.6.amzn1 installed


zlib.x86_64 1.2.3-24.6.amzn1 installed




起動スクリプト



anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off


atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off


cloud-init 0:off 1:off 2:on 3:on 4:on 5:on 6:off


cloud-init-user-scripts 0:off 1:off 2:on 3:on 4:on 5:on 6:off


conman 0:off 1:off 2:off 3:off 4:off 5:off 6:off


cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off


crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off


iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off


irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off


lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off


mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off


mdmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off


multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off


netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off


netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off


network 0:off 1:off 2:on 3:on 4:on 5:on 6:off


ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off


psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off


rawdevices 0:off 1:off 2:off 3:on 4:on 5:on 6:off


rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off


readahead_early 0:off 1:off 2:on 3:on 4:on 5:on 6:off


readahead_later 0:off 1:off 2:off 3:off 4:off 5:on 6:off


restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off


saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off


sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off


sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off


udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off


yum-updatesd 0:off 1:off 2:on 3:on 4:on 5:on 6:off




使ってみて


サーバが遠い事もあり、コンソールの動作は遅いですがギリギリ問題無い程度です。


同様にコントロールパネルも重たいです。



対象サービス


Micro Instanceは小規模なアプリケーションを安価に運用したい人向けようで、1分当たりのリクエストが数十件程度を想定しているそうだ。


なので自身のHPなどであればいいが、コミュニティーサイトの運用などは難しいと思います。




2010年11月3日水曜日

バーチャルマシンの準備


開発や研究などで、様々な環境や異なるOSを利用しなければいけない事が多々あります。


近年、仮想環境が無料でも手に入るようになり単一のPCに様々な環境を構築することが可能になりました。



仮想化アプリケーション


代表的な仮想化アプリケーションとして2つあります。



  1. VirtualBox

  2. VMWare Player



殆どの人はこの2点のアプリケーションを利用していると思います。


VirtualBoxはSun(現Oracle)によって開発された仮想化アプリケーションです。


VMwareはその名の通りでVMware社が開発したアプリケーションで、サーバ用のVMWareServerやESXiなど高機能な仮想アプリケーションをリリースしています。



両者共に、Windowsから多くのLinuxディストリビューションに対応しており無償でダウンロードする事ができます。



VirtualBoxとVMWare Playerどちらを選ぶのか


両者共に同様の機能が搭載されているので大差はありません。


VirtualBoxには次のような特徴があります。



  1. VMWareより速い

  2. スナップショットが利用可能


VMWareには次のような特徴があります



  1. NAT通信が速い

  2. サポートしているOSが多い

  3. ホストOSとゲストOS間でのドラッグアンドドロップでファイル移動が可能

  4. GUI利用時のマウス移動がスムーズ

  5. USBデバイスの認識が簡単



VMWareを選んだ理由


以前はVirtualBoxを利用していたのですが、NATの制御や管理が面倒だったためVMWareに乗り換えました。



VMWareにはホストOSやリモートOSとのNAT通信を支援するツールがあります。


vmnetcfgを利用することで簡単にポートフォワーディングの設定からDHCPの設定まで行えます。


vmnetcfgはデフォルトではインストールされないので以下の手順でインストールします。



  1. VMWare本体をダウンロード

  2. コマンドプロンプトで「VMware-player-3.0.0-203739.exe /e .\extract」と入力

  3. extractディレクトリが生成され、その中にnetwork.cabがあるのでnetwork.cabを解凍する

  4. vmnetcfg.exeをC:\Program Files\VMware\VMware Playerに移動する


以下から直接ダウンロードすることもできます。


http://kubox.info/vmnetcfg.exe


NAT環境では、リモートOSからゲストOSにアクセスするにはvmnetcfgなどを利用してポートフォワーディングを行う必要があります。



接続方式の違い


仮想環境の接続方式には大きく分けて3つあります。



  1. ブリッジ接続

  2. NAT

  3. ホストオンリー



ブリッジ接続

あたかもマシンが2台あるかのように接続する方法です。


ホストマシン、リモートマシン、ゲストマシンの通信が可能です。



NAT

ゲストマシンはホストマシンのNICを利用して通信します。


リモートマシン、ホストマシンはポートフォワーディングの設定を行わないと通信できません。



ホストオンリ

ホストマシンとゲストマシン間のみの通信が可能です。


インターネットへの接続はできません。



NAT利用のススメ


ブリッジ接続を行った場合NATに比べてネットワーク設定が安易になる反面、1台のPCで複数のIPを消費してしまうため通信機器に影響を与えたり、セキュリティが強化されている環境では通信できなかったり、ゲストマシンも個別にセキュリティを設定する必要があるためシステム的に脆弱になりがちです。そのため面倒でもNATを利用しましょう。



2010年10月29日金曜日

GALAXY Sを買って困ったこと,よかったことなど


アキヨドで今月の初めあたりに運良くGALAXY Sを予約でき本日購入してきました.


実は今まではXperia(プライベート)とiPhone4(会社用)を使っていたのですが,プライベート用のXperiaがちょっと使いにくくて


DoCoMoのポイントも溜まっていたので機種変してきました.




GALAXY S最初の感想


Xperia iPhone4 と比べて非常に軽いです.


iPhone4(137g) Xperia(139g) GALAXY S(118g)と非常に軽い仕様になっています.


次に気になったのが,画面の明るさです.


iPhone4と同等の綺麗さだと思います.またタッチパネルの感度もiPhone4にまったく劣りません.



困ったこと


Xperiaから電話帳やメールなどのデータを移す際にSDカードにコピーしたのですが,GALAXY SにSDカードを入れると


まったく見えない現象に遭遇しました.


よくよくディレクトリを調べると,SDカードは「/mnt/sdcard/external_sd」にマウントされていることがわかりました.


バックアップからインポートする際に殆どのアプリは「/mnt/sdcard/...」を見に行くので手動でバックアップしたディレクトリまで移動する必要があります.



電話帳は,Google Contactを利用してXperiaから同期していたので簡単に移行する事ができました.


GoogleContactを利用している場合は,専用のアプリかGmail経由でアドレス帳を編集するしかないと思っていたのですが公式マネージツールがありました.


Google Releases an API for Contacts


マネージツールでは一括でグループ分けや,重複ユーザの統合が簡単に行えます.


SPモードが使えないという方は以前書いた記事を参考にして下さい.


SPモードを契約しており,3G回線を利用している場合のみ利用可能です.




Flashは使えるのか?


使えます.ニコニコ生放送がサクサク動きました.


f:id:koujirou6218:20101028232039j:image




iPhone4とGALAXY Sどちらがいいのか


GALAXY SがiPhone4に勝る点



  1. 動作が速い

  2. DoCoMoだから回線も速い

  3. GoogleMapの描写は早い

  4. 画面が大きい

  5. 生放送がみられるぐらいFlashがさくさく


iPhone4がGALAXY Sに勝る点



  1. Google Mapの現在地点を示すポイントの動作がスムーズ

  2. アプリが豊富

  3. 洗練されたインタフェース

  4. Skypがある

  5. LEDフラッシュ搭載

  6. Twitterクライアントたくさん



サッと思いつくのはこれぐらいでしょうか.


個人の感想としては,インタフェースはiPhone4ですが機能はGALAXY Sといったところです.




2010年10月23日土曜日

MySQLのクエリーログ


今日は開発からMySQLに投げているクエリーの調子が悪いという話がきました。


開発は基本的にPHPなのですが、PHPからDBに接続しクエリを投げる際にPHP5.1から実装されたPDOを利用しています。


PDOとは


DBにはMySQLやPostgreSQL、Oracleなどがあります。


DBにデータを入れたり、DBからデータを抜き出したり、検索したりする場合はDBに対してクエリを実行します。しかし、クエリはDBによって異なるので新しくクエリを覚えるのは非常にトレーニングコストがかかったりします。


PDOは、データベースの違いによるクエリの差を吸収してくれるための関数です。


完全に差を吸収してくれるわけではありませんが、MySQLからPostgreSQLに以降する時などに非常に効率が上がり、セキュリティを向上させる仕組みもあるのでセキュリティ向上も期待できます。




PDOからクエリを取得できない


今日問題が起こったのはPDOからDBに実際に渡るクエリを知る術が基本的にないため、クエリが正しく実行されているのかを分析できない点にありました。


PDOからクエリを収集する方法



  1. MySQL QueryLogを取る

  2. TCPダンプを取る


などがありました。TCPダンプを取るよりも明らかにクエリログを取る方が簡単なのでこちらを採用しました。



クエリログを取る方法


/etc/my.cnfにlogを追加します。



log=/var/log/mysql/query.log




logディレクトリがない場合は予め作成しておいてください。


また、MySQL実行ユーザの権限をディレクトリに付けてください。



普通はこんな感じでしょうか



chown root:mysql /var/log/mysql/




パーミッションは775です。


MySQLを再起動させます。


ログの監視を開始します。



tail -f /var/log/mysql/query.log




しかし、問題のあるクエリを投げてもいっこうにログが流れてきません‥。



どうやらQueryCacheが効いているようです。


QueryCacheは、参照系のクエリが実行されキャッシュにある場合クエリを実行せずにキャッシュから結果を返すためログにクエリが残りません。


MySQLのキャッシュをクリアします。


MySQLにログイン後



FLUSH QUERY CACHE;




これでログにクエリが流れてきました。



結局、サーバ側やPHPの問題ではなく投げているクエリが間違っていただけでした。。。。



この設定では、ずっとログを書き込んで行くのでローテートログなどを設定する必要があります。


2010年10月22日金曜日

今日はNFSを触ってみました


NFS(Network File System)はLinuxで利用されるファイル共有システムです。


Windowsのようにネットワークに接続されたマシン同士でファイル共有を行うことができます。


NFSを行うには、NFSサーバとNFSクライアントで最低2台のマシンが必要になります。


NFSサーバ側で公開設定されたディレクトリをネットワーク経由でクライアントが利用できる仕組みです。


ファイル共有として利用されるのが多いですが、シチュエーション的にはユーザ個別のディレクトリがある/home/以下を共有すると


他のマシンでも同じ環境を引き継ぐ事ができたりするので複数あるサーバ機などに利用したりします。


今回はVMで、2機のマシンを準備しました。


サーバ:CentOS 64bit 192.168.0.128


クライアント:RedHat 64bit 192.168.0.130



サーバー側の設定


共有したいディレクトリを設定します。


設定ファイル



etc/exports




この設定ファイルに次のように入力します



/home/kojirou/work 192.168.0.130(rw)




これで、/home/kojirou/work ディレクトリを 192.168.0.130からの読み込み/書き込みが可能になります。


192.168.0.0/24 などネットワークを指定することもできます。




共有したディレクトリ 許可するクライアントのIP又はホスト名(rw(読み込み書き込み可能/ro(読み込みのみ))




許可するクライアントは「,」で区切り複数していすることが可能です。




/usr/local 192.168.0.1(ro) 192.168.0.2(ro)


/home 192.168.0.1(rw) 192.168.0.2(rw)




ここまで設定できれば、NFSを起動します。



service nfs start



クライアントの設定


クライアント側では、サーバ側で設定したディレクトリに対してマウントするだけです。



mount -t nfs 192.168.0.128:/home/kojirou/work /home/kojiro/work



mount -t nfs NFSサーバ:NFSサーバ側の共有したディレクトリ クライアント側の展開ディレクトリ


するとエラーが出てしまいました。



mount.nfs: Input/output error.




これは、クライアント側でportmapが起動していないためポートマッピングできないというエラーなのでポートマッパーを起動します。



/usr/sbin/portmap start




そして、再度マウントさせます。何も表示されなければ共有完了です。



セキュリティ


NFSは、垂直型のファイル共有システムなのでNFSサーバが攻撃されてしまえばクライアントは一気に停止する危険性があります。


先ほどクライアント側で起動したポートマッパーは、NFSサーバの接続先をクライアントに伝えるためのデーモンです。


おそらく侵入者はポートマッパーからNFSサービスを受けている接続先を特定し攻撃しようとするでしょう。




それを防ぐために /etc/hosts.allow と /etc/hosts.deny を編集し指定したネットワークからのみのサービスを利用できるようにアクセス制限を行います。




/etc/hosts.allow と /etc/hosts.deny は次のような動作をします。


hosts.allowから許可されているか? (Yes) → サービスにアクセス


(No)↓


/etc/hosts.denyから拒否されているか? (Yes)→アクセス拒否


(No)↓


   サービスにアクセス



2つのファイルはデフォルトでは何も書かれていないのですべてのアクセスを許可しています。


/etc/hosts.allow



portmap: 192.168.0.130



こちらも同様にネットワークを指定することも可能です。


デーモン名:IP/HOST で指定します。


「,」で区切り複数していすることが可能です。


/etc/hosts.deny



portmap:ALL




マウントできない場合


NFSは複数のデーモンを利用しているので、各デーモンごとにポートを開けてる必要があります。


サーバ側で rpcinfo -p コマンドでNFSが利用しているポートを調べることができます。


/etc/init.d/nfs を編集することで任意のポートに変更することもできます。




2010年10月20日水曜日

Webサーバソフトウェアnginxの導入まで


軽量で高速と言われているnginxを試してみました。


OSはCent64bitです。


試してみようと思った経緯


Webサーバを構築しようと思った時、殆どの方はApacheを無意識のうちに選んでいると思います。


Apacheは稼働実績も多く、情報も豊富にあるので最良の選択だと思います。


そこで、ひねくれ者の僕はApacheって本当に最良の選択なの?っという疑問が生まれました。



Webサーバソフトウェアの種類


では、現在Webサーバソフトウェアの選択肢として何があるのか?


僕がWebサーバソフトウェアとして見つけることができたのは以下の3つです。



  1. Apache

  2. nginx

  3. perlbal


今回はnginxを試してみました。




インストール


不要なソフトウェアやモジュールがインストールされるのを防ぐために、基本的に全てソースからインストールを行います。


ソースからのインストールは、ソフトウェア管理やアンインストールが不便ですので、これらを管理できるpacoなどの利用をお勧めします。


http://d.hatena.ne.jp/koujirou6218/20100927#1285740277



nginx公式サイトから安定版をダウンロードしてきます。


現在はnginx-0.8.53



解凍後、特にオプションなしでconfigureを実行します。


すると、以下のようなエラーがでました。



./configure: error: the HTTP rewrite module requires the PCRE library.


You can either disable the module by using --without-http_rewrite_module


option, or install the PCRE library into the system, or build the PCRE library


statically from the source with nginx by using --with-pcre=<path> option.



どうやら、PCRE libraryがないようです。


ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/:title=PCRE最新版]をダウンロードします。


現在はpcre-8.10.tar.gz


ダウンロード後解凍してください。


今度は、先ほど解凍したPCREを指定してconfigureします。



./configure --with-pcre=/home/user/work/pcre-8.10



エラーがないので、そのままmake、make installしてください。


/usr/local/nginx/conf/nginx.confを編集します。


設定内容はApacheとよく似ているのでApacheの設定を行った事がある人は簡単にできると思います。


編集に関しては以下のWikiを参考しました。


http://viz.is-a-geek.com/~viz/cw/index.php?nginx




pid logs/nginx.pid; #コメントアウトを外す





location / {


root /usr/local/nginx/html; #DocumentRootに該当する部分


index index.html index.htm; #Indexesに該当する部分


}



とりあえず、上記の設定を行えば動きます。


起動方法は/sbin内のnginxを実行します。


自動起動に関しては先ほど紹介したURL内に自動起動スクリプトがあるので、そちらを配置する必要があります。


起動テスト



./nginx -t


the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok


configuration file /usr/local/nginx/conf/nginx.conf test is successful



エラーがなければOKです。


起動



./nginx



ブラウザからアクセスするとWelcome to nginx!が表示されればOKです。


ヘッダーもnginxになっています。



200 OK


Date: Thu, 07 Oct 2010 20:52:01 GMT


Content-Length: 151


Last-Modified: Thu, 07 Oct 2010 18:09:44 GMT


Server: nginx/0.8.53


Content-Type: text/html


Accept-Ranges: bytes





ログファイル


デフォルトの設定であれば/usr/local/nginx/logsに出力されています。


access.log



192.168.0.1 - - [08/Oct/2010:04:21:05 +0900] "GET / HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:04:21:06 +0900] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:07:49 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:07:50 +0900] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"


192.168.0.1 - - [08/Oct/2010:05:52:01 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"




error.log



2010/10/08 04:21:06 [error] 5760#0: *1 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.0.128"


2010/10/08 05:07:50 [error] 5760#0: *2 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.0.128"



アクセスログをカスタムするのはできるのか不明です。




今後すること


Apacheとのパフォーマンス比較


PHP導入


カスタムログの方法


perlbalとnginxとApacheの比較


2010年10月2日土曜日

DoCoMo SPモードにする前の事前確認


DoCoMoが9月からSPモードのサービスを開始した。


SPモードとはなにか



スマートフォンではNTTドコモのiモードメールや絵文字、デコメールが利用できないうえ、コンテンツやアプリケーションの料金を、携帯電話料金と併せて支払うことができなかった。スマートフォンはiモードネットワークとは別に通常のISPへ接続していたため、メールはiモード以外のメール、mopera UメールやGmail、BlackBerryメールなどを使うことが原則とされていた。しかし近年スマートフォンの需要が高まり、iモード携帯からスマートフォンへの買い替え需要などへ対応するため、2010年9月1日にスマートフォンでもドメインがdocomo.ne.jpのメールアドレス、iモード絵文字、デコメールなどの利用を可能としたspモードの提供を開始した。またspモードメールの他に、インターネット接続、「ドコモマーケット」におけるコンテンツ決済サービスやメールウイルスチェック、アクセス制限サービスも利用することができる。


Wikipedia



DoCoMoがiモードに公式対応するまでに、@docomo.ne.jpを使う方法として2種類の方法があった。



  1. IMoNiなどの非公式ツールを利用する

  2. iモード.netから利用する


IMoNiは定期的にメール受信を行うことで疑似プッシュとしての機能も持ち、DoCoMoの絵文字やデコメにも対応しAndroidストアでも評価の高いアプリケーションの1つである。


※利用にはiモード.netの契約が必須


iモード.netは、ブラウザからアクセスになりプッシュにも対応していない。



SPモードになってできること



  1. @docomo.ne.jpが公式に使えるようになった

  2. コンテンツアプリケーションの料金を携帯電話の請求と一緒にできるようになった


[email protected]、別途iモード.netの加入が不必要になった。


SPモードではできないこと



  1. VPN


SPモードでは、端末に割り振られるIPがローカルIPのためVPNが利用できません。


SPモードする際の注意点


SPモードではVPNが使えない上に、[email protected]きないため、WiFiを利用してメールの送受信を行うことはできない。このため、@docomo.ne.jpwを利用したい場合は3G回線の利用が余儀なくされる。


また、SPモードではテザリングが禁止されている。


SPモードの契約は電話かDoCoMoショップで行うことになるが、1点注意が必要なのがSPモードに対応していない場合は先にアップデートしておかなければ現在の通信設定では、SPモードは利用できないの契約完了後、圏外になる。これを解決するには端末のバージョンアップを行うのだが、圏外ではWiFi環境が内限りバージョンアップできない。


そのため、先にバージョンアップしてから契約しよう。


バージョンアップについては次で紹介する。


まとめ



  1. WiFiでは、メールの送受信が行えない

  2. テザリング禁止

  3. 家族間メールは有料


SPモードに対応していない場合はバージョンアップが必要


確認方法

設定⇒ワイヤレス設定⇒モバイルネットワーク⇒アクセスポイント名で進むとAPN一覧画面が表示されます。ここで、メニューキーを押し、「初期設定にリセット」をタッチするとspモード契約で必要となるAPN設定が自動で反映されます。


ここでSPモードという表示がない場合はアップデートが必要になる。


2010年9月30日木曜日

[email protected]


[email protected]


DTI ServersMan


さくらVPS


以下、簡単な比較表になります。

















サービスさくらDTI
OSCent64bitCent32bit
Root権限
固定IP
固定IP追加×
IPv6×
OS再インストール
上位プランへの以降×
インストールパッケージの選択×
リソース情報×
リモートコンソール×
コントロールパネル
パスワード初期化×
試用期間2週間1ヶ月

各サービス公開スペック


DTI ServersMan


f:id:koujirou6218:20100929164417p:image


さくらVPS


f:id:koujirou6218:20100929164420p:image


DTI ServersMan コントロールパネル


f:id:koujirou6218:20100929164418p:image


f:id:koujirou6218:20100929164419p:image


さくらVPSコントロールパネル


f:id:koujirou6218:20100929164421p:image


f:id:koujirou6218:20100929164422p:image


DTI ServersMan Entryプランはきつい


DTI ServersManでは256MB(保証メモリ256MB/最大512MB)とあります。


メモリが256MBで利用していると、yumでのパッケージインストールも厳しいようです。


メモリ不足エラーがかなり連発する現象に遭遇しました。


yumのfastestmirrorプラグインが結構メモリを消費するようです。


そこでyumを利用する場合はfastestmirrorプラグインを無効にします。




yum --disableplugin=fastestmirror install




yum-fastestmirror-1.1.16-14.el5.centos.1を強制的に削除するとyum時にオプションを指定しなくても動作しますがオススメはしません。



rpm -ev --nodeps yum-fastestmirror-1.1.16-14.el5.centos.1




なんとかこれらの問題を乗り越え、基本的なLAMP環境を構築しました。


利便性を向上させるためにPHPMyAdminを入れてテーブルを作成したところMySQLが停止…


コンソールからもコマンドを受け付けなくなり、コントロールパネルから強制再起動を行いました。


しかし、MySQL Apache BINDを自動起動設定にしたいたためか再起動後立ち上がらず。


リモートコンソールの無いDTI ServersManでは状況が確認できないため泣く泣くサーバを初期化しました。


DTI ServersManを利用する場合は、メモリを消費するアプリケーションは自動起動しないように設定することをオススメします。


2010年9月28日火曜日

RPM・YUMを使わずにソースからインストールしたアプリケーションを管


pacoを使う


最近のLinuxにはRPMやYUMなどがインストールされているのでソースからアプリケーションをインストールすることは殆どないと思いますがpacoを利用するとソースからインストールしたアプリケーションを管理する事ができます.


インストール方法


pacoを以下のサイトからダウンロードします.


http://sourceforge.net/projects/paco/files/


解凍後configureを実行しますが以下のエラーがでるかもしれません.



No package 'gtkmm-2.4' found



これは,pacoをGUIで使うためのライブラリーがないためエラーが出ていますがGUIで利用しない場合はconfigureに次のオプションを追加します.



./configure --disable-gpaco



GUIで利用するにはlibgtkmm-2.4-devをインストールする必要があります.


configureでエラーが出なければインストールします.



make


make install



これはインストールは完了です.


paco自身をpacoに登録する


このままでは,paco自身を管理できませんのでpacoを登録します.



make logme



これでpacoが登録されました.


インストールしたソースを確認するには次のコマンドを実行します.



paco -a



pacoの使い方


インストール

pacoの使い方は非常にシンプルです.


make installする際に先頭にpacoを付けるだけです.


ex.



paco -D make install



Dオプションはmake installしているディレクトリ名がpacoに登録されます.


名前を指定したい場合はpオプションを利用します.


ex.



paco -p hoge make install



アンインストール

アンインストールするには次のコマンドを実行します.



paco -r 名前



インストールしているアプリケーション表示


paco -a