2025/03/28(金)NetGear A6210で5Gが繋がらないことがある

2025/03/28 01:39 PC(全般)
NetGear A6210が5GHzネットワークのみ見失う問題。
同じ無線ルーターから発している2.4GHzのSSIDは見えている。
5GHzのみSSIDが見えない。

常時発生ではなく、見えているときもあるのだが設定を変えていないのに突然見えなくなる。
無線ルーターを再起動したりすると見えるようになったりする。

・A6210を利用しているPCはWindows10
・A6210ドライバは、1.0.0.39
・無線ルーターはASUS RT-AX59U

色々調査した結果、「制御チャンネルが144だと繋がらない」っぽい。

無線ネットワークは、チャンネルボンディングする場合でも制御チャンネルは1つに決まっているようだ。

144チャンネルはW56領域で後から追加されたチャンネルだ。
無線ルーター側はこのチャンネルを使えるものとして考えている。
手動設定で144を制御チャンネルにすることもできるし、自動設定(Auto)にしておくと制御チャンネルとして144を使うケースがある。
しかし、A6210は制御チャンネルが140チャンネル以下でないとどうも繋がらないっぽい。
今回、Auto設定だったため、制御チャンネルが144になったタイミングで5Gを見失ったという流れのようだ。

チップが悪いのかドライバが悪いのかはちょっと調べがつかなかった。
とはいえ最新ドライバでこの状況で、ファーム周りは更新手段が見つからなかったのでワークアラウンド的な対処しかなさそう。

対策としては、無線ルーターの制御チャンネルAutoを切ってやり、140以下の特定のチャンネルを制御チャンネルとして指定する。
axの5GHz帯では160MHz幅で通信したいということを考えると、(36~64チャンネル,100~128チャンネル)あたりのどれかを指定してやれば良さそう。
RT-AX59UにはAuto時144チャンネルを除外する設定がなかったが、できる機器もあるようだ。
そういった機種はその設定を使うで良いのかも知れない。

ここでチャンネルボンディングのおさらい。

チャンネルボンディングは、制御チャンネルが所属する、規格で定められた連続したチャンネルのセットでボンディングする。
ボンディングするチャンネル数は無線ネットワークの設定か規格上限。

116,120,124,128チャンネルのいずれを制御チャンネルにしても、80MHzでボンディングすると、116~128チャンネルのボンディングになる。
制御チャンネルから上に4チャンネルとか、下に4チャンネルとか、中心としてではなく、組み合わせが決まっていることに注意。

なお、140チャンネルなどを制御チャンネルにすると、A6210の設定アプリ上では132~144チャンネルでボンディングするようで、このとき一応ネットワークは見えるし通信もできていた。
ただ、144チャンネルを含むこの設定でA6210と通信が安定するのかはやや怪しいので、避けることにする。

DFSの問題もあるし、とっとと6GHz帯(Wi-Fi6E以上)にするのが良いのかもしれない。
とはいえ6GHzはWin10は対応せずで、トラブルが多いWin11にはなかなか踏ん切りつかないというところもある。

▼参考
無線LANの基礎と最新技術動向 - JPNIC
【ワイヤレスブログ 第11回】DFS|技術ブログ|C&S ENGINEER VOICE

2024/04/12(金)RubyのHttpClientはそろそろ捨てるべき?

Rubyのhttpclient
GitHub - nahi/httpclient: 'httpclient' gives something like the functionality of libwww-perl (LWP) in Ruby.
を使って作成していたスクレイピング的なスクリプトが動かなくなってしまった。

↓のようなエラーを吐く。
 SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate has expired) (OpenSSL::SSL::SSLError)
原因は、取得先のサーバーがSSL証明書をLet's Encryptに入れ替えたため。

httpclientはルート証明書がライブラリ内に同梱されており、最終更新が2015年。
Let's Encrypt系のルート証明書は未対応である。

ルート証明書がライブラリ同梱なのは今どきではないし、更新が止まっているのも痛い。
モンキーパッチがGitHub上にあるので、そちらでとりあえず対応可能。

Connection to Lets Encrypt secured server fails · Issue #445 · nahi/httpclient · GitHub
class HTTPClient
  alias original_initialize initialize

  def initialize(*args, &block)
    original_initialize(*args, &block)
    # Force use of the default system CA certs (instead of the 6 year old bundled ones)
    @session_manager&.ssl_config&.set_default_paths
  end
