На Raspberry Pi 3 у меня накручена хитрая система из Zabbix, libzbxmodbus и Grafana с плагинами. Эдакий автономный регистратор параметров по шине modbus.
С первыми тремя пунктами проблем пока нет, а вот с четвёртым появились после обновления плагина Zabbix до версии 4.0.
Раньше этот плагин был чисто на скриптах и работал без изменения практически на любой платформе, но в 4-й версии у плагина появилась программа-backend для ускорения работы, увеличения безопасности и прочих плюшек. Задумка хорошая, но проблема в том, что в пакете с сайта бинарная сборка только под 64-битные системы Linux, Windows и Darwin/MacOS да еще и без подписи. То есть после обновления у меня ничего не заработало.
Если не работает релиз, то будем собирать из исходников сами. Благо, что всё необходимое есть в репозитории на GitHub. Даже инструкция есть, но она немного неточная.
Для сборки нужны два компонента: NodeJS LTS и компилятор языка Go.
Установка NodeJS LTS из репозиториев описана в этой инструкции.
Теперь о неточности. Ставить yarn вручную не надо, потому что для этой программы тоже есть готовый репозиторий.
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt update sudo apt install yarn
Для установки компиляторя языка Go нужно скачать архив для архитектуры ARM со страницы загрузки.
Я распаковал архив в каталог "/opt" и прописал переменные окружения в файле "/etc/profile.d/golang.sh":
export GOROOT=/opt/go export GOPATH=$HOME/go export PATH=${PATH}:${GOROOT}/bin export PATH=${PATH}:${GOPATH}/bin
Теперь по инструкции необходимо склонировать репозиторий с исходными текстами и всё собрать.
git clone https://github.com/alexanderzobnin/grafana-zabbix cd grafana-zabbix yarn install --pure-lockfile yarn build # Или просто запустить make make
Если оперативной памяти хватит, то всё соберётся, но работать опять же не будет. У меня на Raspberry Pi 3 сборка завершалась ошибкой по причине недостатка памяти, на Raspberry Pi 4 с 4 гигабайтами всё собралось.
Работать не будет, потому что бинарник-backend всё равно собрался под amd64, но под нужную платформу можно собрать вручную следующими командами:
go mod vendor # ARMv5 (Raspberry Pi 1) env GOOS=linux GOARCH=arm GOARM=5 go build -mod=vendor -o ./dist/zabbix-plugin_linux_arm ./pkg # ARMv7 (Raspberry Pi 2 и выше) env GOOS=linux GOARCH=arm GOARM=7 go build -mod=vendor -o ./dist/zabbix-plugin_linux_arm ./pkg # ARMv8 (Raspberry Pi 3 и выше) env GOOS=linux GOARCH=arm64 go build -mod=vendor -o ./dist/zabbix-plugin_linux_arm ./pkg
Теперь содержимое каталога "dist" необходимо перенести в "/var/lib/grafana/plugins/alexanderzobnin-zabbix-app" и прописать в файле "/etc/grafana/grafana.ini" параметр для разрешения загрузки неподписанных плагинов:
[plugins] ... allow_loading_unsigned_plugins = alexanderzobnin-zabbix-app,alexanderzobnin-zabbix-datasource
Теперь надо перезапустить Grafana и убедиться, что "zabbix-plugin_linux_arm" есть в списке процессов, а в Grafana источник данных "Zabbix" не отмечен неизестным.