オタク日記

(Mac と Linux, 2013Q4)

目次

2013-12-29 (Sun): NTT さん、お願いしますよ
2013-12-25 (Wed): XQuartz 導入の後始末と MacPorts
2013-12-18 (Wed): Wireshark で WiFi Packet Capture
2013-12-14 (Sat): 新自宅サーバ(その 7)— Security と「まとめ」
2013-12-04 (Wed): 新自宅サーバ(その 6)— Spambayes + Mailman
2013-11-30 (Sat): 新自宅サーバ(その 5)— Postfix + Dovecot
2013-11-23 (Sat): 新自宅サーバ(番外編)— Mail 環境
2013-11-13 (Wed): 新自宅サーバ(その 4)— Apache-2.4
2013-11-07 (Thu): 新自宅サーバ(その 3)— Dynamic DNS
2013-11-01 (Fri): 新自宅サーバ(その 2)— 再インストール
2013-10-30 (Wed): WLAN ルータを新しくした
2013-10-20 (Sun): ThinkPad で新自宅サーバ(その 1)
2013-10-17 (Thu): iPhone 5C で Tethering(再訪)
2013-10-12 (Sat): iPhone 5C で Tethering
2013-10-11 (Fri): 身辺雑事
2013-10-05 (Sat): Django 版 DMS 再訪(その3—まとめ)
2013-10-02 (Wed): Lion 再インストール、その後

古い日記: 2013Q3   2013Q2   2013Q1  
2012 年   2011 年   2010 年   2009 年   2008 年   2007 年  
2006 年   2005 年   2004 年   2003 年   2002 年   2001 年


2013-12-29 (Sun): NTT さん、お願いしますよ

NTT さんの電話セールスに絆されて、つい加入した Flet's Spot だが、最初から印象は今一。 無料で試用できる期間が、申込みから一月あまりも先というのが既に「何だかなあ」で、 その頃には予想どおり忘れていた。 (但し、「何の連絡もない」は、 遅られてきた A4 の封筒を自分が見逃していただけ……ごめんなさい。)

気を取り直して、再度電話で聞き直して、MBA を設定。 (認証方式が二種類有るというのが、また何とも。) しかし使える hot spot があまりにも少ない。町内には一箇所。 (駅前のファミレス……。そう言えば、四国の某市も、 ショッピングセンター内にある MacDonalds が唯一の hot spot だった。) また、新宿・渋谷・立川あたりで、Flet's Spot の AP が見付かる事は滅多にない。(DoCoMo さんや、SoftBank さんのばっかり。)

既に「何これ」レベルだが、いやいや、元々本当の狙いはそこにはない。 だって、iPhone の Tethering ができるんだから、 外出先でインターネット接続するには、それで十分。 なので Flet's Spot に期待したのは、新幹線の中で使える事だった。勿論、 iPhone Tethering は新幹線の中でも使えるが、 トンネルの中では接続が切れる事が多かったので、 そこいらを何とかしてくれるのでは?と期待した訣だ。

で、ようやく試す機会がやってきたのだが…… まず、user-ID/password を要求される。あの面倒臭い MAC アドレスの登録は何だったの?と思うが、まあ仕方ない。 しかし、接続できても、転送速度、応答速度が滅茶苦茶遅い。 Remote login した時の echo back が、3 文字以上遅れてしまう程。

それでも……と我慢して使っていたが、 列車が最初のトンネルに入ったらあっさり応答が止まってしまった。 正に「あ〜あ」状態(この一点にかけて我慢してきたのに。)

そこに追い討ち。(忘れていたが)新幹線の WLAN サービスは大阪までなのね。

という事で、大変「失望」したので Flet's Spot はもう「やめ」にする。


2013-12-25 (Wed): XQuartz 導入の後始末と MacPorts

Wireshark をちゃんと働かせるために、という事で、xorg-server を入れ、他の付帯的なパッケージも入れてしまったのだった。 しかし、「xorg-server (XQuartz) と Wireshark をどちらも MacPorts 版にしないと動かない」というのは、 どうやら勘違いだったようで、先にも書いたように Binary 版の XQuartz + Wireshark に戻した。 という事で xorg-server はまるっきり無駄になってしまった訣だが、 とりあえず放置しておいても実害は無かろう……。

と思ったのは大甘だった……その後の MacPorts の upgrade で、いきなり cario/pango/gtk2 が引掛った。 このあたりは依存関係がとっても入り組んでいるので、 かつては、「MacPorts 全体の再インストール」なんて事もやったが、 いつまでもそんな事をやっていてはいけないだろう、という事で、 ちょっとムキになって依存関係のもつれの解消方法を追及してみた。

で、辿りついた「解消方法」は

  1. inactive なパッケージを削除 (% sudo uninstall inactives) << これで随分手間が省ける。
  2. X11 の大物アプリ (gnuplot, wine-devel) をまず uninstall.
  3. % sudo uninstall leaves% sudo uninstall unrequested を繰返し実行する。
  4. % sudo uninstall pango cairo xorg-server としてみて、これに依存している package が無いか確認。有れば、それらを uninstall。
  5. 上記 3. を再度実行。
  6. gnuplot を install.
得られた知見の内、特に重要と思われるのは 等々。 という訣で、MacPorts に関するスキルはかなり向上した訣だが、 一方で、MLterm や urxvt, はたまた wine-devel に拘りたい(遊びたい)! というオタク的欲求を抑えるのに苦労するようになった。 (実は、もうやってみたのだが、 依然として X11 のフォントのレンダリングが不味いので、深入りせずに済んで いる :-p)

2013-12-18 (Wed): Wireshark で WiFi Packet Capture

>> 2013-12-19 (Thu): 改訂 (追記)

われも工房としては、勿論 Wireshark は必須のツールなのだが、 諸般の事情によりかなり蔑ろにしてきた。というのも、歴代の ThinkPad の WLAN H/W はどれも「外れ」だった上に、Linux はサーバ用のみ、になってきていたから。

しかし、最近「かくてはならじ」と思うようになって、色々ちょっかいを出すのだが、 あまりうまく行かない。Lion on MacPro(Quadra) では、何とか動くようにできていたが、肝腎の WiFi I/F を持った ML on MacBook Air (Hawk) では、インストールさえ上手く行かない……。おまけに SourceForge のバイナリが MacOSX 用と銘打ちながら、実は Windows 用だったりして、 もうすっかり嫌気がさしていた。

しかし、ここにきて急転直下、あっさり実現した。 実は MacPorts を update していて気がついたのだが、最近 Wireshark (以下 WS) が、1.10.4 になったらしい。先に書いた SourceForge の混乱ぶりに「何これ」と憤ったのはつい先日の事だが、その時 WS はまだ 1.10.3 で、MacPorts に至っては 1.10.2 だった。しかし、その直後に本家では、1.10.4 になり、またその後すぐに MacPorts にも反映された、という事らしい。 (ったく、私の四苦八苦は何だったんだ?)

また X11.app についても大きな混乱が有った。MacPorts の xorg は、update の際頭痛の種なので、MacPorts もその他のアプリも X11.app や Xorg-server に依存するものを避けてきたのだが、Wireshark はそうも行かない。 で、あちこち見ていると、最早 X11.app はサポートされず、その代わりに XQuartz.app が推奨されているらしい。(しかも、X11.app と共存する!)それだけでも相当ややこしいのに、MacPorts で xorg-server をインストールすると、XQuartz.app と全く同じアイコンができる、 ったくもう……

という訣で、実際には相当右往左往したが、MacPorts だけでうまく行くはず、という前提でやった事をまとめておく。

fukuda@hawk:~% sudo port install cairo@+x11 pango@+x11      # *1)
fukuda@hawk:~% sudo port install xorg-server
fukuda@hawk:~% sudo launchctl load -w \
         /Library/LaunchDaemons/org.freedesktop.dbus-system.plist 
fukuda@hawk:~% launchctl load -w \
         /Library/LaunchAgents/org.freedesktop.dbus-session.plist 
    # log-off/log-in(back)                                  # *2)
fukuda@hawk:~% sudo port install wireshark                  # *3)
fukuda@hawk:~% /opt/local/bin/wireshark                     # *4) 
  1. *1): できるだけ X11 を避けてきたので +no_x11 の cairo と pango になっていた。 もし最初から xorg-server 入れるのなら必要ないかも。
  2. *2): これは必須。特に、Binary 版の XQuartz が入っている時は、これをやらないと「大混乱」の元。
  3. *3): make に滅茶苦茶時間がかかる
  4. *4): MacPorts 版である事を明示的に指定するために full-path で(最初だけ。)
これで、自動で MacPorts 版の XQuartz が立ち上がり、 続いて Wireshark が立ち上がる。(これもかなり時間がかかる。)

【2013-12-19 (Thu): 追記】 以上でうまく行ったと思ったが、何の事はない、件の「大混乱」はまだ続いていた。 ps -ax で表示される /opt/X11/... のコマンド群が、てっきり MacPorts 版の xorg-server だと思っていたが、それは初歩的な勘違いで、それは macosforge 版の XQuartz だった *^^*。 で、改めて再確認してみたが、 以下の組み合わせのどれでも、Monitor mode に入れる事も含めて問題なく動くようだ。
  1. macosforge 版 XQuartz + binary 版 WireShark
  2. macosforge 版 XQuartz + MacPorts 版 WireShark
  3. MacPorts 版 xorg-server + MacPorts 版 WireShark
つまり、Monitor mode 云々について、上の 3. で検証したつもりだったが、実は 2. が動いていたというお粗末。あらためて確認してみたら、1. でも 3. でも OK で、違いは、gtk のフォントと、dbus-system/ dbus-session の Interface の有無くらい。 もっと言うなら、MacPorts で統一する必要性は全く無い……。

こうなると、これまで通り MacPorts の X11 (xorg) は避ける事にしたい、 つまり 1. で行きたい。要は、XQuartz も Wireshark も .dmg ファイルからインストールしたものを使って行く、という事。

また、以下のステップは、どの場合でも必要かつ有効である。

ここまでは Quadra/Hawk 共通。以降は、WiFi I/F を持つ Hawk だけの設定。

と言っても、en0 I/F を 'Monitor Mode' にするだけであるが、しかし、これがまた分らずに半日潰した…… どこにもドキュメントされてないように思う。 要は、WS の Preferences Menu (スパナとドライバのアイコン) をクリックして、次のような pane を出し

Ceratification of waremo.com
default profile の Preferences pane
左端のメニューから Capture を選んで、Interface Edit... ボタンをクリックすると
Ceratification of waremo.com
Interface Option Pane
ようやく、夢にまでみた "Monitor mode check-box" が表われた。これにチェックを入れて、capture すると、
Ceratification of waremo.com
WiFi packet が取れた!
のように、802.11 レベルのパケットが (つまり、control packets も) 採取できた。

2013-12-14 (Sat): 新自宅サーバ(その 7)— Security と「まとめ」

大物は移し終えたかな、と思ってから、結構いろいろあった。

Crontab

移すついでに、久し振りに crontab の man ページを読んで、短かくスマートに書き直してみた……
SHELL=/bin/bash   # *1)
#PATH=/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin:
#PATH=/usr/bin:/bin is presumed
#HOME=/home/fukuda is presumed
MAILTO=root       # *2)
10 * * * * python ~/DynDNS/ipcheck.py -l -c -d ~/DynDNS --syslog -r checkip.dyndns.org:8245 --acctfile ~/DynDNS/account  # *3)
12 * * * * echo `date -R` "--" `host otacky.jp 192.168.0.1 | grep otacky.jp`  >> ~/DynDNS/host.log  # *4)
14 7,20 * * *  sb_mboxtrain.py -d ~/.hammiedb -s ~/Maildir/.spambayes.spam -g ~/Maildir/.spambayes.ham > /dev/null # *5)
44 4 */2 * * python ~/scripts/sitemap_gen.py --config=sitemap/config.xml # *6)
32 14 * * * rsync -Cuav /var/www/  quadra:/Users/fukuda/eagle_bak/var/www/
33 14 * * * rsync -Cuav /usr/local/mailman/  quadra:/Users/fukuda/eagle_bak/usr/local/mailman/ 
  1. *1): こう指定しないと、'~' (tilda) 表記が使えない(前からこうだったっけ?というか、/bin/sh は、大分前から /bin/bash の symbolic link だったような?)
  2. *2): 従来通りに実行結果をメールで知らせるようにするには、これも必要。 (Postfix の aliases で root は fukuda に向けられている。)
  3. *3): DynDNS への一種の 'heart beat'... 今や、サイトのglobal IP は固定なので、DynDNS へアクセスする事は殆んど皆無。 (otacky.jp に加えて、waremo.com も確認するようにした。) また、ipcheck.py を最新版 (0.251) にした。
  4. *4) 一時間ごとに外部から見た時ドメインの IP を確認する、のが本旨だが、今やむしろ外部の DNS サーバにアクセスできるかどうかを確認しているだけになっている —— 固定 IP なので。
  5. *5) Spambayes のトレーニング。日に 2回に増やした。
  6. *6) これまで手でやっていた sitemap の作製と、その Google への通知を、crontab でやる事にした。 昔、google.com で「更新通知は一日一回以下」というのを読んだ気がするので、 余裕を見て一日おきにした。(ここで '--config=~/sitemap/config.xml' と書けないという事に気がつくまで大分悩んだ :-)

