MovableType 7でutf8mb4対応

昨日、書いたエントリ。
実は、公開するまでに、えらく時間がかかってた。文章書くところは、 MarsEdit でそれなりにサクサク書けてはいたんですが、いざ公開しようと MarsEdit から MobavleType へのエントリーのアップロードを実行すると、エラーが出る。

最初は、 DB ぶっ壊れたかな?と思っていたのだけど、 MarsEdit で採れる Network Log を見てみると、どうもアップロードしようとしているエントリのデータ自体に問題がありそうなログが出てくる。

Network reply received: 2021-05-15 18:40:25 +0000
API Endpoint URL: https://www.downtown.jp/MT6/mt-xmlrpc.cgi
Method name: metaWeblog.newPost
Status code: 200
Succeeded: NO
Networking error: --Fault Error--
Fault code: 0
Fault string: Failed to execute INSERT INTO mt_entry
(entry_allow_comments, entry_allow_pings, entry_atom_id, entry_author_id, entry_authored_on, entry_basename, entry_blog_id, entry_category_id, entry_class, entry_comment_count, entry_convert_breaks, entry_created_by, entry_created_on, entry_excerpt, entry_keywords, entry_modified_by, entry_modified_on, entry_ping_count, entry_pinged_urls, entry_status, entry_tangent_cache, entry_template_id, entry_text, entry_text_more, entry_title, entry_to_ping_urls, entry_unpublished_on, entry_week_number, entry_current_revision)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
with allow_comments, allow_pings, atom_id, author_id, authored_on, basename, blog_id, category_id, class, comment_count, convert_breaks, created_by, created_on, excerpt, keywords, modified_by, modified_on, ping_count, pinged_urls, status, tangent_cache, template_id, text, text_more, title, to_ping_urls, unpublished_on, week_number, current_revision: DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9D\x84\x87 #...' for column `movabletype`.`mt_entry`.`entry_text` at row 1 at /var/www/MT6/extlib/Data/ObjectDriver/Driver/DBI.pm line 418.

ログに出ている "Incorrect string value: '\xF0\x9D\x84\x87 #...' for column" あたりのメッセージを手掛かりにして検索をかけてみると、MySQL/MariaDB での文字コードの扱いの問題であるらしい。
でも、エントリの内容見直してもおかしな文字使ってねぇしなぁ、といろいろ試してみたら、どうやら引用しようとしている 2 つの tweet の一方を入れないと問題が出ないことが判明。問題が出る tweet を引用しないって手もあったのだけど、いずれ似たような事態にぶち当たるだろうから、データベース側で対処することにした。

データベースで使う文字コードを変更する

この問題、界隈によっては「寿司ビール問題」として有名な話だったみたいですね。

さて、 MovableType は現在 MariaDB と組み合わせて使っているんですが、 MovableType のデータを格納しているデータベースを初期生成したのはいつだっけな?といういうぐらい前。下手すると MobavleType 5 を初期設定した状態から使い続けているんじゃないかなぁ。
MovableType 7 は、r.4607 以降で utf8mb4 に対応していて、これについては既にバージョンアップ済みだったので、データベース側を以下の順番で対応していけば良い、と。

  1. MySQL/MariaDB の設定で、デフォルトの文字コードを変更
  2. データベースそのものの文字コードを変更
  3. データベース内のテーブルの文字コード変更

まず /etc/mysql/mariadb.conf.d/50-server.cnf/etc/mysql/mariadb.conf.d/50-client.cnf で、それぞれ以下の設定を追記 or 修正して、 mariaDB を再起動。

[mysqld]
character-set-server = utf8mb4
[client]
default-character-set = utf8mb4

続いて MovableType のデータを格納しているデータベースの文字コードを、デフォルトの utf8_general_ci から utf8mb4_general_ci へ切り替え。

この操作は、コマンドラインで。

# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9281
Server version: 10.5.9-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> ALTER DATABASE movabletype CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.000 sec)

続いて、テーブルの方の文字コード設定をカラムも含めて変えていくわけですが、こちらは phpmyadmin を使って、一気に変更。

これで、データベース側の準備も完了。

問題の原因となっていた tweet を入れてエントリを MarsEdit からアップロードしてみたら、成功。
🍣も🍺も問題なく使えるようになったかな?

特定の条件でrspamdを通さないようにする設定をpostfixに施す

内容の怪しいメールは、相変わらず送られてくるわけですが、 rspamd を使っているおかげで 40 〜 50 通/日程度のスパムメールがブロックされているので、目にすることは少ないのですけど、それでもすり抜けてくるものが、ちらほら。

すり抜けてきたもので、明らかに「フィッシングだよな〜」というやつに関しては、フィッシング対策協議会の情報提供窓口に転送をしているわけですが、

