Перехожу в порт и устанавливаю.
cd /usr/ports/net/mosquitto # make install clean ------------------------------ mosquitto-1.4.10 -------------------------------¬ ¦ ---------------------------------------------------------------------------¬ ¦ ¦ ¦+[x] WS MQTT over Websockets support ¦ ¦ ¦ L--------------------------------------------------------------------------- ¦ +------------------------------------------------------------------------------+ ¦ < OK > <Cancel> ¦ L-------------------------------------------------------------------------------
------------------------------- c-ares-1.12.0 ---------------------------------¬ ¦ ---------------------------------------------------------------------------¬ ¦ ¦ ¦+[x] CONFIG_INFO Add the ares_config_info patch ¦ ¦ ¦ ¦+[ ] DEBUG Build with debugging support ¦ ¦ ¦ ¦+[x] HIDE_SYMBOLS Hide internal library symbols ¦ ¦ ¦ ¦+[ ] OPTIMIZED_CFLAGS Build with compiler optimizations ¦ ¦ ¦ L--------------------------------------------------------------------------- ¦ +------------------------------------------------------------------------------+ ¦ < OK > <Cancel> ¦ L-------------------------------------------------------------------------------
---------------------------- libwebsockets-2.0.2 ------------------------------¬ ¦ ---------------------------------------------------------------------------¬ ¦ ¦ ¦+[x] HTTP2 HTTP protocol version 2.0 support ¦ ¦ ¦ ¦+[ ] HTTP_PROXY HTTP proxy support ¦ ¦ ¦ ¦+[ ] IPV6 IPv6 protocol support ¦ ¦ ¦ ¦+[ ] LIBEV High-performance events support via libev ¦ ¦ ¦ ¦+[ ] LIBUV Asynchronous I/O support via libuv ¦ ¦ ¦ ¦+[x] UNIX_SOCK Unix domain socket support ¦ ¦ ¦ ¦+[x] WEBSERVER Build and/or install internal web server ¦ ¦ ¦ L--------------------------------------------------------------------------- ¦ +------------------------------------------------------------------------------+ ¦ < OK > <Cancel> ¦ L-------------------------------------------------------------------------------
===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /usr/local/bin/mosquitto_passwd /usr/local/sbin/mosquitto /usr/local/lib/libmosquitto.so.1.4.10 This port has installed the following startup scripts which may cause these network services to be started at boot time. /usr/local/etc/rc.d/mosquitto If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://mosquitto.org/ ===> Cleaning for c-ares-1.12.0 ===> Cleaning for libwebsockets-2.0.2 ===> Cleaning for libuv-1.10.0 ===> Cleaning for mosquitto-1.4.10
Конфигурационный файл находиться /usr/local/etc/mosquitto/mosquitto.conf
С помощью утилиты mosquitto_passwd создаю файл паролей passwd с логином и паролем для подключения к серверу.
# mosquitto_passwd -c /usr/local/etc/mosquitto/passwd esp8266 Password: Reenter password:
Примеры использования утилиты mosquitto_passwd
Опции: -b Запуск в пакетном режиме. Это позволяет ввести пароль в командной строке, который может быть удобным, но должен использоваться с осторожностью, поскольку пароль будет отображаться в командной строке и в истории команд.
-c Создаёт новый файл паролей. Если файл уже существует, он будет перезаписан.
-D Удалит указанного пользователя из файла паролей.
-U Эта опция может использоваться для обновления/конвертации файла паролей с паролями обычного текста в файл с использованием хэшированных паролей. Он изменит указанный файл. Он не определяет, были ли хэшированы пароли, поэтому его использование в файле паролей, который уже содержит хэшированные пароли, будет генерировать новые хэши на основе старых хешей и сделает файл паролей непригодным для использования.
passwordfile Файл с паролями для изменения.
username Имя пользователя для добавления/обновления/удаления.
password Пароль для использования в пакетном режиме.
Запускаю mosquitto.
# /usr/local/etc/rc.d/mosquitto onestart
Проверяю
ps -ax | grep mosquitto 10552 ?? Ss 3:47,77 /usr/local/sbin/mosquitto -c /usr/local/etc/mosquitto/mosquitto.conf -d sockstat | grep 1883 nobody mosquitto 10552 3 tcp4 10.215.130.1:1883 *:* nobody mosquitto 10552 4 tcp4 10.215.130.1:1883 10.215.130.186:3387
Для запуска mosquitto при старте системы в rc.config добавил строку
mosquitto_enable="YES"
Для добавления в топики информации с датчиков температуры написал скрипт
#!/bin/sh while true do term0=`/usr/local/bin/digitemp_DS9097 -t 0 -q -c /usr/local/etc/digitemp.conf` term1=`/usr/local/bin/digitemp_DS9097 -t 1 -q -c /usr/local/etc/digitemp.conf` term2=`/usr/local/bin/snmpwalk -v1 -c ччччч_ro ХХХ.ХХХ.ХХХ.ХХХ .1.3.6.1.4.1.2021.2000.6.4.1.2.5.116.101.109.112.48.1 | awk -F'["]' '{ print $2 }'` /usr/local/bin/mosquitto_pub -h localhost -t sensors/ds18b20_0 -u temp -P pft,bcm -m $term0 /usr/local/bin/mosquitto_pub -h localhost -t sensors/ds18b20_1 -u temp -P pft,bcm -m $term1 /usr/local/bin/mosquitto_pub -h localhost -t sensors/ds18b20_2 -u temp -P pft,bcm -m $term2 sleep 6 done
Конструкция -F'[«]' изменяет разделитель awk с пробела по умолчанию на двойные кавычки.
Чтобы скрипт стартовал как демон написал с папке /usr/local/etc/rc.d ещё одни скрипт
#!/bin/sh # PROVIDE: mqtt # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: shutdown # # Add the following lines to /etc/rc.conf to enable mqtt: # # mqtt_enable="YES" # # . /etc/rc.subr name=mqtt rcvar=${name}_enable pidfile="/var/run/${name}.pid" command=/scripts/mqqt-temp start_cmd="${name}_start" stop_cmd="${name}_stop" status_cmd="${name}_status" mqtt_start() { /usr/sbin/daemon -P ${pidfile} -r -f $command } mqtt_stop() { if [ -e "${pidfile}" ]; then kill -s TERM `cat ${pidfile}` else echo "${name} is not running" fi } mqtt_status() { if [ -e "${pidfile}" ]; then echo "${name} is running as pid `cat ${pidfile}`" else echo "${name} is not running" fi } load_rc_config ${name} run_rc_command "$1"
rc скрипт не демонизирует процесс, для демонизации используется строка /usr/sbin/daemon
ссылки:
https://www.freebsd.org/cgi/man.cgi?query=daemon
https://serverfault.com/questions/873185/freebsd-rc-d-script-doesnt-start-as-a-daemon
https://poptechno.ru/kak-ispolzovat-neskolko-razdelitelej-v-awk/
http://snakeproject.ru/rubric/article.php?art=script_daemon_freebsd_28.05.2019
https://habr.com/ru/post/137857/