end
httpclientは投げ捨てて、httprbを使った方が良いかも。

GitHub - httprb/http: HTTP (The Gem! a.k.a. http.rb) - a fast Ruby HTTP client with a chainable API, streaming support, and timeouts

パパっと書き換えたけど素直でかなり簡単に修正できた。
パフォーマンスも良いらしい。

なお、rubyのhttpclientでletsencryptの証明書を保有するサイトに接続できなくなった | 元祖ワシ的日記のやり方だと、Windows環境では上手くいったのだが、debian Linuxだと上手くいかなかった。
追求していない。

2024/02/23(金)Ruby XMLRPCでdokuwikiのAPIをコールするとエラー

最近機会があってdokuwikiを触っている。
DBを使わないので遅いが、その分設置場所の選択肢が多い。
PHPが使えるフリーサーバーがいくつかあるので、小さいチーム作業や情報公開用途であれば扱いやすいと思う。

さて、dokuwikiは標準でXML-RPCによるAPIを備えているのだが、Rubyからコールしようとしてハマった。

このサンプル通り、
xmlrpc:clients:devel:xmlrpc:clients [DokuWiki]
require 'xmlrpc/client'

server = XMLRPC::Client.new("localhost", "/dokuwiki/lib/exe/xmlrpc.php", 8084)
result = server.call("dokuwiki.getVersion")
pp result
としてコールしても、
XML-RPC server accepts XML requests only.
が返ってきてしまう。

環境は、
・dokuwiki: Release 2024-02-06a "Kaos"
・PHP: 7.4
・Ruby: 2.7
HTTPサーバは問わない。

調査。

・RubyのXMLRPCはリクエストのContent-Typeに"text/xml;charset=UTF-8"がセットされる。
・dokuwikiのXML-RPC APIは"application/xml"か"text/xml"だけを受け付ける。これはcharsetがあるのもダメっぽい?

うーん、リクエストにcharsetはあっても良いはずなので、dokuwiki側のコードがかなり変か何かを読み飛ばしてるかもしれない。

とりあえず、RubyのXMLRPCはhttp_header_extraをセットすることでヘッダーを上書きできる。
コレを使って、以下にすれば動く。
require 'xmlrpc/client'

server = XMLRPC::Client.new("localhost", "/dokuwiki/lib/exe/xmlrpc.php", 8084)
server.http_header_extra = {"Content-Type" => "text/xml"}
result = server.call("dokuwiki.getVersion")
pp result

2023/11/28(火)SDHCカードは壊れる(特にRaspberryPiのものは)

2023/11/28 23:07 PC(全般)
SDカード類はこれまで致命的に壊れた経験がなかったのだが、ここきて立て続けに壊れたのでちょっとメモ。
原因別に3つくらいあるっぽいが、よくわからないことも含めて記載しておく。

・物理的故障
チップ内の接触・接続や端子の損傷。
SDカード形状だと内部問題は起きづらそうだが、microSDカードだと曲げに弱く問題を起こしそう。
認識が怪しくなってきたりしたら要警戒。

・チップ寿命
チップに書き込む度にチップの寿命を消耗する。
温度や放射線ももちろん影響はする。
ファイルの読み書きが遅い・エラーが発生するとなったら要警戒。

・管理領域損傷
SDカードの管理を行っている領域の損傷…と書かれているものを良く見かけるのだがどの領域かわからない。
ここからは推測。

SDカードは著作権保護(CPRM)用の特殊管理領域(ユーザが読み書きできない)、記憶領域(ユーザが読み書きできる)に分かれる。
記憶領域内の先頭部分に、MBRやGPT用のセクタがあるはずでそこが読めなくなったり書き込み不良になると死。
CPRM領域に不良が起きた場合はちょっとよくわからないが、もしかしたらカードごと死ぬのかもしれない。
もしくはCPRM領域と記憶領域のさらに上のMBRのようなものがフラッシュメモリ内に有るのかもしれない。
チップコントローラのプログラム等は流石にSoCのフラッシュ領域とかチップ外に入ってると思う…多分。
ファイルリストが読めない・容量が間違って表示される・安定しないなどになったら要警戒。
発覚直後にOSで認識すらできなくなるケースも。
チップ寿命の特殊ケースということで一旦は理解する。