Wake-up on LAN

出先から sleep しているホストに login するには、 まずそのホストを起さないといけないが、 これをやるのに、自宅サーバに一旦 login して、そこから昔作った wake (結構やっつけ)で起すという方法を取っていた。 (Quadra(MacPro) には、その機能 (WoL: Wakeup on LAN) が有り、 system settings から enable できる。)

新しい WLAN Router になった時、router から直接起せるのではないか、と期待したが、 やっぱりその機能は備わっていなかった。 なので、新サーバでも従来通り wake を使って起す事にする。 幸い、wake は ('#!/bin/env python' '#!/usr/bin/env python' に変更するという事を除いて) そのまま動いてくれた。

fukuda@hawk:~% ssh otacky.jp             
Welcome to Ubuntu 13.10 (GNU/Linux 3.11.0-12-generic x86_64)
    .....
You have mail.
Last login: Fri Dec 13 11:14:49 2013 from quadra.otacky.jp
fukuda@lark:~% wakeup && ssh quadra
wakeup: host 'quadra' woke up! (after 3 calls)
Last login: Wed Dec 11 15:02:04 2013 from quadra.otacky.jp
fukuda@quadra:~% exit
Connection to otacky.jp closed.
fukuda@lark:~% 

Security

これまでのところでも、セキュリティに関しては旧サーバに比較して相当強化さ れている (と思う。)

Security−firewall

Ubuntu では iptables のフロントエンドとして ufw を使う事になっているらしい。最初は、また新奇な事を……と思ったが、 使ってみるとこれは素晴しい。iptables の面倒臭いところや嫌なところを全部補っているように思う。
fukuda@lark:~% sudo ufw enable     # *1)
fukuda@lark:~% sudo ufw limit ssh  # *2) 
fukuda@lark:~% sudo ufw allow 80   # *3) 
    .......
fukuda@lark:~% sudo ufw allow from 192.168.0.0/24 to any port 53  # *4)
fukuda@lark:~% sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         LIMIT IN    Anywhere   # *2)
80                         ALLOW IN    Anywhere
25/tcp                     ALLOW IN    Anywhere
993                        ALLOW IN    Anywhere
53                         ALLOW IN    192.168.0.0/24  # *4)
67                         ALLOW IN    Anywhere
8080                       ALLOW IN    192.168.0.0/24
443                        ALLOW IN    Anywhere        # *5)
22                         LIMIT IN    Anywhere (v6)
    ....
  1. *1): これだけで ufw による設定が有効になり、 再起動時にも自動で有効になる。
  2. *2): 旧サーバではどうしても実現できなかった ssh の頻度による制限であるが、Ubuntu ではこれだけで設定できてしまった……ちょっと感激。 30 秒間に 6回以上アクセスしてきたら、その IP からのアクセスを一定時間(実測によると 2 分くらい)拒否する、という事らしい (reject でなくて deny)。 おかげで、かつて一日に 10,000 回あまりも有った ssh port への「攻撃」が、今はせいぜい 100 回くらいになっている。 116.255.204.132
  3. *3): 最も普通に「port XX を開く」というコマンド
  4. *4): local network からのみアクセスを許す。 bind の設定ではうまく行かなかった(router を介して外から来る request の IP アドレスは local address になっていて弾けない)が、 ufw (iptables) ではちゃんと動く。(考えてみれば不思議。)
  5. *5): dovecot の conf ファイルの設定だけでは、何故か 143 へのアクセスを禁止できなかったが、ufw をイネーブルしてこれを塞ぐ事で禁止できた。

Security−SSL/TLS

Postfix や IMAP の ssl 化で SSL/TLS をさんざん弄ったが、 これは「自サーバの安全性を上げるため」 というよりは「ISP のサーバのセキュリティ対策に対応するため」 という面が強かった。

で、せっかく、SSL/TLS に関する感触がつかめたので、 何とかこれを自サーバのセキュリティ向上につなげられないか、とちょっとジタバタしてみた。

httpd (Apache2) に https を載せるのが、とりあえずの目標となったが、 ちょっと調べてみると Verisign 他の認証局で認証してもらおうとすると、 一年あたり 8 万円から 14 万円くらいもかかるらしい。 これはもう即座に没。

次に考えたのは、web base のサイト管理を SSL ごしにやる事だが、 この場合は「自分でサインした証明書」で十分の筈。 これは「オレオレ証明書」と呼ばれていて、 これを作るというのがちょっとしたブームらしいしので、トライしてみた。

しかし、Postfix のインストールの時に一度成功しているのに、 改めてやるとなかなかうまく行かない。(Debian の特異性のせい?) 鍵や証明書の作製などは問題無くできてしまうのに、これらを Apache に認識させる段になってダメとなる……

かなり四苦八苦したが、結局 openssl を直接叩いて作るのではなく、Debian 独自の?

fukuda@lark:~% sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf ssl-waremo.com.pem     
というスクリプトを使って一気に作るのが正解のようだ。 できた pem ファイルを、/etc/apache2 の下へ持って行って、 .../sites-available/default-ssl.conf を編集して、
    # SSLCertificateFile	/etc/ssl/certs/ssl-cert-snakeoil.pem
    # SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    SSLCertificateFile /etc/apache2/ssl_key/ssl-waremo.com.pem 
と変更し、
fukuda@lark:~% sudo a2ensite default-ssl
fukuda@lark:~% sudo a2enmod ssl 
fukuda@lark:~% sudo services apache restart 
とやれば、一応 https://www.waremo.com に対して応答するようになる。
Ceratification of waremo.com
Safari が waremo.com のオレオレ認証にダメ出し

勿論ここで 'Continue' とやって先に進んでも、サイトのディフォルトの 'It works!' が出るだけで、まともに使うためには、VirtualHost の定義をやり直さないといけない。それは大仕事になりそうなので、 とりあえず今日のところはここまで。

Size と Performance

Xorg や GUI は一切インストールしないと決め、 「蓋をしたままで動作」を実現するために悪戦苦闘している間に、 Xorg や gnome が入ってしまった時は再インストールまで決心したのだが、 その後、コンパイル環境(build-essential) を入れたりして、 大分当てが外れた。 今 Lark へのログイン時に表示されるメッセージは
System load:  0.0              Processes:           142
Usage of /:   6.1% of 144.48GB Users logged in:     1
Memory usage: 21%              IP address for eth0: 192.168.0.11 
で、Postfix に取り掛かる前に比べて、 ディスク使用量が 1.1% ⇒ 6.1%、走っているプロセスの数は 113 ⇒ 142 とかなり増加している。それでも System と User Data を合わせて 8.8 GB で、Eagle の 12 GB と比較するとかなりコンパクトにできた。 しかし、ディスク残量で言うと 1.3 GB だったものが、136 GB になっている訣で、このあたりにあまり拘る必要も無かったかな、という気もしている。

応答の体感速度はかなり改善されている。 あまり定量的ではないが、 これまで間に合わせにやってきた測定でも、この事は示されている。

まとめ

最後にとりとめなく感想等

で、総合的にはまあ成功だった (という事にしておこう。)

2013-12-04 (Wed): 新自宅サーバ(その 6)— Spambayes + Mailman

Procmail + Spambayes

スパムフィルタの Spambayes は、従来通り procmail で「駆動」する。 インストールは簡単で、また設定するところも殆んどない。
fukuda@lark:~% sudo apt-get install procmail procmail-lib 
fukuda@lark:~% sudo apt-get install spambayes
fukuda@lark:~% scp eagle:.procmailrc .
fukuda@lark:~% scp eagle:.forward . 
fukuda@lark:~% scp eagle:.hammiedb .  
spambayes は 1.1a6 がインストールされる(しかし、いつまで alpha version のままなんだろね。) 殆んど as-is で動くが、~/.procmailrc だけは、dovecot と spambayes のインストール位置が変っているので調整が必要。
fukuda@lark:~% scp eagle:.procmailrc eagle.procmailrc 
fukuda@lark:~% diff eagle.procmailrc .procmailrc
4c4
< DELIVER="/usr/libexec/dovecot/deliver"
---
> DELIVER="/usr/lib/dovecot/deliver"
87c87
< | /usr/local/bin/sb_filter.py
---
> | /usr/bin/sb_filter.py    

Baysean filter のトレーニングに必要な、ham と spam の directory は、IMAP で操作できるように Maildir の下にあるから、先に ~/Maildir を rsync した時に転送済み。

これらを使って、一度トレーニングしてみる……

fukuda@lark:~% /usr/bin/sb_mboxtrain.py -d /home/fukuda/.hammiedb \
    -s /home/fukuda/Maildir/.spambayes.spam \
    -g /home/fukuda/Maildir/.spambayes.ham             
Training ham (/home/fukuda/Maildir/.spambayes.ham):
  Reading /home/fukuda/Maildir/.spambayes.ham/cur as Maildir
  Trained 1 out of 53 messages
Training spam (/home/fukuda/Maildir/.spambayes.spam):
  Reading /home/fukuda/Maildir/.spambayes.spam/cur as Maildir
  Trained 7 out of 769 messages 
移行後新に入れた ham と spam のファイルを使って .hammiedb を更新できているようだ。 これをそのまま crontab のエントリにする。
17 4 * * *  /usr/bin/sb_mboxtrain.py -d /home/fukuda/.hammiedb \
    -s /home/fukuda/Maildir/.spambayes.spam                       \
    -g /home/fukuda/Maildir/.spambayes.ham > /dev/null    

ML (Mailman)

さあて、Mailman かぁ……、とちょっと身構えたが、apt-get でインストールしたら、Apache 用の mailman.conf もインストールされて、 これを少し弄って、a2ensite したら、すぐに管理用のウェブページが開けた。 後、/etc/postfix/main.cf の aliases_maps に mailman の aliases を付け加えて、Postfix との連携も動き出した。おお、 このインストーラはよくできてるなぁ……

と感心したのも束の間、古いサーバから listsarchives を持って来て、認識させる段になったら「インストールが難しい Mailman」の本領発揮というべきか、 ちっとも動かない。そもそも管理用のウェブページが開けなくなった。 いつもの「ファイルパーミッションの問題」か、Apache のアクセスコントロールの問題だと思うのだが、どうしても上手く行かない。 ディフォルトの uid と gid が、以前の 'mailman' から 'list' になっていたり、 (例によって)ファイルの位置が大分変わっていたりするのにも、 相当イライラさせられたが、 そのうち、Mailman のスクリプトが「自分のパーミッションを見て表示を拒否している」らしいと気がついて、 すっかりめげてしまった。

元のサーバの Mailman も一からビルドしたものだった事もあり、 今度もそうしようと決心。 'Mailman 日本語情報' のサイトから mailman-2.1.14+j7 を取って来て、 同サイトのインストールマニュアルに沿ってインストール・設定する。

インストールと設定は、 マニュアルが詳細なので、そのとおりやれば殆んど問題無い筈だが、 若干の注意事項と補足……

  1. 展開したディレクトリでやる configure はとっても大事。 インストールしてみて問題が有れば、再 configure ではなく、そのディレクトリは廃棄して、展開 (tar xzvf) からやり直す方が早い。
  2. ubuntu-server には、make さえ入っていないので、 まず build 環境を整える
    fukuda@lark:~% sudo aptitude install build-essential   
  3. configure の前に、mailman user, group の追加、 インストールディレクトリ (/usr/local/mailman) の作製、 パーミッションの変更は、手を抜かずきっちりやる。 ここまでをきちんとやっておけば、
  4. configure にオプションは一切必要なく、かつ、root になる事なく make, make install も完了するはず。 (これがうまく行かなければ、source の展開から始める事。)
  5. マニュアルにあるスクリプトのパスは、/usr/local/mailman が cwd である事が前提。
  6. bin/check_perms -f は、root になって(すなわち sudo で)やっても問題無い。
  7. 何故かマニュアルにはないが、この時点で
    fukuda@lark:/usr/local/mailman% bin/newlist mailman  
    とやって、mailman というリストを作っておいた方が、以降の見通しが良い (ここでも sudo は用いない。)
