2017/12/09(土)FreeBSD Ports のgnuplot は使い物にならなくなった・・・

2017/12/09 5:34 サーバ運営・管理
gnuplot とは、グラフを描画するための有名なソフトウェアで、かれこれユーザ歴だけは15年ほどになります。

弊社では今まで gnuplot を安直に FreeBSD Ports コレクションからインストールしていたのですが、余計なものが依存関係で入って来るのが悩ましいところでした。

そこへいつものように FreeBSD Ports コレクションからアップデートを図ろうとしたところ・・・
なんと、X11 ライブラリ群がデフォルトで依存関係として入ってしまうようになったのです、、、
X11 サポートを外すことが出来なくなった。。致命的です。

弊社の環境では、単純にグラフが PNG や GIF,JPEG 形式で描画できれば十分で、X11 なんぞ邪魔!!!
ということで、止む無くソースコードから構築することにしたのです。
ちなみに現時点での最新は 5.2.2 です。

多機能な分、構築作業が複雑そうだなという先入観が強かったのですが、結局、
# setenv CPPFLAGS '-I/usr/local/include -I/usr/include'
# setenv LDFLAGS '-L/usr/local/lib -liconv -L/usr/lib'
# ./configure --with-readline=gnu
# gmake
# gmake install
で、済むようです。FreeBSD 11.1R-p5 (amd64) の環境で確認しました。

注意点としては、gnuplot 本体をインストールする前に、libpng 等のグラフィックスライブラリ、readline ライブラリ、IPAやkochi等の日本語フォントを予め Ports などでインストールしておく必要があります。

-liconv オプションは、どういうわけか libiconv がリンク出来ないというエラーを吐いて構築が中断する状態になるので、その回避策として追記したという状態です。

2017/12/07(木)PowerDNS 4.1 リリース(with PostgreSQL)

2017/12/09 5:03 サーバ運営・管理
ということで、弊社のマスターDNSを PowerDNS 4.0.4 から PowerDNS 4.1.0 に更新してみました。

「久しぶりの記事がこれかい」と呆れられると思いますが。。orz
どうやら、今回の『売り』は、「当社比で PowerDNS 4.0.x から 最大で 400% 高速化した」ということらしいです。

単純に「4.0.4 の使用をやめて、セキュリティFIX された 4.0.5 以降にしなさい」という警告メッセージが出ていたのがきっかけなのですが。。orz

さて、PowerDNS 4.1.x に更新するにあたり、PostgreSQL を使用し、且つソースコードから構築する際の configure オプションが変更になっています。

PostgreSQL サポートに関しては、
 --with-pg-config=/usr/local/pgsql/bin/pg_config
これだけでいけるようになったようです。
ちなみに弊社では、ソースコードから
# ./configure --enable-libsodium 
       --with-pg-config=/usr/local/pgsql/bin/pg_config 
       --enable-perl=yes
        --with-modules="bind gpgsql random"
(実際には改行せず、1行で入力)のようにして構築しています。
環境は、FreeBSD 11.1R-p5 amd64版です。

2017/10/17(火)D級オーディオアンプ

2017/10/17 20:21 電子工作

発売開始当初に入手したものの、
「周囲にまき散らす電磁ノイズがひどい」という話だけを何故か聞くので保留していた代物ですが・・・

作業場(謎)に様子見のために設置してみました。
この基板には TI社のTPA2001D1 という、今では有名なICが2つ乗っかっています。

アナログ回路のA級・B級アンプしか知らない筆者にとって、
無信号時の背景ノイズが殆ど無いのは驚きました。これもまた評判どおり。
ICの発熱もほとんど感じません。

気になる電磁ノイズは思ったほどではありません。しばらく使ってみることにします。

2017/10/16(月)CGI に Python を利用し、PostgreSQL を使用する

2017/10/16 2:35 サーバ運営・管理
どちらかというと、自分メモ。 CGIというのは、環境変数からパラメータを受け取り、 標準出力へ HTTPヘッダ群とコンテンツを出力する、というのが基本的セオリーで特別なことは必要ないです。 しかし、昨今の Python3系では、WSGIインタフェースというものを意図してCGIを制作するのが普通になっており、これはパフォーマンスの点で有利とされています。 Apache に mod_wsgi 拡張モジュールをインストールする必要があります。 現在のところ、標準モジュールにはなっていないため、別途インストールが必要です。 FreeBSD11 における mod_wsgi インストールは、ソースコードから下記のように行うのが確実。 pip (後述しています) でのインストールは、環境判定を誤認識したり変にエラーを吐いたりすることが環境によっては発生するため、筆者は全くお勧めしません。
# cp mod_wsgi-4.5.20.tar.gz /usr/local/src 
# cd /usr/local/src
# tar xvzf mod_wsgi-4.5.20.tar.gz
# cd mod_wsgi-4.5.20
# ./configure --with-python=/usr/local/bin/python3.5 --with-apxs=/usr/local/apache2/bin/apxs
# make
# make install
--with-apxs を指定することで、お使いのサーバにおける環境に合わせた構築が出来ます。 通常、mod_wsgi は、上記の場合、/usr/local/apache2/modules/ 配下に動的リンクでインストールされます。 Apache への mod_wsgi に対する設定は、以下を参考にどうぞ:
LoadModule wsgi_module modules/mod_wsgi.so

