<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>さくらインターネット創業日記</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/" />
    <link rel="self" type="application/atom+xml" href="http://tanaka.sakura.ad.jp/atom.xml" />
    <id>tag:tanaka.sakura.ad.jp,2011-02-24://1</id>
    <updated>2012-02-27T01:57:26Z</updated>
    <subtitle>たなか＠さくらインターネットのブログ。96年にさくらインターネットを創業してホスティングサービス(レンタルサーバー)を開始。05年に上場。日常や会社のことなど。（社長ブログ）</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.04</generator>

<entry>
    <title>創業15周年にあたり</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/12/sakura-15th-anniversary.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1090</id>

    <published>2011-12-23T10:59:20Z</published>
    <updated>2012-02-27T01:57:26Z</updated>

    <summary>さくらインターネットは、本日2011年12月23日で15周年を迎えました。 これ...</summary>
    <author>
        <name></name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>さくらインターネットは、本日2011年12月23日で15周年を迎えました。<br />
これまで、支えて頂いた多くの皆様に深く深く感謝致します。</p>

<p>舞鶴高専の4年生のときにサーバインフラを貸すための事業を考え、1996年12月23日に sakura.ne.jp というドメインの取得申請をしました。<br />
私自身がサーバの置き場に困っていたことから、それなら自分でやってみようと始めた訳ですが、社会を知らない18歳で起業ということもあり、山あり、谷あり、いろいろなことがありました。<br />
とはいえ、さくらインターネットという名前も、やっている事業もずっと同じであり続けられ、インターネット発展の渦中に身を置けたこと、また微力ながら発展に助力させてもらえたことなど、本当にありがたいことだったと思います。</p>

<p>これからの15年がどのようなものになるのか、おおよそ想像もできませんが、社名にインターネットを冠しているからには、インターネットを発展させていくことこそが会社の使命であるのは変わりません。<br />
30年続く会社は0.02%しかないとのことですが、当社もその仲間として15年後に皆様へ再び挨拶できればと思います。</p>

<p>改めてみなさまありがとうございました。<br />
これからもよろしくお願い致します。</p>

<p>P.S.<br />
今日は母校が主幹校をした第22回高専プログラミングコンテストを観覧すべく、奇しくも創業の地である舞鶴に来ております。<br />
その中で私が起業した時と同じような年代の高専生と時間を過ごし、そしてその人たちの優秀で夢のある姿を見て、あとしばらくは日本も大丈夫だと確信をしました。<br />
この学生の皆さんが社会でもっと活躍できる環境を作ることこそ、先に大人になった私たちの使命だと気を引き締め直したいと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title>さくらのクラウドと、レッドオーシャン戦略</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/09/sakura-cloud-blue-ocean.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1087</id>

    <published>2011-09-11T07:30:04Z</published>
    <updated>2011-09-11T15:52:43Z</updated>

    <summary>ブルーオーシャン戦略。 まだ開拓されておらず競争が無い新たなマーケットをブルーオ...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="会社と仕事" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>ブルーオーシャン戦略。<br />
まだ開拓されておらず競争が無い新たなマーケットをブルーオーシャンと呼び、価格をはじめとした血みどろの戦いをしなければならないマーケットをレッドオーシャンと呼びます。<br />
なら、レッドオーシャンを泳ぐより、ブルーオーシャンを泳いだほうが良いじゃないかということ。<br />
これは欧州経営大学院教授のW・チャン・キムとレネ・モボルニュが著したビジネス書で述べられたもので、日本ではランダムハウス講談社から<a href="http://www.amazon.co.jp/gp/product/4270000708/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=kunihirotanaka-22&linkCode=as2&camp=247&creative=1211&creativeASIN=4270000708" target="_blank">「ブルー・オーシャン戦略 競争のない世界を創造する」</a>として出版されています。<br />
例えば、10分1000円のQBハウスは他の理容店と血みどろの戦いをしているように見えつつ、スピードという差別化要因によって顧客数と業績を伸ばし、実はブルーオーシャンのプレイヤーなのだということが示されています。<br />
これ以上の内容については当該書籍に任せるとして、先日#cloudmixや#yakocloudにて私が発言した「さくらのクラウドにおいて、レッドオーシャンを泳ぎきるというのが戦略」という事について述べてみたいと思います。</p>

<p>さくらのクラウドは、昨年11月に開催されたクラウドエキスポにおいて<a href="http://cloud.sakura.ad.jp/" target="_blank">「何の変哲もないIaaS型クラウドを圧倒的なコストパフォーマンスで提供する」</a>というキャッチで発表をしました。<br />
IaaS型クラウドにおいては、これから競争が激化することが考えられ、各社高付加価値化による差別化を考えている中にあるわけですが、当社はあえて「低付加価値戦略」というのを提起したいと思っています。</p>

<p>アメリカの国立標準技術研究所が発表した「クラウド定義」というものがありますが、それに対する「さくらのクラウド(IaaS)」の解は以下のとおりです。</p>

<ul>
<li>マルチテナント</li><br />当社の用意するシステムを共用しコストをシェアして頂くことで、安価かつ大規模、高信頼なシステムを利用頂けます。
<li>すばやい増減</li><br />数十秒でサーバやストレージを用意したり、解約したりできます。
<li>オンラインアクセス</li><br />日本一のバックボーン容量の回線を経由し、高速かつクライアントに依存しないアクセスを保証します。
<li>見える化</li><br />利用状況を常に把握でき、適切なシステムサイズを判断できます。
<li>セルフサービス</li><br />お客様自身でサーバは当然のこと、ネットワークを含めて自由に設計ができ、全て自動化されています。
</ul>

<p>私たちの解は、高性能で安定性の高いサーバを安価に提供され、それを自由にネットワーク化でき、使いやすいコンパネ or API で即座に増減できればいいじゃないかというものです。<br />
これはクラウドの定義からまったくぶれていないつもりです。<br />
自動でスケールアップしないし、サーバの中身を管理しないし、メールの大量配信機能も無ければ、CDNも備わっていません。いわば付加価値と呼ばれるものを一切付けず、必要なもの「だけ」を用意したのが「さくらのクラウド(IaaS)」です。<br />
「必要なときに必要なだけ」がクラウドだったはずが、「付加価値」「高機能」というキーワードを元に、必要の無いものに費用を負担させられるのが今のクラウドを取り巻く状況だと思っています。<br />
事業者から見ても、いろいろとライセンス料や運用コストを払って付加価値を用意し、開発コストを払って高機能を付けながら、結局値段競争に入ってコストが回収できないかもというつらいところです。<br />
そもそも付加される価値や機能の多くは事業者間で似通ったことになっており、結局差別化要因にならないということも併せてつらいところです。<br />
むしろ、付加価値を用意せずに、パートナーがAPIを通じて価値・機能を付加して、ともにビジネスが成長する状況にしたいと思っていますし、付加価値向上にヒト・モノ・カネを突っ込むよりは、パートナーに手厚い技術サポートをしたほうが良いと考えています。</p>

<p>こう見ると、私たちのような「高性能、高安定性、低価格」＋「拡張性」に徹した日本のIaaSは少なく、タイトルではレッドオーシャンと書きましたが、実際には意外とブルーオーシャンだと考えています。<br />
当たり前のもの（ちゃんとしたもの）を安価に売るというのは、日本のお家芸だと思います。<br />
日本らしいクラウドというのは世界中で売られる車のように、決して品質が悪いわけでもなく、極めてコストパフォーマンスに優れたものにすべきだと思っています。</p>

<p>この戦略は当たり前のように見えますが、みんなやっていないし、少なくとも大規模低コストデータセンター、自社製基盤システム、万単位のサーバの運用ノウハウなど、他社がまねたとしても数年はかかるでしょうし、その間にしっかりとシェアをとり、本当にレッドオーシャンになったときに先行者として強みを持つという形が「本当の戦略」です。<br />
恐らくは、スケールの大きいIaaS事業者と、それを活用する付加価値に強みを持つインテグレーターに二分されるのでしょう。当社としては前者が目標です。</p>

<p>ところで、cloudmixではトイレットペーパーの例を出しました。<br />
「トイレットペーパーを半額にしたからといって、倍の数を買うでしょうか？買わないですよね」という話でした。<br />
もし気合を入れて倍使ったら、お尻が痛くて大変です。<br />
そういった日用品（コモディティ）市場においては、高付加価値化で顧客単価を上げ、トップラインを増やすというのが当然の戦略です。<br />
食料品なども一緒で、とにかくお尻も胃袋も倍の数/量にはなりません。<br />
ましてや、ウォシュレット（シャワートイレ）の登場や、ダイエットの流行など、決して追い風ではありません。</p>

<p>ただ、サーバは安価になればもっと買ってくれるというという世界が待っています。<br />
例えばさくらのVPS 980は、専用サーバ7,800円/月の新規契約を奪いましたが、従来の10倍以上の新規申し込みを受けており、1年で2万を超えるインスタンスが稼働中（解約を差し引いた純稼動数）ですし、上位プラン比率も高まってきました。<br />
コンピューティングリソースが更に安価に、更に使われる世界がくると思っていますので、価格が下がることは市場の縮小を意味するものではないと思うのです。<br />
（といいつつ、月額千円を切るようなIaaSを出すツモリはなく、「絶対価格」を下げることに意味は無いと思いますが...）</p>

<p><a href="http://www.amazon.co.jp/gp/product/B001HLBY1A/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=kunihirotanaka-22&linkCode=as2&camp=247&creative=1211&creativeASIN=B001HLBY1A" target="_blank"><img src="http://tanaka.sakura.ad.jp/assets_c/2011/09/elleair-thumb-200x150-2.jpg" width="200" height="150" alt="elleair.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a><br />
ところで、私の嫁がタイムリーに「トイレットペーパー買いすぎたー！」と言ってきました。<br />
Amazonの定期便で見積もりを誤ったようで、まだ在庫があるのに送ってきたという話です。<br />
そこで「いっぱいつかわな無くならへん。」と一言。「いや違うやろ」と突っ込み。場所以外困ること無いから、無理して使わなくていいだろうと。<br />
しかしまあ、自宅のトイレットペーパー在庫を増やさせる or 定期的に送りつける戦略は、日用品における良い回答かもと思った瞬間でした。<br />
クラウドではなく、我が家の日用品から攻めてくるとは、恐るべきAmazonさん。機関の陰謀ですね。</p>

<p>と、オチがついたところで。</p>

<p>ちなみに、IaaSだけでなくPaaSやSaaSに対する戦略もありますが、それは機会が来たときにということで。個人的にはPaaSがさくららしさを表現できるステージだと思っています。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>satoru.net様からの質問と回答について</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/06/satorunet.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1085</id>

    <published>2011-06-30T09:19:55Z</published>
    <updated>2011-06-30T09:22:55Z</updated>

    <summary>さくらインターネット、HDD故障時に有償請求という記事において、satoru.n...</summary>
    <author>
        <name></name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p><a href="http://d.hatena.ne.jp/satoru_net/20110630/1309365465" rel="nofollow">さくらインターネット、HDD故障時に有償請求</a>という記事において、satoru.net様より私の見解を求むと連絡頂きましたので、このエントリーを書かせて頂きます。<br />
詳しくは上記のリンクからご覧頂くとして、経緯だけまとめてみます。</p>

<p>1. お客様の専用サーバのHDDにおいてIO Errorが発生したため、当社へ連絡を頂く<br />
2. 当社側で、すぐにハードウェア交換をご提案する（無償対応）<br />
3. HDD以外のハードウェア交換をしたものの、HDDが認識しなかったため、HDDの交換とOS再インストールをご提案する（無償対応）。<br />
4. その上で、壊れたHDDを接続することもご提案する（5,250円の有償対応）。<br />
5. 壊れたHDDの接続を無償で出来ないのかという連絡を頂く<br />
6. データについては保証しかねるので、（サルベージ等に係る作業については）有償で対応させて頂きたいとご連絡。</p>

<p>この対応について、前述のブログ記事とともに、私のツイッターアカウントへmention頂いたというものです。</p>

<p>この件について、satoru.net様と各種ソーシャルメディアで述べられていることに対する、私≒さくらインターネットの見解は以下の通りです。</p>

<ul>
<li>当然のことながら「不良HDDを提供した」というつもりはない。（HDDが結果として故障することは一般に知られており、エイジングは行っているものの、絶対に故障させない保証は非常に困難です。）</li>
<li>バックアップサービスやRAIDなども用意しており、（お願いベースですが）バックアップは行って頂きたい。</li>
<li>データセンターのサーバでは、通常のパソコンのようにホイっとセカンダリを接続できるものでもない（専用サーバラック内ではセカンダリHDD用の場所が確保できず、旧HDD接続サービス用のサーバを用意しています）。</li>
<li>旧HDD接続サービスは約款に記載したうえ、ウェブ上において金額、フローとも紹介している。<br />
案内: <a href="http://www.sakura.ad.jp/function/maintenance/hdd-attach.html">http://www.sakura.ad.jp/function/maintenance/hdd-attach.html</a><br />
約款: <a href="http://www.sakura.ad.jp/agreement/[a]yakkan3_dedicated.pdf">http://www.sakura.ad.jp/agreement/[a]yakkan3_dedicated.pdf</a></li>
<li>ただし、HDD接続は当社側でしかできない作業であり、無償で行ったほうがよいと思う。</li>
</ul>

<p>私としても、ハードウェアの無償交換等は当然と考え行っておりますが、データの復旧にかかわる部分についてはバックアップやRAID、冗長化などを行って頂いているお客様がおられる以上、そのコストを基本価格に転嫁したくないというのが本音です。<br />
しかし同時に、現地でしかできない作業については、出来るだけ無償化したいという想いもあります。<br />
このような中、今回の件については、当社が行わなければお客様側でどうしようもないというものであり、リブートなどと同様に無償化するべきだと考えました。</p>

<p>ということで、satoru.net様のブログ記事で提案頂いた形で、旧HDD接続サービスについては、これまでは有料だったものを、明日から無料（一週間）へと変更することとしました。<br />
急遽決めたことなので、約款やウェブサイト等の修正はこれから行います。<br />
satoru.net様についても、返金 or 充当等の対応をさせて頂きます。</p>

<p>最後に言い訳がましいのですがやはり述べておきたいのは、今回の対応についてはHDD故障の責が当社にあるという認識ではなく、あくまでも現地でしか出来ない作業をなるべく無償にして、お客様の金銭的なご負担を少なくしたいという想いからです。<br />
さらっと「無償にしました！」とだけ書いてもよかったのですが、私の見解、想い、背景、判断基準などを知ってもらいたいと思って、長々と書かせて頂きました。</p>

<p>なお、ご意見頂きました satoru.net様には、ご利用頂いていることに対する感謝はもちろんのこと、貴重なご意見を頂きました事に大変感謝しております。<br />
今後とも、様々な事柄について改善に努めたいと思いますので、さくらインターネットをよろしくお願い致します。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ウェブ開発者のための、1時間でできるLAMP環境構築術（CentOS編）</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1084</id>

    <published>2011-05-15T03:28:17Z</published>
    <updated>2012-05-07T10:17:15Z</updated>

    <summary>最近、さくらのVPSやServersmanなど格安のVPSサービスや、Amazo...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="技術関連" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="格安VPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="vpscentoslinuxapachemysql" label="VPS CentOS Linux Apache MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>最近、<a href="http://vps.sakura.ad.jp" target="_blank">さくらのVPS</a>やServersmanなど格安のVPSサービスや、Amazon Web ServicesやNiftyクラウドに代表されるクラウドサービスなどの台頭により、以前よりもサーバを使うことのハードルが下がりました。<br />
そのためウェブ開発者がサーバの運用に関わる機会が増えていますが、ApacheやMySQL、PHP（Perl）などのいわゆるLAMP環境を作るには、意外と手間がかかることに気づかされます。<br />
そこで、今回は1時間で出来るサーバセットアップを目標に、LAMP環境構築のチュートリアルとまとめました。</p>

<p>この手順においてはCentOSの基本的な設定が完了しているものとします。<br />
参考：<a href="http://tanaka.sakura.ad.jp/archives/001065.html">CentOSをサーバーとして活用するための基本的な設定</a>（さくらインターネット創業日記）<br />
なお、この記事はCentOS 5 もしくは CentOS 6 の64ビット版をベースに書いていますので、これ以外のOSの場合には適宜読み替えて下さい。</p>

<h3>CentOS 最新版へのバージョンアップ</h3>

<p>今回の作業を行うにあたって、対象サーバがCentOS 5.5であったため、yum upgradeを実行して CentOS 5.6へバージョンアップしました。<br />
現在(2012/5/7)の最新バージョンは、CentOS 5.7 もしくは CentOS 6.2 です。バージョンアップを行うと、それぞれ最新版のCentOSへとアップデートされます。<br />
すでにCentOS 最新版の場合には以下の作業は行わなくてもかまいません。</p>

<div class="precode">

<p>[root@ ~]# <span class="hl">rpm -qa | grep centos-release</span><br />
centos-release-notes-5.5-0<br />
<font color="#ff6666">centos-release-5-5.el5.centos</font><br />
[root@ ~]# <span class="hl">yum upgrade -y</span><br />
Loaded plugins: fastestmirror<br />
Determining fastest mirrors<br />
<font color="#666666">色々出てくる</font></p>

<p>Total download size: 162 M<br />
Downloading Packages:<br />
<font color="#666666">色々出てくる</font></p>

<p>Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) <centos-5-key@centos.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5<br />
[root@ ~]# <span class="hl">rpm -qa | grep centos-release</span><br />
centos-release-notes-5.6-0<br />
<font color="#ff6666">centos-release-5-6.el5.centos.1 <span class="notice">← CentOS 5.6へとアップグレードされた</span></font><br />
</div></p>

<p><br />
<h3>yumのリポジトリ追加</h3></p>

<p>yumとは各種ソフトウェアをパッケージという単位にして、簡単にインストール・アンインストールするための仕組みのことです。<br />
リポジトリを追加することによって、パッケージのダウンロード元サイトを増やし、インストールできるソフトウェアのバリエーションを増やすことが可能です。<br />
標準のリポジトリではPHPの最新バージョンなどが用意されていませんので、今回は Fedora EPEL 、remi、RPMForge という3つのリポジトリを追加します。</p>

<p>はじめに、Fedora EPELのダウンロードを行います。</p>

<p>CentOS 5 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm</span><br />
</div></p>

<p>CentOS 6 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm</span><br />
</div><br />
※download.fedora.redhat.comに繋がらない場合には上記の通りdl.fedoraproject.orgに変更すればダウンロードできます。</p>

<p>上記のファイルが無くなっている場合には、次のURLからepel-release-で始まるファイルを探してダウンロードして下さい。<br />
http://dl.fedoraproject.org/pub/epel/5/x86_64/ (CentOS 5)<br />
http://dl.fedoraproject.org/pub/epel/6/x86_64/ (CentOS 6)</p>

