Fan-Less Home router

Quiet Machine = Happy Wife.
Happy Wife = Happy Life.

4x Celeron(R) CPU J1900 @ 1.99GHz
No Fans, so quiet it’s next to the “TV”

Amazon link follows, to Qotom J1900

4 port (gigabit NIC), and Quad processor, with 8 GB of RAM, 32 GB of SSD.

Qotom makes a variety of FAN-less computers — they used to do up to 4 port computers, but the latest set includes 6 and 8 port computers, now supporting memory up to 32 GB.

When building a home router, I find it useful to have 8GB (or more) RAM, under no circumstances should you enable any swap memory (routers shouldn’t use swap). If you want to run other programs; I usually run, for example, Asterisk (VoIP, Voice Over IP, phone system) with FreePBX, and Ubiquity/Unifi Wireless controller software. You must make sure, that whatever other applications you run, they never, ever exceed (or come even close) to using all the RAM. It’s a good idea to leave half the RAM unused — it won’t stay unused, Linux will use it for cache.

What do I run on this “tiny” box?

  • Operating system; Linux 20.04.1 LTS (it’s good to stick to LTS versions)
    • One of the first things is to change runlevel from 5 (graphical) to 4 (multi-user) — there is no monitor (or mouse or keyboard) connected, so why waste memory & CPU to graphics?
  • iptables with an uptight configuration, almost entirely uni-directional
  • tftpboot for internal phone system
  • dhcpclient (for external connections) + dhcpd (for internal clients — it’s a bit crazy to need two class C’s for internal clients… we like gadgets)
  • dns (named/bind9) caching server for internal use
  • ntpd (local time beacon)
  • apcupsd (UPS software daemon)
  • sshd (supports sshfs)
  • rsyslogd (with remote logging enabled — LAN logging server)
  • smartd to monitor the health of the SSD
  • Denyhosts (an ill-tempered configuration) to keep script kiddies away
  • Postfix to get FreePBX emails out (out only, no receiving)
  • MariaDB 5.7 (to support FreePBX)
  • Asterisk 13.8 + FreePBX 14.0 + Apache2
  • MongoDB (to support Unifi)
  • Ubiquity Unify Wireless Controller 5.14 w/java-8-jdk

With all these, usually memory consumption is 2.6GB and with the four cores, CPU utilization hovers around 0.2. So, about 5 GB is for cache.

Connections… (via NetworkManager, /etc/netplan/)

  • enp1s0; local area network, hard-coded
  • enp2s0; one of AT&T’s fixed IPs, though get it anyway via DHCPD4 from AT&T modem
  • enp3s0; Comcast gigabit IP, get it via DHCPD4 from Comcast
  • enp4s0; a dynamic IP from AT&T modem

FreePBX/Asterisk on Ubuntu 20.04 router

I recently started to build/update my FreePBX Asterisk server, and noticed that there were no CDR (Call Detail Records) being recorded…

Despite googling around it, I could not find a good solution, until I noticed that the libraries being pulled in from ‘/usr/lib/odbc/’ had version 5 in them, and my installation had version 8…

So, I had downloaded the wrong ODBC library (why does FreePBX/asterisk use ODBC anyway?).

ls -la /usr/lib/odbc/        
total 80160
drwxr-xr-x   2 root root      4096 Aug 17 15:03 ./
drwxr-xr-x 112 root root     12288 Aug  7 13:09 ../
lrwxrwxrwx   1 7161 31415       16 Mar  9 01:18 libcrypto.so -> libcrypto.so.1.1
-rwxr-xr-x   1 7161 31415 23772232 Mar  9 01:18 libmyodbc8a.so*
-rwxr-xr-x   1 7161 31415 23793016 Mar  9 01:18 libmyodbc8w.so*
lrwxrwxrwx   1 7161 31415       13 Mar  9 01:18 libssl.so -> libssl.so.1.1

Meanwhile, the file /etc/odbcinst.ini shows

cat /etc/odbcinst.ini 
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/odbc/libmyodbc5w.so
Setup=/usr/lib/odbc/libodbcmy5S.so
FileUsage=1

On to the solution… You’ll find the installation instructions (or FreePBX on Ubuntu) at https://wiki.freepbx.org/display/FOP/Installing+FreePBX+14+on+Ubuntu+18.04

And the offending part is at “Install MySQL ODBC Connector / The MySQL ODBC connector is used for CDRs. “

mkdir -p /usr/lib/odbc
curl -s https://cdn.mysql.com/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.11-linux-ubuntu18.04-x86-64bit.tar.gz | \
  tar -C /usr/lib/odbc --strip-components=2 --wildcards -zxvf - */lib/*so

Should basically be substituted with:

mkdir -p /usr/lib/odbc
curl -s https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.14-linux-glibc2.12-x86-64bit.tar.gz | \
  tar -C /usr/lib/odbc --strip-components=2 --wildcards -zxvf - */lib/*so

And, now you’re getting the ODBC 5 drivers, instead of the 8 drivers (which might be compatible calling-wise, but not name-wise).

The /usr/lib/odbc should now look like:

root@nuc:~# ll /usr/lib/odbc/
total 80160
drwxr-xr-x   2 root root      4096 Aug 17 15:03 ./
drwxr-xr-x 112 root root     12288 Aug  7 13:09 ../
lrwxrwxrwx   1 7161 31415       16 Mar  9 01:18 libcrypto.so -> libcrypto.so.1.1
-rwxr-xr-x   1 7161 31415 17239614 Oct 28  2019 libmyodbc5a.so*
-rwxr-xr-x   1 7161 31415 17259773 Oct 28  2019 libmyodbc5w.so*
-rwxr-xr-x   1 7161 31415 23772232 Mar  9 01:18 libmyodbc8a.so*
-rwxr-xr-x   1 7161 31415 23793016 Mar  9 01:18 libmyodbc8w.so*
lrwxrwxrwx   1 7161 31415       13 Mar  9 01:18 libssl.so -> libssl.so.1.1

After download the 5.3 drivers restart asterisk with

service asterisk restart

And you should start seeing CDR records in FreePBX.