ざっと調べた限りSDカードでもウェアレベリングはしているとのこと。
そのため書き込み時の局所性はある程度緩和されているはず。
ただ、コスト・構造の両面でSSDのようなリッチなキャッシュ構成にはできないと思う。
SSDの場合は、DRAMや寿命が長いフラッシュメモリをキャッシュとして使用して、
メイン記憶領域のフラッシュメモリの書き込み回数を緩和するような仕組みになっていると理解している。

ウェアレベリングがFATや写真データ記録を前提にしたアルゴリズムになってる可能性も有るとのこと。
特定のファイルシステム、たとえばext4だと死にやすいとか、1kBytesサイズの細かいデータにサボりがちになるとかはあるかもしれない。

最近Raspberry Pi Zero Wで使っていたmicroSDHCカードが突然OSで認識できなくなったことがあった。
これが管理領域の破損だった可能性はある。
ただ、コントローラが生きてれば認識くらいすると思うのだが…

また、
Raspberry Piは本当に壊れやすいのか
あたりにもあるようにRasPiも一般的なLinuxと同様に、電源を気軽に入れたり切ったりしては駄目とのこと。

ただ、この記事のNGケースはファイル単位の問題のようで認識レベルの問題に発展するかは不明。

まとめと、今後の方針。
SDカード特にmicroSDカード形状のものは、
・同じフラッシュメモリをベースとしていてもSSDよりも壊れやすい。HDDよりも壊れやすいと言って良いかも
・壊れ方は様々だが、突然OSからの認識ができなくなるケースも頭に入れておく
・本来OSを入れるような用途に使うべきではない
・RasPiで使う場合はイメージを取っておくのとできるだけSDカードに書きに行かないような設定を行う
・容量には余裕を見る。50%以上空き容量がある状態を常用とする。
・バックアップは当たり前
・なくなって困るデータを入れない
・壊れたら即諦める。使い捨てと心得る
・古いものは壊れる前にどんどん廃棄。アクセスできなくなって入ってるデータがわからない状態になってからでは遅い
・OSから認識しない状態の発生原因は推測レベルまででよくわからず

なお、SDカード廃棄時は中身が読める場合は一応KillDiskでゼロフィル。
その上で、ペンチやニッパーで物理破壊して廃棄するので良さそう。

2023/10/22(日)ディスクのワイプあれこれ

2023/10/23 02:57 PC(全般)
HDD廃棄時のデータ削除ルールはDoDが有名だが、SSD時代に合わせて少し知識をアップデートしたい。
加えて、使っていたソフトがバギーだったことにも気づいたので、何年か使える定番の方法を決めたい。

削除対象はPATA, SATA(SSD/HDD), できればM.2 SSDのやり方も定まると嬉しい。

▼削除時の機器構成
メンテ用のサブPCとしてノートPCを確保してある。
そこにUSB HDDスタンドをつなぎ、HDDを挿す。
この状態で削除する。

課題として、この構成時に削除ソフトやOSが削除対象ドライブをきちんと認識してくれる必要がある。
USB接続経由にややハードルがある。

▼消去手法
JEITAの、
「パソコンの廃棄・譲渡時におけるハードディスク上のデータ消去に関する留意事項」
や、
消去方式「米国国防総省方式(DoD 5220.22-M)」 と今日におけるその利用について知っておくべきこと
などを確認。

まとめると、
・現在はDoDではなく、NISTのサニタイズ基準を標準として捉える人が多い
・データの削除には3段階(Clear/Purge/Destroy)の基準があり、このうちClearを目指すなら複数回の消去は効果が薄い。0クリア1回で十分
・複数回書き込むようなDoD Shortを適用するくらいなら、消磁など物理的な手段でPurge以上を選択肢として検討するべし
とのこと。

・HDD
Clearを目指す。ゼロフィルとする。
データ密度が高い現代のHDDにおいては、一度ゼロフィルすると読み出すことはかなり困難なようだ。
データ密度のボーダーは15GBで、それ以上なら複数回書き込みはおまじないレベルっぽい。
それ以上を求めるなら、おとなしく消磁装置か物理破壊装置に送る。
(物理破壊装置に送る場合でもできればゼロフィルはしておくべき)

正直ddコマンドでも良いのだろうが、「デバイス名を間違えたら死」のリスクはできればGUIで回避したいという気持ちがある。

・SSD
Purgeを目指す。というのは、Secure EraseができればそれでPurgeが実現できている。
Secure EraseがないとSSDの原理上消去保証が大変だが、無いやつは最初から買わない方針で。

