OpenPGPの鍵を公開する

はじめに

GnuPGを使っているが、積極的に電子メールに署名も暗号化もしていないので、あまり役立てているとは言えないかもしれない。 利用しない理由は、PGPを使っている相手が少ないというものである気がするが、本当は特に署名したい内容も暗号化したい内容も書いていないからかもしれない。 最も利用しているのはファイルの暗号化であり、それを共有するということである。

しかし、鍵をきちんと公開しておきたい気持ちはある。 もう放棄しようとしているインターネット・サービス・プロバイダーの提供する電子メールアドレスについてはどうでも良いが、利用している独自ドメインの電子メールアドレスでは探せるようにしておきたい。 DNSSECを採用する予定はないので、Internet Draft draft-koch-openpgp-webkey-service-22であるOpenPGP Web Key Directory (WKD)を採用してみた。

鍵情報を生成する

どういう仕組みなのかというのは、どこかで解説されているだろうから省略して、実際の手順を書いておく。 まず、gnupg2パッケージをインストールしておく。

# cd /usr/pkgsrc/security/gnupg2
# make install

WKDの様式に従った鍵情報を配置するディレクトリーを作成する。

$ mkdir -p wkd/.well-known/openpgpkey

今回ターゲットとするのは1つの電子メールアドレスだけなので、絞り込んで作成する。 他は自分のドメインではないので、作成してもそもそも探しに来てはもらえないだろう。 gnupg2パッケージに含まれているgpg-wks-clientコマンドがうまく生成してくれる。 とりあえず、電子メールアドレスとドメインだけ、spamを防止するためにマスクしておく。

$ gpg --list-options show-only-fpr-mbox --list-key MYUSER@MYDOMAIN | grep MYUSER@MYDOMAIN |  gpg-wks-client -v --install-key --directory wkd/.well-known/openpgpkey
gpg-wks-client: using key with user id 'MYNAME <MYUSER@MYDOMAIN>'
gpg-wks-client: directory 'wkd/.well-known/openpgpkey/MYDOMAIN' created
gpg-wks-client: directory 'wkd/.well-known/openpgpkey/MYDOMAIN/hu' created
gpg-wks-client: policy file 'wkd/.well-known/openpgpkey/MYDOMAIN/policy' created
gpg-wks-client: key 82A2DC9176E0A10A8ABBFD1BF40427FAC7D115F3 published for 'MYUSER@MYDOMAIN'

どのように生成されたか確認してみる。これをhttps://openpgpkey.mydomain/.well-known/openpgpkey/MYUSER@MYDOMAIN/hu/tfjzips9n54e1w4edgiska367yec1bkh?l=ryoとしてアクセスできるように公開すれば良い。

$ find wkd
wkd
wkd/.well-known
wkd/.well-known/openpgpkey
wkd/.well-known/openpgpkey/MYUSER@MYDOMAIN
wkd/.well-known/openpgpkey/MYUSER@MYDOMAIN/hu
wkd/.well-known/openpgpkey/MYUSER@MYDOMAIN/hu/tfjzips9n54e1w4edgiska367yec1bkh
wkd/.well-known/openpgpkey/MYUSER@MYDOMAIN/policy

wkd.dp42.devで確認できる。 この場合、Content-Typeはapplication/octet-streamにしておくべきであるようだった。

GnuPGのwikiページによると、Thunderbird 128以降はWKDを使って公開鍵を取得できるようだ。 Thunderbird 158.8.1はビルド待ちなので、今度試してみたい。

文化庁の自由利用マーク

文化庁の自由利用マークというのがあって、ITmediaの記事「文化庁、CCライセンスを支援へ 独自ライセンス構築は断念」によると、2013年の時点で普及はあきらめているらしい。 文化庁のウェブページを見ても、そもそも「コピーOK」「障害者OK」「学校教育OK」という区分も良いとは思えないし、どんな側面でも日本の法律に直結してしまっているのも、利用できる範囲が狭いのも、発展性がないような気がする。 しかし利用されてしまうと、説明のウェブページを維持しないといけないので、こういうのは失敗できない難しいことであるような気がする。

Android用のWikipedia appを使ってみた

Wikipediaをログインしないで使っていて、WikipediaのAndroid appがあるという通知が表示された。 これまでWikipedia appがあるとは知らなかったので、インストールしてログインしてみた。

これまでの編集や編集後の閲覧数をActivityとして閲覧できるのはおもしろいのだが、Firefox for AndroidでWikipediaのウェブページを開くと、appで開くか聞かれるのは煩雑かつ私には意味がない。

Firefoxでapp単位でこの機能を無効化できたか記憶がない。 また、外部サイトはあくまで外部のウェブブラウザーで開くことになるので、便利でもない。 どんなウェブページも開けるように作るのはセキュリティー的な面も考慮すると避けたいのかもしれないが…。 でもWikipediaほどのウェブサイトを表示できるのであれば、外部サイトをapp内で開いても大差ないような気もする。

いずれにしても、そこまで便利ではないと言うか不便になる方の影響が大きいのでアンインストールすることにした。

YubiKeyを使えないウェブサービスでYubiKeyを無理やり使う

PassKeysは明らかに私にとってのSingle Point Of Failureなので、なぜこんなものが流行しているのか、いまいち分からない。 技術的にはパスワードを入力してやりとりするより安全なのは間違いなさそうだが、もっと良い方法はないのだろうか。 いずれにしてもPassKeysを設定しないといけないサービスにFirefox for NetBSDからログインしたいので、選択肢はない。

Firefox for NetBSDを常用していてPassKeysを使おうとすると、ハードウェアセキュリティーキーを使う以外に方法はない。 私はYubiKey 5 NFCを買って使っている。 古いもの(ファームウェアバージョン5.4.3)はFIDO2の保管上限数が25であり、すぐにいっぱいになってしまう。しかも、脆弱性がある。 新しいもの(ファームウェアバージョン5.7.4)は100まで保存できる。しかし100しかないとも言える。 software FIDO2 authenticatorとでも呼ぶべきプログラムは存在するのだが、それをNetBSDで動くようにするのは、面倒な気がする。 やってみたらそうでもない可能性もあるので、勝手な印象ではあるが。 では、スマートフォンでQRコードを読み取る方式はどうかと言うと、これはBluetoothサポートが必要なので、到底実現できるとは思えない。

