物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

mackerel の go-check-plugins をUbuntuで使えるようにする

Mackerel の チェックプラグイン をUbuntuで使ってみる。

例としてcheck-ping を使えるようにする。公式のInstallationは機能しないので、以下の手順でインストールする。

  1. $HOME/.profile に go と goでインストールしたパッケージのPATHを export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin で追記し、source で読み込む
  2. go 1.20 以上を手動で入れる
    • wget https://go.dev/dl/go1.20.14.linux-amd64.tar.gz
    • sudo tar -C /usr/local -xzf go1.20.14.linux-amd64.tar.gz
  3. go install
    • go install github.com/mackerelio/go-check-plugins@latest 依存関係が全てダウンロードされる
    • cd ~/go/pkg/mod/github.com/mackerelio/go-check-plugins@v0.46.3/check-ping バージョン名は現時点のもの
    • go install
  4. check-ping を実行

以上

Raspberry pi 4 は arm64 で。 mackerel-agent-plugins も同じ方法でインストール可能。


以下、試行錯誤の履歴。

WSLのバージョン確認

physics@ONSA016:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

github.com

ここに書いている通り、apt-get install mackerel-check-plugins で入れてみよう

physics@ONSA016:~$ sudo apt update
physics@ONSA016:~$ sudo apt-get install mackerel-check-plugins
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package mackerel-check-plugins

パッケージが見つかりませんね。

次に、goでインストールしてみよう。

github.com

ここに書いてある方法で試す。まずはgoのインストール。

physics@ONSA016:~$ sudo apt install golang
physics@ONSA016:~$ go version
go version go1.18.1 linux/amd64

go の 1.18 が入りました。指示通り github.com/mackerelio/go-check-plugins からリポジトリを取得すると・・・

physics@ONSA016:~$ go get github.com/mackerelio/go-check-plugins
go: go.mod file not found in current directory or any parent directory.
        'go get' is no longer supported outside a module.
        To build and install a command, use 'go install' with a version,
        like 'go install example.com/cmd@latest'
        For more information, see https://golang.org/doc/go-get-install-deprecation
        or run 'go help get' or 'go help install'.

go install example.com/cmd@latest とやれ言ってくる。大人しくやってみよう。

physics@ONSA016:~$ go install github.com/mackerelio/go-check-plugins@latest
go: downloading github.com/mackerelio/go-check-plugins v0.46.3
go: downloading github.com/jessevdk/go-flags v1.5.0
go: downloading github.com/mackerelio/checkers v0.2.0
go: downloading github.com/aws/aws-sdk-go v1.47.9
go: downloading github.com/go-ldap/ldap/v3 v3.4.8
go: downloading github.com/shirou/gopsutil/v3 v3.23.10
go: downloading github.com/mackerelio/golib v1.2.1
go: downloading github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822
go: downloading github.com/mattn/go-encoding v0.0.2
go: downloading github.com/mattn/go-zglob v0.0.4
go: downloading github.com/natefinch/atomic v1.0.1
go: downloading golang.org/x/text v0.14.0
go: downloading github.com/miekg/dns v1.1.50
go: downloading github.com/beevik/ntp v1.3.1
go: downloading github.com/go-sql-driver/mysql v1.7.1
go: downloading github.com/jmoiron/sqlx v1.3.5
go: downloading github.com/lib/pq v1.10.9
go: downloading golang.org/x/crypto v0.22.0
go: downloading github.com/mackerelio/go-osstat v0.2.4
go: downloading github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
go: downloading github.com/gomodule/redigo v1.8.9
go: downloading golang.org/x/sys v0.19.0
go: downloading github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358
go: downloading github.com/go-asn1-ber/asn1-ber v1.5.5
go: downloading github.com/google/uuid v1.6.0
go: downloading golang.org/x/net v0.23.0
go: downloading github.com/jmespath/go-jmespath v0.4.0
# github.com/mackerelio/checkers
go/pkg/mod/github.com/mackerelio/checkers@v0.2.0/statusmap.go:62:24: undefined: strings.CutPrefix
go/pkg/mod/github.com/mackerelio/checkers@v0.2.0/statusmap.go:68:24: undefined: strings.CutPrefix
note: module requires Go 1.20

go 1.20 が必要だという。しょうがないので、インストールした go 1.18を削除して、go の公式ページから 1.20 をダウンロードする。

sudo apt remove golang
sudo apt autoremove
physics@ONSA016:~$ wget https://go.dev/dl/go1.20.14.linux-amd64.tar.gz
physics@ONSA016:~$ sudo rm -rf /usr/local/go #初めてなら必要ない
physics@ONSA016:~$ sudo tar -C /usr/local -xzf go1.20.14.linux-amd64.tar.gz

$HOME/.profileexport PATH=$PATH:/usr/local/go/bin を追記

physics@ONSA016:~$ source $HOME/.profile
physics@ONSA016:~$ go version
go version go1.20.14 linux/amd64

よし、1.20がダウンロードできた。go install リポジトリ名@latest のコマンドを叩いても...

physics@ONSA016:~$ go install github.com/mackerelio/go-check-plugins@latest

何も起きない。WSLを入れ直して、go 1.20 をインストールすると

