Ubuntu」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

HomeAssistant のオートメーション

スマホの Ping(ICMP) の binary_sensor では、スマホがスリープ状態になったりするタイミングがあって、単純な ping では接続/切断が発生して、在宅/外出が正しく検出できない。

Ping(ICMP)の設定には consider_home で『デバイスが応答しなくなってから「切断」と判定するまでの待ち時間』を設定することができるが、エンティティとして扱える binary_sensor には consider_home は効き目がない。調べる中で device_tracker を有効にする必要があることが分かったけど、有効設定の画面にたどり着くのにひと手間かかった。

ようやく、device_tracker が使えるようになり、在宅/外出の判定がうまくできるようになり、オートメーションの設定。

Gemini が automation.yaml で設定する方法を解説してくれたけど、自分が在宅しているかどうかで色々と通知を切り分けたかったので、オートメーションの UI での登録はちょい悩んだけど…

オートメーションの例

UIで設定した結果を、YAML形式で表示

# shell_command.sh_mail_notify_message   - メールで送る shell_command
# shell_command.sh_google_notify_message - Google Home で話させる shell_command
alias: とーるの帰宅/外出を通知
description: ""
triggers:
  - trigger: state
    entity_id:
      - device_tracker.iphone_xxxx
conditions: []
actions:
  - action: shell_command.sh_mail_notify_message
    metadata: {}
    data:
      to: t-saitoh
      message: >-
        とーるが
        {% if states('device_tracker.iphone_xxxx') == 'home' %}
        帰宅/{{ now().strftime('%H:%M') }}
        {% else  %}
        外出{{ (now() - timedelta(seconds=450)).strftime('%H:%M') }}
        {% endif %}
  - if:
      - condition: state
        entity_id: device_tracker.iphone_yyyy
        state:
          - home
    then:
      - action: shell_command.sh_google_notify_message
        metadata: {}
        data:
          message: >-
            とーるが
            {% if states('device_tracker.iphone_xxxx') == 'home' %}
            帰宅
            {% else %}
            外出
            {% endif %}
            しました
mode: single

Homebridge2 はまだ早い?

homebridge2.0 が正式リリース

Homebridge の最新の homebridge2.0 が正式リリースとなった様子。

早々に更新をかけたけど、Homebridge People Pro とか Homebridge Cmdswitch2 などのプラグインが対象外となったようで、更新して起動したら、プラグインが動かず、バージョンを元に戻した。

更新してしまうと、自宅サーバでは Homebridge People Pro を活用して、在宅 / 外出の判定に使っていたのが動かなくなる。HomeAssistant に移行すればいいんだけど、私,ママ,こども,洗濯機などの監視だと、オートメーションの設定がかなり煩雑になる。

当面は、Homebridge 1.11.4 のままで運用かな。

spamhaus のDQSキー取得

spamhaus はパブリックDNSを拒否

自宅メールサーバでの運用で、spamassassin などの設定をしていても、迷惑メールがそれなりに届く。

傾向としては、Google や Amazon のクラウドサーバから、SPF や DKIM を正規に取得した使い捨てドメインから送られてくる。このため、OpenDMARC などを設定してもダメ。Gemini に聞いたら、使い捨てドメインからの RBL のデータベースが得意な、spamhaus を薦めてくれる。

ただ、spamhaus は、以前にも設定したけど問い合わせを拒絶されたので、設定から外していた。改めて確認すると spamhaus は、無料サービスだけど大量の問い合わせをさばききれないので、8.8.8.8 や 1.1.1.1 のような パブリックDNS を経由した問い合わせには、答えを返さない運用をしているらしい。私の拒絶経験もコレが原因。

んで、色々調べると、無償サービスだけどユーザ登録して DQS キーを使えば、パブリックDNS経由での問い合わせでも拒否されないらしい。(最初、ユーザ登録とか嫌いなので、パブリックDNSを使わないキャッシュDNSサーバを立てようか…とも思ったけどシステムが複雑になるだけ)

spamhaus のユーザ登録とDQSキー生成

