66e997069a
* Add Unifi Controller with integrated Unifi-Poller Install & Update uses 'latest' release. Persistent data using influxdb. Unifi Poller now optional * fix global dataset refs * move unifi_poller bootscript into rc folder * Apply suggestions from code review * Update jails/unifi/includes/rc/mongod Forgot to add one suggestion from review. * Added shellcheck ignores for all RC scripts Shellcheck doesn't play nice with RC scripts, those advices are often either wrong, or very hard (not worth it) to change enough to get it to pass and work. * Last rc ignores for shellcheck * Update jails/unifi/install.sh * Shellcheck to shellcheck Making shellcheck lowercase for parsing Co-authored-by: Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl>
92 lines
4.6 KiB
Bash
92 lines
4.6 KiB
Bash
#!/usr/local/bin/bash
|
|
# This file contains the install script for unifi-controller & unifi-poller
|
|
|
|
# Initialize variables
|
|
JAIL_NAME="unifi"
|
|
# shellcheck disable=SC2154
|
|
JAIL_IP="${unifi_ip4_addr%/*}"
|
|
# shellcheck disable=SC2154
|
|
DB_IP="${influxdb_ip4_addr%/*}"
|
|
# shellcheck disable=SC2154
|
|
DB_JAIL="${unifi_db_jail}"
|
|
# shellcheck disable=SC2154
|
|
DB_NAME="${unifi_up_db_name:-unifi}"
|
|
# shellcheck disable=SC2154
|
|
DB_USER="${unifi_up_db_user}"
|
|
# shellcheck disable=SC2154
|
|
DB_PASS="${unifi_up_db_password}"
|
|
# shellcheck disable=SC2154
|
|
UP_USER="${unifi_up_user}"
|
|
# shellcheck disable=SC2154
|
|
UP_PASS="${unifi_up_password}"
|
|
INCLUDES_PATH="${SCRIPT_DIR}/jails/unifi/includes"
|
|
|
|
# Enable persistent Unifi Controller data
|
|
iocage exec "${JAIL_NAME}" mkdir -p /config/controller/mongodb
|
|
iocage exec "${JAIL_NAME}" cp -Rp /usr/local/share/java/unifi /config/controller
|
|
iocage exec "${JAIL_NAME}" chown -R mongodb:mongodb /config/controller/mongodb
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/mongodb.conf /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/rc/mongod /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/rc/unifi /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/
|
|
iocage exec "${JAIL_NAME}" sysrc unifi_enable=YES
|
|
iocage exec "${JAIL_NAME}" service unifi start
|
|
|
|
# shellcheck disable=SC2154
|
|
if [[ ! "${unifi_unifi_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 "${JAIL_NAME}" fetch -o /config "${DOWNLOAD}"
|
|
|
|
# Install downloaded Unifi-Poller package, configure and enable
|
|
iocage exec "${JAIL_NAME}" pkg install -qy /config/"${FILE_NAME}"
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/up.conf /mnt/"${global_dataset_config}"/"${JAIL_NAME}"
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/up.conf.example /mnt/"${global_dataset_config}"/"${JAIL_NAME}"
|
|
# shellcheck disable=SC2154
|
|
cp "${INCLUDES_PATH}"/rc/unifi_poller /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/unifi_poller
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|influxdbuser|${DB_USER}|" /config/up.conf
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|influxdbpass|${DB_PASS}|" /config/up.conf
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|unifidb|${DB_NAME}|" /config/up.conf
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|unifiuser|${UP_USER}|" /config/up.conf
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|unifipassword|${UP_PASS}|" /config/up.conf
|
|
iocage exec "${JAIL_NAME}" sed -i '' "s|dbip|http://${DB_IP}:8086|" /config/up.conf
|
|
|
|
|
|
iocage exec "${JAIL_NAME}" sysrc unifi_poller_enable=YES
|
|
iocage exec "${JAIL_NAME}" 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
|