同じようなことを考える人はいるもので、Passkey DictatorというFirefox addonを作っている人がいる。 Mozilla Firefoxのaddon storeでも公開されている。 こういうソフトウェアを無条件に信頼してインストールするのは危険であるのは確かなので、良く吟味してから使わないといけない。

これを使うと、READMEに書いてあるようにPixivには問題なくPassKeysの登録もログインもできるようになる。Firefox for NetBSDでもWindowsでも同様に問題ない。user agent stringも変更する必要はない。

私の問題としているもう1つはdアカウントなのだが、これはFirefox for NetBSDでid.smt.docomo.ne.jpへ送るuser agent stringをGoogle Chromeにすると、PassKeysの登録もログインも両方が問題なくできる。 しかしFirefox for Windowsでは、PassKeysの登録はできるのだが、ログインの際にはQRコードのパターンにしかならない。 幸運なことにdアカウントには複数のPassKeysを登録できるので、YubiKeyとAndroidのGoogle Password Managerの2つのPassKeysを登録しておくことにすれば、最終的には問題にはならなかった。 dアカウントでのログインは、PassKeysが必要なサービスとそうでないサービスがあるので、面倒である。

もう少し勉強すれば、Firefox for Windowsでdアカウントにログインできるようにできるのかもしれない。

mixed mode CDのデータトラックをマウントする

以前に「古いmixed mode CDをバックアップする」と題してバックアップ方法を書いたが、実際のmixed mode CDのディスクについてはあまり触らなかった。 気になっていたのは、データトラックがNetBSDでマウントできるかを確認していなかったし、データトラックをマウントした状態ではCDDAのクラックは再生できないだろうが、それも実際には確認していなかった。 そもそも、CDDAの実際のディスクを再生する簡単な方法も分かっていなかった。pkgsrc/multimdia/vlcで/dev/cd0を再生すれば間違いはないのだが、mplayerやmpvではどうすべきか分かっていなかった。

まず、データトラックをマウントしてみる。 これは簡単で、普通にマウントすれば良い。

# mount_cd9660 /dev/cd0 /mnt/cdrom

予想通り、マウントしている最中にはCDDAのトラックは再生できなかった。

後はmixed mode CDを作る方法を調べてやってみれば、mixed mode CDに関する疑問は解消できそうだ。

2週間ごとにリリースされるようになるFirefoxの移植に取り組むべきタイミングを調べる

Firefoxが1カ月ごとではなく、2週間ごとにリリースをするようになるということなので、どの時点でpkgsrc/www/firefoxの更新作業をし始めるべきなのか確認してみた。

これまでは、b6までがbeta版ということになっていて、b6とb7の間ではビルドされるコードが違う。具体的には、#ifdefを使って違いが出るようになっていた。 Firefoix 155.0が2026年9月1日にリリースされるのはhttps://whattrainisitnow.com/calendar/を見ると分かるが、そのRelease dayの項目をクリックするとhttps://whattrainisitnow.com/release/?version=155のページへ移動することができる。 ここで、Beta 5の項目を見ると、Last beta uploftsと書かれていて8月26日にリリースされる予定になっている。

この後がb6になるのか、RCになるのかは分からないが、b5の次になったらpkgsrc/www/firefox-155に取り組み始めるスケジュールが良さそうだ。 ただ、これまでであれば、1週間前にはb9程度までは進んでいて時間はまだ足りないものの、どうにかできなかった訳ではないと思うが、リリースまで1週間を切ってから作業を始めないといけないのは大変かもしれない。

P.S. (2026-09-19)

155と156がリリースされたが、いずれでもb5の次がrc1のようなので、rc1が例えば156.0であればhttps://ftp.mozilla.org/pub/firefox/candidates/156.0-candidates/build1/に現れたら作業を開始するので良さそうだ。 でも、こうなると作業できる時間は短い。

古いmixed mode CDをバックアップする

CD EXTRAができる前にはmixed mode CDというのがあったはずで、私の持っているCDの中にはこのmixed mode CDの仕様に従っているものがある。 例えばWindows 11では、オーディオCDとして再生もできるし、写真の含まれたCD-ROMとしても同時に認識される。 これをNetBSDで再生したいのだが、全てを同時に満足するような方法は見付けられなかった。 だが、結果としてcdrdaoでバックアップしておけば、バックアップしたことになるようだ。

cdrdaoでバックアップする

cdrdaoでバックアップする方法は前回説明した通りで良い。 ただ、第1トラックはオーディオではなくデータが入っている。 cdrdaoコマンドを実行した時の表示で、それを見ることができる。

$ cdrdao read-cd --datafile file.bin --driver generic-mmc:0x20000 --device /dev/cd0 --read-raw file.toc
Cdrdao version 1.2.4 - (C) Andreas Mueller <andreas@daneb.de>
/dev/cd0: PIONEER BD-RW   BDR-XD08      Rev: 1.02
Using driver: Generic SCSI-3/MMC - Version 2.0 (options 0x20000)

Reading toc and track data...

Track   Mode    Flags  Start                Length
------------------------------------------------------------
 1      DATA    4      00:00:00(     0)     02:36:34( 11734)
 2      AUDIO   0      02:36:34( 11734)     02:42:02( 12152)
 3      AUDIO   0      05:18:36( 23886)     04:31:63( 20388)
 4      AUDIO   0      09:50:24( 44274)     04:04:02( 18302)
 5      AUDIO   0      13:54:26( 62576)     04:38:10( 20860)
 6      AUDIO   0      18:32:36( 83436)     06:09:15( 27690)
 7      AUDIO   0      24:41:51(111126)     04:32:10( 20410)
 8      AUDIO   0      29:13:61(131536)     06:06:04( 27454)
 9      AUDIO   0      35:19:65(158990)     03:51:03( 17328)
10      AUDIO   0      39:10:68(176318)     03:56:04( 17704)
11      AUDIO   0      43:06:72(194022)     06:12:16( 27916)
12      AUDIO   0      49:19:13(221938)     00:06:04(   454)
Leadout AUDIO   0      49:25:17(222392)

