Monthly Archives: 9月 2010
qmailでバーチャルドメインのメールを全て受け取りphpに渡す
qmailでバーチャルドメインを設定するには、
「/var/qmail/control/morercpthosts」「/var/qmail/control/virtualdomains」などでできますし、
存在しないメールアドレス宛てのものを全部受け取るのは、「/var/qmail/alias/.qmail-default」でできます。
では、virtualdomainsで複数のドメインが指定されていて、その中の1個のドメインのみ
個別のメールアドレスを作らず、ドメインが一致していれば(@の後が同じなら)
どんなメールアドレスでも受信できるようにするには、どうしたらいいだろう。
まずは、qmailで利用しているメールアカウントは、/etc/passwdで管理されている前提でいうと、
***@example.com 宛のメールだとすれば、
「/var/qmail/control/virtualdomains」に以下のような記載をします。
example.com:example.com
※コロン「:」の右側はお好きなもので指定してください。
次に、「/var/qmail/control/morercpthosts」に以下のような記載をします。
example.com
次に、通常aaa@example.comなどのメールアドレスを作成する場合には、
/usr/sbin/useraddコマンドで、
「example.com-aaa」(virtualdomainsの[:]の右がexample.comなら)というアカウントを作成しますが、
特定のメールアドレスではなく、動的に作成される可変のメールアドレスを扱う場合には、
@の前が何になるかわからないので、「example.com」(virtualdomainsの[:]の右による)というアカウントを作ります。
次に、作成したアカウントのディレクトリ(/home/example.com/を例にする)に.qmail-defaultを作成します。
/home/example.com/.qmail-default
| /usr/bin/php /home/example.com/abc.php
上記の例だと、***@example.com宛にメールが着たら、毎回/home/example.com/abc.phpという
phpのプログラム(スクリプト/実行ファイル)がキックされ、動作することになります。
このphpのプログラムの中で、メールの内容を読み取るためには、事前にpearモジュールを
インストールしておく必要があります。
pear install Mail_Mime
pear install Mail_mimeDecode
これで以下のようなクラスを作成して呼び出せば、ガバっと取れますね。
<?phprequire_once(“Mail/mimeDecode.php”);class receiveMail{/*** コンストラクタ*/public function __construct(){}/*** get*/public function get($input){public $receiveParams;$params['include_bodies'] = true;$params['decode_bodies'] = true;$params['decode_headers'] = true;$params['crlf'] = “\r\n”;$params['input'] = $input;$mail_data = Mail_mimeDecode::decode($params);#– From フィールドの取得$this->receiveParams['from'] = $mail_data->headers['from'];#– To フィールドの取得$this->receiveParams['to'] = $mail_data->headers['to'];#– Subject フィールドの取得$this->receiveParams['subject'] = mb_convert_encoding($mail_data->headers['subject'], “UTF-8″, “JIS”);#– 本文の取得$this->receiveParams['body'] = mb_convert_encoding($mail_data->body,”UTF-8″,”JIS”);return $this->receiveParams;}}
簡単に呼び出し元も書いておく。
require_once(“./receiveMail.php”);
$receiveMail = new receiveMail();
$input = file_get_contents(“php://stdin”);
$mail = $receiveMail->get($input);
これでやりたかったことを、ひとまず出来上がりっと。
jQueryで「Uncaught ReferenceError: $ is not defined (anonymous function)」
別サイトで使ってるものを移植したらjQueryの一部挙動がおかしくなった。
具体的には「動かない」ということになったんだけども、
原因をしらべようとFirebug先生にお聞きしたら、以下のエラーがでてた。
Uncaught ReferenceError: $ is not defined (anonymous function)
というエラーを教えてくれました。
ようするに、jsを外部から読み込むとかの場合には、まずはjQueryのから読み込んでおけよということでした。
なんで、
変更前
<script type=”text/javascript” src=”js/abc.js”>
<script type=”text/javascript” src=”js/jquery.min.js”>
だったのを
変更後
<script type=”text/javascript” src=”js/jquery.min.js”>
<script type=”text/javascript” src=”js/abc.js”>
に変更して、正常動作を確認しました。
なんてこったい。
yumでインストールしたApache2にmod_sslを足してhttpsを実現する
ちょっと単純にhttpsを使いたいというより、別の目的のためにhttpsが必要になったので、
mod_sslを利用して、httpsを実現しようと思います。
前提として、yumでhttpdが入っていて、正常に動作すること。とします。
まずは、mod_sslをyumでインストールします。
※opensslがないようなら、別途インストールしてください。
yum install mod_ssl
次にApacheで利用する証明書を生成します。
(お金があるなら信頼性が高い第3者機関の正式な証明書をVerisignやGlobalSignなどから購入すると良い)
まずは、秘密鍵を生成します。
mkdir /etc/httpd/key
cd /etc/httpd/key
openssl genrsa -des3 -out server.key 1024すると、パスフレーズを聞かれる画面がでます。
Enter pass phrase for server.key: aaaaa (※自分だけわかる適当なパスフレーズを打ち込んでください)
Verifying – Enter pass phrase for server.key: aaaaa (※確認画面にも同様のパスフレーズを打ち込む)
次にCSRファイルを作成します。本来はこれを第3者機関に提出し、信頼できる証明書を発行してもらいます。
openssl req -new -key server.key -out server.csr
するとまた質問が出るので、1個ずつ回答します。
(※先ほど作成したパスフレーズを打ち込みます)
Enter pass phrase for server.key: aaaaa(※国を聞かれています。私は日本なのでJPです)
Country Name (2 letter code) [GB]: JP(※州・県を聞かれています。福岡なのでFukuokaです)
State or Province Name (full name) [Berkshire]:Fukuoka(※市を聞かれています。福岡近郊なのでFukuokaにしちゃいます)
Locality Name (eg, city) [Newbury]:Fukuoka(※会社名を聞かれてます。法人じゃないけど、Hattaraといれちゃう)
Organization Name (eg, company) [My Company Ltd]: Hattara(※部署名を聞かれてますが、部署はないので、部署ある人だけ入力ください)
Organizational Unit Name (eg, section) []:(※証明書のドメイン名を入力します。)
Common Name (eg, your name or your server’s hostname) []:hattara.info(※メールアドレスを書かれます。いれたければ、入力してください。)
Email Address []:(※パスワードの入力を求められますが、特に指定する必要なさそうなので、スルーです。)
A challenge password []:(パスワードの確認画面もスルーです。)
An optional company name []:
そして、本題の証明書を作成するわけですが、
上記でも書いてある通り、貧乏な私は、第3者機関の信頼できる証明書を生成するお金がないので、
自己証明(オレオレ詐欺ならぬ、オレオレ証明書)を生成します。
とりあえず100年くらい持つ証明書を生成しておきます。
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 36500
するとまた、見慣れた表示がでます。
Enter pass phrase for server.key: aaaaa (※先ほど入力したパスフレーズを入力してください)
これでとりあえず自己証明書が生成完了したことになるわけですが、
このままだとApacheの再起動のたびにパスフレーズを入力するはめになるので、
秘密鍵からパスフレーズを削除します。
mv -i server.key server.key_backup
openssl rsa -in server.key_backup -out server.keyすると、いつもどおりパスフレーズを聞かれるので、入力する
Enter pass phrase for server.key_backup: aaaaa (※先ほど入力したパスフレーズを入力)
これで本当にSSL証明書の生成フェーズは完了。
こっからは、Apache側でhttps起動してくれるように設定します。
cd /etc/httpd/conf.d/
cp -p ssl.conf ssl.conf_backup (※一応バックアップとっておきましょう。たしなみですね。)
vi ssl.confまずは、秘密鍵の設定を修正します。
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
↓
SSLCertificateKeyFile /etc/httpd/key/server.key次に証明書ファイルの設定を修正。
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
↓
SSLCertificateFile /etc/httpd/key/server.crt※一応Apacheの設定に問題がないかを確認する。
/etc/rc.d/init.d/httpd configtest結果が、「Syntax OK」なら問題なし。
最後にApache自体を再起動させてあげれば完了。
/etc/rc.d/init.d/httpd restart
Corega間でルータを移設したらLAN内から自宅サーバに接続できない
もともとCorega(アライドテレシス)のWLBARGP(WL-BAR-GP)を利用していたのですが、
自宅サーバでHTTPSを利用するためにポートをあけようとしたら、
熱暴走か何かわからないが、全然更新がかけられなかったため、
移設を簡単にする目的と、Buffaloがiphoneと相性問題が出ることがあるとAppleのジーニアスに聞いたのとで、
同じCoregaのCG-WLR300GNEに移設することにしました。
コレガ(アライドテレシス) IEEE802n.11n/g/b規格対応 無線LANルータ 有線ポートオールギガ/DLNA USBポート/WPS CG-WLR300GNE 新品価格 |
何がいいかというと、USB経由でプリンターだったりHDD(Disk, ハードディスク)などを共有できる。
実際は共有ファイルサーバがあるので、当分は使わないだろうが、拡張性があるのと、
内部ネットワークがギガ接続にできる(有線のサーバに最適)で300Mpbsの無線があるので、
これにしました。
で、もともとWLBARGPでは、DMZは利用せずにバーチャルサーバ的なものだけで
自宅サーバ用のポートをあけて、ポートフォワードしていたのですが、
CG-WLR300GNEで同じ設定にすると、何やら挙動が怪しい。
外部から自宅サーバに接続すると問題なさそうだし、
単体で処理が終わる静的なファイルなどは問題なさそうなのだが、
自宅サーバ内の別のサイトからXMLデータを引っ張ったり、
同じサイト内でもCSSなどの別ファイルを読み込むものがうまく挙動しない。正常動作しない
具体的な原因についてはわかりませんが、
ファイアフォールなどのセキュリティ関連のポリシーが更新されているのではないだろうか。
いろいろと悩んだ結果、やむなくルータ側のセキュリティが動作しないDMZで設定することにしました。
すると、問題なく自宅内(LAN内)から自宅内(自宅サーバ)への接続が高速でできるようになりました。
とりあえずどうにかなってよかった
ちなみに自宅内から自宅内サーバには接続できないのが本来の動きだと思います。
結局OUTとINのグローバルIPが同一になるからとかいう理由じゃないかと思います。
調べた感じだと、CoregaとBaffaloは可能だが、NecとかPlanexとかは駄目らしい。
Apple wireless keyboard helperのFnキーで画面ロック
昨日Apple Wireless KeyboardをWindows XPで利用するための内容を書きましたが、
使ってて困ったことが1個ありました。
Apple wireless keyboard helper for windows(AppleWirelessKeyboardHelper: AWKH?)では、
Fnキー(ファンクションキー:function key)が利用できるのですが、
Fnキーと左方向キーでホームキー(Home key)になるのですが、その直後に画面ロックされ、ログイン画面に戻されます。
なんでかなぁと思い、Fnキーだけ押してみましたが、
同様に画面がロックされてしまいました。
エラーは特にでなかったのですが、何かするたびにちゃんとホームにはいくものの
画面ロックされるというのを繰り返すはめになりました。
結局色々いじりましたが、最終的にはパソコン自体の再起動で直りました。
めでたしめでたし。
(たぶんPythonのpassというのを利用しており、これがいわゆるnull operation(ヌル操作)的な
何も処理させないという内容なんですが、ここが動かないという感じだったのではないかと思います。)
Apple Wireless Keyboard (JIS) MC184J/A 新品価格 |
Windows XPでApple Wireless Keyboardを利用する。
さて、自宅のメインパソコンを自作WindowsXPからiMacに変更したわけですが、
これに伴って、キーボードの配置が変わったわけですよ。
そうなると、効率悪いので揃えたくなってくるわけですよ。
ということで、Windowsのマシン(パソコン)でも
キーの配置が一緒でBluetoothという配線のない無線状態で利用できる
Apple Wireless Keyboardを試します。
まずは、なんといってもBluetoothの物理的なモジュールが必要です。
今使ってるパソコンにはBluetoothが存在しないので、
BluetoothのUSBアダプタ(USBレシーバーとかトングルとか言う)を準備しました。
Bluetoothは、Class1が100m、Class2が10m電波が届く仕様のようで、
今回は、必要ないけどとりあえずClass1の↓を利用します。
princeton PTM-UBT5 (Bluetooth USB Adapter)
まずは、BluetoothのUSBアダプタをパソコンのUSBポートにさします。
すると勝手にWindows内にあるBluetoothのアダプタと紐付けしてくれます。
付属の手順書には、CD-ROMから入れろというのがあるのですが、
それだとうまく動かないという話もどこかに書いてあったので、
とりあえずデフォルトのドライバーを利用します。
すると、Windowsの右下(時間や起動中のアプリが表示されてるところ)などに、
Bluetoothの青い枠のなかに、白い線?が書いたアイコンがでてきます。
これをクリックして、「オプション」の「発見機能を有効にする」をクリックして、
「OK」を押します。
次にApple Wireless Keyboardのスイッチを入れます。
そして、もう一度Bluetoothの設定画面を開くべく、
左下の「スタート」から「コントロールパネル」の「Bluetoothデバイス」を開き、
「デバイス」タブの「追加」を押し、ウィザードを開始します。
まずは、
「セットアップを完了し、デバイスは発見可能になりました」にチェックし、
「次へ」を押します。
すると、Bluetoothのデバイス検索がはじまり、
検索結果の中に「apple wireless keyboard」があるので選択して「次へ」を押します。
次に複数の選択画面があるので「自動的に選択されたパスキーを使用する」を選択し、
「次へ」を押します。
「Bluetoothデバイスに今すぐパスキーを入力してください。」という文言と
パスキーが表示されますので、「apple wireless keyboard」側で値を入力しEnterを押します。
成功すると、
「Bluetoothデバイスの追加ウィザードの完了」画面で、「コンピュータに接続されました」という
メッセージが表示されるので、「完了」を押したら、接続は完了です。
————–
ここまでで接続は完了なんですが、このままでは使い勝手が悪いです。
各種キーが思い通りの動きをしないからです。
同僚は「窓使いの憂鬱」というのを利用されてるようなのだが、
「開発は終了いたしました。」というのが強調されていたので、
とりあえず「Apple wireless keyboard helper for windows」を入れてみる
http://www.misuzilla.org/dist/net/applewirelesskeyboardhelper/
まずは、「AppleWirelessKeyboardHelper-20091230.zip」というファイルをダウンロードして
圧縮されているものを解凍します。
解凍したファイルから「AppleWirelessKeyboardHelper.exe」を実行したら完了です。
とりあえずこれで利用してみて、ダメそうだったら、「窓使いの憂鬱」を検討しようと思う。
Apple Wireless Keyboard (JIS) MC184J/A 新品価格 |