replaced vertical whitespace in Subject header with space
自作のScriptを動かしていたら、
replaced vertical whitespace in Subject header with space; this will become fatal in a future version at XXXX.pl line XXX.
なんて警告メッセージが表示される。色々調べてみると原因は、 Email::MIME パッケージ。
メールは、古臭い時代の名残りもあって、メールヘッダ1行は、 「最悪でも1000文字程度(出展?)で、普通は 78 文字より長くは しないほうがいい」という規定。
使っているメールの文字は、40文字程度だけれども、Subject部は、 MIMEエンコードされるから、簡単に長くなる。
検証コードと結果
#!/usr/bin/perl use Email::MIME ; use Jcode ; print Email::MIME->create( header => [ From => 'foo@bar.com' , To => 'baz@bar.com' , Subject => Jcode->new( "...(たっぷり)...")->mime_encode , ] , attributes => { content_type => 'text/html' , charset => 'ISO-2022-JP' , encoding => '7bit' , } , body => "あいうえおabcde" )->as_string ;
これを動かすと、
replaced vertical whitespace in Subject header with space; this will become fatal in a future version at zz.pl line 5. From: foo@bar.com To: baz@bar.com Subject: =?ISO-2022-JP?B?...?= =?ISO-2022-JP?B?...?= Date: Sun, 2 Mar 2014 22:42:40 +0900 MIME-Version: 1.0 Content-Type: text/html; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit あ...de
といった結果となる。 本来なら、MIME-Encode された長い行は、vertical whitespace(\n)で 折り返される。しかし、space に置き換えられて、 きわめて長い1行となっている。
実際、Email::MIME には
改めて、Email::MIME には、以下のように書いてある。
Revision history for Perl extension Email::Simple 2.203 2014-02-14 21:56:14-05:00 America/New_York - translate vertical whitespace in headers into horizontal whitespace, with a warning
今まで警告メッセージが表示されていなかったのは、2/14更新だからか…
いいのか?
ということで、改行を空白に置き換えてもいいのかなぁ…メールは正しく送られてはいるんだけど…
postfix の場合は….
line_length_limit (デフォルト: 2048 bytes) …
header_size_limit (デフォルト: 102400 bytes) ….
たしかに、今時のMTAは、そんなの正しく処理するようには思うけど…
ちなみに、 line-feed を vertical whitespace と呼ぶこともあるということを、初めて知った…
保留2個って何?
うーむ、Debian のパッケージで、以前から保留2個って 出るんだけど、"dpkg –get-selections | grep hold" しても 特に何も出てこないし、full-upgrade しても何も出ないし… いったい何がひっかかってるんだろ…
# aptitude -s full-upgrade インストール・削除・更新されるパッケージがありません。 更新: 0 個、新規インストール: 0 個、削除: 0 個、保留: 2 個。 0 バイトのアーカイブを取得する必要があります。 展開後に 0 バイトのディスク領域 が新たに消費されます。
nagios3でDHCPのチェック
WZR-450HPのファームのバグ?で、止まっているはずのDHCPが動いていて、 予想外のIPアドレスが使われていて、侵入されたのかと心配したことから、 DHCPがlocalhostで動いていることと、他に動いていないことを確認するように nagios3を設定してみた。
ただし、dhcp動作確認のcheck_dhcpは、rootじゃないと動かないので、 sudoで動くようにしておき、動いていないのが正常なので、negate pluginで反転させる。
(( /etc/sudoers )) Cmd_Alias DHCPCHECK = /usr/lib/nagios/plugins/check_dhcp nagios ALL= NOPASSWD: DHCPCHECK (( /etc/nagios-plugins/config/local.cfg )) define command{ command_name check-no-dhcp command_line /usr/lib/nagios/plugins/negate /usr/bin/sudo -u root /usr/lib/nagios/plugins/check_dhcp -s 255.255.255.255 -t 1 } define command{ command_name check-local-dhcp command_line /usr/lib/nagios/plugins/check_procs -C 'dhcpd' -c 1: } (( /etc/nagios3/conf.d/localhost_nagios2.cfg )) define service{ use generic-service host_name localhost service_description DHCP-other check_command check-no-dhcp } define service{ use generic-service host_name localhost service_description DHCP-local check_command check-local-dhcp }
Windows Virtual PCにDebianを入れてみた。

