31-Mar-2024
[とりあえず]

20240331.png

仮想端末に対する入出力を行う際に文字コードを変換する、という手法でこんな感じに。なので表向きはUTF-8であっても内部ではEUC-JPで動いていますから…あとは説明しなくても分かりますよね?

とりあえずsj3については一旦ここで置いて、他の作業へ移らないと…経過措置が終わったので直さないといけないものもありますし。57.2kg(15:05)

24-Mar-2024
[一ヶ月ほど]

他のことを色々とやっていた関係でsj3の作業、何やってたか忘れました。前回は18-Feb-2024ですか…

sjgetchar.cのwrite_stdout()は一体何なのかと結構悩んでいたのですが、意図としてはマルチバイト文字を(1文字を構成するオクテットを途中で区切ること無く)文字単位で標準出力へ送ろうとしている…のではないかと考えています。とはいえ、

という疑問がありまして。SJ_read()の方はまだ分かるんですけどね。

そんな感じで、またゆるゆるとやっていこうと思います。56.3kg(22:35)

17-Mar-2024
[OpenBSDでmrefd(M17リフレクタ)を立ち上げる(4)]

mrefdのSIGHUP対策、SIGHUPのハンドラを潰すのは流石に(コードの有り様を考えると)応急処置にしかならないので根本的な対策を講じてみました。daemon(3)を使ってデーモン化します(セッションリーダーであることを捨てればSIGHUPを回避できるのでは、という考えです)。今はfork()やsetsid()を使わなくてもdaemon()一発でデーモン化できるというのが素晴らしいですね…なんてことを書くと、今時の若い者はfork()すら知らんのかとお叱りを受けるのかも。

OpenDHTの-fvisibility=hiddenに関する問題も解決しました。configureにCPPFLAGS+=" -Dopendht_EXPORTS"といった記述があるのですが、+=演算子はbash拡張であるためにshだとCPPFLAGSの設定ができなくなります(Linuxの場合、/bin/shの実体はshではなくbashになるので問題なく動いてしまいます)。これはconfigureの元となるconfigure.acを適切に直すことで対応します。

これでどうにかDHT対応版のmrefdが動くようになりました。DHTによってDVRefのリフレクタ情報がどう変化するかを見ていきたいと思います。56.0kg(23:15)

16-Mar-2024
[OpenBSDでmrefd(M17リフレクタ)を立ち上げる(3)]

Dashboardをgomrefdashにするのはそんなに難しくなくて、Goのパッケージを入れてREADME.mdの指示に従えば問題ないです。せいぜい使用するポート番号を決めることくらいですかね、デフォルトの3000はリバースプロキシ越しに使うものという気がしていますし(例えばMisskeyのように)。ここでは既に80をApache httpdが使っているので、http-altの候補(591, 8000, 8008, 8080)から適当に選ぶことにしました。

あとはOpenBSDで使う場合限定かもしれませんが、Goのパッケージは/usr/local/goへインストールされるので、cd /usr/local; git clone https://github.com/kc1awv/gomrefdashとしてはいけません(gomrefdashのmake時に、gomrefdashが必要とするモジュールを/usr/local/goへ入れようとして面倒なことになります)。mkdir /usr/local/gomrefdash; cd /usr/local/gomrefdash; git clone(以下省略)のようにディレクトリを掘る必要があります。

rc.localに起動用のスクリプトを仕込んで起動させても何故かその後に黙ってプロセス(mrefd)がいなくなっていることについては、色々調べてみた結果rc.local越しに起動するとmrefdがSIGHUPを受け取ってしまい、これで終了してしまうということが分かっています。nohup(1)を付けて起動しても効果は無く、今のところmain.cppをいじってSIGHUPのハンドラを潰しておく以外の対策は無さそうな感じですが…誰がこのシグナルを投げてくるのでしょうか?(確認用のコードを作って試した結果、OpenBSDだけでなくNetBSD/FreeBSD/DragonFlyBSD全てでこのような現象が起こります)

それにしても、FreeBSD/DragonFlyBSDの/etc/rc.localとsyslogについては一癖ありますね。/etc/rc.confにlocal_enable="YES"を追加しないと/etc/rc.localを実行してくれませんし、/etc/syslog.confの*.* /var/log/all.logのコメントアウトを外さないと全てのログは見えない(デフォルトは必要となるものだけを、分類して各ファイルへ書き出す)ようになっています。Void Linuxに至ってはsyslogを持たないという世界だったりするので、どうしたものでしょうか…

ports化したOpenDHTの問題も分かっていて、-fvisibility=hiddenを指定していると__attribute__ ((visibility ("default")))を使ってもhidden扱いになってしまうというものなのですが…同じclang-16でもLinux上ではこういった問題がなく、どうすれば解決できるのか頭を抱えているところです。57.2kg(23:00)

07-Apr-2024補足:gomrefdash、ビルドにはGNU makeが必要です。BSD makeでも問題なさそうに見えますが、go build -o ../../../gomrefdash -ldflags "-X main.dver=-"のようになってしまい、正しくバージョン番号が表示されないオブジェクトができてしまいます。

10-Mar-2024
[OpenBSDでmrefd(M17リフレクタ)を立ち上げる(2)]

mrefdをv0.3.6→v0.11.3に上げたいと04-Feb-2024に書いていますが、流石に15-May-2022の頃とは状況が変わっています。Only systemd-based operating systems are supported. Debian or Ubuntu is recommended. If you want to install this on a non-systemd based OS, you are on your own.(systemdベースのOSのみ対応…DebianかUbuntu推奨、systemd使ってないOSについては知らんがな)という状況は変わらないようですが。

まずは各種ファイルの格納先を知るために、Makefileを見てみます。インストール先のディレクトリはmrefd.mk(example.mk)のデフォルトのままとすると、