<p>次にremiのダウンロードを行います。</p>

<p>CentOS 5 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm</span><br />
</div></p>

<p>CentOS 6 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm</span><br />
</div></p>

<p>上記と同様に、ファイルが利用できない場合には、以下のURLからダウンロードして下さい。<br />
http://rpms.famillecollet.com/</p>

<p>最後に、RPMForgeのダウンロードを行います。</p>

<p>CentOS 5 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm</span><br />
</div></p>

<p>CentOS 6 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm</span><br />
</div></p>

<p>上記と同様に、ファイルが利用できない場合には、以下のURLからダウンロードして下さい。<br />
http://dag.wieers.com/rpm/packages/rpmforge-release/</p>

<p>それでは、3つのリポジトリを追加します。</p>

<p>CentOS 5 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">rpm -Uvh epel-release-5-4.noarch.rpm remi-release-5.rpm rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm</span><br />
</div></p>

<p>CentOS 6 の場合<br />
<div class="precode"></p>

<p>[root@ ~]# <span class="hl">rpm -Uvh epel-release-6-5.noarch.rpm remi-release-6.rpm rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm</span><br />
</div></p>

<p>リポジトリが追加できたら、それぞれのリポジトリをいったん無効化します。<br />
具体的に言うと、設定ファイルのenabledという項目を0に変更し、yum実行時に明示的に指定されない限り、新たに追加したリポジトリが利用されないようにします。<br />
ちなみに、remiはもともとenabled=0となっているので、Fedora EPELとRPMForgeのみviコマンドで編集します。<br />
※意図せず、標準外のリポジトリ（今回追加したリポジトリ）が使われないための対策です。</p>

<p>vi /etc/yum.repos.d/epel.repo<br />
<div class="precode-text">[epel]<br />
name=Extra Packages for Enterprise Linux 5 - $basearch<br />
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch<br />
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch<br />
failovermethod=priority<br />
enabled=0<span class="hl"> ← 1を0に変更</span><br />
gpgcheck=1<br />
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL</div></p>

<p>vi /etc/yum.repos.d/rpmforge.repo<br />
<div class="precode-text">[rpmforge]<br />
name = RHEL $releasever - RPMforge.net - dag<br />
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge<br />
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge<br />
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge<br />
enabled=0<span class="hl"> ← 1を0に変更</span><br />
protect = 0<br />
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag<br />
gpgcheck = 1</div></p>

<p>これでリポジトリの追加作業は完了です。</p>

<p><br />
<h3>パッケージのインストール</h3></p>

<p>それでは、パッケージのインストールを行います。<br />
次のコマンド一発でインストールが開始され、途中で「y」を2回入力すれば、一気にLAMP環境を作られます。<br />
今回は、追加したリポジトリが利用されるよう、--enablerepo オプションを付けています。</p>

<div class="precode">

<p>[root@ ~]# <span class="hl">yum --enablerepo=remi,epel,rpmforge install httpd-devel php-devel php-pear mysql-server phpmyadmin -y</span><br />
Loaded plugins: fastestmirror<br />
Loading mirror speeds from cached hostfile</p>

<p>・・略・・</p>

<p>Total download size: 42 M<br />
Downloading Packages:</p>

<p>・・略・・</p>

<p>warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 00f97f56<br />
remi/gpgkey                                                                                                                  | 1.3 kB     00:00<br />
Importing GPG key 0x00F97F56 "Remi Collet <RPMS@FamilleCollet.com>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-remi</p>

<p>Running rpm_check_debug<br />
</div></p>

<p>今回インストールしたモジュールを一覧にしました。</p>

<table width="500">
<tr><th>モジュール</th><th>アーキテクチャ</th><th>バージョン</th><th>リポジトリ</th></tr>
<tr><td>apr-devel</td><td>x86_64</td><td>1.2.7-11</td><td>base</td></tr>
<tr><td>apr-util-devel</td><td>x86_64</td><td>1.2.7-11</td><td>base</td></tr>
<tr><td>cyrus-sasl-devel</td><td>x86_64</td><td>2.1.22-5</td><td>base</td></tr>
<tr><td>db4-devel</td><td>x86_64</td><td>4.3.29-10</td><td>base</td></tr>
<tr><td>expat-devel</td><td>x86_64</td><td>1.95.8-8.3</td><td>base</td></tr>
<tr><td>httpd</td><td>x86_64</td><td>2.2.3-45</td><td>base</td></tr>
<tr><td>httpd-devel</td><td>i386</td><td>2.2.3-45</td><td>base</td></tr>
<tr><td>httpd-devel</td><td>x86_64</td><td>2.2.3-45</td><td>base</td></tr>
<tr><td>libedit</td><td>x86_64</td><td>20090923-3.0_1</td><td>rpmforge</td></tr>
<tr><td>libmcrypt</td><td>x86_64</td><td>2.5.8-4</td><td>extras</td></tr>
<tr><td>libtool-ltdl</td><td>x86_64</td><td>1.5.22-7</td><td>base</td></tr>
<tr><td>mysql</td><td>x86_64</td><td>5.5.11-1</td><td>remi</td></tr>
<tr><td>mysql-libs</td><td>x86_64</td><td>5.5.11-1</td><td>remi</td></tr>
<tr><td>mysql-server</td><td>x86_64</td><td>5.5.11-1</td><td>remi</td></tr>
<tr><td>mysqlclient15</td><td>x86_64</td><td>5.0.67-1</td><td>remi</td></tr>
<tr><td>openldap-devel</td><td>x86_64</td><td>2.3.43-12</td><td>base</td></tr>
<tr><td>perl-DBD-MySQL</td><td>x86_64</td><td>3.0007-2</td><td>base</td></tr>
<tr><td>perl-DBI</td><td>x86_64</td><td>1.52-2</td><td>base</td></tr>
<tr><td>php</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-cli</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-common</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-devel</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-mbstring</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-mcrypt</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-mysql</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-pdo</td><td>x86_64</td><td>5.3.6-3</td><td>remi</td></tr>
<tr><td>php-pear</td><td>noarch</td><td>1.9.2-3</td><td>remi</td></tr>
<tr><td>phpmyadmin.noarch</td><td>2.11.11.3-1</td><td>rpmforge</td></tr>
</table>

<p>これで、インストールは完了です。</p>

<p><br />
<h3>Apacheの設定 - モジュール編</h3></p>

<p>それでは、Apacheの設定に移ります。<br />
Apacheの設定は、/etc/httpd/conf/httpd.conf というファイルを編集して行いますが、モジュールの設定と、同時接続数の設定に分けて、順に見ていきましょう。</p>

<p>まずはモジュールの設定です。Apacheの場合、さまざまな機能を「モジュール」という形で用意しています。<br />
モジュールを増やせばたくさんの機能を利用できますが、その反面メモリを大きく消費してしまうという問題があります。<br />
CentOSのデフォルト状態では、ほぼ全てのモジュールが有効になっているため、必要以外のモジュールを除外する必要があります。</p>

<p>例えば、一切モジュールを消さないデフォルトの状態だと、1プロセスあたり5MB程度のメモリを消費していることが分かります。<br />
<div class="precode">#  <span class="hl">ps aux|grep -v Ss|grep '[h]ttpd'|head -1</span><br />
apache   22523  0.0  0.4 257548  <span class="notice">5036</span> ?        S    12:27   0:00 /usr/sbin/httpd</div></p>

<p>これを適切に設定しなおすと、4MB程度まで減らせます。<br />
1プロセスあたり1MB省略できれば、200プロセスで200MB削減できることになりますし、実際にリクエストを受け付けているプロセスの場合はさらに消費メモリの差が出ることになります。<br />
<div class="precode">#  <span class="hl">ps aux|grep -v Ss|grep '[h]ttpd'|head -1</span><br />
apache   24715  0.0  0.4 161716  <span class="notice">4228</span> ?        S    19:46   0:00 /usr/sbin/httpd</div></p>

<p>とはいえ、どのモジュールが必要なのかが分かりにくいので、モジュールの一覧と、私の勝手な重要度をまとめました。<br />
重要度は、◎、○、△、＋、の4種類で分類しており、一覧にある重要度のタイトルをクリックすると、フィルターすることも可能です。<br />
◎＝必須<br />
○＝あったほうが良い<br />
△＝必要ならあればよい<br />
＋＝必要性なし</p>

<pre><script>
<!--
	function mod_select(){
		var map = { "◎" : 4, "○" : 3, "△" : 2, "＋" : 1 };
		var val = document.getElementById("sel").value;
		var list = document.getElementById("module-list");
		for( i=0; i<list.childNodes.length; i++ ){
			var tr = list.childNodes.item(i);
			var j = 0, arr = new Array();
			if( !tr.firstChild ) continue;
			for( td = tr.firstChild; td; td=td.nextSibling ){
				if( td.tagName ) arr[j++] = td.innerText;
			}
			tr.style.display = map[arr[1]] < val ? "none" : "";
		}
	}
//-->
</script></pre>

<table cellspacing="1" cellpadding="3" border="1">
<tbody id="module-list">
<tr><th>モジュール名</th><th><select id="sel" onChange="mod_select()"><option value="1">重要度</option><option value="2">△</option><option value="3">○</option><option value="4">◎</option></select></th><th>コメント</th></tr>
<tr><th align="left">mod_auth_basic</th><td align="center">△</td><td>ベーシック認証</td></tr>
<tr><th align="left">mod_auth_digest</th><td align="center">＋</td><td>ダイジェスト認証</td></tr>
<tr><th align="left">mod_authn_file</th><td align="center">△</td><td>認証にテキストファイルを利用する<br />いわゆる.htpasswdを使う場合は必要</td></tr>
<tr><th align="left">mod_authn_alias</th><td align="center">＋</td><td><br /></td></tr>
<tr><th align="left">mod_authn_anon</th><td align="center">＋</td><td>匿名ユーザを認証する</td></tr>
<tr><th align="left">mod_authn_dbm</th><td align="center">＋</td><td>認証にDBMファイルを利用する</td></tr>
<tr><th align="left">mod_authn_default</th><td align="center">＋</td><td><br /></td></tr>
<tr><th align="left">mod_authz_host</th><td align="center">◎</td><td>ホスト/IPアドレスでのアクセス制限<br />Orderや、Allow from ?? を使う場合は必須</td></tr>
<tr><th align="left">mod_authz_user</th><td align="center">△</td><td>ユーザ名でのアクセス制限</td></tr>
<tr><th align="left">mod_authz_owner</th><td align="center">＋</td><td>ファイル所有者でのアクセス制限</td></tr>
<tr><th align="left">mod_authz_groupfile</th><td align="center">＋</td><td>グループでのアクセス制限を行う(テキストファイル)</td></tr>
<tr><th align="left">mod_authz_dbm</th><td align="center">＋</td><td>グループでのアクセス制限を行う(DBMファイル)</td></tr>
<tr><th align="left">mod_authz_default</th><td align="center">＋</td><td><br /></td></tr>
<tr><th align="left">mod_ldap</th><td align="center">＋</td><td>LDAP用の基本モジュール</td></tr>
<tr><th align="left">mod_authnz_ldap</th><td align="center">＋</td><td>LDAPでのアクセス制限</td></tr>
<tr><th align="left">mod_include</th><td align="center">△</td><td>SSIを提供<br />SSIを利用する場合は有効にする</td></tr>
<tr><th align="left">mod_log_config</th><td align="center">◎</td><td>ログ保存<br />アクセスログをとるためには必須</td></tr>
<tr><th align="left">mod_logio</th><td align="center">＋</td><td>送受信バイト数のログ保存(このモジュールがなければ保存できない)</td></tr>
<tr><th align="left">mod_env</th><td align="center">△</td><td>CGIやSSIでの環境変数を設定する<br />必要なければ無効でかまわない</td></tr>
<tr><th align="left">mod_ext_filter</th><td align="center">＋</td><td>データ返送時に外部プログラムを経由させる</td></tr>
<tr><th align="left">mod_mime_magic</th><td align="center">＋</td><td>ファイルの内容をベースにMIMEタイプ決定</td></tr>
<tr><th align="left">mod_expires</th><td align="center">＋</td><td>Expireヘッダをセットする</td></tr>
<tr><th align="left">mod_deflate</th><td align="center">＋</td><td>データ返送時に圧縮する</td></tr>
<tr><th align="left">mod_headers</th><td align="center">△</td><td>リクエスト、レスポンスヘッダを制御する<br />必要なければ無効でかまわない</td></tr>
<tr><th align="left">mod_usertrack</th><td align="center">＋</td><td>クッキーでユーザ追跡を行う</td></tr>
<tr><th align="left">mod_setenvif</th><td align="center">◎</td><td>環境変数の制御を行う<br />無効でもかまわないが、標準の設定ファイルで利用されており、有効にするのが無難</td></tr>
<tr><th align="left">mod_mime</th><td align="center">◎</td><td>拡張子をベースにMIMEタイプを決定</td></tr>
<tr><th align="left">mod_dav</th><td align="center">＋</td><td>WebDAVを提供</td></tr>
<tr><th align="left">mod_status</th><td align="center">○</td><td>/server-statusにてサーバ状態を表示する(URLは変更可能)</td></tr>
<tr><th align="left">mod_autoindex</th><td align="center">△</td><td>ディレクトリへのアクセス時にファイル一覧を作成する</td></tr>
<tr><th align="left">mod_info</th><td align="center">△</td><td>/server-infoにてサーバ設定を表示する(URLは変更可能)</td></tr>
<tr><th align="left">mod_dav_fs</th><td align="center">＋</td><td>WebDAVを提供</td></tr>
<tr><th align="left">mod_vhost_alias</th><td align="center">＋</td><td>バーチャルホストを簡単に生成</td></tr>
<tr><th align="left">mod_negotiation</th><td align="center">◎</td><td>クライアントに適したファイルを自動判別する(.jaなど)</td></tr>
<tr><th align="left">mod_dir</th><td align="center">◎</td><td>ディレクトリの取り扱いを行う(index.htmlの取り扱いなど)</td></tr>
<tr><th align="left">mod_actions</th><td align="center">＋</td><td>特定の拡張子へのリクエストに応じてCGIを実行する</td></tr>
<tr><th align="left">mod_speling</th><td align="center">＋</td><td>大文字小文字を同じように扱えるようにする</td></tr>
<tr><th align="left">mod_userdir</th><td align="center">△</td><td>ユーザのホームディレクトにアクセスできるようにする（チルダ形式など）</td></tr>
<tr><th align="left">mod_alias</th><td align="center">◎</td><td>AliasやRedirectを利用できるようにする</td></tr>
<tr><th align="left">mod_rewrite</th><td align="center">○</td><td>Rewrite機能を提供する</td></tr>
<tr><th align="left">mod_proxy</th><td align="center">△</td><td>Proxyを提供する</td></tr>
<tr><th align="left">mod_proxy_balancer</th><td align="center">△</td><td>Proxy時に負荷分散機能を提供</td></tr>
<tr><th align="left">mod_proxy_ftp</th><td align="center">＋</td><td>Proxy時にFTP接続機能を提供</td></tr>
<tr><th align="left">mod_proxy_http</th><td align="center">△</td><td>Proxy時にHTTP接続機能を提供</td></tr>
<tr><th align="left">mod_proxy_connect</th><td align="center">＋</td><td>Proxy時にCONNECT機能を提供</td></tr>
<tr><th align="left">mod_cache</th><td align="center">＋</td><td>キャッシュを提供</td></tr>
<tr><th align="left">mod_suexec</th><td align="center">△</td><td>suexecを提供</td></tr>
<tr><th align="left">mod_disk_cache</th><td align="center">＋</td><td>cache_moduleにおいて、ディスクキャッシュを提供</td></tr>
<tr><th align="left">mod_file_cache</th><td align="center">＋</td><td>静的ファイルをメモリにキャッシュさせる</td></tr>
<tr><th align="left">mod_mem_cache</th><td align="center">＋</td><td>cache_moduleにおいて、メモリキャッシュを提供</td></tr>
<tr><th align="left">mod_cgi</th><td align="center">△</td><td>CGIを提供</td></tr>
<tr><th align="left">mod_version</th><td align="center">△</td><td>クライアントへのレスポンスにApacheバージョンを挿入する</td></tr>
</tbody>
</table>

<p><br />
※注意点<br />
以下のモジュールを無効にすると、標準の設定ファイル（/etc/httpd/conf/httpd.conf）のまま起動するとエラーとなります。</p>

<ul>
<li>mod_authz_hostを無効にした場合には、OrderやAllowなどの項目（例えば332行目など）をコメントアウトする必要があります</li>
<li>mod_proxyを無効にした場合には、以下ようにコマンドを実行し拡張設定ファイルを無効化する必要があります</li>
<div class="precode"># <span class="hl">mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.stop</span></div>
<li>mod_autoindexを無効にした場合には、IndexOptionsから始まる関連項目（例えば592行目?657行目）を全てコメントアウトする必要があります<br />
もしくは以下のとおり、&lt;IfModule&gt;で括ってしまう方法もあります</li>
vi /etc/httpd/conf/httpd.conf
<div class="precode-text"><span class="hl">&lt;IfModule mod_autoindex.c&gt;</span><br />
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable<br />
・・略・・<br />
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t<br />
<span class="hl">&lt;/IfModule&gt;</span></div>
</ul>

<p>ちなみに、私はいつも以下のモジュールを有効にしています。<br />
なお、mod_autoindex と mod_proxy を無効化していますので、前述のとおり設定を変更しなければエラーとなって起動しません。<br />
<div class="precode-text">LoadModule authz_host_module modules/mod_authz_host.so<br />
LoadModule log_config_module modules/mod_log_config.so<br />
LoadModule setenvif_module modules/mod_setenvif.so<br />
LoadModule mime_module modules/mod_mime.so<br />
LoadModule status_module modules/mod_status.so<br />
LoadModule negotiation_module modules/mod_negotiation.so<br />
LoadModule dir_module modules/mod_dir.so<br />
LoadModule alias_module modules/mod_alias.so</div></p>

<p><br />
<h3>Apacheの設定 - 同時接続数編</h3></p>

<p>それでは、Apacheの同時接続数の設定を見ていきましょう。<br />
ここで基本を押さえておきたいのですが、Apacheにはpreforkとworkerという大きく分けると2つの方式があります。<br />
preforkはサーバ1つ(1プロセス)で1つのリクエストを処理し、workerはサーバ1つで複数のリクエストを処理できます。<br />
一見、workerのほうが良いように見えますが、workerはマルチスレッドで実装されていることから、ライブラリ全てがマルチスレッドに対応している必要があります。<br />
ただ、PHPを使う場合にはライブラリ全てがマルチスレッド対応か否かを検証することは難しく、余計なトラブルを避けるためにもpreforkを利用するのが賢明であるといえます。<br />
ということで、今回はpreforkを使う前提で説明を行います。</p>

