WordPress マルチサイト用に証明書を更新(letsencrypt)

https 化はこの前うまくいったと思っていた。ところが、このサーバーでは、Wordpress のマルチサイト機能を使って複数サイトを立ち上げており、他のサイトにアクセスすると証明書の警告が出ることがわかった。

Apache 上は特に1つのサイトと一緒なので、証明書にホスト名だけ追加すればよいはず、という事で、

$ sudo certbot certonly -expand

と既存の更新なので、expandをつける。あとは

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 

で、1 を選んで、

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel):

で、サイトのアドレスを列挙していくだけで無事証明書が新しくなり、エラーがでなくなった。

Tp-LINK T9UHと Etron USB3.0で嵌った話

古いPC、邪魔なのでネットのない部屋に片づけておいた。デスクトップなので、無線 LAN などは搭載せず。ただ、たまに古いファイルが欲しくなる時があるので、よっこらせと運んで LAN に接続とかやっていた。ただ、Define R3のケースに、HX850、SilverArrowという、重量級のパーツが多いので、少し大変なので無線LAN子機をつけることにした。

折角なので、スループットも出そうな、TP-LINK の T9UHとかにした。あわよくばファイルサーバー化したいという事もあり。モニタなど繋ぐのが面倒なので、電源とLANケーブルのみで、Remote Desktopで作業。USB3のポートに子機を挿して、最新版ドライバダウンロードして、インストール。tp-link 謹製の WPS ツールとやらで設定完了(したように見えた)。

ここで、動作確認のためにケーブル抜くのが面倒だったので、LANアダプタを無効に。Remote Desktopをつなぎなおすために、ルーターを参照し、新しく割り振られた IP (たぶんこれが無線のやつかな)でリモートデスクトップ接続しようとする。が、つながらない。ケーブル抜いていれば、ここで挿せば復活するはずだがどうにもならない。モニタ繋ぐのも面倒臭い。

USBの有線LANアダプタをSwitchからとってきて、接続。新しいIP経由で接続して無事復帰した。Windows 10 のネットワークを見ると有線だけ。無線アダプタがなくなっている。あれっと思ってデバドラみると、無線LAN子機が三角マーク付きになっている。一度デバイスを削除し、子機を抜き差し。普通に認識している。今度はSSIDをwin10の WPS 経由で入れる。接続したタイミングで、また無線LAN子機がデバドラでこけている。

なんか間違ったドライバいれた?と念のため、付属CDからドライバいれても同じ現象。だんだん嫌になってくる。tp-link ssid disconnectとか検索してもぼんやりとしている。何を思ったか、USB2.0 のポートにさして見るとなぜか繋がる!というところでなんか USB3.0 のチップと相性があるのか?と思いつく。

このマシン去年まで現役だったが、Sandy Bridge 2600+ Z68 Extreme 4 とかなので、USBはMB上のチップ。 Etron 3.0 driver とかを検索すると、ETron製USB3.0ホストと弊社製品の相性についてとか、Trying to use TP-Link WN821N on Gateway FX6860-EF10P USB 3.0 ports とか、それなりにいろいろ引っかかる。Windows 7とか8とかはドライバがいろいろ出ていたようだが、Win10 64bitはどうやらMS謹製のみ?

いろいろ悩んでも仕方がなさそうなので、当面 USB 2.0で運用する事にして、Amazonで適当なUSB3.0ポート拡張ボードを注文して終わり。

スマートメーター読み取り

きっかけ

上の子供がテレビをつけっぱなしにしがち。電気代がもったいない!と怒るもどれくらい電気を食っているのかよくわからない。最近はスマートメータ化が進んでいて、いろいろやりようがあるらしいので調べてみた。

調査

とりあえず規格としては Wi-SUN、802.15 WG の中で数少ない成功例の一つだと思います。これらを扱えそうなモジュールを調査。

モジュール例

BP35A1

MaixDuino のケースを作っていた人のページでも紹介されている。これを入手すれば、このケースも使えていい感じだ。ただ 8000円くらいするのか……

RL7023 Stick-D/IPS

ここで紹介されている。上のモジュールが入っている USB ドングル?8000 円かぁ

とかやっていくときりがないので、やめよう。というか、5年前のインターフェースの記事サンプルに技適取得済みの 920 MHz 帯モジュール一覧があるのでこれで。新しいのはなんかでているのかもしれないけれど。

