30-Oct-2022
[Core i7-7700機、運用開始]

実はマイナンバーに銀行口座と保険証を紐付けて得たポイント、i7-7700機を仕上げるために使おうと思っていて実際にそれで電源を買っています。あとはSSDを…と考えていた矢先に28-Oct-2022な事態が起こってしまったので、残っているポイントと多少の現金を使ってマザーとメモリを発注することにしました。

しかし、i7機をこのまま放っておく訳にもいきません。壊れたノートPC(ThinkPad Edge E535)からHDDを外すのは面倒なんだろうなあと思っていたのですが、案外簡単に外せることが分かったのでこれを使うことにしました。02-Jun-2022のrougeと同様に、老朽化したHDDを付けているのでいつ壊れるか心配という点があるのと、このマシンは子供が蹴りを入れてくるような場所にあるのでSSDにしないと重要なデータを置けないという困った問題を抱えてしまうのですが、仕方がありません。

とりあえずDebianを入れてネットワーク周りの設定を済ませるところまでは終わりました。QEMUのイメージを移行して動かすのは上記の理由によりSSD導入後にするとして、当面はgccのようなビルドに時間のかかるお仕事をこのマシンにやってもらうことにしましょう。57.2kg(22:20)

28-Oct-2022
[老朽化によるマシンの組み換えが]

必要そうなのですが、よりによってこのクソ忙しい時期にそれが必要となりますか…💢という状態です。お金もないというのに。

Windows用のabricot、OpenBSD用のframboiseどちらも近い時期に組み立てたということもあり、abricotにトラブルが起こっているということは近い将来にframboiseにもトラブルが起こることにもなるので早急に手を打つ必要があります。

AVX命令が使えなくなるという問題を抱えることにはなりますが、Pentium G4600が余っているのでこれに合うマザーボードが手に入るならこれで一台組むのが良さそうです。将来Windows11ないし12の動くマシンが手に入った時は、OpenBSD用に転用することもできますし。