<p>標準のhttpd.confでは、以下のように設定されています。<br />
<div class="precode-text">&lt;IfModule prefork.c&gt;<br />
StartServers       8<br />
MinSpareServers    5<br />
MaxSpareServers   20<br />
ServerLimit      256<br />
MaxClients       256<br />
MaxRequestsPerChild  4000<br />
&lt;/IfModule&gt;</div></p>

<p>これらを順に見てみましょう。</p>

<ul>
<li>StartServers</li>
Apache開始時に立ち上げておくべきサーバ数。<br />
Apache起動直後は、ここで指定した数のサーバが立ち上がる。
<li>MinSpareServers</li>
アイドル中のサーバ数の下限。アイドル中とは、リクエストに対して即座に対応できる状態（つまり処理していない）のこと。<br />
ここで指定したサーバより少なくなった場合は、新たなサーバを立ち上げる。<br />
この数値が小さすぎると、急激にアクセスが増えたときに、リクエストに受けきれなくなる。
<li>MaxSpareServers</li>
アイドル中のサーバ数の上限。<br />
ここで指定したサーバより多くなった場合は、余計なサーバを終了させる。<br />
この数字が大きすぎると、アクセスが落ち着いている状態でもサーバが終了されず、メモリが無駄に消費されることになる。
<li>ServerLimit</li>
後述するMaxClientsに指定できる数字の上限を指定する。<br />
MaxClientsを256より大きな数字にするとき以外は、特に変更の必要はない。
<li>MaxClients</li>
サーバ数の上限。<br />
ここで指定した数以上のサーバは立ち上がらない。
<li>MaxRequestsPerChild</li>
処理できるリクエストの上限数。<br />
処理したリクエストがここで指定した数を超えると、該当サーバは終了される。
</ul>

<p>文字ではなかなかピンと来ない方も多いと思うので、グラフでまとめてみました。<br />
このグラフでは見やすくするため、MaxClients 30、StartServers 10、MinSpareServers 5、MaxSpareServers 20としています。</p>

<p><img alt="apache-20110514.png" src="http://tanaka.sakura.ad.jp/archives/images/apache-20110514.png" width="530" height="302" class="mt-image-none" style="" /></p>

<table>
<tr><td>1</td><td>起動直後であり、StartServersで指定された10サーバが立ち上がっている</td></tr>
<tr><td>2</td><td>10サーバが接続中でアイドル状態のサーバが0となったため、MinSpareServersに指定された5サーバが追加される</td></tr>
<tr><td>3</td><td>20サーバが接続中で上記と同じくアイドル状態サーバが0となったため、さらに5サーバが追加される</td></tr>
<tr><td>4</td><td>アイドル状態のサーバが0になったものの、MaxClientsで指定された30サーバになったため、新規サーバは追加されない</td></tr>
<tr><td><nobr>5-7</nobr></td><td>MaxClientsを超える数の接続がきたため、30の上限を超えるリクエストは、空きが出るまでまで待たされる</td></tr>
<tr><td><nobr>9-10</nobr></td><td>アイドル状態のサーバ数は5以上20以下であり、新たなサーバの起動や、余剰サーバの終了処理は行わない</td></tr>
<tr><td>11</td><td>30サーバがアイドル状態となったため、MaxSpareServersで指定された20サーバにすべく、10サーバが終了させられた</td></tr>
</table>

<p><br />
それでは、実際にどのような数字を設定すればいいか、考えて見ましょう。<br />
一番重要なのはMaxClientsです。これが決まれば、上記の法則を見て他の値も決定してください。<br />
たくさんのリクエストを受け付けるためには、大きな数値にすればよいと考えられがちですが、メモリやCPU能力が十分でなければ、むしろパフォーマンスが低下します。<br />
経験則では、PHPを稼動させるApacheは1サーバあたり10MBから30MB程度のメモリを消費します。<br />
例えば、Apacheで利用するメモリ容量を500MB程度に抑えたければ、20から40程度の数値にしておくのが無難です。</p>

<p>以下の例は、MaxClientsが256のときと、20のときで、どのように挙動が変わるかをabで図ったものです。</p>

<div class="precode"># <span class="hl">ab -c 100 -n 2000 http://49.212.??.??/phpmyadmin/</span></div>

<p>MaxClientsが256の場合は、スワップを大きく消費しているほか、ロードアベレージも大きく上がっており、SSHのレスポンスについても非常に悪化していました。<br />
それに対し20の場合は、それほど負荷の上昇は見られず、計測時間、秒間処理数、リクエストにかかる秒数の全てにおいて、改善していることが分かります。<br />
要は、無理に同時に処理する数を増やすより、少々待たされる状態が出たとしてもサーバ能力を超えない範囲にしたほうが、結果としてレスポンスは良くなるということです。<br />
<b>サーバ負荷が高く、レスポンスが悪化した場合は、MaxClientsを増やすのではなく、減らすことをまず考えた方が賢明です。</b></p>

<table border="1">
<tr><th>MaxClients</th><th>スワップ</th><th>ロードアベレージ</th><th>計測時間</th><th>秒間処理数</th><th>リクエスト</th></tr>
<tr><td align="right">256</td><td align="right">859MB</td><td align="right">79.26</td><td align="right">55.40秒</td><td align="right">36.10/秒</td><td align="right">2.73秒</td></tr>
<tr><td align="right">20</td><td align="right">11MB</td><td align="right">5.46</td><td align="right">35.66秒</td><td align="right">56.08/秒</td><td align="right">1.74秒</td></tr>
</table>

<p><br />
1サーバあたりのメモリ使用量(ps結果のRSS)は10MB程度でしたので、100サーバだと1GB程度消費するのに対し、20サーバだと200MB程度で済みます。結局のところ、Apacheで使用する容量÷10MB?30MB程度で考えるのが良いでしょう。</p>

<p>参考までに、私が1GBメモリ、2コア程度のサーバ（さくらのVPS 1Gプラン相当）でいつも行っている設定は以下のような値です。<br />
<div class="precode-text">&lt;IfModule prefork.c&gt;<br />
StartServers      10<br />
MinSpareServers    5<br />
MaxSpareServers   15<br />
ServerLimit      256<br />
MaxClients        40<br />
MaxRequestsPerChild  1000<br />
&lt;/IfModule&gt;</div></p>

<p><br />
<h3>Apacheの起動</h3></p>

<p>Apacheを起動するには、serviceというコマンドを利用します。<br />
以下のように打ち込んで、問題なければ正常に起動します。<br />
<div class="precode"># <span class="hl">service httpd start</span><br />
Starting httpd:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ OK ]</div></p>

<p>なおエラーが出る場合には、モジュールを削ったときの設定ファイル変更を忘れている可能性があります。<br />
設定ファイルの問題の際には、エラーメッセージとともに行番号が書かれていますので、再確認して下さい。</p>

<p><br />
<h3>MySQLの設定と起動</h3></p>

<p>それでは、MySQLの設定と起動を見てみましょう。<br />
MySQLの設定については /etc/my.cnf を編集することで可能ですが、あらかじめ最低限の設定はされているので、ひとまず起動をして管理者パスワードの設定を行います。</p>

<p>MySQLを起動するには、serviceコマンドを利用します。</p>

<div class="precode">

<p># <span class="hl">service mysqld start</span><br />
Initializing MySQL database:  Installing MySQL system tables...<br />
OK<br />
Filling help tables...<br />
OK</p>

<p>・・中略・・</p>

<p>                                                           [  OK  ]<br />
Starting mysqld:                                           [  OK  ]</div></p>

<p>無事に起動できれば、[ OK ] と表示されます。</p>

<p>次に設定を移ります。<br />
設定には専用のスクリプトが用意されているので、そちらを利用します。</p>

<div class="precode">

<p># <span class="hl">/usr/bin/mysql_secure_installation</span></p>

<p>・・略・・</p>

<p>Enter current password for root (enter for none):<span class="notice"> ← デフォルトではパスワードが無いので、そのままリターン</span><br />
OK, successfully used password, moving on...</p>

<p>Setting the root password ensures that nobody can log into the MySQL<br />
root user without the proper authorisation.</p>

<p>Set root password? [Y/n] y<span class="notice"> ← 「y」と入力してリターン</span><br />
New password:<span class="notice"> ← rootパスワードとして設定したい文字列を入力してリターン</span><br />
Re-enter new password:<span class="notice"> ← もう一度入力してリターン</span><br />
Password updated successfully!<br />
Reloading privilege tables..<br />
 ... Success!</p>

<p><br />
By default, a MySQL installation has an anonymous user, allowing anyone<br />
to log into MySQL without having to have a user account created for<br />
them.  This is intended only for testing, and to make the installation<br />
go a bit smoother.  You should remove them before moving into a<br />
production environment.</p>

<p>Remove anonymous users? [Y/n] y<span class="notice"> ← 「y」と入力してリターン</span><br />
 ... Success!</p>

<p>Normally, root should only be allowed to connect from 'localhost'.  This<br />
ensures that someone cannot guess at the root password from the network.</p>

<p>Disallow root login remotely? [Y/n] y<span class="notice"> ← 「y」と入力してリターン</span><br />
 ... Success!</p>

<p>By default, MySQL comes with a database named 'test' that anyone can<br />
access.  This is also intended only for testing, and should be removed<br />
before moving into a production environment.</p>

<p>Remove test database and access to it? [Y/n] y<span class="notice"> ← 「y」と入力してリターン</span><br />
 - Dropping test database...<br />
 ... Success!<br />
 - Removing privileges on test database...<br />
 ... Success!</p>

<p>Reloading the privilege tables will ensure that all changes made so far<br />
will take effect immediately.</p>

<p>Reload privilege tables now? [Y/n] y<span class="notice"> ← 「y」と入力してリターン</span><br />
 ... Success!</p>

<p>Cleaning up...</p>

<p></p>

<p>All done!  If you've completed all of the above steps, your MySQL<br />
installation should now be secure.</p>

<p>Thanks for using MySQL!<br />
</div></p>

<p>これで、MySQLが利用できるようになりました。</p>

<p><br />
<h3>phpmyadminの設定</h3></p>

<p>ここまでで、Apache、PHP、MySQLの全てが利用可能になりました。<br />
最後に、phpmyadminの設定を行いましょう。</p>

<p>まずは、phpmyadminの設定ファイルを変更します。<br />
変更するのは、blowfish_secret という項目だけです。以下のようにご自身で決めたランダムな文字列を入れてください。</p>

<p>vi /usr/share/phpmyadmin/config.inc.php<br />
<div class="precode-text">$cfg['blowfish_secret'] = '<span class="hl" id="blowfish">dfj29jwIO1w19jjsdw219Ujdsjlk</span>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</div></p>

<div><script>
<!--
var chr = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var str = "";
for(i=0; i<24; i++){
	str += chr.substr(Math.random()*62, 1);
}
document.getElementById('blowfish').innerText = str;
-->
</script></div>

<p>次に接続元のIPアドレスを追加します。<br />
以下のように、/etc/httpd/conf.d/phpmyadmin.conf を編集し、Allow from を追加します。</p>

<p>vi /etc/httpd/conf.d/phpmyadmin.conf<br />
<div class="precode-text">&lt;Directory "/usr/share/phpmyadmin"&gt;<br />
  Order Deny,Allow<br />
  Deny from all<br />
  Allow from 127.0.0.1<br />
  <span class="notice">Allow from 59.106.??.??</span><br />
&lt;/Directory&gt;<br />
</div></p>

<p>設定ファイルの編集が終われば、Apacheに設定ファイルを再読み込みさせれば完了です。<br />
<div class="precode"># <span class="hl">service httpd reload</span><br />
Starting httpd:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ OK ]</div></p>

<p>ブラウザからアクセスをすると、無事phpmyadminの画面が表示されました。<br />
ユーザ名に root と入力し、パスワードには先ほどの文字列を入力します。</p>

<p><img alt="20110514-phpmyadmin.png" src="http://tanaka.sakura.ad.jp/archives/images/20110514-phpmyadmin.png" width="388" height="279" class="mt-image-none" style="" /></p>

<p><br />
<h3>自動起動設定と、再起動</h3></p>

<p>これで、LAMP環境の設定がひとまず完了し、利用可能な状況となりました。<br />
しかし、これで安心してはいけません。<br />
再起動した場合には、ApacheもMySQLも自動で起動せず、アクセスが受け付けられない状況となります。</p>

<p>自動起動するかどうかを確認するためには、chkconfigコマンドを利用します。<br />
3という項目がoffの場合には、再起動時にApacheやMySQLが自動起動されません。<br />
<div class="precode"># <span class="hl">chkconfig --list|grep -E "httpd|mysql"</span><br />
httpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:off&nbsp;&nbsp;&nbsp;1:off&nbsp;&nbsp;&nbsp;2:off&nbsp;&nbsp;&nbsp;<span class="notice">3:off</span>&nbsp;&nbsp;&nbsp;4:off&nbsp;&nbsp;&nbsp;5:off&nbsp;&nbsp;&nbsp;6:off<br />
mysqld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:off&nbsp;&nbsp;&nbsp;1:off&nbsp;&nbsp;&nbsp;2:off&nbsp;&nbsp;&nbsp;<span class="notice">3:off</span>&nbsp;&nbsp;&nbsp;4:off&nbsp;&nbsp;&nbsp;5:off&nbsp;&nbsp;&nbsp;6:off<br />
# <span class="hl">chkconfig httpd on</span><br />
# <span class="hl">chkconfig mysqld on</span><br />
# <span class="hl">chkconfig --list|grep -E "httpd|mysql"</span><br />
httpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:off&nbsp;&nbsp;&nbsp;1:off&nbsp;&nbsp;&nbsp;2:on&nbsp;&nbsp;&nbsp;&nbsp;<span class="notice">3:on</span>&nbsp;&nbsp;&nbsp;&nbsp;4:on&nbsp;&nbsp;&nbsp;&nbsp;5:on&nbsp;&nbsp;&nbsp;&nbsp;6:off<br />
mysqld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:off&nbsp;&nbsp;&nbsp;1:off&nbsp;&nbsp;&nbsp;2:on&nbsp;&nbsp;&nbsp;&nbsp;<span class="notice">3:on</span>&nbsp;&nbsp;&nbsp;&nbsp;4:on&nbsp;&nbsp;&nbsp;&nbsp;5:on&nbsp;&nbsp;&nbsp;&nbsp;6:off<br />
#</div></p>

<p>これで再起動をすれば、全ての作業が完了です。<br />
再起動しなくても問題ありませんが、<b>再起動された時に自動で全てのソフトウェアが起動するかどうかを確かめるためにも、再起動を強くお勧めします</b>。</p>

<p>時間としては1時間程度で済みましたでしょうか？<br />
最近では、クラウドの機能が増えたことによりこういった作業を必要ないという人もいますが、ウェブ開発者のたしなみとして、これくらいはできるべきだと思います。<br />
慣れれば10分くらいでできますし、数十台程度であれば平行で作業すれば30分もあれば出来ます。</p>

<p>ということで、皆さんもぜひがんばってチャレンジしてみてください。<br />
なお皆さまからも「ここはこの方がいい！」とかあればぜひご指摘頂ければ幸いです。</p>

<p>2012/5/7 CentOS 最新版に対応すべく修正しました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>大災害時におけるアクセス負荷を軽減させるキャッシュサーバ提供について</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/03/cache-cdn-server.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1083</id>

    <published>2011-03-15T23:57:17Z</published>
    <updated>2011-03-16T02:22:38Z</updated>

    <summary>先日発生した東北地方太平洋沖地震に際し、公的機関等のウェブサイトへのアクセスが集...</summary>
    <author>
        <name></name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>先日発生した東北地方太平洋沖地震に際し、公的機関等のウェブサイトへのアクセスが集中し、サーバへの接続に支障が出ることが増えています。<br />
そういった事態を解消すべく、ICT関連各社により負荷低減のための無償支援を致しております。</p>

<ul>
<li>IBM</li>
<li><a href="http://cache.iijgio.com/">IIJ GIO</a></li>
<li><a href="http://jaws-ug.jp">JAWS-UG(Japan Amazon Web Service Users Group)</a>※有志による支援も行われています</li>
<ul>
<li><a href="http://www.r-cms.biz/">情報提供サイト作成</a> - 株式会社ディバータ</li>
<li><a href="https://spreadsheets.google.com/viewform?hl=ja&formkey=dFpkMlQxOVFtSWZCazNBeXhQX2RjZEE6MQ#gid=0">爆速ホスティング</a> - サーバワークス社</li>
</ul>
<li><a href="http://windowsazurepass.com/?Campid=F3313E69-464C-E011-98E3-001F29C8E9A8">Microsoft Azure</a></li>
<li><a href="http://tanaka.sakura.ad.jp/2011/03/tohoku-earth-quake-infra.html">さくらインターネット</a>※<a href="http://hope.viops.jp">hope.viops.jp</a>でも情報提供を行っています</li>
</ul>

<p>※50音順<br />
※問い合わせ先は以下に記しています。</p>

<p>今回はその一例として、キャッシュサーバやミラーサーバを使った負荷低減方法を紹介いたします。<br />
なお、この方法はサイト管理者の方の協力があれば非常に効果が高いものですので、接続の良くないサーバなどがありましたら、管理者の方に本ページを紹介頂ければ幸いです。</p>

<p>まず、アクセスが増えて接続できない状態を解説します。<br />
以下の図のように、利用者からのアクセスが増えて、ウェブサーバや回線が圧迫されるために、アクセスが出来なくなります。</p>

<p><img src="/archives/images/20110315-cache1.png" width="435" height="165" alt="キャッシュサーバを使わない場合"></p>

<p>それに対して、キャッシュサーバという専用のサーバを中継させることにより、負荷を軽減させるというのが今回の方式です。<br />
以下の図のように、利用者からのアクセスをキャッシュサーバで受け付け、そのアクセスを取りまとめてウェブサーバに接続します。</p>

<p><img src="/archives/images/20110315-cache2.png" width="530" height="165" alt="キャッシュサーバを使う場合"></p>

<p>利用するに当たっては、上記の事業者側でキャッシュサーバに登録を行い、サイト管理者様はドメイン名に割り当てられたIPアドレスをウェブサーバからキャッシュサーバへ変更するだけです。</p>

<p>以下のように、既存のウェブサーバをミラーする方法も提供可能です。</p>

<p><img src="/archives/images/20110315-cache3.png" width="530" height="200" alt="ミラーサーバを使う場合"></p>

<div style="border:1px solid #ff4444; background-color:#ffcccc; width:500px; padding:4px">
<b>担当の技術者の方へ</b>

<p>ご利用頂くには、ゾーン情報の変更をおすすめしています。<br />
キャッシュサーバ、ミラーサーバのみを開設することも可能ですが、大元のウェブサーバのトラフィックが減らせない限り、有効性が低減されてしまいます。<br />
Aレコード、もしくはCNAMEレコードを編集頂ければ幸いです。<br />
</div></p>

