なにー、WordPress5.2.2。 やってくれたな。

どこかで、自動アップグレードする設定とかあったのでしょうか?  更新ボタンも押していないのに「WordPress5.2.2にアップグレードした」とメールが送られてきた。たしかに、WordPress5.2.2 が6/18にリリースされていて、  https://wordpress.org/news/2019/06/wordpress-5-2-2-maintenance-release/  このサイトにも勝手に適用されていた。
 ”更新”の記載には「最新バージョンの WordPress をお使いです。 今後のセキュリティ更新は自動的に適用されます。」と書かれている。 これを信じるならば、まだ セキュリティ情報は出ていないが 5.2.2で脆弱性の対処が行われたのでしょう。
以前に予想したとおりの状況ですが、勝手に修正を適用されてしまうのは想定外でした。 5.2.1の時みたいにセキュリティ強化した権限設定の影響でサービスダウンしてしまったらどうしてくれるつもりでしょうか。その辺の不満を越える危険をはらんだ問題だというならわからなくはないが、この仕掛けを基盤にして業務用に使用しているところは沢山あります。業務が止まったら大変なことになります。この辺を踏まえて設定で自動適用するかとか自動適用する脆弱性の深刻度レベルを設定できるようにするとか、工夫してほしい。

WordPress5.2.2の修正内容をチェックはまた明日。

Nginxが起動しない。そして、復旧。

監視モニター用の画面が起動しないので、ほかのページを確認すると、Nginxが動作していないと推測される状況でした。プロセスを確認するとNginxのプロセスは確かにいない。手動で、 Nginxを再起動しても、復旧しませんでした。

 こんな時は、慌てず原因調査します。nginxのログファイルerror.logには、つぎのとおり出ていました。再起動するたびにこれが出力されます。

[notice] 19828#9876: signal process started
[error] 19828#9876: OpenEvent(“Global\ngx_reload_16096”) failed (2: The system cannot find the file specified)

 logsディレクトリには ファイルnginx.pidが存在していて、このファイルには 16096と書かれていました。 上の” ngx_reload_16096 ”と同じ数字です。これはNginxのPIDです。tasklistでこのPIDが存在しないことを確認しました。また nginx.pid ファイルのタイムスタンプは2日前であり、かなり古い日付です。 この状況から、Nginxの終了処理が完了しないうちにOS再起動されてしまい、nginx.pidファイルが残留してしまったことが原因で、Nginxが起動できなくなってしまったと推測されます。
 ということで、 nginx.pidファイル を削除して、再起動します。

おや、再起動しない。ログメッセージはちょっと変わりました。

[error] 17420#13516: CreateFile() “XXXX/logs/nginx.pid” failed (2: The system cannot find the file specified)

おっといけません、” nginx.pidファイル を削除して ”いたつもりでしたが、 nginx.pid を開いたエディタを別名で保存した状態で開きっぱなしでした。 nginx.pid ファイルは存在しないけど、このエディタプロセスが nginx.pid のファイルディスクリプタをつかんでいる状態になっていました。 
 エディタも閉じて、Nginxを再起動して、無事に復旧しました。

ログメッセージをインターネット上で検索してみると、問題対処のためインストールしなおししている人がいました。復旧させるにはその方法もありますが、原因を特定しないと再発防止策の検討もできませんし、復旧に余計な時間がかかるかもしれません。そんなときはサービス停止の影響を最小化しつつ、慌てず原因調査しましょう。

いくつかの電気製品は更新のタイミング?

いろんなところで2020年問題とか、時限式ネーミングで売り込みしようとしています。どんなものなのか検証してみましょう。

今回は、「照明の2020年問題」についてみてみます

実質完全LED化する2020年問題の現状とは?」この辺の記事では、全ての蛍光灯の生産がゼロになるというわけではなそうです。

パナソニックはWeb上では、まだ健在です。切り替えの記述も特に無いようです。それよりも「 LINK STYLE LED 」を押している感じです。

東芝ライテック株式会社は、一部生産終了しているように見せています。E26金口タイプは終了しています。これは普通にE26のLED電球に置き換えるだけなので球が切れたら順次切り替えればよいでしょう。一般的な蛍光灯は普通に存在しています。

株式会社ホタルクス(旧 NECライティング株式会社)も、普通に蛍光灯はあります。このサイトに「水銀関連のお知らせ等」の情報がありました。すでに規制にひっかかる製品は製造や輸入されていないとあります。すでに基準を満たしているので、 すでに2020年問題はクリアされていることになるといってよいのではないでしょうか? 