spamhaus の登録ページにアクセス(Spamhaus DQS Sign Up )し、DQS キーの発行を行う。

postfix に登録

postfix の main.cf の smtpd_recipient_restrictions に 以下のように登録。xxx…xxx の部分に発行した DQS キーを記載する。

((( /etc/postfix/main.cf )))
smtpd_recipient_restrictions = permit_mynetworks,
                permit_sasl_authenticated,
                reject_unauth_destination,
                reject_rbl_client xxxxxxxxxxxxxxxxxxxxxxxxxx.zen.dq.spamhaus.net=127.0.0.[2..11],
                check_policy_service unix:private/policy-spf,
                permit

追記 2026-05-07 spamhausの効果覿面

spamhaus を RBD に登録してから、効果覿面。使い捨てドメインからのメールがきれいさっぱり止まっていて、最近は spam なしが続いている。

Ubuntu 26.04 で独自パッケージ設定が無効化

Ubuntu 26.04 をインストールしたら、nodejs, vscode, google-chrome などの インストール用の設定が無効化されている。まあ、競合する可能性あるだろうし、無効化されても文句はいえん。ということで、設定のやり直しをして、古い sources.list を削除

((( node.js )))
$ curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
$ sudo apt-get install -y nodejs build-essential

((( vscode )))
$ curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
  | sudo gpg --dearmor -o /usr/share/keyrings/microsoft.gpg
$ sudo apt install code

((( google-chrome )))
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo apt install ./google-chrome-stable_current_amd64.deb

((( 古い sources.list を削除 )))
$ cd /etc/apt/sources.list.d/
$ sudo rm *.distUpgrade

((( パッケージ更新の確認 )))
$ sudo apt upgrade -U

UPS交換(Linux 7.0による警告対策)

UPSが大量の警告

Ubuntu 26.04 の導入により Linux の Kernel も linux-image-7.0.0-14-generic になったが、移行後の Load Average が高い。

原因を調べると(後述)、apcupsd で kernel が以下の警告を毎秒くらいの頻度で出ている。APC ES 750 を使っているけど、4byte の返答があるはずなのに2byteしか返ってこないという内容らしい。このため、syslog のファイル出力でシステム負荷が 0.4 ほどに上がっている。

4月 24 23:05:29 ... kernel: hid-generic ...
   :Event data for report 22 was too short (4 vs 2)

以前の Kernel なら、同様のエラーはでていたのかもしれないが、syslog に警告を記録していなかったから、問題にはならなかった。Kernel が 7.0 になり、この辺の対応がきちんとするようになったのが原因のようだ。

しかたがないので、syslog でこのメッセージを記録しないように設定したけど、それでも 負荷が 0.2 ほどになる。

以前の Kernel なら、0.1 程度だったので、 なんとなくヤな感じ。

負荷の原因の見つけ方

今回、UPS の原因を見つけるにあたり、Gemini を活用しまくり。top の出力を Gemini にかけて、pidstat, vmstat などの結果を確認して…の繰り返し。

$ top
$ htop               # あまり重い処理がみつからない
$ sudo pidstat 2 5   # 2秒おきの集計を5回表示
$ sudo vmstat 1 5    # 負荷の原因が、計算かディスク待ちか
$ sudo iotop -o      # どのプロセスが入出力しているか
                     # ここで、systemd-jounald が原因というのが判明
$ sudo journalctl -f # Syslog を確認
                     # ここで、UPS のログが見つかる

UPSのエラー対策

UPS のエラー警告だけど、UPS の状況を確認すると、apcaccess コマンドの結果が、「ONLINE:つながってるけど NOBATT:バッテリーがつながっていない」との出力がでている。充電電圧も出力されていてバッテリーは動いているはずなのに…。Gemini に聞いても「UPS のよくある故障だし、Syslog を無視するようにして問題なく、他の機能が正しく動いているなら無視していい」とのアドバイス。

$ apcaccess
:
STARTTIME: 2026-04-24 17:54:04 +0900
MODEL    : APC ES 750G
STATUS   : ONLINE NOBATT