<p>お問い合わせ先は以下のとおりです。</p>

<ul>
<li>IBM: E-Mail: sbcloud at jp.ibm.com</li>
<li>IIJ: E-Mail: gio-rr at iij.ad.jp / WWW: <a href="http://cache.iijgio.com/">http://cache.iijgio.com/</a></li>
<li>jaws-ug: Twitter: <a href="http://twitter.com/KenTamagawa">@KenTamagawa</a>
/ <a href="http://twitter.com/#search?q=%23jawsug">#jawsug</a> /
WWW: <a href="http://jaws-ug.jp">http://jaws-ug.jp</a>
</li>
<li>Windows Azure: E-Mail: info311a at microsoft.com / Twitter <a href="http://twitter.com/shin135">@shin135</a> / <a href="http://twitter.com/#search?q=%23JAZUG">#JAZUG</a></li>
<li>さくらインターネット: Twitter <a href="http://twitter.com/kunihirotanaka">@kunihirotanaka</a> / <a href="http://twitter.com/naoto_matsumoto">@naoto_matsumoto</a></li>
</ul>
※メールアドレスについては、at の部分を@に置き換えてください。

<p>現状を少しでも解消するため、全面的な協力をさせて頂きますので、担当者の方にお知らせ頂ければ幸いです。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>東北地方太平洋沖地震に対するサーバインフラ支援について</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/03/tohoku-earth-quake-infra.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1082</id>

    <published>2011-03-15T07:22:36Z</published>
    <updated>2011-03-16T06:40:14Z</updated>

    <summary>先日、東北地方において、大地震が発生致しました。 被災された方には、心よりお見舞...</summary>
    <author>
        <name></name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>先日、東北地方において、大地震が発生致しました。<br />
被災された方には、心よりお見舞い申し上げます。</p>

<p>この事態にあたり、インターネットサイトの多くがダウンしたり、繋がりにくい状態になっており、さくらインターネットにおいてもそのようなサイトをお手伝いすべく、大きな帯域の提供や、ミラーサーバ運用などを行っております。<br />
既に、３月１２日に私のTwitterを通じて公表しており、たくさんのサイトをお預かり致しておりますが、Twitterのみの情報となっておりましたので、改めて以下に掲載させていただきます。</p>

<ul>

<p><li><b>サーバがなくて困っている方へ</b></li><br />
さくらのVPSであれば、申し込み後、直ぐに無料で利用が開始できます。（だいたい30分くらい）<br />
ただし、無料期間中は2Mbpsの帯域制限がありますので、カスタマーサポート宛、もしくは私のTwitter <a href="http://twitter.jp/kunihirotanaka">@kunihirotanaka</a>を通じて制限解除の依頼をいただければ、無料期間中でも帯域制限を解除致します。</p>

<p><a href="http://vps.sakura.ad.jp">http://vps.sakura.ad.jp</a></p>

<p>申し込みの際には、「振込み」を選んで頂ければ、料金がかかることはありません。<br />
※クレジットカードを選択すると、2週間後に課金が開始されてしまいます。</p>

<p>あと、1.5G 4G 8G の3プランは在庫が逼迫し始めていますので、512MBもしくは1GBのプランを選択頂ければ幸いです。</p>

<p><li><b>とりあえずホームページを立ち上げたい方</b></li><br />
さくらのレンタルサーバについても、無料で利用が開始できます。（同じく30分くらい）<br />
この際に、アクセスが増えすぎると503エラーが出てしまいます。<br />
ついては、上記のVPSと同様に、問い合わせをいただければ制限を緩和致します。</p>

<p>なお、申し込まれる際には、比較的アクセス耐性が強いプレミアムプランをおすすめします。</p>

<p><a href="http://www.sakura.ne.jp">http://www.sakura.ne.jp</a></p>

<p><li><b>ミラーサイトを作りたい方</b></li><br />
※これは、さくらインターネットで公式にサポートしているものではありません。</p>

<p><a href="http://tanaka.sakura.ad.jp/mirror/">http://tanaka.sakura.ad.jp/mirror/</a>において、ウェブサイトのミラーを行っています。<br />
災害関係のサイトを運営されている方で、アクセスに問題がある場合には、上記のミラーシステムをご活用頂くことで、少しでもサーバ負荷を抑えられます。</p>

</ul>

<p>なお、現在新規に受付しているサーバは全て大阪にあります。<br />
よって、停電の影響はありません。<br />
東京電力管内のサーバを一つでも減らせるよう、協力頂ければ幸いです。</p>

<p>現在、既に多くのサイトにご協力させて頂いておりますが、まだまだアクセスの出来ないサイトも多くございます。<br />
ついては、この情報を広く伝えていただき、ひとつでもアクセスに問題がなくなれば幸いです。</p>

<p>現在、他の団体にも広がっています。<br />
ぜひ、多くの皆さんにお伝え頂ければ幸いです。</p>

<ul>
<li><a href="http://blog.livedoor.jp/koichiise/">【東北地方太平洋沖地震】無償サーバリスト</a></li>
<li><a href="http://windowsazurepass.com/?Campid=F3313E69-464C-E011-98E3-001F29C8E9A8">東北地方太平洋沖地震 対策用 Windows Azure Platform 無料パス</a></li>
<li><a href="http://jaws-ug.jp/">AWS・JAWS-UGの災害復興支援</a></li>
<li><a href="http://hope.viops.jp/">災害関連の公的情報支援サイト</a></li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>さくらのVPSで上位プランに移行するための手順</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/03/sakura-vps-upgrade.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1079</id>

    <published>2011-03-09T10:36:12Z</published>
    <updated>2011-05-15T04:12:42Z</updated>

    <summary>さて、本日からさくらのVPSの上位プランが提供開始されました。 昨年９月に980...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="格安VPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>さて、本日からさくらのVPSの上位プランが提供開始されました。<br />
昨年９月に980円で提供を開始した際には大変大きな反響を頂き、既に9,000件を超えるお客様にご利用頂いていますが、さらに高いスペックが欲しいというご意見に答えるため、8GBまでのハイスペックプランをご用意しました。</p>

<p>ただ、クラウド型IaaSと違って移行作業が必要という制限があるため、今回は上位プランへの移行方法をまとめてみました。</p>

<p>手順は以下のとおりです。</p>

<ol>
<li>DNSのTTLを60にします。（これは事前に余裕を持って行って下さい）</li>
<li>新旧両方のサーバにrsyncをインストールします。</li>
<li>旧サーバから新サーバへrsyncを使ってファイルをコピーします。</li>
<li>新サーバを再起動します。</li>
<li>旧サーバのhttpdやsendmailなどを停止します。（ここから7が完了するまでの間は外部からサーバ停止状態に見えます）</li>
<li>もう一度、旧サーバから新サーバへrsyncを使ってファイルをコピーします。</li>
<li>DNSのAレコードを新サーバに向けるとともに、TTLを元に戻します。</li>
<li>旧サーバの解約を行います。（毎月20日が解約締切りなので要注意）</li>
</ol>

<p>それでは開始しましょう。<br />
今回は、CentOSをベースに話をすすめますが、多くのOSで同じ手順が使えます。</p>

<div style="border: 1px solid #ff0000; padding:10px; margin: 20px;">
<font color="#ff0000">移行作業にあたって<ul>
<li>コピーにあたってはrootでログインする必要がありますので、sshの設定を適切に行って下さい</li>
<li>新サーバと旧サーバのOSは、必ず同じものにしてください。<br />古いサーバが32bit OSで、新しいサーバが64bit OSだと不具合が発生します。</li>
<li>古いサーバと新しいサーバを絶対に間違えないようにして下さい。<br />間違えると、全てのデータを失う可能性があります</li>
<li>さくらインターネットで正式サポートしているものではありません。<br />自己責任で行っていただきますようお願い致します。</li>
</ul>
</font>
</div>
<ol>

<p><li>DNSのTTLを60にします。</li><br />
サーバ切り替えに先立って、該当するホスト名のTTLを60に設定します。<br />
これは、実際に切り替えをするときに、即座に変更されるようにするためです。</p>

<p>さくらインターネットのネームサーバにおける例は、以下のブログ記事を参照してください。</p>

<p>→ <a href="http://tanaka.sakura.ad.jp/2011/03/sakura-domain-nameserver-dns-ttl.html">さくらインターネットでDNSのTTLを変更する方法</a></p>

<p>まず、変更したいドメイン（ホスト名）をdigコマンドで調べます。<br />
以下の例の場合は、TTLが3600に設定されているので、サーバ移転の3600秒前（1時間前）までに、この操作を行う必要があります。</p>

<p><code><br />
[root@localhost ~]# dig vps2.????.jp.</p>

<p>; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> vps2.????.jp.<br />
;; global options:  printcmd<br />
;; Got answer:<br />
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62579<br />
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0</p>

<p>;; QUESTION SECTION:<br />
;vps2.????.jp.                 IN      A</p>

<p>;; ANSWER SECTION:<br />
vps2.????.jp.          3600    IN      A       59.106.183.??</p>

<p>;; Query time: 3 msec<br />
;; SERVER: 210.224.163.4#53(210.224.163.4)<br />
;; WHEN: Mon Mar  7 20:09:25 2011<br />
;; MSG SIZE  rcvd: 47</p>

<p>[root@localhost ~]#<br />
</code></p>

<p>無事変更が出来れば、以下のとおりTTLが60になるのがわかります。</p>

<p><code><br />
;; ANSWER SECTION:<br />
vps2.????.jp.          60    IN      A       59.106.183.??<br />
</code></p>

<p>※自分のネームサーバでTTLが60になっていたとしても、他のネームサーバではキャッシュされたままの可能性があります。変更前のTTLで示された時間（上記の例だと3600秒間）は待つのが懸命です。</p>

<p><li>rsyncのインストール</li><br />
恐らく、さくらのVPSでのCentOSデフォルトではrsyncがインストールされていると思います。<br />
rsyncと入力してコマンドがなければ、yum install rsync とすれば結構です。</p>

<p><li>ファイルのコピー</li><br />
今回の手順では、サーバの停止時間を極力短くするために、旧サーバ停止前にコピーを行い、停止後に再度コピーを行うこととしています。<br />
2回目のコピーは差分だけですので、比較的短時間でコピーが完了します。</p>

<p>コピーにはrsyncとsshを利用します。<br />
rsyncのオプションは以下のとおりです。</p>

<table>
<tr><th>オプション</th><th>動作内容</th></tr>
<tr><th>-r</th><td>ディレクトリ内容を再帰的にコピーします</td></tr>
<tr><th>-t</th><td>更新日時を保持します</td></tr>
<tr><th>-l</th><td>ソフトリンクを保持します</td></tr>
<tr><th>-z</th><td>転送時に圧縮します</td></tr>
<tr><th>-v</th><td>饒舌になります</td></tr>
<tr><th>-o</th><td>所有者を保持します</td></tr>
<tr><th>-g</th><td>グループを保持します</td></tr>
<tr><th>-p</th><td>パーミッションを保持します</td></tr>
<tr><th>-H</th><td>ハードリンクを保持します</td></tr>
<tr><th>-A</th><td>ACLを保持します</td></tr>
<tr><th>-X</th><td>拡張パーミッションを保持します</td></tr>
<tr><th>--delete</th><td>ファイルの削除を容認します</td></tr>
<tr><th>--exclude</th><td>除外するファイルの名前を指定します</td></tr>
<tr><th>--block-size=</th><td>チェックサムをとる際のブロックサイズを指定します</td></tr>
<tr><th>-e ssh</th><td>ssh経由でコピーします</td></tr>
</table>

<p>なお、今回のコピーにあたって、いくつかのファイルとディレクトリを除外しています。除外したファイルは、IPアドレスの設定を行なっているファイルと、sshのホストキーが含まれているファイル、そしてファイルシステムを指定しているファイルです。<br />
除外すべきファイルはOSによって異なりますので、ご注意下さい。</p>

<p><code><br />
# rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh<br />
_host_* --exclude fstab --block-size=4096 -e ssh / 49.212.21.??:/<br />
root@49.212.21.??'s password:<br />
building file list ... done</p>

<p>色々出てくる</p>

<p>sent 2083607 bytes  received 3212 bytes  379421.64 bytes/sec<br />
total size is 1705349185  speedup is 817.20<br />
</code></p>

<p>これでコピーが完了しました。<br />
コピー時間は、どれだけのコンテンツやファイルがあるかにより、大きく変わります。</p>

<p><li>新サーバを再起動します。</li></p>

<p>新サーバを再起動すれば、古いサーバの設定を引き継いだ形で動作を開始するはずです。</p>

<p><li>旧サーバのhttpdやsendmailなどを停止します。</li></p>

<p>旧サーバで動作している全てのサービスを停止させます。<br />
例えば、httpdやsendmail、mysql-serverなどのことです。<br />
service httpd stop などと入力して、停止させましょう。</p>

<p>この時点で、外部の人はこのサーバへアクセスできなくなります。</p>

<p><li>もう一度、旧サーバから新サーバへrsyncを使ってファイルをコピーします。</li></p>

<p>旧サーバがサービスを停止したことを確認して、再度コピーを行います。<br />
2回目なので、さほど時間はかからないと思います。</p>

<p><code><br />
# rsync -rtlzvogpHAX --delete --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh<br />
_host_* --exclude fstab --block-size=4096 -e ssh / 49.212.21.??:/<br />
root@49.212.21.??'s password:<br />
building file list ... done</p>

<p>色々出てくる</p>

<p>sent 2096209 bytes  received 920 bytes  220750.42 bytes/sec<br />
total size is 1705349185  speedup is 813.18<br />
</code></p>

<p><li>DNSのAレコードを新サーバに向けるとともに、TTLを元に戻します。</li></p>

<p>新しいサーバに向けてIPアドレスを変更します。<br />
それと同時に、先ほど60にしたTTLをもとに戻します。</p>

<p>※TTLが60のままだと、キャッシュがされないためにサイトへのアクセスが非常に遅くなります。</p>

<p>この作業が完了して60秒以上経てば、外部から新サーバへのアクセスが可能になります。</p>

<p><li>旧サーバの解約を行います。（毎月20日が解約締切りなので要注意）</li></p>

<p>数日間状況を見て、旧サーバの解約を行います。<br />
なお、さくらインターネットの場合には、解約前月の20日までに解約申請をしなければなりません。<br />
例えば、3月20日までに解約申請すれば4月末での解約となりますが、これを過ぎると1ヶ月間無駄に支払わなければならなくなるので注意してください。</p>

</ol>

<p>以上が移行手順です。</p>

<p>是非皆様も上位プランで充実したVPSライフをお送り下さい。</p>]]>
        
    </content>
</entry>

<entry>
    <title>さくらインターネットでDNSのTTLを変更する方法</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/03/sakura-domain-nameserver-dns-ttl.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1080</id>

    <published>2011-03-09T03:34:00Z</published>
    <updated>2011-03-09T15:39:05Z</updated>

    <summary>TTLを0に指定するのは危険だという指摘があり、60秒と変更しました</summary>
    <author>
        <name></name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p><b>※掲載直後にTTLを0にという記述をしておりましたが、適切ではないのでは無いかという指摘を頂き、TTLを60にと変更しています。ご指摘ありがとうございました。</b></p>

<p>日々のサーバ運用を行う中で、サーバ移転を行いIPアドレスが変更される機会は少なくありません。<br />
しかし、DNSがなかなか反映されず「浸透しない」とつぶやかれている人をよく見かけます。<br />
これは事前にTTLを小さくしていないために発生する問題ですが、今回はさくらインターネットを例に、DNSのTTLを変更する方法を解説します。<br />
<font color="#ff0000">なお、ここで解説しているのは個別のレコード（Aレコード）を変更する時だけであり、ドメイン自体の移転などNSの変更の際に有効な手段ではありませんのでご注意下さい。</font></p>

<p>さて、DNSの場合は分散してサーバが設置されています。<br />
そのため、DNSの情報が反映されることを「浸透」と表現されることが多いのですが、電子メールのようにサーバを中継してリレーしていくわけではありませんので、決して浸透していくわけではありません。<br />
実際にはネームサーバとクライアントの間のどこかでキャッシュされていて、しばらくの間設定が反映されないために起こる現象です。<br />
DNSは分散されているため、ドメイン管理者側ではどのネームサーバでキャッシュされているかがわかりませんし、当然のことながら世界中のネームサーバのキャッシュをクリアするわけにもいきません。<br />
そのためクライアントによってアクセスが出来なかってもただ待つしかなく、なかなか反映されないとやきもきする事態に陥るわけです。</p>

<p><img src="/archives/images/20110307-dns.png" width="437" height="211" alt="DNSの仕組み"></p>

<p>これを回避する方法はひとつであり、TTLを短くして事前にキャッシュの有効期限を短縮しておくことです。<br />
ただし、TTLは短くても1時間、長ければ24時間以上に設定されていることもあり、事前に余裕を持って行っておかなければなりません。<br />
一番理想的な手順は、作業開始時間から「TTLで示された時間分」だけ先にTTLを変更しておき、サーバ移転と同時にDNSのIPアドレスレコードを書き換え、TTLをもとに戻すという形です。<br />
例えば、デフォルトのTTLが86400と指定されているなら、サーバ移転の24時間前までに作業を行う必要があります。</p>

<p>それではTTLの解説はこれくらいにして、さくらインターネットでのTTL操作を見てみます。</p>

<p>会員メニューにログインし、「契約情報」をクリックします。<br />
会員メニュー: <a href="https://secure.sakura.ad.jp/menu/">https://secure.sakura.ad.jp/menu/</a><br />
<a href="/archives/images/20110307-vps1.png"><img src="/archives/images/20110307-vps1.png" width="365" height="250"></a></p>

<p>「ドメインメニュー」へ進みます。<br />
<a href="/archives/images/20110307-vps2.png"><img src="/archives/images/20110307-vps2.png" width="365" height="250"></a></p>

<p>ドメインメニューから、設定変更したいドメインの「ゾーン設定」をクリックします。<br />
<a href="/archives/images/20110307-vps3.png"><img src="/archives/images/20110307-vps3.png" width="365" height="250"></a></p>

<p>ゾーン表示をしている画面で、「変更」をクリックします。<br />
<a href="/archives/images/20110307-vps4.png"><img src="/archives/images/20110307-vps4.png" width="365" height="250"></a></p>

<p>変更したいエントリーのデータをクリックし、フォームにおいてTTLを入力して、「変更」ボタンをクリックします。<br />
「TTLの指定」という項目で、チェックボックにチェックをすればテキストボックスが表示されますので、TTLを60にするときはこの項目に60と入力します。<br />
<a href="/archives/images/20110307-vps5.png"><img src="/archives/images/20110307-vps5.png" width="365" height="300"></a></p>

<p>新しい項目が付加されれば、「データ送信」をクリックして、作業を完了させます。<br />
<a href="/archives/images/20110307-vps6.png"><img src="/archives/images/20110307-vps6.png" width="365" height="250"></a></p>