Windows7 側が x64 だったし、amd64 のnetinstを動かそうとしたけど、 ダメだった。んで、i386 の netinst をダウンロードして試してみたら、 ようやくインストーラが起動。
インストーラで入れる際は、TABキーを押してブートパラメータに、 “noreplace-paravirt” を追加する。
movabletype-opensource打ち切りか…
職場のmovabletypeのバージョンも、パッケージ更新と共に新しくなり、 操作メニューで日本語が使えなくなった。 だれかが作っているかとWebを探していたら、今使っている movabletype-opensource(5.2.7) だけど、本家 Six Apart で movabletype 6 を出すのに合わせて、MTOS のサポートは切れるらしい。
HNS(Hyper Nikki System)から MovableType に切り替え、かなり経つが、 オープンソースの協力が大きい、WordPress に乗り換える時期かな…
ちょいと、手間がかかるだろうし、はぁ…
gvfs is not accessible: Permission denied
昨日より、Nagios から、下記のようなメールが1時間おきに届くようになった。
Sub: PROBLEM Service Alert: localhost/Disk_All is CRITICAL ** DISK CRITICAL - /run/user/1000/gvfs is not accessible: Permission denied
確認すると、gvfs はGNOME のデスクトップの仮想ファイルシステムとの ことであるが、パッケージ更新で入った様子。 昨日 xrdpd 経由で、作業した後からの症状。ひとまず使わないので、 動かないように設定する。
(( /etc/environment )) GVFS_DISABLE_FUSE=1
いつかは普通に使うようになるかもしれないので、設定をメモ。
samba 4.0 入っちゃった
Debian/testingで運用しているけど、パッケージを、"aptitude full-upgrade" を実行したら、samba 4.0 が候補に表示されてて、 やばいかと思ったけど、そのまま入れてしまった。
samba 3.6→ 4.0 だし、4.0 で Active Directory サポートで、 大幅に変わって四苦八苦のうえ、ダウングレードの羽目にあうかと 思ったけど、意外と何もなく動いている。
/etc/init.d/samba の中身も変わっていて、 /etc/init.d/{smbd,nmbd,samba-ad-dc}をそれぞれ起動するようになっている。 ただ、Active Directory 絡みの設定が無いので、 /etc/init.d/samba-ad-dc は自動的に動かない。
他の資料を見ると、smbd,nmbd で動く「レガシーバイナリ」と、samba の 単一サーバで動く「sambaバイナリ」があるらしい。 Debian のパッケージは、設定ファイルから自動判断して、 /usr/sbin/{smbd,nmbd} を起動するか、/usr/sbin/samba を起動するか うまく調整してくれているようだ。
ということで、Active Directory 絡みの設定を書いてないので、 無難に移行が済んだということか…
perl-base 5.18 を入れたら postgrey が動かなくなっていた
自宅外から、自宅へのメールが届いていないことが判明。 原因を調べてみると、どうも postgrey が起動していない。 なんで起動しないのと、手作業で postgrey を起動していると、pid ファイルが原因ぽいことが 分ってきた。手作業で起動スクリプトを治そうとしたけど、 動いたり動かなかったり。改めて、"postgrey pidfile debian" で調べていたら、 perl 起動時の "-T" オプションあたりが関係していて、 その根本原因は、perl-base 5.18 になっているため。
作者がパッチを提供しているというけど、パッケージには反映されていないようなので、 パッチの差分を /usr/sbin/postfix に手作業で修正した。
if($opt{dbdir}) { $opt{dbdir} =~ /^(.*)$/; $opt{dbdir} = $1; } + # untaint what is given on --pidfile. It is not security sensitive since + # it is provided by the admin + if($opt{pidfile}) { + $opt{pidfile} =~ /^(.*)$/; $opt{pidfile} = $1; + } + # untaint what is given on --inet. It is not security sensitive since + # it is provided by the admin + if($opt{inet}) { + $opt{inet} =~ /^(.*)$/; $opt{inet} = $1; + } # determine proper "logsock" for Sys::Syslog my $syslog_logsock;
perl 5.18.1-4 に更新
以前、perl 5.18 に更新したら、ことごとくパッケージ更新に トラブルになったので、 perl 5.14 に hold していた。 しかし、ある程度時間が経って競合などのトラブルも 無くなったみたいなので、”aptitude unhold perl”してみた。
以前なら、大量の競合パッケージ削除が発生していたけど、 無事に更新ができた。
ただ、munin-cron が、下記のようなメッセージを吐くように なってしまった。
defined(@array) is deprecated at /usr/share/perl5/Log/Log4perl /Config.pm line 864. (Maybe you should just omit the defined()?)
perlで、配列未定義チェックで、defined( @array ) で書いてあるけど、 defined では正しく動かないし、if ( @array ) で十分ということらしい。
ということで、該当ファイルの defined を消す。
メール添付の音声3gpをmp3に変更
子どもにsoftbankの見守り携帯を持たせてみた。 だけど、音声メールを送る機能があるんだけど、 添付ファイルが 3gp 形式。 iPhoneで見ようと思っても、かなり面倒くさい。
ということで、自宅サーバの特設メールアドレスに送らせて、 添付ファイルのデータ形式を変更して再送させるプログラムを作ってみた。
気まぐれで書いたから、節操無く統一性もなく perl module 呼び出している汚いコードだな。 処理内容は、添付ファイルを分解し、".3gp"の添付だけ、".mp3"を作って、 改めて添付ファイルを作成して送信。 ただし、音声添付無しのメールも飛ぶので、単純テキストはそのまま送る。
試しに動かしてみたが、自宅に見守り携帯が届く段階で、graylist にひっかかり、 一旦受付拒否されてやんの。softbank.ne.jp だし whitelist には入れられないしなぁ。 まあ、メールが届くのが数分遅れるだけだけどさ。