▼使用ソフト(これまで)
Minitool Partition Wizard9 Free Edition (以下PW9)

パーティション操作の機能が豊富で、ワイプなどツールもたくさん備えている。
10以降はGPTとMBRの変換など一部機能がFree版から消えたため、9を愛用していた。
こいつだとUSB HDDもそこそこきちんと認識してくれる。

が、どうもこいつのワイプは信用出来ない。
何度か試していて、以下の事象が発生した。
・ワイプ処理を開始してもすぐに処理が戻ってくることがある(明らかにワイプが出来ていない)
・ワイプ処理を開始後、対象のディスクのアクセスランプが点灯しないことがある(おそらくワイプが出来ていない)
・ワイプでDoD Shortを選択したときにやたらと速い。
具体的には、MHT2040AT(40GB)を使用しての実験で、
ゼロフィル:37m50s
DoD short:36m40s
であった(DoD Shortを行っていない可能性が高い)

あまりにもあまりなので信用できないと判断する。

Minitool以外にもオールインワンのパーティション操作ツール(Paragon/EaseUS/AOMEI等)があるのだが、
個人的にこれらは共通のOEMかPartedMagicを元にしたツールだと思っている。

PW9が怪しいとなると、PWの新版・有料版、あるいは他社のツールもなんとなく信用し難い。
もちろん有料版もありなのだが、この手のツールは基本的にマイナーバージョンレベルのアップグレードも買い直しになる。
なかなかどれと決めるのが難しい。

▼結論
HDDはゼロフィルで消す。
ソフトはKillDisk Freeware Versionを使用する。

気になるなら2回ゼロフィル。
どうしてもDoD shortをやりたいなら、KillDiskの有料版を購入。

PW9のような複合ツールのワイプはおまけであることが多く、「確実に消した」がどうもスッキリしなさそう。
単機能のKillDiskは証明書の発行機能等があることからもわかるように、そこの信頼性が高い。

また、何回か使ってみたが、下記の機能が気に入った。
・2台同時にワイプできる
・ワイプ完了後に所要時間を表示できる
・Free版でもUSB機器の認識が早くて正確

DoD Shortとかをやりたいなら有料版(4kくらい?)に手を出せば良さそう。

SSDはSecure Eraseで消す。
Windows上でTxBenchからSecure Eraseが使える。
このとき、SATA接続だとセキュリティロックされてSecure Eraseが送れないことが多い。
USBにつないで実行する。

心配なら、前提条件のノートPCに繋いで~を逸脱してしまうが、加えてマザーボードのSecure Eraseで消す。

NVMeとか条件で制約がないかはちょっとまだ試せていない。
一旦方針だけ決めておくが、実践時にまた課題が出てくるかも。

実は、KillDiskの10000円くらいのバージョンにはSecure Eraseがついている。
これを買って1つのソリューションで綺麗さっぱりしてしまう手もありそう。

2023/10/22(日)Ext2Fsdは使うべきではない

2023/10/23 01:53 PC(全般)
メモ。

ext2~4をWindowsでマウントできるソフトとして、有名所でExt2Fsdというソフトがある。
実際これでうまくアクセスできるケースは有るのだが、上手く行かないケースがあまりに厳しいので覚書としてメモ。

今回、Linuxで使用していたHDDからデータを抽出する必要があり、
これを導入して計3回Windows10環境でマウントを行った。

対象はext3のパーティションを含むHDDで、USB HDDケースで接続した。

1回目→マウントできファイルの一覧が返ってくるがアクセスできない。そのうちエクスプローラが無反応になりすべての操作を受け付けなくなったためPC再起動
2回目→マウントでき、ファイルのリードは正常動作。
3回目→マウントできたがファイルの一覧が返ってこない。そのうちエクスプローラが無反応になりすべての操作を受け付けなくなったためPC再起動。無反応となっていたタイミングで、「マウントしようとしていたHDDのみならず、ありとあらゆるディスクライトでデータが0x00に化ける」現象が発生していた。

怖くてとても使えない。
マウントしようとしたHDDだけならまだわかるのだが全ディスク巻き込むのが相当きつい。
USB経由でアクセスしたのが悪さしている可能性は高そうだが、、、

1回目の事象を検知した段階で、2回目も3回目もメインPCでやるべきではなかった。
猛省。