<p>問題なく完了すれば、データの項目にTTLが表示されます。<br />
<a href="/archives/images/20110307-vps7.png"><img src="/archives/images/20110307-vps7.png" width="365" height="250"></a></p>

<p>ここまでの作業が完了すれば、ほぼリアルタイムにネームサーバ情報が更新されます。<br />
例えば、以下のようにdigコマンドを実行することによってネームサーバの情報が更新されているかどうかを確認できます。<br />
以下の例では、「ANSWER SECTION」という項目にて、「60」と表示されているのがわかります。</p>

<p><code><br />
# dig test.????.jp. @ns1.dns.ne.jp</p>

<p>; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> test.????.jp. @ns1.dns.ne.jp<br />
;; global options:  printcmd<br />
;; Got answer:<br />
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35987<br />
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0</p>

<p>;; QUESTION SECTION:<br />
;test.????.jp.                  IN      A</p>

<p>;; ANSWER SECTION:<br />
test.????.jp.           60       IN      A       210.155.1.1</p>

<p>;; AUTHORITY SECTION:<br />
????.jp.                3600    IN      NS      ns1.dns.ne.jp.<br />
????.jp.                3600    IN      NS      ns2.dns.ne.jp.</p>

<p>;; Query time: 1 msec<br />
;; SERVER: 210.188.224.9#53(210.188.224.9)<br />
;; WHEN: Tue Mar  8 16:14:15 2011<br />
;; MSG SIZE  rcvd: 89<br />
</code></p>

<p>なお、TTLを個別に指定しない場合には、最小TTLが使用されます。<br />
上記の例では、ゾーン編集画面にて「最小TTL  3600秒」と表示されているので、TTLを0にする前は3600だったことがわかります。<br />
すなわち、サーバによっては3600秒間キャッシュが残ることになりますので、原則論で言うと3600秒間は完全には「浸透」しないことになります。<br />
ちなみに、昔のドメインの場合には86400秒（24時間）というのも多く、自身のドメインがこのような設定の場合には24時間待つ必要があります。</p>

<p>デフォルトのTTLで示された秒数経過後に、サーバの移転を行い、TTLをデフォルトに戻せば作業完了です。<br />
TTLをデフォルト値に戻さなければ、キャッシュが居つまでも無効化されることになり、サイトへのアクセスが非常に遅くなる可能性があります。<br />
その為、作業完了後にはTTLをデフォルト値に戻すことを忘れないようにしてください。</p>]]>
        
    </content>
</entry>

<entry>
    <title>格安の低価格ＶＰＳを比較する</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/02/vps-sakura-saases-serversman.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1077</id>

    <published>2011-02-27T09:35:37Z</published>
    <updated>2011-02-28T08:18:08Z</updated>

    <summary>さくらのVPS、SaaSes　Osukini Server、Serversman@VPSを、料金、性能など、コストパフォーマンスで徹底比較します。
格安のVPSを検討中の方のために書きました。</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="技術関連" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="格安VPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="vps" label="VPS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="さくらのvps" label="さくらのVPS" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>最近、IaaS型クラウドの流行の裏で、VPSがひそかな人気を集めています。<br />
VPSは、クラウドのような従量課金やAPIアクセス、柔軟なリソース増減はできませんが、その分安価な価格設定が行われることが多く、数ヶ月以上利用するのであればクラウドよりも非常に安価で高いパフォーマンスを得られることが特徴です。<br />
また、コントロールパネルで起動、停止、再起動などの操作や、OS再インストールなど、クラウドで言うところの「セルフサービスによる」という部分は多くのVPSで実現されており、さくらのVPSに限ってはコンソールをホストOS経由で直接アクセスできるなど、物理サーバの置き換え用途としても十分に利用できる内容となってきました。<br />
さらに、申し込みから利用開始まで数分から数十分程度で行えるなど、従量課金ではないことと解約が手動となる点を除けばIaaS型クラウドに決して劣るものではありません。</p>

<p>ただ、たくさんのVPSが各社から提供され、なかなか選べないよという方も多いのが実情です。<br />
今回は、さくらのVPSのほか、話題を呼んでいる日本ラッドさんのSaaSes Osukini Serverと、DTIさんのServersman@VPSを取り上げ、それぞれのVPSについて比較をしてみました。<br />
いちおう公平に書くようにしましたが、色眼鏡で見ていただいても結構です。m(＿ ＿)m</p>

<p>それでははじめに各社の仕様をまとめてみます。</p>

<p>
<style type="text/css"><!--.vps-list td,th{padding: 2px;}--></style>
</p>

<table class="vps-list" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<th rowspan="2" colspan="2">プラン名</th>
<th colspan="5">さくらのVPS</th>
<th colspan="4">Osukini Server</th>
<th colspan="3">Serversman@VPS</th></tr>
<tr>
<th>512</th>
<th>1G</th>
<th>1.5G</th>
<th>4G</th>
<th>8G</th>
<th>LT</th>
<th>ST</th>
<th>GT</th>
<th>XT</th>
<th>Entry</th>
<th>Standard</th>
<th>Pro</th></tr>
<tr>
<th colspan="2">初期費用（円）</th>
<td align="right">0</td>
<td align="right">2,980</td>
<td align="right">4,980</td>
<td align="right">9,980</td>
<td align="right">19,980</td>
<td align="right">6,000</td>
<td align="right">6,000</td>
<td align="right">10,000</td>
<td align="right">14,000</td>
<td align="right">0</td>
<td align="right">0</td>
<td align="right">0</td></tr>
<tr>
<th colspan="2">月額（円）</th>
<td align="right">980</td>
<td align="right">1,480</td>
<td align="right">1,980</td>
<td align="right">3,980</td>
<td align="right">7,980</td>
<td align="right">450</td>
<td align="right">980</td>
<td align="right">1,980</td>
<td align="right">4,980</td>
<td align="right">490</td>
<td align="right">980</td>
<td align="right">1,980</td></tr>
<tr>
<th colspan="2">年払い割引</th>
<td colspan="5" align="middle">1か月分割引</td>
<td colspan="4" align="middle">なし</td>
<td colspan="3" align="middle">なし</td></tr>
<tr>
<th colspan="2">試用期間</th>
<td colspan="5" align="middle">2週間</td>
<td colspan="4" align="middle">2週間</td>
<td colspan="3" align="middle">記載なし<br />(キャンペーン対応)</td></tr>
<tr>
<th colspan="2">メモリ容量</th>
<td align="right">512MB</td>
<td align="right">1GB</td>
<td align="right">1.5GB</td>
<td align="right">4GB</td>
<td align="right">8GB</td>
<td align="right">512MB</td>
<td align="right">1GB</td>
<td align="right">2GB</td>
<td align="right">4GB</td>
<td align="right">256MB</td>
<td align="right">512MB</td>
<td align="right">1GB</td></tr>
<tr>
<th colspan="2">HDD容量</th>
<td align="right">20GB</td>
<td align="right">30GB</td>
<td align="right">50GB</td>
<td align="right">120GB</td>
<td align="right">240GB</td>
<td align="right">50GB</td>
<td align="right">100GB</td>
<td align="right">200GB</td>
<td align="right">400GB</td>
<td align="right">10GB</td>
<td align="right">30GB</td>
<td align="right">50GB</td></tr>
<tr>
<th colspan="2">SWAP設定</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">×</td></tr>
<tr>
<th colspan="2">リモート<br />コンソール</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">×</td>
<td colspan="3" align="middle">×</td></tr>
<tr>
<th rowspan="2">固定IP</th>
<th>v4</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">○</td></tr>
<tr>
<th>v6</th>
<td colspan="5" align="middle">×</td>
<td colspan="4" align="middle">×</td>
<td colspan="3" align="middle">○</td></tr>
<tr>
<th colspan="2">追加IP</th>
<td colspan="5" align="middle">×</td>
<td colspan="4" align="middle">○<br />月額500円</td>
<td align="middle">×</td>
<td align="middle">○<br />1個</td>
<td align="middle">○<br />3個</td></tr>
<tr>
<th colspan="2">IP逆引き</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">△<br />制限あり</td></tr>
<tr>
<th colspan="2">仮想化プラットフォーム</th>
<td colspan="5" align="middle">KVM完全仮想化</td>
<td colspan="4" align="middle">Xen完全仮想化</td>
<td colspan="3" align="middle">OpenVZコンテナ</td></tr>
<tr>
<th rowspan="5">OS</th>
<th>CentOS</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">○</td></tr>
<tr>
<th>Debian</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">○</td></tr>
<tr>
<th>Ubuntu</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">○</td>
<td colspan="3" align="middle">○</td></tr>
<tr>
<th>Fedora</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">×</td>
<td colspan="3" align="middle">×</td></tr>
<tr>
<th>FreeBSD</th>
<td colspan="5" align="middle">○</td>
<td colspan="4" align="middle">×</td>
<td colspan="3" align="middle">×</td></tr>
<tr>
<th colspan="2">現在のキャンペーン</th>
<td colspan="5" align="middle"><br /></td>
<td colspan="4" align="middle">
今なら初期費用半額
</td>
<td colspan="3" align="middle">
今なら最大2か月分を無料に
</td></tr>
<tr>
<th colspan="2">その他の制約等</th>
<td colspan="5" align="middle">試用期間中は2Mbps制限<br />試用期間中はOP25Bあり</td>
<td colspan="4" align="middle"><br /></td>
<td colspan="3" align="middle">
VPN設定不可<br />
iptablesエントリ数の上限あり</td></tr>
</tbody></table>
※Serversman@VPSは、ウェブサイト上にて最大メモリの表記がありますが、あくまでも保障メモリで比較しています。

<p><br />
これではわかりにくいので、一番の関心事であろう価格について、それぞれ初年度にいくらかかるかを比較してみましょう。<br />
また、メモリ1MBあたりの単価、HDD 1GBあたりの単価も見てみます。</p>

<table class="vps-list" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<th rowspan="2" colspan="2">プラン名</th>
<th colspan="5">さくらのVPS</th>
<th colspan="4">Osukini Server</th>
<th colspan="3">Serversman@VPS</th></tr>
<tr>
<th>512</th>
<th>1G</th>
<th>1.5G</th>
<th>4G</th>
<th>8G</th>
<th>LT</th>
<th>ST</th>
<th>GT</th>
<th>XT</th>
<th>Entry</th>
<th>Standard</th>
<th>Pro</th></tr>
<tr>
<th colspan="2">年間の利用額(円)</th>
<td align="right">10,780</td>
<td align="right">19,260</td>
<td align="right">26,760</td>
<td align="right">53,760</td>
<td align="right">107,760</td>
<td align="right">11,400</td>
<td align="right">17,760</td>
<td align="right">33,760</td>
<td align="right">73,760</td>
<td align="right">5,880</td>
<td align="right">11,760</td>
<td align="right">23,760</td></tr>
<tr>
<th colspan="2">メモリ1MBあたり(円)</th>
<td align="right">21.0</td>
<td align="right">18.8</td>
<td align="right">17.4</td>
<td align="right">13.1</td>
<td align="right">13.2</td>
<td align="right">22.3</td>
<td align="right">17.3</td>
<td align="right">16.5</td>
<td align="right">18.0</td>
<td align="right">23.0</td>
<td align="right">23.0</td>
<td align="right">23.2</td></tr>
<tr>
<th colspan="2">HDD 1GBあたり(円)</th>
<td align="right">539.0</td>
<td align="right">642.0</td>
<td align="right">535.2</td>
<td align="right">448.0</td>
<td align="right">449.0</td>
<td align="right">228.0</td>
<td align="right">177.6</td>
<td align="right">168.8</td>
<td align="right">184.4</td>
<td align="right">588.0</td>
<td align="right">392.0</td>
<td align="right">475.2
</td></tr></table>

<p><br />
ここで、グラフ化してそれぞれのプランがどのような位置にあるのかを見てみます。<br />
まず、メモリの容量を横軸にした価格帯です。<br />
<img src="/archives/images/20110227-vps1.png" width="490" height="260" alt="VPS価格比較" border="0"><br />
導入費用が絶対価格で最も安いのはServersman@VPSのEntryプランですが、概ね価格帯は似通っているといえます。<br />
低スペック帯では唯一256MBモデルを出しているServersman@VPSが安価であり、512MBあたりでは3社とも同様の価格となり、高スペック帯ではさくらのVPSがもっとも安価ということがわかります。</p>

<p>次に、HDD容量を横軸にした価格帯を見てみましょう。<br />
<img src="/archives/images/20110227-vps2.png" width="487" height="281" alt="VPS価格比較" border="0"><br />
総じていえるのは、Osukini Serverが飛びぬけて大容量であるということでしょう。<br />
例えば、1万円の場合にさくらのVPSは20GB、Serversman@VPSは30GBのところ、Osukini Serverは50GBと大幅に大きいことがわかります。</p>

<p>ちなみに、キャンペーン適用した価格はどうなのか？１年を超えると結果は違うのでは？との質問もあったので、いちおうグラフを作りました。正直なところずっとキャンペーンをしている事業者は不公正だし信用できないので加味する必要性を全く感じませんが、信頼性がないとか言われても嫌なので参考までに。</p>

<ul>
<li><a href="/archives/images/20110227-vps5.png" target="_blank">HDDあたりの二年間費用比較（キャンペーン適用）グラフ</a></li><li><a href="/archives/images/20110227-vps6.png" target="_blank">メモリあたりの二年間費用比較（キャンペーン適用）グラフ</a></li></ul>

<p>結果的には大して変わりませんでした。<br />
結局、低スペック帯ではServersman@VPSが価格優位なこと、SaaSesが価格に対してHDDが大容量なこと、高スペック帯ではさくらのVPSが価格優位なこと、それぞれ変わることはありません。<br />
ただ、Serversman@VPSは期間が長くなると価格メリットが薄れてくるようです。</p>

<p>それでは気をとりなおして、最後にベンチマーク比較を見てみましょう。<br />
既にこれらのVPSサービスの利用者の方がunixbenchで計測されていますので、その情報を見てみたいと思います。<br />
それぞれ、「さくらのVPS unixbench」「Saases unixbench」「serversman unixbench」とGoogleで検索して出てきたページから抜粋しています。</p>

<ul><li>さくらのVPS</li>

<ul><li>1464.1(980) - <a href="http://d.hatena.ne.jp/abyssluke/20100717/1279313238">AbyssLukeのガイドライン</a></li>
<li>1540.6(980) - <a href="http://tanaka.sakura.ad.jp/archives/001061.html">さくらインターネット創業日記</a></li>
<li>1201.1(980) - <a href="http://d.hatena.ne.jp/dix3/20100907/1283806578">ヌル日記</a></li>
<li>1502.6(980) - よねすけさんより（コメント欄）</li></ul>
<li>Osukini Server</li>

<ul><li>570.8(ST) - <a href="http://memo.masa23.info/index.php?Saases%20Osukini%A5%B5%A1%BC%A5%D0%20ST">masa23のメモ</a></li>
<li>580.9(LT) - <a href="http://www.aspplus.useiis7.net/Default.aspx?Page=SaaSes-osukini-LT&NS=unix&AspxAutoDetectCookieSupport=1">ScrewTurn Wiki</a></li></ul>
<li>Serversman@VPS</li>

<ul><li>335.3(Entry) - <a href="http://www.suekichi.org/blog/2010/09/dti-serversman-vps-entry-unixbench/">SUEKICHI.org</a></li>
<li>329.5(Entry) - <a href="http://www.bravotouring.com/~yano/diary/it/20100923unixbench.htm">YANO's digital garage</a></li>
<li>235.7(Entry) - <a href="http://d.hatena.ne.jp/dix3/20100907/1283806578">ヌル日記</a></li>
<li>465.4(Standard) - <a href="http://d.hatena.ne.jp/abyssluke/20100717/1279313238">AbyssLukeのガイドライン</a></li>
<li>522.9(Standard Turbo Off) - よねすけさんより（コメント欄）</li><li>774.7(Standard Turbo On) - よねすけさんより（コメント欄）</li></ul></ul>

<p><img src="/archives/images/20110227-vps3.png" width="491" height="328" alt="VPS性能比較" border="0"><br />
これを見ると、さくらのVPSが1200から1500程度、Serversman@VPSがEntryで200から400程度、Standardで400?800程度で、Osukini ServerがLTとSTともに600程度です。<br />
unixbenchだけでは結果はわかりませんが、数字を見る限りさくらのVPSが飛びぬけて性能がよいのは間違いなさそうです。</p>

<p>ただ、性能だけを見ても仕方が無いので、価格性能比をマッピングしてみましょう。<br />
<img src="/archives/images/20110227-vps4.png" width="483" height="291" alt="VPS性能比較" border="0"><br />
やはり性能についてはさくらのVPSが良いですが、興味が惹かれるのはServersman@VPSです。Osukini Serverが価格が上がっても性能が変わらないのに対し、Serversman@VPSはプランごとに性能が変わっているうえ、TurboモードをONにすることによる性能の向上が見られます。<br />
完全仮想化の場合はゲスト空間が利用者に全て委ねられるのに対し、OpenVZの場合はCPU性能をコントロール出来るというのが寄与しているものと思われます。</p>

<p>それでは、ここでまとめにしたいと思います。<br />
比較を実際にしてわかったのは、各社各様に特徴があるなというところで、本当はさくらのVPSを推したいところですが、そうは甘くないようです。<br />
ということで各社の特徴をまとめてみました。</p>

<ul>
<li>さくらのVPS</li>

<ul><li>高スペックプランになるほど、コストパフォーマンスがよくなる</li>
<li>リモートコンソールが利用できる</li>
<li>サーバ性能が飛びぬけて良い</li>
<li>利用できるOSが多い</li>
<li>初期費用が無い(980プランのみ)</li></ul>
<li>Osukini Server</li>

<ul><li>HDD容量が飛びぬけて大きい</li></ul>
<li>Serversman@VPS</li>

<ul><li>IPv6が利用できる</li>
<li>IPv4が複数利用できる(StandardとProのみ)</li>
<li>低スペックプランがラインナップされ、最も安い<br />(過去のキャンペーン適用者で、Entryを月105円で利用できてる人もいるらしい)</li>
<li>運が良ければ保障以上のメモリを使える（但しプロセスがしばしばkillされる）</li>
<li>初期費用が無い</li></ul></ul>

<p>私の結論としては、</p>

<ul><li>スペックや性能が低くてもとにかく安くということでは、Serversman@VPS</li>
<li>HDD容量が欲しければ、Osukini Server</li>
<li>HDD容量はそこそこで良く、月に980円以上出せるのであれば、さくらのVPS</li>
</ul>
というところでしょうか。

<p>なお上述のとおり、ある程度の値段になると、Osukini Serverか、さくらのVPSという選択肢しかなく、スワップが利用できることも考えると、本格運用の場合には Osukini Server か、さくらのVPSの2択かなと思います。<br />
本当はさくらのVPSだけを推したいところでしたが、さすが岡田さんだけあってOsukini Serverも良くできているという印象です。</p>

