From 88257b8d834f1870e60b55c61522e8cec77cda52 Mon Sep 17 00:00:00 2001 From: Tommi2Day Date: Sun, 24 Jul 2016 19:15:21 +0200 Subject: [PATCH] initial commit for Unifi 5 --- Dockerfile.unifi | 37 ++++++++++++++++++++++++ backup_unifi.sh | 15 ++++++++++ build_unifi.sh | 13 +++++++++ restore_unifi.sh | 16 +++++++++++ run_unifi.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ unifi.sh | 46 ++++++++++++++++++++++++++++++ 6 files changed, 200 insertions(+) create mode 100644 Dockerfile.unifi create mode 100644 backup_unifi.sh create mode 100644 build_unifi.sh create mode 100644 restore_unifi.sh create mode 100644 run_unifi.sh create mode 100644 unifi.sh diff --git a/Dockerfile.unifi b/Dockerfile.unifi new file mode 100644 index 0000000..d0c2560 --- /dev/null +++ b/Dockerfile.unifi @@ -0,0 +1,37 @@ +FROM ubuntu:trusty +ENV DEBIAN_FRONTEND noninteractive + +RUN mkdir -p /usr/lib/unifi/data /backups /logs && \ + touch /usr/lib/unifi/data/.unifidatadir + +# add unifi repo +keys +RUN \ + echo "deb http://www.ubnt.com/downloads/unifi/debian unifi5 ubiquiti" >/etc/apt/sources.list.d/ubnt.list && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv C0A52C50 + +#try distro mongo first +#RUN \ +# echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" >/etc/apt/sources.list.d/mongo.list && \ +# apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 + + +# update then install +RUN \ + apt-get update -q -y && \ + apt-get install -q -y mongodb-server unifi lsof + +#add scripts +COPY ["unifi.sh","backup_unifi.sh","restore_unifi.sh", "/usr/lib/unifi/"] +RUN echo "10 02 * * * root /usr/lib/unifi/backup_unifi.sh >/logs/backup.log 2>&1" >/etc/cron.d/unifi_backup + +#redirect path +RUN rm -f /usr/lib/unifi/logs && ln -s /logs /usr/lib/unifi/logs +RUN rm -f /usr/lib/unifi/backups && ln -s /backups /usr/lib/unifi/backups + +#define interface +VOLUME /usr/lib/unifi/data +VOLUME /backups /logs +EXPOSE 8443 8880 8080 27117 +WORKDIR /usr/lib/unifi +ENTRYPOINT /bin/bash +CMD ["/usr/lib/unifi/unifi.sh", "start"] \ No newline at end of file diff --git a/backup_unifi.sh b/backup_unifi.sh new file mode 100644 index 0000000..4e65279 --- /dev/null +++ b/backup_unifi.sh @@ -0,0 +1,15 @@ +#!/bin/bash + + +#mongo logrotate +MONGOPID=$(ps -ef|grep [m]ongod|awk '{print $2}') +if [ -n "$MONGOPID" ]; then + kill -SIGUSR1 $MONGOPID +fi +#backup +cd /usr/lib/unifi1 +bash ./unifi.sh stop +sleep 5 +tar -czf backups/unifi_data.$(date '+%Y%m%d').tar.gz data >/dev/null +bash ./unifi.sh start + diff --git a/build_unifi.sh b/build_unifi.sh new file mode 100644 index 0000000..615a7b9 --- /dev/null +++ b/build_unifi.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +VERS=5.0 +VMNAME=${1:-unifi} +if [ -r Dockerfile.$VMNAME ]; then +DOCKER_USER=${DOCKER_USER:-tommi2day} +#build the container +docker stop $VMNAME +docker rm $VMNAME +docker build -t $DOCKER_USER/$VMNAME:$VERS -f Dockerfile.$VMNAME . +else + echo "Usage: $0 VMNAME #Dockerfile.VMNAME must exists" +fi diff --git a/restore_unifi.sh b/restore_unifi.sh new file mode 100644 index 0000000..1f9699e --- /dev/null +++ b/restore_unifi.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +cd /usr/lib/unifi +DATE=$(date '+%Y%m%d') +bash ./unifi.sh stop +sleep 5 +FILE=${1:-unifi_data.$DATE.tar.gz} +if [ -r /backups/$FILE ]; then + tar -czf /backups/unifi_data_before_restore.$(date '+%Y%m%d_%H%M%S').tar.gz data/ + rm -rf data/* + tar -xzf /backups/$FILE data/ +else + echo "Backup /backups/$FILE not readable" +fi +bash ./unifi.sh start + diff --git a/run_unifi.sh b/run_unifi.sh new file mode 100644 index 0000000..07f31f3 --- /dev/null +++ b/run_unifi.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +VERS=5.0 +VMNAME=${2:-unifi} +CMD=$1 +DOCKER_SHARED=${DOCKER_SHARED:-$(pwd)} +DOCKER_USER=${DOCKER_USER:-tommi2day} +SHARED_DIR="${DOCKER_SHARED}/${VMNAME}-shared" +#debug +if [ -z "$DEBUG" ]; then + RUN="-d " +else + RUN="--rm=true -it --entrypoint bash " +fi +#windows +if [ "$OSTYPE" = "msys" ]; then + P=/ +else + S=sudo +fi +DOCKER="$S docker" + +#datadir +if [ ! -d "${SHARED_DIR}" ]; then + mkdir -p "${SHARED_DIR}" +fi +#stop and delete +RUNNING=$($DOCKER inspect --format="{{ .State.Running }}" $VMNAME 2> /dev/null) +if [ $? -eq 0 ]; then + if [ "$RUNNING" == "true" ]; then + $DOCKER stop $VMNAME + fi + $DOCKER rm $VMNAME +fi + +if [ "$DEBUG" = "clean" ]; then + #clean all if debug set to clean + rm -Rf ${SHARED_DIR} + $DOCKER volume rm ${VMNAME}_data >/dev/null 2>&1 +fi + +#check data volume and create a new one if needed +DATA=$($DOCKER docker inspect --format '{{ .Mountpoint }}' ${VMNAME}_data 2> /dev/null) +if [ $? -ne 0 ]; then + docker volume create --name ${VMNAME}_data +fi + +#prepare shared dir +for d in backups logs ; do + if [ ! -d $SHARED_DIR/$d ]; then + mkdir -p $SHARED_DIR/$d + fi +done + +#run it +echo " +$DOCKER run $RUN \ + -v ${VMNAME}_data:/usr/lib/unifi/data \ + -v "${SHARED_DIR}/backups":/backups \ + -v "${SHARED_DIR}/logs":/logs \ + --hostname $VMNAME \ + --name ${VMNAME} \ + -p 8080:8080 \ + -p 8880:8880 \ + -p 8443:8443 \ + -p 27117:27117 \ + $DOCKER_USER/$VMNAME:$VERS $1 " >starter +if [ "$OSTYPE" = "msys" ]; then + mv starter starter.ps1 + powershell -File starter.ps1 +else + bash starter +fi + diff --git a/unifi.sh b/unifi.sh new file mode 100644 index 0000000..bb9d337 --- /dev/null +++ b/unifi.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# description: Start Unify server +# chkconfig: 2345 99 01 + +UNIFI=/usr/lib/unifi +if [ ! -d $UNIFI ]; then + echo "Unifi not installed in $UNIFI" + exit 1 +fi +cd $UNIFI +case "$1" in + + start) + + if [ ! -d logs ]; then + mkdir logs + fi + nohup java -Xmx256M -jar lib/ace.jar start >logs/unifi.log 2>&1 & + sleep 5 + ./$0 status + tail -f logs/server.log + ;; + + stop) + + java -jar lib/ace.jar stop + sleep 5 + ./$0 status + + ;; + + status) + if (ps -ef|grep "[l]ib/ace.jar" >/dev/null); then + echo "Unifi Controler running.." + exit 0 + else + echo "Unifi Controler stopped.." + exit 1 + fi + + ;; + + *) + echo "Usage: $ME start|stop|status" + ;; +esac