mrefd.cfgが増えて、以前あった/var/lib/m17refはなくなったようです。mrefdの実行中に生成/参照するファイルの設定はmrefd.cfg(example.cfg)で行うため、こちらも確認しておきます。ざっと抜き出すとこうなりますかね?

DHT関連のデータを保存するファイルが増えている以外は変わらない(配置する場所も以前と同じ)ようです。これならそんなに手間をかけずにバージョンアップできるかも…と思っていたのですが、甘かったです。

OpenDHTをこのためにports化していたのですがなぜかリンクができず(OpenDHT付属のtoolsも同様の問題を抱えているので多分OpenDHT自体の生成に問題があったのかも)、またstd::regex()の文法に関する問題が再発していたりNO_DHT指定時にコンパイルエラーが起こるなど、なかなかすんなりいきません。

mrefdのビルド手順、基本的にはREADME.mdにある通りではありますが以下の部分はいじっています。

mrefd.cfg、DHT未使用時はIPv4ExtAddr, IPv6ExtAddr, DashboardURL, EmailAddr, Bootstrap, DHTSavePath, Country, Sponsorをコメントアウトせよと書いてあります。しかしconfigure.cppを見るにDHT禁止時は無視されるようで、コメントアウトは不要と思われます(起動時に「そんな設定項目なぞ知らぬ」と警告が出るので、それを避けるためのコメントアウトなのでしょう)。

で、とりあえずmrefdが動くようになってはいるのですが二つ問題がありまして。一つはrc.localに起動用のスクリプトを仕込んで起動させても何故かその後に黙ってプロセス(mrefd)がいなくなっていること、もう一つは/var/log/mrefd.xmlの書式が変わったのでdashboardをgomrefdashへ変えないといけないこと。面倒ですが当面はmrefd, gomrefdashの起動を手動で行うことで対処します。

gomrefdashについては、後日。55.7kg(22:00)

03-Mar-2024
[うーん…]

OpenBSDをOrange Pi One Plus(Allwinner H6)上で動かした際に、29-Nov-2021とか14-May-2023等で記したEthernet PHYの動作がイマイチ(再起動後に見失う)という問題をずっと追っていたのですが、そろそろ決着が付くといいかなーという感じです。Armbianがどういうカラクリで回避しているのかは分かりませんが(以前のArmbianだとATF v2.2を使っていたものの、今はATF v2.9かつデフォルトのSUNXI_SETUP_REGULATORS=1でビルドしているようで…何故これでまともに動くのか分からないんですよね、パッチがあったとしても)、Linux Kernel Mailing ListではドライバとDevice Treeの修正で解決しようとしているようです。PHYの電源投入シーケンスを細かく指示する必要があるのと、GPIO PD14によるリセット信号の操作のために。

この問題、Orange Pi One Plusの他にはOrange Pi 3(LTS)しか起こらないと聞いています(LCPI H6は外付けPHYを持たないのでこの問題は起こりませんが、100BASE-TXまでの対応となります)。むしろ今となってはAllwinner H6よりもH616/H618のボードの方が入手性が良いので、解決せよと声を上げ続けないと闇に葬られそうです。

OpenGD77、DM-1801(MK22)向けの新しい物がそろそろ出てくるかなーと思ってダウンロード用のディレクトリを覗いてみたらとっくの昔にR20231231が出てました。という訳で、ちゃっちゃとMCUXpresso抜きでビルドするためのパッチを作り直し。前回(R20230304)と比べると、

多言語化対応のためのデータを分離したようで多少は楽できるかなーと思ったものの、リンカスクリプトに手が入っているのを何とかする必要がありました。とはいえ、CODECとSPI周りは前回とほぼ同様…本当はここは直してほしいところではあるのですが、まあフォーラムでreject喰らった以上直す気無しということなのでしょう(下手な修正が入るくらいなら、現状維持が続く方がパッチを作る側として楽ですし)。

stty eraseは^Hなのか^?なのかの件、デフォルト(stty erase ^?)で過ごしていますが特に変わったことはありません。「ここは確かBackSpaceじゃなくCtrl-H叩かないと駄目なんだっけー?」と判断してCtrl-Hを叩いてしまい、画面に^Hが表示されるというケースは多少ありますけど。

いくつかの問題が片付いたので、そろそろsj3のUTF-8対応の作業に戻れるといいなーと思っているものの…難しいかも。なにしろ、所属店舗の定休日(平日)が他店舗の応援で毎週潰れてしまい、全く何もできない状態になっています。どうしたもんでしょうかね。56.2kg(21:50)

02-Mar-2024
[待った甲斐がありました]

b-mobile S990に乗り換えてからもうすぐ6年。第一世代(2018年12月25日までのプラン、\990+\500/1GB+税)のままで使っていました。単に第二世代の、1GBまでは\990+税、そこから3GBまでは\1690+税という大きなギャップは使いづらく切り替える価値無しと判断したからなのですが。しかし第三世代では\990+\200/1GB+税となっており、どうにかしてこれに移行できたら…と思っていたら、やっと移行できることになりました。b-mobile S990ジャストフィットSIM Xへの自動アップグレードです。

お値段を考えるなら合理的シンプル290プランを選ぶ方が良いとは思います。MNP転出料が無料化されたので、(今使っているS990からだと)4〜5ヶ月で転入手数料分を取り戻せる計算になるようですが…でも乗り換えるなら、サブで入れているロケモバ神プラン(二度目)を切るのが先な気がします。うっかり通信量が1GB超えた際の保険+通信障害対策としての神プラン、S990 Xへ移行した状況では通信障害対策以上の意味を見出すのは難しいです。

慌てて切っても良い事は無いので、ゆっくり考えることにしましょう。56.7kg(21:25)