2022/08/28(日)AutoIt!で動きが変

2022/08/28 20:31 PC(全般)
AutoIt!で作成したスクリプトで特定のアプリケーションに対し、
・Runで起動しないが、ShellExecuteだと起動する
・ControlGetTextで内容を取れるが、ControlSetTextで内容をセットできない
といった現象が発生。

原因は対象のEXEに、
「管理者としてこのプログラムを実行する」
チェックが入っていたから。

controlsettext not working - AutoIt General Help and Support - AutoIt Forums

UACの影響っぽい。

スクリプトの先頭に、
#RequireAdmin
を追加してやると問題解決した。

なるほどだけど、気づきにくいなあ。

2022/06/20(月)久々にプログラミングフォント調べた

最近良いプログラミングフォントが色々でてきているようなのでさらってみた。

2013年後半のプログラミングフォント事情 - 色々日記(ざ・めも)
以来。

今回の結論は、
・Ricty(もしくはRicty Diminished)使って不満がなければRicty
・Rictyのアンチエイリアスに不満がある場合は、PlemolJP
となった。

ただ、PlemolJP作者のフォントとはどれも素晴らしく、
HackGen
PlemolJP
Firge
UDEV Gothic JPDOC
の4つについては合うものを選べば良いと思う。

状況変化した内容をつらつら書いていく。

■Windowsのレンダリング
Win10になったときかWin10内でのupdateかで標準アンチエイリアス~ClearTypeがある程度改善したように感じる。
加えて高解像度モニタの普及とDirectWrite周りを調整できるソフトが増えたことで、以前ほど不満に感じるシーンが減った。

ただ、やはりまだWindowsのレンダリングはいまいちだと思う。

■フォント
ここ3年くらいで、ライセンスがゆるく品質の良いフォントが公開されている。
Google Fontsがハブになっているようだ。

・源ノ角ゴシック(Source Han Sans or Noto Sans)
・IBM Plex Sans JP
・BIZ UDGothic

あたりが品質も高く収録文字も多そう。
特に、モリサワのBIZ UDGothicがOpen Font Licenseで追加されたのは衝撃だった。

源ノ角ゴシックは様々な派生フォント(源真, 源柔, 源暎, Nasu, ...)を生み出しているので、
BIZ UDGothicもそうなっていきそうで楽しみ。

CJKオール対応の更紗なんてのもあるし、なんとなく中国パワーにひきずられてCJK対応が進んだ感じがする。
合成フォントの選択肢がとても増えた。

RictyはRictyでヒンティング追加されたりして少し進化。

少なくともライセンス的にかなり黒かったMeiryoKEを選択しなければいけない状況はないと思う。
世のフォント作者に感謝。

FontLinkもソフト側でできるものも多いし(秀丸ですらできる!)、もうやらなくていいのではないか。

なお、ソフト側でフォント合成する場合もフォントの幅や高さの問題で下端・右端が切れるリスクがあるのは同じ。

■求めるフォント
選択肢が増えたので、贅沢な話だが自分のほしいフォントを整理。

[必須]
・等幅
・英数字は全角の1/2
・文字はしっかり分離していてほしい。特に<=, ==が合体しないでほしい(リガチャは論外)
・破断は最小限(Hackはgの線をかなり省略するがちょっと嫌)
・|は分離してほしくない
・iの下部の右曲がりは嫌(lの下部の右曲がりはOK。どちらでもあり)
・標準アンチエイリアス・アンチエイリアスなしいずれでも視認性が高い
・記号△▲▼■□○◎●・←↓↑→系は全角で描画されてほしい
・文字の下端・右端が欠けてほしくない(合成フォントでは切れがち)
・フォントサイズでの表示乱れは最小限(特にWindowsの場合10.5ptの鬼門がある)

[ベター]
・文字の区別は極力ついてほしい。特に1とlと|は極力。
・英数字・日本語を混ぜ書き前提。バランスに違和感がないと嬉しい
・全角と半角に同じ文字がある場合、できるだけ似たような字体でかつ全角・半角の判別がつくのが理想
・比較・演算記号-=*/<>はできるだけ上下中央に揃っていてほしい
・0はスラッシュのほうが嬉しいが、ドットも許容。Oとは区別がついてほしい。

まずRictyが頭に浮かぶ… いやもうドンピシャRictyなのだが、あやつはアンチエイリアスが今一つだった。
というわけでさらってみる。