<p>また今後、Amazon Web Servicesや、Linodeなども取り上げる予定ですが、皆さんからもご意見などいただければ幸いです。<br />
</p>]]>
        <![CDATA[<p>2011/02/27 <a href="http://twitter.com/taka0ga">@taka0ga</a>さんからの情報提供で、<a href="http://www.aspplus.useiis7.net/Default.aspx?Page=SaaSes-osukini-LT&NS=unix&AspxAutoDetectCookieSupport=1">ScrewTurn Wiki</a>さんが計測したOsukini Serverのベンチマーク結果を追加しました。<br />
2011/02/28 よねすけさんから頂いたコメントを元に、さくらのVPSと、Serversman@VPSのベンチマーク結果を追加しました<br />
2011/02/28 unixbench結果と初年度費用の関係を追加しました。<br />
2011/02/28 キャンペーンを適用した上で、２年間利用した場合の結果を追加しました。</p>]]>
    </content>
</entry>

<entry>
    <title>双日株式会社による当社株式のTOBについて</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/02/tob.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1076</id>

    <published>2011-02-22T10:57:38Z</published>
    <updated>2011-02-28T05:28:25Z</updated>

    <summary>本日、双日株式会社によるさくらインターネット株式のTOBが発表されました。 また...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="会社と仕事" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>本日、双日株式会社によるさくらインターネット株式のTOBが発表されました。<br />
また、当社取締役会はTOBに対して賛同意見を出しております。</p>

<p>さくらインターネット: <a href="http://www.sakura.ad.jp/ir/news/archives/20110222-002.news">双日株式会社による当社普通株式に対する公開買付けに関する賛同意見表明及び同社との業務提携契約書の締結のお知らせ</a><br />
双日: <a href="http://www.sojitz.com/jp/news/releases/pdf/110222.pdf">さくらインターネット株式会社株式に対する公開買付けの開始に関するお知らせ</a></p>

<p>今北産業で表現すると</p>

<ul>
<li>約30%の株式を持つ筆頭株主の双日株式会社が、約10%の買い増しを行い、約40%まで出資比率を引き上げる。</li>
<li>これにより、双日株式会社が約40%、私個人の資産管理会社（株式会社田中邦裕事務所）が約10%、私個人が5%となり、過半数（約55%）が安定株主となる。</li>
<li>双日株式会社は、株式会社田中邦裕事務所と株主間協定を結び、さくらインターネットを子会社化する</li>
</ul>

<p>ということです。</p>

<p>以下に、質問の多そうなところをまとめておきます。</p>

<ul>
<li>双日株式会社は現在約30%の株式を持つ筆頭株主であり、TOB成立後も引き続き約40%の株式を持つ筆頭株主です。</li>
<li>株式会社田中邦裕事務所は株主間協定を結ぶだけでTOBに参加しません（一切株式の売却をしません）ので、TOB成立後も第2株主として残ります。（株主間合意書に基づく）</li>
<li>取締役は、特に両者が合意しない限り、当社が4名、双日株式会社が2名を指定しますので、現在の経営体制から特に変更はありません（業務提携契約書に基づく）</li>
<li>サービスについては、今までどおりの体制で運営を続けますので、戦略を含めて特に変更はありません</li>
<li>双日株式会社、株式会社田中邦裕事務所、私個人の持分は、合計で約55%にとどまり、東京証券取引所の上場は今までどおり維持します</li>
<li>TOB成立後は、サービス・営業分野における事業提携、海外展開における事業提携、インフラ分野での事業提携、技術分野での事業提携を目指します。</li>
</ul>

<p>唐突な話で、皆さんにはご心配をおかけしたこともあるかと思いますが、双日株式会社はそもそも以前から筆頭株主でありますし、同社派遣の2名の社外取締役と共にサービスの拡充に努めてきた経緯があります。<br />
1/3以上の株式を取得する際にはTOBをしなければならないという金融商品取引法上の定めもあり、大げさなことになっていますが、上述のように特に大きな経営体制の変更はありませんので、ご安心頂ければと思います。<br />
今後は、当社の得意とする既存サービスの拡充に加え、一般企業向けサービス拡充を通じて、さらなる成長を目指しております。</p>

<p>今後ともどうぞ宜しくお願い致します。</p>]]>
        
    </content>
</entry>

<entry>
    <title>無料の携帯ソーシャルゲームが成り立つ訳</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2011/01/freemium-social-games.html" />
    <id>tag:tanaka.sakura.ad.jp,2011://1.1073</id>

    <published>2011-01-06T09:50:00Z</published>
    <updated>2011-02-28T05:27:31Z</updated>

    <summary>最近、携帯無料ゲーム（ソーシャルゲーム）の宣伝を見ない日はありません。 このソー...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="意見・感想" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>最近、携帯無料ゲーム（ソーシャルゲーム）の宣伝を見ない日はありません。<br />
このソーシャルゲームですが、よく知人から「なぜ無料でできるの？本当に無料なの？」と聞かれます。<br />
そういう時には、「課金を承諾しない限り、ソーシャルゲームは永遠に無料で遊べる」と回答しています。</p>

<p>Venture Now に掲載されていた「<a href="http://www.venturenow.jp/news/2010/11/16/1916_008986.html">ソーシャルメディア利用動向、女性ユーザーが積極的。GREE課金は男性の倍</a>」によると、このプラットフォーム会社の課金ユーザ比率は男性の11.8％、女性は21.2％で、平均すると16.8%しか課金されていません。<br />
つまり6人のうち5人はお金を払わずに楽しんでいるわけです。<br />
（女性比率が多いというところも気になりますが、今回は華麗にスルーします）<br />
<img alt="20101230-social.jpg" src="http://tanaka.sakura.ad.jp/archives/20101230-social.jpg" width="294" height="188" /><br />
出典: Venture Now</p>

<p>それではなぜ無料が成り立つのでしょうか？<br />
今更感もある話ですが、改めて原価と売上という２つの観点から見てみたいと思います。</p>

<p>まず原価の観点から。<br />
ソーシャルゲームの原価は何があると思いますか？<br />
ざっくりというと、広告宣伝費、開発費、インターネットインフラ費（サーバ費用）、課金手数料、サポート費用です。<br />
<img src="/archives/images/20110106-graph1.png" align="right">このうち、ユーザの数と関係なくかかるのが広告宣伝費と開発費で、ユーザの数に連動するのはサーバ費用と課金手数料、サポート費用です。<br />
無料の場合は課金手数料はかかりませんので、実質的にユーザの増加によって増えるのはサーバ費用とサポート費用です。<br />
それではサーバ費用やサポート費用はいくらかかるのでしょうか？<br />
これは正確に出せるものではありませんが、何とか計算してみましょう。</p>

<p>まずサーバ費用ですが、潜在ユーザも含めて1ユーザがひと月に平均1000ページビューのアクセスをするとして計算します。<br />
ひと月に1000万ページビューまでさばけるサーバのコストが月々3万円だとすると、30,000円×1000PV÷10,000,000PV＝3円/月程度となります。<br />
サポート費用ですが、2,000万人のユーザを200人でサポート、管理すると仮定して計算します。実際にはもっと少ない人数だと思います。<br />
1人月を60万円だとすると、60万円×200÷2,000万人＝6円/月程度となります。</p>

<p>ここで出てきた合計9円/ユーザ/月という数字について、それ自体には意味はありませんが、言いたいのはユーザーが1人増えようが、コスト増が「無視できるほどに小さい」ということです。<br />
このように、携帯無料ゲームにおける１ユーザあたりの原価は驚くほどに安いので、無料ユーザが増えたところで原価はそれほど多くはありません。<br />
ちなみに、旧来型のゲームの場合は、カードリッジを作ったり、販売店にマージンを払ったりしなければなりませんから、無料で提供するということは出来ませんが、ソーシャルゲームの端末はいつもの携帯ですし、ゲーム自体もオンラインで提供するため、前出のようなコストを掛けなくて済むというのも大きいでしょう。</p>

<p>次に売上の観点から。<br />
携帯無料ゲームの売上は、大きく分けるとアイテムと広告の２つからもたらされますが、ほとんどはアイテムからもたらされます。<br />
ということで、上記の例で言うと６人に１人だけが売上をもたらしてくれます。<br />
それでは、６人のうち５人は邪魔なユーザなのでしょうか？<br />
いえいえそれは違います。<br />
結論から言うと、有料ユーザが楽しくプレイできるよう、無料ユーザが「無償の労働」を行なってくれているのです。<br />
ここでいう無償の労働とは「フリー」（クリス・アンダーソン著、NHK出版）によって述べられているもので、無料のものを手に入れる代償として労働力をタダで提供する行為のことです。<br />
ソーシャルゲームで言うなら、がんばって釣りをしたり、街を作ったりといった作業を通じて、ゲームの活性化のために奉仕を行っているということです</p>

<p>釣りゲームにおいても、みんなが釣れるようでは面白くありません。<br />
すぐに折れてしまう釣竿でゲームをする無料ユーザがいるからこそ、よく釣れる折れない釣竿の価値が上がり、有料ユーザとして「お金を払おう」という気を起こさせるわけです。<br />
直接の売上こそ有料会員からもたらされるものですが、有料会員が楽しくゲームが出来るのは、無料ユーザのおかげなのです。<br />
もちろん、無料ユーザも楽しんでいるわけですし、無料ユーザ同士であればフェアな戦いがされることになります。<br />
そもそも会員の多くは無料ユーザなわけですから、恐らく大部分ではフェアなゲームが行われているということです。</p>

<p>ここで、提供者と、ユーザのベネフィットを整理してみます。</p>

<p>提供者・・・有料会員は売上をもたらし、無料会員は報酬を渡さずともゲームを盛り上げてくれる<br />
有料ユーザ・・・自分が強い世界でゲームを楽しめる（特権者≒貴族？になれる）<br />
無料ユーザ・・・タダでゲームを楽しめる<br />
<img src="/archives/images/20110106-graph2.png"></p>

<p>このように、無料ユーザと有料ユーザの絶妙な関係性と、ユーザあたりのコストが非常に安いことから、多くのユーザが無料だったとしてもビジネスが成り立つわけですし、むしろ無料ユーザがいないとビジネスが成り立たないと言ってもいいのかもしれません。<br />
ちなみに、2,000万人会員がいたとして6人に1人、すなわち330万人が1,000円払ったとすると月々33億円、年間では400億円の売上が上がることになります。<br />
多くのユーザが無料とはいえ、いかに大きな売上が上がるかがおわかり頂けるでしょう。</p>

<p>ただし、このビジネスモデルを成り立たせるために必要なことが1つだけあります。<br />
それは会員数です。<br />
上記の原価の計算の際に示した数字は、あくまでも数千万人単位のユーザがいることを前提にしました。<br />
サーバについても、サポート体制についても、最低かかるコストはありますし、上記の例でいうとユーザが1人だけだったとしても60万円/月のサポートコストを負担しなければなりません。</p>

<p>また、先ほどの例では言及しなかった開発費や広告宣伝費についても、大量のユーザで割るからこそ無視できる存在になっています。<br />
よく「釣竿なんてコンピュータ上だけのもんなんやから、原価0円やろ」という声を聞きますが、これは当たってるとも言え、しかし外れているともいえます。<br />
釣竿というアイテムを投入するに当たって、ゲームバランスや顧客満足などを検討したり、それを開発したりというコストはタダではありません。例えばアイテム投入に当たって、会議や開発などで1人月60万円×0.5人月がかかったとしたら、一本の釣竿を作るのに30万円かかることになります。それを100万人に売れば1本30銭の原価ですが、100人にしか売れなければ1本3,000円の原価ということになります。<br />
このように、いかにたくさんの人に利用してもらうかが重要であり、その中から生まれる潜在的な有料ユーザをたくさん抱えることが必要となるのです。</p>

<p>ところで、私は今までゲーム機器を購入したことが無いのですが、一時期はGREEのハコニワをプレイしていた（無料ユーザとして）こともありますし、最近はコロプラに凝って（月に1,000円くらい払う）います。<br />
ハコニワは無料、コロプラは有料で楽しんでいますが、どちらも機器購入などの手間もなく、手軽に遊べるのが非常に印象的でした。<br />
ハードルを下げ、多くの人を呼びこみ、そのなかの一部でもお金を払ってくれればよいというモデルによって、提供者側としても莫大な売上を上げることが出来ますし、利用者側としても手軽にゲームが楽しめます。その、双方にメリットがあるということがソーシャルゲームの普及の源泉なのでしょう。<br />
（もちろん、パケット定額制で、使っても使わなくても電話料金が変わらない時代になったというのも大きいでしょう）</p>

<p>ただ良いことばかりでもないようです。<br />
ここ最近、携帯無料ゲーム（ソーシャルゲーム）に関する苦情が増えている旨の記事が新聞などで取り上げられはじめました。<br />
特に課金ということへの理解度が低い未成年に対する高額課金が取りざたされており、教育や、課金へのハードルの必要性も語られるようになりました。<br />
かくいう私も、昔はパソコン通信（Niftyserve）で5万円くらい使ってしまったこともありますが、ソーシャルゲームの場合は無料だと思い込んでいることもあるでしょうし、昔と違って端末が小さく親が把握しにくく、対象となる人の数が多いことも相まって、当時のパソコン通信と比べて問題は大きいといえます。<br />
（子供が「分からないふり」して課金を承諾してるんじゃないかという指摘もありますが・・・）</p>

<p>なお、「実は無料じゃなかった」問題は以前から知れた話ですが、ソーシャルゲームのプラットフォーム会社はいまやCM出稿の上位に食い込む大口ユーザであり、なかなか踏み込めない「聖域」のようです。<br />
ですので、プラットフォーム会社がCM出稿を減らしたとたん、堰を切ったように批判を始めるような気もしています。</p>

<p>私個人としてもソーシャルゲームは好きですし、ソーシャルゲーム提供者の皆さんはデータセンターの大きな需要家でもありますので、上記のようなことを克服してソーシャルゲームが健全に広がっていくことが必要だと思います。<br />
</p>]]>
        <![CDATA[<p>2011/1/7 「課金」が誤用ではないかとの指摘を受けましたので修正しました</p>]]>
    </content>
</entry>

<entry>
    <title>ウェブアプリで文字コードを簡単かつ確実に判別する方法</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2010/12/charset-detect-encode-decode.html" />
    <id>tag:tanaka.sakura.ad.jp,2010://1.1071</id>

    <published>2010-12-15T04:35:29Z</published>
    <updated>2011-02-28T05:25:54Z</updated>

    <summary>最近、某とあるサイトにて文字化けが起こるという申告が増えてきました。 理由は2つ...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="技術関連" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>最近、<a href="http://to-a.ru">某とあるサイト</a>にて文字化けが起こるという申告が増えてきました。<br />
理由は2つあって、ひとつは携帯（AU）からのアクセスが増えてきたということ、もうひとつは海外からの利用が増えてきたことです。<br />
いちおう明示的にUTF-8と指定しているのですが、ＡＵさんはShift-JISで送ってきたり、中国語のよく分からないクライアントはGB2312で送ってきたりして、文字判別は一筋縄にはいきません。<br />
今回は、文字化けを防ぐ改造に当たってやったことを書きたいと思います。</p>

<p><a href="http://www.google.co.jp/search?hl=ja&lr=lang_ja&rlz=1I7GGLL_ja&tbs=lr%3Alang_1ja&q=%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89+%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91&aq=f&aqi=g1g-c3g-m4g-cr2&aql=&oq=&gs_rfai=" target="_blank" rel="nofollow">文字化けの話はGoogleででも検索を</a></p>

<p>さて文字コードを自動判別するという技術は色々あって、よく利用されるのは特定の文字コードでしか利用されない文字を探し当て、判別するというものです。<br />
言わずと知れた漢字コード変換コマンドである nkf でも、上記の方法で非常に精度の高い自動判別を行ってくれます。<br />
ただ、これには大きな問題があります。それは「短い文字列だと判別できない」ということです。<br />
某とあるサイトでは、単語を入力してロゴを作るというウェブサービスを提供していますが、入力される文字列が短いことからうまく自動判別がうまくいきません。</p>

<p>そのため今回取った対策は、submitされるフォームデータと共に判別用文字列を送るというものです。<br />
例えば「文字」という文字列をUTF-8で送ると%E6%96%87%E5%AD%97となり、Shift-JISで送ると%95%B6%8E%9Aとなります。<br />
ですので、判別用文字列がどのような文字列になって送られてきたかを見ると、他のフォームデータの文字コードを知ることが出来るというわけです。</p>

<p>それでは実際のプログラムです。<br />
detectstrのところが、判別用文字列を埋め込んだところです。<br />
ちなみに「文字」というのを利用した理由ですが、日本語のみならず、中国語簡体字、中国語繁体字においても同じ形だからということです。例えば自動という文字の場合は、簡体字で動という文字が異なるコードになってしまいますので利用できません。<br />
なお最初は「日本」という文字を判別用文字列にしていたのですが、hiddenで日本という文字列が入っていると中国の利用者の方からいらぬ誤解を受けたり都市伝説化するのも嫌なので、途中で変えました。</p>

<p>送信側プログラム<br />
<code><br />
&lt;form action="test.php"><br />
<b>&lt;input type="hidden" name="detectstr" value="文字" /></b><br />
名前: &lt;input type="text" name="name" /><br />
&lt;input type="submit" value="送信" /><br />
&lt;/form><br />
</code></p>

<p>受信側プログラム<br />
<code><br />
&lt;?php<br />
$charsetList = array(<br />
&nbsp;&nbsp;"utf-8"&nbsp;&nbsp;=> "%E6%96%87%E5%AD%97",<br />
&nbsp;&nbsp;"sjis"&nbsp;&nbsp;&nbsp;=> "%95%B6%8E%9A",<br />
&nbsp;&nbsp;"euc-jp"&nbsp;=> "%CA%B8%BB%FA",<br />
&nbsp;&nbsp;"jis"&nbsp;&nbsp;&nbsp;&nbsp;=> "%1B%24BJ8%3Bz%1B%28B",<br />
&nbsp;&nbsp;"Big-5"&nbsp;&nbsp;=> "%A4%E5%A6r",<br />
&nbsp;&nbsp;"HZ"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> "%7E%7BNDWV%7E%7D",<br />
&nbsp;&nbsp;"EUC-KR"&nbsp;=> "%D9%FE%ED%AE",<br />
&nbsp;&nbsp;"GB2312"&nbsp;=> "%CE%C4%D7%D6",<br />
);<br />
$charset = NULL;<br />
foreach( $charsetList as $key => $val ){<br />
&nbsp;&nbsp;if( @$_GET["detectstr"] == $val ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;$charset = $key;<br />
&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;}<br />
}<br />
if( !$charset ) die("Couldn't detect a character set");<br />
$name = mb_convert_encoding( @$_GET["name"], "UTF-8", $charset );</p>

