[WIP] Allow multiple installations of same blueprint (#88)
* Multi-install support, Blueprints and config changes. Initial commit * Migrating jails to blueprints, first steps. Tested Working: - Transmission - Lidarr - Sonarr - Radarr fix lidarr config (+10 squashed commit) Squashed commit: [5f14653] always link ports folders [f18f2f0] Optional (blueprint) ports mount Fixes #89 [96ef7e7] chmod all the things [129e707] same mistake... again... [e1596dc] missing reference [6da3567] Forgot one reference [d78b5b6] Update wiki.yml [cecc53a] Update filecheck.yml [5244abd] basic settings changed. More involved blueprints still need changes, such as: Bitwarden, nextcloud, Mariadb [6568e92] jails -> blueprints * Added Tested Working: - KMS - Plex - Tautulli - Organizr - InfluxDB - MariaDB Many squashed small fixes included: Make *.rc executable (+13 squashed commit) Squashed commit: [b28aa83] use .rc for rc.d config files [e940a48] some mariadb cleanup [dc27aff] testing another way [83bd91b] Mariadb root password alter instead of update, initial config for unifi [0ca3074] some light config cleanup [a0d4352] also remove database from influxdb example config (db should be created when required) [2c218cc] Prepare influxdb and remove unneeded content [1b34109] more shellcheck fixups [c96566c] Some shellcheck cleanup [8969ca7] bitwarden mostly done, some work on nextcloud and unifi [7f89bfa] initial mariadb patch [dd7e85f] missed one problem [f814cb7] Initial pseudo-compatibility patch for unifi * Enable Bitwarden support and some small fixes/tweaks Fixes #95 more bugs and typo's (+3 squashed commit) Squashed commit: [3b5213e] Bitwarden not correctly installing db [b7438a5] yeah thats not gonna cut it... >.< [e7987c2] some slight bitwarden tweaks * Enable Unifi support and some small fixes/tweaks small unifi cleanup. Unifi is working (+3 squashed commit) Squashed commit: [d906d2d] chmod unifi [545e999] Add extra sanity, remove unneeded variables from example [b8c0b24] Some small Unifi Tweaks * Nextcloud Cleanup, Some fixes, Initial support for blueprintsystem Fixes #96 Fixes #97 Fixes #98 some bloat and syntax fixes (+5 squashed commit) Squashed commit: [78f6428] Some more nextcloud cleanup and tweaks - combines multiple variables for cert system selection (Fixes #98 ) - Default to self signed cert - Force manual admin password [7cacae4] slight fixes [3d81cda] More cleanup [50496cc] small mariadb fix and more nextcloud cleanup [c1b2c20] Cleaning nextcloud - Remove external DB (Fixes #97 ) - Remove Postgresql (Fixes #96 ) - Some preparation for blueprint * Nextcloud done and.. another... (+5 squashed commit) Squashed commit: [c65751b] caddy not installed right. [e5da66b] more fixes [a33300e] Damnit, two typo's same scentence [4292a7a] another typo [1b820cf] typo and example hotfix * Introduce version checking for config file
This commit is contained in:
committed by
GitHub
parent
66e997069a
commit
dbfbd489fa
3
blueprints/unifi/config.yml
Normal file
3
blueprints/unifi/config.yml
Normal file
@ -0,0 +1,3 @@
|
||||
blueprint:
|
||||
unifi:
|
||||
pkgs: jq unifi5
|
45
blueprints/unifi/includes/mongodb.conf
Normal file
45
blueprints/unifi/includes/mongodb.conf
Normal file
@ -0,0 +1,45 @@
|
||||
# mongod.conf
|
||||
|
||||
# for documentation of all options, see:
|
||||
# http://docs.mongodb.org/manual/reference/configuration-options/
|
||||
|
||||
# where to write logging data.
|
||||
systemLog:
|
||||
destination: file
|
||||
logAppend: true
|
||||
path: /var/db/mongodb/mongod.log
|
||||
|
||||
# Where and how to store data.
|
||||
storage:
|
||||
dbPath: /config/mongodb
|
||||
journal:
|
||||
enabled: true
|
||||
# engine:
|
||||
# mmapv1:
|
||||
# wiredTiger:
|
||||
|
||||
# how the process runs
|
||||
processManagement:
|
||||
fork: true # fork and run in background
|
||||
pidFilePath: /var/db/mongodb/mongod.lock # location of pidfile
|
||||
timeZoneInfo: /usr/share/zoneinfo
|
||||
|
||||
# network interfaces
|
||||
net:
|
||||
port: 27017
|
||||
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
|
||||
|
||||
|
||||
#security:
|
||||
|
||||
#operationProfiling:
|
||||
|
||||
#replication:
|
||||
|
||||
#sharding:
|
||||
|
||||
## Enterprise-Only Options
|
||||
|
||||
#auditLog:
|
||||
|
||||
#snmp:
|
64
blueprints/unifi/includes/rc/mongod.rc
Executable file
64
blueprints/unifi/includes/rc/mongod.rc
Executable file
@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046,SC2086,SC2155,SC2181,SC2006
|
||||
|
||||
# PROVIDE: mongod
|
||||
# REQUIRE: NETWORK ldconfig
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
|
||||
# to enable this service:
|
||||
#
|
||||
# mongod_enable (bool): Set to "NO" by default.
|
||||
# Set it to "YES" to enable mongod.
|
||||
# mongod_limits (bool): Set to "NO" by default.
|
||||
# Set it to yes to run `limits -e -U mongodb`
|
||||
# just before mongod starts.
|
||||
# mongod_dbpath (str): Default to "/var/db/mongodb"
|
||||
# Base database directory.
|
||||
# mongod_flags (str): Custom additional arguments to be passed to mongod.
|
||||
# Default to "--logpath ${mongod_dbpath}/mongod.log --logappend".
|
||||
# mongod_config (str): Default to "/usr/local/etc/mongodb.conf"
|
||||
# Path to config file
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="mongod"
|
||||
rcvar=mongod_enable
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
: ${mongod_enable="NO"}
|
||||
: ${mongod_limits="NO"}
|
||||
: ${mongod_dbpath="/config/mongodb"}
|
||||
: ${mongod_flags="--logpath ${mongod_dbpath}/mongod.log --logappend --setParameter=disabledSecureAllocatorDomains=\*"}
|
||||
: ${mongod_user="mongodb"}
|
||||
: ${mongod_group="mongodb"}
|
||||
: ${mongod_config="/usr/local/etc/mongodb.conf"}
|
||||
|
||||
pidfile="${mongod_dbpath}/mongod.lock"
|
||||
command=/usr/local/bin/${name}
|
||||
command_args="--config $mongod_config --dbpath $mongod_dbpath --fork >/dev/null 2>/dev/null"
|
||||
start_precmd="${name}_prestart"
|
||||
|
||||
mongod_create_dbpath()
|
||||
{
|
||||
mkdir "${mongod_dbpath}" >/dev/null 2>/dev/null
|
||||
[ $? -eq 0 ] && chown -R "${mongod_user}":"${mongod_group}" "${mongod_dbpath}"
|
||||
}
|
||||
|
||||
mongod_prestart()
|
||||
{
|
||||
if [ ! -d "${mongod_dbpath}" ]; then
|
||||
mongod_create_dbpath || return 1
|
||||
fi
|
||||
if checkyesno mongod_limits; then
|
||||
# TODO check this and clean this up
|
||||
# Shellcheck disable=SC2046,SC2006
|
||||
eval `/usr/bin/limits -e -U ${mongod_user}` 2>/dev/null
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
87
blueprints/unifi/includes/rc/unifi.rc
Executable file
87
blueprints/unifi/includes/rc/unifi.rc
Executable file
@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046,SC2086,SC2155,SC2237
|
||||
#
|
||||
# Created by: Mark Felder <feld@FreeBSD.org>
|
||||
# $FreeBSD: branches/2020Q2/net-mgmt/unifi5/files/unifi.in 512281 2019-09-18 17:37:59Z feld $
|
||||
#
|
||||
|
||||
# PROVIDE: unifi
|
||||
# REQUIRE: LOGIN
|
||||
# KEYWORD: shutdown
|
||||
|
||||
#
|
||||
# Add the following line to /etc/rc.conf to enable `unifi':
|
||||
#
|
||||
# unifi_enable="YES"
|
||||
#
|
||||
# Other configuration settings for unifi that can be set in /etc/rc.conf:
|
||||
#
|
||||
# unifi_user (str)
|
||||
# This is the user that unifi runs as
|
||||
# Set to unifi by default
|
||||
#
|
||||
# unifi_group (str)
|
||||
# This is the group that unifi runs as
|
||||
# Set to unifi by default
|
||||
#
|
||||
# unifi_chdir (str)
|
||||
# This is the directory that unifi chdirs into before starting
|
||||
# Set to /usr/local/share/java/unifi by default
|
||||
#
|
||||
# unifi_java_home (str)
|
||||
# The path to the base directory for the Java to use to run unifi
|
||||
# Defaults to /usr/local/openjdk8
|
||||
#
|
||||
# unifi_javaflags (str)
|
||||
# Flags passed to Java to run unifi
|
||||
# Set to "-Djava.awt.headless=true -Xmx1024M" by default
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
name=unifi
|
||||
|
||||
rcvar=unifi_enable
|
||||
load_rc_config ${name}
|
||||
|
||||
: ${unifi_enable:=NO}
|
||||
: ${unifi_user:=unifi}
|
||||
: ${unifi_group:=unifi}
|
||||
: ${unifi_chdir=/config/controller/unifi}
|
||||
: ${unifi_java_home=/usr/local/openjdk8}
|
||||
: ${unifi_javaflags="-Djava.awt.headless=true -Xmx1024M"}
|
||||
|
||||
pidfile="/var/run/unifi/${name}.pid"
|
||||
procname=${unifi_java_home}/bin/java
|
||||
command=/usr/sbin/daemon
|
||||
command_args="-f -p ${pidfile} ${unifi_java_home}/bin/java ${unifi_javaflags} com.ubnt.ace.Launcher start"
|
||||
start_precmd=start_precmd
|
||||
stop_precmd=stop_precmd
|
||||
stop_postcmd=stop_postcmd
|
||||
|
||||
export CLASSPATH=$(echo ${unifi_chdir}/lib/*.jar | tr ' ' ':')
|
||||
|
||||
start_precmd()
|
||||
{
|
||||
if [ ! -e /var/run/unifi ] ; then
|
||||
install -d -o unifi -g unifi /var/run/unifi;
|
||||
fi
|
||||
}
|
||||
|
||||
stop_precmd()
|
||||
{
|
||||
if [ -r ${pidfile} ]; then
|
||||
_UNIFIPID=$(check_pidfile ${pidfile} ${procname})
|
||||
export _UNIFI_CHILDREN=$(pgrep -P ${_UNIFIPID})
|
||||
fi
|
||||
}
|
||||
|
||||
stop_postcmd()
|
||||
{
|
||||
if ! [ -z ${_UNIFI_CHILDREN} ]; then
|
||||
echo "Cleaning up leftover child processes."
|
||||
kill $sig_stop ${_UNIFI_CHILDREN}
|
||||
wait_for_pids ${_UNIFI_CHILDREN}
|
||||
fi
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
36
blueprints/unifi/includes/rc/unifi_poller.rc
Executable file
36
blueprints/unifi/includes/rc/unifi_poller.rc
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046
|
||||
#
|
||||
# FreeBSD rc.d startup script for unifi-poller.
|
||||
#
|
||||
# PROVIDE: unifi-poller
|
||||
# REQUIRE: networking syslog
|
||||
# KEYWORD:
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="unifi_poller"
|
||||
real_name="unifi-poller"
|
||||
rcvar="unifi_poller_enable"
|
||||
unifi_poller_command="/usr/local/bin/${real_name}"
|
||||
unifi_poller_user="nobody"
|
||||
unifi_poller_config="/config/up.conf"
|
||||
pidfile="/var/run/${real_name}/pid"
|
||||
|
||||
# This runs `daemon` as the `unifi_poller_user` user.
|
||||
command="/usr/sbin/daemon"
|
||||
command_args="-P ${pidfile} -r -t ${real_name} -T ${real_name} -l daemon ${unifi_poller_command} -c ${unifi_poller_config}"
|
||||
|
||||
load_rc_config ${name}
|
||||
: ${unifi_poller_enable:=no}
|
||||
|
||||
# Make a place for the pid file.
|
||||
mkdir -p $(dirname ${pidfile})
|
||||
chown -R $unifi_poller_user $(dirname ${pidfile})
|
||||
|
||||
# Suck in optional exported override variables.
|
||||
# ie. add something like the following to this file: export UP_POLLER_DEBUG=true
|
||||
[ -f "/usr/local/etc/defaults/${real_name}" ] && . "/usr/local/etc/defaults/${real_name}"
|
||||
|
||||
# Go!
|
||||
run_rc_command "$1"
|
106
blueprints/unifi/includes/up.conf
Normal file
106
blueprints/unifi/includes/up.conf
Normal file
@ -0,0 +1,106 @@
|
||||
# UniFi Poller v2 primary configuration file. TOML FORMAT #
|
||||
###########################################################
|
||||
|
||||
[poller]
|
||||
# Turns on line numbers, microsecond logging, and a per-device log.
|
||||
# The default is false, but I personally leave this on at home (four devices).
|
||||
# This may be noisy if you have a lot of devices. It adds one line per device.
|
||||
debug = false
|
||||
|
||||
# Turns off per-interval logs. Only startup and error logs will be emitted.
|
||||
# Recommend enabling debug with this setting for better error logging.
|
||||
quiet = true
|
||||
|
||||
# Load dynamic plugins. Advanced use; only sample mysql plugin provided by default.
|
||||
plugins = []
|
||||
|
||||
#### OUTPUTS
|
||||
|
||||
# If you don't use an output, you can disable it.
|
||||
|
||||
[prometheus]
|
||||
disable = true
|
||||
# This controls on which ip and port /metrics is exported when mode is "prometheus".
|
||||
# This has no effect in other modes. Must contain a colon and port.
|
||||
http_listen = "0.0.0.0:9130"
|
||||
report_errors = false
|
||||
|
||||
[influxdb]
|
||||
disable = false
|
||||
# InfluxDB does not require auth by default, so the user/password are probably unimportant.
|
||||
url = "dbip"
|
||||
user = "influxdbuser"
|
||||
pass = "influxdbpass"
|
||||
# Be sure to create this database.
|
||||
db = "unifidb"
|
||||
# If your InfluxDB uses a valid SSL cert, set this to true.
|
||||
verify_ssl = false
|
||||
# The UniFi Controller only updates traffic stats about every 30 seconds.
|
||||
# Setting this to something lower may lead to "zeros" in your data.
|
||||
# If you're getting zeros now, set this to "1m"
|
||||
interval = "30s"
|
||||
|
||||
#### INPUTS
|
||||
|
||||
[unifi]
|
||||
# Setting this to true and providing default credentials allows you to skip
|
||||
# configuring controllers in this config file. Instead you configure them in
|
||||
# your prometheus.yml config. Prometheus then sends the controller URL to
|
||||
# unifi-poller when it performs the scrape. This is useful if you have many,
|
||||
# or changing controllers. Most people can leave this off. See wiki for more.
|
||||
dynamic = false
|
||||
|
||||
# The following section contains the default credentials/configuration for any
|
||||
# dynamic controller (see above section), or the primary controller if you do not
|
||||
# provide one and dynamic is disabled. In other words, you can just add your
|
||||
# controller here and delete the following section.
|
||||
[unifi.defaults]
|
||||
#role = "main controller"
|
||||
url = "https://127.0.0.1:8443"
|
||||
user = "unifiuser"
|
||||
pass = "unifipassword"
|
||||
sites = ["all"]
|
||||
save_ids = false
|
||||
save_dpi = false
|
||||
save_sites = true
|
||||
verify_ssl = false
|
||||
|
||||
# The following is optional and used for configurations with multiple controllers.
|
||||
|
||||
# You may repeat the following section to poll multiple controllers.
|
||||
#[[unifi.controller]]
|
||||
# Friendly name used in dashboards. Uses URL if left empty; which is fine.
|
||||
# Avoid changing this later because it will live forever in your database.
|
||||
# Multiple controllers may share a role. This allows grouping during scrapes.
|
||||
#role = ""
|
||||
#url = "https://127.0.0.1:8443"
|
||||
|
||||
# Make a read-only user in the UniFi Admin Settings, allow it access to all sites.
|
||||
#user = "unifipoller"
|
||||
#pass = "4BB9345C-2341-48D7-99F5-E01B583FF77F"
|
||||
|
||||
# If the controller has more than one site, specify which sites to poll here.
|
||||
# Set this to ["default"] to poll only the first site on the controller.
|
||||
# A setting of ["all"] will poll all sites; this works if you only have 1 site too.
|
||||
#sites = ["all"]
|
||||
|
||||
# Enable collection of Intrusion Detection System Data (InfluxDB only).
|
||||
# Only useful if IDS or IPS are enabled on one of the sites.
|
||||
#save_ids = false
|
||||
|
||||
# Enable collection of Deep Packet Inspection data. This data breaks down traffic
|
||||
# types for each client and site, it powers a dedicated DPI dashboard.
|
||||
# Enabling this adds roughly 150 data points per client. That's 6000 metrics for
|
||||
# 40 clients. This adds a little bit of poller run time per interval and causes
|
||||
# more API requests to your controller(s). Don't let these "cons" sway you:
|
||||
# it's cool data. Please provide feedback on your experience with this feature.
|
||||
#save_dpi = false
|
||||
|
||||
# Enable collection of site data. This data powers the Network Sites dashboard.
|
||||
# It's not valuable to everyone and setting this to false will save resources.
|
||||
#save_sites = true
|
||||
|
||||
# If your UniFi controller has a valid SSL certificate (like lets encrypt),
|
||||
# you can enable this option to validate it. Otherwise, any SSL certificate is
|
||||
# valid. If you don't know if you have a valid SSL cert, then you don't have one.
|
||||
#verify_ssl = false
|
117
blueprints/unifi/install.sh
Executable file
117
blueprints/unifi/install.sh
Executable file
@ -0,0 +1,117 @@
|
||||
#!/usr/local/bin/bash
|
||||
# This file contains the install script for unifi-controller & unifi-poller
|
||||
|
||||
# Initialize variables
|
||||
# shellcheck disable=SC2154
|
||||
JAIL_IP="jail_${1}_ip4_addr"
|
||||
JAIL_IP="${!JAIL_IP%/*}"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
DB_JAIL="jail_${1}_db_jail"
|
||||
|
||||
POLLER="jail_${1}_unifi_poller"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
DB_IP="jail_${!DB_JAIL}_ip4_addr"
|
||||
DB_IP="${!DB_IP%/*}"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
DB_NAME="jail_${1}_up_db_name"
|
||||
DB_NAME="${!DB_NAME:-$1}"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
DB_USER="jail_${1}_up_db_user"
|
||||
DB_USER="${!DB_USER:-$DB_NAME}"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
DB_PASS="jail_${1}_up_db_password"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
UP_USER="jail_${1}_up_user"
|
||||
UP_USER="${!UP_USER:-$1}"
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
UP_PASS="jail_${1}_up_password"
|
||||
INCLUDES_PATH="${SCRIPT_DIR}/blueprints/unifi/includes"
|
||||
|
||||
if [ -z "${!DB_PASSWORD}" ]; then
|
||||
echo "up_db_password can't be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${!DB_JAIL}" ]; then
|
||||
echo "db_jail can't be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "${!UP_PASS}" ]; then
|
||||
echo "up_password can't be empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Enable persistent Unifi Controller data
|
||||
iocage exec "${1}" mkdir -p /config/controller/mongodb
|
||||
iocage exec "${1}" cp -Rp /usr/local/share/java/unifi /config/controller
|
||||
iocage exec "${1}" chown -R mongodb:mongodb /config/controller/mongodb
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/mongodb.conf /mnt/"${global_dataset_iocage}"/jails/"${1}"/root/usr/local/etc
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/mongod.rc /mnt/"${global_dataset_iocage}"/jails/"${1}"/root/usr/local/etc/rc.d/mongod
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/unifi.rc /mnt/"${global_dataset_iocage}"/jails/"${1}"/root/usr/local/etc/rc.d/unifi
|
||||
iocage exec "${1}" sysrc unifi_enable=YES
|
||||
iocage exec "${1}" service unifi start
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [[ ! "${!POLLER}" ]]; then
|
||||
echo "Installation complete!"
|
||||
echo "Unifi Controller is accessible at https://${JAIL_IP}:8443."
|
||||
else
|
||||
# Check if influxdb container exists, create unifi database if it does, error if it is not.
|
||||
echo "Checking if the database jail and database exist..."
|
||||
if [[ -d /mnt/"${global_dataset_iocage}"/jails/"${!DB_JAIL}" ]]; then
|
||||
DB_EXISTING=$(iocage exec "${!DB_JAIL}" curl -G http://localhost:8086/query --data-urlencode 'q=SHOW DATABASES' | jq '.results [] | .series [] | .values []' | grep "$DB_NAME" | sed 's/"//g' | sed 's/^ *//g')
|
||||
if [[ "$DB_NAME" == "$DB_EXISTING" ]]; then
|
||||
echo "${!DB_JAIL} jail with database ${DB_NAME} already exists. Skipping database creation... "
|
||||
else
|
||||
echo "${!DB_JAIL} jail exists, but database ${DB_NAME} does not. Creating database ${DB_NAME}."
|
||||
if [[ -z "${DB_USER}" ]] || [[ -z "${!DB_PASS}" ]]; then
|
||||
echo "Database username and password not provided. Cannot create database without credentials. Exiting..."
|
||||
exit 1
|
||||
else
|
||||
iocage exec "${!DB_JAIL}" "curl -XPOST -u ${DB_USER}:${!DB_PASS} http://localhost:8086/query --data-urlencode 'q=CREATE DATABASE ${DB_NAME}'"
|
||||
echo "Database ${DB_NAME} created with username ${DB_USER} with password ${!DB_PASS}."
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Influxdb jail does not exist. Unifi-Poller requires Influxdb jail. Please install the Influxdb jail."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Download and install Unifi-Poller
|
||||
FILE_NAME=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .name")
|
||||
DOWNLOAD=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .browser_download_url")
|
||||
iocage exec "${1}" fetch -o /config "${DOWNLOAD}"
|
||||
|
||||
# Install downloaded Unifi-Poller package, configure and enable
|
||||
iocage exec "${1}" pkg install -qy /config/"${FILE_NAME}"
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/up.conf /mnt/"${global_dataset_config}"/"${1}"
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/unifi_poller.rc /mnt/"${global_dataset_iocage}"/jails/"${1}"/root/usr/local/etc/rc.d/unifi_poller
|
||||
iocage exec "${1}" sed -i '' "s|influxdbuser|${DB_USER}|" /config/up.conf
|
||||
iocage exec "${1}" sed -i '' "s|influxdbpass|${!DB_PASS}|" /config/up.conf
|
||||
iocage exec "${1}" sed -i '' "s|unifidb|${DB_NAME}|" /config/up.conf
|
||||
iocage exec "${1}" sed -i '' "s|unifiuser|${UP_USER}|" /config/up.conf
|
||||
iocage exec "${1}" sed -i '' "s|unifipassword|${!UP_PASS}|" /config/up.conf
|
||||
iocage exec "${1}" sed -i '' "s|dbip|http://${DB_IP}:8086|" /config/up.conf
|
||||
|
||||
|
||||
iocage exec "${1}" sysrc unifi_poller_enable=YES
|
||||
iocage exec "${1}" service unifi_poller start
|
||||
|
||||
echo "Installation complete!"
|
||||
echo "Unifi Controller is accessible at https://${JAIL_IP}:8443."
|
||||
echo "Please login to the Unifi Controller and add ${UP_USER} as a read-only user."
|
||||
echo "In Grafana, add Unifi-Poller as a data source."
|
||||
fi
|
153
blueprints/unifi/readme.md
Normal file
153
blueprints/unifi/readme.md
Normal file
@ -0,0 +1,153 @@
|
||||
# Unifi Controller
|
||||
|
||||
### Installation:
|
||||
|
||||
- This jail requires an existing InfluxDB jail. InfluxDB may be created using the same install command, as long as influxdb is listed first.
|
||||
- Once the script runs, a user must be created in the Unifi Controller software for your Unifi-Poller user.
|
||||
- To view the data from Unifi-Poller, Grafana is required. Add the unifi InfluxDB database as a data source in Grafana.
|
||||
|
||||
### Config Description
|
||||
|
||||
- unifi_poller: boolean, true if you want to also install unifi-poller
|
||||
- db_jail: This is the name of your influxdb database jail, should be influxdb.
|
||||
- unifi_db_name: The name of the database that will be created in influxdb for Unifi Poller.
|
||||
- unifi_db_user & unifi_db_password: The created database's credentials for Unifi Poller.
|
||||
- up_user & up_password: The Unifi-Poller user credentials. This user must be created in the Unifi Controller web gui after install matching these credentials. This is for the connection between Unifi Controller & Unifi Poller
|
||||
|
||||
### Unifi-Controller Post-Install
|
||||
|
||||
After the script runs and the unifi jail is running, open the web gui of the unifi jail at port 8443 (i.e. https://192.168.2.250:8443). After completing the initial setup wizard, go to Admins --> Add New Admin. Select "Manually set and share the password", enter the username and password used for up_user & up_password. Uncheck 'Require the user to change their password'. Verify "Role" is set to 'Read Only'. Click Create.
|
||||
|
||||
|
||||
## Unifi Controller documentation can be found at https://www.ui.com/download/unifi/default/default/unifi-controller-v5-user-guide
|
||||
|
||||
|
||||
## Original README from the upstream Unifi-Poller Github.
|
||||
|
||||
https://github.com/unifi-poller/unifi-poller
|
||||
|
||||
<img width="320px" src="https://raw.githubusercontent.com/wiki/unifi-poller/unifi-poller/images/unifi-poller-logo.png">
|
||||
|
||||
[](https://discord.gg/KnyKYt2)
|
||||
[](https://twitter.com/TwitchCaptain)
|
||||
[](http://grafana.com/dashboards?search=unifi-poller)
|
||||
[](https://hub.docker.com/r/golift/unifi-poller)
|
||||
[](https://www.somsubhra.com/github-release-stats/?username=unifi-poller&repository=unifi-poller)
|
||||
|
||||
[](https://github.com/golift/unifi)
|
||||
[](https://github.com/golift/application-builder)
|
||||
[](https://github.com/unifi-poller/unifi-poller)
|
||||
[](https://travis-ci.org/unifi-poller/unifi-poller)
|
||||
|
||||
Collect your UniFi controller data and report it to an InfluxDB instance,
|
||||
or export it for Prometheus collection.
|
||||
[Twelve Grafana Dashboards](http://grafana.com/dashboards?search=unifi-poller)
|
||||
included; with screenshots. Six for InfluxDB and six for Prometheus.
|
||||
|
||||
## Installation
|
||||
|
||||
[See the Wiki!](https://github.com/unifi-poller/unifi-poller/wiki/Installation)
|
||||
We have a special place for [Docker Users](https://github.com/unifi-poller/unifi-poller/wiki/Docker).
|
||||
I'm willing to help if you have troubles.
|
||||
Open an [Issue](https://github.com/unifi-poller/unifi-poller/issues) and
|
||||
we'll figure out how to get things working for you. You can also get help in
|
||||
the #unifi-poller channel on the [Ubiquiti Discord server](https://discord.gg/KnyKYt2). I've also
|
||||
[provided a forum post](https://community.ui.com/questions/Unifi-Poller-Store-Unifi-Controller-Metrics-in-InfluxDB-without-SNMP/58a0ea34-d2b3-41cd-93bb-d95d3896d1a1)
|
||||
you may use to get additional help.
|
||||
|
||||
## Description
|
||||
|
||||
[Ubiquiti](https://www.ui.com) makes networking devices like switches, gateways
|
||||
(routers) and wireless access points. They have a line of equipment named
|
||||
[UniFi](https://www.ui.com/products/#unifi) that uses a
|
||||
[controller](https://www.ui.com/download/unifi/) to keep stats and simplify network
|
||||
device configuration. This controller can be installed on Windows, macOS, FreeBSD,
|
||||
Linux or Docker. Ubiquiti also provides a dedicated hardware device called a
|
||||
[CloudKey](https://www.ui.com/unifi/unifi-cloud-key/) that runs the controller software.
|
||||
More recently they've developed the Dream Machine; it's still in
|
||||
beta / early access, but UniFi Poller can collect its data!
|
||||
|
||||
UniFi Poller is a small Golang application that runs on Windows, macOS, FreeBSD,
|
||||
Linux or Docker. In Influx-mode it polls a UniFi controller every 30 seconds for
|
||||
measurements and exports the data to an Influx database. In Prometheus mode the
|
||||
poller opens a web port and accepts Prometheus polling. It converts the UniFi
|
||||
Controller API data into Prometheus exports on the fly.
|
||||
|
||||
This application requires your controller to be running all the time. If you run
|
||||
a UniFi controller, there's no excuse not to install
|
||||
[Influx](https://github.com/unifi-poller/unifi-poller/wiki/InfluxDB) or
|
||||
[Prometheus](https://prometheus.io),
|
||||
[Grafana](https://github.com/unifi-poller/unifi-poller/wiki/Grafana) and this app.
|
||||
You'll have a plethora of data at your fingertips and the ability to craft custom
|
||||
graphs to slice the data any way you choose. Good luck!
|
||||
|
||||
## Backstory
|
||||
|
||||
I found a simple piece of code on GitHub that sorta did what I needed;
|
||||
we all know that story. I wanted more data, so I added more data collection.
|
||||
I probably wouldn't have made it this far if [Garrett](https://github.com/dewski/unifi)
|
||||
hadn't written the original code I started with. Many props my man.
|
||||
The original code pulled only the client data. This app now pulls data
|
||||
for clients, access points, security gateways, dream machines and switches.
|
||||
|
||||
I've been trying to get my UAP data into Grafana. Sure, google search that.
|
||||
You'll find [this](https://community.ubnt.com/t5/UniFi-Wireless/Grafana-dashboard-for-UniFi-APs-now-available/td-p/1833532).
|
||||
What if you don't want to deal with SNMP?
|
||||
Well, here you go. I've replicated 400% of what you see on those SNMP-powered
|
||||
dashboards with this Go app running on the same mac as my UniFi controller.
|
||||
All without enabling SNMP nor trying to understand those OIDs. Mad props
|
||||
to [waterside](https://community.ubnt.com/t5/user/viewprofilepage/user-id/303058)
|
||||
for making this dashboard; it gave me a fantastic start to making my own dashboards.
|
||||
|
||||
## Operation
|
||||
|
||||
You can control this app with puppet, chef, saltstack, homebrew or a simple bash
|
||||
script if you needed to. Packages are available for macOS, Linux, FreeBSD and Docker.
|
||||
It works just fine on [Windows](https://github.com/unifi-poller/unifi-poller/wiki/Windows) too.
|
||||
Most people prefer Docker, and this app is right at home in that environment.
|
||||
|
||||
## What's it look like?
|
||||
|
||||
There are 12 total dashboards available; the 6 InfluxDB dashboards are very similar
|
||||
to the 6 Prometheus dashboards. Below you'll find screenshots of the first four dashboards.
|
||||
|
||||
##### Client Dashboard (InfluxDB)
|
||||
|
||||

|
||||
|
||||
##### USG Dashboard (InfluxDB)
|
||||
|
||||

|
||||
|
||||
##### UAP Dashboard (InfluxDB)
|
||||
|
||||

|
||||
|
||||
##### USW / Switch Dashboard (InfluxDB)
|
||||
|
||||
You can drill down into specific sites, switches, and ports. Compare ports in different
|
||||
sites side-by-side. So easy! This screenshot barely does it justice.
|
||||

|
||||
|
||||
## Integrations
|
||||
|
||||
The following fine folks are providing their services, completely free! These service
|
||||
integrations are used for things like storage, building, compiling, distribution and
|
||||
documentation support. This project succeeds because of them. Thank you!
|
||||
|
||||
<p style="text-align: center;">
|
||||
<a title="Jfrog Bintray" alt="Jfrog Bintray" href="https://bintray.com"><img src="https://docs.golift.io/integrations/bintray.png"/></a>
|
||||
<a title="GitHub" alt="GitHub" href="https://GitHub.com"><img src="https://docs.golift.io/integrations/octocat.png"/></a>
|
||||
<a title="Docker Cloud" alt="Docker" href="https://cloud.docker.com"><img src="https://docs.golift.io/integrations/docker.png"/></a>
|
||||
<a title="Travis-CI" alt="Travis-CI" href="https://Travis-CI.com"><img src="https://docs.golift.io/integrations/travis-ci.png"/></a>
|
||||
<a title="Homebrew" alt="Homebrew" href="https://brew.sh"><img src="https://docs.golift.io/integrations/homebrew.png"/></a>
|
||||
<a title="Go Lift" alt="Go Lift" href="https://golift.io"><img src="https://docs.golift.io/integrations/golift.png"/></a>
|
||||
<a title="Grafana" alt="Grafana" href="https://grafana.com"><img src="https://docs.golift.io/integrations/grafana.png"/></a>
|
||||
</p>
|
||||
|
||||
## Copyright & License
|
||||
|
||||
<img style="float: right;" align="right" width="200px" src="https://raw.githubusercontent.com/wiki/unifi-poller/unifi-poller/images/unifi-poller-logo.png">
|
||||
|
||||
- Copyright © 2018-2020 David Newhall II.
|
||||
- See [LICENSE](LICENSE) for license information.
|
21
blueprints/unifi/update.sh
Executable file
21
blueprints/unifi/update.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/usr/local/bin/bash
|
||||
# This file contains the update script for unifi
|
||||
# Unifi Controller is updated through pkg, Unifi-Poller is not. This script updates Unifi-Poller
|
||||
|
||||
FILE_NAME=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .name")
|
||||
DOWNLOAD=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .browser_download_url")
|
||||
|
||||
# Check to see if there is an update.
|
||||
# shellcheck disable=SC2154
|
||||
if [[ -f /mnt/"${global_dataset_config}"/"${1}"/"${FILE_NAME}" ]]; then
|
||||
echo "Unifi-Poller is up to date."
|
||||
exit 1
|
||||
else
|
||||
# Download and install the package
|
||||
iocage exec "${1}" fetch -o /config "${DOWNLOAD}"
|
||||
iocage exec "${1}" pkg install -qy /config/"${FILE_NAME}"
|
||||
iocage exec "${1}" service unifi restart
|
||||
iocage exec "${1}" service unifi_poller restart
|
||||
fi
|
||||
|
||||
echo "Update complete!"
|
Reference in New Issue
Block a user