PQ sub-channel reading (data track) is supported, data format is BCD.
Raw P-W sub-channel reading (data track) is supported.
PQ sub-channel reading (audio track) is supported, data format is BCD.
Raw P-W sub-channel reading (audio track) is supported.
Copying data track 1 (MODE1_RAW): start 00:00:00, length 02:34:34 to "file.bin"...

データトラックを抽出する

これをmplayerで再生すると、第1トラックはホワイトノイズのような内容になってしまう。 それは避けようがないとして、第1トラックを抽出したい。 bchunkコマンドを使えば良いようだ。 まず、以下のようにインストールする。

# /usr/pkgsrc/sysutils/bchunk
# make install

これで、各トラックをファイルとして抽出する。 これにより、tracl01.isoと第2トラックからのtrack02.cdrといったファイルが生成される。

$ bchunk file.bin file.cue track

この第1トラックの分のISOファイルは、以下のようにマウントすれば良い。

# vndconfig vnd0 ./track01.iso
# mount_cd9660 /dev/vnd0a /mnt/cdrom

一方で、オーディオトラックの分のcdrファイルは以下のように再生できる。

$ mplayer -demuxer rawaudio -rawaudio rate=44100:channels=2:samplesize=2:format=0x10001 track02.cdr

オーディオCDをバックアップして再生する

私は何かをしながら音楽をきくと全く音楽を無視してしまうので、音楽を聞く習慣がなく、オーディオCDもほとんど持っていない。 だが、持っているものはあって、それらは20世紀のものなので、いつ劣化して再生できなってもおかしくない気がする。 と言うことで、バックアップしたいと思う。 全く知識がないのだが、binまたはimgというイメージファイルと、tocまたはcueファイルを組み合わせるのが一般的なようだ。 ウェブを調べても新しい情報はあまりないが、もうオーディオCDを扱いたいという人がいなくなって来ているのかもしれない。

pkgsrc/sysutils/cdrdaoでbin+cueを作る

cdrdaoコマンドを使えばbinファイルとtocファイルを作ることができ、toc2cueコマンドを使えばtocファイルをcueファイルに変換できるようだ。 と言うことで、cdrdaoパッケージをインストールする。

# cd /usr/pkgsrc/sysutils/cdrdao
# make install

以下のように実行すれば、binファイルを作ることができる。 ここで、--driver generic-mmc:0x20000を付けたのは、このbinファイルをそのままでmplayerで再生できるようにするためだ。 続けてtocファイルをcueファイルに変換する。

$ cdrdao read-cd --datafile file.bin --driver generic-mmc:0x20000 --device /dev/cd0 --read-raw file.toc
$ toc2cue file.toc file.cue

これをmplayerで再生するとする。 まずはmplayerをインストールする。

# cd /usr/pkgsrc/multimedia/mplayer
# make install

cueファイルに合わせてmplayerで各トラックを再生するのは、以下のようにすれば良い。 以下では、現在のディレクトリーにあるcueファイルを使ってbinファイルの2トラック目を再生する。

$ mplayer -demuxer rawaudio cue://file.cue:2

トラックに関係なく再生するのであれば、以下のようでも良い。

$ mplayer -demuxer rawaudio file.bin

binファイルを再生するのは、mplayerでは可能なのだが、手元にあるqmmp-1.7.11ではできなかった。 しかし、cueファイル自体はflacファイルに対しても利用できるようなので、以下のようにflacコマンドをインストールしてflacファイルに変換した。

# cd /usr/pkgsrc/audio/flac
# make install
$ flac --best --force-raw-format --endian=little --channels=2 --bps=16 --sample-rate=44100 --sign=signed --cuesheet=./file.cue --output-name=./file.flac ./file.bin

更に、cueファイル中のファイル名を更新しておく必要がある。

--- file.cue   2026-08-22 19:12:27.532711497 +0900
+++ file-flac.cue        2026-08-22 19:12:38.416281352 +0900
@@ -1,4 +1,4 @@
-FILE "file.bin" BINARY
+FILE "file.flac" BINARY
   TRACK 01 MODE1/2352
     INDEX 01 00:00:00
   TRACK 02 AUDIO

これであれば、qmmpでcueファイルを指定して再生することができる。

HP ProLiant ML110 G7のiLO3のリモートコンソールに、Windows 11 25H2からアクセスする

HP ProLiant ML110 G7のiLO3は、既にサポートが切れているので、リモートコンソールをウェブブラウザーから使うには、ActiveXかJava Web Startのいずれかが必要になる。

Windows 11では既にスタンドアローンのInternet Explorer 11は利用できないし、Microsoft EdgeでIEモードを有効化するのも、エンタープライズでなければ維持するのも面倒だ。もちろん、以下のようにVBScriptで書いておけばInternet Explorer 11を起動させることはできる。

> type ie.vbs
Dim ieLauncher
Set ieLauncher = WScript.CreateObject("InternetExplorer.Application")
ieLauncher.Visible = True
ieLauncher.Navigate "https://10.0.0.2/"

ここで、https://10.0.0.2/が、iLO3のウェブユーザーインターフェイスのURIである。リモートコンソール以外の設定をするには、このウェブユーザーインターフェイスは役に立つので、このVBScriptのスクリプトを用意しておく価値はある。

HPは、iLO3に接続するためのスタンドアローンのクライアントソフトウェアであるHPE Lights-Out Standalone Remote Console for Windowsを提供している。電源ボタン類の操作や、仮想ドライブも利用できる。

NetBSD上のLibreOffice CalcでVisual Basic for Application互換のスクリプティングを試してみる

以前に、「LibreOfficeでVBAプログラミング入門」藤井敏則著という本を電子書籍で読んだことがあって、その要点は、StarBasicの後継であるLibreOffice BasicをLibreOfficeのスプレッドシートであるCalcで使う場合にOption VBAsupport 1を最初に書いておけば、Visual Basic for Application (VBA)互換の文法が許容されるようになると言うことであった。LibreOfficeであれば、Windows用であればPythonインタープリターも付属していて自動的にインストールされるので、LibreOffice Basicを選ぶのが良いのかは分からないが、VBA互換というのは多くの人には良いものかもしれない。

