apache2 を mpm_worker + php-fpm で動かすために、色々イジったのでメモ

今回やりたいこと

しばらく前から、自分のところは HTTP/2 対応が完了していたんですが、apache2 パッケージを 2.4.27-* にアップデートすることに伴って HTTP/2 が無効化されてしまうのを回避する、というのが今回のお題目。
mpm-prefork を使わなければ、 HTTP/2 が使えている状況をデクレードせずに済むというのなら、 mpm-prefork 使わない設定に変えますよ、ということで

  • mpm-prefork + mod_php7.0

となっていた構成を、これを HTTP/2 も有効なまま動かすことの出来る

  • mpm-worker + php-fpm


の構成へ変更していく手順をまとめておきます。
#このエントリ書くために、mpm-prefork + mod_php7.0 に一旦戻しましたとも…。

少し前に書いたエントリー

今回は、 prefork から worker に変更したんですが、それに合わせて FastCGI 対応と PHP7.0 の fpm 対応をして(この辺、作業メモ取り忘れてた…)、さぁ Apache 再起動! と思ったら

[From HTTP/2 が、いつの間にか無効状態になっていまして… - Soukaku's HENA-CHOKO Blog]

の落ち穂拾いでもあります。

HTTP/2 が、いつの間にか無効状態になっていまして…

ふと気がつくと、以前 HTTP/2 対応に設定した Apache2 が HTTP/2 でのアクセスが出来ないようなってて、「設定書き換えたわけではないんだけどな〜」と思いつつ、ログをチェックして HTTP/2 が効かなくなってる時期を特定。
その前後でパッケージのアップデートしてないかチェックしたら、Apache2 のパッケージをアップデートしていたのが判ったので、一旦 2.4.27 から 2.4.25 にダウングレードしてみたら、何の問題もなく HTTP/2 でアクセスが出来るように…。

バクだったら、レポートしといたほうがいいよな、と考えつつ、こんな

tweet しておいたら、以下のような情報を教えていただいた。

早速、チェックしてみたら

*) COMPATIBILITY: mod_http2: Disable and give warning when using Prefork.
The server will continue to run, but HTTP/2 will no longer be negotiated.
[Stefan Eissing]

[From CHANGES_2.4.27]

これがまさに、ビンゴ、ってことで、慌てて Apache2 を mpm_prefork を使わない構成に変更した次第。

"Rspamd 1.6.0 has been released" ということなので

あまり周りで使っているという話を聞かない、 Rspamd ですが、1.6 のリリースがアナウンスされておりました。

Today, we release the new major version 1.6.0 of Rspamd. The most significant change in this version is the addition of Milter protocol support in Rspamd.

[From Rspamd 1.6.0 has been released]

実際は、アナウンスよりも先に、パッケージがアップデートされたので気がついたんですけど。

で、 1.6 から、rmilter の利用が非推奨(使えないわけではないが)となり、その代わりに Rspamd Proxy を利用して、 MTA との milter 接続を行うように変更されています。

The introduction of this feature also finally obsoletes the Rmilter project in honor of the new integration method.

[From Rspamd 1.6.0 has been released]

ということで、設定を一部変更してみた。

Rspamd 側は、 /etc/rspamd/local.d/worker-proxy.inc を、次のように。

milter = yes;	# enable milter mode
timeout = 120s;

#upstream "local" {
# default = yes;
# self_scan = yes;
#}

upstream "scan" {
default = yes;
hosts = "round-robin:127.0.0.1:11333:10";
# compression = yes;
}

この場合だと、ローカルで稼働する Rspamd でスキャンするようになってます。 "hosts" に Rspamd の稼働するサーバを複数羅列すると負荷分散が出来るようですが、自分のとこはそこまでは必要ないので、その設定はしてないです。
で、 Rspamd 自身を再起動して、正しく起動できれば、OK。

rspamd の Web UIの URLを 書き換える

さて、前回の落穂拾いです。

ところが、実際 Apache に対して設定してみたのだけど 500 Internel Server Error が出て上手く行かなかったので、結局 rspamd 側の設定でポート開放して、 iptables でアクセス元を絞る形に。

