arpalertをarpwatchに変更
不審なネットワーク接続を見つけるために、arpalert を使っていたけど、新しい端末を登録するときに警告メールが飛んでこない。サーバを切り替え ubuntu に変更となって、何も考えずに arpalert をインストールしてあったけど、細かい点の動作確認をしていなかった。
調べると arpalert は最近メンテナンスされていないらしい。systemctl status arpalert すると、/etc/init.d/arpalert の sysv 形式で起動している。古い証拠なので切り替え。
最近は arpwatch を進められたので、arpwatch に切り替え。
arpwatch の設定
設定は、設定対象のインタフェース名(自宅の場合 enp2s0)をしらべ、以下で起動
$ sudo apt install arpwatch $ sudo vi /etc/arpwatch/enp2s0.iface IFACE_ARGS="-m root@tsaitoh.net" # 警告メールの送り先 PCAP_FILTER="net 192.168.11.0/24" # 監視対象を制限 $ sudo systemctl enable arpwatch@enp2s0 $ sudo systemctl start arpwatch@enp2s0 $ sudo apt remove arpalert
raspbianのaptでのgpgキーのエラー
設定を間違えたのか、apt の update, upgrade で GPG キーのエラーが出るようになった。
GPGキー の再設定
GPG キーファイルの扱う debian-archive-keyring (raspbianでは raspbian-archige-keyring) を強制再インストールして、更新された /etc/apt/trusted.gpg を参照するように /etc/apt/sources.list.d/* のファイルの deb 行に書き込む
((( 標準パッケージの GPG keyring を強制再インストール )))
$ sudo apt reinstall --allow-unauthenticated raspbian-archive-keyring
$ sudo apt update ; sudo apt upgrade
((( パッケージの GPG 参照ファイルを設定 )))
$ sudo vi /etc/apt/sources.list.d/*.list
deb [signed-by=/etc/apt/trusted.gpg] ...略...
~~~~~~~~~~~~~~~~~~~~
自宅サーバの移行中
メインPCを Windows 10 から 新しいPCを導入し Windows 11 に切り替えたが、データの移行も終わったので、Windows 10 の PC に Linux を入れる。
現状自宅サーバの問題点
現状の自宅サーバは ほぼ 15年に使い始めたが、最近はマナーの悪いクローラで負荷が高くなったり、smartd から エラー警告が出る(root ではない)ようになっているし、これを契機にサーバ移行中。1台の PC を 15 年運用というのも我ながらすごいな。
しかし、Core i3 第5世代の CPU から Core i7 の第7世代で処理速度も約4倍になってるし、SSD なので全体的に処理速度も大幅改善。
OS は Debian 13(trixie) から Ubuntu 24 に
OSは、設定移行も考え、同じ Debian にしようと作業を始めたが、ネットワークデバイスのドライバがまずいのか、時々 切れてしまう。処理速度もまともなので、デスクトップでも使うと思うし Ubuntu 24 Desktop に変更。最新 firmware のパッケージをいれて適切なネットワークデバイスが選ばれたのか、ネットワークも安定。
デスクトップも、デフォルト設定が Debian より使いやすいし便利。
ついでに、FireWall の管理は長年 ferm を使っていたけど、メジャーじゃないし最新ディストリビューションでは対象外。今回、移行を契機に netfilter + netfilter-persistent に移行。
postfix + opendkim + clamav + saslauthd + dovecot-imapd の設定はほぼ移行が終わったと思うけどなかなか面倒。設定が色々とかみあってて面倒。設定をまるまる移行すると、処理が途中で現行サーバに飛ぶので、移行中サーバ内で処理が留まるように設定しながらの作業中。
munin + nagios4 の環境も移行したけど、まだまだ道半ば。WordPress のインストールとコンテンツ移行が最後の難関かな。
追記:Wordpressの ヘッダ画像
WordPress も移行したけど、古いサーバのデータを完全移行で、どっちで作業していたかわからなくなるので、新しいサーバの WordPress ヘッダ画像を更新。
ライセンス的にいい写真がなかったので、Gemini で画像を生成させた。

Alibaba Cloud LLC からの大量アクセス
自宅サーバで作業していたら、loadaverage 30越えの高負荷。
調べてみると、Web サーバの負荷が高い。一旦 apache を止めると負荷が落ち着く。
早々にアクセス元の IP アドレスを調べると広い範囲の端末からアクセスが集中している。ひとまず FireWall で下記サブネットをアクセス拒否。
47.79.0.0/20 47.79.96.0/19 47.79.208.0/20 47.82.8.0/21
アクセス履歴の内容を確認すると、アクセス間隔を空けないマナーの悪いクローラーのようだ。
saslauthd の起動で smtpd chroot 解除
postfix の更新が入ったようだけど、以前から postfix 更新のたびに動かなくなることが多かった saslauthd がうまく起動しないトラブルが再発。
postfix での smtpd 起動がセキュリティ対策のために chroot 起動にしていて、saslauthd が chroot のファイルを正しくアクセスできないのが原因。でも、debian の default 設定の 非chroot の設定だし、debian 推奨設定ということで chroot 起動を解除することにした。
homebridge-cmdswitch2更新とchild-bridge機能
homebridge child-bridge
homebridgeの更新の中で、child-bridge という機能が実装された様子。これによる影響なのか、Google Home でつながらない現象が発生していると思われる。homebridge-cmdswitch2 のプラグインが、child-bridge を使うように変更されている。
$ sudo ps ax | grep homebridge 22887 ? Sl 0:21 homebridge 23934 ? Sl 0:03 homebridge: homebridge-cmdswitch2 24010 pts/2 S+ 0:00 grep homebridge
{
"platform": "cmdSwitch2",
"name": "cmdSwitch2",
"switches": [
{
"name": "テレビ",
--(略)--
}
],
"_bridge": {
"username": "0E:7D:87:xx:xx:xx",
"port": 53178
}
}
これにより、child bridge が別の homebridge のように見えていると思われるので、Google Home 側で別デバイスとして child bridge を認識させないとダメということかな。
homebridge-cmdswitch2 の更新
ただ、cmdswitch2 だけど、プラグインの更新が必要みたい。homebridge-cmdswitch2(ver 0.2.10)は、homebridge-cmdswitch2-no-logs に移行されているようなので、こっちの方が先決かな。
homebridge-cmdswitch2-no-logs の status 監視のトラブル
homebridge-cmdswitch2 の後継プラグインの homebridge-cmdswitch2-no-logs に入れ替えたけど、各機器のON/OFF状態を cec-client でとるように設定し polling 設定をすると、頻繁に状態監視をすることになり、ほかのデバイスの on/off 監視と競合が発生する。このため、polling 設定は削除。
プラグインを更新したら、「child bridge の方がいいよ」といった説明も出てこないし、child bridge機能は見送り。
追記:homebridge-cmdswitch2 に戻す
cmdswitch2-no-logs に切り替えたけど、”OK google, テレビをつけて”と命令すると、テレビを消す動作はするものの “homebrigeに接続できません” と言われる。
しかたがないので、homebridge-cmdswitch2 に戻し、child-bridge ナシの設定とする。
sshd のエラーメッセージ
sshd の設定をあまり見直していないが、下記のメッセージが出るようになっている。
2024-10-05T20:03:58.314494+09:00 xxxx sshd[176045]: rexec line 15: Deprecated option UsePrivilegeSeparation 2024-10-05T20:03:58.314710+09:00 xxxx sshd[176045]: rexec line 18: Deprecated option KeyRegenerationInterval 2024-10-05T20:03:58.314778+09:00 xxxx sshd[176045]: rexec line 19: Deprecated option ServerKeyBits 2024-10-05T20:03:58.314840+09:00 xxxx sshd[176045]: rexec line 31: Deprecated option RSAAuthentication 2024-10-05T20:03:58.314896+09:00 xxxx sshd[176045]: rexec line 38: Deprecated option RhostsRSAAuthentication 2024-10-05T20:20:31.361176+09:00 xxxx sshd[177351]: Unable to load host key: /etc/ssh/ssh_host_dsa_key
どれも、関連する行をコメントアウトで対応。
mariadb のエラー対策
別件で /var/log/syslog を確認したら、下記のエラーが大量に出力されている。
2024-10-05T19:53:54.546148+09:00 xxxx mariadbd[1076]: 2024-10-05 19:53:54 3785 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').
2024-10-05T19:53:54.546217+09:00 xxxx mariadbd[1076]: 2024-10-05 19:53:54 3785 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).
エラーメッセージでググると、下記のコマンドで直るとのこと。
ALTER TABLE mysql.column_stats MODIFY histogram longblob;
ALTER TABLE mysql.column_stats MODIFY hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB');
ということで、実行してみる。
# mariadb -u root
:
MariaDB [(none)]> ALTER TABLE mysql.column_stats MODIFY histogram longblob;
Query OK, 0 rows affected (0.496 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [(none)]> ALTER TABLE mysql.column_stats MODIFY hist_type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB');
Query OK, 0 rows affected (0.176 sec)
Records: 0 Duplicates: 0 Warnings: 0
エラーメッセージは出なくなったようだ。
muninの測定をnagios4で活用するには
switchbot の温湿度計を munin で読み取るための python スクリプトを活用していたけど、特定閾値を超えた際の処理は nagios4 の方が便利。munin の警告だと閾値を越えている間は何度も警告メールが飛んでくる。nagios であれば、こういった処理がうまい。
かといって、swichbot の python アプリを nagios の check_*** に書き換えてみたが、bluetooth のアクセス権限などの設定が煩雑だしうまくいかなかった。
でも、munin は、ネットワーク経由の監視の機能があるので、それを使うこととした。munin のリモート接続のポート番号4949に接続して、list で測定できるものの一覧が取れて、fetch すれば 値を読み取ってくれる。
((( telnet でプロトコルを確認 ))) $ telnet localhost 4949 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. # munin node at localhost list df load processes switchbotmeterbt . fetch switchbotmeterbt xxxxxxxxxxxx_Temperature.value 27.6 xxxxxxxxxxxx_Humidity.value 54 xxxxxxxxxxxx_Battery.value 87 xxxxxxxxxxxx_Discomfort.value 75.68896000000001 xxxxxxxxxxxx_WBGT.value 24.176256000000006 . QUIT Connection closed by foreign host. ((( 単純なので nc を使って読ませる ))) $ echo -e "fetch switchbotmeterbt\nQUIT\n" | nc localhost 4949 # munin node at localhost xxxxxxxxxxxx_Temperature.value 27.7 xxxxxxxxxxxx_Humidity.value 54 xxxxxxxxxxxx_Battery.value 87 xxxxxxxxxxxx_Discomfort.value 75.82342 xxxxxxxxxxxx_WBGT.value 24.268412 .
ということで、ちょっとだけ手抜きで nc とか使って perl を使って読み取らせる処理を書いてみた。
#!/usr/bin/perl
use strict ;
use warnings ;
my $SWBT_METER = "/usr/bin/echo -e 'fetch switchbotmeterbt\nQUIT\n' | /usr/bin/nc localhost 4949" ;
my %value = () ;
open( my $FH , "$SWBT_METER 2>/dev/null |" ) or die( "Can't open $SWBT_METER" ) ;
while ( my $line = <$FH> ) {
if ( $line =~ /^[0-9a-f]+_([^.]+)\.value\s+([\.0-9]+)\s*$/ ) {
$value{$1} = $2 ;
$flag = 1 ;
}
}
close( $FH ) ;