しかし、この書籍には、この機能を使うにはJDKを利用できるようにしておかないといけないという記述があった。手元のNetBSD/amd64 11.99.7上のLibreOffice 26.2.5.2では、JDKを設定しておかなくてもVBA互換機能を利用することができた。この書籍は6.4.1.2の時点で書かれているので、もしかしたら変わったのかもしれないが、それなりの期間LibreOfficeを使って、pkgsrcパッケージを保守している感覚では、6.4.1.2より後にJDKが必要なくなったと考えるのは違うような直感もある。

いずれにしても、NetBSD上のLibreOfficeでもVBA互換機能は利用できるのが分かったので、何かの時には役立てられるかもしれない。

Firefoxのcontainer tabsを有効にする

最近のFirefoxは他のタブとcookie等と共有しないcontainer tabsという機能がある。 だが、私の使っているFirefoxでは有効になっていなかった。 NetBSDだけでなくWindowsでも同様である。 いずれにしても、利用したい機能ではあるので、about:configで以下の2つを設定して、有効化した。

privacy.userContext.enabled
privacy.userContext.ui.enabled

リモートのサーバーのバックアップを、ローカルネットワーク内のマシンに取得する

とあるVPSサービスを使ったサーバーがあるのだが、これはディスクの残容量が非常に少ない。 なので、そのVPSのディスクにtarballを作って、それを手元にコピーして来るということができない。 しかも、sshでログインできないユーザーだけが読み込みできるディレクトリーやファイルも存在する (rootが所有者で、パーミッションが700なディレクトリーや600なファイルがあると思えば良い)。 ryoonというユーザーがsshでログインできるユーザーであり、 rootユーザーがsshでログインできないユーザーである。

ここで、バックアップ元のVPSのホスト名をremoteserverとし、バックアップ先のサーバーのホスト名をlocalnetserverとしよう。 remoteserverはグローバルIPアドレスを持ち世界中のどこからもアクセスできるが、localnetserverは自宅のローカルネットワーク内にあるサーバーで外部からはアクセスできない。 つまり、localnetserverからremoteserverへsshで接続できるが、逆は不可能である。

以下のようにremoteserverで設定した上で、localnetserverで操作すれば、rootユーザーとしてtarballを作って手元にパイプ経由で取得できる。 以前はssh portforwardingを使って複雑な操作をしていたのだが、そのようなことは不要にできる。

まず、sshでログインできるryoonユーザーのログインパスワードを返すシェルスクリプトを用意しておく。 これはryoonユーザーだけが内容を見ることができ、実行もできるべきである。
remoteserver$ cat /home/ryoon/sudo-askpass
#!/bin/sh

echo "sudoコマンドへ渡すryoonユーザーのログインパスワード"

remoteserver$ chmod 700 /home/ryoon/sudo-askpass

このsudo-askpassコマンドを使って、sudoコマンドにryoonユーザーのログインパスワードを渡すようにして(つまりsudoコマンドに-Aオプションを与えて)、tarコマンドを実行させる。 また、remoteserverにはUTF-8なファイル名を持つファイルがあり、BSD tarコマンドはこれに対して警告メッセージを表示する。 これがlocalnetserverにパイプ経由で送られて来るtarballに含まれていると不正なtarballになってしまうので、標準エラー出力は/dev/nullに捨てる。

/path/to/parent/directoryというディレクトリー内にあるbackuptargetdirectoryというディレクトリーをバックアップするとすれば、以下のようにlocalnetserverで実行すれば良い。

localnetserver$ ssh ryoon@remoteserver "SUDO_ASKPASS=/home/ryoon/sudo-askpass sudo -A tar cfp - -C /path/to/parent/directory backuptargetdirectory" > backup.tar

私はremoteserverもlocalnetserverも非力なマシンを利用していて、転送量へは課金されない環境なので、圧縮せずtarアーカイブのまま扱っている。 CPUもストレージもパワフルなマシンに移動させた後にxz -T 0 -9で圧縮することになる。

第11世代のIntel Core i7-1180G7というCPUを搭載したPC上のWindows 11で、Intel QSVを使ってFFmpeg 8.1.1でH.264からH.265にトランスコードする

NetBSD-currentでは、IntelのIntegrated GPUはKabyLake Refreshの世代までしかサポートされていないはずである。 もちろん、KabyLake Refresh以前の世代でもFFmpegでH.265にエンコードできる。 だが、思ったより速く処理できない。 NetBSD上だと、VA-API経由なのがいけないのかもしれないし、他の要因なのかもしれない。 Fedora Linuxでも変わったようには見えなかったので、そもそも思ったより速く処理はできるのかもしれない。

と言うことで、手元にある最新のIntel CPUで試してみることにした。 だが、そのCPUを搭載したマシンは他の仕事もあるので、Windows 11 Pro 25H2がインストールされている。 この環境のままで、FFmpegでH.264のビデオファイルをH.265にトランスコードすることにした。

具体的には、CODEX FFMPEGからFFmpeg 8.1.1 (ffmpeg-8.1.1-full_build.7z)をダウンロードして展開し、 以下のようなコマンドでトランスコードすれば良い。 どうやら、-sharedの方の配布物ではちゃんと動かないようだった。

/path/to/ffmpeg-8.1.1/bin/ffmpeg.exe \
      -hwaccel qsv \
      -hwaccel_output_format qsv \
      -i input.mp4 \
      -c:a copy \
      -c:v hevc_qsv \
      -tag:v hvc1 \
      -preset veryfast \
      -vf vpp_qsv=deinterlace=2 \
      -global_quality 30 \
      output.mp4

H.264形式のファイルであるinput.mp4は、インターレースなファイルなのだが、そうであっては不便なので、 -vf vpp_qsv=deinterlace=2を指定して、Intel QSVのデインターレースフィルターを使って解消している。

ちなみに、これだと実時間の5から7倍の速度でトランスコードできる。 また、ディスプレイがオフになると、場合によってはエラーが発生する。 ディスプレイを常時オンにする設定をしておけば、エラーは発生しない。

Firefoxで、ユーザー認証付きHTTPプロキシーサーバーへ自動的にログインする