各サイトの書きっぷりは3つほどのレベルに分類できそうです。「キャッチーなタイトルであおりを入れつつ、ぎりぎりアウトな嘘の記載で物を売ろうとしているサイト」、「真面目に現状について正しい情報を提供しようとしているサイト」、「後者をベースに将来も見据えた方向性を紹介しているサイト」の3つです。

 ということで、昔あったフロン規制と同じようにだんだんと基準が厳しくなることも想定されます。つまり、現状の代替製品も基準を満たさなくなるということが考えられます。そうであれば、機器故障とか、買い替えのタイミングで製品を切り替えるのが良いでしょう。ということで、今使っている機器についてじっくりとどんな製品に切り替えるのが良いか検討してみましょう。

WordPress脆弱性 、対処するも白画面そして解決 

WordPress脆弱性はプラグインでの新たな情報が出ていますが、本体とこのサイトで使用しているプラグインについての新たな情報はありませんでした。代わりといっては何ですがWordPress5.2.1の修正内容をチェックしました。重要な修正の内容は5.2で作りこまれたバグの修正でしたが、他の修正内容も確認しました。

5件は作りこみバージョンの情報がないもので、6件はWordPress5.1.1以前が作りこみバージョンのもの、それ以外はWordPress5.2で作りこまれたものです。作りこみバージョンがWordPress5.1.1とされた修正で、”jQuery Update 3.4.0”のアップデートがありました。これはWordPressで作りこんだバグではありませんが、jQueryでは”vulnerbility”とされているので、WordPressもこの脆弱性の影響があると判断したほうが良いでしょう。これは、 jQuery 3.4.0で対処された CVE-2019-11358 のことでしょう。ということでWordPress5.1.1も、 jQuery におけるクロスサイトスクリプティングの脆弱性の影響を受けるということなので、コメントを介して攻撃を受ける可能性があると判断し、WordPress5.2.1に更新します。

WordPress5.1.1から5.2.1にアップデートしましたが、 困ったことに 更新処理の途中で失敗し白画面となってしまいました。管理画面も白画面となり対処不能となったので仕方なくバックアップから書き戻していったん復旧しました。 類似の事象がないかチェックしましたがほぼ同じパターンのアップデートが成功していそうな情報がありました。違う条件はPHPのバージョンでした。そこで、PHP5.6をPHP7.2に上げて再度確認しましたが、アップグレード途中で失敗し白画面(500エラー)になる問題が再発しました。5.2.2で対処されることを期待して5.2.2を待とうかと思いましたが、うまくアップロードができている事例があるので、ログとかを見て調査することにしました。

まず、画面内容を再確認。

wordpress-5.2.1.zip から更新をダウンロード中…
更新を展開しています…
展開したファイルをチェックしています…
最新版をインストールする準備をしています…
メンテナンスモードを有効にします…
必要なファイルをコピーしています…
メンテナンスモードを無効にします…
更新が必要な翻訳が一部あります。更新が終わるまでしばらくお持ちください。WordPress (ja) の翻訳を更新しています…
翻訳が正常に更新されました。
ファイルをコピーできませんでした。: wp-admin/site-health.php
インストール失敗
WordPress のご利用ありがとうございます。 バージョン 5.1.1

インストール前の状態で、” site-health.php ”のファイルは存在しないので、ファイルを書き込み出来ていないのが原因でしょう。 wp-admin/ のフォルダの書き込み権限がないのでそれが原因でしょう。セキュリティ強化としてこのフォルダの書き込み権限を落としていました。書き込み権限を付加して、再度WordPress5.2.1へのアップグレードを行うことでアップグレードに成功しました。 アップグレード後は ” site-health.php ”などのファイル が作成されていました。書き込み権限を落として作業完了しました。

WordPress5.2.2については次回チェックします。5.1からのバグの修正があります。現時点では優先度はいずれもNormalなので近く公開されようとしている理由となっている修正はこの一覧にはないのかもしれません。

WordPress脆弱性 CVE-2017-6514

5/22に CVE-2017-6514の情報が公開されています。2年ほど間に登録されておりWordPress4.7.2に脆弱性があるとされています。JVNのほうにはまだ情報がないようです。 最新のWordPressでもまだ修正されていないのではないでしょうか?感触では、5.2.2で修正されそうな気がします。現時点のWordPress5.2.1.5.2.2の修正内容には該当するものはなさそうです。これから5.2.2向けにコミットされるじゃないでしょうか?

バージョンアップ情報、脆弱性情報の自動チェックを正式運用開始

先に書いた「Webページの更新内容自体が、動的更新によるものかどうかを自動チェックして、通知するかどうかを切り分けるように強化」の完了し、うまく機能することが確認できたので、正式に運用を開始しました。また、「日本語でのメール送信」機能も組み込んだので見やすく、作業効率が改善しました。今後、新たなソフトウェアのチェックが必要になったときにチェックルールをメンテナンスしていきます。

バックアップした媒体の整理