Apache2 の設定に関しても、補足……
  1. マニュアルの IMAGE_LOGOS に関する記述は混乱している。Icon のファイルを動かすのではなく、 /etc/apache2/site-available/mailman.conf
    Alias /icons/ /usr/local/mailman/icons/ 
    とすれば済む。
  2. また ScriptAlias の指定は、Debian (Ubuntu) の conf ファイルにあるようにやっては後々問題が多い。 ここは素直に
    ScriptAlias /mailman/ /usr/local/mailman/cgi-bin/ 
    とした方が良い。
  3. (何故か)上記の cgi-bin のディレクトリは、明示的に「アクセス可能」としてやる必要が有る。
具体的には、/etc/apache2/sites-available/mailman.conf を以下のように設定する。
<VirtualHost *:80>
    ServerName lark.otacky.jp
    
    ScriptAlias /mailman/ /usr/local/mailman/cgi-bin/
    Alias /pipermail/ /usr/local/mailman/archives/public/
    Alias /icons/ /usr/local/mailman/icons/

    <Directory /usr/local/mailman/cgi-bin>
#       AllowOverride None
#       Options ExecCGI
        Require all granted
    </Directory>
    <Directory /usr/local/mailman/archives/public>
        Options FollowSymlinks
        AllowOverride None
        Require all granted
    </Directory>
    <Directory /usr/local/mailman/icons>
#       Options FollowSymlinks
#       AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

Postfix との連携についてマニュアルに補足する事は特にない。 また、必要な変更は 先の /etc/postfix/main.cf の例に既に反映されている。

データの移行に関してはマニュアルには何も無いと言って良い。概略次のよう にやった。

  1. 旧サーバからリストとそのアーカイブをコピーする
    fukuda@lark:/usr/local/mailman% rsync -uav eagle:/usr/local/mailman/lists/ lists/    
    fukuda@lark:/usr/local/mailman% rsync -uav eagle:/usr/local/mailman/archives/ archives/       
    
  2. 管理ページの URL が変わるので、それを修正する
    fukuda@lark:/usr/local/mailman% bin/withlist -l -r fix_url ml_name 
    ml_name のところには実際の ML の名前を入れる。それぞれの ML についてこれを実行。(これを端折る事で不要な ML をウェブ上から隠せる。)
  3. Postfix のために aliases を作る
    fukuda@lark:/usr/local/mailman% bin/genaliases
  4. postfix reload を実行
    fukuda@lark:/usr/local/mailman% sudo service postfix reload
以上までで、Spambayes, Mailman の設定、データ移行は完了。 新サーバを DMZ に置くか、ルータの port 25 を新サーバに向ければ、新しい メールシステムが稼働を始める。

Mailman をビルド仕直したお陰で、 各ファイルの ownder:group を含めてディレクトリ構成が旧サーバと全く同じになったので、 移行は大変楽だった。(fukuda/mailman の uid, gid は eagle と lark の間で異なっているが、「名前」が同じなので rsync が変換してくれる。)

しかしまだ問題も有る。(Pipermail で公開する) public な ML のアーカイブは何故か "Forbidden" となる。 しかし、管理ページで public でなく private に設定すれば読めるようになるからとりあえずは良い事にする (それにしても、private より読めない public って :-p)。


2013-11-30 (Sat): 新自宅サーバ(その 5)— Postfix + Dovecot

さあて、いよいよ新自宅サーバのメール周りを完成させて、 本格的に稼働させねば……。

基本構成

既存のサーバは、相当ややこしい事になっているので、 この際何とかしたいと思っていたが、

  1. 外部の SMTP posting server を使う
  2. ML (Mailing List) を維持する
  3. computer.org の fowarder を使い続ける
という条件が加わると、結局そんなに簡素化はできないようだ。 (jb3.so-net.ne.jp へのメールを、pop で取ってくるのはもうやめる事にする。)

そもそも、 mail.so-net.ne.jp と smtp.gmail.com の二つの SMTP posting server が必要になる。(それでも、mail.so-net.ne.jp が IMAP 対応になってくれたら、話はかなり楽になるのだが……) おまけに、それぞれ認証のやり方が違う。 しかし、自分のメールを送信する時は、Wanderlust on Emacs が直接 posting server とやりとりするので、自宅サーバとしては、 送信時(主に ML サーバからのメール)は mail.so-net.ne.jp だけに送る事を考えれば良いし、受信時は port 25 を開いて直接受信する。

受信したメールは、mailman-test@otacky.jp 他は、ML サーバへ、 fukuda at otacky.jp は、.foward メカニズムを使って、procmail へ送り、spambayes の助けを借りてスパムフィルタリングと、 ~/Maildir/ 以下のサブディレクトリに振り分けを行う。

MTA (Postfix)

かつて、sendmail から Postfix に乗換えた時、その設定が簡単である事に大変感激した。 (main.cf の中で mydesitnation と myhostname だけを設定してやれば、メールサーバとしてちゃんと動いた。) しかし、そんな牧歌的な時代はとうの昔に終ったようで……

そもそも、 自宅サーバが、外部のホストの port 25 に直接メールを送り出す なんて事はもう考えられない。例えば、我が家の ISP の So-net は、自分の管理下の IP アドレスから外部の port 25 宛パケットは通さない (OP25B)。 それでも、Asahi net さんあたりに乗換えて、SPF 対策をして、かつ black list に乗るのをしっかり監視すれば行けるんじゃないか、とも思うが、 もうとてもそんな元気は…… その上、今や殆んどの ISP は簡単に relay もしてくれない。 そのためには posting server 様に login させてもらい 暗号化してデータを送らななければならない、という事。 ISP 毎にパスワード・データをそれぞれ暗号化する・しない、 のバリエーションが有って、それに加えて、 (あろう事か)セッション途中で暗号化する (STARTTLS) なんて事もやるらしい。

なので、Postfix にも、認証・暗号化の設定が必要になる。 また、dovecot も imap (port 143) ではなく、imaps (port 993) を喋るようにする。(これは必須ではないが、gmail.com は既にそうしているし、 global net から、自宅サーバの IMAP4 サーバにアクセスする事もあるので。)

多分 OS インストール時にそう設定したのだと思うが、postfix, dovecot, procmail は既にインストール済みだった。(プロセスが走っていた :-) しかし、それで十分ではなくて、以下のようなパッケージが必要 (オーバキルかも)。

fukuda@lark:/etc/postfix% sudo apt-get install libsasl2-2 sasl2-bin libsasl2-modules
fukuda@lark:/etc/postfix% sudo aptitude install dovecot-core
    dovecot-imapd dovecot-common 
あとはまず Postfix の設定から。

まず、/etc/postfix/master.cf を触る必要はない。(smtpd や、submission などの設定は不要。)main.cf のサワリは以下の通り。smtpd_.... という変数が初めから入っているが、不必要(有っても害にならないようだが。)

# /etc/postfix/main.cf
....
myhostname = otacky.jp  # *1)
mydestination = lark otacky.jp localhost    # *2)
alias_maps = hash:/etc/aliases hash:/usr/local/mailman/data/aliases # *3)
# alias_maps = hash:/etc/aliases     
alias_database = hash:/etc/aliases
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"  
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
relayhost = [mail.so-net.ne.jp]:587    # *4)
#relayhost = [smtp.gmail.com]:587    
#relayhost = [mail.so-net.ne.jp]:465    
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd # *5)
smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes  
....
  1. *1): 次の 2) とともに「お馴染」のパラメータ。lark.otacky.jp としたかったが、mail (mailx) command が、envelope-from (Return-Path:) にディフォルトでこれを補うので、従来通りとした。
  2. *2): 'local' 他はとっぱらってみた。
  3. *3): mailman (後述) との「結合」のため。
  4. *4): 今回の設定の目玉。どれも relay として使えるようにできたが、 smtp.gmail.com は 'From: ' field を強制的に書き直したり、一日の配送数に制限が有ったりで、 ML の配送用としては適していないようだ。結局、従来通り so-net さんのお世話になる事にする。
  5. *5): ログインのための username と password をセーブするファイルを指定。 (下記参照。)
上で指定している sasl_passwd は、次のようにして作る。
fukuda@lark:/etc/postfix% touch sasl_passwd
## edit the file so that it has contens like:
fukuda@lark:/etc/postfix% cat sasl_passwd
[mail.so-net.ne.jp]:587 XXXXX@XX.so-net.ne.jb:XXXXXXXXXX
[smtp:gmail.com]:587  XXXXX@waremo.com:XXXXXXXXXX
[smtp:gmail.com]:465  XXXXX@waremo.com:XXXXXXXXXX
fukuda@lark:/etc/postfix% sudo chown root:root sasl_passwd
fukuda@lark:/etc/postfix% sudo chmod 600 sasl_passwd
fukuda@lark:/etc/postfix% sudo postmap hash:./sasl_passwd 

IMAP4 Server (Dovecot)

まず dovecot のパッケージをインストールし、旧サーバから ~/Maildir を rsync でコピーする。(1.8 GB くらいもあるので、ちょっと時間がかかった。)
fukuda@lark:~% sudo aptitude install dovecot-core dovecot-imapd dovecot-common
fukuda@lark:~% rsync -uav eagle:~/Maildir/ Maildir/    
次いで設定。設定ファイルは 20 以上に分れている。Debian 流としても多過ぎ? 変更自体は多くないのに、 変更すべき変数がどのファイルにあるのかを捜すのに往生した。

まず、Maildir 方式を選ぶ (ディフォルトは mbox)