about:configで、signon.autologin.proxy=trueと設定すると、ユーザー認証付きHTTPプロキシーサーバーへのログイン情報を保存している場合に、自動的にHTTPプロキシーサーバーにログインするようにできる。 つまり、ユーザーIDとパスワードを入力する画面(ログイン情報を保存しているので、いずれも入力済み)が表示され、ログインを明示的にする必要がなくなる。

DigitalOceanのSpaces Object Storageに、ソフトウェアをインストールせずにWindowsからアクセスする

はじめに

DigitalOceanのオブジェクトストレージであるSpacesにWindows 11からアクセスしたい。 だが、そのためのソフトウェアを、インストーラーでWindows 11にインストールのは避けたい。 単にアーカイブファイルを展開しただけで使いたい。 かつ、そのWindows 11マシンはユーザー認証付きHTTPプロキシーサーバーを経由しないとDigitalOceanにはアクセスできない。

このような条件で使えるものを探すと、Rcloneが条件を満足するものだった。

まず、Downloadページから、Intel/AMD - 64 BitのWINDOWS用のバイナリーをダウンロードする。 現在のバージョンは、1.74.3なので、rclone-v1.74.3-windows-amd64.zipをダウンロードすれば良い。 これの中にはrclone-v1.74.3-windows-amd64というサブディレクトリーがあるので、それを適当な場所に配置してPATH環境変数に設定しておく。

設定ファイルを作る

Rcloneにはインタラクティブに設定ファイルを生成する仕組みがあるが面倒である C:\Users\(ユーザーID)\AppData\Roaming\rcloneディレクトリーにあるrclone.confに以下のように記載すれば良い。 シンガポールリージョンを使うので、以下ように設定した。

[sg]
type = s3
provider = DigitalOcean
access_key_id = XXXXXXXXXXXXXXXXXXXX
secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
region = sgp1
endpoint = sgp1.digitaloceanspaces.com
acl = private

ここで、DigitalOcean SpacesのコンソールでBucketのAccess Keysを生成した際に表示される「Access Key ID」の値をaccess_key_idに設定し、secret keyの値をsecret_access_keyに設定する。 endpointには、Bucketの「Origin Endpoint」がhttps://BUCKETNAME.sgp1.digitaloceanspaces.comであれば、sgp1.digitaloceanspaces.comを設定する。 同様にregionはsgp1を設定する。

ユーザー認証付きHTTPプロキシーサーバーの情報を設定する

rcloneは、https://のURIへのアクセスには、HTTP_PROXY環境変数が使われないようである。 HTTPS_PROXY環境変数を定義しておく必要がある。 以下のように定義しておく。

HTTPS_PROXY=http://(ユーザーID):(パスワード)@10.11.12.13:8080

rcloneを使ってみる

ファイルをアップロードするには、以下のように実行すれば良い。

> rclone copy FILETOUPLOAD.txt sg:BUCKETNAME

Bucketにあるファイルを一覧する。

> rclone lsl sg:BUCKETNAME
       71 2026-06-25 13:44:06.694000000 FILETOUPLOAD.txt
  3255961 2026-06-05 15:23:56.000000000 rclone.1

ファイルをダウンロードする。

> rclone copy sg:BUCKETNAME/FILETOUPLOAD.txt .

Mosquittoに、Python Paho MQTT libraryを使ってアクセスする

あらかじめ起動しておいたMosquittoにPython Paho MQTT library (pkgsrc/net/py-paho-mqtt 2.1.0)を使って、Mosquittoの受信したデータを、InfluxDB 1 (pkgsrc/databases/influxdb)に保存する。 なぜInfluxDBに保存するのかと言うと、最終的にMosquittoで受信したデータをGrafana (pkgsrc/www/grafana)で表示するためである。

乱数をMosquittoに送信し、それを購読して、InfluxDBに保存する。

#!/usr/pkg/bin/python3.14

#
# Subscribe mosquitto MQTT server and store data into InfluxDB 1
#

import time
import random
import ssl

from paho.mqtt.enums import MQTTProtocolVersion
import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient

# Connection information for InfluxDB 1.x
INFLUXDB_HOSTNAME = 'localhost'
INFLUXDB_PORT = 8086
INFLUXDB_DATABASE = 'mqtt001'
INFLUXDB_USERID = 'admin'
INFLUXDB_PASSWORD = 'ADMIN_PASSWORD'

# Connection information of MQTT
MQTT_BROKER = 'MYHOSTNAME'
MQTT_PORT = 8883
MQTT_TOPIC = 'topic/0001'

# Instantiate InfluxDB
influx_client = InfluxDBClient (
    host=INFLUXDB_HOSTNAME,
    port=INFLUXDB_PORT,
    username=INFLUXDB_USERID,
    password=INFLUXDB_PASSWORD,
    database=INFLUXDB_DATABASE
)

# Create database at first at once
influx_client.create_database(INFLUXDB_DATABASE)

# Callback function for MQTT subscription
def on_message (client, userdata, message):
    payload = message.payload.decode('utf-8')
    timestamp = int(time.time() * 1000000000) # in ns
    # debug print
    print (f'Received: {payload}')

    json_body = [
        {
            "measurement": "sensor_data",
            "tags": {
                "device": "dev001_reg700"
            },
            "fields": {
                "value": float(payload)
            },
            "time": timestamp
         }
    ]

    # Write data to InfluxDB
    influx_client.write_points(json_body)

# Create MQTT client
mqtt_client = mqtt.Client(
    callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
    protocol=MQTTProtocolVersion.MQTTv5
)

# Assign callback function on receiving
mqtt_client.on_message = on_message

# Setup TLS connection
tls_context = ssl.create_default_context()
tls_context.verify_mode = ssl.CERT_REQUIRED
mqtt_client.tls_set_context(tls_context)

# Use user ID and password auth
PUBSUB_ID = 'user001'
PUBSUB_PW = 'password001'
mqtt_client.username_pw_set(
    username=PUBSUB_ID,
    password=PUBSUB_PW
)

# Connect to broker
mqtt_client.connect(
    host=MQTT_BROKER,
    port=MQTT_PORT, 
    keepalive=60
)


# Start to subscribe
mqtt_client.subscribe(topic=MQTT_TOPIC)
## debug print
print (f'Subscribe topic: {MQTT_TOPIC}')

# main loop in another thread
mqtt_client.loop_start()


