<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgzm</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kgzm"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Kgzm"/>
	<updated>2026-05-05T21:02:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=UniFi_Controller&amp;diff=16326</id>
		<title>UniFi Controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=UniFi_Controller&amp;diff=16326"/>
		<updated>2019-09-07T15:38:03Z</updated>

		<summary type="html">&lt;p&gt;Kgzm: Fix commands around creating the /srv/unifi directory and setting up ownership&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
This guide explains how to install the generic Unix UniFi Controller, as available from [http://www.ubnt.com/ Ubiquity Networks]. At the time of writing this, a native Alpine Linux package is not available.&lt;br /&gt;
&lt;br /&gt;
Furthermore, this guide uses the incredibly reliable and efficient [http://www.skarnet.org/software/s6/ s6] supervision suite to start and control the UniFi Controller.&lt;br /&gt;
&lt;br /&gt;
A summarised schematic of what will be installed on the filesystem.&lt;br /&gt;
&lt;br /&gt;
The choice of &amp;lt;code&amp;gt;/srv&amp;lt;/code&amp;gt; for the UniFi Controller&#039;s root directory is based on the fact that it contains both run-time and configuration data, so installing to &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/opt&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; didn&#039;t seem apt. Feel free to adjust the steps below, replacing &amp;lt;code&amp;gt;/srv/unifi&amp;lt;/code&amp;gt; with wherever you would prefer to install the UniFi Controller software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/&lt;br /&gt;
`--etc&lt;br /&gt;
   |-- unifi&lt;br /&gt;
   |   `-- log&lt;br /&gt;
   |-- srv&lt;br /&gt;
   |   `-- unifi&lt;br /&gt;
   |       |-- bin&lt;br /&gt;
   |       |-- conf&lt;br /&gt;
   |       |-- data&lt;br /&gt;
   |       |-- dl&lt;br /&gt;
   |       |-- lib&lt;br /&gt;
   |       |-- logs&lt;br /&gt;
   |       |-- run&lt;br /&gt;
   |       `-- webapps&lt;br /&gt;
   |-- run&lt;br /&gt;
   |   `-- openrc&lt;br /&gt;
   |          `-- s6-scan&lt;br /&gt;
   |              `-- unifi --&amp;gt; /etc/unifi&lt;br /&gt;
    `-- var&lt;br /&gt;
        `-- log&lt;br /&gt;
            `-- unifi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Prerequisite Packages =&lt;br /&gt;
&lt;br /&gt;
== OpenJDK 8 JRE ==&lt;br /&gt;
&lt;br /&gt;
Install &amp;lt;code&amp;gt;openjdk8-jre&amp;lt;/code&amp;gt; from the community repository.&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;/etc/apk/respositories&amp;lt;/code&amp;gt; and uncomment the appropriate community repository for your Alpine version:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://host.name/alpine_version/community&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the package cache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add openjdk8-jre&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MongoDB ==&lt;br /&gt;
&lt;br /&gt;
Install MongoDB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add mongodb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== s6 ==&lt;br /&gt;
&lt;br /&gt;
Install [http://www.skarnet.org/software/s6/ s6]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add s6&amp;lt;/code&amp;gt; which is a service supervision suite, for reliably and efficiently starting, stopping and keeping services running.&lt;br /&gt;
&lt;br /&gt;
The below shows a schematic process tree of how the UniFi Controller will be started and supervised by s6. The controller is written in Java, hence the Java process and it in turn, launches a dedicated instance of MongoDB to store its configuration and run-time data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init&lt;br /&gt;
`-- s6-svscan&lt;br /&gt;
    `-- s6-supervise&lt;br /&gt;
        |-- s6-log&lt;br /&gt;
        `-- java&lt;br /&gt;
            `-- mongod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Install UniFi Controller =&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;unifi&amp;lt;/code&amp;gt; user and group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser -D -H -h /srv/unifi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change to the parent folder within which you wish to install the UniFi Controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the generic unix archive of the &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; you wish to install.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget http://www.ubnt.com/downloads/unifi/VERSION/UniFi.unix.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unpack the archive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip UniFi.unix.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rename the unpacked directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mv UniFi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change ownership.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown -R unifi:unifi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lock down permissions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod o-rwx unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change into the UniFi bin directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv/unifi/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the existing file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a symlink to &amp;lt;code&amp;gt;/usr/bin/mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /usr/bin/mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configure Service Management =&lt;br /&gt;
&lt;br /&gt;
== Create UniFi Service Directory and Files ==&lt;br /&gt;
&lt;br /&gt;
Create an s6 service directory for UniFi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir -p /etc/unifi/log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; script, using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
user=&#039;unifi&#039;&lt;br /&gt;
group=&#039;unifi&#039;&lt;br /&gt;
&lt;br /&gt;
exec 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
base=&#039;/srv/unifi&#039;&lt;br /&gt;
&lt;br /&gt;
if [ -d $base ]; then&lt;br /&gt;
    cd $base&lt;br /&gt;
    chown -R $user:$group .&lt;br /&gt;
    version=`head -1 webapps/ROOT/app-unifi/.version`&lt;br /&gt;
    echo &amp;quot;Starting UniFi Controller $version&amp;quot;&lt;br /&gt;
    exec s6-setuidgid $user java -jar lib/ace.jar start&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Missing $base ... aborting&amp;quot;&lt;br /&gt;
    touch down&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; script is executable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the &amp;lt;code&amp;gt;log/run&amp;lt;/code&amp;gt; script, using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/unifi/log/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
log_user=&#039;log&#039;&lt;br /&gt;
&lt;br /&gt;
exec s6-setuidgid $log_user s6-log -b n20 s1000000 t /var/log/unifi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the log/run script is executable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create log User and Directory ==&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; user and group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser -D -H /var/log log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/unifi&amp;lt;/code&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir -p /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the directory ownership.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown log:log /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lock down the permissions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 750 /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the OpenRC Service Script ==&lt;br /&gt;
&lt;br /&gt;
Open the script file using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/init.d/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
name=&amp;quot;unifi&amp;quot;&lt;br /&gt;
supervisor=s6&lt;br /&gt;
s6_service_path=&amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
	need net s6-svscan&lt;br /&gt;
	after firewall&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        if [ ! -L &amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot; ]; then&lt;br /&gt;
	        ln -s &amp;quot;/etc/${name}&amp;quot; &amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the script is executable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/init.d/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start the UniFi Controller Service ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rc-service unifi start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure the UniFi Controller Service to start on boot ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rc-update add unifi boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Simple Backup Script =&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;/usr/local/bin/unifi-backup&amp;lt;/code&amp;gt; using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This script assumes the use of s6-svc to control unifi. I will modify it in time, to use rc-service instead.&lt;br /&gt;
&lt;br /&gt;
Paste the following into the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
conf_dir=&#039;/etc/unifi&#039;&lt;br /&gt;
backup_dir=&#039;/srv/backup/unifi&#039;&lt;br /&gt;
service_dir=&#039;/run/openrc/s6-scan/unifi&#039;&lt;br /&gt;
&lt;br /&gt;
start_state=&#039;down&#039;&lt;br /&gt;
&lt;br /&gt;
if s6-svok $service_dir; then&lt;br /&gt;
    if s6-svstat -o up,ready $service_dir | grep -q true; then&lt;br /&gt;
        echo &#039;Stopping the UniFi Controller&#039;&lt;br /&gt;
        start_state=&#039;up&#039;&lt;br /&gt;
        s6-svc -d $service_dir&lt;br /&gt;
        sleep 3&lt;br /&gt;
    fi&lt;br /&gt;
else&lt;br /&gt;
    echo &#039;Warning: The UniFi Controller is not supervised&#039;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if s6-svstat -o up $service_dir | grep -q false; then&lt;br /&gt;
    echo &#039;Success: The UniFi Controller was stopped&#039;&lt;br /&gt;
else&lt;br /&gt;
    echo &#039;Error: The UniFi Controller is still running&#039;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
stamp=`date +%Y-%m-%d_%H%M%S`&lt;br /&gt;
&lt;br /&gt;
mkdir -p $backup_dir&lt;br /&gt;
cd $backup_dir&lt;br /&gt;
mkdir &amp;quot;data-$stamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Backing up to /srv/backup/unifi/data-$stamp.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if rsync -az /srv/unifi/data/ &amp;quot;data-$stamp&amp;quot;; then&lt;br /&gt;
    echo &#039;* rsync succeeded&#039;&lt;br /&gt;
    if tar czf &amp;quot;data-$stamp.tar.gz&amp;quot; &amp;quot;data-$stamp&amp;quot;; then&lt;br /&gt;
        echo &#039;* tar succeeded&#039;&lt;br /&gt;
        rm -rf &amp;quot;data-$stamp&amp;quot;&lt;br /&gt;
        echo &#039;Backup succeeded&#039;&lt;br /&gt;
    else&lt;br /&gt;
        echo &#039;Backup failed: tar failed&#039;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$start_state&amp;quot; == &#039;up&#039; ]; then&lt;br /&gt;
    echo &#039;Starting the UniFi Controller&#039;&lt;br /&gt;
    s6-svc -u $service_dir&lt;br /&gt;
    sleep 5&lt;br /&gt;
    s6-svstat $service_dir&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kgzm</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=UniFi_Controller&amp;diff=16325</id>
		<title>UniFi Controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=UniFi_Controller&amp;diff=16325"/>
		<updated>2019-09-07T15:31:27Z</updated>

		<summary type="html">&lt;p&gt;Kgzm: adduser -h should be used to assign home directory rather than -H&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
This guide explains how to install the generic Unix UniFi Controller, as available from [http://www.ubnt.com/ Ubiquity Networks]. At the time of writing this, a native Alpine Linux package is not available.&lt;br /&gt;
&lt;br /&gt;
Furthermore, this guide uses the incredibly reliable and efficient [http://www.skarnet.org/software/s6/ s6] supervision suite to start and control the UniFi Controller.&lt;br /&gt;
&lt;br /&gt;
A summarised schematic of what will be installed on the filesystem.&lt;br /&gt;
&lt;br /&gt;
The choice of &amp;lt;code&amp;gt;/srv&amp;lt;/code&amp;gt; for the UniFi Controller&#039;s root directory is based on the fact that it contains both run-time and configuration data, so installing to &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/opt&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt; didn&#039;t seem apt. Feel free to adjust the steps below, replacing &amp;lt;code&amp;gt;/srv/unifi&amp;lt;/code&amp;gt; with wherever you would prefer to install the UniFi Controller software.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/&lt;br /&gt;
`--etc&lt;br /&gt;
   |-- unifi&lt;br /&gt;
   |   `-- log&lt;br /&gt;
   |-- srv&lt;br /&gt;
   |   `-- unifi&lt;br /&gt;
   |       |-- bin&lt;br /&gt;
   |       |-- conf&lt;br /&gt;
   |       |-- data&lt;br /&gt;
   |       |-- dl&lt;br /&gt;
   |       |-- lib&lt;br /&gt;
   |       |-- logs&lt;br /&gt;
   |       |-- run&lt;br /&gt;
   |       `-- webapps&lt;br /&gt;
   |-- run&lt;br /&gt;
   |   `-- openrc&lt;br /&gt;
   |          `-- s6-scan&lt;br /&gt;
   |              `-- unifi --&amp;gt; /etc/unifi&lt;br /&gt;
    `-- var&lt;br /&gt;
        `-- log&lt;br /&gt;
            `-- unifi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Prerequisite Packages =&lt;br /&gt;
&lt;br /&gt;
== OpenJDK 8 JRE ==&lt;br /&gt;
&lt;br /&gt;
Install &amp;lt;code&amp;gt;openjdk8-jre&amp;lt;/code&amp;gt; from the community repository.&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;/etc/apk/respositories&amp;lt;/code&amp;gt; and uncomment the appropriate community repository for your Alpine version:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://host.name/alpine_version/community&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the package cache.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add openjdk8-jre&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MongoDB ==&lt;br /&gt;
&lt;br /&gt;
Install MongoDB&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add mongodb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== s6 ==&lt;br /&gt;
&lt;br /&gt;
Install [http://www.skarnet.org/software/s6/ s6]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apk add s6&amp;lt;/code&amp;gt; which is a service supervision suite, for reliably and efficiently starting, stopping and keeping services running.&lt;br /&gt;
&lt;br /&gt;
The below shows a schematic process tree of how the UniFi Controller will be started and supervised by s6. The controller is written in Java, hence the Java process and it in turn, launches a dedicated instance of MongoDB to store its configuration and run-time data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init&lt;br /&gt;
`-- s6-svscan&lt;br /&gt;
    `-- s6-supervise&lt;br /&gt;
        |-- s6-log&lt;br /&gt;
        `-- java&lt;br /&gt;
            `-- mongod&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Install UniFi Controller =&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;unifi&amp;lt;/code&amp;gt; user and group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser -D -h /srv/unifi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change to the parent folder within which you wish to install the UniFi Controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the generic unix archive of the &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; you wish to install.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget http://www.ubnt.com/downloads/unifi/VERSION/UniFi.unix.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unpack the archive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;unzip UniFi.unix.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rename the unpacked directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mv UniFi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change ownership.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown unifi:unifi unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lock down permissions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod o-rwx unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change into the UniFi bin directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /srv/unifi/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the existing file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a symlink to &amp;lt;code&amp;gt;/usr/bin/mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /usr/bin/mongod&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configure Service Management =&lt;br /&gt;
&lt;br /&gt;
== Create UniFi Service Directory and Files ==&lt;br /&gt;
&lt;br /&gt;
Create an s6 service directory for UniFi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir -p /etc/unifi/log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; script, using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
user=&#039;unifi&#039;&lt;br /&gt;
group=&#039;unifi&#039;&lt;br /&gt;
&lt;br /&gt;
exec 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
base=&#039;/srv/unifi&#039;&lt;br /&gt;
&lt;br /&gt;
if [ -d $base ]; then&lt;br /&gt;
    cd $base&lt;br /&gt;
    chown -R $user:$group .&lt;br /&gt;
    version=`head -1 webapps/ROOT/app-unifi/.version`&lt;br /&gt;
    echo &amp;quot;Starting UniFi Controller $version&amp;quot;&lt;br /&gt;
    exec s6-setuidgid $user java -jar lib/ace.jar start&lt;br /&gt;
else&lt;br /&gt;
    echo &amp;quot;Missing $base ... aborting&amp;quot;&lt;br /&gt;
    touch down&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; script is executable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the &amp;lt;code&amp;gt;log/run&amp;lt;/code&amp;gt; script, using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/unifi/log/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy and paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
log_user=&#039;log&#039;&lt;br /&gt;
&lt;br /&gt;
exec s6-setuidgid $log_user s6-log -b n20 s1000000 t /var/log/unifi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the log/run script is executable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/unifi/run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create log User and Directory ==&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; user and group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser -D -H /var/log log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the &amp;lt;code&amp;gt;/var/log/unifi&amp;lt;/code&amp;gt; directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir -p /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the directory ownership.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chown log:log /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lock down the permissions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 750 /var/log/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the OpenRC Service Script ==&lt;br /&gt;
&lt;br /&gt;
Open the script file using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/init.d/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paste the following into it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/sbin/openrc-run&lt;br /&gt;
&lt;br /&gt;
name=&amp;quot;unifi&amp;quot;&lt;br /&gt;
supervisor=s6&lt;br /&gt;
s6_service_path=&amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
depend() {&lt;br /&gt;
	need net s6-svscan&lt;br /&gt;
	after firewall&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start_pre() {&lt;br /&gt;
        if [ ! -L &amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot; ]; then&lt;br /&gt;
	        ln -s &amp;quot;/etc/${name}&amp;quot; &amp;quot;${RC_SVCDIR}/s6-scan/${name}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the script is executable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 755 /etc/init.d/unifi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start the UniFi Controller Service ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rc-service unifi start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure the UniFi Controller Service to start on boot ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rc-update add unifi boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Simple Backup Script =&lt;br /&gt;
&lt;br /&gt;
Create &amp;lt;code&amp;gt;/usr/local/bin/unifi-backup&amp;lt;/code&amp;gt; using your favourite editor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This script assumes the use of s6-svc to control unifi. I will modify it in time, to use rc-service instead.&lt;br /&gt;
&lt;br /&gt;
Paste the following into the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/ash&lt;br /&gt;
&lt;br /&gt;
conf_dir=&#039;/etc/unifi&#039;&lt;br /&gt;
backup_dir=&#039;/srv/backup/unifi&#039;&lt;br /&gt;
service_dir=&#039;/run/openrc/s6-scan/unifi&#039;&lt;br /&gt;
&lt;br /&gt;
start_state=&#039;down&#039;&lt;br /&gt;
&lt;br /&gt;
if s6-svok $service_dir; then&lt;br /&gt;
    if s6-svstat -o up,ready $service_dir | grep -q true; then&lt;br /&gt;
        echo &#039;Stopping the UniFi Controller&#039;&lt;br /&gt;
        start_state=&#039;up&#039;&lt;br /&gt;
        s6-svc -d $service_dir&lt;br /&gt;
        sleep 3&lt;br /&gt;
    fi&lt;br /&gt;
else&lt;br /&gt;
    echo &#039;Warning: The UniFi Controller is not supervised&#039;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if s6-svstat -o up $service_dir | grep -q false; then&lt;br /&gt;
    echo &#039;Success: The UniFi Controller was stopped&#039;&lt;br /&gt;
else&lt;br /&gt;
    echo &#039;Error: The UniFi Controller is still running&#039;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
stamp=`date +%Y-%m-%d_%H%M%S`&lt;br /&gt;
&lt;br /&gt;
mkdir -p $backup_dir&lt;br /&gt;
cd $backup_dir&lt;br /&gt;
mkdir &amp;quot;data-$stamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Backing up to /srv/backup/unifi/data-$stamp.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if rsync -az /srv/unifi/data/ &amp;quot;data-$stamp&amp;quot;; then&lt;br /&gt;
    echo &#039;* rsync succeeded&#039;&lt;br /&gt;
    if tar czf &amp;quot;data-$stamp.tar.gz&amp;quot; &amp;quot;data-$stamp&amp;quot;; then&lt;br /&gt;
        echo &#039;* tar succeeded&#039;&lt;br /&gt;
        rm -rf &amp;quot;data-$stamp&amp;quot;&lt;br /&gt;
        echo &#039;Backup succeeded&#039;&lt;br /&gt;
    else&lt;br /&gt;
        echo &#039;Backup failed: tar failed&#039;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$start_state&amp;quot; == &#039;up&#039; ]; then&lt;br /&gt;
    echo &#039;Starting the UniFi Controller&#039;&lt;br /&gt;
    s6-svc -u $service_dir&lt;br /&gt;
    sleep 5&lt;br /&gt;
    s6-svstat $service_dir&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kgzm</name></author>
	</entry>
</feed>