# /etc/dovecot/conf.d/10-mail.conf    
mail_location = maildir:~/Maildir 
次は port 993 を使うための設定。
# /etc/dovecot/conf.d/10-auth.conf    
# disable_plaintext_auth = yes
auth_mechanisms = plain 
# /etc/dovecot/conf.d/10-master.conf    
service imap-login {
  # inet_listener imap {
  #   #port = 143
  # }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
一方、他の host の wanderlust の .wl で、
....
%inbox:fukuda/clear@lark.otacky.jp:993!
.... 
としたら、問題無くアクセスできた。 つまり、'plaintext auth' の imaps (imap の ssl 版) で接続できた、 という事。何故か clear を login にできないが、gmail.com も clear のみ受け付けるので、内部の IMAP サーバだけ頑張ってもしょうがない。

2013-11-23 (Sat): 新自宅サーバ(番外編)— Mail 環境

ようやく、メール関連に手が回るようになって設定を始めたが、 (予定通り)難航している。 しかしその前に、新サーバ以外で起きている目の前の問題:

  1. 自分が送信するメールが SPF で、softfail とか neutral になっている
  2. Wanderlust/Emacs からメールの送信に失敗する事がある
等を解決するのが先決だろう。

SPF

耳慣れない言葉だが SPF (Sender Policy Framework) というものが有って、「なりすましメール」対策の一環らしい。 日々スパムメールに悩まされている身としては「頼もしい限り」だが、 自分が出すメールにも、
Received-SPF: softfail (google.com: domain of transitioning	fukuda@computer.org does not designate 202.238.84.153 as	permitted sender) client-ip=202.238.84.153; 
....
Authentication-Results: mx.google.com;	spf=softfail (google.com: domain of transitioning fukuda@computer.org	does not designate 202.238.84.153 as permitted sender)	smtp.mail=fukuda@computer.org
等というヘッダが添付されるようになっては、喜んでばかりは居られない。 とは言え、当初は何が悪いのかさっぱり分らなかった。 なにしろ、so-net.ne.jp の port 587 からリレーしてもらっている(202.238.84.153 は so-net さんの SMTP ポスティングサーバの一つ)のだし、 この送信経路には google.com は全く関係してないのだから。

ごちゃごちゃやっているうちに朧げながら解ったのは、

等々。まあ上のヘッダを素直に読めばそう言ってるのだが…… 何故かなかなか理解できなかった。 (頼みの Wikipedia も例が怪しくて私の混乱に輪をかけてくれた。)

ともあれ、DynDNS の otacky.jp と waremo.com の TXT record にそれぞれ

otacky.jp.	600	IN TXT  "v=spf1 include:so-net.ne.jp ~all" 
waremo.com.	600	IN TXT "v=spf1 include:_netblocks.google.com ~all" 
を加えた。(DynDNS では、SPF レコードは許されないようだ。) _netblocks.google.com% dig google.com TXT から辿っていった。途中の _spf.google.com をインクルードしたのでは駄目。

こうしておいて Return Path: xxxx@waremo.com としたメールを smtp.google.com:587 から、また、Return Path: xxxx@otacky.jp を mail.so-net.ne.jp から posting すれば、SPF fail される事は無くなる。

TLS/SSL

waremo.com は Google App for Business の「独自アドレスでメール」を使っている。 これは一般の gmail 同様 IMAP4 が使えるので、自宅サーバへ POP で一旦落してきて、dovecot で、というステップを踏まなくても良い。 が、これは当然のように、imaps (imap over SSL, port 993) だった。 幸い、Wanderlust on Emacs は SSL にも対応していて、従来の otacky.jp 上の IMAP4 アカウントと統一的に扱える。

しかし、送る方の SSL(TLS) 化は、 そう容易たやすくは事が運ばなかった。 現 otacky.jp サーバの mail.so-net.ne.jp を介しての ML の配信は比較的早期に安定したものの、 MacOS X の Wanderlust on Emacs から、smtp.gmail.com を介して送信する方はかなり難航。 焦って cut & try で何とかするには、問題が複雑すぎるし選択肢が多すぎたようだ。 使える posting server が(認証のやり方が違う) So-net と google の二つになったという事に加えて、 送信に使うルーチンというかコマンドも複数ある……

<<2013-11-25 改訂 ここから>>

しかし、最近、smtp.gmail.com の port 465 が使える事、また、 Emacs の smtpmail-send-it が、それをサポートしている事を知った。 で早速、.wl に

;; for gmail.com revised  
(setq ssl-program-name "gnutls-cli")
(setq ssl-program-arguments '("-p" service host))
(setq wl-smtp-posting-server "smtp.gmail.com") 
(setq wl-smtp-posting-user "fukuda@waremo.com")
(setq wl-smtp-posting-port 465)  
(setq wl-smtp-authenticate-type "plain") 
(setq wl-smtp-connection-type 'ssl)
とする事で、smtp.gmail.com:465 にアクセスできるようになった。 改訂前に smtpmail-send-it を使っていたのに対し、これは、 wl-draft-send-mail-with-smtp (default) を用い、 このため ssl を話すための外部関数として、gnutls の gnutls-cli を使う事を明示した。 (smtpmail-send-it もディフォルトでこれを使っている。)

こうする事で、Wandelust のとても便利な機能がまた使えるようになった。 すなわち、.wl に

(setq wl-draft-config-alist
      '(
	((string-match ".*@waremo.com.*" wl-draft-parent-folder)
	 ("From" . "Taka Fukuda <fukuda@waremo.com>")
	 ("Fcc" . wl-draft-parent-folder))
	((string-match ".*fukudataka.*" wl-draft-parent-folder)
	 ("From" . "Taka Fukuda <fukudataka@gmail.com>")
	 ("Fcc" . wl-draft-parent-folder))
	((string-match ".*@otacky.jp.*" wl-draft-parent-folder)
	 ("From" . "Taka Fukuda <fukuda@computer.org>")
	 ("Fcc" . wl-draft-parent-folder))
	)
      )
(add-hook 'wl-mail-setup-hook 'wl-draft-config-exec)  
等と書いておくと、どの受信フォルダを開いている時にドラフトを書き始めたかによって、 各フィールドをきちんと埋めてくれる。 smtpmail-send-it では、実際に Fcc (file carbon copy)を実行してくれない嫌いが有ったが、 wl に戻ってからは、きちんと実行される。 おかげで、夫々の IMAP フォルダの中で、自分のメールを含めたやりとりの thread がきちんと表示される。(これはとても便利で Wanderlust を使う最大の理由の一つ。)
Thread in Summary Window
Wanderlust の Summary 窓のスレッド表示

(改訂してからは)まだ二日程の実績しかないが、 特に「配送されない」などの大きな問題は無さそう。 但し、いくつか気になるところは有った。

しかし、まあ、Fcc が動くようになってみると、これらは「解決済みの問題」とも言える訣で、 当面「確実な動作」が確保できたたのではないかと思う。

<<2013-11-25 改訂 ここまで>>


2013-11-13 (Wed): 新自宅サーバ(その 4)— Apache-2.4

せめてこれくらいはスンナリ行くだろうと思っていたが、 なかなかそうは問屋が…… Apache が 2.4 になっている上に Debian/Ubuntu の構成がとてもユニークだから、という事の所為にしたいところだが、 自分が、てんでばらばらな構成のサイトを行き当たりばったりに作ってきたから、 という理由の方が大きいかも。なにしろ、
  1. http://www.otacky.jp: このサイト。SSI と、それと CGI を組合せたカウンターと、 アクセス解析、グラフ書きなどの CGI.
  2. http://amufee.otacky.jp: 某社のサイト。SSI 有り(実は放置していました。)
  3. http://sweetspot.otacky.jp: さるテニスグループのサイト。何んと index.cgi が唯一のコンテンツで、html ファイルは皆無、というとってもダイナミックなサイトである。
  4. http://www.otacky.jp/mailman/admin: (現在アクセス不可) いくつかの ML (Mailing List) の管理用 Web Page. Mailman のをそのまま使って、中身は未詳。
  5. http://www.waremo.com: 最近立ち上げた弊社 (Waremo Works) のサイト。SSI + CGI のカウンターの他に、 MultiView option を使う初のサイトとなった。
  6. http://dms.waremo.com (現在未公開) DMS。Django を使った完全に「ダイナミック」なサイト。 (稼動中であるが、公開するかどうかは未定——というか、 まだちょっと恥ずかしいレベルなので、 少くとも、もうしばらくは「秘密」にしておく)
てな具合。内心忸怩たるものがあるが、 今からこれを書き直す(例えば、全部 Django にする)のは大変過ぎるから、 とりあえず動くようにして、 次のサーバに乗換えるようになるまでは放置したい……。

インストール・設定

インストール時に httpd をイネーブルしておけば(?)、 特に新たにインストールするものは無い。しかも、ディフォルトの httpd.conf は揃っているし、httpd は既に走っていて、ブラウザにアクセスすれば、いつもの Apache 版 "Hello World" を返してくれる。(dhcpd とはえらい違いだ。)

しかし「設定」では Ubuntu (Debian) の「風変わりさ」に大いに戸惑った。 何しろ、httpd.conf を弄る代わりに、a2ensite とか a2enmod とかを駆使して、Virtual Host や mod_xxx を有効化していくという…… いや、説明が大変なので、このあたりを参照のこと。 (例によって、設定が殆んど終ってからここを見つけたのだった :-p ) でも、一旦慣れると、Apache 2.4 のモジュールの相互関係やアクセス管理はかなり整理されているので、 比較的素直に「意図通り」に動いてくれた。

Virtual Host

Virtual Host は、かつての「便利な機能」から、今や「中心的な機能」になったようで、 上の a2ensite は、言わば、個々の Virtual Host を動かしたり止めたりするためのもの、と言える。 (逆に言うと「Virtual でない Host」 は使い難くなっている?)

ともあれ、必要だった「おまじない」の数が減ったので、一層の事……と、 徹底的に簡素化してみた。 普通に使っている、SSI, CGI, Cookies を使うサイトは、どれも

<VirtualHost *:80>  # *1)
	ServerName XXXX.otacky.jp  # *2)

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/YYYY   # *3)
	ScriptAlias /cgi-bin/ /var/www/cgi-bin/  # *4)
	<Directory /var/www/YYYY>   # *5)
 	    Options Indexes FollowSymLinks Includes  # *6)
            AddHandler server-parsed .html # *7)
            # Options +MultiViews   # *8)
            # AddLanguage en .en
            # AddLanguage ja  .ja
            # LanguagePriority ja en
            # ForceLanguagePriority Prefer
        </Directory>
</VirtualHost>
のような感じにすれば良さそう。これで *2), *3) と *5) だけ書き変えれば、 それぞれの VH の conf となる訣。ここに、 これに加えて、次の module をイネーブルする:
fukuda@lark:~% sudo a2enmods include     # for SSI
fukuda@lark:~% sudo a2enmods cgi         # for CGI
fukuda@lark:~% sudo a2enmods usertrack   # for Cookies
fukuda@lark:~% sudo a2enmods negotiation # for MultiViews
最初の command では、mime module のイネーブルも促される。

SSI + CGI

我が家のサイトは下に示すように大抵のページで SSI でメニューを "include" し、 また、CGI スクリプトを "include" することで起動する。
<div class="menu">
      <!--#include virtual="menu_div.html" -->
    </div>
    <div class="main">

    <H1>Otacky Taka's Homepage</H1>
    <p>
    <!--#include virtual="/cgi-bin/counter5.cgi?user=fukuda&resp=1" -->
勿論、一部では <frame></frame> による「呼び出し」も使っているが、 この場合でも、上の ScriptAlias と cgi module のイネーブルで十分のようである。 ("Options ExecCGI" 等は要らない。)

Cookies

Browser から返してきた Cookie の値を、環境変数 HTTP_COOKIES に入れるだけ、の単純な操作だけならば、上の usertrack モジュールのイネーブルだけで十分で、Options には特に何も付け加える必要はない。

MultiViews

MultiViews (negotiations) と言っても、実際に使っているのは language negotiation だけで、それも、日本語 (ja) と英語 (en) のコンテンツをブラウザのディフォルトの言語に合わせて選ぶだけ。

これをイネーブルするには、上のコードの *8) のコメント行を全て uncomment するだけで良い。 (negotiation module は、上の code 例で、既にイネーブルしてある。)

その他

定義ファイルが httpd.conf 一つの場合は、 最初に定義された VirtualHost が default (primary) になる(すなわち、どの ServerName とも一致しなかった場合、その VirtualHost に行く。) しかし、Debian 構成では、この順序付けは意味をなさない。 ちょっと悩まされたが、どうやら site-available/ でのファイル名のアルファベット順で include されるので、 (VH の HostName 他ではなく) そのファイル名で決まるようだ。 このサイトでは www.otacky.jp をディフォルトにする事に決め、 その conf file の名前を、000-otacky.conf とした。

2013-11-07 (Sun): 新自宅サーバ(その 3)— Dynamic DNS

DNS + DHCP = Dynamic DNS

この二つを共同して働かせるシステムも DDNS (Dynamic DNS) と言うらしい。 もっと global なもの(DynDNS.com 等が実現しているような)をそう呼ぶのだと思っていたから、 これはちょっと言い過ぎでは、と思うが、まあしかし、「超ダイナミックな内向き DNS」と考えれば、そんなに間違ってもいないか……

名前はどうあれ、自宅ネットワークにおいては、これはとても有難い。 何しろ、ネットワーク中のホストにその hostname だけでアクセス (ssh で login, rsync でファイル転送) する事ができるようになる…… しかも、一々ネットワークの構成を変更したり気にしたりする必要がない。 また、iPhone などのモバイルデバイスにとっては、 例えば、www.otacky.jp, www.waremo.com というアドレスだけでどこからでもこれらの自宅サーバにアクセスできる。

が、実現するのはそんなに易しくはない。Fedora でも結構手間暇がかかったが、Ubuntu でやるのはさらに大変だった。Ubuntu のこのあたりの構成が(古い)Fedora とかなり違っているからだが、しかし、 bind や dhcpd そのものがかなり変ってしまった、という面も有るかも知れない。

で、そのユニークさと、ドキュメントの貧弱さに悩まされながら、 右往左往して辿り着いた概略構成が以下の図。

Config files and zone files
Dynamic DNS に関連するファイル群
(破線の赤枠: 今回編集、実線の赤枠: 新規作製)
managed-keys.bind も「新規作製」に括っているが、実は named が自動生成する。

設計意図というか方針(後付け)は概略以下の通り

DNS (Bind)

Bind は今や 9.9.3 になっている!しかし、それよりも Ubuntu が、named という由緒正しい名前から bind (directory) とか bind9 (service) とかに変えてしまったのがかなり応えた。 これと、先の named.conf の構成の大幅変更で、 「設定を旧自宅サーバから移してきて、ちょいちょいと変更したら OK やろ……」などいう目論見はあっさり崩れてしまった。

では、named.conf に include されるファイルのうち、最初のから