<p>print htmlspecialchars($name);<br />
</code><br />
<form action="http://tanaka.sakura.ad.jp/moji.php"><br />
なお、「文字」以外を判別用文字列に利用したい方の為に、コードジェネレータを作りました。<br />
<input type="hidden" name="detectstr" value="文字" /><br />
<input type="text" name="moji" value="日本" /><input type="submit" value="送信" /><br />
</form></p>

<p>以上、いかがでしたでしょうか。<br />
少々セコいですが、簡単かつ確実に行える対策です。<br />
ただ、フォームの送信元と送信先の両方のプログラムに手を入れることになりますので、それが出来ない環境では別の方法をとる必要がありますのでご注意を。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ddコマンド実行途中に、何バイトコピーできたかを見る方法</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2010/12/dd.html" />
    <id>tag:tanaka.sakura.ad.jp,2010://1.1069</id>

    <published>2010-12-08T23:17:37Z</published>
    <updated>2011-02-28T05:24:41Z</updated>

    <summary>知り合いと話していた際に、「ddコマンドでディスクをコピーしているとき、scpの...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="技術関連" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>知り合いと話していた際に、「ddコマンドでディスクをコピーしているとき、scpのようにプログレスバーが表示できたらいいのに」という話を聞きました。<br />
意外と知られていないのですが、USR1シグナルを送ることで途中経過を表示させることが可能です。</p>

<p>[root@wwwxxxxu ~]# <b>dd if=/dev/zero of=/dev/null &</b><br />
[1] 31092<br />
[root@wwwxxxxu ~]# <b>kill -USR1 31092</b><br />
7764899+0 records in<br />
7764898+0 records out<br />
3975627776 bytes (4.0 GB) copied, 6.02001 seconds, 660 MB/s<br />
[root@wwwxxxxu ~]# <b>kill -USR1 31092</b><br />
25123042+0 records in<br />
25123041+0 records out<br />
12862996992 bytes (13 GB) copied, 17.8137 seconds, 722 MB/s<br />
[root@wwwxxxxu ~]# <b>kill -USR1 31092</b><br />
43986419+0 records in<br />
43986418+0 records out<br />
22521046016 bytes (23 GB) copied, 31.3739 seconds, 718 MB/s<br />
[root@wwwxxxxu ~]# <b>kill 31092</b><br />
[1]+  Terminated              dd if=/dev/zero of=/dev/null<br />
[root@wwwxxxxu ~]#</p>

<p>ddを利用する際は大きなファイルのことが多いので、途中で経過が見えるだけでもストレスが減るのではないでしょうか。<br />
ちなみに私は、上記の出力を元にプログレスバーを表示するスクリプトを作りました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>なぜもめる？日本におけるドメイン登録独占の影響</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2010/11/domain.html" />
    <id>tag:tanaka.sakura.ad.jp,2010://1.1067</id>

    <published>2010-11-04T07:11:05Z</published>
    <updated>2011-02-28T05:23:39Z</updated>

    <summary>先日、GMOの熊谷社長が自身のブログ上において、JPRSさんがレジストラ業務を開...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="会社と仕事" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<p>先日、GMOの熊谷社長が自身のブログ上において、JPRSさんがレジストラ業務を開始することについての公開質問を掲載されました。</p>

<p><a href="http://www.kumagai.com/?eid=718" rel="nofollow">株式会社日本レジストリサービス（JPRS）さんへの公開質問です</a></p>

<p>内容を今北産業でいうと、</p>

<p>独占的にJPドメインを扱っているJPRSさんが、<br />
誰でも参入できるgTLDドメインの扱いをはじめる表明をしたため、<br />
同じくgTLDを扱っており競合になるGMOさんが「フェアでない」という声を上げた。</p>

<p>ということです。</p>

<p>私も「フェアでない」と思っていますし、JPRSユーザ会という場においても「JPRSさんがgTLDドメインの取扱いをやらないほうがいい理由」を話しました。<br />
しかし、多くの中小事業者はJPRSさんにgTLDドメインを取り扱ってもらいたいという考えでしたし、そもそも今回のろしを上げたGMOさんはその場に出席すらしていませんでした。</p>

<p>そういった経緯もあり、今回の件についてこれ以上の指摘は無意味だろうということで、特に関わるつもりもありませんでしたが、さまざまな方から私へのさぐりが多く、考えを聞かせてくれというメールも多いので、自分の考えについて経緯を踏まえながら書かせて頂くことにしました。<br />
長文ですが、お時間があればお付き合いください。</p>

<p><br />
<h3>はじめに</h3></p>

<p>まずはじめに、レジストリとレジストラについて解説をします。</p>

<p>ドメイン名の登録というのは、複数の人に重複して登録されないよう一意性が重要になります。<br />
そのため、トップレベルドメイン（TLD）ごとにデータベースは必ず１つである必要があり、単独の一社で管理されています。このデータベースを管理する事業者のことをレジストリを言います。<br />
そして、レジストリのデータベースを利用して、実際にドメインの登録を行う事業者のことをレジストラと言い、TLDごとにたくさんの事業者が存在します。<br />
さくらインターネットはレジストラではありませんが、GMOさんをはじめ、ライブドアさんやファーストサーバさんなど、国内にも多くのレジストラが存在します。<br />
レジストリとレジストラを分けるのは非常に煩雑ですが、その煩雑さを乗り越えてでも参入の平等や競争環境の創出を目指して、先人たちが大変な苦労を乗り越えて分離モデルを作り上げました。</p>

<p>しかし、分離モデルは.com / .net / .info のようなグローバルなTLD（gTLD）において行われているのが大半で、国別ドメイン（ccTLD）においてはレジストリとレジストラが分離されていないことも多く、日本のドメインである.jpにおいては指定事業者というレジストラに順ずる事業者はあるもののJPRSというレジストリ事業者の権限が非常に大きいのが現状です。</p>

<p>そのような環境下に置いて、独占状態による競争の無さからドメインが高額であるとの指摘が多く、事あるごとに議論が続いてきました。<br />
また、JPRSさんにおいては、レジストリを独占的に行いながら、ユーザへ直販するJPDirectというレジストラ機能も行っており、gTLDのようなレジストリ・レジストラ分離は行われていません。おまけにJPRSさんが、.comや.netといったgTLDのレジストラも開始するということになり、大きな問題に発展しています。</p>

<p>今回は、.jpが独占的であるということと、ドメインが高額であるということに加え、他ドメインのレジストラを行うことに対する問題点を書きたいと思います。</p>

<p><br />
<h3>独占的であるということについて</h3></p>

<p>.jpにはレジストリは１社しかありません。前述の通りJPRSさんが行っています。<br />
その上、thick registryと呼ばれる、whoisや個人情報の管理までレジストリが行う「大きなレジストリ」形態をとっているため、さくらインターネットやGMOさんのような事業者はJPRSさんに取次ぎしているだけで、ドメインの管理を行ったり、価格をコントロールしたりする権限は極めて少ない状況です。<br />
このような環境下に置いて、コスト体質であるとか、経営の決定プロセスが開かれていないとか、莫大な利益を上げ特定の株主が配当を受け取っているとか、多くの指摘がなされています。</p>

<p>ただ、国別TLD（ccTLD）において特定の団体の力が強い状況は日本以外でもありますし、結論から先に言うと「特定の人に利益が生まれるような状態で無く、信頼性の高い運営が行われているのであれば、独占状態も消極的に受け入れても良い」と考えています。<br />
JPRSさんの役員には天下りなど、いわゆる給与泥棒に当たるような役員はいないはずですし、経営陣は健全見えます。<br />
コストが高いという点についても、世界的に見て大変信頼性の高いDNSシステムを構築していますし、ドメインに関する研究開発に資金を拠出しているのも事実です。</p>

<p>特定の会社名は出せませんが、「自分がやれば.jpはもっと安く出来る」と仰っているとある会社においては、数度にわたりドメインの根幹であるDNSシステムに障害を発生させ、数日にわたってダウンさせるという事態に至っています。<br />
その際には同じネットワーク（LAN）かつ近傍（同じ？）のラックにプライマリ・セカンダリのネームサーバを設置していたということが露呈して、たいへん問題になりました。</p>

<p>DNSが止まると、いくらネットワークやサーバが頑丈でもインターネットは利用できないに等しい状態になります。事実、他国のドメインにおいて何度か止まってしまって苦い経験をしたこともあります。<br />
それだけ重要なインフラなわけですから、JPRSさんの運用体制については大変信頼しています。</p>

<p>ただ、配当に関してはやめたほうが良いのではないかと思っています。<br />
かくいう当社もJPRSさんの株主であり、毎年少なくない配当を受け取っています。<br />
しかし当社は配当をもらうために資金を拠出したのではなく、信頼性の高いjpドメイン運営を続けるための安定株主として拠出したわけですし、かつJPRSさんがおかしなことになってしまったときにモノを言う権利を留保するために拠出したわけです。<br />
JPRSさんの株主では大手事業者のほかに、現経営陣も大株主になっておられます。<br />
現経営陣が自分のために配当しているわけでないのは良く知っていますが、経営者はストイックなまでの清廉潔白さが必要だと私は考えています。<br />
なので、少しでもうがった見方をされるような経営判断は、積極的に回避すべき考えます。</p>

<p>また、経営陣についても定期的に見直すくらいの気概は必要かと思います。<br />
少しだけJPRSさんの擁護をするなら、JPRS設立当初は事業性も非常に不安定で、世間で言われるほど確実性の高い事業計画でもなく、その当時に役員になり、身銭を切って出資した人たちは賞賛されるべきであると思います。<br />
ただ、公益性の高い独占企業の経営者は極めて透明性の高い行動をするべきだと思いますし、勝手な言い分であることは承知の上で改善をお願いしたいところであります。</p>

<h3>高額であるということについて</h3>

<p>次に高額であるということに対する話ですが、私はjpドメイン名が絶対的に高いとは思っていません。<br />
以前は値下げ論者でしたが、「相対的に高い」「絶対的に高い」という尺度において、後者だけで物事を見ても意味が無いと思います。<br />
jpドメインが相対的に高いのは、jpドメインの数が相対的に少ないからだけです。</p>

<p>先日、.jpが世界でもっとも安全との調査がありました。<br />
コレにはJPRSさんの努力はあるでしょうけれど、実際には.jpがそれなりに高いのと、日本国内のユーザに限定していることが影響しており、少し高いけど信頼性の高い.jpドメインという方向性は成功しているように見えます。</p>

<p>「.jp」は世界で最も安全なccTLD、McAfeeの調査で2年連続 <br />
http://internet.watch.impress.co.jp/docs/news/20101028_403080.html</p>

<p>またJPRSさんでは、「大きなレジストリ」体制を活用し、インターネット全体に影響を与えてしまうような失敗設定に対して積極的に修正依頼を行ったり、DNSSECなどの新技術に対して積極的に取り組んだりと、世界的に見ても熱心で手厚い登録事業者であることは間違いありません。</p>

<p>企業にとって、汎用JPの卸価格である年間2,250円は本当に微かなコストだと思います。<br />
安いドメインが必要ならgTLDをとればいいだけですし、.jp以外の選択肢があるわけですから、相対的な値段にこだわっても意味がありません。<br />
さくらインターネットのレンタルサーバにおいては、jpドメインの倍以上のgTLDが管理されていますし、私自身も.jpドメインはgTLDより高いので、信頼性の必要なドメインでしか.jpは利用していません。</p>

<p>要は選択の問題です。<br />
「信頼性はそこそこほしいが、手厚い管理体制はいらないし、やっぱり安いほうがいい」ということなのか、「少々高くても、しっかりとした管理体制があり、信頼性は高いほうがいい」ということなのか、どちらかです。<br />
ドメインには、少々止まっても安ければよいという個人ユーザから、100万円払っても良いから止めてもらったら困るという大手サイト管理者まで居ます。<br />
私の個人ドメインと、mixi.jpだと価値の差は歴然ですが、ドメインにはこの２者が入り乱れているのが難しいところで、単純に安ければよいという議論ではないと思います。<br />
もちろん配当減らしてドメイン値下げせよというのは理解できます（ただ配当やめても1割も下がりません）が、そもそもドメイン数がgTLD並に存在しない限り大幅な値下げは難しいと言わざるを得ません。</p>

<p>余談ですが、大幅な値下げが行われた際に懸念していることがあります。<br />
それは、解約ドメインなどに対する広告掲載です。<br />
gTLDの場合、ドメインを解約するとほぼ間違いなく広告業者に食い物にされます。<br />
多くのウェブサイトでは、更新をやめても1日に100件程度はアクセスがあるそうなので、1ヶ月で3,000件となり、0.1%がクリックされたとして年間36クリックとなります。1クリックが50円だとすれば、これだけで1800円の収入となります。<br />
ただ、.jpドメインだとドメイン自体が高いので、上記のようなビジネスモデルが成り立ちません。<br />
ドメインが安くなってほしいという考え方の裏には、解約ドメインなどに対する広告によるビジネスを成り立たせたいという勢力も少なからず居るのを知ってもらえればと思います。<br />
さくらインターネットではやましい商売をしたくないので上記のような行為はしていませんが、試算では年間数千万円近い利益が出るということが分かっており、収益性の高いビジネスであるのは事実です。</p>

<p><br />
<h3>JPRSさんがレジストラをやる件について</h3></p>

<p>これは、どちらかというとGMOさんの意見に賛同するところで、結論から言うとJPRSさんはレジストラをやるべきではないと考えています。<br />
実際、JPRSユーザ会という場において、「ドメイン名の管理を行う"レジストリ"と、ドメインの登録販売を行う"レジストラ"は別々に運用するのが世界の潮流であり、便利だからといってJPRSがやっていい問題ではない。」という話をしました。<br />
むしろ、JPRSこそレジストリ・レジストラ分離の議論の対象なわけですから。</p>

<p>しかしながら、ドメインの扱いの少ない事業者からは、「大手事業者と違って我々は海外のレジストラと代理店契約をするのは面倒だし、ドル建支払いも手間。ぜひ国内事業者であるJPRSさんにやってもらえば便利」という話が出ました。</p>

<p>なので私は「国内でも、GMOさんや、ファーストサーバさん、ライブドアさんなど、多くのレジストラがあり、そこと代理店契約すればいいのでは？」と言いました。</p>

<p>それに対して「なぜ当社がGMOさん、ファーストサーバさん、ライブドアさんからドメインを買わなければならないんだ！」という返答です。</p>

<p>私は「なら、なぜ当社がJPRSさんからJPドメインを買わなければならないんだ！」と言いそうになりましたが、グッとこらえて意見するのをやめました。</p>

<p>私自身は現在の独占状態は良い事ではないと思いつつも、その体制によって信頼性の高いJPドメインが維持されている状況は迎合しても良いと考えています。</p>

<p>ただ以下の図のように、レジストリとレジストラが兼業していても単独のドメインに専念するか、完全に分離を行い複数のレジストリとレジストラが契約を結ぶのが通常ですので、今回のレジストリとレジストラを兼業しつつ別のドメインも取り扱うJPRSさんのモデルは大変いびつに見えますし、世界的に見てもほとんど例がありません。</p>

<p><img alt="20101103-registry.png" src="http://tanaka.sakura.ad.jp/archives/20101103-registry.png" width="449" height="254" /></p>

<p>JPドメインは、8割の登録が2割程度の事業者によって行われています。<br />
さくらインターネットやGMOさんをはじめとした、たくさんのドメインを取次ぎしている事業者によって８割のドメインが登録されていますが、社数で言うと２割でしかなく、意見を言う上ではマイノリティです。</p>

<p><a href="http://jpshop.jp/list/gjp_list/gjp_pl3_01.html">事業者のJPドメイン取次ぎランキング</a></p>

<p>マジョリティである小口の取次ぎ事業者の方々は、自分たちの業務が楽になるからとJPRSさんにgTLDのレジストラをやることを要求していて、それは理解できる部分も多いのですが、「なぜ、レジストリ・レジストラという２つの存在があるのか？」という、理念的なことは共有しておいたほうが良いと思っています。</p>

<p>繰り返しになりますが、私は.jpの独占状態は消極的に受け入れて良いと思っています。<br />
しかし、gTLDのレジストラを兼務するのであれば、.jpのレジストリとレジストラの分離問題に対して根本的な議論を再開すべきだと考えています。</p>

<p>だらだらと書きましたが、私の意見をまとめると<br />
「JPRSの独占状態や多少の高額は、信頼性の裏返しとして受け入れるが、それ以外のドメインにうつつを抜かすな」<br />
ということです。</p>

<p>GMOさんとは根本的な考え方も、理由も全く異なりますが、それでもJPRSさんがgTLDのレジストラをやらない方が良いというのは同じ意見ではあります。<br />
JPRSさんには再考頂くことをお願いしたいところです。</p>

<p>※ちなみに、内容に対してJPRSの東田社長からもコメントが出ているようです。(2010/11/5 20:50 更新)<br />
<a href="http://xn--lwtq3rclc06q.jp" rel="nofollow">熊谷会長のブログへのコメント</a></p>

<p>※レジストリとレジストラの位置づけが混同しているのではとの指摘があり、表記を全面的に見直しました(2010/11/5 23:50 更新)</p>]]>
        
    </content>
</entry>

