<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Satake Studio Developer&#039;s Blog</title>
	<atom:link href="http://dev.satake7.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.satake7.net</link>
	<description></description>
	<lastBuildDate>Fri, 23 Sep 2011 08:46:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>imap_open()のエラー（phpバージョン違い）</title>
		<link>http://dev.satake7.net/2011/09/23/imap_open%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%88php%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e9%81%95%e3%81%84%ef%bc%89/</link>
		<comments>http://dev.satake7.net/2011/09/23/imap_open%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%88php%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e9%81%95%e3%81%84%ef%bc%89/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 07:06:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=879</guid>
		<description><![CDATA[詳しく原因まで追究できていないんだけど、誰かの役に立てばと思いアップ。 PHP 5.2.6 で動作していた imap_open() が、PHP 5.3.2 になると動かなくなった。 PHP 5.2.6では、このコードはエ [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2011/09/phplogo.png" alt=""  width="200" /></div>
<p>詳しく原因まで追究できていないんだけど、誰かの役に立てばと思いアップ。<br />
<br style="clear:both;" /><br />
PHP 5.2.6 で動作していた imap_open() が、PHP 5.3.2 になると動かなくなった。</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/php -q
#PHP 5.2.6 のサンプルコード
&lt;?php
$mailserver = &quot;example.com&quot;;
$mbox = imap_open(&quot;{&quot;.$mailserver.&quot;:110/pop3/notls}INBOX&quot;, &quot;user@&quot;.$mailserver, &quot;password&quot;, &quot;OP_READONLY&quot;);
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?&gt;
</pre>
<p>PHP 5.2.6では、このコードはエラーなく動く。</p>
<p>PHP 5.3.2では、以下のエラーになる。</p>
<pre class="brush: plain; title: ; notranslate">
PHP Warning:  imap_open() expects parameter 4 to be long, string given in ...
</pre>
<p>文字列（&#8221;OP_READONLY&#8221;）が整数（OP_READONLY）に変わったようだ。<br />
ここを修正してもエラーになる。</p>
<pre class="brush: plain; title: ; notranslate">
PHP Warning:  imap_open(): Couldn't open stream {mail.example.com:110/pop3/notls}INBOX in ...
bool(false)
PHP Notice:  Unknown: Read-only POP3 access not available (errflg=2) in Unknown on line 0
</pre>
<p>POP3のリードオンリーはダメみたいだ。</p>
<p>しかたがないので、pop3は使わず、imapにしたらうまくいった。</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/php -q
#PHP 5.3.2 のサンプルコード
&lt;?php
$mailserver = &quot;example.com&quot;;
$mbox = imap_open(&quot;{&quot;.$mailserver.&quot;:143/imap/notls}INBOX&quot;, &quot;user@&quot;.$mailserver, &quot;password&quot;, OP_READONLY);
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?&gt;
</pre>
<p>pop3もimapもサポートしてるメールサーバじゃないとダメだけど、一応解決ということで。</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/09/23/imap_open%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%ef%bc%88php%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e9%81%95%e3%81%84%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>個人輸入代行比較</title>
		<link>http://dev.satake7.net/2011/09/03/%e5%80%8b%e4%ba%ba%e8%bc%b8%e5%85%a5%e4%bb%a3%e8%a1%8c%e6%af%94%e8%bc%83/</link>
		<comments>http://dev.satake7.net/2011/09/03/%e5%80%8b%e4%ba%ba%e8%bc%b8%e5%85%a5%e4%bb%a3%e8%a1%8c%e6%af%94%e8%bc%83/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 00:38:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Etc]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=872</guid>
		<description><![CDATA[重さ約1kg（2LB）・大きさ小さめ・価格$50程度の商品を個人輸入する場合の手数料・送料比較 ALICE HOUSE ￥2,782（$34.78） 手数料$10＋配送料$24.78 mailtail ￥2,784（$3 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/files/2011/09/expressmail.png" alt=""  width="200" class="alignleft" /><br />
重さ約1kg（2LB）・大きさ小さめ・価格$50程度の商品を個人輸入する場合の手数料・送料比較</p>
<table>
<tbody>
<tr>
<td><a href="http://www.alicehouse.com/" target="_blank">ALICE HOUSE</a></td>
<td>￥2,782（$34.78）</td>
<td>手数料$10＋配送料$24.78</td>
</tr>
<tr>
<td><a href="http://www.malltail.jp/" target="_blank">mailtail</a></td>
<td>￥2,784（$34.80）</td>
<td>転送手数料$10＋配送料＋燃料費</td>
</tr>
<tr>
<td><a href="https://goopping.atscheckout.com/ECommerce/gp/forwarding/forwarding/" target="_blank">goopping</a></td>
<td>￥4,170（$52.13）</td>
<td>基本料金1,280円＋送料</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>※ 換算レートは 1$＝80円で計算。<br />
※ いろいろあるけど、あとのところはパッとしない。</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/09/03/%e5%80%8b%e4%ba%ba%e8%bc%b8%e5%85%a5%e4%bb%a3%e8%a1%8c%e6%af%94%e8%bc%83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows7 Home PremiumでXpモードを使う</title>
		<link>http://dev.satake7.net/2011/07/12/windows7-home-premium/</link>
		<comments>http://dev.satake7.net/2011/07/12/windows7-home-premium/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 01:03:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=866</guid>
		<description><![CDATA[やりたいことはタイトル通りです。 お客様用に ThinkPad Edge E420を買ったのはいいのですが、このOSが「Windows 7 Home Premium 64」一択で他の選択肢はナシときた。 Office付き [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2011/07/windows7-150x150.jpg" alt=""  width="150" height="150"  /></div>
<p>やりたいことはタイトル通りです。</p>
<p>お客様用に ThinkPad Edge E420を買ったのはいいのですが、このOSが「Windows 7 Home Premium 64」一択で他の選択肢はナシときた。<br />
Office付きを買ったし、別にいいかと思っていたのですが、お客様がどうしても使いたい「文籍（MonJack）」というフリーのソフトが Delphiの32ビット環境で作られており、これがどうやっても動かない。<br />
じゃあ、XPモードでとなるわけですが、Home Premium には XPモードがないよーというわけです。<br />
手順はこんな感じです。</p>
<ol>
<li><a href="http://www.microsoft.com/japan/windows/virtual-pc/download.aspx" target="_blank">Windows XP Mode のダウンロード</a><br />
エディションは「Professional 64ビット版」とかを選んでおくこと。Homeだと選択肢がでない。<br />
2番目にインストールの「Virtual PC Download」をクリック。<br />
インストールは「更新プログラムのインストール」みたいになるので、一瞬アレっとなるけど、終わってスタートメニューを見るとちゃんと入っている。
</li>
<li>仮想マシンの作成<br />
ここでちゃんとしたXPが必要になります。（うちには使わなくなったXPがごろごろしているので問題ありませんが）<br />
メモリー容量はあとで変えられます。<br />
CDドライブにXPのインストールCDをセットして、作成した仮想マシーンをダブルクリックし、通常通りXPをインストール。<br />
一番の問題はパーテションを切るとき、ケチって 10GBとかにしないこと。SP3までアップグレードしたらだいたい10GBがいっぱいになります。20～30GBくらいは切っておきましょう。
</li>
<li>統合機能<br />
仮想マシーンの「ツール」メニューから「統合機能を有効にする」をクリックする。<br />
あとは、仮想マシーンの「設定」メニューでドライブ割り当てなどを適宜行う。
</li>
<li>パーテションを拡大したいとき<br />
ケチって10GBとかにした場合のパーテション拡大方法は、<a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/869vhdextend/vhdextend.html" target="_blank">仮想ハードディスクのサイズを拡大する</a> に書いてある通り。<br />
注意点としては、VHD Resizerで拡大するとき、Fixed（容量固定）を選択すること。Dynamic（容量可変）だとうまくいかなかった。<br />
また、できあがった「.VHDファイル」を仮想マシーンの「設定」メニューで 2台目のハードディスクとしてマウントすること。<br />
そしてパーテション拡張が終わったら、1台目のハードディスクとしてマウントすればOK。
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/07/12/windows7-home-premium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>STLS／STARTTLSの導入</title>
		<link>http://dev.satake7.net/2011/07/12/stls%ef%bc%8fstarttls%e3%81%ae%e5%b0%8e%e5%85%a5/</link>
		<comments>http://dev.satake7.net/2011/07/12/stls%ef%bc%8fstarttls%e3%81%ae%e5%b0%8e%e5%85%a5/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 21:10:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[サーバ管理]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=862</guid>
		<description><![CDATA[Ubuntu（10.04）の postfix（2.7.0）に STLS／STARTTLSを導入する手順。 ※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。 　 postfixのバー [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2010/06/150px-newtuxsvg.png" alt="" width="75" height="90" /></div>
<p>Ubuntu（10.04）の postfix（2.7.0）に STLS／STARTTLSを導入する手順。<br />
※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。<br />
　 postfixのバージョンは「/usr/sbin/postconf  | grep mail_version」で取得。<br />
<br style="clear:both;" /></p>
<ol>
<li>postfixのSASLは設定済み（とする）
<pre class="brush: plain; title: ; notranslate">$ sudo nano /etc/postfix/main.cf</pre>
<pre class="brush: plain; title: ; notranslate">
# SMTP-Auth setting
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
</pre>
</li>
<li>dovecot側のSASLも同様（設定済みとする）
<pre class="brush: plain; title: ; notranslate">$ sudo nano /etc/dovecot/dovecot.conf</pre>
<pre class="brush: plain; title: ; notranslate">
  socket listen {
    client {
      path = /var/spool/postfix/private/auth-dovecot
      mode = 0660
      user = postfix
      group = postfix
    }
  }
</pre>
</li>
<li> TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
<pre class="brush: plain; title: ; notranslate">
$ cd /usr/lib/ssl/misc
$ sudo nano CA.pl
</pre>
<pre class="brush: plain; title: ; notranslate">
#$CATOP=&quot;./demoCA&quot;;
$CATOP=&quot;./postfixCA&quot;;
</pre>
<pre class="brush: plain; title: ; notranslate">
$ sudo nano /usr/lib/ssl/openssl.cnf
</pre>
<pre class="brush: plain; title: ; notranslate">
#dir            = ./demoCA              # Where everything is kept
dir             = ./postfixCA           # Where everything is kept
</pre>
</li>
<li>private keyを作る。（一部伏字）
<pre class="brush: plain; title: ; notranslate">$ sudo ./CA.pl -newca</pre>
<pre class="brush: plain; title: ; notranslate">
CA certificate filename (or enter to create)    # 空Enterキー

Making CA certificate ...
Generating a 1024 bit RSA private key
............................++++++
.........................++++++
writing new private key to './postfixCA/private/cakey.pem'
Enter PEM pass phrase:                    # パスワードを入れる
Verifying - Enter PEM pass phrase:    # もう1回パスワード
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa-ken
Locality Name (eg, city) []:Yokosuka-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Mamoru Satake
Email Address []:mam@x-xx.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                   # 入れなくてよい
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./postfixCA/private/cakey.pem:   # パスワードを入れる
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number:
            xx:ee:33:xx:6b:xx:59:xx
        Validity
            Not Before: Jul 11 21:43:17 2011 GMT
            Not After : Jul 10 21:43:17 2014 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Kanagawa-ken
            organizationName          = Satake Studio,LPC.
            commonName                = Mamoru Satake
            emailAddress              = mam@x-xx.jp
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
            X509v3 Authority Key Identifier:
                keyid:xx:20:xx:93:xx:86:xx:55:xx:9C:xx:6F:xx:2C:xx:C7:xx:E3:xx:15
                DirName:/C=JP/ST=Kanagawa-ken/O=Satake Studio,LPC./CN=Mamoru Satake/emailAddress=mam@x-xx.jp
                serial:xx:EE:xx:AE:xx:F8:xx:F1

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Jul 10 21:43:17 2014 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated
</pre>
</li>
<li>もう1回 private keyを作る。（なんでだ？）
<pre class="brush: plain; title: ; notranslate">
$ cd postfixCA/
$ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
</pre>
<pre class="brush: plain; title: ; notranslate">
Generating a 1024 bit RSA private key
..........++++++
..............++++++
writing new private key to 'postfix-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa-ken
Locality Name (eg, city) []:Yokosuka-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Satake Studio,LPC.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Mamoru Satake
Email Address []:mam@x-xx.jp

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>
</li>
<li>CSR に認証局の証明書で署名。
<pre class="brush: plain; title: ; notranslate">
$ sudo sh -c &quot;echo '00' &gt; serial&quot;
$ cd /usr/lib/ssl/misc
$ sudo rm postfixCA/index.txt*   # 「TXT_DB error number 2」エラー対策
$ sudo touch postfixCA/index.txt
$ sudo openssl ca -out postfix-cert.pem -infiles postfixCA/postfix-req.pem
</pre>
<pre class="brush: plain; title: ; notranslate">
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./postfixCA/private/cakey.pem:          # パスワードを入れる
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Jul 12 00:02:50 2011 GMT
            Not After : Jul 11 00:02:50 2012 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Kanagawa-ken
            organizationName          = Satake Studio,LPC.
            commonName                = Mamoru Satake
            emailAddress              = mam@x-xx.jp
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                xx:E3:xx:32:xx:D4:xx:EF:xx:2A:xx:35:xx:4C:xx:DC:xx:AD:xx:D5
            X509v3 Authority Key Identifier:
                keyid:xx:B2:xx:88:xx:4E:xx:B4:xx:73:xx:DF:xx:5A:xx:72:xx:55:xx:33

Certificate is to be certified until Jul 11 00:02:50 2012 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
</pre>
</li>
<li>ファイルの配置＆postfixリスタート
<pre class="brush: plain; title: ; notranslate">
$ sudo cp postfix-cert.pem /etc/ssl/certs/
$ sudo cp postfixCA/postfix-key.pem /etc/ssl/private/
$ sudo  chmod 644 /etc/ssl/certs/postfix-cert.pem
$ sudo  chmod 400 /etc/ssl/private/postfix-key.pem
$ sudo service postfix restart
</pre>
<pre class="brush: plain; title: ; notranslate">
 * Stopping Postfix Mail Transport Agent postfix
   ...done.
 * Starting Postfix Mail Transport Agent postfix
   ...done.
</pre>
</li>
<li>これでOK（のはず）</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/07/12/stls%ef%bc%8fstarttls%e3%81%ae%e5%b0%8e%e5%85%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE7互換モード</title>
		<link>http://dev.satake7.net/2011/05/21/ie7%e4%ba%92%e6%8f%9b%e3%83%a2%e3%83%bc%e3%83%89/</link>
		<comments>http://dev.satake7.net/2011/05/21/ie7%e4%ba%92%e6%8f%9b%e3%83%a2%e3%83%bc%e3%83%89/#comments</comments>
		<pubDate>Sat, 21 May 2011 04:55:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=850</guid>
		<description><![CDATA[IE8とIE7互換モードで1ピクセルくらいずれることがよくあって、いちいち IEハック入れるの、面倒臭いなぁと思っている貴方！ もうそんな人はいないと思いますが、もしいたら騙されたと思ってコレを headerに入れてみて [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2011/05/tips.jpg" alt=""  width="108" /></div>
<p>IE8とIE7互換モードで1ピクセルくらいずれることがよくあって、いちいち IEハック入れるの、面倒臭いなぁと思っている貴方！<br />
もうそんな人はいないと思いますが、もしいたら騙されたと思ってコレを headerに入れてみてください。</p>
<div style="float:left; width:500px;">
<pre class="brush: plain; title: ; notranslate">
&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=8&quot; /&gt;
</pre>
</div>
<p><br style="clear:both;" /><br />
IE8から互換モードの切替えボタンが消えるので、IE7互換モード対応はしなくてよくなります。<br />
やったねパパ。　もちろん、IE7、IE6、・・・はガン無視ということで。<br />
&#8220;IE=Edge&#8221; という手もありますが、IE9がメジャーになったときズレズレだったらヤだしね。<br />
　<br />
※ ちゃんとした知識が欲しい人は、こちら ⇒ <a href="http://tokkono.cute.coocan.jp/blog/slow/index.php/xhtmlcss/wordpress-theme-inove-and-emulateie7/" target="_blank">WordPressテーマ “iNove” とIEの互換表示モード</a>　をどうぞ。</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/05/21/ie7%e4%ba%92%e6%8f%9b%e3%83%a2%e3%83%bc%e3%83%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>さくらのVPS引越し手順完全版</title>
		<link>http://dev.satake7.net/2011/03/18/%e3%81%95%e3%81%8f%e3%82%89vps%e5%bc%95%e8%b6%8a%e3%81%97%e6%89%8b%e9%a0%86%e5%ae%8c%e5%85%a8%e7%89%88/</link>
		<comments>http://dev.satake7.net/2011/03/18/%e3%81%95%e3%81%8f%e3%82%89vps%e5%bc%95%e8%b6%8a%e3%81%97%e6%89%8b%e9%a0%86%e5%ae%8c%e5%85%a8%e7%89%88/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 09:34:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WP3]]></category>
		<category><![CDATA[サーバ管理]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/?p=776</guid>
		<description><![CDATA[キーワード この記事は、さくらのVPS、Ubuntu 10.04、引越し、Apache＋PHP＋MySQL＋WordPress＋EC-CUBEなどのキーワードで参照されます。 ここ1週間にあったこと ・2011/3/11 [...]]]></description>
			<content:encoded><![CDATA[<div class="vps">
<p><strong>キーワード</strong><br />
この記事は、さくらのVPS、Ubuntu 10.04、引越し、Apache＋PHP＋MySQL＋WordPress＋EC-CUBEなどのキーワードで参照されます。</p>
<p></p>
<p><strong>ここ1週間にあったこと</strong><br />
・2011/3/11 14:46 東北関東大震災が起きる。日時を忘れてしまわないように記録。犠牲になられた方に合掌。<br />
・3/11発生当日は深夜1時まで停電。情報は手回し充電ラジオで。<br />
・電気がついたところで飛び起き、まずサーバの確認。大丈夫だ。それから情報収集。大惨事。<br />
・起動スクリプトに漏れがあったところなど、次に停電になったとき、アタフタしないようにチェック。<br />
・こんなときに限ってUPSのバッテリー切れ（故障）でシャットダウンできなかったので、すかさず新しいUPSを注文。<br />
・計画停電が始まる。1日のうち、6:20～22:00までを5つに区切ってブロックごとに停電させるシステム。<br />
・うちは第3ブロックで初日（3/14）こそ停電しなかったものの、2日目以降は毎回停電。<br />
・一日3時間、午前開始のときは6時間停電するのは、サーバを公開している体制としてはあり得ない。<br />
・しかも4月以降も続くらしいので、ここ（横須賀）で自家発電なしにサーバを公開するのは限界。<br />
・さくらのVPSはデータセンターが大阪（堂島）にあって、そのうち、北海道（石狩）と東京にもできるらしい。<br />
・将来的には3か所借りておけば、負荷分散＋耐障害性としてもいいだろうということで、さくらのVPSに決定。</p>
<p><strong>やること</strong><br />
・いまのサーバ（Ubuntu 9.04 i386）をVPSサーバ（1.5GB、Ubuntu 10.04 amd64）へ移す。<br />
・EC-CUBEを使っているお客様のみ、単独サーバ（1.0GB、Ubuntu 10.04 amd64）へ移す。<br />
・この際だから、Apache＋PHP を nginx＋PHP（FastCGI）にしたかったんだけど、最後の方の挙動がおかしくて断念。<br />
・とりあえず、枯れた構成でいくことにした。</p>
<p>以下、不親切な作業記録（あとで自分が見るためだけのものともいう）</p>
<ol class="lv1">
<li>さくらのVPS申込み等
<ul class="lv2">
<li>『さくらのVPS』アフィリエイト<br />
　時間に余裕があるときは、A8.netでアフィリエイトを申し込んでおく。本人可。ただし審査あり。</li>
<li>Java Runtime Environmentのインストール<br />
　VPSコントロールパネルからのインストールに必要。先にやっておくこと。</li>
<li>さくらインターネット会員メニュー<br />
　<a href="https://secure.sakura.ad.jp/menu/top/">https://secure.sakura.ad.jp/menu/top/</a><br />
　契約情報 ＞ 契約サービスの確認 ＞ さくらのVPS 1.5G ＞ サーバ設定</li>
<li>VPSコントロールパネル<br />
　<a href="https://secure.sakura.ad.jp/vpscontrol/main/">https://secure.sakura.ad.jp/vpscontrol/main/</a><br />
　OS再インストール ＞ カスタムOSインストールへ ＞ OS選択 ＞ Ubuntu10.04 amd64<br />
　※ VPSコントロールパネルログインのパスワードとサーバ・ログインのパスワードは違う。<br />
　　 VPSコントロールパネル上部にパスワード変更ボタンあり。</li>
</ul>
</li>
<li>Ubuntu10.04インストール＆基本設定
<ul class="lv2">
<li>Ubuntu10.04 amd64 インストール<br />
　ここを見ればほぼOK。<a href="http://ubuntu-server.jp/hosting/2010/12/vpsubuntu-1004-lts.html">さくらのVPSにUbuntu 10.04をインストール</a><br />
　※1 ネットマスクの入力ミスに注意 ⇒ 255.255.254.0<br />
　※2 1.0GB以上は仮想ディスクが2つですが『Guided &#8211; use entire disk』にします。sdbは別マウント。<br />
　終わったら、1分弱待ってから、VPSコントロールパネルから起動でOK</li>
</ul>
</li>
<li>sshログイン
<ul class="lv2">
<li>最初は TeraTerm等でプレーンパスワード・ログイン（ポート22番）</li>
<li>パスワードログインできなくしておく<br />
　※ サーバ側で公開鍵と秘密鍵を作って、秘密鍵（id_rsa）はクライアントのTeraTermのところに保存しておく。（cat .ssh/id_rsa とでもして、コピペでファイル書き出し）</p>
<pre class="brush: plain; title: ; notranslate">
$ cd			# ログインルートへ。
$ ssh-keygen	# id_rsaがクライアント秘密鍵、id_rsa.pubはサーバへ置く
$ mv .ssh/id_rsa.pub .ssh/authorized_keys

$ sudo nano /etc/ssh/sshd_config
   Port 22xx				#ポート番号変更
   PasswordAuthentication no	#パスワードでログインしない

$ sudo nano /etc/services
   ssh 22xx/tcp
   ssh 22xx/udp

$ sudo service ssh restart
</pre>
</li>
</ul>
</li>
<li>不要なサービス等を止める
<ul class="lv2">
<li>
<a href="http://www.srchack.org/article.php?story=20100506185113667">gettyを止める</a><br />
<a href="http://axela5004.blog74.fc2.com/blog-entry-570.html">Ubuntu 10.04 Beta 版で不要なサービスを停止してみる。 </a></p>
<pre class="brush: plain; title: ; notranslate">
$ sudo nano /etc/default/console-setup
   ACTIVE_CONSOLES=&quot;/dev/tty[1-2]&quot;

$ sudo nano /etc/init/tty3.conf
$ sudo nano /etc/init/tty4.conf
$ sudo nano /etc/init/tty5.conf
$ sudo nano /etc/init/tty6.conf
   # なかをすべてコメントアウトして実行されないようにする

$ sudo aptitude install sysv-rc-conf
$ sudo sysv-rc-conf dns-clean off
$ sudo sysv-rc-conf pppd-dns off
</pre>
</li>
</ul>
</li>
<li>環境についてと2台目の仮想ドライブ
<ul class="lv2">
<li>ルートのパスワードを設定など
<pre class="brush: plain; title: ; notranslate">
$ sudo su -
[sudo] password for user: PASSWORD

# passwd
Enter new UNIX password: PASSWORD
Retype new UNIX password: PASSWORD

# aptitude install ntp
# nano /etc/ntp.conf
server ntp.jst.mfeed.ad.jp        # 負荷分散のため ntpサーバは変える

# service ntp restart
# ntpq -p

# aptitude install screen          # MUSTではないけど、あれば便利
</pre>
</li>
<li>2台目の仮想ドライブをマウント<br />
OSを再インストールしても仮想ディスクの中身までフォーマットされるわけじゃない。<br />
sdbはそのまま残ってるので注意。（失敗したと思って何回もやり直さないこと）</p>
<pre class="brush: plain; title: ; notranslate">
# blkid /dev/sdb1				# UUIDの確認
# mkdir /www					# マウント・ポイントの作成
# nano /etc/fstab
UUID=73d3fdb7-750d-44bb-aec9-d018092a3de1 /www  ext3  defaults  0  0

# mount -a						# fstabによるマウントで確認
# df -ah
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  836M   18G   5% /
proc                     0     0     0   -  /proc
none                     0     0     0   -  /sys
none                     0     0     0   -  /sys/fs/fuse/connections
none                     0     0     0   -  /sys/kernel/debug
none                     0     0     0   -  /sys/kernel/security
none                  748M  172K  748M   1% /dev
none                     0     0     0   -  /dev/pts
none                  752M     0  752M   0% /dev/shm
none                  752M   40K  752M   1% /var/run
none                  752M     0  752M   0% /var/lock
none                  752M     0  752M   0% /lib/init/rw
none                   19G  836M   18G   5% /var/lib/ureadahead/debugfs
/dev/sdb1              30G  185M   28G   1% /www
</pre>
</li>
</ul>
</li>
<li>インストールプログラム
<ul class="lv2">
<li>apache2 + php5 + mysql
<pre class="brush: plain; title: ; notranslate">
$ sudo aptitude install apache2 php5 libapache2-mod-php5 mysql-server php-pear php5-{mysql,curl,dev,gd,imap,ldap,mcrypt,snmp,xmlrpc}      # 必要最低限ではありません

$ dpkg -l | grep apache
ii  apache2                         Apache HTTP Server metapackage
ii  apache2-mpm-prefork             Apache HTTP Server - traditional non-threade
ii  apache2-utils                   utility programs for webservers
ii  apache2.2-bin                   Apache HTTP Server common binary files
ii  apache2.2-common                Apache HTTP Server common files
ii  libapache2-mod-php5             server-side, HTML-embedded scripting languag

$ dpkg -l | grep php
ii  libapache2-mod-php5             server-side, HTML-embedded scripting languag
ii  php-pear                        PEAR - PHP Extension and Application Reposit
ii  php5                            server-side, HTML-embedded scripting languag
ii  php5-cli                        command-line interpreter for the php5 script
ii  php5-common                     Common files for packages built from the php
ii  php5-curl                       CURL module for php5
ii  php5-dev                        Files for PHP5 module development
ii  php5-gd                         GD module for php5
ii  php5-imap                       IMAP module for php5
ii  php5-ldap                       LDAP module for php5
ii  php5-mcrypt                     MCrypt module for php5
ii  php5-mysql                      MySQL module for ph 5
ii  php5-snmp                       SNMP module for php5
ii  php5-xmlrpc                     XML-RPC module for php5

$ sudo nano /etc/mysql/my.cnf
[client]
default-character-set=utf8  #追加
[mysqld]
default-character-set=utf8  #追加
character-set-server=utf8  #追加

$ sudo a2enmod rewrite #mod_rewriteを有効にする
$ sudo service apache2 restart

$ sudo aptitude install language-pack-ja     # ロケールを ja_JP.UTF-8 にする
$ sudo locale-gen ja_JP.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8
$ export LANG=ja_JP.UTF-8
</pre>
</li>
</ul>
</li>
<li>ドメインの設定
<ul class="lv2">
<li>DNSレコードの変更<br />
ドメインをレジストラ（お名前.com、ムームードメイン等）で管理しているのであれば、DNSのAレコードを変更する。
  </li>
<li>DNS逆引きレコードを設定<br />
さくらのVPSコントロール画面で、ホスト名を変更する。
  </li>
</ul>
</li>
<li>rsync
<ul class="lv2">
<li>旧サーバから新サーバへのお引越しには rsyncを使う。<br />
新サーバに余計な設定を残さないよう、旧サーバ側をクライアントにしてアクセス。<br />
※ 以下、c# はクライアント側ルート、s# はサーバ側ルート。</p>
<pre class="brush: plain; title: ; notranslate">
s# ssh-keygen
s# mv .ssh/id_rsa.pub .ssh/authorized_keys
s# cat .ssh/id_rsa         # このファイルをクライアント側へ持っていく

c# cd
c# nano .ssh/id_rsa_sakura.1.5_root     # このファイルに秘密鍵を入れる
c# cat .ssh/config               # 接続先ごとの設定ファイル（Hostを繰り返す）
Host sakura.1.5
    HostName        49.xxx.xxx.xxx
    IdentityFile    ~/.ssh/id_rsa_sakura.1.5_root
    User            root
    Port            22xx

c# chmod 600 .ssh/config        # 他のユーザが書き込めると怒られる
c# chmod 600 .ssh/id_rsa_sakura.1.5_root
c# ssh sakura.1.5                # sshで繋がるかテスト（root@49.xxx.xxx.xxx）
c# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/
</pre>
</li>
</ul>
</li>
<li>apache2
<ul class="lv2">
<li>apache2のテスト・・・デフォルト<br />
なにも設定せずに、/var/www/index.htmlが表示できたらOK。</p>
<pre class="brush: plain; title: ; notranslate">
$ wget http://example.com -O -      # 標準出力に吐き出すオプション
長さ: 177 1
`STDOUT' に保存中
&lt;html&gt;&lt;body&gt;&lt;h1&gt;It works!&lt;/h1&gt;
&lt;p&gt;This is the default web page for this server.&lt;/p&gt;
&lt;p&gt;The web server software is running but no content has been added, yet.&lt;/p&gt;
&lt;/body&gt;&lt;/html&gt;
stdout へ出力完了 [177/177]
</pre>
</li>
<li>apache2のテスト・・・example.com
<pre class="brush: plain; title: ; notranslate">
$ sudo nano /etc/apache2/site-available/my_site
#NameVirtualHost *:80            # ドメインが1つしかないときはいらない
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ServerAlias *.example.com
  DocumentRoot /www/example.com/
&lt;/VirtualHost&gt;

$ sudo a2ensite my_site
Enabling site my_site.

$ sudo service apache2 restart
</pre>
</li>
</ul>
</li>
<li>proftpd
<ul class="lv2">
<li>proftpdのインストールと設定<br />
うまくいかないときは、/var/log/proftpd/proftpd.log にエラーがあるはず。<br />
※ Ubuntu 10.04でインストールされる proftpdは 1.3.2c で、脆弱性（Telnet IAC stack overflow vulnerability (ZDI-CAN-925)）があります。最新版（1.3.3d）をインストールするのがベストですが、自分でできない場合は Ubuntu用パッケージが出回るまで接続元IPアドレスを制限するなどの対応をしてください。</p>
<pre class="brush: plain; title: ; notranslate">
$ sudo aptitude install proftpd
from inetd           # 常駐しない設定

$ export TZ=&quot;JST-9&quot;        # これがないとFTPでファイルを書くときの時間がずれる
$ sudo nano /etc/environment
export TZ=&quot;JST-9&quot;         # 起動時もセットしておく

$ sudo nano /etc/proftpd/proftpd.conf
AuthUserFile   /etc/proftpd/ftpd.passwd
AuthGroupFile  /etc/proftpd/ftpd.group
AuthOrder      mod_auth_file.c mod_auth_unix.c
&lt;Limit LOGIN&gt;
  Order allow, deny
  Allow from 127.0.0.1, IP-ADDRESS      # 許可するIPアドレス
  Deny from all        # 自サーバのグローバルIPはwordpressのプラグイン・インストールで必要
&lt;/Limit LOGIN&gt;
DefaultRoot             /www/USER_DIR              USER
DefaultRoot             !ADMIN_USER
&lt;Directory /www/USER_DIR/*&gt;
  AllowOverwrite on
  Umask 000
  &lt;Limit WRITE &gt;
    AllowAll
  &lt;/Limit&gt;
&lt;/Directory&gt;

$ sudo ftpasswd -passwd -file=/etc/proftpd/ftpd.passwd -name=USER -uid=USER_ID -gid=GROUP_ID -home=/www/USER_DIR -shell=/bin/bash

$ sudo nano /etc/proftpd/ftpd.group
USER:x:USER_GROUP:

$ sudo chown -R USER_ID:GROUP_ID /www/USER_DIR/

$ sudo service proftpd restart
ProFTPd is started from inetd/xinetd.
</pre>
</li>
</ul>
</li>
<li>phpMyAdmin
<ul class="lv2">
<li>定番のphpMyAdminのインストール<br />
危ないので、接続元を制限する。</p>
<pre class="brush: plain; title: ; notranslate">
$ sudo aptitude install phpmyadmin
$ sudo nano /etc/phpmyadmin/apache.conf
&lt;Directory /usr/share/phpmyadmin&gt;
    Order deny,allow                    # この3行を追加する
    deny from All
    Allow from IP-ADDRESS        # 許可するIPアドレス

$ sudo service apache2 restart
</pre>
</li>
</ul>
</li>
<li>WordPress
<ul class="lv2">
<li>WordPress 3.1 日本語版をインストール
<pre class="brush: plain; title: ; notranslate">
$ wget http://ja.wordpress.org/wordpress-3.1-ja.tar.gz
$ tar zxf wordpress-3.1-ja.tar.gz
$ mysql -u root -pPASSWORD-ROOT
mysql&gt; create database DATABASE-NAME;
mysql&gt; create user USER-NAME@localhost identified by 'PASSWORD-USER';
mysql&gt; grant all on DATABASE-NAME.* to USER-NAME@localhost;
mysql&gt; quit

$ cp -av /www/wordpress/wp-config-sample.php /www/wordpress/wp-config.php
$ nano /www/wordpress/wp-config.php
define('DB_NAME', 'DATABASE-NAME');
define('DB_USER', 'USER-NAME');
define('DB_PASSWORD', 'PASSWORD-USER');
define('AUTH_KEY', ...);          # https://api.wordpress.org/secret-key/1.1/salt/
define('SECURE_AUTH_KEY', ...);    # このURLからダウンロードしたキーに差替え 

$ sudo mkdir /etc/apache2/sites-available/include
$ sudo nano  /etc/apache2/sites-available/include/wordpress    # ログを取らない設定
SetEnvIf Request_URI &quot;\.(gif)|(jpg)|(jpeg)|(JPG)|(png)|(bmp)|(ico)|(css)|(swf)$&quot; nolog
SetEnvIf User-Agent &quot;Gigabot&quot; nolog
SetEnvIf User-Agent &quot;Googlebot&quot; nolog
SetEnvIf User-Agent &quot;MJ12bot&quot; nolog
SetEnvIf User-Agent &quot;msnbot&quot; nolog
SetEnvIf User-Agent &quot;psbot&quot; nolog
SetEnvIf User-Agent &quot;TurnitinBot&quot; nolog
SetEnvIf User-Agent &quot;Yahoo! Slurp&quot; nolog
SetEnvIf User-Agent &quot;Zealbot&quot; nolog
SetEnvIf User-Agent &quot;Baiduspider&quot; nolog
SetEnvIf Request_URI &quot;\.(ida|IDA|exe|printer|asp|dll)&quot; nolog
SetEnvIf Request_URI &quot;^/_mem_bin/&quot; worm nolog
SetEnvIf Request_URI &quot;^/_vti_bin/&quot; worm nolog
SetEnvIf Request_URI &quot;^/c/&quot; worm nolog
SetEnvIf Request_URI &quot;^/d/&quot; worm nolog
SetEnvIf Request_URI &quot;^/msadc/&quot; worm nolog
SetEnvIf Request_URI &quot;^/MSADC/&quot; worm nolog
SetEnvIf Request_URI &quot;^/scripts/&quot; worm nolog
SetEnvIf Request_URI &quot;^/default.ida&quot; worm nolog
SetEnvIf Request_URI &quot;root\.exe&quot; worm nolog
SetEnvIf Request_URI &quot;cmd\.exe&quot; worm nolog
SetEnvIf Request_URI &quot;NULL\.IDA&quot; worm nolog
SetEnvIf Request_URI &quot;^/cgi-bin/&quot; nolog
SetEnvIf Request_URI &quot;robots\.txt&quot; nolog
SetEnvIf Request_Method &quot;(GET)|(POST)|(PUT)|(DELETE)|(HEAD)&quot; log
SetEnvIf Request_Method &quot;(OPTIONS)&quot; nolog

$ sudo nano /etc/apache2/sites-available/my_site
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ServerAlias *.example.com
  DocumentRoot /www/wordpress/
  Include ./sites-available/include/wordpress
&lt;/VirtualHost&gt;

$ sudo a2dissite default        # defaultを無効化
$ sudo a2ensite my_site       # これはすでにやっているけど
$ sudo service apache2 restart

$ sudo nano /www/wordpress/wp-config.php    # マルチサイト化
define ('WP_ALLOW_MULTISITE', true);

$ sudo mkdir /www/wordpress/wp-content/blogs.dir
$ sudo chown www-data:www-data /www/wordpress/wp-content/blogs.dir

$ sudo nano /www/wordpress/wp-config.php
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'satake7.jp' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

$ sudo nano /www/wordpress/wp-config.php
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]

# WordPress MU Domain Mapping プラグインをインストールする
$ cp -av /www/wordpress/wp-content/pluginswordpress-mu-domain-mapping/sunrise.php /www/wordpress/wp-content/
$ sudo nano /www/wordpress/wp-config.php
define( ‘SUNRISE’, ‘on’ );
</pre>
</li>
</ul>
</li>
<li>postfix &#038; dovecot
<ul class="lv2">
<li>順番が違うようだが、メール環境を整備
<pre class="brush: plain; title: ; notranslate">
$ sudo aptitude install postfix      # システムメールのドメインを聞かれるので要準備
$ sudo aptitude install dovecot dovecot-common dovecot-imapd dovecot-pop3d
$ sudo nano /etc/postfix/master.cf
submission inet n       -       -       -       -       smtpd      # 587対応・コメントを外す
docomo-smtp unix -      -       n       -       1       smtp    # docomoだけリレーするため
       -o smtp_destination_concurrency_limit=1
       -o smtp_destination_recipient_limit=1

$ sudo nano /etc/postfix/main.cf       # 標準と違うところのみ
delay_warning_time = 12h
# TLS parameters               # 全部コメント。後ろでセット
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$myorigin, localhost, $myorigin
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 IP-ADDRESS/32   # 許可IPアドレス
home_mailbox = Maildir/
message_size_limit = 30485760
unknown_local_recipient_reject_code = 550
# SMTP-Auth setting
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination
broken_sasl_auth_clients = yes
# Virtual Mailbox
virtual_mailbox_domains = example.com.local
virtual_mailbox_base = /home/vmailbox
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:VMAILBOX-USER-ID
virtual_gid_maps = static:VMAILBOX-GROUP-ID
virtual_alias_maps = hash:/etc/postfix/virtual
transport_maps = hash:/etc/postfix/transport
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =

$ sudo nano /etc/postfix/saslpass         # 転送に使うためのプロバイダ設定
email.mail.plala.or.jp USER-PLALA:PASSWORD-PLALA

$ sudo postmap /etc/postfix/saslpass
$ sudo nano /etc/postfix/transport         # 転送設定（docomoだけ）
docomo.ne.jp  docomo-smtp:[email.mail.plala.or.jp]:587      # docomoはゆっくり送る
.docomo.ne.jp docomo-smtp:[email.mail.plala.or.jp]:587

$ sudo postmap /etc/postfix/transport
$ sudo nano /etc/postfix/virtual
info@example.com info@example.com.local

$ sudo postmap /etc/postfix/virtual
$ sudo nano /etc/postfix/vmailbox
info@example.com.local example.com.local/info/

$ sudo postmap /etc/postfix/vmailbox
$ sudo nano /etc/dovecot/passwd
USER-NAME@smtp:{HMAC-MD5}3d272806034dd7c43f1643c4ab60731e3d1051ff9433afe14b056f3d34fe6ab1:1000:1000:/home/USER-NAME::userdb_mail=maildir:/home/USER-NAME/Maildir

$ sudo nano /etc/dovecot/dovecot.conf      # 標準と違うところだけ
mail_location = maildir:~/Maildir
  mechanisms = plain login digest-md5 cram-md5 apop
  passdb passwd-file {
    args = /etc/dovecot/passwd
  }
  userdb passwd-file {
    args = /etc/dovecot/passwd
  }
 socket listen {
    client {
      path = /var/spool/postfix/private/auth-dovecot
      mode = 0660
      user = postfix
      group = postfix
    }
  }

$ sudo service postfix restart
$ sudo service dovecot restart

$ sudo mkdir -p /etc/skel/Maildir/new        # ユーザが作られたときにMaildirも作られるように
$ sudo mkdir -p /etc/skel/Maildir/cur
$ sudo mkdir -p /etc/skel/Maildir/tmp
$ sudo chmod -R 700 /etc/skel/Maildir/

$ sudo nano /etc/aliases             # ドメイン共通のアドレス
$ sudo newaliases

$ sudo adduser vmailbox                       # postfix, dovecot用ユーザ
$ sudo cp -av /home/vmailbox/ /www/     # メールを/www に置きたいので
$ sudo nano /etc/passwd                      # サーバ移転をしている関係でユーザIDと/wwwを変更
$ sudo nano /etc/group                         # 同上の理由でグループIDを変更
$ sudo chown -R vmailbox:vmailbox /www/vmailbox/
$ sudo nano /etc/dovecot/passwd          # /home/vmailbox ⇒ /www/vmailbox
$ sudo nano /etc/postfix/main.cf
$ sudo service postfix restart
$ sudo service dovecot restart

$ sudo nano /etc/postfix/virtual  # 移転先ドメインは、main.cf の mydestination から外しただけじゃダメ
$ sudo nano /etc/postfix/vmailbox  # virtual と vmailbox も見てるみたい
$ sudo postmap /etc/postfix/virtual
$ sudo postmap /etc/postfix/vmailbox

$ sudo service postfix restart
$ sudo service dovecot restart
</pre>
</li>
</ul>
</li>
<li>旧IPへのアクセスを新IPへ振り替える
<ul class="lv2">
<li>リバースプロキシの設定
<pre class="brush: plain; title: ; notranslate">
$ sudo a2enmod proxy                  # すでに入っているはず
$ sudo a2enmod proxy_http           # httpsは対象外
$ sudo nano /etc/hosts                  # これすごく重要！！！
xx.xxx.xx.xxx  example.com         # 新しいサーバのIPアドレスを書く

$ sudo nano /etc/apache2/sites-available/my_site
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ProxyPass / http://example.com/
&lt;/VirtualHost&gt;

$ sudo service apache2 restart

$ sudo nano /etc/postfix/transport          # メールがあるときは忘れずに！！
example.com     :[xx.xxx.xx.xxx]:587    # 新しいサーバのIPアドレス

$ sudo postmap /etc/postfix/transport
$ sudo nano /etc/postfix/virtual              # 転送するドメインをコメントにする
$ sudo nano /etc/postfix/vmailbox          # 同上
$ sudo nano /etc/postfix/main.cf            # ディスティネーションから外す
$ sudo postmap /etc/postfix/virtual
$ sudo postmap /etc/postfix/vmailbox
$ sudo service postfix restart
</pre>
</li>
</ul>
</li>
<li>ドメイン引越しまとめ
<ul class="lv2">
<li>旧サーバから新サーバへの引越し<br />
いろいろ面倒なのでルート権限で操作。以下 o# は旧サーバ、n# は新サーバ</p>
<pre class="brush: plain; title: ; notranslate">
o# rsync -avz /home/www/example.com/ sakura.1.5:/www/example.com/    # ファイル全部コピー
o# rsync -avz /home/vmailbox/example.com.local/ sakura.1.5:/www/vmailbox/example.com.local/    # メールコピー

n# nano /etc/postfix/virtual          # メール関係の設定
n# nano /etc/postfix/vmailbox
n# postmap /etc/postfix/virtual
n# postmap /etc/postfix/vmailbox
n# nano /etc/postfix/main.cf

o# nano /etc/hosts         # 新しいサーバのIPアドレス
o# nano /etc/postfix/virtual        # 移転させるものはコメントに
o# nano /etc/postfix/vmailbox    # 同上
o# nano /etc/postfix/main.cf      # 同上
o# nano /etc/postfix/transport
example.com :[xx.xxx.xx.xxx]:587     # 新しいサーバのIPアドレス

o# postmap /etc/postfix/virtual
o# postmap /etc/postfix/vmailbox
o# postmap /etc/postfix/transport
o# service postfix restart

n# nano /etc/apache2/sites-available/my_site       # apacheの設定
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ServerAlias *.example.com
  DocumentRoot /www/example.com/
&lt;/VirtualHost&gt;

n# service apache2 restart        # ここまでやってからDNSレコードを書き変える

o# nano /etc/hosts
xx.xxx.xx.xxx  example.com         # 新しいサーバのIPアドレスを書く

o# nano /etc/apache2/sites-available/my_site
&lt;VirtualHost *:80&gt;
  ServerName example.com
  ProxyPass / http://example.com/
&lt;/VirtualHost&gt;

o# service apache2 restart

o# nano /etc/postfix/transport
</pre>
</li>
</ul>
</li>
<li>続き
<ul class="lv2">
<li>続き
<pre class="brush: plain; title: ; notranslate">
</pre>
</li>
</ul>
</li>
<li>続き
<ul class="lv2">
<li>続き
<pre class="brush: plain; title: ; notranslate">
</pre>
</li>
</ul>
</li>
<li>続き
<ul class="lv2">
<li>続き
<pre class="brush: plain; title: ; notranslate">
</pre>
</li>
</ul>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2011/03/18/%e3%81%95%e3%81%8f%e3%82%89vps%e5%bc%95%e8%b6%8a%e3%81%97%e6%89%8b%e9%a0%86%e5%ae%8c%e5%85%a8%e7%89%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EC-CUBE：本番用決済モジュール</title>
		<link>http://dev.satake7.net/2010/09/15/ec-cube%ef%bc%9a%e6%9c%ac%e7%95%aa%e7%94%a8%e6%b1%ba%e6%b8%88%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab/</link>
		<comments>http://dev.satake7.net/2010/09/15/ec-cube%ef%bc%9a%e6%9c%ac%e7%95%aa%e7%94%a8%e6%b1%ba%e6%b8%88%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 02:39:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[EC-CUBE]]></category>
		<category><![CDATA[決済]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/blog/2010/09/15/772/</guid>
		<description><![CDATA[ここで、EC-CUBEに決済モジュールを組み込むときの手順を書いたんだけど、当然のことながら、テスト環境でのお話。 さて、テストはうまくいったから、さぁ本番というとき、決済会社からは以下のような書類が送られてきます。 R [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2010/06/eccubelogo.jpg" alt="eccubelogo" width="226" height="43" /></div>
<p><a href="/blog/2010/07/30/670/">ここ</a>で、EC-CUBEに決済モジュールを組み込むときの手順を書いたんだけど、当然のことながら、テスト環境でのお話。<br />
さて、テストはうまくいったから、さぁ本番というとき、決済会社からは以下のような書類が送られてきます。</p>
<ol>
<li>README.txt</li>
<li>本番環境登録情報</li>
<li>モジュール用クライアント証明書（*.pem）</li>
<li>本番環境接続用モジュールのプロパティファイル（サンプル）</li>
</ol>
<p>README.txtにはどういうことが書いてあるかというと、「本番用は試験環境と同じだからそれを使ってね」、「プロパティファイルだけは差替えてね」、「本番環境登録情報は各電文の共通ヘッダに設定すべき情報ですよ」、「説明書を見てね」、「わからなかったら問い合わせてね」ということです。<br />
　</p>
<ol>
<li>まず、プロパティファイルを差替えます。<br />
試験環境と決済URL等が違うだけなので、試験環境用の決済URLを本番用に書き換えて、クライアント証明書ファイルパス（*.pem）も書き換えておきます。（ファイルももちろんコピーしておきます）</li>
<li>このまま、クレジット決済をやってみるとエラーになります。<br />
「P002：認証情報が不正です。」というエラーです。なぜでしょうか。本番環境登録情報というやつをどこにも登録していないからですね。</li>
<li>オーナーズストアで決済モジュールの設定を行います。
<div class="img-shadow-right"><a href="/files/2010/09/kessai2.jpg" class="thickbox"><img src="/files/2010/09/kessai2.jpg" alt="kessai" width="386" height="319" /></a></div>
<p>
みんな、この辺のこと、スパッと気づくんでしょうかね。頭いいんですね。
</li>
</ol>
<p>ちゃんと共通ヘッダに情報がセットされたら、P002はでなくなると思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2010/09/15/ec-cube%ef%bc%9a%e6%9c%ac%e7%95%aa%e7%94%a8%e6%b1%ba%e6%b8%88%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memo：タブの吐き出し・・・9/10</title>
		<link>http://dev.satake7.net/2010/09/10/memo%ef%bc%9a%e3%82%bf%e3%83%96%e3%81%ae%e5%90%90%e3%81%8d%e5%87%ba%e3%81%97%e3%83%bb%e3%83%bb%e3%83%bb910/</link>
		<comments>http://dev.satake7.net/2010/09/10/memo%ef%bc%9a%e3%82%bf%e3%83%96%e3%81%ae%e5%90%90%e3%81%8d%e5%87%ba%e3%81%97%e3%83%bb%e3%83%bb%e3%83%bb910/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 19:06:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Etc]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/blog/2010/09/10/767/</guid>
		<description><![CDATA[　 最近は記録するのが面倒臭くなって、「また、いるときググればいいでしょ。ぼんやりと記憶に残ってるし」と、さっさとタブを閉じてしまっていたので、反省！ ちゃんと記録しておかねば、イパネバの娘。 （結構書いたので、今日のと [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2010/09/cleanuptheworld-120x150.jpg" alt="cleanuptheworld" width="120" height="150" /></div>
<p>　<br />
最近は記録するのが面倒臭くなって、「また、いるときググればいいでしょ。ぼんやりと記憶に残ってるし」と、さっさとタブを閉じてしまっていたので、反省！<br />
ちゃんと記録しておかねば、イパネバの娘。<br />
（結構書いたので、今日のところはこのくらいで勘弁しといたろ！）<br />
</p>
<ol>
<li>PHPで末尾の削除
<pre class="brush: php; title: ; notranslate">
$s = &quot;aaa,bb,cccc,&quot;;
$s = rtrim($s, &quot;,&quot;);
</pre>
</li>
<li><a href="http://blog.egorkhmelev.com/2009/11/jquery-slider-safari-style/" target="_blank">jQuery Slider plugin (Safari style)</a>
<pre class="brush: plain; title: ; notranslate">

$(function() {
  $(&quot;#id名&quot;).slider({ ... });
});
</pre>
<p>読み込み時に動かしておくことが重要！（$(function() なしで書いても何もおこらないよ）
</li>
<li>EC-CUBEのフッターが fotter になっていたところを footer に修正してくれた。（2.5から適用）</li>
<li>ブラウザの右端にペロッと表示されて、スクロールしても動かない画像
<pre class="brush: css; title: ; notranslate">
position:fixed;
right:0px;
bottom:20px;
</pre>
<p>bottomを指定すると下の方に張り付いて Good！
</li>
<li><a href="http://code.google.com/p/uupaa-js/w/list" target="_blank">uupaa.js</a><br />
<a href="http://d.hatena.ne.jp/uupaa/" target="_blank">latest log</a>のひとが開発している jQueryに代わるライブラリ。機能はよさげなんだけど「導入実績なし」というところがちょっと。
</li>
<li><a href="http://phpspot.org/blog/archives/2007/08/html_raquolaquo.html" target="_blank">使えるHTMLエンティティ文字 &#8211; raquo,laquo</a><br />
FireBugでエラーになる。もちろん使えるけど。</li>
<li>isset()とempty()のまとめ<br />
<a href="http://nyx.pu1.net/function/var/empty.html" target="_blank">ここ</a>を見るといいよ。</li>
<li><a href="http://php.net/manual/ja/function.mb-ereg-replace.php" target="_blank">mb_ereg_replace</a><br />
正規表現による置換のマルチバイト文字列版。それより、いまだに str_replaceのマルチバイト版が標準に入っていない方が不思議。</li>
<li>メールループ（循環メール）はどうやって防がれているか？<br />
postfixが「Delivered-To:にあるメッセージを&#8221;mail forwarding loop&#8221;としてbounce」するということ。自分が送ったメールには、Delivered-To:を付けておいて、「Deliverd-To」フィールドの内容と送付先が同じ場合は NGにするということのようです。<a href="http://d.hatena.ne.jp/stealthinu/20100624/p1" target="_blank">ここ</a>参照。
</li>
<li>Smartyの中で isset()を使うとき
<pre class="brush: php; title: ; notranslate">
&lt;!--{ if isset($tpl_previous_page|smarty:nodefaults) }--&gt;
</pre>
<p>nodefaultsをかけておかないと、エラーになります。その理由は、<a href="http://blog.asial.co.jp/309" target="_blank">こちら</a>で。
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2010/09/10/memo%ef%bc%9a%e3%82%bf%e3%83%96%e3%81%ae%e5%90%90%e3%81%8d%e5%87%ba%e3%81%97%e3%83%bb%e3%83%bb%e3%83%bb910/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP：文字列の途中にある数字をゼロパディング</title>
		<link>http://dev.satake7.net/2010/09/08/php%ef%bc%9a%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e9%80%94%e4%b8%ad%e3%81%ab%e3%81%82%e3%82%8b%e6%95%b0%e5%ad%97%e3%82%92%e3%82%bc%e3%83%ad%e3%83%91%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0/</link>
		<comments>http://dev.satake7.net/2010/09/08/php%ef%bc%9a%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e9%80%94%e4%b8%ad%e3%81%ab%e3%81%82%e3%82%8b%e6%95%b0%e5%ad%97%e3%82%92%e3%82%bc%e3%83%ad%e3%83%91%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 01:56:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/blog/2010/09/08/763/</guid>
		<description><![CDATA[　 体調不良のボケーっとした状態で考えたので、これでいいのかわるいのか判断がつかないんだけど、後で使うためのものなので、一応メモしておく。 仕様としては、sb0716_4a.jpg というような文字列があったとき、これを [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2010/09/php.jpg" alt="php" width="139" height="90" /></div>
<p>　<br />
体調不良のボケーっとした状態で考えたので、これでいいのかわるいのか判断がつかないんだけど、後で使うためのものなので、一応メモしておく。<br />
仕様としては、sb0716_4a.jpg というような文字列があったとき、これを、sb0716_04a.jpg にしたいということです。<br />
_1.jpg、_4.jpg、_10.jpg とあってソートしたら、_1.jpg、_10.jpg、_4.jpg になるのは嫌ということです。わがままですね。</p>
<pre class="brush: php; title: ; notranslate">
</pre>
<p>”#”で場所を特定しておいて、ゼロパディングしてから戻すというアイディアなんですけど、正規表現だけでもっとスパッといかないんですかね？</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2010/09/08/php%ef%bc%9a%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e9%80%94%e4%b8%ad%e3%81%ab%e3%81%82%e3%82%8b%e6%95%b0%e5%ad%97%e3%82%92%e3%82%bc%e3%83%ad%e3%83%91%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress3：カスタムメニュー</title>
		<link>http://dev.satake7.net/2010/09/04/wordpress3%ef%bc%9a%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc/</link>
		<comments>http://dev.satake7.net/2010/09/04/wordpress3%ef%bc%9a%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 00:43:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WP3]]></category>

		<guid isPermaLink="false">http://dev.satake7.net/blog/2010/09/04/759/</guid>
		<description><![CDATA[　 WordPress3にデフォルトでついてくる「Twenty One」テンプレートでカスタムメニューというやつが使えます。 あの例のグローバル･ナビゲーションというやつです。 メニュー階層があるとドロップダウンメニュー [...]]]></description>
			<content:encoded><![CDATA[<div class="img-shadow"><img src="/files/2010/09/wordpress-jon-rognerud-150x150.jpg" alt="wordpress" width="150" height="150" /></div>
<p>　<br />
WordPress3にデフォルトでついてくる「Twenty One」テンプレートでカスタムメニューというやつが使えます。<br />
あの例のグローバル･ナビゲーションというやつです。<br />
メニュー階層があるとドロップダウンメニューにしてくれて憂い奴なんですが、どうやって階層にすればいいの、と迷ったので、画面を貼っときます。</p>
<div class="img-shadow"><a href="/files/2010/09/scn-1.gif" class="thickbox"><img src="/files/2010/09/scn-1.gif" alt="" width="485" height="375" /></a></div>
<p style="clear:both">カスタムリンクをドラッグ＆ドロップするときに、少し右の方へずらせばいいんです。</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.satake7.net/2010/09/04/wordpress3%ef%bc%9a%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