//# named.conf.options
acl lan {  // *0)
    127.0.0.1;
    192.168.0.0/24;
};
options {
        directory "/var/cache/bind";
        forwarders {  // *1)
            8.8.8.8;          // Google
//          202.238.95.24;  // So-net
//          202.238.95.26;
        };
        allow-query {lan;}; // *2)
        dnssec-validation auto;  // *3)

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; }; // *4)
};
  1. *0), *2): localhost か localdomain からの query しか受けつけない、という設定。(DMZ に置いた時に必要。)
  2. *1), *3): パフォーマンス (Query time) から言って、fowarders の設定は必須で、 無ければ、外部ドメインの Query time が 2-3 sec にもなる…… と思っていたが、 So-net の DNS を指定すると、例えば www.python.org の query に最悪 5 sec も掛ってしまう。 dnssec-validation no とすれば、1 sec 以下になるから、 So-net DNS は dnssec 未対応、という事らしい。 Google の 8.8.8.8 にすれば dnssec-validation auto でも OK (100-300 ms 程度に短縮される)。
  3. *4): IPv6 の query は受けつけない方が速いだろうと思って、none にしてみたが、 何故か却って error message が増える。ディフォルト (any) に戻した。

次は、named.conf.local。これは、local domain の otacky.jp と waremo.com の zone file と「逆引き」ファイルを定義する。

// #named.conf.local
// include "/etc/bind/zones.rfc1918";
include "/etc/bind/rndc.key";   // *1)
zone "waremo.com" {
     type master;
     file "/etc/bind/waremo.com.zone";  // *2)
     allow-update { none; };
};
zone "otacky.jp" {
     type master;
     file "otacky.jp.zone";                 
     allow-update { key rndc-key; };    // *3)
};
zone "0.168.192.in-addr.arpa" {
     type master;
     file "0.168.192.in-addr.arpa.rev";
     allow-update { key rndc-key; };
}; 
  1. *1), *3): update の key に、rndc.key ファイルの中身を使う。"rndc-key" は同ファイルの中で「定義」されている。
  2. *2): named.conf.options の directory にないので、 full-path が必要

次は zone files. waremo.com.zoneotacky.jp.zone を同じ内容で済ませる事を試みた。

;; waremo.com.zone,  otacky.jp.zone
$TTL 86400	; 1 day
@		IN SOA	ns.otacky.jp. root.otacky.jp. (  ; *1)
				41         ; serial
				1800       ; refresh (30 minutes)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				1200       ; minimum (20 minutes)
				)
		NS	ns.otacky.jp
		A 	192.168.0.12    ;; *2)
ns		A   	192.168.0.11    ;; *3)
www		CNAME 	@        ;; *4)
dms		CNAME 	@
amufee	        CNAME 	@
sweetspot	CNAME 	@
;;
router		A	192.168.0.1      ;; *4)
quadra	        A	192.168.0.2
lark		A	192.168.0.11
eagle		A	192.168.0.12
sparrow	        A	192.168.0.13
;;
$TTL 3600	; 1 hour
  1. *1): '@' には、named.conf.local の zone 定義(つまり、"otacky.jp" か "waremo.com")が入る。
  2. *2): 行頭の @ (つまり上の "yyyy") が省略されている。 この行で hostname が省略された時の IP アドレスを定義する。 (サーバの IP アドレスを変える時は、この行だけを変更すればよい。)
  3. *3): 上の *1) で使った ns.otacky.jp の A record
  4. *4): 固定 IP address を持つ host を列挙
  5. *5): www.otacky.jp 他が全てサーバを指すように定義
何だか分り難い(そもそも書いた本人が不安だ)が、update された結果を反映して、otacky.jp.zone を bind が書き直す時、 これらの省略法をきちんと展開してくれるので、 それを見れば確認できる。(下を参照。どうやらうまく行ってるらしい。)

動作確認

fukuda@lark:~% cd /var/cache/bind
fukuda@lark:~bind% ls
0.168.192.in-addr.arpa.rev      config.txt         otacky.jp.zone
0.168.192.in-addr.arpa.rev.jnl  managed-keys.bind  otacky.jp.zone.jnl    
fukuda@lark:~bind% sudo named-checkconf    
fukuda@lark:~bind% sudo named-checkzone otacky.jp otacky.jp.zone    
fukuda@lark:~bind% sudo named-checkzone 0.168.192.in-addr.arpa \
               0.168.192.in-addr.arpa.rev 
fukuda@lark:~bind% sudo service bind9 start
fukuda@lark:~bind% sudo nsupdate -d -k /etc/bind/rndc.key  # *1)
> update add router.otacky.jp 3600 IN A 192.168.0.1
> update add 1.0.168.192.in_addr.arpa. 3600 IN PTR router.otacky.jp.
> send
> quit
fukuda@lark:~bind% dig @127.0.0.1 router.otacky.jp  # *2)
;; ANSWER SECTION:
router.otacky.jp.	3600	IN	A	192.168.0.1

;; AUTHORITY SECTION:
otacky.jp.		86400	IN	NS	ns.otacky.jp.

;; ADDITIONAL SECTION:
ns.otacky.jp.		3600	IN	A	192.168.0.11    
  1. *1): nsupdate は root パーミッションでなくても OK だが、ここでは key を読み込む為に態々こうした。nsupdate でも dhcpd と同じ key を使う。
  2. *2): 直ちに table (cache) に反映されて、dig で確認できる。 また、その後直ぐに Journal file (*.jnl) ができている。(zone ファイルに反映されるのは、 ちょっと後になる。)

DHCPD

最近、dhcp3-server というパッケージから、isc-dhcp-server に変ったらしく、 公式ドキュメントも、Internet 上の Q/A も混乱している……

とりあえずは、既に有る isc-... の方で行く事にする。 が、何と、そもそも daemon が立ち上がらない…… 随分悩まされたが、結局 isc-dhcp-common というパッケージが無い所為であった。(誰かが apt-get はパッケージの相互依存性をきちんと管理してくれる…… なんて言っていたけど、port の方が遥かに確実だよなぁ。)

さて、設定ファイルは、/etc/default/isc-dhcp-server/etc/dhcp/dhcpd.conf (二箇所に有って、しかも名前が違うのはどうよ……) 前者は、INTERFACES="" となっているところを INTERFACES="eth0" とするだけ。

後者については、そんなに簡単ではなく、

# ddns-update-style none;
ddns-update-style interim;  # *1)
# option definitions common to all supported networks...
option domain-name "otacky.jp";
#option domain-name-servers ns1.example.org, ns2.example.org;
option domain-name-servers 192.168.0.11;  
    
log-facility local7;  # *2)
    
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.100 192.168.0.150;
  option routers 192.168.0.1;
}
    
key rndc-key {    # *3)
        algorithm hmac-md5;
        secret "xxxxxxRrRuamG/mhBdNZUw==";
};

zone otacky.jp. {
  primary ns.otacky.jp;  # *4)
  key rndc-key;
}

zone 0.168.192.in-addr.arpa. { 
  primary ns.otacky.jp;   # *5)
  key rndc-key;
} 
  1. *1): 何はともあれ、これを設定しないと、dynamic にならない。
  2. *2): これに対応して、以下のような内容の /etc/rsyslog.d/10_dhcp.conf を作る。
    daemon.* /var/log/dhcpd.log
    local7.*   /var/log/dhcpd.log
    
    こうすると、dhcpd だけでなく、bind9 の log も /var/log/dhcpd.log に入るようになる。
  3. *3): zone ファイルをアップデートするための key. rndc.key key をそのまま書き出してある。 (多分 include もできるのだろうが、試してみなかった。)
  4. *4), *5): DNS の指定は先のディレクティブで済んでいる筈なのに、 ここにこの記述がないと、zone update は起こらないようだ。 それも、つい最近の変更らしい(ったくもう……)
ともあれ、ようやく設定ができたようで、
fukuda@quadra:~% ssh eagle  # to old server
fukuda@eagle:~% sudo service dhcpd stop    
fukuda@eagle:~% exit
fukuda@quadra:~% ssh lark  # to new server
fukuda@lark:~bind% sudo service bind9 start    
fukuda@lark:~bind% sudo service isc-dhcp-server start    
とすると、DDNS が動き出し、movile station の DHCPREQUEST を受け入れて、named の zone table (cache) を書き直し始める。 但し、station が既に登録済みであれば新たな update は発生しない。 iPhone ならば、"Forget this Network" を実行して、 もし IP address が変われば、update が起きる(*.jnl ファイルが更新される)のが確認できる。

もう少し(15 分前後?)待つと、zone ファイル(*.zone, *.rev) が更新され、中身を確認できる。 以下は、DDNS が動き始めて、数時間後の otacky.jp.zone ファイル。

$ORIGIN .           ;; *1)
$TTL 86400      ; 1 day
otacky.jp               IN SOA  ns.otacky.jp. root.otacky.jp. ( ;; *2)
                                81         ; serial
                                1800       ; refresh (30 minutes)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                1200       ; minimum (20 minutes)
                                )
                        NS      ns.otacky.jp.   ;; *3)
                        A       192.168.0.12   ;; *4)
$ORIGIN otacky.jp.   ;; *5)
amufee                  CNAME   otacky.jp.
dms                     CNAME   otacky.jp.
eagle                   A       192.168.0.12
$TTL 300        ; 5 minutes
hawk                    A       192.168.0.102  ;; *6)
                        TXT     "31af492309a96e339fcf36044a1820db3c"
HP3A107D                A       192.168.0.137
                        TXT     "31272bac3ed4f70a18f4553c5db092149a"
$TTL 86400      ; 1 day
lark                    A       192.168.0.11
$TTL 3600       ; 1 hour
mac-mini                A       192.168.0.14
…………    
  1. *1), *2): 元のファイルの '@' が、'$ORIGIN .' と 'otacky.jp' で展開されている。しかしまだこれは省略記法で 'otacky.jp' は 'otacky.jp' + '.' で置き換えられる。
  2. *3), *4): 言うまでもなく、頭に 'otacky.jp.' が省略されている。
  3. *5): ここでも、'@' が展開されていて、以下の各行の左端のホスト名は、 例えば 'amufee' + '.otacky.jp.' => 'amufee.otacky.jp.' と解される。 (*1) から *5) までの展開は、named (bind) が、zone ファイルを最初に変更 (update) したときに行われる。
  4. *6): これ以降の TXT が付いたエントリは、mobile station が、 network に join した時に付け加えられたもの。

まとめ

という事で、そこそこ動くようになった。現在は、家庭内乱 (LAN) の、DDNS (と HTML server) は、lark (192.168.0.11) が担っている。(DMZ はまだ eagle (192.168.0.12) のままで、 他の雑多な業務はこれが担当している。

セキュリティがらみで、事が面倒になったから、という面もあるのだろうが、 このあたり Ubuntu のパッケージングはちょっとお粗末のような気がする。

という事で、できれば早々に 14.04-LTS に乗換えたいところだが、 パーティションを切ってないので、うまくやれるかどうか分らない。
2014-04-21 (Mon): パーティションを切ってなくても、 アップグレードはスムースに行った。 が、このあたりは改善されていない。(依然として、reboot の度に上の chown が必要。)

2013-11-01 (Sun): 新自宅サーバ(その 2)— 再インストール

どうも面白くない……

Lap Top をサーバとして使うのなら、 蓋を閉じてもスリープ (suspend) してはいけないのは勿論の事であるが、 これまでそれに悩んだ事はなかった。というか、Linux の場合、蓋をした時にきちんとスリープしてくれるようにするのが、 むしろ大変であった :-)。 しかし、ThinkPad X200 + Ubuntu 13.10 server の組合せでは、どうしてもスリープしてしまう。 そこで、仮に Xorg や Gnome をインストールして……と始めたら、 10/20 の日記に書いたような顛末となってしまった。 その後の何とかしようと色々とやってみたが、そもそも起動時に Xorg 立ち上げないようにする(Linux でいう Run Level を下げる)事さえできない。 (後で知ったのだが、Ubuntu には、Run Level は実質 2 までしかなく、 3 から 5 はどれも 2 と同じ。) で、このままインストールや設定を続けていいものだろうか、 と不安になってきた。

Ubuntu Server を再インストール

その不安が昂じて Server を再インストールする事を決心。 再インストールするならついでに是非、と思っていた partitioning だが、今回もやらなかった。 (考えてみれば、 System (Linux) を複数インストールするのでなければ、 partitioning の意味は無いように思う。)

インストールは前回同様、然程の困難も無く終った。 (DVD drive からの読み込みが異常に遅かったので、 途中でアボートして、また最初から始めるというハプニングも有ったが :-p) しかし、今度は Xorg や Gnome 無しでスリープを回避する方法を見付けなくてはならない。 これに随分手間取った。 というか、結局「そのものズバリ」の解決策は見付からなかった。 いささかの guess と cut & try の結果見つけた解決策は、

  1. acpi-support というパッケージを apt-get install する。
  2. それでインストールされる /etc/systemd/logind.conf を編集して、
    #HandleHibernateKey=hibernate
    HandleLidSwitch=ignore   ## """
    #PowerKeyIgnoreInhibited=no
    #SuspendKeyIgnoreInhibited=no
    #HibernateKeyIgnoreInhibited=no
    LidSwitchIgnoreInhibited=no  ## """
    #IdleAction=ignore
    のようにする。