変復調等

さて、実際802.15.4gのどのモードで通信しているのかという事を見ると、FSK の 50 Kbps, 100 Kbps, 200 Kbps とかその辺が国内で使われているみたい。

このへんならば、MACはなんとかがんばれば、15.4g対応というものでなくても対応できそうなモジュールは多そう。

SEMTECHのSX1276とか、仕様書みるとどう考えても普通にいけそうだし、Amazon とかでも 2000 円ちょい簡単に買えるんだけれども、なかなか技適のあるものが手にはいらない。

今後の方針

BP35A1

先例もあるし、ケースもあるし。ただ価格が……

SX1276

何とか技適未取得端末の実験という形ですすめる(半年だけだけど)。一応手持ちに前の実験で使ったモジュールがある。

とりあえず802.15.4gとして使うからそれで申請すればよいのだろうか。駄目な電波はとりあえず設定しないようにすればよいのかも。あとでこの辺みて復習しておく。

Maixduino

でかくていろいろ乗っているから、”Max”iduino なのかとぼんやり思ってたら、Maixduino だったようです。Tang Primer も Tang Premierと思ってたの(これSwitch Scienceも間違っている)で、最近固有名詞の覚えが怪しい。

Shigezone で 3,300 円で売ってた。大き目の LCD とカメラもついていて安い。相変わらず注文してから翌日に届くのがすごい。今回は、ブレッドボードとか線材も頼んでみた。

修行が足りないのか、まだ基板間のフラットケーブルがプラプラしているのが気になる。誰かケース作っているはず、と思って検索してみると、ここでやっぱり作っている方がいた。しかも完成度がおかしいくらい高い。下のケースがいまいちに見えるとしたら、それはうちのプリンタのせいだと思う。

カメラのフラットケーブル、すこし長めのものがついていた。ただスペースに遊びがあるので問題なかった。

組み上げて起動(ここで初めて電源いれた)。ちょっと小さ目のデジカメっぽい。アクセス性も良い感じ。熱やばそうならスリット入れてみるか。

ボタンを適当に押せばカメラの画像が LCD に表示されるとかいう話がある。カメラのテストもやってみたいので、ブートコードを見ると以下のような記述あり。

