Installing the UniFi Network Application on Raspberry Pi

Unfortunately MongoDB does not have an ARM64 bit package for Raspberry Pi yet, so I’m installing this on a Raspberry Pi with a 32-bit (Debian-based) Raspberry Pi OS:

sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt-get autoclean -y
sudo apt install openjdk-8-jre-headless jsvc libcommons-daemon-java -y
sudo apt install haveged -y
sudo apt install mongodb-server mongodb-clients -y

echo 'deb https://www.ui.com/downloads/unifi/debian stable ubiquiti' | sudo tee /etc/apt/sources.list.d/100-ubnt-unifi.list
sudo wget -O /etc/apt/trusted.gpg.d/unifi-repo.gpg https://dl.ui.com/unifi/unifi-repo.gpg
sudo apt update && sudo apt install unifi -y

Go to your UniFi Controller via the IP address and port, for example: https://10.1.0.5:8443

Updating Eclipse Ditto

Stop running containers using docker-compose and remove the containers.

docker-compose stop
docker rm docker_nginx_1
docker rm docker_connectivity_1
docker rm docker_gateway_1 
docker rm docker_things_1 
docker rm docker_concierge_1 
docker rm docker_things-search_1
docker rm docker_policies_1
docker rm docker_mongodb_1
docker rm docker_swagger-ui_1 
docker system prune -a

Download the latest Ditto zip from Github and re-run docker-compose.yaml.

This folder contains an example docker-compose.yml which can be used to start Eclipse Ditto with its backing Database – MongoDB – and a reverse proxy – nginx – in front of the HTTP and WebSocket API.

Eclipse Ditto :: Docker

Source: https://github.com/eclipse/ditto/blob/master/deployment/docker/README.md

Configure nginx

The nginx’s configuration is located in the nginx.conf file and contains a “Basic authentication” for accessing the HTTP and WebSocket API. The users for this sample authentication are configured in the nginx.httpasswd file also located in this directory.

In order to add a new entry to this file, use the “openssl passwd” tool to create a hashed password:

openssl passwd -quiet
 Password: <enter password>
 Verifying - Password: <enter password>

Append the printed hash in the nginx.httpasswd file placing the username who shall receive this password in front like this:

ditto:A6BgmB8IEtPTs

Configuration of the services

You may configure each service via passing variables to the java VM in the entrypoint section for each service.

...
# Alternative approach for configuration of the service
command: java -Dditto.gateway.authentication.devops.password=foobar -jar starter.jar

To get a list of available configuration options you may retrieve them from a running instance via:

# Substitute gateway with the service you are interested in
curl http://devops:foobar@localhost:8080/devops/config/gateway/?path=ditto

Or by going through the configuration files in this repository e.g. /services/gateway/starter/src/main/resources/gateway.conf.

Start Eclipse Ditto

docker-compose up -d

Check the logs after starting up:

docker-compose logs -f

Stop Eclipse Ditto

docker-compose down

Installing .NET 6 on a Raspberry PI (Debian)

Create a folder, for example /app/dotnet6, and assign ownership to the right user:

mkdir /app/dotnet6
chown -R pi /app/

Download the .NET 6 SDK at Microsoft:

wget https://download.visualstudio.microsoft.com/download/pr/adcd9310-5072-4179-9b8b-16563b897995/15a7595966f488c74909e4a9273c0e24/dotnet-sdk-6.0.100-linux-arm64.tar.gz

Extract the tar.gz file in the /app/dotnet6 directory:

sudo tar zxf dotnet-sdk-6.0.100-linux-arm64.tar.gz -C /app/dotnet6

Test the .NET6 installation by browsing to the installation directory and execute the dotnet –info command:

cd /app/dotnet6
dotnet --info
.NET SDK (reflecting any global.json):
 Version:   5.0.101
 Commit:    d05174dc5a

Runtime Environment:
 OS Name:     debian
 OS Version:  10
 OS Platform: Linux
 RID:         debian.10-arm64
 Base Path:   /app/dotnet/sdk/5.0.101/

Host (useful for support):
  Version: 5.0.1
  Commit:  b02e13abab

.NET SDKs installed:
  5.0.101 [/app/dotnet/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 5.0.1 [/app/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 5.0.1 [/app/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

Increasing the maximum upload file size in WordPress

Locate php.ini. For Debian this file is located in:

/etc/php/7.4/apache2

Search for the following configuration lines (in nano use CTRL+W for search) and replace the existing configuration values with acceptable values.

max_execution_time = 60
memory_limit = 128M
post_max_size = 64M
upload_max_filesize = 64M
max_input_time = 60
file_uploads = On
safe_mode = Off

Locate .htaccess file in the root of your wordpress directory and add or adjust:

php_value upload_max_filesize 64M
php_value post_max_size 128M
php_value memory_limit 256M
php_value max_execution_time 300
php_value max_input_time 300

When you open the media library in WordPress and try to upload a file it should reflect the maximum configured upload file size:

InfluxDB update from 1.8.6-1 to 1.8.7-1

Upgrading InfluxDB failed. For some reason the update caused permission issues with the start-up script:

usr/lib/influxdb/scripts/influxd-systemd-start.sh

When I gave this file permission to execute the InfluxDB service started again:

chmod +x /usr/lib/influxdb/scripts/influxd-systemd-start.sh

Then, the next problem appeared: systemctl didn’t recognise that the service was actually running: it was stuck in the state “activating”. Then I found an article on serverfault that described my problem.

I’m running InfluxDB on Debian so couldn’t apply the suggestion solution, but needed to interpret this a bit. I edited the file:

/etc/systemd/system/influxd.service

I changed the type to simple, as indicated in this code sample:

[Unit]
Description=InfluxDB is an open-source, distributed, time series database
Documentation=https://docs.influxdata.com/influxdb/
After=network-online.target

[Service]
User=influxdb
Group=influxdb
LimitNOFILE=65536
EnvironmentFile=-/etc/default/influxdb
ExecStart=/usr/lib/influxdb/scripts/influxd-systemd-start.sh
KillMode=control-group
Restart=on-failure
Type=simple
PIDFile=/var/lib/influxdb/influxd.pid

[Install]
WantedBy=multi-user.target
Alias=influxd.service

Check the disk space consumption of a Linux directory

Today, one of my virtual systems ran out of disk space. To find the root cause I needed to find the directory that was filling up. Using the right parameters, the du command returns a list of directories and their disk space consumption.

du -hc --max-depth=0 /var

For example:

root@DB152:/# du -hc --max-depth 1 /var
704K    /var/tmp
4.0K    /var/mail
23M     /var/log
1.1M    /var/backups
4.0K    /var/local
3.2G    /var/lib
20K     /var/spool
734M    /var/cache
4.0K    /var/opt
3.9G    /var
3.9G    total

Removing files of a certain type recursively:

find . -name "*json.log" -type f -delete

Clearing (system) log files:

truncate /var/log/* --size 0