Category tech.

Raspberry Pi で Wi-Fi が一度切れると二度と繋がらない、という現象に遭遇した。しかたないので変なことをした。

#!/bin/sh

msg() {
        echo $1
        logger $1
}

while true
do
        if ifconfig wlan0 | grep -q "inet addr:"; then
                sleep 60
        else
                msg "Network connection down! Attempting reconnection."
                ifdown --force wlan0
                sleep 5
                ifup wlan0
                /etc/init.d/dhcpcd reload
                sleep 30
        fi
done

ifplugd とかも触ってみたけど、これが結局確実っぽい。なんかどうも dhcpd が ifup 時に反応してくれなくて、手動で reload してる。うーん。もっと一発で解決する方法があればいいんだけど……

ref

  1. トップ
  2. tech
  3. Raspberry Pi の Wi-Fi 自動再接続

systemd になって inittab が消滅したので途方にくれましたが以下のようにするとできました。

serial ログイン

UART ピンからのログインの場合

sudo vim /lib/systemd/system/serial-getty@.service
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM

となっているので

ExecStart=-/sbin/agetty -a pi --keep-baud 115200,38400,9600 %I $TERM

とする。

なお、この状態でシェルで reset を実行すると halt や reboot がハングするようになる。謎…… reset を殺して対応してるけど理由がわからなくて気持ちわるい。systemd がおかしいのだろうか?

console ログイン

ssh 経由とかの場合。

sudo raspi-config から設定可能です。なので基本的には raspi-config でやったほうがよさそう。

以下は手動でやる方法

sudo vim /lib/systemd/system/getty@.service 
ExecStart=-/sbin/agetty --noclear %I $TERM

となっているので、以下のように

ExecStart=-/sbin/getty --noclear -a pi %I $TERM
  1. トップ
  2. tech
  3. Raspberry Pi 3 で自動ログイン

mackerel にメトリクスとして送る

mackerel-plugin-h2o みたいなのは今のところないっぽい? ので、status/json からとれる内容をポストするプラグインを書いた。

https://github.com/cho45/mackerel-agent-plugins/tree/mackerel-plugin-h2o/mackerel-plugin-h2o

mackerel プラグインの書きかた

他のプラグインにならって go-mackerel-plugin-helper を使ってみた。FetchMetrics の返り値でちょっと悩んだけど、以下のようにすればよさそう。

  • FetchMetrics ではとにかくとれる値をすべて map に詰めてかえす
  • GraphDefinition でグラフと値の関連付けを行う

GraphDefinition に含まれないメトリクスは、FetchMetrics で map に詰めても送信されない。これが最初理解できてなかったので、FetchMetrics でややこしいことをやってしまったりした。

  1. トップ
  2. tech
  3. h2o の status/json を mackerel に送る