WSGIDaemonProcess cgi-bin user=webadmin group=webuser processes=1 threads=5
WSGIScriptAlias /     /home/webroot/hoge/cgi/app.wsgi

<Directory "/home/webroot/hoge/cgi">
  WSGIProcessGroup cgi-bin
  WSGIApplicationGroup %{GLOBAL}
</Directory>
ちなみに WSGIインタフェース自体は、Python に特化する目的を持つものではありません。 この辺りは勘違いされている諸氏が結構多いようです。 Perl だと mod_perl という Apache に組み込む形での有名な高速化拡張モジュールがありますが、それと同じようなものでしょうか。 Python 以外では導入メリットが見えにくいです。 最近のPerl はそれ自身が高速化してきているので、mod_perl 導入のメリットが見えにくくなってきているのと、mod_perl を組み込んだ状態にてCGIをスレッド動作させると原因不明の不安定な動作になったり、Perl 5.26 にすると、静的モジュールでは何故かインストールできないなど、色々問題があり、筆者のサーバでは mod_perl の利用は見合わせている状況です。 次に、Python から、PostgreSQL インタフェースを扱うモジュールをインストールするのですが、このインストールに先立ち、pip というサポートツール(?)を導入する必要があります。 Perl で言うところの CPAN に該当するものですね。
# python3.5 -m ensurepip
あれ? と思った諸氏も居られるかもしれません。 多くのサイトには「Python 3.4 以降では、pip は同時にインストールされる」と説明されているからですが、FreeBSD11 にて Ports から Python を導入した場合、pip は導入されません。FreeBSD11 にて Ports から Python を導入した場合、pip は手動操作で導入しないと駄目らしいです。 でも、pip は今後のメンテナンスで必須になるものの、今回は使いません。 最後に Python の PostgreSQLインタフェースモジュールをインストールするのですが、これもpip では環境誤認識をするため、ソースコードを持ってきて、下記の手順が確実です。 事前に、PostgreSQL 本体をインストールしておくことは言うまでもありませんね。
# cp psycopg2-2.7.3.1.tar.gz /usr/local/src
# tar xvzf psycopg2-2.7.3.1.tar.gz
# cd psycopg2-2.7.3.1
# setenv PATH '/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/pgsql/bin'
# python3.5 setup.py build
# python3.5 setup.py install
ここで重要なのは、pg_config コマンドのパスを、環境変数 PATH に含めることにあります。 Python の psycopg2 は、Perl における DBI と DBD::Pg の組み合わせに相当します。

2017/10/14(土)フィッシング電子メール3題

2017/10/14 4:56 雑多なトピック
最近は結構巧妙になってきているらしい・・・ 全て、身に覚え全く無し。

○1つ目:オリックスクレジット

ヘッダに現れる発信元サーバもリンクのURLも、オリックス関係には全く関連がない。

○2つ目:楽天カード株式会社

リンクのURLサイトは、楽天とは明らかに無関係。
電話番号はどうやら滅茶苦茶。

○3つ目:Apple ID サポートセンター

身に覚えは無いのですが、筆者は危うく騙されそうになりました。
よくよく見ると、IPアドレスにあり得ない値が出てきていますね。
しかもこの会社は日本語メールをわざわざブルガリアから発信するものなのか?
誘導しようとしているサイトを辿る限り、ロシアに割り振られているIPが出てきます。
多国籍企業なので、あり得る話ではあるが・・・

2017/10/13(金)はんかくさい日報を新システムへ移行しました。

2017/10/13 5:11 サーバ運営・管理
移行といっても、(adiary を)バージョンアップしただけです。
しかし、見栄えは以前よりシンプルになってしまいました。

移行が何故か上手く行かず、更にデータの一部を壊してしまったため、
移行そのものを全て手動操作でやる羽目になり、足掛け3日掛かってしまいました。

また、手動操作移行の故、記事番号・記事URLが変わってしまい、Google 等への反映は1カ月程度かかるものと思われます。

2017/10/07(土)メールサーバへの攻撃事情

2017/10/12 22:20 サーバ運営・管理
この1週間で「電子メールが送れない・受け取れない」という障害報告が4件ありました。
こういう障害は20年運用していて初めてのことでして・・・

どうも直接の原因は、これです。IPアドレスも晒します。 ↓
20171007_1.png

52.166. 系のIPアドレスの登録上の使用者は、皆が誰でも知っている企業です。
調べればすぐ判るので、ここでは敢えて言及しません。