Core i7-7700を載せたB250 MINING EXPERTを繋ぎにすることも考えたのですが、元々Linux/*BSDをQEMU上で動かしてあれこれやるためのホストとして使うつもりでいるのと、既に別のマシンでこの手の仮想環境を組んでいるとWindowsにメモリとコア数を渡す訳にはいかないなと思いまして。

ここしばらくは新しい世代の部品ではなく、わざわざ古い世代の部品を探して(補修するような感じで)マシンを組む状況が続いているのですが…たまにはお金を使ってイマドキの世代の部品でしっかり組むという行為をしてみたい、と本当に思うんですよね。円も安くなり部品の価格も上昇するこの状況では、贅沢な話になってしまうのですが。

そういう状況もあって、例のアレの開発がなかなか進みません。どうにかIPv6対応、Neighbor DiscoveryをAX.25向けにアレンジしたものを入れたのでIPv4+ARPと同じような感覚で使えるはずです。MTUを1280以上で送れるようなパケット通信の環境があれば、の話ですけど。

IPv6の場合はブロードキャストではなくマルチキャストを使うので、マルチキャスト対応を行ってしまうとmDNS関連のパケットを撒き散らすことになるので頭が痛いです。現時点では何もしていないので、IPアドレスを見てブロックするような仕掛けは必要なのではないか…と考えているところです。57.1kg(21:50)

20-Oct-2022
[オクトラおぼえがき]

しばらくメモしていなかったのでキャラクタの登場順とかちょっと怪しいんですけど、例によってまだ来ていない★5の一覧です。

なお、前回までは初期実装キャラ64人とそれ以外を区別するために斜体を使っていましたが、初期実装キャラは全て揃っているという理由により今回よりこれは改めます。闘技大会/期間限定/コラボ/Ex/追憶、辺りの種別に分けておいた方が良いのかもしれませんが、今回は期間限定を斜体、コラボに打ち消し線、追憶に下線を付けることにします。

★5
ニコラ(短剣), ドロテア(槍), リュミス(斧), ヴァルカン(本), アデル(短剣), イデア(剣), ガートルード(斧), プロメ(杖), オデット(本), ユーニィ(弓), リオナ(杖), イェンロン(杖), ウ・ルダイ(槍), ティティ(扇), ニーナラーナ(杖), ラルゴ(槍), クロエ(弓), ノーニャ(槍), A2(短剣), リシャール(剣), アラウネ(本), クラウザー(槍), タイタス(剣), ユークス(杖), ロンド(剣), ゼニア(斧), レヴィーナ(本), サリサ(短剣), リンユウ(杖), エデルガルト(剣), フレデリカ(本), ロラン(本), トレサEx(弓), プリムロゼEx(斧), レオン(槍), タトゥロック(扇)

フィオルEx(扇)とソフィアEx(斧)は持っていますが、同名キャラの別職業版という理由によりEx無しとは同時参戦できないのは仕方ないとして…完全に別キャラとして育成というのは非常にやりにくいものがあります。とはいえトレサExやプリムロゼExは前作をプレイしていた身としては結構ニヤリとする職業なので、今後誰がどんな職業のExとして出てくるかは気になるところです。

闘技大会の6人はどれも面倒なので手を出していませんし、期間限定キャラの引きも悪いです。期間限定は誰も居ないんですよね、と書こうとしたものの実はフィオルEx/ソフィアExは該当するらしいので二人はいるみたいです。

追憶は手を出さないことにしていた…のですが、三人の覇者のうち二人(ヘルミニア(弓)・アーギュスト(短剣))が居る時点で何言ってるんだというツッコミがあったので今後はあまり気にしないことにします。追憶キャラは性能高めになっていると聞いたことがありますが、確かにエルトリクス(剣)は覚醒無しでも同レベルの★5より頭一つ強い感じがしますね…

定常キャラで欲しいのは、小国クロムルード三人組(ユークス・サリサ・エデルガルト)、ウ・ルダイとノーニャ。しかし欲しいキャラに限ってなかなか出ないのは何故でしょうか。割と初期に追加されたニコラが未だに出ないというのも謎です。2周年記念祭の10連×6で出た★5はセシリー(槍)・トレサ(槍)・ソレイユ(斧)なので、手元のキャラがそれば揃うほど被る率が上がる…確実に欲しいキャラは実装当初かピックアップ時に課金するしかない感じになりつつあります。どこのガチャゲーもそんなものなのかもしれませんけど。

旅団のランクは45(富)/48(権力)/48(名声)、v2.8.0より実装された旅団力は412295ということで、これらがどの程度のものを示すかはよく分かりません。プレイ時間が477:09:30という時点で、大丈夫か?と聞かれそうなレベルで時間を使っていることは確かそうですが…56.0kg(06:50)

16-Oct-2022
[これだから斜陽な環境は…💢]

H8/300向けのgcc-11.3.0をconfigure --target=h8300-unknown-elf --enable-languages=c,c++ --prefix=/path/to/install --with-newlib --disable-nls --disable-libssp --disable-libgomp --disable-libstdcxx-pch --disable-libstdcxx-filesystem-ts --with-newlib --disable-wchar_tでビルドしようとして、上手くいかずに詰まっています

感触としては、C++を使う場合は-mint32を有効にし、ノーマルモードは一切使わないという方向で行くしかない(逆にノーマルモードを使う場合はC++を捨てる)という感じなのですが…gcc/config/h8300/t-h8300のMULTILIB_EXCEPTIONSを設定しようにも、MULTILIB_OPTIONSに書いていないコマンドを指定しない場合を除外という条件設定はできないようなのです。残されている手段は、強引に-mint32が指定されているものとして動くようにするくらい、でしょうか。((1 << 16)のような部分を全て((long)1 << 16)のように直し、これを使う変数の宣言をint→longに変えるという方法もありますが…正しい修正とはいえ変更箇所が多すぎます)

libstdc++のC++17向けライブラリでintが32bitであることを前提としているコードがいくつかあり、このビルドで引っかかっています。H8の場合は-mint32を指定した場合はintが32bit、デフォルトは16bitになるので両方に対応できないと困るのですけどね。

なお、(Changesにちゃんと書かれていないような気がするのですが)gcc-11.1.0以降においてはH8/300(H8/300L)へのサポートが廃止され、デフォルトでH8/300H向けのバイナリを作成するように変更されている点に注意してください。H8/3664をTRAP命令の使えるH8/300Lとして扱うような人は流石にもういないと思いますが、そういう場合はgcc-10までのコンパイラを動かせる環境をどうにかして維持するしかありません。

binutils-2.36.1, gcc-11.3.0, newlib-4.1.0の組み合わせで、gccをconfigure --target=h8300-unknown-elf --enable-languages=c --prefix=/path/to/install --with-newlib --disable-nls --disable-libssp --disable-libgomp --with-newlibとすれば、とりあえずCのコンパイラは生成できるようではあります。生成されるバイナリがちゃんとしていることが確認できれば、C言語のみの対応とはいえイマドキの環境でgccを構築できることを示せそうですが…どうやってバイナリの動作を確認したものでしょうか。56.4kg(21:00)

17-Oct-2022補足:こんな修正を施せば、とりあえずC++を有効にした状態のビルドは通るようです。

ノーマルモード対応を切ったのは「/tmp/cc6H2O7O.s:76945: Error: value of 68249 too large for field of 2 bytes at 2」といったアセンブラのエラーへの対処法が分からなかったという理由によるものですが、おそらくh8300-elfのgccを作ろうとしたらにある、DWARF2_ADDR_SIZE絡みの問題を踏んでしまうようです。

Arduino(ATmega328P)ではC++を使っているのでノーマルモード対応を切るのはちょっと納得できない部分もあるのですが…今使わない機能を動かせるようにするために費やせる時間が無い以上、これは他の方にお任せします。

15-Oct-2022
[ここで一区切り]

とりあえず、ここに。使い方についてもドキュメントにまとめたのでそちらを参照。ARPのトランスレータも入れたのでだいぶ使いやすくなっているはず。

05-Oct-2022Linux側のAX.25-TCP/IPの挙動を見るに、相手のコールサインが分からない状況では自局>自局となるものの、応答がありコールサインが分かるとそれ以降は自局>相手局になるようです。と書いていますが、ARPで相手のコールサインとIPアドレスとの紐付けが行えた場合は自局>相手局(ip neighで情報も取れるようになります)、そうでない場合は自局>自局でUIフレームを送信しています。

direwolfのtelnet-KISSポート(8001)に繋げて送信できることも確認しているものの、受信については未確認です。適当なUSBサウンドアダプタを用意してケーブルを繋げるか、あるいはsndioの機能を使って…aucat -f snd@<IP address>/0 -i /dev/urandomみたいにネットワーク越しにオーディオストリームを流し込めたら面白そうですね。実際に可能かどうかは分かりませんけど。

将来のIPv6対応を睨んで、マルチキャストパケットはブロードキャスト化して(QST宛に)投げています。しかしmDNSでもマルチキャストパケットを使っているので、何らかの制限を課した方が良いのではないかと考えています(それ以前に、ICMPv6をブロードキャストで投げても大丈夫なのかどうかという疑問があるのですが、どうなんでしょうかね…?)。56.4kg(21:40)

10-Oct-2022
[tap(4)化しました]

いくら*BSDでtun(4)のIFF_POINTOPOINT/IFF_BROADCASTの切り替えができるようになったとしても、送り先となるIPアドレスとコールサインとの対応付けをどう定義するかという問題があります。ファイルに記述したとしてもそのパーサを書くのは面倒ですし、手軽さも無いのでどうしたもんかなーと考えていたのですが…AX.25 Transport Layer Drivers for TCP/IP(PDF)にあるように、コールサインから生成したMACアドレスを使えば良さそうに見えます。MACアドレスを使う以上はtap(4)対応が必須になりますが、対応すればLinuxでも使えるようになるしこれはこれで必要な作業なのでしょう。

まだ作業途中ではありますが、一応動き出しています。Linux側の設定は06-Oct-2022の通りとし、OpenBSD側の設定は

とします。call2macがコールサインからMACアドレスを生成するコードで、JG1UAA-8から得たFE:AA:74:75:86:18を通信相手のIPアドレス(192.168.200.2)に紐付けます。

悪くない感じに動いていますが、いちいちARPで相手局を登録しないといけないこと、Linux側もARP offとしてもらうことが必要というのはちょっと使いにくい気がします。AX.25におけるARPパケットはMACアドレスではなくAX.25のコールサイン+SSIDとなっているため、トランスレーターみたいなものを実装すれば使えるようになるのでしょうか…?56.1kg(22:35)

06-Oct-2022
[tun(4)の実装って]

本当にOS毎に違って何か色々めんどくせーなーというのが正直な感想です。OpenBSD使いであるが故にOpenBSDが一番楽だなと思うのは、いくばくかの贔屓はあるでしょうけど間違ってはいないと思います。26-Aug-2022の付け足しになりますが、

という訳で、ifconfigからどう頑張ってもTUNデバイスのPOINTOPOINT/BROADCAST切り替えができないことが分かった以上、切り替え用のツールを作らざるを得ないようです(上でごちゃごちゃと書いてあることは、コードを読んだ方が手早く理解できると思います)。いくらなんでもこの程度のツールなら既に誰かが作っているだろうと思うんですけどね…なお、TUNデバイスを作成した際のデフォルトがそもそもPOINTOPOINTで動いている以上、SLIPなアレに設定の切り替えを載せることは今のところ考えていません。

OpenBSD側のTUNデバイスをBROADCASTに設定できるようになったので、Linux側のAX.25/KISSとおしゃべりする手順はこう書くこともできそうです(下線部分が前回から追加/変更した部分です)。

Linux側

OpenBSD側

mdnsが動いていると色々余計なものをまき散らしたり、kisstunの-xsないし-xdのコールサイン指定は空白を入れない点には注意が必要ですが、これでまた一歩前に進んだ…と思います。55.7kg(18:40)

05-Oct-2022
[なんとなく形になってきました]

例のSLIPなツール、一応こんな感じに改造してAX.25/KISSを喋れるようにしてみました。現時点ではTNCやdirewolfは介さずにRS-232Cのクロスケーブルで接続した状態でのテストではあるのですが。

Linux側は07-Sep-2022をちょっと変えて、

OpenBSD側はこんな感じ。

Linux側はARPを無効化する必要があります。そもそも、AX.25上のARPはEthernet上のARPと互換性がありません。

OpenBSD側はpoint-to-pointにしないと動きません。ルーティングの設定をきちんと行えばinet 192.168.200.1 netmask 255.255.255.0のようなことができるのかもしれませんが、未調査です。Linuxに倣い、OpenBSD側もARPを無効化します。ARPはともかく、無線でやるならpoint-to-pointではなく複数局を相手に通信できるようなものにしたいところです。

Linux側のAX.25-TCP/IPの挙動を見るに、相手のコールサインが分からない状況では自局>自局となるものの、応答がありコールサインが分かるとそれ以降は自局>相手局になるようです。

とりあえず、取っ掛かりはできたかなーと考えています。56.0kg(07:45)