■今回試したやつ
個人的趣味に合うかどうか。
めちゃくちゃ私見で判定。
△Firge: 若干-=<>の上下位置が一致しないのが気になる。全体的に文字を破線にしがち(gとか&とか)
✕HackGen: |が分かれるのが気になる。iの下部が右曲がりなのが好みでない。<=>がややくっついて見えるのが嫌。10.5ptアンチエイリアスなしだと(){}が対称に見えない
△PlemolJP: {}がかなり強い曲線で作られてる。ややばとぱ(濁点・半濁点)が見分けづらい。#が線切断表記。0がドット
△UDEV Gothic JPDOC: {}が上下対象でない。ややばとぱ(濁点・半濁点)が見分けづらい。英数字が縦長の印象。半角qで目が滑りやすい。4が少し気持ち悪い
△Ricty Diminished: アンチエイリアスがシビア。=とか横線がボケやすい。M+側も比較的アンチエイリアスに弱い。非アンチエイリアス、10.5ptのときにsなどの上部がInconsolataとかより汚い(上辺にドット?が出る)
✕M+ 1M: *が上付きなのが嫌。半角英数(特に数字)の幅が狭すぎる。9.5ptとかで数字の高さがズレる。
✕Migu 1M: M+と同様
✕Myrica M:  |が分かれるのが気になる。日本語がやや細い。{}が上下対象でない。10.5ptとかで全角jがiに見えたりする。他にも下端が切れる文字がある
✕源暎ゴシック M: *が上付きになるのが嫌。<=>が完全にくっついてしまう。
✕戸越等幅: 「ば」など濁音が見づらい。全体的に潰れてしまう傾向があり、調整ができてない気がする。
✕更紗Gothic: fixedを使用する。ややばとぱ(濁点・半濁点)が見分けづらい。*が上付きになる。■○などが半角。右端が切れる。更紗で使ってるIosevkaはカスタマイズできるらしく、可能性を感じる。
✕Roboto J: ヒンティングありの方を使ったほうが良さそう。(){}の見分けが付きづらい。日本語の上下が目立ってガタつく
✕Ocami: 記号系(→とか)が半角。ばとぱがみわけづらい。
✕Cica: 記号系(→とか)が半角
✕VLゴシック: サイズによって、=の上下の太さが一致しない。
✕utatane: ==がわずかに合体気味。アンチエイリアス下での英数字の視認性が今ひとつ。
✕源暎モノコード: アンチエイリアスなしで、線の太さに安定感がない。フォントサイズ変更していると、()の左右で幅が違っていたり、縦の線だけ太くなっていたり。9ptで==が合体する。
✕Nasu M:非アンチエイリアス10.5ptで ==が合体気味。非アンチエイリアス下での英数字の視認性が今ひとつ
✕源ノ角ゴシック Code JP: 非アンチエイリアスだと:と;、,と.の区別が厳しい。
Firge, HackGen, PlemolJP, UDEV Gothic JPDOCの作者さん同じなのすごいなー

この4つは不具合っぽい挙動をすることが少なく、非アンチエイリアス・アンチエイリアス問わず素直。

字形としては、
UDEV Gothic JPDOC
が一番趣味に合うけど、英数字が縦に長過ぎるのかコードを読むときに目が滑りやすい。

PlemolJPは0がスラッシュでないのだが、どんな用途でも70~80点ある感じ。

アンチエイリアス環境下に限ったら丸になるやつもたくさんありそう。
作る側(特にMacユーザ)からしたらそんなの気にしてるやついねーよって感じだと思う。

改めて思ったのは字形もだけど、フォントつくる人の腕に依るところが大きい。
HackGen作者たわら氏の仕事が素晴らしい気がするし、ソース公開されてるから自力でフォント作る気があるなら4フォントのスクリプト全部読めばある程度合成フォント作るときの課題理解も進みそう(作れるとは言ってない)。

今後もどんどんフォント出てきそうなので期待。

2022/05/14(土)debianをbuster(10.x)→bullseye(11.x)にアップグレード(zabbixネタ多し)

2022/05/14 17:49
自宅のdebianをbuster(10.x)からbullseye(11.x)にアップグレードした。

その際のメモ。
zabbix関連の対応が中心。

基本手順

第4章 Debian 10 (buster) からのアップグレード
基本的には公式手順に従う。
#apt update
#apt upgrade --without-new-pkgs
#apt full-upgrade
#apt autoremove
いつも通りsudoは適宜補完で。

