オタク日記
(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 全体の再インストール」なんて事もやったが、 いつまでもそんな事をやっていてはいけないだろう、という事で、 ちょっとムキになって依存関係のもつれの解消方法を追及してみた。
で、辿りついた「解消方法」は
- inactive なパッケージを削除 (
% sudo uninstall inactives
) << これで随分手間が省ける。 - X11 の大物アプリ (gnuplot, wine-devel) をまず uninstall.
-
% sudo uninstall leaves
と% sudo uninstall unrequested
を繰返し実行する。 -
% sudo uninstall pango cairo xorg-server
としてみて、これに依存している package が無いか確認。有れば、それらを uninstall。 - 上記 3. を再度実行。
- gnuplot を install.
- MacPorts 全体として、X11 との関係が大幅に変更になっていて、 例えば cairo@+no_x11 などというオプションは無視される(強制的に +x11 となる。)(← ひょっとしたら、随分前からそうなのかも知れない。)
- library 他を個別にインストールするのではなく、 アプリケーションをインストールして、その際に unrequested として自動でインストールされるようにするのが吉。
- こうしておくと、そのアプリケーションが不要になった時、上の
% sudo unistall {leaves|unrequested}
で、それが依存していたライブラリ群を一発で消去できる。 - この事のメリットは、ディスク容量の節約よりも、 依存関係のトラブルの解消が手早くできる、という事にある。 (ひょっとしたら、そういったトラブルそのものを減らせるかも知れない。)
- 上に挙げたコマンドだけ使っていれば、相当大胆な事をやっても、 emacs-mac-app や python27/python33 等は無事。
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): できるだけ X11 を避けてきたので +no_x11 の cairo と pango になっていた。 もし最初から xorg-server 入れるのなら必要ないかも。
- *2): これは必須。特に、Binary 版の XQuartz が入っている時は、これをやらないと「大混乱」の元。
- *3): make に滅茶苦茶時間がかかる
- *4): MacPorts 版である事を明示的に指定するために full-path で(最初だけ。)
ps -ax
で表示される
/opt/X11/...
のコマンド群が、てっきり MacPorts
版の xorg-server
だと思っていたが、それは初歩的な勘違いで、それは macosforge 版の XQuartz
だった *^^*。
で、改めて再確認してみたが、
以下の組み合わせのどれでも、Monitor mode
に入れる事も含めて問題なく動くようだ。
- macosforge 版 XQuartz + binary 版 WireShark
- macosforge 版 XQuartz + MacPorts 版 WireShark
- MacPorts 版 xorg-server + MacPorts 版 WireShark
こうなると、これまで通り MacPorts の X11 (xorg) は避ける事にしたい、 つまり 1. で行きたい。要は、XQuartz も Wireshark も .dmg ファイルからインストールしたものを使って行く、という事。
また、以下のステップは、どの場合でも必要かつ有効である。
ここまでは Quadra/Hawk 共通。以降は、WiFi I/F を持つ Hawk だけの設定。
と言っても、en0 I/F を 'Monitor Mode' にするだけであるが、しかし、これがまた分らずに半日潰した…… どこにもドキュメントされてないように思う。 要は、WS の Preferences Menu (スパナとドライバのアイコン) をクリックして、次のような pane を出し
左端のメニューから Capture を選んで、Interface Edit... ボタンをクリックすると ようやく、夢にまでみた "Monitor mode check-box" が表われた。これにチェックを入れて、capture すると、 のように、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): こう指定しないと、'~' (tilda)
表記が使えない(前からこうだったっけ?というか、
/bin/sh
は、大分前から/bin/bash
の symbolic link だったような?) - *2): 従来通りに実行結果をメールで知らせるようにするには、これも必要。 (Postfix の aliases で root は fukuda に向けられている。)
- *3): DynDNS への一種の 'heart beat'... 今や、サイトのglobal IP
は固定なので、DynDNS へアクセスする事は殆んど皆無。
(
otacky.jp
に加えて、waremo.com
も確認するようにした。) また、ipcheck.py
を最新版 (0.251) にした。 - *4) 一時間ごとに外部から見た時ドメインの IP を確認する、のが本旨だが、今やむしろ外部の DNS サーバにアクセスできるかどうかを確認しているだけになっている —— 固定 IP なので。
- *5) Spambayes のトレーニング。日に 2回に増やした。
- *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
これまでのところでも、セキュリティに関しては旧サーバに比較して相当強化さ れている (と思う。)- dhcpd -> bind の update に rndc 認証を使うようにした (そうした、というより bind9 は rndc を使う事がディフォルトになった? overkill?)
- bind が forwarder DNS にアクセスする時は、dnssec 認証を使う (overkill?)
- dovecot への IMAP4 によるアクセスには imaps (993) を使う (<< clear password にしかできていないが、 これは Wanderlust/Emacs 側の能力の問題か?それに、gmail.com の IMAP もそうなので、まあよしとする。)
- ssh はパスワード認証を禁止した。 (上のターミナルのダンプは公開鍵認証を使っている。が、Emacs の rump とのからみで、現在はこのパスワード認証の禁止を中止している。)
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): これだけで ufw による設定が有効になり、 再起動時にも自動で有効になる。
- *2): 旧サーバではどうしても実現できなかった ssh の頻度による制限であるが、Ubuntu ではこれだけで設定できてしまった……ちょっと感激。 30 秒間に 6回以上アクセスしてきたら、その IP からのアクセスを一定時間(実測によると 2 分くらい)拒否する、という事らしい (reject でなくて deny)。 おかげで、かつて一日に 10,000 回あまりも有った ssh port への「攻撃」が、今はせいぜい 100 回くらいになっている。 116.255.204.132
- *3): 最も普通に「port XX を開く」というコマンド
- *4): local network からのみアクセスを許す。 bind の設定ではうまく行かなかった(router を介して外から来る request の IP アドレスは local address になっていて弾けない)が、 ufw (iptables) ではちゃんと動く。(考えてみれば不思議。)
- *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 に対して応答するようになる。
勿論ここで '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 になっている訣で、このあたりにあまり拘る必要も無かったかな、という気もしている。
応答の体感速度はかなり改善されている。 あまり定量的ではないが、 これまで間に合わせにやってきた測定でも、この事は示されている。
- ネットワーク (PPPoE): NTT の「B Flet's」 の上りが以前より遅くなっている (27 ⇒ 17 Mbsp: RBB Today による測定) が、 これはレスポンスにはあまり影響していないようだ。
- ネットワーク (Local): 富山大学から、Ubuntu の iso
イメージを wget して比較。
Eagle: (683.95 KB/s) - `ubuntu-13.10-server-amd64.iso' Lark: (1.18 MB/s) - ‘ubuntu-13.10-server-amd64.iso’
Lark (新サーバ)が倍近い実効転送速度を示している。 Ethernet port が Gbit Ether になっているせいか? - CPU 性能:
fukuda@eagle:~% cat < /proc/cpuinfo
のようにして得たデータから、bogomips の項を抜粋。Eagle: bogomips : 2815.87 Lark: bogomips : 4787.68
これも倍近い数字になっている。 - CGI スクリプト実行速度:
たまたまウェブサイトへのアクセスを解析する CGI
が実行時間を表示する設定のままになっていたので、それを新旧比較。
(単位は (sec))
Eagle: read: 0.145888, categorize: 0.295209 Lark: read: 0.024775, categorize: 0.035604
'read' はファイルアクセス、'categorize' は毎日のアクセスデータを、 page ごとに集計するような「文字列処理」が主と考えて良い。 read は 6 倍、categorize は 8 倍程の改善になっている。 全く同じデータで、かつスクリプトも同じでありながら、 Bogomips の比より大きくなっているのは、Python インタプリタ (2.5.2 ⇒ 2.7.5+) と Apache2 の性能改善によるところが大きいと考えられる。
まとめ
最後にとりとめなく感想等
- Ubuntu-server を選んだのは失敗だった…… Ubuntu Desktop での経験は、server にはあまり生かせなかった。(Package 管理が Synaptic から apt-get, apt-cache に変わるというのからして痛い。)
- Debian 由来のクセ (split config files 他) も、なかなか慣れる事ができなかった。
- しかし、Ubuntu に server バージョンが有るというのは大きなメリットと言えそう。 システムをコンパクトにできたし、インストールの大半とその後の設定の全てを、ssh を介して実行できた。(Rental Server を設定するのに自信がついた :-p)
- また、サーバ類が最新になり、そのお陰か、security の追加で重くなる筈のところを、体感速度では何倍もの改善を見た。 (FreeBSD ではこうは行かなかったような気がする。)
- 実行速度にもディスク容量にも十分な余裕ができたので、また 5 年くらいは放置できるのではないかと思う。
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 との連携も動き出した。おお、 このインストーラはよくできてるなぁ……
と感心したのも束の間、古いサーバから lists
や archives
を持って来て、認識させる段になったら「インストールが難しい
Mailman」の本領発揮というべきか、
ちっとも動かない。そもそも管理用のウェブページが開けなくなった。
いつもの「ファイルパーミッションの問題」か、Apache
のアクセスコントロールの問題だと思うのだが、どうしても上手く行かない。
ディフォルトの uid と gid が、以前の 'mailman' から 'list' になっていたり、
(例によって)ファイルの位置が大分変わっていたりするのにも、
相当イライラさせられたが、
そのうち、Mailman
のスクリプトが「自分のパーミッションを見て表示を拒否している」らしいと気がついて、
すっかりめげてしまった。
元のサーバの Mailman も一からビルドしたものだった事もあり、 今度もそうしようと決心。 'Mailman 日本語情報' のサイトから mailman-2.1.14+j7 を取って来て、 同サイトのインストールマニュアルに沿ってインストール・設定する。
インストールと設定は、 マニュアルが詳細なので、そのとおりやれば殆んど問題無い筈だが、 若干の注意事項と補足……
- 展開したディレクトリでやる configure はとっても大事。
インストールしてみて問題が有れば、再 configure
ではなく、そのディレクトリは廃棄して、展開 (
tar xzvf
) からやり直す方が早い。 - ubuntu-server には、make さえ入っていないので、
まず build 環境を整える
fukuda@lark:~% sudo aptitude install build-essential
- configure の前に、mailman user, group の追加、
インストールディレクトリ (
/usr/local/mailman
) の作製、 パーミッションの変更は、手を抜かずきっちりやる。 ここまでをきちんとやっておけば、 - configure にオプションは一切必要なく、かつ、root になる事なく make, make install も完了するはず。 (これがうまく行かなければ、source の展開から始める事。)
- マニュアルにあるスクリプトのパスは、
/usr/local/mailman
が cwd である事が前提。 -
bin/check_perms -f
は、root になって(すなわち sudo で)やっても問題無い。 - 何故かマニュアルにはないが、この時点で
fukuda@lark:/usr/local/mailman% bin/newlist mailman
とやって、mailman というリストを作っておいた方が、以降の見通しが良い (ここでも sudo は用いない。)
- マニュアルの IMAGE_LOGOS に関する記述は混乱している。Icon
のファイルを動かすのではなく、
/etc/apache2/site-available/mailman.conf
でAlias /icons/ /usr/local/mailman/icons/
とすれば済む。 - また ScriptAlias の指定は、Debian (Ubuntu)
の conf ファイルにあるようにやっては後々問題が多い。
ここは素直に
ScriptAlias /mailman/ /usr/local/mailman/cgi-bin/
とした方が良い。 - (何故か)上記の 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
の例に既に反映されている。
データの移行に関してはマニュアルには何も無いと言って良い。概略次のよう にやった。
- 旧サーバからリストとそのアーカイブをコピーする
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/
- 管理ページの URL が変わるので、それを修正する
fukuda@lark:/usr/local/mailman% bin/withlist -l -r fix_url ml_name
ml_name のところには実際の ML の名前を入れる。それぞれの ML についてこれを実行。(これを端折る事で不要な ML をウェブ上から隠せる。) - Postfix のために aliases を作る
fukuda@lark:/usr/local/mailman% bin/genaliases
- postfix reload を実行
fukuda@lark:/usr/local/mailman% sudo service postfix reload
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
さあて、いよいよ新自宅サーバのメール周りを完成させて、 本格的に稼働させねば……。基本構成
既存のサーバは、相当ややこしい事になっているので、 この際何とかしたいと思っていたが、
- 外部の SMTP posting server を使う
- ML (Mailing List) を維持する
- computer.org の fowarder を使い続ける
そもそも、 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): 次の 2) とともに「お馴染」のパラメータ。lark.otacky.jp としたかったが、mail (mailx) command が、envelope-from (Return-Path:) にディフォルトでこれを補うので、従来通りとした。
- *2): 'local' 他はとっぱらってみた。
- *3): mailman (後述) との「結合」のため。
- *4): 今回の設定の目玉。どれも relay として使えるようにできたが、 smtp.gmail.com は 'From: ' field を強制的に書き直したり、一日の配送数に制限が有ったりで、 ML の配送用としては適していないようだ。結局、従来通り so-net さんのお世話になる事にする。
- *5): ログインのための username と password をセーブするファイルを指定。 (下記参照。)
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 環境
ようやく、メール関連に手が回るようになって設定を始めたが、 (予定通り)難航している。 しかしその前に、新サーバ以外で起きている目の前の問題:
- 自分が送信するメールが SPF で、softfail とか neutral になっている
- 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 は全く関係してないのだから。
ごちゃごちゃやっているうちに朧げながら解ったのは、
- Forwarder の computer.org ホストが、google.com の spf filter (?) を使っている事
- その filter は(当然の事ながら)同ホストの IP アドレスを、 私のメールアドレス (envelop-from) が許可していていない、と文句を言っている事
- 「私の許可が有る」とは、otacky.jp の DNS record に、SMTP posting server の IP が登録されてあるという事
ともあれ、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 の二つになったという事に加えて、 送信に使うルーチンというかコマンドも複数ある……
しかし、最近、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 を使う最大の理由の一つ。)
(改訂してからは)まだ二日程の実績しかないが、 特に「配送されない」などの大きな問題は無さそう。 但し、いくつか気になるところは有った。
- 同ポートへ発信するメールの From: は、auth に使う ID (fukuda at waremo.com) とは違うものも有る (fukuda at computer.org) が、 これらのアドレスに、われも工房(fukuda at waremo.com)殿から、 そのアドレスに「確認して下さい」というメールが来る。 言われた通り確認すれば済む話だが、何が何だか分らず、ちょっと面くらう。 (話を余計ややこしくしてないかい goolge さん :-p)
- しかも、この「確認」をやっても、先の SPF の問題が解決する訣ではない。gmail.com 以外のドメインの Return-Path: (envelope-from) を持つメールには、先の対策が必要。
<<2013-11-25 改訂 ここまで>>
2013-11-13 (Wed): 新自宅サーバ(その 4)— Apache-2.4
せめてこれくらいはスンナリ行くだろうと思っていたが、 なかなかそうは問屋が…… Apache が 2.4 になっている上に Debian/Ubuntu の構成がとてもユニークだから、という事の所為にしたいところだが、 自分が、てんでばらばらな構成のサイトを行き当たりばったりに作ってきたから、 という理由の方が大きいかも。なにしろ、- http://www.otacky.jp: このサイト。SSI と、それと CGI を組合せたカウンターと、 アクセス解析、グラフ書きなどの CGI.
- http://amufee.otacky.jp: 某社のサイト。SSI 有り(実は放置していました。)
- http://sweetspot.otacky.jp: さるテニスグループのサイト。何んと index.cgi が唯一のコンテンツで、html ファイルは皆無、というとってもダイナミックなサイトである。
- http://www.otacky.jp/mailman/admin: (現在アクセス不可) いくつかの ML (Mailing List) の管理用 Web Page. Mailman のをそのまま使って、中身は未詳。
- http://www.waremo.com: 最近立ち上げた弊社 (Waremo Works) のサイト。SSI + CGI のカウンターの他に、 MultiView option を使う初のサイトとなった。
- http://dms.waremo.com (現在未公開) DMS。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 となる訣。ここに、
- VirtualHost の「識別」は *1) の行ではなく、*2) の ServerName だけで行う事にする。 (Port での振り分けはやらない。)
- *3) で、対応する HTML ファイルのベースディレクトリ、 *4) で
CGI script を置くディレクトリ(
/var/www/cgi-bin/
を指定。後者は本サイトでは後者は一箇所に纏めてあるので、各 VH で共通になる。 - *5) は *3) で指定したディレクトリ名を書く。 (厳密には、そのサブディレクトリも書けるが、そこまで必要はないだろう。)
- SSI は *6) (の "Includes" と)*7) の Handler の定義だけで十分。
(
.htaccess
ファイルや、XbitHack のトリックは不要。)
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 そのものがかなり変ってしまった、という面も有るかも知れない。
で、そのユニークさと、ドキュメントの貧弱さに悩まされながら、 右往左往して辿り着いた概略構成が以下の図。
managed-keys.bind
も「新規作製」に括っているが、実は named
が自動生成する。
設計意図というか方針(後付け)は概略以下の通り
- 192.168.0.0/24 のゾーン内で *.otacky.jp, *.waremo.com の名前解決だけをやる。
- fowarders を設定する。このとき dnssec 認証を使う。
- otacky.jp domain とその逆引き zone file を、dhcpd から updateする。
そのために、これらだけ、
/var/cache/bind/ (root:bind, drwxrwxr-x)
の下に置く。 - update の際、もしくは nsupdate による table 変更の場合の暗号 key は (Ubuntu についてきた?)rndc.key を使う。
- 後で本格稼動を始める時に、table の変更が最少で済むようにしたい。
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) };
- *0), *2): localhost か localdomain からの query しか受けつけない、という設定。(DMZ に置いた時に必要。)
- *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 程度に短縮される)。
- *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), *3): update の key に、rndc.key ファイルの中身を使う。"rndc-key" は同ファイルの中で「定義」されている。
- *2): named.conf.options の directory にないので、 full-path が必要
次は zone files. waremo.com.zone
と
otacky.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): '@' には、
named.conf.local
の zone 定義(つまり、"otacky.jp" か "waremo.com")が入る。 - *2): 行頭の @ (つまり上の "yyyy") が省略されている。 この行で hostname が省略された時の IP アドレスを定義する。 (サーバの IP アドレスを変える時は、この行だけを変更すればよい。)
- *3): 上の *1) で使った ns.otacky.jp の A record
- *4): 固定 IP address を持つ host を列挙
- *5): www.otacky.jp 他が全てサーバを指すように定義
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): nsupdate は root パーミッションでなくても OK だが、ここでは key を読み込む為に態々こうした。nsupdate でも dhcpd と同じ key を使う。
- *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): 何はともあれ、これを設定しないと、dynamic にならない。
- *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): zone ファイルをアップデートするための
key.
rndc.key
key をそのまま書き出してある。 (多分 include もできるのだろうが、試してみなかった。) - *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), *2): 元のファイルの '@' が、'$ORIGIN .' と 'otacky.jp' で展開されている。しかしまだこれは省略記法で 'otacky.jp' は 'otacky.jp' + '.' で置き換えられる。
- *3), *4): 言うまでもなく、頭に 'otacky.jp.' が省略されている。
- *5): ここでも、'@' が展開されていて、以下の各行の左端のホスト名は、 例えば 'amufee' + '.otacky.jp.' => 'amufee.otacky.jp.' と解される。 (*1) から *5) までの展開は、named (bind) が、zone ファイルを最初に変更 (update) したときに行われる。
- *6): これ以降の TXT が付いたエントリは、mobile station が、 network に join した時に付け加えられたもの。
まとめ
という事で、そこそこ動くようになった。現在は、家庭内乱 (LAN) の、DDNS (と HTML server) は、lark (192.168.0.11) が担っている。(DMZ はまだ eagle (192.168.0.12) のままで、 他の雑多な業務はこれが担当している。セキュリティがらみで、事が面倒になったから、という面もあるのだろうが、 このあたり Ubuntu のパッケージングはちょっとお粗末のような気がする。
- isc-dhcp-common をインストールしてないと isc-dhcp-server は全く立ち上がらない。
- インストール・設定を終えて、うまく動いているように見えても、reboot
すると、isc-dhcp-server は新たな lease file を作れなくなる。
これは少し前(13.04 から)から既知のバグだったようだが、まだ直っていない。
(Fedora でも既知のバグだったが、今は対処されているらしい。)
これは今のところ、再起動の度に
fukuda@lark:~% sudo chown dhcpd:dhcpd -R /var/lib/dhcp
とやるしかないようだ。やれやれ。
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 の結果見つけた解決策は、
- acpi-support というパッケージを apt-get install する。
- それでインストールされる
/etc/systemd/logind.conf
を編集して、#HandleHibernateKey=hibernate HandleLidSwitch=ignore ## """ #PowerKeyIgnoreInhibited=no #SuspendKeyIgnoreInhibited=no #HibernateKeyIgnoreInhibited=no LidSwitchIgnoreInhibited=no ## """ #IdleAction=ignore
のようにする。
固定 IP アドレスにする
これも大変だった。こんなところで悩まされるのでは、道は遠い……。/etc/host
や /etc/resolv.conf
を書き変えるのではうまく行かない。いや、一見うまく行くのに、
しばらくすると、また元の木阿弥になる(誰かが書き直してしまって)
なんて事が有って余計腹が立つ。
正解は、
-
/etc/networking/interfaces
を編集して、# The primary network interface auto eth0 #iface eth0 inet dhcp iface eth0 inet static address 192.168.0.11 dns-nameservers 192.168.0.12 dns-domain otacky.jp dns-search otacky.jp netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
-
/etc/hosts
を編集して127.0.0.1 localhost.localdomain localhost 192.168.0.11 lark.otacky.jp otacky.jp www.otacky.jp lark # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
等とする。(これは、最終版。eagle.otacky.jp が生きているうちにこれをやると、lark からssh otacky.jp
とやっても eagle に行けなくなる。) - dhclient を殺す。
fukuda@lark:~% sudo killall dhclient fukuda@lark:~% sudo apt-get remove isc-dhcp-client fukuda@lark:~% sudo reboot
として dhclient をアンインストールしてリブート (dhclient を kill しただけでは駄目)。
ネットワーク越しに設定
コンソール画面は、文字が小さし、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
とやるのと同じように、
-
C-x C-f /sudo:root@localhost:/etc/hosts
: localhost のファイルに root 権限でアクセス -
C-x C-f /ssh:lark:/etc/hosts
remote-host (lark) のファイルに user 権限でアクセス -
C-x C-f /sudo:lark:/etc/hosts
remote-host (lark) のファイルに root 権限でアクセス
非常にコンパクトなサーバができた
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 でありました。)
設定の仕方は殆んど前のと同じなので、 迷うところも少なかった。
- 無線の認証方式のディフォルトが、WPA/WPA2 mixedmode-PSK になっていた。これまで、WPA2 only で問題なかったので、 WPA2-PSK に変更。
- 5G Hz 帯では、周波数帯(屋内専用かどうか)と帯域幅(20/40 MHz) が選べる。「屋内専用」で「40 MHz」と設定した。
- インターネット側の接続は(前の機種同様)わけわか。PPPoE で So-net の固定 IP を取るのだけど、事前に設定する事はできず、 実際にモデムに継いでから、接続を開始して、プロンプトに沿って So-net への user ID と password を入力する。(繋がったから良いようなものだけど、これはとっても不安。 とは言え、PPP を自力でどうにかできそうな気もしないけどね。)
つながってから、LAN 側から固定 IP アドレスでアクセスしてみたが、やっぱりルータが応答した。 がっかり。やれやれ、やっぱり新サーバでも、dhcpd と named を立ち上げるのかぁ。
「DMZ の動作確認」のつもりだったが、 とりあえずちゃんと動いているようなので、 そのまま使い続ける事にする。
iPhone5c と MBA から RBB でスピード測定してみた。 いずれも 3回の平均。
Station | iPhone5c | MBA | |||
---|---|---|---|---|---|
RF Band | 2.4G | 5G | 2.4G | 5G | |
Upload | (Mbps) | 17.6 | 17.5 | 16.4 | 17.7 |
Download | (Mbps) | 36.8 | 45.5 | 35.4 | 45.7 |
という事で、肝腎の自宅サーバへのアクセスは速改善されていないが、 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 にしておく事にした。
- Server-version
(
ubuntu-13.10-server-amd64.iso
) が見付かったので、それを download。 - これを Lion の Disk Utility で CD-R に焼き、
- portable DVD Drive に入れて、ThinkPad を起動、インストーラが立ち上がる。
- locale, language 等の設定は全部ディフォルトを選ぶ (すなわち、Asia/Tokyo, en_us.UTF-8, English KBD)
- しかし、partition には戸惑った。普通の Ubuntu にある、あの素晴しい GUI が無いので、どうやれば良いか分らない。 (昔は皆こうだったのに……。色々右往左往したが、結局、全体を 1 partition にして、別途 swap 領域だけを作った……最初の躓き。)
- インストールは殆んどノータッチで完了
- hostname, primary user は前の Ubutu の通り。
- zsh のインストールと設定
- ssh-keygen で、key を作って password 無しで ssh login できるようにする。
- lv, python-django, 等をインストール
いつもながらスリープは頭痛の種
というあたりで、大変な問題に行き当った。 現在までのインストール・設定では、蓋を閉めた状態で使えない、 つまり蓋を閉めたら、自動的にスリープモードになる……。 Google 先生に聞きまくってみたが、server での対策はどこにも書いていない。gconf-editor とやらをインストールしてみる事にしたが、 これを始めると、なんと延々と X11 をインストールする羽目になった (initx -> gnome) 最初の方針の変更を余儀なくされてしまった訣だが、 これは仕方ない。後で、X11 を外せば良いだろう。
Gnome の画面からログインしてみると、MacOS X に似た system preferences の画面から、power というペインで、蓋をした時の動作を選べる。 しかし、これだけではまだ有効でない(蓋をしたら、sleep してしまう。) ちょっと暗〜い気持になったが、reboot したら、 ようやく所望の動作をするようになった。
やれやれ、と X11 を外しにかかるが、外すどころか、 X11 を止めるだけで、上記の設定がオジャンになる…… そもそもこの X11 (Xorg?) がちょっとおかしい。 立ち上げてしばらくすると、画面からログインできなくなる。 Ssh のログインはできるから、実害は無いと言えば言えるが、 なんとも嫌な感じである。(躓き、その 2)
ポスト・インストール
という事で、かなりモチベーションは下ってしまったが、 様子見旁 もうちょっと設定を進めておく。- 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'
- 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
- 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 に乗換えるぞ!:-) )
Tethering カバレージ
元々、この四国への帰省のために慌てて買った事でもあり、 行き帰りの新幹線や特急の中では意識して使ってカバレージを確認した。 (Station はいずれも MBA.)- 自宅: 常に 4G。下り 10-18 Mbps(10月 10日の時点では、 何故かこの程度だった。)
- 東海道新幹線: 殆んど 4G で繋がる。下り 4 - 19 Mbps
- 山陽新幹線: 3G/4G が頻繁に入れ替わる。2-10 Mbps。D25HW (EMOBILE) と違って、トンネルでも比較的良く繋る、との印象を持ったが、 どうやらこれは、iPhone の受信強度の表示がかなり遅れる事による artifact らしい。
- 瀬戸大橋線: 岡山側は 4G、瀬戸大橋上では 3G。 児島付近のトンネル内では断。それ意外では接続断無し。
- 予讃線: 3G/4G が入れ替わるが、常にアンテナは立っていた。 (⇔ EMOBILE では圏外になる区域が有った。)
- 実家: 窓際だと 4G で 5本立つ(12-16 Mbps)
という事で、カバレージについては EMOBILE との差は歴然。 スピードについても、はっきり改善されている。 (しかし、後者については 3G の旧機種 (D25HW) が相手なので、 比較は公平ではないかも。)
iPhone 4S をどうしようか
一応、iPhone 4S の残債を棒引きにしてもらう、つまり、本体を返してしまう、 という契約にしてきたが、実際に返すかどうかは、5C を触ってみて、 と思っていた。(それ程、iOS7 の第一印象は酷かった。)
一番気になっていたのは、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
はマニュアルに有るようには動いてくれない。結局、
- views.py -> Models では、ISO format ("2013-10-05") と datetime.date object だけが、正しく sqlite3 の date column に変換される。
- template -> views.py (
request.POST.get()
を介して)、表示されている string がそのまま返る。 (だから、これを正しく DB へ入れるには、isoformat にするか、datetime.date object に明示的に変換する必要がある。) - views.py -> template では、views.py の datetime.date object は DATE_FORMAT に沿って、string に変換される。
ここまでのところは、解ってしまえば何という事もないが、
「年月日」ではなく「年月」のみ、もしくは「年」のみの日付も許すとなると、
これはなかなかややこしい……。String
で表わす、と割り切ってしまえば却って簡単になりそうだが、
しかしそれでは、validation や sort がうまく行かない。苦肉の策として、
たとえば、'2013-10' という日付は、無理矢理 datetime.date(2013, 10, 1)
というオブジェクトにしておき(一日を仮置き)、別途、'%Y-%m' という format
を準備して、'2013-10-01' と区別する、という事にした。
スマートではないし、あまりにも大仰だが、ネット上の PDF
ファイルの中には、発行日が「年月日」まで揃ってないものの方が多いくらいなので、
これはどうしても必要なのだった。
String でない もう一つの data type は Bool。
- views.py -> template では、True -> 'True', False -> 'False' に変換される。
- template -> views.py では、逆は(当然ながら)起きない。
なので、
とやったら、hoo.bar には True が代入されてしまう。
tmp = request.POST.get('bar', '') hoo.bar = tmp # tmp = "False" hoo.save()
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, ....})
<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>
として、一応動くようにできた。察するところ
- 先にコンパイル・インストールしてできた mod_wsgi.so をロード
- static ファイルのありかを明示。(Static file へは、httpd が直接アクセスする。)
- Django で、
% /fullpath/to/django-admin.py startproject mysite
とした時にできるファイルの一つであるmysite/wsgi.py
を指している。 -
.../mysite/
以下へのアクセスは - 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.html
や user_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
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.等というのが見つかった。 これは HHK のドライバのせいに違いないと、fpu さんに問い合わせてみた。 翌営業日には返事が来て、色々アドバイスをして下さった。 しかし、どれも自社のドライバは疑ってないようで、ちょっとがっかりしたが、 (Log は読んでくれない、のが最近のトレンドなのか?) まあ、とりあえず簡単なのから、という事で、最初のアドバイスの「HHKB の背面ディップスイッチの SW6 を On に」をやってみた。 もともと On だったので、(ダメもとで)Off にしたら、 何とこれがクリーンヒット。問題はきれいに解消した。 件のメッセージも出てないようだ。
が、確認のために同スイッチを On に戻してみたが、何と、それでも問題は出ない。 うーむ、なんか嬉しさが半分くらいになったが、 取り敢えず直ったので……
マウスドラッグ
これは、キーボード問題よりずっと新しいが、OS 再インストールの前から出ていたように思う。 あまりはっきりしないのは、最初は単なる操作ミスかなと思っていたから。 症状はマウスドラッグでリージョンを指定しようとすると、 何故か始点が動いてしまう、というもの。 (ちょっと分り難いかも……「Windows のウェブブラウザで、URL 欄をコピーしようとした時の感じ」) 最初は稀だったが、段々酷くなり、このごろでは pull-down したメニューが「またたく」事もある。 つまり、どうやら、マウスボタンが一瞬 up になった(手を離した)事になっているようだ。
最初疑ったように、Skype や Time Machine, AquaSKK のせいでは無さそうで(これらの ON/OFF にかかわりなく問題は発生する) しかも、その間に syslog に何もメッセージが出ないので、 ちょっと途方に暮れている。マウスの無線部の寿命かなぁ。 (しかし、「ボタンを一瞬離してまた押す」という信号を作り出すような 雑音もしくは誤動作も、これまたちょっと考え難い。)
276/1,788,206 Taka Fukuda Last modified: 2016-02-14 (Sun) 14:35:25 JST