Homebrew でインストールされる zabbix-agent は ipv6 が有効になっていないので、毎回有効にして reinstall していて、その手順を再現しやすいようにまとめなおしたので、そのメモです。

確認環境

  • Homebrew 4.0.26-2-gc5cbe64
  • Homebrew/homebrew-core (git revision 6e16b5d07a7; last commit 2023-06-28)
  • zabbix 6.4.4
  • Apple M1 Pro の macOS Ventura 13.4.1 と Intel Mac の macOS Monterey 12.6.7

経緯

https://github.com/Homebrew/homebrew-core/pull/114076--enable-ipv6 の追加の pull request を出してみたら、 upstream に言った方が良いとコメントがついたので、 upstream に言ってみて、考えておく、という感じの返事をもらったので、 待っている間に pull request が自動クローズされてしまって、 そのことはコメントに追記できずに終わってしまいました。

そして、現在の zabbix 6.4.4 でもデフォルトでは --enable-ipv6 になっていないままなので、 自前ビルドで対応しています。

対応方法

今の Homebrew では、 brew edit した内容は HOMEBREW_NO_INSTALL_FROM_API=1 がないと反映されず、 そもそも使われなくなったからか、 /opt/homebrew/Library/Taps/homebrew/homebrew-core も自動更新されないようなので、以下のように自分で git pull する必要がありました。

Intel Mac だと /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core だったので、統一するために $(brew --repository homebrew/homebrew-core) を使いましたが、 M1 以降だけなら git -C /opt/homebrew/Library/Taps/homebrew/homebrew-core pull --prune --autostash で良さそうです。

--enable-ipv6 の追加は、 今までは vi で編集していたのですが、 sed で自動化しました。 本来なら別の行に追加する方が良いのですが、 sed での編集のしやすさを考えて、 --enable-agent の行への追加にしています。

そして HOMEBREW_NO_INSTALL_FROM_API=1--build-from-source をつけて brew reinstall zabbix しています。 -v --display-times は Intel Mac が遅くて進んでいるかどうかわかりにくかったのでつけています。

#!/bin/bash
set -euxo pipefail
git -C $(brew --repository homebrew/homebrew-core) pull --prune --autostash
HOMEBREW_EDITOR="sed -i '' -e 's/--enable-agent/--enable-agent --enable-ipv6/'" brew edit zabbix
HOMEBREW_NO_INSTALL_FROM_API=1 brew reinstall zabbix --build-from-source -v --display-times
HOMEBREW_EDITOR="sed -i '' -e 's/--enable-agent --enable-ipv6/--enable-agent/'" brew edit zabbix

zabbix-agent の自動起動設定

~/Library/LaunchAgents/com.zabbix.agentd.plist を用意して、

launchctl unload ~/Library/LaunchAgents/com.zabbix.agentd.plist
launchctl load -w ~/Library/LaunchAgents/com.zabbix.agentd.plist

で再起動しています。 load -w のタイミングで許可のダイアログが出て許可したら更新完了です。

com.zabbix.agentd.plist は以下のような内容にしています。 zabbix_agentd のパスは Intel Mac だと /usr/local/sbin/zabbix_agentd でした。

zabbix_agentd.conf はどこでも好きな場所に置けば良さそうです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<key>Label</key>
		<string>com.zabbix.agentd</string>
		<key>ProgramArguments</key>
		<array>
			<string>/opt/homebrew/sbin/zabbix_agentd</string>
			<string>-f</string>
			<string>-c</string>
			<string>/Users/kazu/zabbix-agentd/zabbix_agentd.conf</string>
		</array>
		<key>RunAtLoad</key>
		<true/>
	</dict>
</plist>

zabbix_agentd.conf

zabbix_agentd.conf は以下のような感じで設定しています。

% grep -E '^[^#]' ~/zabbix-agentd/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Server=127.0.0.1,10.20.19.0/24,fdcb:a987:6543:2022::/64
Hostname=knmbp21
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=knmbp21
TLSPSKFile=/Users/kazu/zabbix-agentd/knmbp21.psk

感想

できるだけ環境を IPv6 のみにしていく途中で、ひっかかっている場所のひとつがこの zabbix-agent の formula です。

deb パッケージなどは Debian や Ubuntu 配布のものも、 zabbix 配布のものも --enable-ipv6 でビルドされているので、 そのまま使えています。 なので、 zabbix のメジャーバージョンアップかどこかで、 デフォルトで zabbix-agent も IPv6 対応になって、 問題のある環境で --disable-ipv6 するだけになればいいのに、 と思いつつ、 今は Homebrew では手動でビルドを続けています。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published