https://lazyadmin.nl/it/installing-unifi-controller-on-a-raspberry-pi-in-5-min/ * Download the latest Raspbian Lite image from https://www.raspberrypi.org * Unzip and use dd on linux (or use etch) to image to SD card (the instructions here are for dd) https://www.raspberrypi.org/documentation/installation/installing-images/linux.md ====Find the SD Card Mount Point and Unmount It==== * Run lsblk to see which devices are currently connected to your machine (don't insert the SD card for the Raspberry Pi yet). If your computer has a slot for SD cards, insert the card. If not, insert the card into an SD card reader, then connect the reader to your computer. * Run lsblk again. The new device that has appeared is your SD card (you can also usually tell from the listed device size). The naming of the device will follow the format described in the next paragraph. The left column of the results from the lsblk command gives the device name of your SD card and the names of any paritions on it (usually only one, but there may be several if the card was previously used). It will be listed as something like /dev/mmcblk0 or /dev/sdX (with partition names /dev/mmcblk0p1 or /dev/sdX1 respectively), where X is a lower-case letter indicating the device (eg. /dev/sdb1). The right column shows where the partitions have been mounted (if they haven't been, it will be blank). If any partitions on the SD card have been mounted, unmount them all with umount, for example umount /dev/sdX1 (replace sdX1 with your SD card's device name, and change the number for any other partitions). ====Copy The Image To The SD Card==== In a terminal window, write the image to the card with the command below, making sure you replace the input file if= argument with the path to your .img file, and the /dev/sdX in the output file of= argument with the correct device name. This is very important, as you will lose all the data on the hard drive if you provide the wrong device name. Make sure the device name is the name of the whole SD card as described above, not just a partition. For example: sdd, not sdds1 or sddp1; mmcblk0, not mmcblk0p1. dd bs=4M if=2018-04-18-raspbian-stretch.img of=/dev/sdX conv=fsync Please note that block size set to 4M will work most of the time. If not, try 1M, although this will take considerably longer. Run sync. This will ensure the write cache is flushed and that it is safe to unmount your SD card. Remove the SD card from the card reader. ==== Setup Users & Enable SSH ==== * Connect the Raspberry Pi to monitor via HDMI cable and attached a USB keyboard * Login with user pi and password raspberry * Run raspi-config to set your locale/etc otherwise the password you type in will be in a GB keyboard format * Create a new root user and password sudo adduser username sudo password username sudo usermod -aG sudo username * Logout of the pi user account then back in using your newly created account * Delete the pi user account and set root password sudo userdel -r pi sudo passwd root * Enable SSH server sudo systemctl enable ssh sudo systemctl start ssh * Install vim sudo apt-get install vim ====Setup Firewall and Network Interface==== * Configure Firewall sudo vim /etc/network/firewall-rules then add *filter # Flush any existing rules -F # Default policy: drop all inbound and allow all outbound -P FORWARD DROP -P INPUT DROP -P OUTPUT ACCEPT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow local programs that use loopback (Unix sockets) -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT # Allow ICMP pings -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT # Allow SSH from anywhere -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # Allow all the UniFi ports from anywhere -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8081 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8443 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8880 -j ACCEPT -A INPUT -i eth0 -p tcp --dport 8843 -j ACCEPT -A INPUT -i eth0 -p udp --dport 3478 -j ACCEPT -A INPUT -i eth0 -p udp --dport 10001 -j ACCEPT -A INPUT -i eth0 -p udp --dport 1900 -j ACCEPT COMMIT * Configure Network Interface sudo vim /etc/network/interfaces then put in something like # The primary network interface allow-hotplug eth0 iface eth0 inet static address 172.21.21.145 netmask 255.255.255.0 gateway 172.21.21.1 network 172.21.21.0 broadcast 172.21.21.255 post-up iptables-restore < /etc/network/firewall-rules * Configure DNS sudo vim /etc/resolv.conf then put in something like nameserver 8.8.8.8 nameserver 208.67.220.220 * Set Hostname sudo vim /etc/hostname Then put in the name you want unifi.yourdomainname.com * Update hosts File sudo vim /etc/hosts Find line 127.0.1.1 and change raspberrypi to your new host name: 172.0.1.1 unifi.yourdomainname.com Now reboot. ====Update & Install Unifi Controller==== https://lazyadmin.nl/it/installing-unifi-controller-on-a-raspberry-pi-in-5-min/ \\ https://help.ubnt.com/hc/en-us/articles/220066768-UniFi-How-to-Install-Update-via-APT-on-Debian-or-Ubuntu * Update the firmware then reboot if firmware was updated sudo apt-get install rpi-update && echo Y | sudo rpi-update sudo shutdown -r now * Update Raspbian OS sudo apt-get update && sudo apt-get upgrade -y Because we are using Raspbian Lite we need to make sure that the Oracle Java SDK is installed: Note: in Raspbian Buster this needs to be openjdk-8-jdk sudo apt-get -y install oracle-java8-jdk * Add Ubiquiti Repo sudo echo 'deb http://www.ubnt.com/downloads/unifi/debian stable ubiquiti' | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.list * Add repo key sudo wget -O /etc/apt/trusted.gpg.d/unifi-repo.gpg https://dl.ubnt.com/unifi/unifi-repo.gpg * Install Unifi Controller sudo apt-get update sudo apt-get install unifi -y Reboot sudo shutdown -r now After it comes back up go to https://your.ip.address:8443 and start the initial setup.