2012年12月21日金曜日

FreeBSD 9.0 で ipfw + natd + em で通信速度が遅くなった

 前回に引き続き FreeBSD ネタ。 今,サーバーの更新をしようと思って,new machine に FreeBSD 9.0 をインストールしている。 そこでは ezjail を使って jail 環境を作り,その中で web server をたてよう,という作戦。 もともとあるシステムを移植したいので,元のサーバーで動いているサービスは全部動かないと困る。 その作業中に出くわした珍しいトラブルについて書こう。

 珍しいと言っても過去に遭遇された人が居たのだが,ネットで検索しても他の例がほとんど引っかからなかったので,珍しいんだと思っている。 どんなトラブルかというと,FreeBSD の比較的新しいバージョン(バージョン 7 以降ぐらいからおこっているみたい)で,network_interface として,emX か fxpX (X は整数。em1 とか fxp2 という名前の network_interface) を持つマシン上で,ipfw を使う際に,ipfw の中で divert port を使うと通信速度が極端に遅くなる,という症状。この divert port というのは,サーバーを通過するパケットを natd に渡して処理をしてもらうためのもので,ipfw というファイアーウォールの処理の初めの方で使われる。私が natd を使うのは,特定のポートに来たパケットを他のマシンに振り分けるのに使っている(なくてもいいという話もあるが…)。そのため /etc/ipfw.conf の初めの方に,上記の divert port へパケットを送れ,という処理を書いている。

2012年12月20日木曜日

FreeBSD, Perl の Net::SMTP::TLS ではまる

 Net::SMTP::TLS は2006年1月以来更新が止まっていて,2016年時点ではすでに非推奨になっている。 そこで,2016年11月に FreeBSD で,Perl で gmail からメールを送る:Net::SMTP::TLS をやめて,Net::SMTP,IO::Socket::SSL,Authen::SASL を使うことにした というのを書いたので,そちらも参照してみて欲しい。
1年ほど後に FreeBSD で Net::SMTP::TLS を使うには (2013/11 現在) というのを書いた。 そちらも参考にしてみて欲しい。
2009年3月に FreeBSD 上で FreeBSD,Perl スクリプトで,GmailのSMTPからメールを送るを書いた。その時は Net::SMTP::TLS のバージョンは 0.12 だった。

 その後も順調に Net::SMTP::TLS を使ってメールの配信をしていたのだが,FreeBSD 上で portupgrade をしたら,急にメールが送信できなくなってしまった。その時に出てきたメッセージが以下のようなもの。
  at /usr/local/lib/perl5/site_perl/5.16.2/Net/SMTP/TLS.pm line 181.
invalid SSL_version specified at /usr/local/lib/perl5/site_perl/5.16.2/IO/Socket/SSL.pm line 380.
[1] 40204 exit 2 ./Mail_gmail_smtp_587_namelist.pl test subject message "2011/01/01,07:00:00"
 実は,上記の出力はエラーを再現するためにさっき取ったものであり,Perl のバージョンが新しくなっている。このメッセージを見ると,Net::SMTP::TLS 自体がエラーを吐いてるのではなくて,Net::SMTP::TLS が呼び出している IO::Socket::SSL が文句を言ってる。どうも SSL_version がおかしいらしい。そんなこと言われてもなぁ…,と思ってしまった。この時の IO::Socket::SSL のバージョンは 1.76 だった。アップデートする直前の IO::Socket::SSL のバージョンは 1.59 だった。つまり,IO::Socket::SSL のバージョンが 1.59 から 1.76 に上がったらエラーが出るようになった(間に他のバージョンもあったはずだが,アップデートのタイミングでそうなった)。

2012年12月2日日曜日

Arduino コンパチマシン (Da Vinci 32u) で遊ぶ

 Strawberry Linuxダ・ヴィンチ32U with Arduino Bootloader を買って遊んでみた。今回はその話を書こう。

 Strawberry Linux 社のDa Vinci 32u は,ArduinoLeonardo と同じ microcontrollerATMEL 社の ATmega32u4)を搭載した小さな小さなコンピューターである。そのため,Arduino 社の提供している IDE (ソフトウェア統合開発環境,Integrated Development Environment)を利用でき,プログラムが簡単に組め,Arduino Leonardo コンパチと言ってもいい極小コンピューターとなっている。(:形状やピンの配置が異なるので,ほんとはコンパチとは呼べないかも…)

Arduino というのはイタリアが発祥の極小コンピューターボードで,当初は Atmel 社の AVR シリーズの 8 bit コンピューター (microcontroller と呼ばれる) を小さな (6cm x 5cm ぐらい) ボードに載せ,その上や下にインターフェース用のボード (シールドと呼ばれる) を重ねられるようにしたものである。その最大の特徴はプログラムの作成とアップロードを容易にするプログラム開発環境 (IDE と呼ばれる)を用意したこと,みたい。それで使いやすいからということで有名になったみたい。最新版では ARM 社の 32 bit のチップを使ったもの(Arduino Due)も売り出されている。