なんと、概ね 10秒毎にSMTP認証を失敗しては繰り返しています。
文字列 'UGFzc3dvcmQ6' は、'Password:' を Base64エンコードして得られる文字列です。
SMTP認証も現在は数種類あって、これはセキュリティレベルが低いとされている LOGIN 認証と言われる種別。

サーバ負荷をこのようにして意図的に高くし、サーバ障害やサーバダウンを引き起こそうとする愉快犯か、何等かの意図を持っている連中の仕業です。

10/5 の 21:00 頃に、現在一緒に仕事をしている同業者がこのログを見て、 Twitter で呟いたそうです。
『○○社のネットワークから、メールサーバへの攻撃を受けている』と。
そうしたら、52.166. 系からの攻撃は「ピタッ」と止まりました。
これには余りの素早さに笑ってしまいましたね。勿論、対応された方々には感謝申し上げます。確信犯的にやっていたのであれば、逆に許せないですが。

で、今の攻撃主体はどうやら ↓ の模様。これもIPアドレスを晒しておきます。
20171007_2.png

間隔は4分毎ですが、攻撃と言えるレベルです。
時折「セキュリティ対策業者がセキュリティホール探しのためにやっている」なんていう話をする奴がいますが、ならサーバ負荷を意図的に上げるような行為を何故やる? という 疑問が必然的に湧きますね。

SMTP サーバ自体の接続拒否機能は、SMTP認証処理成功後に機能するようで、認証前にIPアドレスや接続元ドメインなどで強制切断するようにはなっていないようです。
これをするには、ファイアウォールを使わないと駄目ですね。
この手の設定は、微々たるものだとしても傘下ネットワーク全体のパフォーマンス低下を招くので、出来れば余計なことはしたくない。

SMTP サーバ単体で、接続そのもの自体を拒否できる機能が欲しいと考えるのは自分だけでしょうか。
ま、発信元で犯人の処分をしてくれるのが最も有益なわけですが・・・

2017/09/30(土)Cyberfox は 2018年3月で提供終了になる

当方で愛用していた 64bit版 Firefox と言える存在で AMD CPU ものに特化しているWebブラウザでしたが・・・
cyberfoxAMD64.png

2017/03/07 に「1年後にサポートを停止する」と発表され、気が付けばもう半年も無いので、このあたりの移行に向けた対処を本格的に考える時期なのかなと思います。

実は、これと同じ時期に Firefox 本家で 64bit 版の提供が始まり、単純に「64bit版が欲しい」といったユーザは Firefox に戻すほうがいいです。
あれだけ消極的だったのにな~ と強い印象を持たざるを得なかったのは過去の話になってしまいました。

個人的には半信半疑のようなところがありました(64bit版といっておきながら実は 32bit版ビルドで動作出来てるだけというものが結構あるから)が、mp4 動画の再生が途中でハングするというトラブルが Cyberfox で頻発するようになり、どうもブラウザの問題らしいということで、試しに以前使っていた Firefox を試そうとインストールした後確認したら・・
firefox_x64.png

確かに 64bitビルドです。インストール先も確かに64bitアプリ(← 最近はこう称するんだよね) と認識してインストールされていました。

この行動のきっかけとなった、mp4動画の再生ですが・・・
途中で原因不明のハングするというトラブルは解決した模様です。

2017/08/28(月)powerDNS 4.0.4 は FreeBSD10 以降でソースコード構築途上でコンパイルエラー

2017/10/12 22:17 サーバ運営・管理
PowerDNS 4.0.4 をソースコードから構築しようとすると・・・
コンパイルを始めたばかりのところで、
ext/json11/json11.cpp:153:24: error: invalid operands to binary expression
      ('nullptr_t' and 'nullptr_t')
        return m_value < static_cast<const Value<tag, T> *>(other)->m_value;
               ~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ext/json11/json11.cpp:209:5: note: in instantiation of member function
      'json11::Value<json11::Json::Type::NUL, nullptr_t>::less' requested here
    JsonNull() : Value(nullptr) {}
    ^
のようなエラーを吐いて構築不能になります。
どうやら clang/LLVM 4.0.0 環境が少なくとも全滅です。
FreeBSD 11 はまさにこの環境。
% /usr/bin/clang -v
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
Target: x86_64-unknown-freebsd11.1
Thread model: posix
InstalledDir: /usr/bin
日本語の情報が殆ど無いですね。
これは ext/json11/json11.cpp と ext/json11/json11.hpp の2つのファイルを修正することで解決します。

具体的な修正内容は下記リンクです:
json11 fixes from upstream via pdns #135
https://github.com/PowerDNS/weakforced/pull/135/commits/9e4d9bd48663e849be13e2cb5fcf64f917aec608
それにしても日本人の感覚だと、この修正量と内容だとバージョンアップしてソースコード一式を再リリースするものですが、開発元であるオランダ人の感覚は違うようです。