Syslog をフィルタリングしてディスクI/Oが改善しているとはいえ、以前より負荷が高い状態は気持ち悪いので、USPを交換した際の予備(バッテリー交換済み APC ES 550)があったので、元に戻した。

交換したら、UPS の警告は出なくなり、Syslog フィルタリング処理も不要になって、負荷も 0.1 程度に落ち着いたので、これで良し!!

Ubuntu 26.04 LTS リリース

Ubuntu 26.04 LTS が4/23にリリースされた(る?)。

ひとまずお試しと思うが、4/23 21:00 (JST) では、do-release-upgrade を実行しても、何も起こらない。

do-release-upgrade –devel-release

ということで、数時間フライング。ただし、影響を気にして WSL 環境に入れる。Windows App 的には、Ubuntu 24.04 なんだけど、Ubuntu 25.10 に更新済み。んで、今回の更新で Ubuntu 26.04 LTS となる。

$ sudo apt upgrade -U
$ sudo do-release-upgrade --devel-release
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 26.04 LTS"
NAME="Ubuntu"
VERSION_ID="26.04"
VERSION="26.04 (Resolute Raccoon)"
:

メインサーバの更新は一苦労

WSL 環境は、無事に 26.04 に更新できたので、メインの自宅サーバを更新。

ただ、こっちは面倒だった。サーバは、複数のネットワークインタフェースを Policy-routing させているけど、パッケージ更新中に netplan の関係で、インターネットにつながる設定を消してしまったのか、途中でネットワークが切れ、do-release-upgrade の最中に reboot せざるおえなくなった。

なんとか、復帰させたのはいいけど、最後は apache2 + wordpress のトラブル。

WordPress を起動したけど、データベース接続エラーが出てしまう。確認をすすめると、mariadb が後方互換で datadir = /var/lib/mysql で動いていたけど、datadir = /var/lib/mariadb がデフォルトの設定にされていた。いろいろ試していたけど、/var/lib/mysql の中身をごっそり /var/lib/mariadb にコピーしなおして無事復旧。

do-release-upgrade の最中に reboot したから、mariadb の正しい移行に失敗したんだろうな。

dmarc=fail p=none の受け取り拒否

自宅メールサーバでは、Postfix + Postgrey + amavisd + OpenDMARC + Spamassassin で運用しているが、
From 偽装は OpenDMARC で reject などができるようになった。

しかしながら、spammer は dmarc=fail 判定されても相手にメールが届くようにするため、ポリシー p=none のドメイン名探し、そのドメイン名を From にして、しつこく何度も送ってくる。

特定ドメインの dmarc=fail, p=none は受け取り拒否

しかたがないので、Postfix の OpenDMARC判定後に Postfix の header_checks の機能で p=none で送られてきたドメインは REJECT するようにしてみた。

((( /etc/postfix/main.cf )))
header_checks = regexp:/etc/postfix/header_checks

((( /etc/postfix/header_checks )))
/^Authentication-Results:.*dmarc=fail.*p=none.*header\.from=monex\.com/ \
        REJECT DMARC authentication failed for specific domain.

spammerは怪しいドメインを次々みつけてくる

header_checks で運用してたけど、spammer は次々と怪しいドメイン(p=noneのドメイン)を見つけてきて、すり抜けてくるメールを送ってくる。このままじゃ、header_checks ファイルを日々更新することになりそう。

しかたがないので、dmarc=fail, p=none は SpamAssassin で Spam スコアを上げて、迷惑メールに確実に落とすことを目標にしたほうが良さそう。

