詳しく原因まで追究できていないんだけど、誰かの役に立てばと思いアップ。


PHP 5.2.6 で動作していた imap_open() が、PHP 5.3.2 になると動かなくなった。

#!/usr/bin/php -q
#PHP 5.2.6 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":110/pop3/notls}INBOX", "user@".$mailserver, "password", "OP_READONLY");
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

PHP 5.2.6では、このコードはエラーなく動く。

PHP 5.3.2では、以下のエラーになる。

PHP Warning:  imap_open() expects parameter 4 to be long, string given in ...

文字列(”OP_READONLY”)が整数(OP_READONLY)に変わったようだ。
ここを修正してもエラーになる。

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

POP3のリードオンリーはダメみたいだ。

しかたがないので、pop3は使わず、imapにしたらうまくいった。

#!/usr/bin/php -q
#PHP 5.3.2 のサンプルコード
<?php
$mailserver = "example.com";
$mbox = imap_open("{".$mailserver.":143/imap/notls}INBOX", "user@".$mailserver, "password", OP_READONLY);
var_dump($mbox);
if ($mbox) {
  imap_close($mbox);
}
?>

pop3もimapもサポートしてるメールサーバじゃないとダメだけど、一応解決ということで。


重さ約1kg(2LB)・大きさ小さめ・価格$50程度の商品を個人輸入する場合の手数料・送料比較

ALICE HOUSE ¥2,782($34.78) 手数料$10+配送料$24.78
mailtail ¥2,784($34.80) 転送手数料$10+配送料+燃料費
goopping ¥4,170($52.13) 基本料金1,280円+送料

※ 換算レートは 1$=80円で計算。
※ いろいろあるけど、あとのところはパッとしない。

やりたいことはタイトル通りです。

お客様用に ThinkPad Edge E420を買ったのはいいのですが、このOSが「Windows 7 Home Premium 64」一択で他の選択肢はナシときた。
Office付きを買ったし、別にいいかと思っていたのですが、お客様がどうしても使いたい「文籍(MonJack)」というフリーのソフトが Delphiの32ビット環境で作られており、これがどうやっても動かない。
じゃあ、XPモードでとなるわけですが、Home Premium には XPモードがないよーというわけです。
手順はこんな感じです。

  1. Windows XP Mode のダウンロード
    エディションは「Professional 64ビット版」とかを選んでおくこと。Homeだと選択肢がでない。
    2番目にインストールの「Virtual PC Download」をクリック。
    インストールは「更新プログラムのインストール」みたいになるので、一瞬アレっとなるけど、終わってスタートメニューを見るとちゃんと入っている。
  2. 仮想マシンの作成
    ここでちゃんとしたXPが必要になります。(うちには使わなくなったXPがごろごろしているので問題ありませんが)
    メモリー容量はあとで変えられます。
    CDドライブにXPのインストールCDをセットして、作成した仮想マシーンをダブルクリックし、通常通りXPをインストール。
    一番の問題はパーテションを切るとき、ケチって 10GBとかにしないこと。SP3までアップグレードしたらだいたい10GBがいっぱいになります。20~30GBくらいは切っておきましょう。
  3. 統合機能
    仮想マシーンの「ツール」メニューから「統合機能を有効にする」をクリックする。
    あとは、仮想マシーンの「設定」メニューでドライブ割り当てなどを適宜行う。
  4. パーテションを拡大したいとき
    ケチって10GBとかにした場合のパーテション拡大方法は、仮想ハードディスクのサイズを拡大する に書いてある通り。
    注意点としては、VHD Resizerで拡大するとき、Fixed(容量固定)を選択すること。Dynamic(容量可変)だとうまくいかなかった。
    また、できあがった「.VHDファイル」を仮想マシーンの「設定」メニューで 2台目のハードディスクとしてマウントすること。
    そしてパーテション拡張が終わったら、1台目のハードディスクとしてマウントすればOK。