システム再起動

システム再起動をかけておく。
カーネル自作の頃はここで結構トラブル起きていたが、今回は何も無し。

ログ周り諸々チェックして特に問題なさそう。

Rubyライブラリインストール

Rubyのバージョンが2.7に上がったのでgemでサービス運用に必要なライブラリを入れ直しておく。
twitterとhttpclientの2つ。
#gem install twitter httpclient
パッケージで入れてるサービスのPHPやPerlライブラリはdebianのパッケージに任せてて、
Rubyのライブラリは未だにgem管理というのはなんだかへんてこな感じがする……

が、自作サービスなのでAPTで依存性判断させるのめんどくさいし、
bundler管理するまでもないし今のところこの手順忘れなければいいかな。

sources.list更新

# apt-get update
すると、
無視:3 http://security.debian.org stable/updates InRelease
エラー:4 http://security.debian.org stable/updates Release
  404  Not Found [IP: 151.101.230.132 80]
E: リポジトリ http://security.debian.org stable/updates Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
と出る。
security.debian.orgのパスが変わったっぽいので対応しておく。
これはupgradeと無関係に直しておくべきもの。
# diff sources.list.20220512 sources.list
14,15c14,15
< deb http://security.debian.org/ stable/updates main contrib non-free
< deb-src http://security.debian.org/ stable/updates main contrib non-free
---
> deb http://security.debian.org/ stable-security/updates main contrib non-free
> deb-src http://security.debian.org/ stable-security/updates main contrib non-free
公式だとstable-securityじゃなくbuster-securityを推奨しているようだが、横着したいのでstable-securityで。
apt-get updateしてエラーの解消を確認。

[参考]
security.debian.org 'does not have a Release file' on with Debian Docker images - Server Fault

zabbix4→5関連

毎度zabbix関係に手間がかかる感じ。
色々でていたのでこの際まとめてきれいにする。

databaseアップグレードに失敗する

zabbixにアクセスすると下記表示。
The Zabbix database version does not match current requirements. Your database version: 4030046. Required version: 5000000. Please contact your system administrator.
/var/log/zabbix-server/zabbix_server.log
上では、起動時の
starting automatic database upgrade
の途中(93%くらい)で、
 17096:20220513:102638.403 completed 92% of database upgrade
 17096:20220513:102638.548 completed 93% of database upgrade
 17096:20220513:102638.762 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `hosts` add `discover` integer default '0' not null]
 17096:20220513:102638.763 database upgrade failed
 17207:20220513:102809.948 Starting Zabbix Server. Zabbix 5.0.8 (revision d3c78f993a).
とでてくる。

列が追加できないらしい。
mysql上でzabbix DBにつないでhostsテーブルのフォーマットを変えていく。
MariaDB [zabbix]> alter table hosts row_format=dynamic;
media_typeテーブルも同様。直す。
 16412:20220513:101210.637 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `media_type` add `event_menu_name` varchar(255) default '' not null]
MariaDB [zabbix]> alter table media_type row_format=dynamic;
zabbixを再起動すると、database upgradeは成功してzabbixの画面は開くようになった。

なお、
innodb_strict_mode = 0
で対応する説があるが、これはNG(データロスするか、実際にデータいじってるときにエラーが出るか)の認識。

[参考]
CentOS7で動いているZabbix4.0をZabbix5.0にアップグレードしてついでにNginxで動かす - 気まぐれ

エラーを消す

まだ、/var/log/zabbix-server/zabbix_server.logにここらへんの警告が出るので消していく。
 17207:20220513:102810.696 Zabbix supports only "utf8_bin" collation. Database "zabbix" has default collation "utf8_general_ci"
 17207:20220513:102810.723 character set name or collation name that is not supported by Zabbix found in 421 column(s) of database "zabbix"
 17207:20220513:102810.723 only character set "utf8" and collation "utf8_bin" should be used in database
 17207:20220513:102810.759 database is not upgraded to use double precision values