((( /etc/spamassassin/local.cf の末尾に追記 )))
# DMARC失敗 (p=none) を検知するルール
header   LOCAL_DMARC_FAIL_NONE  Authentication-Results =~ /dmarc=fail \(p=none/
describe LOCAL_DMARC_FAIL_NONE  DMARC validation failed with p=none
score    LOCAL_DMARC_FAIL_NONE  3.5

# (参考) DMARC失敗 (p=quarantine) の場合もスコアを上げたい場合
header   LOCAL_DMARC_FAIL_QUAR  Authentication-Results =~ /dmarc=fail \(p=quarantine/
describe LOCAL_DMARC_FAIL_QUAR  DMARC validation failed with p=quarantine
score    LOCAL_DMARC_FAIL_QUAR  5.0

DMARCレポートの修正

DMARCレポートを出力

最近、dmarc のメールが届かないと思ってたら、中で使っている munpack がインストールされていない。インストールしようにも apt で見つからない。Ubuntu/debian のパッケージから消えたようだ。Gemini に代替品を聞いたら ripmime を紹介される。

((( ripmime をインストール )))
$ sudo apt install ripmime

((( 修正 )))
  # 標準入力のメールから添付ファイルを抽出
- system( "/usr/bin/munpack -q -C $tmpdir > /dev/null 2>&1" ) ;
+ system( "/usr/bin/ripmime -q -i - -d $tmpdir > /dev/null 2>&1" ) ;

ついでに、DMARC のポリシーを p=quarantine から p=reject に変更しておいた。

spam が google などのクラウドばっかり

自宅サーバへの spam は、spamassasin などでかなり除去できるようにしてあるけど、それでも相変わらず届いている。送り元の IP アドレスを調べて 完全拒否などもしているけど、それでも届くのか。

送り元の確認

あらためて、送り元を確認したら、google クラウドサーバとか amazon クラウド。IPアドレスでは消せないなぁ。

$ cd ~/Maildir/.Junk/cur
$ grep "Received: from" * \
  | grep -v 127. \
  | awk -F [][] '{print $2}' \  [,]を区切り文字として真ん中を取り出す
  | sort | uniq -c | sort -r
      6 202.238.198.26
      1 54.169.135.62
      1 52.76.242.183
      1 35.236.54.228
      1 35.236.40.141
      1 35.226.131.57
      1 34.96.185.118
      1 34.176.225.88
      1 34.163.22.216
      1 34.155.225.82
         :

OpenDMARC fail で消せばいい

メール確認してたら、OpenDMARC が fail 返しているじゃん。こんなの Reject されてると思ってたけど、

“Authentication-Results: OpenDMARC; dmarc=fail (p=reject dis=none) header.from=monex.co.jp”

opendmarc.conf を確認したら、デフォルトのままで reject してなかった。ということで reject するように設定変更。

((( /etc/opendmarc.conf )))
# 認証に失敗したメールを拒否するように変更
RejectFailures true

$ sudo systemctl restart opendmarc

職場からのメールは、fukui-nct.ac.jp 発信のメールが、fukui.kosen-ac.jp で届くので、dmarc=fail で失敗判定なんだけど (p=none) なので、普通に届く。

んで、自宅ドメインは…. p=quarantine 「隔離」設定になってるな。そろそろ reject「拒否」にしてもいいかも。

squidからtinyproxyに移行

Squid が遅い

Poicy Routing を導入して proxy 経由のアクセスを別ポートにすることができたけど、squid で動かしている中で、speed test を実行すると、何もなしで 1Gbps 近くでるものの、Proxy 経由にすると squid の性能が低いためか、10Mbps 程度しかでない。

tinyproxy をインストール

あまりにも遅いので、Squid 以外の Proxy サーバを探す。proxy による caching 効果は最近はほとんどないので、proxy パケットを捌くだけのものを調べると HAproxy が高性能らしいけど、reverse proxy 用途で設定がややこしそう。tinyproxy も候補にあがったので、こちらを導入

((( tinyproxy をインストール )))
$ sudo apt remove squid
$ sudo apt install tinyproxy

((( /etc/tinyproxy/tinyproxy.conf )))
User tinyproxy
Group tinyproxy
Port 3128          # squid 互換の proxy ポート
Bind 192.168.1.51  # outgoing ポートを 専用ポートにする
Timeout 600
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
LogFile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Info
PidFile "/run/tinyproxy/tinyproxy.pid"
MaxClients 100

Allow 127.0.0.1
Allow ::1
Allow 192.168.11.0/24

ViaProxyName "tinyproxy"

Google 検索

My Google   Yahoo

Microsoft

ファンサイト

メタ情報