フィッシング対策協議会では、フィッシングサイトに関する情報提供の窓口も準備していますので、怪しいメールを受け取ったら情報提供をするのも良いかもしれません。

[From フィッシングサイトへの誘導メールが届いた - Soukaku's HENA-CHOKO Blog]

その転送メールが、今度は rspamd でブロックされてしまって、情報提供できないことが過去に何度も起きてたんですよね。
すり抜けてきたタイミングでは、 rspamd がスパムとして判定するスコアの閾値を超えていなかったのに、フィッシング対策協議会へ転送しようとしたタイミングで閾値を超えるスコアになってしまう、ということが原因であるんですが、これだと情報提供できず都合が悪いということで、なんとかしたいなと思っていたわけです。

VyOSでconfigを外部保存する設定しておいたら、エラーが出るようになったので対処したメモ

Vyatta から VyOS へと使い続けて、10年近くなるんだなぁ、などと思いつつ、

GX240の内蔵NICがeth2なのでこれをPPPoE用に、増設したPRO/1000がeth0とeth1になるので、eth1をグローバル側、eth0をプライベート側という形にネットワークを構成してみた。 とりあえずコレが最低限の設定なので、ここから色々といじっていくことになるわけだけど、やっぱりIPv6関連の設定をしたいよねぇ・・・。

[From Vyattaでホームルータ - Soukaku's HENA-CHOKO Blog]

このところ、 VyOS でちょっと困ったことがあったのが解消できたので、それに関してのメモ的エントリー。

VyOS には、設定内容を指定したサーバや PC 上を書き出すようするために、下のような設定をしておくと、

set system config-management commit-archive location 'scp://xxxxxxxx:yyyyyyyyyy@172.16.0.101/Users/soukaku/vyos_config'
set system config-management commit-archive location 'scp://xxxxxxxx:yyyyyyyyyy@172.16.255.254/home/soukaku/vyos_config'
set system config-management commit-revisions '128'

設定の追加や変更を行い、それらを反映するために commit を実行したタイミングで config の書き出しが行われる。(このあとに save を実行しておかないと、ローカル保存は行われないので、不意の電源ダウンなどで追加・変更点がすっ飛ぶ。)
それが、一ヶ月ほど前から commit を実行しても

soukaku@sweethome# commit
[ service dhcp-server ]


Archiving config...
scp://172.16.0.101/Users/soukaku/vyos_config curl: (60) SSL peer certificate or SSH remote key was not OK
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Failed!
scp://172.16.255.254/home/soukaku/vyos_config curl: (60) SSL peer certificate or SSH remote key was not OK
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Failed!
[edit]

とエラーを吐いて、外部へ config 書き出しが実行されない状態に…。
外部保存には curl を内部的に実行しているようで、 どうも curl が証明書などのチェックに失敗したことで外部保存ができなくなった模様。保存先になっている側でも、 OpenSSH をバージョンアップしていたりしているので、それもエラーに関係していそうではあるんですが、保存先側の OpenSSH をダウングレードはすることはできない。

GeForce GT635搭載ビデオカード×4で、FAHClientを実行してみた

思い立っちゃったんで、買ってきましたよ。> Geforce GT635 搭載ビデオカード
前のエントリーに書いたとおりで、 2枚めの GT635 なビデオカードを追加したときにチェックしたとおり

でも、エッジフリーな PCI-E × 1 スロットが、まだ 2 本空いてるんで、もしかしたら 4 枚刺しイケたりする?

[From Folding@homeに参加してみた、ので設定とかをもう少し細かく書いておく - Soukaku's HENA-CHOKO Blog]

スロット空いてたので、試してみようと思った次第。

追加で買ってきたGT 635搭載ビデオカード

買ってきたお店は、お約束の秋葉原最終処分場さん。金曜日( 4/3 )の夕方の時点では、まだまだブツはありましたね。

CELSIUS W520 のスロット構成だけど、 PCI Express × 16 が 1 本、 × 4 が 1 本(コネクタ形状は × 16 )、 ×1 が 3 本(エッジフリーコネクタの × 1 が 2 本と × 16 コネクタ)。あと、最近では出番の殆どない PCI スロットが 2 本。

エッジフリーなPCI Express ×1スロット

上の画像でいうと、 中央の青いエッジフリーコネクタの右側が × 16 、 左側が × 16 コネクタの × 1 。 × 16 の更に右側に × 4 が並んでます。
#ホコリ、すげぇな…。今度掃除しよ…。

Folding@homeに参加してみた、ので設定とかをもう少し細かく書いておく

前回のエントリーで端折っていた

自分のところでは、 Debian sid をインストールしたマシン 2 台に FAHClient をインストール。それぞれのマシンに GeForce GT 710 、 GT635 & Quadro 600 で2枚刺しって構成になっています。 Debian には CUDA を利用するためのソフトウェア群もインストール。

[From Folding@homeに参加してみた、ので設定とかイロイロ - Soukaku's HENA-CHOKO Blog]

ハードウェア周りのこととか、 CUDA 周りのこととかを追記しておきますね。

ハードウェア周り

現時点で、自分とこで、 Folding@home に参加させているマシンは、以下の 2 台。

  • 富士通 CELSIUS W520 (以下、 W520 )
    • Xeon E3-1245 v2搭載モデルで、こちらに GeForce GT635 搭載カードを 2 枚刺し。
    • 残念なことに電源 300Wモデル 、さらに PCI-E 補助電源ケーブルも生えてないのもあってハイパワーな GPU は使えないんで、 GT 635 で妥協。
    • でも、エッジフリーな PCI-E × 1 スロットが、まだ 2 本空いてるんで、もしかしたら 4 枚刺しイケたりする?
  • HP Pro 6300 SFF (以下、 Pro 6300 )

メインマシンである Z620 にも FAHClient 入れてはみたんですが、 OpenGL/OpenCL サポートが非推奨という OS 的な制約で RX580 使った解析ができないんで、さっくりとアンインストールしちゃいました。う〜ん、残念。
その代わり、 Z620 には BOINC の方を頑張ってもらうことにする。
# RX570 版例のカードも、手元にあったりするんだけど、なんだかんだと制約があるおかげで使えないだよね…。

Folding@homeに参加してみた、ので設定とかイロイロ

長年参加してた SETI@home が、この3月末をもって休止する事になった

On March 31, the volunteer computing part of SETI@home will stop distributing work and will go into hibernation.

[From SETI@home hibernation]

ってんで、せっかくだし他の分散コンピューティング・プロジェクトでもやってみるか〜、と思っていたところに、タイミングよく Folding@home が新型コロナウイルスの解析に対応したというのをみて、いっちょやってみるかということに。

解析用クライアントである FAHClient の入手方法やインストールの手順については、探せばイロイロ出てくるので、そっち任せるとして、自分のとこで動かす上で、ちょっとハマったポイントなどを、書き残しておく。

MojaveをインストールしたSSDが、Zabbixでディスカバリされなかったので

HDD に Mojave インストールして動かしてたときは、Zabbix のローレベルディスカバリで、システムディスクが検出されて、ちゃんと利用量などの値が取れていたのに、システムディスクを SSD に換えてから一向にディスカバリされなくて「なんでかな〜?」と思ってたんですが…。

ふと思い立って、管理 > 正規表現 > "File systems for discovery" とチェックしていったところ…。

管理 > 正規表現 > File systems for discovery

条件式に、 APFS が含まれてない!

そそくさと、以下のように修正してみたところ、正しくディスカバリされ、値が取れるように。

Before:
^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|ntfs|fat32|zfs)$

After:
^(btrfs|ext2|ext3|ext4|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|apfs|refs|ntfs|fat32|zfs)$

バグ、というわけではないけど、見つけちゃったんで一応フィードバックしてはみたので、どっかのタイミングで取り込まれるといいなぁ…。

フィードバック前に、似た事例がないか調べてみたけど、見つからなかったので、意外と誰も困ってなかったりする?
#というか、フィードバックするような内容でもなかったりしたのかな…?

Zabbix 4.0 LTS リリース!

ここ数年の飯のネタとなってる Zabbix 。
いよいよ長期サポート版としての 4.0 がリリースとなりました。(パチパチ)

2.0 から使い始めて、仕事では 2.2 から 3.4 へと(さらに 4.0 にすることを見据た上で)移行が進みつつあり、自宅でも時々ハマりながら、

実際、 Zabbix がそうだったんですが、 Zabbix が公式に用意している Zabbix 3.4 / pre-4.0 のパッケージを sid にインストールするために stretch 対応のものでよかったのですけど、 sid の curl のバージョンが上がったことで libcurl3 から libcurl4 への変更が発生。

[From Debian sidに公式配布版のZabbixパッケージがインストールできなかったので - Soukaku's HENA-CHOKO Blog]

順次バージョンアップしなから使い続けてきているわけで、当然のことながら 4.0 へのアップデートをしたわけですよ…。

Debian sidに公式配布版のZabbixパッケージがインストールできなかったので

Debian sid 使っていると、 Debian のリポジトリ以外からインストールするパッケージのインストールやアップデートが出来なくなるので「困ったな〜」となることがあったりします。

実際、 Zabbix がそうだったんですが、 Zabbix が公式に用意している Zabbix 3.4 / pre-4.0 のパッケージを sid にインストールするために stretch 対応のものでよかったのですけど、 sid の curl のバージョンが上がったことで libcurl3 から libcurl4 への変更が発生。

# dpkg -i /tmp/zabbix-release_3.4-1+stretch_all.deb
以前に未選択のパッケージ zabbix-release を選択しています。
(データベースを読み込んでいます ... 現在 155180 個のファイルとディレクトリがインストールされています。)
.../zabbix-release_3.4-1+stretch_all.deb を展開する準備をしています ...
zabbix-release (3.4-1+stretch) を展開しています...
zabbix-release (3.4-1+stretch) を設定しています ...
# apt update
ーーー 中略 ーーー
# apt install zabbix-server-mysql zabbix-frontend-php
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
zabbix-server-mysql : 依存: libcurl3 (<= 7.28.0) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

その影響で libcurl3 に依存していた公式配布版のZabbixパッケージがインストール/アップデートができなくなってしまう、と…。
libcurl3 → libcurl4 になる前に公式配布版の Zabbix パッケージをインストールしていたので、 libcurl4 に依存する apache2 関連のパッケージのアップデートを libcurl3 に依存する Zabbix パッケージが邪魔をするという状態になってしまったというのが、自分のところで起こっていた状況だったわけです。

NTPsec その2 :ntpviz で統計情報を取得する

んで、前エントリーの続き。
NTPsec に変えた一番の目的は、 ntpviz という ntp に関する統計情報を出力するコマンドがある、ってことなので、それを含む ntpsec-ntpviz パッケージをインストールして、統計情報が取れることを確認します。

まずは、 aptitude コマンドに -s オプションつけて、依存関係を確認。

root@vhost01:~# aptitude -s install ntpsec-ntpviz
以下の新規パッケージがインストールされます:
aglfn{a} gnuplot{a} gnuplot-data{a} gnuplot-qt{a} libwxbase3.0-0v5{a} libwxgtk3.0-0v5{a}
ntpsec-ntpviz
更新: 0 個、新規インストール: 7 個、削除: 0 個、保留: 24 個。
アーカイブの 6,863 kB を取得する必要があります。展開後に 24.3 MB のディスク領域が新たに消費されます。

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

削除されるものはないようなので、このままインストールするなら、-s を外して、aptitude を実行すれば、完了。

ntpviz コマンドを実行してみる

細かい使い方とかオプションは、 "man ntpviz" するか、NTPsec サイトに有るドキュメントを参照してもらうとして、実際に特定に NTP サーバとの Offset に関する統計情報を出力するには、以下のようにコマンドを実行します。

root@vhost01:~# ntpviz --peer-offsets ntp-a2.nict.go.jp
set grid
set autoscale xfixmin
set autoscale xfixmax
set xdata time
set xlabel "Time UTC"
set xtics format "%d %b\n%H:%MZ"
set timefmt "%s"
set lmargin 10
set rmargin 10
set terminal png size 1340,720
set title "vhost01.local.downtown.jp: Peer Offset ntp-a2.nict.go.jp"
set ylabel ""
set ytics format "%.1f ms" nomirror
set yrange [-0.8955:3.5569]
set key top right
plot 0.3909 title '50th percentile', '-' using 1:($2*1000.0) title 'ntp-a2.nict.go.jp' with line, \
'-' using 1:(($2+$3/2)*1000.0) title 'offset+rtt/2' with line, \
'-' using 1:(($2-$3/2)*1000.0) title 'offset-rtt/2' with line

1520082169.9069996 0.000877718 0.006074248
1520082171.9029999 0.000886769 0.005951494
1520082173.9040003 0.001002837 0.006294607
1520082175.9029999 0.000845034 0.006395244
1520082177.9029999 0.000154835 0.006268685
1520082179.9029999 0.000068847 0.006168117
1520082238.9029999 0.000573531 0.006166704
1520082305.9029999 0.001171861 0.006490722
1520082371.9029999 0.001739808 0.006436721
1520082437.9029999 0.002143953 0.006363756
1520082506.9029999 0.002659486 0.006837424
1520082574.9029999 0.000615921 0.006515450
1520082641.9029999 -0.000142259 0.006613719
1520082710.9029999 -0.000232807 0.006154115
1520082778.9029999 -0.000240509 0.006034757
1520083317.9020004 0.000009325 0.005811048
1520083857.9029999 0.000189473 0.006146113
1520083994.9029999 0.000548237 0.006358728
1520084467.9029999 0.000307157 0.006439212
1520084737.9020004 0.000390939 0.005914518
1520085779.9029999 0.000421743 0.006194988
1520085908.9029999 0.000345647 0.006118246
1520086307.9029999 0.000400457 0.005986258
1520086571.9020004 0.000375874 0.005964945
1520086835.9020004 0.000262098 0.005901524
1520088949.9029999 0.000424563 0.005911586
1520089471.9029999 0.000545216 0.006119386
1520090532.9029999 0.000681996 0.006185292
1520091598.9029999 0.000646152 0.006545365
1520092139.9029999 0.000566383 0.006364219

-- snip --