過去の写真データを参照したくなって、古い媒体を整理しました。様々なタイプの媒体やバックアップしたデータも出てきました。中身をチェックしようとしてドライブ入れてみたが、読めないものもあります。今すぐには不要だが、バックアップしたものが必要となったとき読めるかどうかを整理しまします。

下表内の記号の意味
◎:読み書きを確認済み
〇:読めることを確認済み
無印:未確認

 ドライブ型番HL-DT-ST DVDRAM
GH24NS90
HL-DT-ST DVDRAM
GH24NSD1
備考
メディアタイプ
DVD
DVD-R×
DVD+RW×
DVD-RAM×
CD
CD-R
CD-RW

ドライブ自体が手に入らなくケースとか高額になってしまうなどの問題が発生するので、どの媒体が生き残りそうなのか、見極めたうえでバックアップ媒体をどうするのか考えたほうが良いですね。

雨が降りだしたら自動で排水 

消費電力ほぼゼロのはずの電気代が1か月で5500円とか、9500円に増えていることに気がつきました。調べると排水ポンプが稼働しっぱなしになっており、常に「ジョロジョロ」と排水されていることが原因と判明しました。普通は、「ドバー」っと一気に排水されて水がなくなると自動で止まります。これは排水ポンプのフロースイッチが効かなくなっていることが問題原因なので、本来は排水ポンプを修理もしくは交換するところです。しかし、費用も抑えたいし、コンセント側で電源をON/OFFしてやれば同じ動作ということで、余っていたスマートコンセントを付けてみました。そして指定した時刻に定期的に排水するように設定しました。この変更で、電気代は1か月で390円に激減しました。これは意図した通りなのですが、故障する前の電気代は1か月あたり1100円程度だったので、期待以上の削減です。ポンプの待機電力より、スマートコンセントの消費電力のほうが小さいとは思えないので、以前は現状のポンプの稼働頻度よりも高頻度でポンプが稼働していたと推測されます。

短時間に多量の雨が降った場合、自動では排水されず、水が溢れるかも知れないので、少し工夫してみます。
IFTTTのサービスを使って、雨が降り出したら排水ポンプを動かすAppletの設定をします。まずIFTTTで「New Applet」すると次が表示されます。

「+this」をクリックして実行する条件”トリガー”を設定します。ここでは「Weather Underground」を使っています。検索枠にサービスの名称” Weather Underground ”の頭から数文字を入れると選択肢が表示されます。
” Weather Underground ” をクリックします。

次に実行条件を選択します。雨が降ったら起動したいので、”Current condition change to ….”(現在の天候がxxxに変わったら)を選択します。

”Current condition” は「Rain」(雨)を、Locationをマップで指定します。「Create trigger」をクリックします。

「+that」をクリックして、何を実行するかを指定します。

”実行条件”と同様に、実行する処理をサービスの中から選択します。ここでは、利用するスマートコンセント”Meross”を指定します。

”Turn on”(電源オン)を選択します。

登録した”排水ポンプ”のスマートコンセントを選択し、「Create action」をクリックします。

設定した内容を任意の名前を指定します。 「Finish」をクリックしIFTTT設定を完了し保存します

以上で、「雨が降りだしたら自動で排水」することができます。排水ポンプを止めるほうはスマートコンセントのスケジュール設定で「1分後にオフ」を登録しているので、1分後に自動的に排水ポンプは停止します。

他のサービスやWebRequest、Webhook、独自実装を組み合わせて排水量制御とか、排水の代わりに灌水の制御をするようにして、雨の状況を予測して灌水するかどうかを制御するとかいろいろできますね。

Pythonで日本語メール送信

定期実行タスクの機能を使ってメール送信していましたが、content-typeを次のようにcharsetを指定したいのに、

Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

つぎのように指定されています。
Content-Type: text/plain; charset=ANSI_X3.4-1968

このcharset指定のメールでは、日本語の文面が文字化けしてしまいます。受信したメーラーで明示的に文字コードを指定することで文字化けは解消しますが、いちいち指定する手間が大変です。そこで定期実行タスクのメール送信機能は使わずに、Pythonから直接送信するように変更します。

Python2.6で使用するので、 Uchida さんのコードを参考にさせていただきました。

参考のための補足情報:

・デバック方法
smtp = smtplib.SMTP(c[‘host’], c[‘port’])
の次の行に 「 smtp.set_debuglevel(True) 」を追加することで、メールサーバとの通信内容を確認できます。

・ユーザー名、パスワードの指定にはダブルクオーテーションでくくるのはNGです。ダブルクオーテーションもユーザー名、パスワードとして送信されます。

user = <アカウント名>
password = <パスワード>

このPython実装でのメールでは、charsetは次のように設定されます。

Content-Type: text/plain; charset="iso-2022-jp"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

以上の設定により 、メールの日本語文面を文字化けせずに参照することができます。 これをベースに、脆弱性情報の通知メールに送信機能を組み込みます。