[From rspamd の Web GUI にアクセスしてみる - Soukaku's HENA-CHOKO Blog]

rspamd の Web UI の書き換え、 FAQ 通りに設定したのに上手く行かなかったといういうのは、前回書いた通り。

/var/log/apache2/error.log を眺めると、

[Thu Apr 27 16:18:59.762601 2017] [proxy:warn] [pid 14798] [client xxx.xxx.xxx.xxx:55948] AH01144: No protocol handler was valid for the URL /rspamd/. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

と出力されているので、改めてその内容でクグってみたところ、

こんなエラーが出た.Pを指定したのにapacheにproxyに関するモジュールが入っていなかったのが原因の様だった.proxy,proxy_httpをロードするようにしたら解決した.

[From mod_rewriteによるURLの書きかえ - yuu_nkjm blog(2014-04-13)]

と書かれているサイトがあったので、早速 mod_proxy 関連のモジュールを有効にしてみることに。

rspamd の Web GUI にアクセスしてみる

rspamd をアップデートしたことで、使えるようなった機能があるので、いろいろと試してみよう

アップデートだけで結構な分量になってしまったので、フィルタについては別エントリーにて。バージョン上がったことで追加された機能もあるようなので、そのあたりの話もおいおい書いてきたいですね〜。

[From rspamd と rmilter をアップデート - Soukaku's HENA-CHOKO Blog]

ということで、まずは Web GUI から

Web GUI を有効にしてみる

と言っても、実際のところデフォルトの設定の状態でも、Web GUI は待受ポート 11334 で起動していて、下のような形で待ち受けしています。ただ、そのままでは localhost からの接続要求しか受け付けてくれないので、外部からも見れるように設定を変える必要があるというわけです。

root@vps2:~# lsof -i:11334
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rspamd 13943 root 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13943 root 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13945 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13945 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13946 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13946 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13948 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13948 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)
rspamd 13949 _rspamd 9u IPv4 905829 0t0 TCP localhost:11334 (LISTEN)
rspamd 13949 _rspamd 10u IPv6 905830 0t0 TCP localhost:11334 (LISTEN)

手っ取り早いのは、 rspamd 自身が待ち受けしている 11334/tcp を localhost 以外からアクセスできるよう設定することなんだけど、それはそれで芸がないし、無制限にアクセスを許可するのもよろしくないので、rspam の FAQ の中にある WebUI questions の部分に記述されている httpd からリダイレクトさせる方法で。

ところが、実際 Apache に対して設定してみたのだけど 500 Internel Server Error が出て上手く行かなかったので、結局 rspamd 側の設定でポート開放して、 iptables でアクセス元を絞る形に。

rspamd と rmilter をアップデート

ここ 2 年半ぐらい、rspamd を使い続けているサーバ、動作上特に不満があるわけでもなかったのだけど、

以前、インストールメモをエントリーとしてあげていた、 rspamdrmilter の組み合わせ、なかなか調子良く動作してくれている。

[From rspamd + rmiter の組み合わせに、ClamAV を連携させてみた - Soukaku's HENA-CHOKO Blog]

2週間ほど前から、そのサーバが受信・配送したメールに Spam がチラホラ紛れ込んでくるようになったので、「こりゃ自前でフィルタ書かんと駄目かな~」と思いつつ、公式サイトをチェックしてしてみたら…。

Rspamd is also available in some versions of Debian and Ubuntu. However, we are looking for an active maintainer for rspamd in these ‘official’ repos, as now rspamd is terribly outdated there.

Please DO NOT use those packages, as they are no longer supported.

[From Downloads]

「パッケージ、アップデートされねぇなぁ、 sid なのに…」とは感じてたんですけどね、「メンテナ探してるんだけど、 Debian/Ubuntu の公式サイトで配布してるのは古いんで使わないでね。」という状況だったはつゆ知らず…。

ということでフィルタを書く前に、公式サイトに書いてある手順を元に、最新バージョンの rspamd / rmilter にアップデートしてみた。

ということで、以下作業手順とログ

まず、現時点で、インストール済みのバージョンは、以下の通り。

root@vps2:~# dpkg -l rspamd rmilter
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==================-==============-==============-=========================================
hi rmilter 1.6.3 amd64 Another sendmail milter for different mai hi rspamd 0.9.9+b1 amd64 Rapid spam filtering system

公式サイトで見ると、 rspamd は 1.4.4 、rmilter は 1.10 が最新のようなので、随分とバージョンが上がってますね…。

【メモ】VyOSのパッケージレポジトリ、引っ越した?

VyOS のパッケージリポジトリ、移動したのか、以前設定したものでは、パッケージのアップデートチェックに失敗していたので、移動した先を調べて設定し直した。ざっとチェックしたところでは、移動した云々に関するアナウンスは見つけられてないんだけど、なんか見落としてるのかな…。

以下、その差分。

@@ -275,9 +275,9 @@
         auto-sync 7
         repository community {
             components main
-            distribution helium
+            distribution squeeze
             password ""
-            url http://packages.vyos.net/vyos
+            url http://dev.packages.vyos.net/debian/helium
             username ""
         }
         repository squeeze-main {

#かと言って、 VyOS 1.1.7 を構成するパッケージが、個々にアップデートされている様子もなかったりしたわけだが…。

PIXEL for PC and Mac を HDD からブートさせてみた

PIXEL for PC and Mac を動かしてみました。
そもそもRaspbian 自体が Debian ベースなんで、x86 対応は技術的には難しことではなかったわけですから、 PIXEL for PC and Mac の登場はある意味自然な流れなのかな、という感じ。 Linux のディストリビューションの一つとしてみると、初学者向けのプログラミング学習に重点を置いたもの、という見方もできるかな、と。

同団体創設者のエベン・アプトンCEOは、PIXELを使ってもらうためにRaspberry Piを買ってもらわなくても、既に手元にあるx86マシンにインストールしてもらえばいいと思いつき、3カ月かけてx86版を開発したと語る。

[From Raspberry Piの「PIXEL」が旧型PCやMacで稼働可能に - ITmedia ニュース]

And bringing PIXEL to the PC and Mac keeps us honest. We don’t just want to create the best desktop environment for the Raspberry Pi: we want to create the best desktop environment, period. We know we’re not there yet, but by running PIXEL alongside Windows, Mac OS, and the established desktop GNU/Linux distros, we can more easily see where our weak points are, and work to fix them.

[From PIXEL for PC and Mac - Raspberry Pi]

累計出荷数が 1,000 万台越えたとはいえ、買わないと使うことの出来ない Raspberry Pi と同等なデスクトップ環境を、 PC でも気軽に試せるようになったというのは、良い話ではないかと思います。利用者が増えれば PIXEL の改良に役立つフィードバックが得られやすくなりますし、いわゆる「パソコン」としての利用を考えれば、 Raspberry Pi よりも PC プラットフォームの方がパフォーマンス的には優位性ありますしね。

Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その2)

ということで、前回からの続きです。

"Installed Apps" のところに、おなじみのアイコンと Zabbix と表示されていれば、プラグインのインストールも無事に完了しています。

[From Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その1) - Soukaku's HENA-CHOKO Blog]

とりあえず、インストールして Zabbix プラグインまでのインストールまで完了した状態になったわけですが、ここからもう少し設定をいじっていきます。

バックエンドのデータベースを MariaDB に変更

インストールした素のままだと、バックエンドに使っているデータベースは sqlite3 が使われるようになっているのですが、ここを MariaDB (or MySQL) に変更してみます。もちろん、必須ではないですけどね。

まず、 MariaDB に grafana 用の grafana というデータベースを作成。そこに、 session という名前のテーブルをひとつだけ作成します。

soukaku@vpsdb:~$ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 731303
Server version: 10.0.28-MariaDB-2 Debian unstable

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database grafana character set utf8; Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all privileges on grafana.* to grafana identified by '**********'; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> use grafana Database changed MariaDB [grafana]> create table `session` ( `key` char(16) not null, `data` blob, `expiry` int(11) unsigned not null, primary key (`key`) ) ENGINE=MyISAM default charset=utf8; Query OK, 0 rows affected (0.01 sec)
MariaDB [grafana]> show tables; +-------------------+ | Tables_in_grafana | +-------------------+ | session | +-------------------+ 1 row in set (0.01 sec)
MariaDB [grafana]> quit Bye

session テーブルを作る必要がある点は、ドキュメントに記載されてますので、それも参考に。データベースへのアクセス権の設定は、各自調べてください。
今回のうちの環境では、grafanaが稼働するサーバと、DB サーバを別にしているので、そのあたりにも注意。

Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その1)

Zabbix に関して言えば、このところずっと開発版を追っかけているわけですけど、ダッシュボードでグラフを表示させた後、グラフの自動再描画がかかっても、ずっと更新されずにいる、という状況が起きています。DB を MySQL から MariaDB に変えたタイミングぐらいから、のような気もするんですが、いまいち原因が判らずに困っているわけですが…。

それとは別に、 grafana というダッシュボードを統合できるツールがあるということで、コレを機会にちょっと使ってみようか思いまして、インストールしてみた次第。

kibana等でも使用されているOSSのダッシュボードツールです。zabbixだけでなく、ElasticsearchやGraphite、AWS CloudWatchなど複数のデータソースのものを可視化することができます。ライブデモもあるので、実際どういうものか気になったらまずは見てみてください。

[From grafanaを使用してzabbixのモダンなダッシュボードを簡単作成! - Catcher in the tech]

複数の Zabbix サーバのコンソールを統合できるようなので、そのあたりにも興味があったりしますし。

さくっとインストール

まず、 grafana 関連のパッケージがどれだけあるのか、チェック。

root@vps2:~# aptitude search grafana
p   grafana                                 - feature rich metrics dashboard and graph editor
p   grafana-data                            - feature rich metrics dashboard and graph editor -
p   grafana-zabbix                          - Zabbix datasource for Grafana

結果からみれば、 grafana-zabbix を指定してインストールすれば、依存関係の解消が行われるので、念のためシミュレーションモードで、どんなパッケージがインストールされるのかを確認。

root@vps2:~# aptitude -s install grafana-zabbix
以下の新規パッケージがインストールされます:
  adwaita-icon-theme{a} at-spi2-core{a} dconf-gsettings-backend{a} dconf-service{a}
  fonts-font-awesome{a} glib-networking{a} glib-networking-common{a}
  glib-networking-services{a} golang-1.7-go{a} golang-1.7-src{a} golang-go{a} golang-src{a}
  grafana{a} grafana-data{a} grafana-zabbix gsettings-desktop-schemas{a}
  gstreamer1.0-plugins-base{a} libatk-bridge2.0-0{a} libatspi2.0-0{a} libcairo-gobject2{a}
  libcdparanoia0{a} libcolord2{a} libdconf1{a} libepoxy0{a} libevdev2{a} libglew2.0{a}
  libgstreamer-plugins-base1.0-0{a} libgstreamer1.0-0{a} libgtk-3-0{a} libgtk-3-bin{a}
  libgtk-3-common{a} libgudev-1.0-0{a} libinput-bin{a} libinput10{a}
  libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-twitter-bootstrap{a}
  libjson-glib-1.0-0{a} libjson-glib-1.0-common{a} libmtdev1{a} libproxy1v5{a}
  libqt5core5a{a} libqt5dbus5{a} libqt5gui5{a} libqt5network5{a} libqt5opengl5{a}
  libqt5printsupport5{a} libqt5qml5{a} libqt5quick5{a} libqt5sql5{a} libqt5sql5-sqlite{a}
  libqt5svg5{a} libqt5webkit5{a} libqt5widgets5{a} librest-0.7-0{a} libsoup-gnome2.4-1{a}
  libsoup2.4-1{a} libvisual-0.4-0{a} libwacom-bin{a} libwacom-common{a} libwacom2{a}
  libwayland-cursor0{a} libxcb-icccm4{a} libxcb-image0{a} libxcb-keysyms1{a}
  libxcb-render-util0{a} libxcb-util0{a} libxcb-xinerama0{a} libxcb-xkb1{a}
  libxkbcommon-x11-0{a} libxkbcommon0{a} mesa-utils{a} phantomjs{a}
  qt5-gtk-platformtheme{a} qttranslations5-l10n{a}
更新: 0 個、新規インストール: 75 個、削除: 0 個、保留: 96 個。
アーカイブの 79.5 MB を取得する必要があります。展開後に 346 MB のディスク領域が新たに消費されます。

注意: 'シミュレーション' モードを使用します。 先に進みますか? [Y/n/?] y パッケージのダウンロード/インストール/削除を行います。

今回、grafana のインストールを試みるサーバでは 75個のパッケージを追加することになるようですね。
あとは、シミュレーションモードを外して、"aptitude install grafana-zabbix" でインストール。

インストールが完了すると、grafana が自動的に起動、3000/tcp に web ブラウザでアクセスして、ログイン画面が表示されれば、まずは OK 。