各tableのcollate直す。
正式手順は、
2 Repairing Zabbix database character set and collation
のようだけど、面倒であれば下記流しても良さそうだった。
MariaDB [zabbix]> ALTER TABLE acknowledges CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE actions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE alerts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_template CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog_details CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE conditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config_autoreg_tls CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_group CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagpair CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagvalue CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE correlation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dbversion CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dchecks CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dhosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE drules CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dservices CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE escalations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_recovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_suppress CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE events CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE expressions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE functions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalvars CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_theme CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_str CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_text CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_inventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hostmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_templates CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE housekeeper CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hstgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstepitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptestitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_map CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_mapping CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE ids CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE images CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_snmp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_preproc CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_rtdata CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items_applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_macro_path CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opdiscover CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_ophistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opperiod CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opseverity CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opstatus CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optrends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenance_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_windows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE mappings CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_message CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_param CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE module CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_hst CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opconditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE operations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opgroup CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_usr CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE profiles CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_dhistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE regexps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE rights CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE scripts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE service_alarms CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_times CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sessions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slides CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_trigger CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_shape CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_elements CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_link_triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE tag_filter CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_acknowledge CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_check_now CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_close_problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE timeperiods CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_depends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE valuemaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
DBのdefault collate直す。
MariaDB [(none)]> ALTER DATABASE zabbix DEFAULT COLLATE utf8_bin;
倍精度周りのdefault値直す。
MariaDB [zabbix]> ALTER TABLE trends
	MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
MariaDB [zabbix]> ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
SQLはここに掲載されている。
https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql

大体↓に書いてある! ありがたい。
[参考]
Zabbix5.0にアップデートした後にでるトラブルの対処法

PHP関連オプション

zabbixの画面に下記4つ警告が出ているので直す。
PHPの"post_max_size"オプション	8M	PHPのpostサイズの最小値は16Mです("post_max_size"設定オプション)。
PHPの"max_execution_time"オプション	30	PHPスクリプトの実行時間の最小値は300です ("max_execution_time"設定オプション)。
PHPの"max_input_time"オプション	60	PHPスクリプトの入力パース時間の最小値は300です("max_input_time"設定オプション)。
PHPの"date.timezone"オプション	不明	PHPのタイムゾーンが設定されていません ("date.timezone"設定パラメータ)。

/etc/apache2/sites-enabled/zabbix.conf
の、
<Directory "/usr/share/zabbix">
内に下記追記。
# diff zabbix.conf.20220513 zabbix.conf
11a12,15
>     php_value post_max_size 16M
>     php_value max_execution_time 300
>     php_value max_input_time 300
>     php_value date.timezone Asia/Tokyo
とりあえずこれできれいになった。
アップグレード終わり!

2022/02/12(土)春M(SpringM)で「0による浮動小数点数除算」

2022/02/13 01:22 PC(全般)
春M(SpringM)で特定のファイルに対して以下の操作をした時に、「0による浮動小数点数除算」とダイアログが出ることがある。
[対象操作]
・ファイル削除
・コンテキストメニュー呼び出し

一度ダイアログが出てしまうと、プロセスがファイルハンドルを掴みっぱなしになってしまうようで、
SpringMのプロセスを削除するまでそのファイルは操作ができない。

うかつに操作しに行くと、そのプロセスがハングすることもある。

発生するファイルの条件を調べたところ、字幕付きのmp4ファイルで何らかの理由で字幕streamがデータ無しになっている場合に発生するようだ。

ffprobeで調べるとこんな感じ。
$ ffprobe.exe -select_streams s -show_streams -loglevel error "***.mp4"

[STREAM]
index=2
codec_name=mov_text
codec_long_name=MOV text
profile=unknown
codec_type=subtitle
codec_time_base=0/1
codec_tag_string=tx3g
codec_tag=0x67337874
width=704
height=396
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000000
start_pts=0
start_time=0.000000
duration_ts=0
duration=0.000000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A

~ 省略 ~
[/STREAM]
これで、duration_ts=0になっているファイルが発生条件ぽい。
字幕でなくてもvideoやaudioがduration_ts=0の場合もおそらく発生すると思われる(そのようなファイルが手元にないので未検証)。

とりあえず、オリジナルのmp4を破壊してよいのであればdurationが0のストリームを破棄してやれば良いようだ。
上記の場合はvideoとaudio残して、字幕だけ削るので、
$ ffmpeg.exe -i input.mp4 -c:v copy -c:a copy output.mp4
とか。

どのストリームを残すかはソース次第で。

このファイルは問題なく操作できた。

Delphiは外部DLL呼び出しの例外に対してセンシティブだというのは聞いたことがある気がするので、
それが関係しているかもしれない。