Ubuntu(10.04)の postfix(2.7.0)に STLS/STARTTLSを導入する手順。
※ Ubuntuのバージョンは「cat /etc/lsb-release」で取得できる。
  postfixのバージョンは「/usr/sbin/postconf | grep mail_version」で取得。

  1. postfixのSASLは設定済み(とする)
    $ sudo nano /etc/postfix/main.cf
    # 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
    
  2. dovecot側のSASLも同様(設定済みとする)
    $ sudo nano /etc/dovecot/dovecot.conf
      socket listen {
        client {
          path = /var/spool/postfix/private/auth-dovecot
          mode = 0660
          user = postfix
          group = postfix
        }
      }
    
  3. TLS の設定。認証局を作成してくれるスクリプトの保存先を demoCAから postfixCAへ変更。
    $ cd /usr/lib/ssl/misc
    $ sudo nano CA.pl
    
    #$CATOP="./demoCA";
    $CATOP="./postfixCA";
    
    $ sudo nano /usr/lib/ssl/openssl.cnf
    
    #dir            = ./demoCA              # Where everything is kept
    dir             = ./postfixCA           # Where everything is kept
    
  4. private keyを作る。(一部伏字)
    $ sudo ./CA.pl -newca
    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
    
  5. もう1回 private keyを作る。(なんでだ?)
    $ cd postfixCA/
    $ sudo openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem -days 365
    
    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 []:
    
  6. CSR に認証局の証明書で署名。
    $ sudo sh -c "echo '00' > serial"
    $ 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
    
    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
    
  7. ファイルの配置&postfixリスタート
    $ 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
    
     * Stopping Postfix Mail Transport Agent postfix
       ...done.
     * Starting Postfix Mail Transport Agent postfix
       ...done.
    
  8. これでOK(のはず)

IE8とIE7互換モードで1ピクセルくらいずれることがよくあって、いちいち IEハック入れるの、面倒臭いなぁと思っている貴方!
もうそんな人はいないと思いますが、もしいたら騙されたと思ってコレを headerに入れてみてください。

<meta http-equiv="X-UA-Compatible" content="IE=8" />



IE8から互換モードの切替えボタンが消えるので、IE7互換モード対応はしなくてよくなります。
やったねパパ。 もちろん、IE7、IE6、・・・はガン無視ということで。
“IE=Edge” という手もありますが、IE9がメジャーになったときズレズレだったらヤだしね。
 
※ ちゃんとした知識が欲しい人は、こちら ⇒ WordPressテーマ “iNove” とIEの互換表示モード をどうぞ。

キーワード
この記事は、さくらのVPS、Ubuntu 10.04、引越し、Apache+PHP+MySQL+WordPress+EC-CUBEなどのキーワードで参照されます。

ここ1週間にあったこと
・2011/3/11 14:46 東北関東大震災が起きる。日時を忘れてしまわないように記録。犠牲になられた方に合掌。
・3/11発生当日は深夜1時まで停電。情報は手回し充電ラジオで。
・電気がついたところで飛び起き、まずサーバの確認。大丈夫だ。それから情報収集。大惨事。
・起動スクリプトに漏れがあったところなど、次に停電になったとき、アタフタしないようにチェック。
・こんなときに限ってUPSのバッテリー切れ(故障)でシャットダウンできなかったので、すかさず新しいUPSを注文。
・計画停電が始まる。1日のうち、6:20~22:00までを5つに区切ってブロックごとに停電させるシステム。
・うちは第3ブロックで初日(3/14)こそ停電しなかったものの、2日目以降は毎回停電。
・一日3時間、午前開始のときは6時間停電するのは、サーバを公開している体制としてはあり得ない。
・しかも4月以降も続くらしいので、ここ(横須賀)で自家発電なしにサーバを公開するのは限界。
・さくらのVPSはデータセンターが大阪(堂島)にあって、そのうち、北海道(石狩)と東京にもできるらしい。
・将来的には3か所借りておけば、負荷分散+耐障害性としてもいいだろうということで、さくらのVPSに決定。

やること
・いまのサーバ(Ubuntu 9.04 i386)をVPSサーバ(1.5GB、Ubuntu 10.04 amd64)へ移す。
・EC-CUBEを使っているお客様のみ、単独サーバ(1.0GB、Ubuntu 10.04 amd64)へ移す。
・この際だから、Apache+PHP を nginx+PHP(FastCGI)にしたかったんだけど、最後の方の挙動がおかしくて断念。
・とりあえず、枯れた構成でいくことにした。