# Testing publishing
while True:
    value = round(random.uniform(10, 30), 2)
    mqtt_client.publish(MQTT_TOPIC, str(value))
    print(f'Published: {value}')
    time.sleep(1)

Mosquittoを安全に利用する

はじめに

pkgsrc/net/mosquitto-2.1.2nb1を使う機会があったのだが、なるべく安全な方法で利用したいと思っていた。 TLS証明書を利用して暗号化された経路で通信し、接続にはユーザーIDとパスワードによるユーザー認証を利用し、ユーザー毎にアクセス制限を設定したい。 また、受信した情報はファイルに保存しておきたい。

設定は/usr/pkg/etc/mosquitto.confに書けば良い。

TLS証明書を利用する

Let's Encryptで取得したTLS証明書が使える。 以下のように設定すれば良い。 これは、pkgsrc/security/acmeshを使って取得したものだが、どのような方法で取得しても良い。

certfile /var/db/mosquitto/.acme.sh/MYHOSTNAME.net_ecc/fullchain.cer
keyfile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/app4.ryoon.net.key
cafile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/ca.cer

接続にユーザーIDとパスワードによるユーザー認証を利用する

ユーザー毎にアクセス制限を設定するためにも、ユーザーIDとパスワードによりユーザー認証をした上で接続する必要がある。 これは、以下のように設定すれば良い。

password_file /var/db/mosquitto/mosquitto.passwd

この中身は、mosquitto_passwd(1)で生成すれば良い。 以下のようにユーザーIDとパスワードをmosquitto.passwdとして用意しておき、mosquitto_passwdコマンドでパスワードをハッシュ化したファイルに変換すれば良い。 ハッシュアルゴリズムも選択できるようだ。

$ cat mosquitto.passwd
user001:password001
user002:password002
$ mosquitto_passwd -U mosquitto.passwd
$ cat mosquitto.passwd
user001:$7$1000$qmp3mSmMucnEwhH3vLWRLquFBPYVQFdALWJwvihS7UI6d2cTKSma77hbTeYFSoJ+M/WTowwzUg7klW+7ClbNng==$YxIm/PFeBoiCN9xBvV9XR1XWK6VqIJrwE432iX7b5ygnoyKKMRSHf9rk/9Lw02Gp9FWfhwnPU8ugzPJUIDzImA==
user002:$7$1000$x8FPjLROciMpi7q7OIkV+cdzEf+Eo02kGMuPaWALcoS9Vt7G9J/um376TaGuSDOj76HSvL8HIla8HHQx7DkJGQ==$3V1pN+4ApuSBPtnyzxfSWSnUb01Q0EjQ6LmkAQb+VetHuxCkcJkzEhQyG2Y6F7MWgG1DqfyrJIWCF7pYqHuquQ==

ユーザー毎にアクセス制限を設定する

まず、アクセス制限の内容を読み込むように/usr/pkg/etc/mosquitto.confに以下のように設定する。

acl_file /var/db/mosquitto/mosquitto.acl

その上で、/var/db/mosquitto/mosquitto.aclを以下のように設定する。 user001は全てのトピックに読み書きでき、user002は全てのトピックに書き込みだけできるようにする。 データと投入するクライアントはuser002でアクセスして来ることを想定し、user001で接続することを想定している。 user001は書き込みはできなくても良いのだが。

$ cat /var/db/mosquitto/mosquitto.acl
user user001
topic readwrite #

user user002
topic write #

受信したデータをファイルに保存する

/var/db/mosquitto/mosquitto.dbに保存するように設定する。

autosave_interval 60
autosave_on_changes true
persistence true
persistence_file mosquitto.db
persistence_location /var/db/mosquitto

その他

他にも設定してある内容は以下のようだ。

# mosquitto daemonを動かすユーザー
user mosquitto
# 待ち受けるポート
istener 8883
# ログとしてsyslogに出力するレベル
log_type debug

NetBSDでPostgreSQLサーバーを動かす

NetBSDでPostgreSQLサーバーを動かすのだが、受け付ける接続数を多くしたい。 具体的には/usr/pkg/pgsql/data/postgresql.confでmax_connectionsに100を設定したい。

そうするには、kern.ipc.semmniとkern.ipc.semmnsの数を増加させる必要があるようだ。

# vi /etc/sysctl.conf
kern.ipc.semmni=100
kern.ipc.semmns=512

この位に増やせば、以下のように設定できるようだ。

# vi /usr/pkg/pgsql/data/postgresql.conf
max_connections = 100

man pageによると、以下のように説明されている。

$ man 7 sysctl
kern.ipc.semmni
        Max number of number of semaphore identifiers.

kern.ipc.semmns
        Max number of number of semaphores in system.

Microsoftのoutlook.comで作ることのできる電子メールアドレスのドメイン

hotmail.comにアカウントを作ったのはFreeBSDベースのサーバーが使われていると聞いた頃だったような気がする。既にMicrosoftのサービスになっていたような気がするが、まだ20世紀だった気もする。 ローカルパートが4文字で電子メールアドレスを取得できたので、それなりに早い時期に作ったのだろう。 それから、live.comやlive.jp、msn.comといったドメインで電子メールアドレスが作れるようになり、hotmail.co.jpというドメインでも作れるようになった気がする。

今は、hotmail.comに加えて、outlook.comとoutlook.jpというドメインが利用できるようになっている。 だが、それはウェブブラウザーのHTTPのAccespt-Languageヘッダーによることは分かっていた。 Firefoxの各言語設定で、どういうドメインで電子メールアドレスを作れるのか調べてみた。 どれも日本のIPアドレスから調べているので、純粋にAccespt-Languageヘッダーの最初の言語による違いを表にしている。

ちゃんと取得完了できるかというのは、言語をfrに設定して、outlook.frドメインの電子メールアドレスを取得できたので、他もできそうに思う。