<entry>
    <title>CentOSをサーバーとして活用するための基本的な設定</title>
    <link rel="alternate" type="text/html" href="http://tanaka.sakura.ad.jp/2010/09/centos.html" />
    <id>tag:tanaka.sakura.ad.jp,2010://1.1065</id>

    <published>2010-09-10T08:34:00Z</published>
    <updated>2011-05-15T03:36:50Z</updated>

    <summary> 格安VPSについては、専用カテゴリを用意しています。 ウェブ開発者のための、1...</summary>
    <author>
        <name></name>
        
    </author>
    
        <category term="技術関連" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tanaka.sakura.ad.jp/">
        <![CDATA[<div style="background-color: #eeffee; border: 1px dotted #000000; padding: 10px; margin-left: 10px">

<p><a href="http://tanaka.sakura.ad.jp/netservice/vps/" target="_blank">格安VPSについては、専用カテゴリを用意しています。</a><br />
<a href="http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html" target="_blank">ウェブ開発者のための、1時間でできるLAMP環境構築術（CentOS編）</a>も、以下の設定を行った後に併せてご覧ください。</div></p>

<p>自宅やホスティングなどにおいてCentOSなどのLinuxを利用する人が増えてきました。<br />
最近では格安VPSも増え、<a href="http://vps.sakura.ad.jp">さくらインターネットのVPS</a>など、個人で利用できる安価でパフォーマンスの高いLinux環境が簡単に手に入るようになりました。<br />
このようにサーバを活用する人が増えることは喜ばしい事ですが、いつの間にか乗っ取られていたり、大量のアクセスが来てダウンしてしまったり、自宅のパソコンとの違いに驚く人も多いようです。</p>

<p>今回は、CentOSをサーバとして利用する際に、最初にやっておきたい基本的な設定について解説をします。</p>

<div style="background-color: #ffeeee; border: 1px solid #000000; padding: 10px; margin-left: 10px">本解説は特にさくらのVPSに限ったものではなく、CentOS全般を対象にしています。<br />
さくらのVPSのデフォルトでは、多くのデーモンを停止済みにしているほか、selinuxもdisabledとなっています。</div>

<p>それではみていきましょう。</p>

<ol>

<p><li>まず最初にsshのポート番号を変更します。</li></p>

<p>ポート番号の変更は必ずしないといけない訳ではないですが、簡単にできる攻撃対策です。<br />
インターネットでは、全世界の22番ポートをくまなく調べ、セキュリティホールのあるサーバが無いかチェックしているロボットがいます。<br />
もちろん、どうしてもあなたのサーバを落としたい！というロボットがいたら別ですが、普通のロボットは無差別なIPアドレスへポート22固定で攻撃をしてきますから、22番ポート以外に変更することは非常に効果があります。</p>

<p>/etc/ssh/sshd_config</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>#Port 22<br />
Port 10022<br />
</div></p>

<p>今回は10022番ポートに変更しました。<br />
再起動されれば変更が反映されます。</p>

<p><li>次に公開鍵認証でssh接続するように変更します</li></p>

<p>sshでは公開鍵を利用してパスワードを使わずに接続することが可能です。<br />
具体的にはクライアントでキーペア（秘密鍵と公開鍵）を生成し、サーバには公開鍵だけを登録することで達成できます。<br />
キーペアの生成方法はクライアントによって異なりますが、teratermの場合でしたら「設定」→「SSH鍵生成」で生成できます。<br />
もしクライアントがLinuxやFreeBSDなどでOpenSSHを利用しているのであれば、以下のようにして生成を行います。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p># ssh-keygen<br />
Generating public/private rsa key pair.<br />
Enter file in which to save the key (/root/.ssh/id_rsa):<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /root/.ssh/id_rsa.<br />
Your public key has been saved in /root/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
・・・・<br />
</div></p>

<p>次に生成された公開鍵をサーバにセットします。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p># cat >> ~/.ssh/authorized_keys<br />
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArg5hePwQQPJKWvlNFGi4TArKI2kB<br />
e4pZNGY/KeEYp3JkmRbcFgThliRmaCVUauCYvSddenbuwF5jytP8py5JtYNaUOnEO<br />
J4JU5298dA1Ul2rrft9B+GcEN1tYL4iJStMi4gkK1234567890/3rD+0bfEv5M6PwgRhy6<br />
gE3LrYw+hpigyi7EChcgtv0e205fDUFcenArrjgGxz9Vw5edz7pHA9dSHLveLanrxNu0p<br />
Ry5KYH49IdSp141TcQXm1xL/l/3erH+pnoG4taDjH3LIdC8BglZzVPbuO5jySW62ciRw<br />
QFguH7hzp/Uily3pbsmy0EtAjIcrZ5SCUe7rXLHlfQ== tanaka@tanaka-PC<br />
^D<br />
#</div></p>

<p>これで公開鍵を利用したログインが可能になります。</p>

<p>ただ、ここで安心してはいけません。<br />
今の状態は、公開鍵"でも"ログインできる状態なだけで、公開鍵"でしか"ログインできないわけではありません。<br />
これを変更するには、再度sshの設定を変更します。</p>

<p>/etc/ssh/sshd_config</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>PermitRootLogin without-password<br />
</div></p>

<p>このあとでsshdを再起動すれば、rootログインは公開鍵認証でのみ行えるようになります。</p>

<p>なお、root以外のユーザにおいても公開鍵のみのログインにしたい場合には、以下のような設定を行います。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>PasswordAuthentication no<br />
</div></p>

<p>これで、SSHログインは全てのユーザにおいてパスワード認証が無効化されました。</p>

<p><li>次にiptablesを設定します。</li></p>

<p>基本は、sshとhttp以外は通さないようにするのが吉ですし、sshについては自宅や会社、レンタルサーバなどのIPアドレスからのみ接続できるように設定したほうが良いでしょう。<br />
以下の例では、httpのみどこからでも接続できるように設定し、sshは210.224.160.0/19からのみ、それ以外のポートは閉じる設定です。</p>

<p>/etc/sysconfig/iptables</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>*filter<br />
:INPUT ACCEPT [0:0]<br />
:FORWARD ACCEPT [0:0]<br />
:OUTPUT ACCEPT [0:0]<br />
:RH-Firewall-1-INPUT - [0:0]<br />
-A INPUT -j RH-Firewall-1-INPUT<br />
-A FORWARD -j RH-Firewall-1-INPUT<br />
-A RH-Firewall-1-INPUT -i lo -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br />
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -s 210.224.160.0.0/19 -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT<br />
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited<br />
COMMIT<br />
</div></p>

<p><li>次に不要なデーモンをストップします</li></p>

<p>ここからはパフォーマンスの設定です。<br />
CentOSデフォルトでは、びっくりするくらいのサービスが動いています。これらのほとんどはサーバに必要ないものですので、ざっくりoffにしましょう。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>chkconfig auditd off<br />
chkconfig autofs off<br />
chkconfig avahi-daemon off<br />
chkconfig bluetooth off<br />
chkconfig cups off<br />
chkconfig firstboot off<br />
chkconfig gpm off<br />
chkconfig haldaemon off<br />
chkconfig hidd off<br />
chkconfig isdn off<br />
chkconfig kudzu off<br />
chkconfig lvm2-monitor off<br />
chkconfig mcstrans off<br />
chkconfig mdmonitor off<br />
chkconfig messagebus off<br />
chkconfig netfs off<br />
chkconfig nfslock off<br />
chkconfig pcscd off<br />
chkconfig portmap off<br />
chkconfig rawdevices off<br />
chkconfig restorecond off<br />
chkconfig rpcgssd off<br />
chkconfig rpcidmapd off<br />
chkconfig smartd off<br />
chkconfig xfs off<br />
chkconfig yum-updatesd off<br />
</div></p>

<p><li>要らないコンソールを無効にします</li></p>

<p>/etc/inittabを以下のようにコメントアウトしましょう。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>#2:2345:respawn:/sbin/mingetty tty2<br />
#3:2345:respawn:/sbin/mingetty tty3<br />
#4:2345:respawn:/sbin/mingetty tty4<br />
#5:2345:respawn:/sbin/mingetty tty5<br />
#6:2345:respawn:/sbin/mingetty tty6<br />
</div></p>

<p><li>selinuxを無効にします</li></p>

<p>selinuxについても、一般的なウェブサーバでは不要でしょうから、offにします。<br />
/etc/sysconfig/selinuxのSELINUX=enforceを以下のように書き換えれば完了です。</p>

<div style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px">

<p>SELINUX=disabled<br />
</div></p>

<p>selinuxがoffにすることで、幾分パフォーマンスが向上するそうです。</p>

</ol>

<p>これで設定は完了です。<br />
再起動を行うことで、全ての設定変更が反映されます。<br />
sshdのポートが変わっていますから、あせらず新しいポートへ接続してみてください。</p>

<p>さて今回、後半に解説したパフォーマンス改善は意外と見落としがちのことです。<br />
今回は512MB搭載した64ビットの仮想環境（VPSでは無い）で実験しましたが、起動時間、空きメモリ共に大きな改善が見られました。<br />
起動時間はチューンナップ前が61秒だったのに対し、チューンナップ後は41秒と3割以上も短縮されました。<br />
メモリの使用量についても、チューンナップ前が219MBだったのが144MBにやはり3割以上も削減されました。</p>

<p>変更前のfree結果<br />
<pre style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px; font-size: 12px">[root@localhost ~]# free<br />
             total       used       free     shared    buffers     cached<br />
Mem:        510008     219440     290568          0      12284     126340<br />
-/+ buffers/cache:      80816     429192<br />
Swap:      1048568          0    1048568<br />
</pre></p>

<p>変更後のfree結果<br />
<pre style="background-color: #eeeeff; border: 1px solid #000000; margin-left: 10px; font-size: 12px">[root@localhost ~]# free<br />
             total       used       free     shared    buffers     cached<br />
Mem:        510008     144544     365464          0      10220     109736<br />
-/+ buffers/cache:      24588     485420<br />
Swap:      1048568          0    1048568<br />
</pre></p>

<p><br />
最近では自宅サーバの搭載メモリも増えましたし、さくらのVPSやSaaSesなどスワップが利用できるVPSも増えてきましたので、以前ほどはメモリ不足に悩まされる機会も減りました。<br />
しかし、古いマシンを活用する場合や、OpenVZ系VPSのServersman@VPSなどスワップが利用できないサービスの場合には、メモリ不足に悩まされる方も多いと聞きます。<br />
このようなときに、上記のようなチューンナップを行うことによって、エラーに悩まされることなく利用できるようになるでしょう。</p>

<p>なお、CentOSの場合にはインストール時にDesktopとかServerとか選択せず、X-Window Systemも入れるべきではありません。<br />
また、64bitのOSは高速ですがメモリを多く消費するので、メモリの少ない環境（2GB以下）の場合には32bit版の活用も検討すると良いと思います。</p>

<p>最後になりますが、改めてパフォーマンスと併せてセキュリティに関心を持ってもらえればと思います。<br />
以前友達のパソコンにLinuxをインストールしていた時のこと、アップデートをしている間に裏でクラックされていたなんて笑えない話もありました。<br />
最近のパッケージはそれなりに初期状態からしっかりしていますが、周りの人に迷惑をかけないためにも、きっちりとサーバ管理を行われることをお願いします。</p>]]>
        <![CDATA[<p>CentOSで標準で稼働しているサービス一覧</p>

<table border="1" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<th width="100" align="left">コマンド名</th>
<td width="50">標準</td>
<td width="50">設定後</td>
<td width="450">解説</td>
</tr>
<tr>
<th align="left">NetworkManager</th>
<td align="center">×</td>
<td align="center">-</td>
<td>ネットワークの自動設定を行う</td>
</tr>
<tr>
<th align="left">acpid</th>
<td align="center">○</td>
<td align="center">○</td>
<td>電源管理（offにすると電源ボタンでシャットダウンできなくなる）</td>
</tr>
<tr>
<th align="left">anacron</th>
<td align="center">○</td>
<td align="center">○</td>
<td>cronの補助的な役割を持つ</td>
</tr>
<tr>
<th align="left">atd</th>
<td align="center">○</td>
<td align="center">○</td>
<td>atコマンドで登録されたタスクを管理する</td>
</tr>
<tr>
<th align="left">auditd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>システム監査結果のログ保存などを行う</td>
</tr>
<tr>
<th align="left">autofs</th>
<td align="center">○</td>
<td align="center">×</td>
<td>ファイルシステムの自動マウントを行う</td>
</tr>
<tr>
<th align="left">avahi-daemon</th>
<td align="center">○</td>
<td align="center">×</td>
<td>LAN内でのネットワーク自動構成を行う</td>
</tr>
<tr>
<th align="left">avahi-dnsconfd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>同上</td>
</tr>
<tr>
<th align="left">bluetooth</th>
<td align="center">○</td>
<td align="center">×</td>
<td>bluetoothに対応させる</td>
</tr>
<tr>
<th align="left">capi</th>
<td align="center">×</td>
<td align="center">-</td>
<td><br /></td>
</tr>
<tr>
<th align="left">conman</th>
<td align="center">×</td>
<td align="center">-</td>
<td>複数コンソールを管理する</td>
</tr>
<tr>
<th align="left">cpuspeed</th>
<td align="center">○</td>
<td align="center">○</td>
<td>省電力の為のCPU速度管理を行う</td>
</tr>
<tr>
<th align="left">crond</th>
<td align="center">○</td>
<td align="center">○</td>
<td>cron</td>
</tr>
<tr>
<th align="left">cups</th>
<td align="center">○</td>
<td align="center">×</td>
<td>印刷の管理を行う</td>
</tr>
<tr>
<th align="left">dnsmasq</th>
<td align="center">×</td>
<td align="center">-</td>
<td>DNSキャッシュサーバ</td>
</tr>
<tr>
<th align="left">dund</th>
<td align="center">×</td>
<td align="center">-</td>
<td>bluetoothを使ってダイアルアップを行う</td>
</tr>
<tr>
<th align="left">firstboot</th>
<td align="center">○</td>
<td align="center">×</td>
<td>インストール直後に呼び出される（その後は/etc/sysconfig/firstbootを作成し、意味のないサービスになる）</td>
</tr>
<tr>
<th align="left">gpm</th>
<td align="center">○</td>
<td align="center">×</td>
<td>コンソールマウス機能</td>
</tr>
<tr>
<th align="left">haldaemon</th>
<td align="center">○</td>
<td align="center">×</td>
<td>D-BUSサポートを行う</td>
</tr>
<tr>
<th align="left">hidd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>bluetoothのキーボードやマウスを対応させる</td>
</tr>
<tr>
<th align="left">httpd</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">ip6tables</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">iptables</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">irda</th>
<td align="center">×</td>
<td align="center">-</td>
<td>赤外線通信</td>
</tr>
<tr>
<th align="left">irqbalance</th>
<td align="center">○</td>
<td align="center">○</td>
<td>マルチCPU時の割り込み管理を行う（シングルCPUの場合は不要）</td>
</tr>
<tr>
<th align="left">isdn</th>
<td align="center">○</td>
<td align="center">×</td>
<td>ISDN用のサービス。ただし海外向け</td>
</tr>
<tr>
<th align="left">kudzu</th>
<td align="center">○</td>
<td align="center">×</td>
<td>ハードウェアの構成変更を検知する</td>
</tr>
<tr>
<th align="left">lvm2-monitor</th>
<td align="center">○</td>
<td align="center">×</td>
<td>LVMの障害監視を行う</td>
</tr>
<tr>
<th align="left">mcstrans</th>
<td align="center">○</td>
<td align="center">×</td>
<td>SELinuxの運用サポート</td>
</tr>
<tr>
<th align="left">mdmonitor</th>
<td align="center">○</td>
<td align="center">×</td>
<td>mdデバイスの監視を行う</td>
</tr>
<tr>
<th align="left">mdmpd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>mdデバイスを複数インターフェースで利用する際の管理を行う</td>
</tr>
<tr>
<th align="left">messagebus</th>
<td align="center">○</td>
<td align="center">×</td>
<td>D-BUSサポートを行う</td>
</tr>
<tr>
<th align="left">microcode_ctl</th>
<td align="center">○</td>
<td align="center">○</td>
<td>インテル系CPUのマイクロコードの更新を行う</td>
</tr>
<tr>
<th align="left">multipathd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>DeviceMapperの管理を行う</td>
</tr>
<tr>
<th align="left">netconsole</th>
<td align="center">×</td>
<td align="center">-</td>
<td>カーネルエラー発生時に、その内容を他のホストへ送信する</td>
</tr>
<tr>
<th align="left">netfs</th>
<td align="center">○</td>
<td align="center">×</td>
<td>NFSクライアント</td>
</tr>
<tr>
<th align="left">netplugd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>DHCPの補助</td>
</tr>
<tr>
<th align="left">network</th>
<td align="center">○</td>
<td align="center">○</td>
<td>ネットワーク。必ず有効にする</td>
</tr>
<tr>
<th align="left">nfs</th>
<td align="center">×</td>
<td align="center">-</td>
<td>NFSサーバ</td>
</tr>
<tr>
<th align="left">nfslock</th>
<td align="center">○</td>
<td align="center">×</td>
<td>NFSロック</td>
</tr>
<tr>
<th align="left">nscd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>DNSキャッシュサーバ</td>
</tr>
<tr>
<th align="left">oddjobd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>D-BUSサポートを行う</td>
</tr>
<tr>
<th align="left">pand</th>
<td align="center">×</td>
<td align="center">-</td>
<td>bluetoothのネットワーク対応を行う</td>
</tr>
<tr>
<th align="left">pcscd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>スマートカードの管理</td>
</tr>
<tr>
<th align="left">portmap</th>
<td align="center">○</td>
<td align="center">×</td>
<td>RPCのポートマッパー</td>
</tr>
<tr>
<th align="left">psacct</th>
<td align="center">×</td>
<td align="center">-</td>
<td>アカウンティングを行う</td>
</tr>
<tr>
<th align="left">rawdevices</th>
<td align="center">○</td>
<td align="center">×</td>
<td>ハードディスクをブロックデバイスとして利用する際の補助</td>
</tr>
<tr>
<th align="left">rdisc</th>
<td align="center">×</td>
<td align="center">-</td>
<td>経路監視</td>
</tr>
<tr>
<th align="left">readahead_early</th>
<td align="center">○</td>
<td align="center">○</td>
<td>起動を速くする</td>
</tr>
<tr>
<th align="left">readahead_later</th>
<td align="center">×</td>
<td align="center">-</td>
<td><br /></td>
</tr>
<tr>
<th align="left">restorecond</th>
<td align="center">○</td>
<td align="center">×</td>
<td>SELinuxの運用サポート</td>
</tr>
<tr>
<th align="left">rpcgssd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>RPCサポート</td>
</tr>
<tr>
<th align="left">rpcidmapd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>RPCサポート</td>
</tr>
<tr>
<th align="left">rpcsvcgssd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>RPCサポート</td>
</tr>
<tr>
<th align="left">saslauthd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>SASL認証のサポート</td>
</tr>
<tr>
<th align="left">sendmail</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">smartd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>S.M.A.R.Tのサポート</td>
</tr>
<tr>
<th align="left">sshd</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">syslog</th>
<td align="center">○</td>
<td align="center">○</td>
<td><br /></td>
</tr>
<tr>
<th align="left">tcsd</th>
<td align="center">×</td>
<td align="center">-</td>
<td>TCGのサポート</td>
</tr>
<tr>
<th align="left">wpa_supplicant</th>
<td align="center">×</td>
<td align="center">-</td>
<td>無線LANにおけるWPAをサポート</td>
</tr>
<tr>
<th align="left">xfs</th>
<td align="center">○</td>
<td align="center">×</td>
<td>X-Window System用のフォントサーバ</td>
</tr>
<tr>
<th align="left">ypbind</th>
<td align="center">×</td>
<td align="center">-</td>
<td>NISクライアント</td>
</tr>
<tr>
<th align="left">yum-updatesd</th>
<td align="center">○</td>
<td align="center">×</td>
<td>CentOSの自動アップデートを行う</td>
</tr>
</tbody></table>

<p><br />
2010/9/10追記<br />
twitter:@tetsuro_n さんからの指摘もあり、ssh公開鍵認証の説明を追加しました。</p>

<p>2011/4/16変更<br />
acpidをoffにすると、VPSなどでホスト側からシャットダウンできなくなるため、onに変更しました。</p>]]>
    </content>
</entry>

</feed>