以下、不親切な作業記録(あとで自分が見るためだけのものともいう)

  1. さくらのVPS申込み等
    • 『さくらのVPS』アフィリエイト
       時間に余裕があるときは、A8.netでアフィリエイトを申し込んでおく。本人可。ただし審査あり。
    • Java Runtime Environmentのインストール
       VPSコントロールパネルからのインストールに必要。先にやっておくこと。
    • さくらインターネット会員メニュー
       https://secure.sakura.ad.jp/menu/top/
       契約情報 > 契約サービスの確認 > さくらのVPS 1.5G > サーバ設定
    • VPSコントロールパネル
       https://secure.sakura.ad.jp/vpscontrol/main/
       OS再インストール > カスタムOSインストールへ > OS選択 > Ubuntu10.04 amd64
       ※ VPSコントロールパネルログインのパスワードとサーバ・ログインのパスワードは違う。
         VPSコントロールパネル上部にパスワード変更ボタンあり。
  2. Ubuntu10.04インストール&基本設定
    • Ubuntu10.04 amd64 インストール
       ここを見ればほぼOK。さくらのVPSにUbuntu 10.04をインストール
       ※1 ネットマスクの入力ミスに注意 ⇒ 255.255.254.0
       ※2 1.0GB以上は仮想ディスクが2つですが『Guided – use entire disk』にします。sdbは別マウント。
       終わったら、1分弱待ってから、VPSコントロールパネルから起動でOK
  3. sshログイン
    • 最初は TeraTerm等でプレーンパスワード・ログイン(ポート22番)
    • パスワードログインできなくしておく
       ※ サーバ側で公開鍵と秘密鍵を作って、秘密鍵(id_rsa)はクライアントのTeraTermのところに保存しておく。(cat .ssh/id_rsa とでもして、コピペでファイル書き出し)

      $ 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
      
  4. 不要なサービス等を止める
    • gettyを止める
      Ubuntu 10.04 Beta 版で不要なサービスを停止してみる。

      $ sudo nano /etc/default/console-setup
         ACTIVE_CONSOLES="/dev/tty[1-2]"
      
      $ 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
      
  5. 環境についてと2台目の仮想ドライブ
    • ルートのパスワードを設定など
      $ 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ではないけど、あれば便利
      
    • 2台目の仮想ドライブをマウント
      OSを再インストールしても仮想ディスクの中身までフォーマットされるわけじゃない。
      sdbはそのまま残ってるので注意。(失敗したと思って何回もやり直さないこと)

      # 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
      
  6. インストールプログラム
    • apache2 + php5 + mysql
      $ 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
      
  7. ドメインの設定
    • DNSレコードの変更
      ドメインをレジストラ(お名前.com、ムームードメイン等)で管理しているのであれば、DNSのAレコードを変更する。
    • DNS逆引きレコードを設定
      さくらのVPSコントロール画面で、ホスト名を変更する。
  8. rsync
    • 旧サーバから新サーバへのお引越しには rsyncを使う。
      新サーバに余計な設定を残さないよう、旧サーバ側をクライアントにしてアクセス。
      ※ 以下、c# はクライアント側ルート、s# はサーバ側ルート。

      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/
      
  9. apache2
    • apache2のテスト・・・デフォルト
      なにも設定せずに、/var/www/index.htmlが表示できたらOK。

      $ wget http://example.com -O -      # 標準出力に吐き出すオプション
      長さ: 177 [text/html]
      `STDOUT' に保存中
      <html><body><h1>It works!</h1>
      <p>This is the default web page for this server.</p>
      <p>The web server software is running but no content has been added, yet.</p>
      </body></html>
      stdout へ出力完了 [177/177]
      
    • apache2のテスト・・・example.com
      $ sudo nano /etc/apache2/site-available/my_site
      #NameVirtualHost *:80            # ドメインが1つしかないときはいらない
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/example.com/
      </VirtualHost>
      
      $ sudo a2ensite my_site
      Enabling site my_site.
      
      $ sudo service apache2 restart
      
  10. proftpd
    • proftpdのインストールと設定
      うまくいかないときは、/var/log/proftpd/proftpd.log にエラーがあるはず。
      ※ Ubuntu 10.04でインストールされる proftpdは 1.3.2c で、脆弱性(Telnet IAC stack overflow vulnerability (ZDI-CAN-925))があります。最新版(1.3.3d)をインストールするのがベストですが、自分でできない場合は Ubuntu用パッケージが出回るまで接続元IPアドレスを制限するなどの対応をしてください。

      $ sudo aptitude install proftpd
      from inetd           # 常駐しない設定
      
      $ export TZ="JST-9"        # これがないとFTPでファイルを書くときの時間がずれる
      $ sudo nano /etc/environment
      export TZ="JST-9"         # 起動時もセットしておく
      
      $ 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
      <Limit LOGIN>
        Order allow, deny
        Allow from 127.0.0.1, IP-ADDRESS      # 許可するIPアドレス
        Deny from all        # 自サーバのグローバルIPはwordpressのプラグイン・インストールで必要
      </Limit LOGIN>
      DefaultRoot             /www/USER_DIR              USER
      DefaultRoot             !ADMIN_USER
      <Directory /www/USER_DIR/*>
        AllowOverwrite on
        Umask 000
        <Limit WRITE >
          AllowAll
        </Limit>
      </Directory>
      
      $ 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.
      
  11. phpMyAdmin
    • 定番のphpMyAdminのインストール
      危ないので、接続元を制限する。

      $ sudo aptitude install phpmyadmin
      $ sudo nano /etc/phpmyadmin/apache.conf
      <Directory /usr/share/phpmyadmin>
          Order deny,allow                    # この3行を追加する
          deny from All
          Allow from IP-ADDRESS        # 許可するIPアドレス
      
      $ sudo service apache2 restart
      
  12. WordPress
    • WordPress 3.1 日本語版をインストール
      $ 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> create database DATABASE-NAME;
      mysql> create user USER-NAME@localhost identified by 'PASSWORD-USER';
      mysql> grant all on DATABASE-NAME.* to USER-NAME@localhost;
      mysql> 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 "\.(gif)|(jpg)|(jpeg)|(JPG)|(png)|(bmp)|(ico)|(css)|(swf)$" nolog
      SetEnvIf User-Agent "Gigabot" nolog
      SetEnvIf User-Agent "Googlebot" nolog
      SetEnvIf User-Agent "MJ12bot" nolog
      SetEnvIf User-Agent "msnbot" nolog
      SetEnvIf User-Agent "psbot" nolog
      SetEnvIf User-Agent "TurnitinBot" nolog
      SetEnvIf User-Agent "Yahoo! Slurp" nolog
      SetEnvIf User-Agent "Zealbot" nolog
      SetEnvIf User-Agent "Baiduspider" nolog
      SetEnvIf Request_URI "\.(ida|IDA|exe|printer|asp|dll)" nolog
      SetEnvIf Request_URI "^/_mem_bin/" worm nolog
      SetEnvIf Request_URI "^/_vti_bin/" worm nolog
      SetEnvIf Request_URI "^/c/" worm nolog
      SetEnvIf Request_URI "^/d/" worm nolog
      SetEnvIf Request_URI "^/msadc/" worm nolog
      SetEnvIf Request_URI "^/MSADC/" worm nolog
      SetEnvIf Request_URI "^/scripts/" worm nolog
      SetEnvIf Request_URI "^/default.ida" worm nolog
      SetEnvIf Request_URI "root\.exe" worm nolog
      SetEnvIf Request_URI "cmd\.exe" worm nolog
      SetEnvIf Request_URI "NULL\.IDA" worm nolog
      SetEnvIf Request_URI "^/cgi-bin/" nolog
      SetEnvIf Request_URI "robots\.txt" nolog
      SetEnvIf Request_Method "(GET)|(POST)|(PUT)|(DELETE)|(HEAD)" log
      SetEnvIf Request_Method "(OPTIONS)" nolog
      
      $ sudo nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/wordpress/
        Include ./sites-available/include/wordpress
      </VirtualHost>
      
      $ 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’ );
      
      
      
  13. postfix & dovecot
    • 順番が違うようだが、メール環境を整備
      $ 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
      
  14. 旧IPへのアクセスを新IPへ振り替える
    • リバースプロキシの設定
      $ 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
      <VirtualHost *:80>
        ServerName example.com
        ProxyPass / http://example.com/
      </VirtualHost>
      
      $ 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
      
  15. ドメイン引越しまとめ
    • 旧サーバから新サーバへの引越し
      いろいろ面倒なのでルート権限で操作。以下 o# は旧サーバ、n# は新サーバ

      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の設定
      <VirtualHost *:80>
        ServerName example.com
        ServerAlias *.example.com
        DocumentRoot /www/example.com/
      </VirtualHost>
      
      n# service apache2 restart        # ここまでやってからDNSレコードを書き変える
      
      o# nano /etc/hosts
      xx.xxx.xx.xxx  example.com         # 新しいサーバのIPアドレスを書く
      
      o# nano /etc/apache2/sites-available/my_site
      <VirtualHost *:80>
        ServerName example.com
        ProxyPass / http://example.com/
      </VirtualHost>
      
      o# service apache2 restart
      
      o# nano /etc/postfix/transport
      
  16. 続き
    • 続き
      
      
  17. 続き
    • 続き
      
      
  18. 続き
    • 続き