言語 ドメイン
en-us outlook.com hotmail.com
en outlook.com hotmail.com
ja outlook.jp outlook.com hotmail.com
ab outlook.com hotmail.com
ach outlook.com hotmail.com
aa outlook.com hotmail.com
af outlook.com hotmail.com
ak outlook.com hotmail.com
tw outlook.com hotmail.com
sq outlook.com hotmail.com
am outlook.com hotmail.com
ar-dz outlook.sa outlook.com hotmail.com
ar-bh outlook.sa outlook.com hotmail.com
ar-eg outlook.sa outlook.com hotmail.com
ar-iq outlook.sa outlook.com hotmail.com
ar-jo outlook.sa outlook.com hotmail.com
ar-kw outlook.sa outlook.com hotmail.com
ar-lb outlook.sa outlook.com hotmail.com
ar-ly outlook.sa outlook.com hotmail.com
ar-ma outlook.sa outlook.com hotmail.com
ar-om outlook.sa outlook.com hotmail.com
ar-qa outlook.sa outlook.com hotmail.com
ar-sa outlook.sa outlook.com hotmail.com
ar-sy outlook.sa outlook.com hotmail.com
ar-tn outlook.sa outlook.com hotmail.com
ar-ae outlook.sa outlook.com hotmail.com
ar-ye outlook.sa outlook.com hotmail.com
ar outlook.sa outlook.com hotmail.com
an outlook.com hotmail.com
hy outlook.com hotmail.com
as outlook.com hotmail.com
ast outlook.com hotmail.com
av outlook.com hotmail.com
ae outlook.com hotmail.com
ay outlook.com hotmail.com
az outlook.com hotmail.com
bm outlook.com hotmail.com
ba outlook.com hotmail.com
eu outlook.es outlook.com hotmail.com
be outlook.com hotmail.com
bn outlook.com hotmail.com
bi outlook.com hotmail.com
bs outlook.com hotmail.com
br outlook.com hotmail.com
bg outlook.com hotmail.com
my outlook.com hotmail.com
ca-valencia outlook.com hotmail.com
ca outlook.es outlook.com hotmail.com
ch outlook.com hotmail.com
ce outlook.com hotmail.com
ny outlook.com hotmail.com
zh-cn outlook.com hotmail.com
zh-hk outlook.com hotmail.com
zh-sg outlook.com hotmail.com
zh-tw outlook.com hotmail.com
zh outlook.com hotmail.com
cu outlook.com hotmail.com
cv outlook.com hotmail.com
kw outlook.com hotmail.com
co outlook.com hotmail.com
cr outlook.com hotmail.com
crh outlook.com hotmail.com
hr outlook.com hotmail.com
cs outlook.cz outlook.com hotmail.com
da outlook.dk outlook.com hotmail.com
dv outlook.com hotmail.com
nl-be outlook.be outlook.com hotmail.com
nl outlook.com hotmail.com
dz outlook.com hotmail.com
en-au outlook.com outlook.com.au hotmail.com
en-bz outlook.com hotmail.com
en-ca outlook.com hotmail.com
en-ie outlook.ie outlook.com hotmail.com
en-jm outlook.com hotmail.com
en-nz outlook.co.nz outlook.com hotmail.com
en-ph outlook.ph outlook.com hotmail.com
en-za outlook.com hotmail.com
en-tt outlook.com hotmail.com
en-gb outlook.com hotmail.com
en-zw outlook.com hotmail.com
eo outlook.com hotmail.com
et outlook.com hotmail.com
ee outlook.com hotmail.com
fo outlook.com hotmail.com
fj outlook.com hotmail.com
tl outlook.com hotmail.com
fi outlook.com hotmail.com
fr-be outlook.be outlook.com hotmail.com
fr-ca outlook.com hotmail.com
fr-fr outlook.fr outlook.com hotmail.com
fr-lu outlook.com hotmail.com
fr-mc outlook.fr outlook.com hotmail.com
fr-ch outlook.com hotmail.com
fr outlook.fr outlook.com hotmail.com
fy outlook.com hotmail.com
fur outlook.com hotmail.com
ff outlook.com hotmail.com
gl outlook.com hotmail.com
lg outlook.com hotmail.com
ka outlook.com hotmail.com
de-at outlook.com outlook.at hotmail.com
de-de outlook.de outlook.com hotmail.com
de-li outlook.de outlook.com hotmail.com
de-lu outlook.de outlook.com hotmail.com
de-ch outlook.com hotmail.com
de outlook.de outlook.com hotmail.com
el outlook.com.gr outlook.com hotmail.com
kl outlook.com hotmail.com
gn outlook.com hotmail.com
gu outlook.com outlook.in hotmail.com
ht outlook.com hotmail.com
ha outlook.com hotmail.com
haw outlook.com hotmail.com
he outlook.co.il outlook.com hotmail.com
hz outlook.com hotmail.com
hil outlook.com hotmail.com
hi outlook.com outlook.in hotmail.com
ho outlook.com hotmail.com
hu outlook.hu outlook.com hotmail.com
is outlook.com hotmail.com
io outlook.com hotmail.com
ig outlook.com hotmail.com
id outlook.co.id outlook.com hotmail.com
ia outlook.com hotmail.com
ie outlook.com hotmail.com
iu outlook.com hotmail.com
ik outlook.com hotmail.com
ga outlook.com hotmail.com
it-ch outlook.it outlook.com hotmail.com
it outlook.it outlook.com hotmail.com
jv outlook.com hotmail.com
kab outlook.com hotmail.com
kn outlook.com outlook.in hotmail.com
kr outlook.com hotmail.com
cak outlook.com hotmail.com
ks outlook.com hotmail.com
csb outlook.com hotmail.com
kk outlook.com hotmail.com
km outlook.com hotmail.com
ki outlook.com hotmail.com
rw outlook.com hotmail.com
ky outlook.com hotmail.com
rn outlook.com hotmail.com
tlh outlook.com hotmail.com
kv outlook.com hotmail.com
kg outlook.com hotmail.com
kok outlook.com hotmail.com
ko-kp outlook.com hotmail.com
ko-kr outlook.kr outlook.com hotmail.com
ko outlook.kr outlook.com hotmail.com
ku outlook.com hotmail.com
lo outlook.com hotmail.com
ltg outlook.com hotmail.com
la outlook.com hotmail.com
lv outlook.lv outlook.com hotmail.com
lij outlook.com hotmail.com
li outlook.com hotmail.com
ln outlook.com hotmail.com
lt outlook.com hotmail.com
dsb outlook.com hotmail.com
lu outlook.com hotmail.com
lb outlook.com hotmail.com
mk-mk outlook.com hotmail.com
mk outlook.com hotmail.com
mai outlook.com hotmail.com
mg outlook.com hotmail.com
ms outlook.my outlook.com hotmail.com
ml outlook.com outlook.in hotmail.com
mt outlook.com hotmail.com
gv outlook.com hotmail.com
mi outlook.com hotmail.com
mr outlook.com outlook.in hotmail.com
mh outlook.com hotmail.com
zam outlook.com hotmail.com
mix outlook.com hotmail.com
mn outlook.com hotmail.com
na outlook.com hotmail.com
nv outlook.com hotmail.com
nd outlook.com hotmail.com
nr outlook.com hotmail.com
ng outlook.com hotmail.com
ne outlook.com hotmail.com
no outlook.com hotmail.com
nb outlook.com hotmail.com
nn outlook.com hotmail.com
oc outlook.com hotmail.com
or outlook.com hotmail.com
oj outlook.com hotmail.com
om outlook.com hotmail.com
os outlook.com hotmail.com
pi outlook.com hotmail.com
ps outlook.com hotmail.com
fa-ir outlook.com hotmail.com
fa outlook.com hotmail.com
pl outlook.com hotmail.com
pt-br outlook.com outlook.com.br hotmail.com
pt-pt outlook.pt outlook.com hotmail.com
pt outlook.pt outlook.com hotmail.com
pa-in outlook.com outlook.in hotmail.com
pa-pk outlook.com hotmail.com
pa outlook.com hotmail.com
qu outlook.com hotmail.com
rm outlook.com hotmail.com
ro-md outlook.com hotmail.com
ro-ro outlook.com hotmail.com
ro outlook.com hotmail.com
ru-md outlook.com hotmail.com
ru outlook.com hotmail.com
sm outlook.com hotmail.com
sg outlook.com hotmail.com
sa outlook.com hotmail.com
sat outlook.com hotmail.com
skr outlook.com hotmail.com
sc outlook.com hotmail.com
sco outlook.com hotmail.com
gd outlook.com hotmail.com
sr outlook.com hotmail.com
ii outlook.com hotmail.com
szl outlook.com hotmail.com
sd outlook.com hotmail.com
si outlook.com hotmail.com
ss outlook.com hotmail.com
sk outlook.sk outlook.com hotmail.com
sl outlook.com hotmail.com
so outlook.com hotmail.com
son-ml outlook.com hotmail.com
son outlook.com hotmail.com
nso outlook.com hotmail.com
st outlook.com hotmail.com
meh outlook.com hotmail.com
es-ar outlook.com.ar outlook.com hotmail.com
es-bo outlook.com hotmail.com
es-cl outlook.cl outlook.com hotmail.com
es-co outlook.com hotmail.com
es-cr outlook.com hotmail.com
es-do outlook.com hotmail.com
es-ec outlook.com hotmail.com
es-sv outlook.com hotmail.com
es-gt outlook.com hotmail.com
es-hn outlook.com hotmail.com
es-mx outlook.com hotmail.com
es-ni outlook.com hotmail.com
es-pa outlook.com hotmail.com
es-py outlook.com hotmail.com
es-pe outlook.com hotmail.com
es-pr outlook.com hotmail.com
es-es outlook.es outlook.com hotmail.com
es-uy outlook.com hotmail.com
es-ve outlook.com hotmail.com
es outlook.es outlook.com hotmail.com
su outlook.com hotmail.com
sw outlook.com hotmail.com
sv-fi outlook.com hotmail.com
sv-se outlook.com hotmail.com
sv outlook.com hotmail.com
ty outlook.com hotmail.com
tg outlook.com hotmail.com
ta outlook.com outlook.in hotmail.com
tt outlook.com hotmail.com
te outlook.com outlook.in hotmail.com
th outlook.co.th outlook.com hotmail.com
bo outlook.com hotmail.com
tig outlook.com hotmail.com
ti outlook.com hotmail.com
to outlook.com hotmail.com
trs outlook.com hotmail.com
ts outlook.com hotmail.com
tn outlook.com hotmail.com
tr outlook.com outlook.com.tr hotmail.com
tk outlook.com hotmail.com
ug outlook.com hotmail.com
uk outlook.com hotmail.com
hsb outlook.com hotmail.com
ur outlook.com hotmail.com
uz outlook.com hotmail.com
ve outlook.com hotmail.com
vi outlook.com.vn outlook.com hotmail.com
vo outlook.com hotmail.com
wa outlook.com hotmail.com
cy outlook.com hotmail.com
wo outlook.com hotmail.com
xh outlook.com hotmail.com
yi outlook.com hotmail.com
yo outlook.com hotmail.com
za outlook.com hotmail.com
zu outlook.com hotmail.com