physics@ONSA016:~$ go install github.com/mackerelio/go-check-plugins@latest
go: downloading github.com/mackerelio/go-check-plugins v0.46.3
go: downloading github.com/jessevdk/go-flags v1.5.0
go: downloading github.com/mackerelio/checkers v0.2.0
go: downloading github.com/aws/aws-sdk-go v1.47.9
go: downloading github.com/mackerelio/golib v1.2.1
go: downloading github.com/natefinch/atomic v1.0.1
go: downloading github.com/go-ldap/ldap/v3 v3.4.8
go: downloading github.com/bradfitz/gomemcache v0.0.0-20221031212613-62deef7fc822
go: downloading github.com/go-sql-driver/mysql v1.7.1
go: downloading github.com/jmoiron/sqlx v1.3.5
go: downloading github.com/beevik/ntp v1.3.1
go: downloading github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
go: downloading github.com/lib/pq v1.10.9
go: downloading golang.org/x/text v0.14.0
go: downloading github.com/mattn/go-encoding v0.0.2
go: downloading github.com/mattn/go-zglob v0.0.4
go: downloading github.com/gomodule/redigo v1.8.9
go: downloading golang.org/x/crypto v0.22.0
go: downloading github.com/mackerelio/go-osstat v0.2.4
go: downloading github.com/miekg/dns v1.1.50
go: downloading github.com/shirou/gopsutil/v3 v3.23.10
go: downloading golang.org/x/sys v0.19.0
go: downloading github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358
go: downloading github.com/go-asn1-ber/asn1-ber v1.5.5
go: downloading github.com/google/uuid v1.6.0
go: downloading golang.org/x/net v0.23.0
go: downloading github.com/jmespath/go-jmespath v0.4.0
physics@ONSA016:~/go$ ls
bin  pkg

となるが、 src ディレクトリができた形跡がない。

公式に go get が使える go 1.15 まで遡る。

physics@ONSA016:~$ wget https://go.dev/dl/go1.15.15.linux-amd64.tar.gz
physics@ONSA016:~$ sudo tar -C /usr/local -xzf go1.15.15.linux-amd64.tar.gz
physics@ONSA016:~$ go version
go version go1.15.15 linux/amd64
physics@ONSA016:~$ sudo rm -rf /home/physics/go
physics@ONSA016:~$ go get github.com/mackerelio/go-check-plugins
found packages unix (affinity_linux.go) and main (mkasm.go) in /home/physics/go/src/golang.org/x/sys/unix
found packages ipv4 (batch.go) and main (gen.go) in /home/physics/go/src/golang.org/x/net/ipv4
found packages ipv6 (batch.go) and main (gen.go) in /home/physics/go/src/golang.org/x/net/ipv6
package io/fs: unrecognized import path "io/fs": import path does not begin with hostname
found packages charmap (charmap.go) and main (maketables.go) in /home/physics/go/src/golang.org/x/text/encoding/charmap
found packages japanese (all.go) and main (maketables.go) in /home/physics/go/src/golang.org/x/text/encoding/japanese
found packages korean (all_test.go) and main (maketables.go) in /home/physics/go/src/golang.org/x/text/encoding/korean
found packages simplifiedchinese (all.go) and main (maketables.go) in /home/physics/go/src/golang.org/x/text/encoding/simplifiedchinese
found packages traditionalchinese (all_test.go) and main (maketables.go) in /home/physics/go/src/golang.org/x/text/encoding/traditionalchinese
found packages cases (cases.go) and main (gen.go) in /home/physics/go/src/golang.org/x/text/cases
found packages language (coverage.go) and main (gen.go) in /home/physics/go/src/golang.org/x/text/language
package crypto/ecdh: unrecognized import path "crypto/ecdh": import path does not begin with hostname

~/go/src にダウンロードできたっぽい。

パッケージ io/fs とか crypto/ecdh がないと怒られる。これは、go 1.15 には含まれない。このパッケージはgo1.16から含まれるが、他のエラーで go1.20 にしろと言われたので go1.20にする。

physics@ONSA016:~$ sudo rm -rf /usr/local/go
physics@ONSA016:~$ sudo tar -C /usr/local -xzf go1.20.14.linux-amd64.tar.gz
physics@ONSA016:~$ cd ~/go/src/github.com/mackerelio/go-check-plugins/check-ping
physics@ONSA016:~/go/src/github.com/mackerelio/go-check-plugins/check-ping$ go install
go: downloading github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
go: downloading github.com/mackerelio/checkers v0.2.0
go: downloading github.com/jessevdk/go-flags v1.5.0
go: downloading golang.org/x/net v0.23.0
go: downloading golang.org/x/sys v0.19.0

~/.profileexport PATH=$PATH:/usr/local/go/bin:$HOME/go/bin と修正

physics@ONSA016:~/go/bin$ source ~/.profile
physics@ONSA016:~/go/bin$ check-ping
Usage:
  check-ping [OPTIONS]

Application Options:
  -H, --host=      check target IP Address
  -n, --count=     sending (and receiving) count ping packets (default: 1)
  -w, --wait-time= wait time, Max RTT(ms) (default: 1000)

Help Options:
  -h, --help       Show this help message

check-ping が確かに実行できた。

go 1.20 で go install パッケージ名@latest でダウンロードされる先は

physics@ONSA016:~$ go env GOMODCACHE
/home/physics/go/pkg/mod

という情報を入手。確かにここにダウンロードされていたので、今回は github.com/mackerelio/go-check-plugins@v0.46.3/check-ping に移動して go install すれば良さそうだと分かる。

結局、一番上の方法でインストールできることが分かった。