これだけで、蓋をしても眠らないようになった …… それにしても、なんでこんな風になってんのやろね。

固定 IP アドレスにする

これも大変だった。こんなところで悩まされるのでは、道は遠い……。 /etc/host/etc/resolv.conf を書き変えるのではうまく行かない。いや、一見うまく行くのに、 しばらくすると、また元の木阿弥になる(誰かが書き直してしまって) なんて事が有って余計腹が立つ。 正解は、 要は、殺しても殺しても dhclient がゾンビみたいに生き返ってくるのに悩まされた訣だが、この上に DNS と DHCP を構築するのかと思うと、ちょっとぞっとする。

ネットワーク越しに設定

コンソール画面は、文字が小さし、Ctrl ⇔ CapsLock もできてないし、 でとにかく使いづらい。なので、何でもネットワーク越しにできるようにする。 (以下、設定中の host(新自宅サーバ) を lark, 作業する host を quadra とする。)

Lark の ssh-keygen で Passphrase なしで key を作ると、~/.ssh/id_rsa{.pub} ができる。そこに authorized_keys というファイルを作り、quadra の id_rsa.pub をそのファイルに入れると、password 無しで ssh や rsync が使えるようになる。

Emacs から、network 越しに、しかも su 権限でファイルにアクセスする…… 色々選択肢が有るようだが、私は結局 tramp に戻った。 Emacs-24.3 の tramp は非常に強力で、 ~/.emacs.d/init.el