mu4eを日本語の電子メールに対して使ってみる

以前、mu4eを使おうとしたことがあるのだが、日本語の電子メールを検索できないだけでなく、正常に表示もできなかったので、あきらめてしまっていた。 結局、Notmuchで試したら何も問題なく動いたので、Notmuchを使い始めて、今に至っている。

いつの間にか、mu4eもpkgsrc/mail/muとしてpkgsrcにも収録されるようになっているので、mu-1.14.1nb1を使ってみた。

いろいろ試してみると、以下のようにすれば日本語の電子メールも正しく扱えるようにデータベースを構築できた。 --support-ngrams trueを追加しておけば、XAPIAN_CJK_NGRAM環境変数を定義しておく必要はないようだ。

$ mu init --maildir ~/.maildir --personal-address my-first@example.com --personal-address my-second@example.org --personal-address my-third@example.jp --personal-address my-fourth@example.net --support-ngrams true
$ mu index

Emacsの設定は、特に特別なものである必要はないようだった。 ただ、私にはmu4eのキーバインディングは合わないので、やはりNotmuchを使うことにした。

OpenPGPの鍵を公開する

はじめに GnuPGを使っているが、積極的に電子メールに署名も暗号化もしていないので、あまり役立てているとは言えないかもしれない。 利用しない理由は、PGPを使っている相手が少ないというものである気がするが、本当は特に署名したい内容も暗号化したい内容も書いていないから...