~ある日突然 SNMP が動かしたくなったが、他人の記事を信じるだけでは難しい~
突然 SNMP を動かしたくなること、ありますよねぇ。
そんなわけでとりあえずよさげなサイトを踏んで書いてある通りにパッケージをインストール、config のセットアップをしてみる。
systemctl start snmpd
systemctl start snmptrapd
で立ちあげようとすると、後者の snmptrapd が動かない。
journalctl から原因を調べてみると、fopen でエラーを吐いているらしい。
何も設定しない config のまま start したら立ち上がるので、投入した config から問題を探すことに。ファイルっぽいものといえば、pidFile /var/log/snmptrapd.pid
なので、これを除いてみると……動く。
ではこれをどうすればいいんだというところだが、 snmptrapd.pid を作っている /var/run (最近は /run へリダイレクトしてるのでそっちのほうがいいらしい)のディレクトリへファイルを作成する権利がないのが原因のよう。
chatgpt はすべてを解決してくれるので投げてみたら、/tmp/snmptrapd.pid
へ置くのがいいよ(実運用なら /run 配下にあるほうがいいけどね)ということで、一旦 pid File /tmp/snmptrapd.pid
へ置いてみたら、なるほど動いた。
う~ん、気分悪いけど一旦これでいいか……ということでこれはこれでおしまい。
で、それぞれ start してもエラーを吐かずに動くようになったのはいいのだが、snmptrapd で snmp メッセージを localhost 向けに飛ばしてみても、どこにもログが出てこない。
インターネッツでは /var/log/messages
に出てくると書かれているが、いくら ls しても出てこない。
これも権限の問題だろうなぁと chatgpt に相談を投げかける。
何度か玉打ちをしてると、systemctl edit で明示的にログの出力先を指定してみれば?と帰ってきた。やってみた。ダメだった。その時のログの出力先の指定がこれ。
sudo mkdir -p /var/log/snmp
sudo touch /var/log/snmp/snmptrapd.log
sudo chown snmp:snmp /var/log/snmp/snmptrapd.log
sudo chmod 644 /var/log/snmp/snmptrapd.log
snmp user なんていないけどな~と思ったので、nobody:nogroup でとりあえず指定してみる。ちゃんと動かないのでその設定をしたことを chatgpt へ報告。
すると chatgpt は、ps で snmptrapd を動かしてるユーザってわかるよ、と教えてくれた。
ps -o user,group,cmd -p $(pgrep snmptrapd)
これは普通に知らなかった。実際打ち込んでみると、Debian-snmp なるユーザ名・グループ名で動いていることがわかった。
実はそもそも systemctl で動く daemon 達が それぞれのユーザで動いていることを知らなった。そんなこんなで、分かったユーザ名でファイルの所有者を変更して daemon-reload → restart すると、無事 log ファイルへメッセージのログが取れるように。幸せ。
linux のことをふんわりとしか知らないのでいい機会だな~と思いつつ作業をしていたが、今回は linux のためにこういうことを始めたわけではない。本来の目的は、再来週に待っているデスペの試験対策のため、データベースを使った遊びをやってみたかったのだ。
日曜の一日を消費して遊ぶには時間として痛手ではあるが、大変面白い知見が得られて嬉しいのは間違いない。
明日にはデータベースにつなげるとこまでできたらいいなぁ。
コメントを残す