(require 'tramp)
(setq tramp-default-method "ssh")
(add-to-list 'tramp-default-proxies-alist
             '(nil "\\`root\\'" "/ssh:%h:"))
(add-to-list 'tramp-default-proxies-alist
             '("localhost" nil nil))
(add-to-list 'tramp-default-proxies-alist
             '((regexp-quote (system-name)) nil nil))
としておくと、C-x C-f ~/filename とやるのと同じように、 等とできる。これは便利だ!

非常にコンパクトなサーバができた

Ubuntu server に ssh でログインすると、次のような Welcome メッセージが表示される。
Welcome to Ubuntu 13.10 (GNU/Linux 3.11.0-12-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sat Oct 26 18:36:51 JST 2013

  System load:  0.05               Processes:             113
  Usage of /:   1.1% of 144.48GB   Users logged in:       0
  Memory usage: 8%                 IP address for eth0:   192.168.0.11
  Swap usage:   0%                 IP address for virbr0: 192.168.122.1

  Graph this data and manage this system at:
    https://landscape.canonical.com/

Last login: Sat Oct 26 18:36:52 2013 from 192.168.0.2
fukuda@lark:~% 
一々こんなのが表示されると欝陶しいような気がするが、 一旦運用を始めて、 ほんのたまにしかログインしなくなったら、 これは便利かも。

ともあれ、これによると、 Xorg + Gnome が入っていた頃と比較して、 プロセス数で約 50、ディスク容量で約 2% (3 GB) の減少となっている。 (まだ特に不要なパッケージや daemon を削ったりしていない。) 素晴しい。


2013-10-30 (Wed): WLAN ルータを新しくした

前の WLAN ルータ (WHR-D300N) も特に問題は無かった…… たまに HP のプリンタや、家人の MacBook とのリンクが切れるとか、DMZ の動作がおかしいとかの問題は有ったが。 (いや、これらはやっぱり大問題だな。)

DMZ の動作云々は、「LAN 側から自分の global address にアクセスすると、DMZ 内のホストへ行かずに、ルータが応答してしまう」 というもの。しかしこの動作、従来から変ったのは確かだが、 間違っているかどうかについては、ちょっと自信が無くなっている。 ともあれ、これに対応するには、ホストの一つで DHCP サーバと DNS を連動させて働かせる必要があるが、 新しいホストでこれらをもう一遍動くようにするのは大変なので、 自宅サーバの整備は一旦中断して、新ルータの機能を調べてみる事に。

新しいルータは、同じ Buffalo の WZR-HP-NG300H。 本体の HTTP サーバで設定するのはとってもラクチンなのだが、 そのせいか紙のマニュアルが付いて来なかった。 こうなるとディフォルトの IP アドレスを捜すのが鬼門であるが、 有線で MBA に繋ぐと自動で認識してくれた。 (結局 192.168.11.1 でありました。)

設定の仕方は殆んど前のと同じなので、 迷うところも少なかった。

つながってから、LAN 側から固定 IP アドレスでアクセスしてみたが、やっぱりルータが応答した。 がっかり。やれやれ、やっぱり新サーバでも、dhcpd と named を立ち上げるのかぁ。

「DMZ の動作確認」のつもりだったが、 とりあえずちゃんと動いているようなので、 そのまま使い続ける事にする。

iPhone5c と MBA から RBB でスピード測定してみた。 いずれも 3回の平均。

新ルータの無線リンクを介して見た転送速度
Station iPhone5c MBA
RF Band 2.4G5G 2.4G5G
Upload(Mbps)17.617.5 16.417.7
Download(Mbps)36.845.5 35.445.7
上り 18 Mbps、下り 47 Mbps が我が家の B Flet's マンションタイプの実力なので、 2.4 GHz の下りが若干制限されている以外は、 殆んど B Flet's の性能で決まっていると言って良い。素晴しい! (というか、B Flet's ちょっと情け無いぞ。)

という事で、肝腎の自宅サーバへのアクセスは速改善されていないが、 WiFi アクセスは確かに改善された。とりあえず良かった、という事にしておく。


2013-10-20 (Sun): ThinkPad で新自宅サーバ(その 1)

自画自賛

我が家の自宅サーバは ThinkPad X23 を流用している。 途中、過熱して不安定になった事なども有ったが、 その後は、安定して動いてくれている。 たった今確認してみたら、
fukuda@quadra:~% ssh otacky.jp uptime
 14:31:17 up 875 days,  1:55,  0 users,  load average: 0.00, 0.00, 0.00
だそうな……。何と二年半止まらなかった事になる。 いやぁ、大したものだ。等と自画自賛している場合ではなくて、ストレージの方が
fukuda@quadra:~% ssh otacky.jp df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda6              7308368   6342744    588384  92% /
/dev/sda5              7308368   6284684    646444  91% /home
/dev/sda1               102454     62900     34264  65% /boot
tmpfs                   322148         0    322148   0% /dev/shm    
なんて事になっている——もう、各パーティションに 600 MB くらいしか残っていない、という事。 しかも、ちょっと前だが大幅減量した結果がこれなので救いが無い。

いつもながら目標はスマートなのだが……

DMS は既に 1GB を超えているので、これを入れるためだけでも何とかしないといけないのだが、 Mac-mini サーバ + UPS という構想は、円安のせいで 10万円をかなり上回るようになり、ちょっと二の足を踏んでしまう。

放置というか、heat-run している ThinkPad X200 が当然の候補だったのだが、こいつがどうも安定性が今一で、 heat-run 中に勝手に落ちていたり、hang-up したり、 という事が一度ならず有った。 しかし、背に腹は変えられない。これで行くのだ。 (この数ヶ月は止まってないし。)

構想は「何しろ手抜き」に尽きる……つまり、時間を掛けない、という事。 これは要するに X11 を入れなければ良さそうだ。 新しい Linux をインストールして、一番凝ってしまうのは、 Emacs, Terminal, fonts, ...。 なので、X11 を止めて、 これらも一切触らない、と決心する。

Ubuntu インストール

Linux を何にするか随分迷ったが、とりあえずは出たばかりの Ubuntu-13.10 にしておく事にした。

  1. Server-version (ubuntu-13.10-server-amd64.iso) が見付かったので、それを download。
  2. これを Lion の Disk Utility で CD-R に焼き、
  3. portable DVD Drive に入れて、ThinkPad を起動、インストーラが立ち上がる。
  4. locale, language 等の設定は全部ディフォルトを選ぶ (すなわち、Asia/Tokyo, en_us.UTF-8, English KBD)
  5. しかし、partition には戸惑った。普通の Ubuntu にある、あの素晴しい GUI が無いので、どうやれば良いか分らない。 (昔は皆こうだったのに……。色々右往左往したが、結局、全体を 1 partition にして、別途 swap 領域だけを作った……最初の躓き。)
  6. インストールは殆んどノータッチで完了
  7. hostname, primary user は前の Ubutu の通り。
実は、この 5. で、"go back" を使って、 行ったり来たりしているうちに、フリーズしてしまった。 一旦 shutdown して、3 から再開。二度目は問題無かった。 (暗雲その 1。) で一応は完了。再起動すると、素早く立ち上がる……が、 いかにもディスプレイの文字が小さい。 反射的に弄りたい!と思うが、ぐっとそれを我慢して、Quadra (MacPro) から、ssh で login して全てを済ませる事にする。 (CapsLock ⇔ Control キーの交換さえもやらない。) お約束の

いつもながらスリープは頭痛の種

というあたりで、大変な問題に行き当った。 現在までのインストール・設定では、蓋を閉めた状態で使えない、 つまり蓋を閉めたら、自動的にスリープモードになる……。 Google 先生に聞きまくってみたが、server での対策はどこにも書いていない。

gconf-editor とやらをインストールしてみる事にしたが、 これを始めると、なんと延々と X11 をインストールする羽目になった (initx -> gnome) 最初の方針の変更を余儀なくされてしまった訣だが、 これは仕方ない。後で、X11 を外せば良いだろう。

Gnome の画面からログインしてみると、MacOS X に似た system preferences の画面から、power というペインで、蓋をした時の動作を選べる。 しかし、これだけではまだ有効でない(蓋をしたら、sleep してしまう。) ちょっと暗〜い気持になったが、reboot したら、 ようやく所望の動作をするようになった。

やれやれ、と X11 を外しにかかるが、外すどころか、 X11 を止めるだけで、上記の設定がオジャンになる…… そもそもこの X11 (Xorg?) がちょっとおかしい。 立ち上げてしばらくすると、画面からログインできなくなる。 Ssh のログインはできるから、実害は無いと言えば言えるが、 なんとも嫌な感じである。(躓き、その 2)

ポスト・インストール

という事で、かなりモチベーションは下ってしまったが、 様子見かたがた もうちょっと設定を進めておく。
  1. Python2.7 の Django をインストールして、 他の必要なモジュールともども import してみる。
    % fukuda@quadra:~% ssh lark
    % fukuda@lark:~% sudo apt-get install -y python-django    
    % fukuda@lark:~% python
    > Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
    > [GCC 4.8.1] on linux2
    > Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy
    >>> numpy.version.version
    > '1.7.1'
    >>> import sqlite3
    >>> sqlite3.version
    > '2.6.0'
    >>> import django
    >>> django.version
    >>> django.get_version()
    > '1.5.4' 
  2. httpd 他をインストール
    fukuda@lark:~% sudo apt-get install -y apache2
    fukuda@lark:~% apt-cache search mod_wsgi
    libapache2-mod-wsgi - Python WSGI adapter module for Apache
    libapache2-mod-wsgi-py3 - Python 3 WSGI adapter module for Apache
    fukuda@lark:~% sudo apt-get install -y libapache2-mod-wsgi 
  3. mail 関連の確認と、新規インストール
    fukuda@lark:~% which procmail
    /usr/bin/procmail
    fukuda@lark:~% which dovecot 
    /usr/sbin/dovecot
    fukuda@lark:~% which postfix
    /usr/sbin/postfix    
    fukuda@lark:~% sudo apt-get install -y mailman 

ちょっと試験

インストールはこれくらいにして、DMS を、rsync で Larkにコピーして、例によって

fukuda@lark:~/waremo_dms% python manage.py runserver 0.0.0.0:8000 
として公開してみた。すると http://lark:8000/index/ で、問題なくアクセスできた。mod_wsgi のために色々苦労させられたが、 おかげで、かなり relocatable になっているようだ。Django が 1.5.4 というのも、既知のセキュリティ問題をクリアできている (MacPort はいまだに 1.5.1) という事なので、これで公開を先延ばしにする理由が無くなった。

本当に面倒なのはメール関連なのだが、 意外な伏兵に手間取ったので、きょうはこのあたりで「これくらいにしといてやらあ」 と言う事にする。


2013-10-17 (Thu): iPhone 5C で Tethering(再訪)

Tethering の転送速度

ショップで電話番号を書き込んだだけの状態で、 しかもモノ・レールの中という条件なのに、初めての接続でいきなり
# 5C + MBA @多摩モノレール
【RBB TODAY 回線スピード測定】
 2013/10/09(Wed) 18:26:41 
    下り:27.94Mbps 
    上り:4.91Mbps 
などというスピードが出たもので、少々有頂天になって、 「我が家の光ファイバーと遜色無い」なんて書いたが、 上りはかなり見劣りするし、下りも「まぐれ」だったみたいで、 他の箇所では、良くても 20 Mbps そこそこだった。ちなみに、我が家の最新の測定では
# Flet's 光(マンション) + Quadra (MacPro) @自宅
2013/10/16(Wed) 12:08:58 
    下り:47.42Mbps 
    上り:18.33Mbps
で、まあかなり差は有る。(そうでなかったら、Flet's さん形無し。)

という結論に持って行こうと思っていたのだが、 しかし、本日、我が家で(用も無いのに)Tethering を試してみたら、

# 5C + MBA @自宅
2013/10/17(Thu) 17:20:50 
    下り:34.42Mbps 
    上り:17.55Mbps 
なんて値が安定して出る……。うーむ、「凄いぞ LTE/A」と言うべきか、 「お願いしますよ Flet's 光さん」というべきか。(もっと性能改善しないと au に乗換えるぞ!:-) )
2013-10-20 (Sun): これはどうも、10/17 の好結果が「まぐれ」だったような……。 その後、(専用アプリをダウンロードして :-) 時々見ているが、もとの「そこそこ」の値さえ再現しない。 そもそも、その時のようにアンテナが 5 本立つ事が無い。 基地局側の何かが根本的に変ったのではないかと思う。 (SB さん、ケチったか?)

Tethering カバレージ

元々、この四国への帰省のために慌てて買った事でもあり、 行き帰りの新幹線や特急の中では意識して使ってカバレージを確認した。 (Station はいずれも MBA.) EMOBILE を持って新幹線に乗ったのは 8 月だったから、 若干時期的に差は有るが、カバレージの差は明白だろう。 あと、スピードの改善もさる事ながら、 データの接続断が少くなった事も特筆に値する。 実際、新幹線のトンネル内と、3G 領域(三豊市の病院)以外では、 殆んど接続が失われる事は無かった。 ただ、一つ気がついたのは、アンテナが 1/5 個(本)になった時は、通話はできても(未確認)、 データ通信はできない事が多いという事。

という事で、カバレージについては EMOBILE との差は歴然。 スピードについても、はっきり改善されている。 (しかし、後者については 3G の旧機種 (D25HW) が相手なので、 比較は公平ではないかも。)

iPhone 4S をどうしようか

一応、iPhone 4S の残債を棒引きにしてもらう、つまり、本体を返してしまう、 という契約にしてきたが、実際に返すかどうかは、5C を触ってみて、 と思っていた。(それ程、iOS7 の第一印象は酷かった。)

Music.app on iPhone4S
4S の Music(AudioBooks)
File ごとに分れている


Music.app on iPhone5C
5C の Music (AudioBooks)
Part がひとまとめに

一番気になっていたのは、Music アプリの AudioBooks を聞く時の GUI。 当初、15秒送ったり戻したりするボタンが無くなった、 と思ったが、これは早とちりで、AudioBooks を聞く時には出てくるようになっている。(あと、PodCast を聞く時にも出てる、ちょっと感動。) それより実質的な差は「ファイルの扱い」だろう。 iOS6 の Music.app は、ファイルごとにプログレスバーが出るが、 iOS7 になって、本一冊分が、一つか二つの part に分れていて、 それごとにプログレスバーが出る。「▶▶」や「◀◀」を押した時の論理的な動作は、 いずれも、次(前)のファイルへ行く、であって、もし、 ファイルがきちんと章に対応していれば、どちらにしても使い勝手に然程差は無い。 が、もし、そうでなければ、iOS7 の方は、 表示される経過時間がボリューム (part) 内の通算時間だから、とても使い難いものとなる……

そうは言っても、そんな羽目になるのは、どうやら今読んで(聞いて)いる "On Intelligence" だけのようだ(これは録音がちょっと古い。) ちょっと悩んだが、この本 (AudioBook) だけのために、iOS6 (4S) をキープするのも何だかなぁ、と思えてきたので、 これは返して、残債棒引きにしてもらう事にする。


2013-10-12 (Sat): iPhone 5C で Tethering

何とも間の悪い事になってしまった……

成り行きで、5C になる

この頃は、もう然程外出する必要がなくなって Poket Router の使用頻度も然程高くない。なので、EMOBILE を解約した——実は、 違約金を免れるために SuperLight の契約に変更しただけ。 でもこれ、うっかり使うと大変な事になるので、解約したも同然。

今頃そんな事に踏み切ったのは、言うまでもなく iPhone 5S/C が出るだろうと見込んでの事だった。 初期ロットは避ける、前評判が悪い iOS7 の味見をしてみたい…… なんて思惑も有って悠長に構えていたが、そうこうしているうちに、 急遽、帰省する事になった。

そうなってもまだまだ余裕。仕方がない、au さんで手を打つか、てなもの。 一時、我駅前の Nojima の au さんの売り場で「iPhone 5S/C ストック有ります」 の張り紙を見たのだった。(件の 4G カバレージ詐称事件のせいかなぁ、 なんて思っていた。) が、しかし、いざ購入するつもりで行ってみると、S も C もストックは無く、S に至っては、予約しても入荷の予定は言えないんだとか。 (出た! Apple Delivery!! そんなことばっかりやってると、そのうちほんまに泣き見まっせ、Apple はん。) それで、近くの DoCoMo さん(正規販売店) へ行ってみると、C は有るけど、S は予約のみ受付で、 やっぱり納期は答えられないんだとか(「でも、Gold でなければ一月はかからないと思います」 「バカヤロ(とは言わなかったけど)」。)でも、まあ 背に腹はかえられず、 で C で乗り換える事にした。そう告げると、「SB さんの『予約番号』が必要です」だと。

SB の販売店へ行って、いきなり「予約番号下さい」と切り出したのだが、 なかなか感じの良い引き止めトークに気を良くして(以前の SB さんとは様変り……いやぁ、「競争」って良いもんですなぁ) というか、本当は「残債棒引き」オプションにコロリとやられて、「機種変」にして しまったのだった。(何より、あんまりごちゃごちゃやってると、 次の大事な約束に間に合わなくなりそうだったし。)

Tethering

という事で、紆余曲折、泥縄、ながら、久し振りで Jail-break 無しで tethering ができる iPhone を手に入れたのだった。しかも、今回のは かつての AT&T 版とは違って Bluetooth だけでなく WiFi でも MBA と継がる。

最初は自宅にも帰らず(つまり、バックアップをリストアせず)早速、MBA に継いでみた。多摩モノレール上だったが、何と

【RBB TODAY 回線スピード測定】2013/10/09(Wed) 18:26:41 
    下り:27.94Mbps 
    上り:4.91Mbps 
を得た。これは我が家の Flet's 光、マンションタイプと遜色がない。 が、どうやらこれは超ラッキーなベストケースだったようで、それ以降は 20 Mbps を超える事は無かった。

帰宅して、MBA との WiFi 接続で何度か測ってみた結果を、EMOBILE の D25HW と、iPhone 4S (Jail-break 版)と比較すると、概略次の通り:

Model       上り         下り
=========================================
D25HW:     1.3Mbps     3.9-6.1Mbps
iPhone 4S: 0.54        3.1    
iPhone 5C: 3.0         10-18 (自宅)
iPhone 5C: 2.8         12-16 (実家: 香川県)
さすが 4G、大したもんだ。スピード(転送速度)は問題では無いとはいいながら、 ちょっと嬉しい。

しかし、やはり本当のメリットは、その起動・接続の機敏さと応答速度だろう。 iPhone 側を discoverable にしてから(つまり、Personal Hotspot を On にしてから)、接続が確立するまで 5-6 秒くらいしか掛らない。 iPhone が discoverable なままの状態からだと、MBA を開いてから、ほんの、1-3 秒で接続できる(つまり、menu bar のアイコンが「鎖」に変わる)。 これはちょっと感動ものである。しかし、一方、iPhone 側が discoverable でなくなり接続が切れた後では、再度 discoverable にした後、いくら待っても、接続できない。MBA の蓋を開閉しないと、search で iPhone を見付けても接続しないようだ。

関連の設定・操作方法は、iPhone 3G の頃から殆ど変っていない。 つまり、Settings の Personal Hostspot のページに行けば、discoverable になり、 その他の設定は一切できない……。まあ、今のところ結果オーライであるが、 せめて DNS や、不使用で接続断までの時間くらいは触れたらうれしいのだが。


2013-10-11 (Fri): 身辺雑事

HHKB Professional

スリープから立ち上がった時しばらく入力を受け付けないという症状が、 Dip-SW を触っただけで魔法のように解消したので、その分再発が心配だったが、 その後二週間くらい一度も問題は出ていない。

その間は、意識して HHKB のドライバや件の Dip SW を触らないようにしてきたので、どうやら、その SW あたりの接触不良が問題だった、という事のようだが、なんとも割切れない気持が残る (「高かったんだぞ、このキーボード」みたいな。)

Logicool Mouse

VMware Fusion 上の Windows 8 がとっても遅くて、窓をドラッグするのにギクシャクしてどうしようもない…… と馬鹿にしていたのだが、我 Lion でも似たような事が起き始めた。 最初は、cut や copy のための範囲設定がうまく行かないなぁ、から始まって、 pull-down したメニューが、ばたばたするようになり、ついには、 窓を動かすために捕むのに失敗するようになり……と段々エスカレート。 ほんの偶に、だったものが、段々頻度が上ってきたので、 何とか我慢できていたが、さすがにもう限界、となって、 色々四苦八苦してみた。が、何をやっても改善されない。 (症状が断続的かつ稀なので、しょっちゅう「あ、直った」と思ったが、 いずれも糠喜びだった。)

むしろマウスが怪しいのでは、と思い始めたものの、そこから先へ行けずに居たが、 iPhone を買いに量販店に行ったので、ついでに Logicool の M310 (2,300 円也) というモデルを買ってきた。 早速既存の 5 button マウスと置き換えてみたら、問題は綺麗に解消……。 しかも、既存のに戻したら、また症状が出る。又新しいのにしたら、直る。 要はきれいな再現性がある、という事で、既存のマウスが犯人であった。 しかし、この Logicool 製のマウス、デザインが気に入っていたし、 高かったんだけどなぁ。 それに引き換え、M310 はいかにも廉価版という外観をしている。 機能も少くて横スクロールができない。 しかし、確実にマウスが(つまり窓やボタンが)応答してくれるという事に比べたら、 そんな事はゴミみたいなもんだな。 という事で、マウスとキーボードに関する懸念が解消したので、改めて、本体も あと 3年は使うぞ!と。


2013-10-05 (Sat): Django 版 DMS 再訪(その 3—まとめ)

われも工房の DMS がようやく動くようになった——というか、 もういい加減飽きてしまって、デバッグ方々実際のデータを入力しはじめた。 で、これまでの四苦八苦の覚書。

Python-3 対応

これを実現しようとして相当待った(先延ばしの口実にしたとも言う)のに、 Tutorial をやっていていきなりひっかかった……
class Document(models.Model):
    doc_id = models.CharField(max_length=40, unique=True)
    ....
    def __unicode__(self):
        return self.title
__unicode__() が文句を言われたところだが、 これは道が遠そうだ、と一旦は諦めたのだった。

しかし、Python が 3.3.2 になり、Django が、1.5 になってから、 development server を、python-3.3 で起動しても、 それについては文句は言われなくなったし、 きちんと立ち上がってその後も問題なく応答してくれる。 偉いぞ! Python/Django ....

が、実際の稼動開始にあたっては、もう一度壁にぶちあたったのだった。

タイプの自動変換

その後いろいろやってみたが、やっぱり DATE_(TIME_)FORMAT はマニュアルに有るようには動いてくれない。結局、 という事のようだ。

ここまでのところは、解ってしまえば何という事もないが、 「年月日」ではなく「年月」のみ、もしくは「年」のみの日付も許すとなると、 これはなかなかややこしい……。String で表わす、と割り切ってしまえば却って簡単になりそうだが、 しかしそれでは、validation や sort がうまく行かない。苦肉の策として、 たとえば、'2013-10' という日付は、無理矢理 datetime.date(2013, 10, 1) というオブジェクトにしておき(一日を仮置き)、別途、'%Y-%m' という format を準備して、'2013-10-01' と区別する、という事にした。 スマートではないし、あまりにも大仰だが、ネット上の PDF ファイルの中には、発行日が「年月日」まで揃ってないものの方が多いくらいなので、 これはどうしても必要なのだった。

String でない もう一つの data type は Bool。

なので model object には、正しく Bool に直してから代入する必要がある。例えば
    hoo.bar = (tmp == "True") 
のように。

Directory を再構成

Django は 1.4 のあたりから?全体の構成を、1 project の下に複数の application がぶらさがるモジュール構成を推奨する形になっている。 が、それが不徹底で、template は application 内だけで捜す訣ではなく、それを跨いで project の中を捜し回る事になる。 なので、違う application で、base.html という一般的な名前を使うなら、下の図の「manual が勧める方式」を採用する事になる。
~/waremo-dms  # Project Top Diectory
    mysite/
        settings.py
        db.sqlite3
        urls.py
        views.py
        models.py
    index/     # Application, index のディレクトリ
        urls.py
        views.py
        models.py
        templates/
            index_base.html
            index_new.html
            index_menu.html
            ....
#           index/   # manual が勧める方式 
#               base.html
#               ....
        statics/      # static files は全てここに集める
            default.css
    users/     # Application, users のディレクトリ
        urls.py
        views.py
        models.py
        templates/
            user_login.html
            user_profile.html 
#           users/         # manual が勧める方式 
#               login.html
#               profile.html
    
しかし、これは {% extend .... %}{% include .... %} でファイル指定をする際にやたら話をややこしくするので、 これは採用せず、 doc_base.html, user_base.html のような名前の file を templates/ の直下に置く事にした。

CSRF 対策

前々回、一度は「CSRF 対策は無視しよう」と決めたのだが、 先々ひょっとすると公開する事になるかも知れない、 という事で対策を試みた。

例によって、Django の Reference はわかり難いが、要するに、 views.py の中で、<form type="post"> を含む template を呼ぶ前に、必ず

from django.core.context_processors import csrf
...    
def index_form(request):
    c = {}
    c.update(csrf(request))
    csrf_token = c['csrf_token']
    ....
    return render_to_response('doc_help.html', { 'menu': menu,
                 'user': user, 'csrf_token': csrf_token, ....})
として、doc_help.html にその値を渡し、一方その template では、すべての <form type="post"> で、
    <form action="/index/form/" method="post">{% csrf_token %}
    ....
    ....
    </form>
のようにしておけば良い。

Apache2 + mod_wsgi

実稼働にあたって、html server として何を使うか随分迷った。 上記の development server では performance と security が十分でないとの意見が多い。この DMS は外部に公開する予定は無かったのだが、先々ブログを Django にしようかな……なんて野心がつい湧いてきて、Aapache2 + mod_wsgi を使ってみようと決心した。

MacPort の mod_wsgi は -3.3 で、Python-2.6 専用らしい。 インストールしようとすると、無理矢理 python-26 もインストールする…… Python-2.6 なんて長くつかってないので、互換性が心配。 いきなり躓いてしまった…… 仕方ないので、最新版 (-3.4) を手でコンパイルする事にした。 (ちなみに、ソースコードは、www.wsgi.com には無くて、 google+ まで行く必要がある。) これをコンパイルするのだが、

fukuda@quadra:~/build/mod_wsgi-3.4% ./configure 
    --with-python=/opt/local/bin/python3.3
    --with-apxs=/opt/local/apache2/bin/apxs
fukuda@quadra:~/build/mod_wsgi-3.4% make && sudo make install 
clang: error: linker command failed with exit code 1 (use -v to see invocation)
apxs:Error: Command failed with rc=65536
.
make: *** [mod_wsgi.la] Error 1
fukuda@quadra:~/build/mod_wsgi-3.4% 
となってダメ。 ここで、--with-python に python2.7 を指定したら、問題なく通った。 なんだか悲しいが、 これは本来のサーバ上でコンパイルし直す時に悩む事にする。

続いて、httpd.conf の設定。課題は Virtual Host を使う事。 つまり、他のサイトとの共存を目指す。ローカルの hdcp + DNS サーバの設定を弄るのは面倒なので、とりあえず port 番号で区別する事にし、

LoadModule wsgi_module modules/mod_wsgi.so  #1)
    
#WSGIPythonPath /Users/fukuda/waremo_dms
Listen 8084
<VirtualHost *:8084>
    ServerName quadra.otacky.jp

    Alias /static/ /Users/fukuda/waremo_dms/documents/static/ #2)
    WSGIScriptAlias / /Users/fukuda/waremo_dms/mysite/wsgi.py #3)
#    Alias /files/ /Users/fukuda/waremo_dms/documents/files/
    <Directory /Users/fukuda/waremo_dms/mysite > #4)
      <Files wsgi.py> #5)
	Order deny,allow
	Allow from all
      </Files>
    </Directory>
</VirtualHost> 

として、一応動くようにできた。察するところ

  1. 先にコンパイル・インストールしてできた mod_wsgi.so をロード
  2. static ファイルのありかを明示。(Static file へは、httpd が直接アクセスする。)
  3. Django で、% /fullpath/to/django-admin.py startproject mysite とした時にできるファイルの一つである mysite/wsgi.py を指している。
  4. .../mysite/以下へのアクセスは
  5. wsgi.py を介して行う……
という事のようである。

一応動くようにはなったと見えたが、そうは問屋が卸してくれないのが Appache さん。 何と database file とその親ディレクトリ、また、file を upload する先のディレクトリは、 other への wirte-permission が必要なのだった。

Static Files

ここで言う static file とは、CSS file とか、img が呼ぶ 画像ファイルの事。 同様の操作でも、上に述べた template が他の template を include する等は、 Django の仕事であるが、static files を供給するのは http server の役割である。(最初は、「なんでこんなにややこしくするの?」と思ったが、 よく考えてみれば当り前。)

しかし、Django 初心者には、これがまたとっても分り難い。Develpment server で動いていたものを、半自動で httpd + mod_wsgi で動くように構成し直す middleware がある事なども、理由かも知れない。 要は、パラメータがいくつも有って、あちこちに散らばっているから。

例によって minimalist approach(手抜きとも言う)で、概略次にようにした。

# mysite/settings.py
INSTALLED_APPS = (
    ....
    'django.contrib.staticfiles',  # <<< 
    'django.contrib.admin',
    'django.contrib.admindocs',
    'users',
    'index',
)
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
index_base.htmluser_base.html の HTML file の中では
<!DOCTYPE html> 
<html>
  <head>
    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"/>
    {% load staticfiles %}
       <link rel="stylesheet" type="text/css" href="{% static 'default.css' %}" />
また、上記の httpd.conf ファイルの中で関係する部分は下の行。
# httpd.conf
    Alias /static/ /Users/fukuda/waremo_dms/index/static/ #2) 

まとめ

ワークフローを洗練するとか、httpd で公開するとか、waremo.com で数人で使うには殆んど無関係なところにやたら時間をかけてしまい、 少々飽きてきたが、まあ、とりあえず、 データ入力(文書の登録)は始められそうである。

また、余計な手間を掛けたところは、次の project (HyperCard スタックの移植)に応用できそうなので、満更無駄でも無かった(と思いたい。)


2013-10-02 (Wed): Lion 再インストール、その後

2TB HDD と置き換え、それに Lion を再インストールしたのが、もう 10 日前になるのか。概ね順調。

正確な測定はしていないが、とりあえずの好印象は、 アプリケーションの起動が速くなった事。特に Emacs.app と Firefox.app, Chrome.app の起動は見違える程機敏になったような気がする。 しかし、ちょっと悩ましい事もあった。

IPv6

実は、これまでがどうだったかよく憶えていない。 が、re-install の後は enable されていて、 syslog にこれがらみで error や warning がやたらたくさん出ている。なので Disable したいのだが、やりかたが分らない。Google と押し問答した結果、
fukuda@quadra:~%  sudo networksetup -setv6off "Ethernet 1"
とやれば良いようだ。これで System Preferences > Network > Advanced で Configure IPv6 が Off になっている。(どうして、 GUI でやれないようにしてしまったんだろね、Apple さん。)

Skype

「我 MacPro はすこぶる安定で、7 年間で OS フリーズはたったの 2 回」が自慢だったのだが、こいつのおかげで、この夏たてつづけに 3 回 OS フリーズしてしまった。これが、HDD 拡張、OS 再インストールに踏み切る直接のきっかけだったかも知れない。

Skype の方もその後 3 度程バージョンアップが有った事もあり、 このところは(OS 再インストールの前後を通じて) テレコンをやってもフリーズするという事はない。 が、tail -f で syslog をウォッチしていると、

Oct  2 06:22:26 quadra Skype[63919]: Warning - conversion from 64 bit to 32 bit integral value requested within NSPortCoder, but the 64 bit value 9223372036854775807 cannot be represented by a 32 bit value
Oct  2 06:22:27: --- last message repeated 1 time ---
Oct  2 06:22:27 quadra VDCAssistant[63923]: AVF encoder error: fail to create accelerator instance     
等というのが盛大に出ている。この例では 2 回繰返しているだけだが、時によると 38 回なんて事もある。NSPortCoder の方は昔から広く知られたエラーで、LT spice を Wine から起動すると時々見られる。 一時の極端な不安定さは、このからみではなかろうか。 ったく、M$ さん、お願いしますよ、だね。

HHK

これもとっても満足しているデバイスの一つ。使い始めて 4 年になるが(言うまでもなく)キータッチに変化はない。 が、このところ(半年くらい?)ちょっとした不具合が有った。 つまり、sleep から起きた時、しばらくキー入力を受けつけない。 短い時で、数秒。長いと 10 秒程度も待たされる。

これも、tail -f で syslog を見る習慣ができたから見つかったのだと思うが、

Sep 29 12:02:07 quadra com.apple.kextcache[55182]: HHKeyboardPro.kext does
    not declare a kernel dependency; using com.apple.kernel.6.0.

    ... 同上のメッセージ 5 回繰返す
    
Sep 29 12:02:10 quadra com.apple.kextcache[55182]: HHKeyboard.kext does not declare a kernel dependency; using com.apple.kernel.6.0.    

Sep 29 12:02:12 quadra com.apple.kextcache[55183]: / locked; waiting for lock. 
等というのが見つかった。
HHKBD and Logicool's optical mouse
HHKB Professional2 と Logicool の無線光マウス
もう永久に使えるのでは、と思っていたのだが

これは HHK のドライバのせいに違いないと、fpu さんに問い合わせてみた。 翌営業日には返事が来て、色々アドバイスをして下さった。 しかし、どれも自社のドライバは疑ってないようで、ちょっとがっかりしたが、 (Log は読んでくれない、のが最近のトレンドなのか?) まあ、とりあえず簡単なのから、という事で、最初のアドバイスの「HHKB の背面ディップスイッチの SW6 を On に」をやってみた。 もともと On だったので、(ダメもとで)Off にしたら、 何とこれがクリーンヒット。問題はきれいに解消した。 件のメッセージも出てないようだ。

が、確認のために同スイッチを On に戻してみたが、何と、それでも問題は出ない。 うーむ、なんか嬉しさが半分くらいになったが、 取り敢えず直ったので……

マウスドラッグ

これは、キーボード問題よりずっと新しいが、OS 再インストールの前から出ていたように思う。 あまりはっきりしないのは、最初は単なる操作ミスかなと思っていたから。 症状はマウスドラッグでリージョンを指定しようとすると、 何故か始点が動いてしまう、というもの。 (ちょっと分り難いかも……「Windows のウェブブラウザで、URL 欄をコピーしようとした時の感じ」) 最初は稀だったが、段々酷くなり、このごろでは pull-down したメニューが「またたく」事もある。 つまり、どうやら、マウスボタンが一瞬 up になった(手を離した)事になっているようだ。

最初疑ったように、Skype や Time Machine, AquaSKK のせいでは無さそうで(これらの ON/OFF にかかわりなく問題は発生する) しかも、その間に syslog に何もメッセージが出ないので、 ちょっと途方に暮れている。マウスの無線部の寿命かなぁ。 (しかし、「ボタンを一瞬離してまた押す」という信号を作り出すような 雑音もしくは誤動作も、これまたちょっと考え難い。)


116/1,729,015 Valid CSS! Valid HTML 5.0
Taka Fukuda
Last modified: 2016-02-14 (Sun) 14:35:25 JST