平衡点
2013/12/02
_ メモ: Advent Calendar
「ちっとも降臨節を祝っていない」と評判ですが, 今年もイロイロな Advent Calendar ができていますね.
一覧を見ると「これ技術系...?」というのもありますが, まあ, それはそれとして.
自分が参加している(する予定の) Advent Calendar をメモしておきます.
あと気になっているのは
かな?
2013/12/03
_ Roundcube のメールデコード
良く知られた話かもしれませんが...
世の中には機種依存文字というのがありまして, メールの文字コードは ISO-2022-JP と謳っていながら, その実丸囲み数字とかが存在する, というメールが飛び交っております.
単に自分が受ける側であれば,
なんかを参考に, 適宜設定しておくと良いのかもしれません(cc-env memo: Wanderlust の設定).
ウチ 某所サーバでは, WebMail のサービスとして Roundcube を提供しています. で, 飛び交うメールが偶に WebMail 上で読めない, という事態が発生していることに今更ながら気がつきました.
...という訳で, ad hoc ながら /usr/share/roundcube/program/lib/Roundcube/rcube_charset.php に手を加えてみます.
# source: diff --- rcube_charset.php.orig 2013-12-03 01:05:20.966192376 +0900 +++ rcube_charset.php 2013-12-03 01:06:28.031257391 +0900 @@ -229,6 +229,11 @@ // convert charset using mbstring module if ($mbstring_list !== null) { $aliases['WINDOWS-1257'] = 'ISO-8859-13'; + $aliases['JIS'] = 'ISO-2022-JP-MS'; + $aliases['ISO-2022-JP'] = 'ISO-2022-JP-MS'; + $aliases['EUC-JP'] = 'EUCJP-WIN'; + $aliases['SJIS'] = 'SJIS-WIN'; + $aliases['SHIFT_JIS'] = 'SJIS-WIN'; // it happens that mbstring supports ASCII but not US-ASCII if (($from == 'US-ASCII' || $to == 'US-ASCII') && !in_array('US-ASCII', $mbstring_list)) { $aliases['US-ASCII'] = 'ASCII';
...こんなんで良いのかなぁ.
mbstring で JIS, ISO-2022-JP, EUC-JP, SJIS, SHIFT_JIS を扱う際に, Roundcube 内で global に alias を定義しておくと良いのかもしれませんが, あんまりコード眺めてないので対応がこれで良いのか定かではありません. 誰か教えて下さい.
あ, 対応する Roundcube の version は 0.9.5-1~bpo70+1 です.
にんともかんとも.
2013/12/04
_ debian-goodies
これは ディストリビューション/パッケージマネージャー Advent Calendar 2013 の 12/03 になる予定でした. イロイロあって, 12/04 投稿分になります. 12/03 は @znz さんの Ubuntu - aptitude検索パターンの紹介 でした
Debian を使っている場合, apt-get, aptitude, dpkg といった ソフトウェアを使ってパッケージを操作することが多いと思います. 貴方の望むほとんどの事は, これらのソフトウェアを使うことで可能でしょう. ですが, ちょっと大仰か(さもなくば多少面倒か)もしれません. ここではほんのちょっとした目的を, 簡単に達成するためのスクリプト群である debian-goodies について紹介します.
とりあえず
% sudo apt-get install debian-goodies
しておきましょう.
dpigs
「どのパッケージがディスクを消費しているか知りたい」という 時があるかもしれません(システムを軽量化したい, とか?). dpkg を使って, 例えば
% dpkg-query -W -f='${Installed-Size}\t${Package}\n' |sort -n -r
とかでも可能です(これはこれで知っておいて損は無いです). 同じ事は dpigs でも可能です.
% dpigs -n 25
とかやってみて下さい. ちなみに, 私の環境では openclipart2-{svg,png} が一番ディスクを消費していました
dhomepage
「パッケージで提供されているソフトウェアの web が見たい」 という時があるかもしれません. Debian パッケージの情報ファイル(debian/control)には Homepage フィールドが存在しており, upstream の web ページを記述する欄があります.
この web を直接ブラウザで開くのが dhomepage コマンドです. 試しに
% dhomepage howm
とかやってみて下さい. /etc/alternatives/x-www-browser で指定されているブラウザで howm: note-taking tool on Emacs が開かれたと思います.
debget
インストールする前に, .deb ファイルそのものを調べたい, という事があるかもしれません. apt の取得先にいって, 実際にファイルを持ってくることでも可能ですが, こんな時には debget を使うのは如何でしょうか?
% debget rabbit
無事に rabbit_2.1.1-2_all.deb が取得できました.
debman
インストールせずに, 特定のパッケージの man を読みたい, という事があるかもしれません. debget でファイルを取得して, dpkg-deb -x で .deb を展開して...とやっても可能ですが, こういう時には debman は如何でしょうか?
% debman -p abiword abiword # 手元にパッケージが無い場合 or % debman -f rabbit_2.1.1-2_all.deb rabbit # 手元に.debがある場合
man が読めましたか? debman は, 実際には debget でファイルを ダウンロードしてきて... という一連の作業を行なっています.
まとめ
ちょっとしたことを気軽に調べるための小粋なツール群である debian-goodies について紹介しました. 実はここで紹介したコマンド以外にも, debian-goodies では .deb を扱うための grep コマンド群 なんかも提供されているのですが, 高機能すぎてなかなか使えておりません. この辺についてもそのうち触れられたら良いな, と思っています.
あ, あと
% popbugs
なんてすると, 次期リリースに向けた状況が一覧できて便利かもしれません.
明日(12/05)は @masami256 による「Fedoraで何か」の予定です.
2013/12/12
_ Sendmail の送信時の挙動?
前置き
ウチのメールサーバは postfix です. ちゃんとサーバ証明書を購入して,
smtpd_tls_security_level = may smtpd_tls_recieved_header = yes
で動かしております. なので, 他所様のサーバからメールが届く際には, 他所様にその気があれば, STARTTLS での経路の暗号化が可能です.
ログを眺めていると gmail, outlook.com, なんかが TLS で配送して来ています. あとは東大数理なんかも.
で, ここ数日ちょっと困っていたのが
- MX レコードに登録されていないサーバがメール配送を試みて
- STARTTLS で TLS で接続しようとして
- SSL_accept error from [サーバ名] で接続が切れて.
ということで, 某所からメールが届かない と言われました.
まあ, MX 無い時点で greylist 行きですが遅延すれこそ拒否はしていなかった訳で.
相手側のメールのログには
相手サーバ sendmail[PID]: [ID ZZZZZ mail.warning] \ STARTTLS=client, error: connect failed=0, SSL_error=5, errno=0, retry=-1 相手サーバ sendmail[PID]: [ID ZZZZZ mail.notice] \ ruleset=tls_server, arg1=SOFTWARE, relay=ウチのサーバ, reject=403 4.7.0 TLS handshake.
とあるそうです(タイムスタンプは消してます).
ちなみにウチは
ホスト名 postfix/smtpd[8090]: \ SSL_accept error from 相手サーバ[IPアドレス]: 0 ホスト名 postfix/smtpd[8090]: \ warning: TLS library problem: 8090:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error:s3_pkt.c:1256:SSL alert number 80: ホスト名 postfix/smtpd[8090]: \ lost connection after STARTTLS from 相手サーバ[IPアドレス]: 0
といった塩梅(タイムスタンプは消してます).
どうしよかと悩んでいたら
.@uwabami Postfix で接続元 IP アドレスベース(など)での切り替えでよければ、 smtpd_discard_ehlo_keywords で STARTTLS をアナウンスしなけれはばよさげ。
http://t.co/b7qKXxNxLF
— さとうふみやす (fumiyas) (@satoh_fumiyasu) 2013, 12月 12
ありがとうございます. > @satoh_fumiyasu
smtpd_discard_ehlo_keyword_address_maps
というわけで(前置き長い). Postfix DSN Support を参考に.
/etc/postfix/main.cf に
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/ehlo_selection
を追記
/etc/postfix/ehlo_selection に
## disable STARTTLS for broken(!?) SMTP server WWW.XXX.YYY.ZZZ silent-discard, starttls
として postmap かけて, postfix を再起動 してみました. 考えてみれば DSN も切っておいて良い, ような.
まとまりません
とりあえず某所からメールは届くようになったみたい. なので, まあ良しとする, として(いや, 良くないけどさ).
には「By default STARTTLS is used whenever possible.」とあるので, これで CAfile とか CApath とか設定していなかったら, handshake 絶対失敗しそうなんですけど.
わたしなんか間違っている...?