test_pin=16
fm.fpioa.set_function(test_pin,FPIOA.GPIO7)
test_gpio=GPIO(GPIO.GPIO7,GPIO.PULL_UP)
lcd.init(color=(255,0,0))
lcd.draw_string(lcd.width()//2-68,lcd.height()//2-24, "Welcome to MaixPy", lcd.WHITE, lcd.RED)
v = sys.implementation.version
lcd.draw_string(lcd.width()//2-70,lcd.height()//2+12, 'V{}.{}.{} : maixpy.io'.format(v[0],v[1],v[2]), lcd.WHITE, lcd.RED)
del v
if test_gpio.value() == 0:
    print('PIN 16 pulled down, enter test mode')
    lcd.clear(lcd.PINK)
    lcd.draw_string(lcd.width()//2-68,lcd.height()//2-4, "Test Mode, wait ...", lcd.WHITE, lcd.PINK)
    import sensor

Welcome to… 表示直後に一回 Pin 16 が 0 かどうかを見てテストモードに入るらしい。PIN16 はどうも BOOT ボタンに割り当てられているとか。という事で、リセット解除してから BOOT ボタンを押しっぱなしにしてみる。

test mode

無事カメラも動作。と書くとスマートに見えるが、本当はガチャガチャやってたらなんとなく操作方法がわかった。答え合わせで上記を調査したので書いておく。

子どもが何それ、デジカメ?デジカメ?とかうるさいが、いつも通り放置。そのうち勝手に遊ぶだろう。

K210 も結構 CPU パワーありそうなので、何に使おうか思案中。こうなると Lichee Zero とか Tang Primer もケースにいれたい。

CentOS7環境でのWordPress 5.4.1への移行

動機

写真とか載せているが、Exif情報とか何もいじっていないので、やっぱり対策したい。

この辺を参考に、Wordpress のプラグインで、EWWW Image Optimizerとかいうものを入れれば何とかなることがわかったが、どうやらWordpress 5.0以上が必要だとか言う話。

現状4.7.1だったので、これを機にアップデートしようとしたら、ボタン一発でいかなかったので、ここに書いておく。

作業

PHPのアップデート

5.4.1への更新のお知らせが表示されてはいるが、PHPがどうやら古いようで、WPの設定ページから更新できないようだ。ただ、SSLの証明書対応した際に、updateかけているので一応 Serversman@VPSの CentOS 7環境では現状が一番あたらしいはず。

というわけで、CentOS7に新しいPHPをインストールすべく、情報を収集。だいたいこの辺のページにあるように、現状のPHPのパッケージをばっさり消して(/etc/php.iniはバックアップ)、yumのレポジトリを追加、せっかくなので7.3をインストール。php-gdのインストールだけ依存関係がうまく解決できなかったが、素直にbaseも加えて installすれば問題なかった。

WordPressのアップデート

さて、設定から更新を押しても真っ白になったり、ダウンロードしています……から進まなかったりしていたので、とりあえずサーバー再起動(適当)。

再起動後は一瞬でアップデート終わり。ただ表示が何かおかしい。

Crayon Syntax Highlighter停止

どうやら、PHP7系では問題あり、とのこと。しょうがないので停止する。直し方もあるようですが、とりあえずは代わりを探してみる。

EWWW Image Optimizer有効化

無事完了、古い画像も一括最適化、とかやっておく。

おわりに

いろいろ環境が新しくなったので、他にいろいろ試す予定。

ServersMan@VPSでのHTTPS対応

やりたい事

このサイト、保護されていない通信と出てくるので、さすがに対応したい。つうかサーバー自身のメンテ大丈夫か、というのもあるがこれはまた別の話。

準備

特になし。

作業

Serversman @vpsの設定

Let’s Encrypt とかいうのを使うと無料で証明書が取得できるとのこと。90日ごとにスクリプトで更新するとかなんだとか。とりあえずserversman @vpsで設定を試みる。

しかし、CentOS7だと、https://kozenist.com/free-ssl-for-serversman-vps/とかを見ると、どうもserversmanで、yumがinitscriptの更新をexcludeしている設定があり、このスクリプトがインストールできないとか。

しかしながら、http://blog.livedoor.jp/blackwingcat/archives/1977599.htmlあたりを見ると、initscriptの問題がすでに解消されているとか。これが本当なら、標準の方法で出来そう。まずはバックアップを取ってyum.confのexcludeをコメントアウト、yum updateをしてみる。Completeしたので、MyDTIから停止->起動。無事アクセスできた。ついでにサーバーのメンテもできた風。

無事アクセスできたので、素直にLet’s Encrypt の設定をすすめる。

Let’s Encryptの設定

まず基本的なところから

https://letsencrypt.org/getting-started/を見てみると、

To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol which typically runs on your web host.

Certbotを使えとあるのでそれはなんだというと、そちらを見てみる。

Certbot is a free, open source software tool for automatically using Let’s Encrypt certificates on manually-administrated websites to enable HTTPS.

との事。専用なのな。

https://certbot.eff.org/にアクセスして、自分の環境をメニューから選択すると(Apache on CentOS7)、次のページに飛ばされる。

  1. SSH into the server
  2. Enable EPEL repo
  3. Enable the optional channel
  4. Install Certbot
  5. Choose how you’d like to run Certbot
  6. Set up automatic renewal
  7. Confirm that Certbot worked

と、やること自体は簡単そう。

5でcertbotを使ってみると、

Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.

と怒られる。よくあることらしい。バーチャルホストを作れ、とのことか。

/etc/httpd/conf.dの下に適当にvhost.confとか作っておく(READMEを参照)

<VirtualHost *:80>
 DocumentRoot /var/www/html
 ServerName www.keitark.com
</VirtualHost>

あとはここで気を取り直して、sudo certbot –apacheを実行すると、こんどはエラーなく Congratulations!まで実行。conf.dのところに、ssl用のvhosts-le-ssl.confとか作ってくれる、便利。

これでOKとおもってアクセスすると、まだ自己証明のまま。うーん。

Apache設定

単独IPでの複数VirtualHostの罠にはまるを見ると、なるほどいろんなところでVirtualhostの設定がされている。同じように、httpd -S で見ると、

VirtualHost configuration:
*:443                  is a NameVirtualHost
         default server www.keitark.com (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost www.keitark.com (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost www.keitark.com (/etc/httpd/conf.d/vhosts-le-ssl.conf:2)
*:80                   www.keitark.com (/etc/httpd/conf.d/vhosts.conf:1)

真っ先にssl.confのdefaultを見に行くようになっていた。それはそっちを参照するなぁ。ssl.confの ## SSL Virtual Host Context以下をばっさり消したら、ちゃんと参照するようになったが、本当にこれでよいのだろうか。あと自分のサイトの設定を事細かに記すのはどうなのか。

とりあえず証明書はちゃんとしたものを使うようになった。よかった。自動化は後でよいか(後でちゃんとやった)。

証明書の確認

https://www.ssllabs.com/ssltest/ で見てみたが、いちおうちゃんとできているっぽいDNS CAAだけNO、あとで調べる(たぶん調べない)。

WordPressの設定

画像入りのページなどにアクセスすると、まだchromeから保護されていない通信、と怒られる。これは、http時代の画像とかか。

Really Simple SSLとかいうプラグインいれて、ボタン一発で全部変更してくれた。すごい。

最後に

serversman @vpsのcentos7で唯一困っていた、initscriptsが更新できない問題がいつの間にか解決していたのが一番大きかった。

Arduinoでの2-key Keyboard作成

やりたい事

とりあえず家じゅうが閉じこもって各々ゲームをしていたりと、楽しく過ごしているのだが、あるゲームでキーボードの耐久性が気になってきた。あと軸の違いもためしてみたいのでゲームで使うボタンだけのキーボードを作りたい。

準備

Anycubic社製 Kossel Linear Plus

ずいぶん前に思い付きで購入し、リビングの片隅で何かの台になっていたもの。ほこりを吹いたり。

キーボードの筐体モデル

https://www.thingiverse.com/thing:3712151

を使った。Arduino Pro Microの穴とかステーとかついている。

Cherry Mx の軸

赤軸とあとで比較のため青軸を購入。千石電子から、次の日に来た、このご時世なのにはやい。

Arduino Pro Micro 互換ボード

これがあるとすぐにキーボードが作れるとのことなので、Shigezoneで購入、次の日来た。アマプラより早い時がある。

 作業

筐体プリント

とりあえず、1年ぶりくらいに動かすので、ほこりをとるところから。firmwareとか新しいのがあるけど面倒なので as is で。

Auto levelingとか調整、試しにプリントしたらBedの温度が途中で上がらなくなり、煙が出てくる。見ると電源の端子台が焦げている。なんだろうな、なんかゆるんでた?とか思いながらとりあえずケーブルを直ではんだ付け。

https://groups.google.com/forum/#!topic/flashforge/nVOJ0iL29Xg

を見るとTriGorillaでよくある話なのか?

とりあえず、久々だったので、https://www.thingiverse.com/thing:1969059

とか、

https://www.thingiverse.com/thing:2771843

を追加した。PSUカバーは12時間とか言われてあきらめた。

軸取り付け

なんか思っていたのと違う仕上がり。うえからはめるだけ、ぴったり固定される絶妙なサイズ。

 
Sの字のところ、サポートを除去するつもりが、間違って下まで突き破ってしまった。まぁ実用上問題はない。
裏から見るとこんな感じ。

Arduino取付

かちっとはまる。すばらしい。写真にうつってないけどMicroUSBコネクタの穴もきれいにはまる。

配線

とりあえず、各々のスイッチの端子、片方グランドで、他方は、Digital in 2, Digita in 3 にそれぞれ接続、空中配線。

ファーム書き込み

あまり中身は考えてなかったので、とりあえず調べてみる。https://qiita.com/kamaboko123/items/c32ad91434ffc7f4ff8d

が、作業の流れが分かりやすかったです。

Platform IOでKeyboard Libraryを追加して、とりあえず下のようなものを書いてみた(いろいろ考えるところはあるのだが、そんなにシビアじゃないだろうし)。

#include <Arduino.h>
#include "Keyboard.h"

#define KEYZ 2
#define KEYX 3

void setup() {
  // put your setup code here, to run once:
  pinMode(KEYZ, INPUT_PULLUP);
  pinMode(KEYX, INPUT_PULLUP);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(KEYZ)==LOW){
    Keyboard.press('z');
  }else{
    Keyboard.release('z');
  }
  if(digitalRead(KEYX)==LOW){
    Keyboard.press('x');
  }else{
    Keyboard.release('x');
  }
  
}

おわりに

いろいろ、まとめている人がいるとありがたい。

ブロック崩しのコントローラとか作りたい。