How to run a GNU Social server

Recently the GNU Social project, which has existed for quite a while, got some publicity when the Mastodon project - which is one implementation of GNU Social - bought some advertising on Twitter. It seems to have been a perfect storm, because there had been recent unpopular user interface changes on the bird site. Also over the previous year the general culture on Twitter has noticeably degraded and the censorship increased. So there was yet another influx of new users to mastodon.social and other GNU Social sites. This happens every so often, but a high percentage of the new users usually return to their silos after a few days.

GNU Social is a federated system and that means there are multiple servers which communicate using a common protocol. You can create an account on any server and then "remote follow" users on other servers if you want to.

Here I'll give an example of how to install a GNU Social server onto a Beaglebone Black. You will need:

  • Beaglebone Black
  • Ethernet cable
  • 5V power supply for the Beaglebone
  • microSD card, at least 8GB, class 10 or better
  • A computer with some ability to write images to a microSD card, perhaps via a plug in adapter
  • A domain name of your own to use
  • A dynamic DNS account with some service provider

Download the current Beaglebone Black image:

wget https://freedombone.net/downloads/current/freedombone-current_beaglebone-armhf.img.xz
wget https://freedombone.net/downloads/current/freedombone-current_beaglebone-armhf.img.xz.sig

Verify the image:

gpg --verify freedombone-current_beaglebone-armhf.img.xz.sig

Determine which drive on your system is the microSD. You can do this by removing the card and running:

ls /dev/sd*

Then inserting the card and running the same command again. You'll be able to see what changes happened.

Now extract the image:

unxz freedombone-current_beaglebone-armhf.img.xz

And copy it to the microSD card, where sdX is the appropriate drive (it should not include any appended numbers, eg sdc instead of sdc1)

sudo dd if=freedombone-current_beaglebone-armhf.img of=/dev/sdX
sync

This might take a while, so go do something less boring instead. When it's finished remove the microSD card and insert it into the front of the Beaglebone Black.

Beaglebone

Connect the Beaglebone Black to your internet router using the ethernet cable and plug in the 5V power. If all is going well after a few seconds you should see that the blue LEDs start flashing. If no LEDs come on then remove the microSD card and try using the dd command to copy the image again.

Now the Beaglebone should be active on your local network. It's accessible via Avahi (like a network printer). You can ssh into it with:

ssh fbone@freedombone.local -p 2222

With the username fbone and password freedombone. You might be prompted to enter the password a second time and then a new randomly generated password will be shown. Copy that into a password manager or write it down. You'll need it if you ever want to log in again.

After pressing any key and entering your details the initial install should start. This takes about half an hour on a Beaglebone. Don't be too concerned if you see error messages, so long as the install keeps going. When it's done the Beaglebone will reboot and you'll notice your ssh session logs out.

You now have a running Freedombone system on the Beaglebone Black. ssh back into the Beaglebone:

ssh yourusername@freedombone.local -p 2222

Using the password you recorded earlier. You'll see the user control panel and can navigate using up and down cursor keys, Space Bar to select and Enter to confirm.

Select Administrator controls. You'll be asked to enter your password again.

Select Add/Remove Apps, then gnusocial. You'll be asked for the domain name, and I usually make this a subdomain such as social.mydomainname. You can also specify a background image which can be a URL to any image available on the internet. Then select Ok or hit Enter and the install should begin. If it succeeded then you should be returned to the control panel menu.

Select Passwords then gnusocial and copy the password into your password manager or write it down. You'll need that to log in to GNU Social.

Finally you'll need to forward ports 80 and 443 to the Beaglebone Black from your internet router. Exactly how you do this will depend upon your router model, and often the port forward settings are within a firewall section of the router administration system. Usually the home router is accessible via an IP address such as 192.168.2.1 or 192.168.1.254 or 192.168.10.1.

Now in a browser navigate to your GNU Social domain (or subdomain). You should then be able to log in. If you get a TLS certificate warning then on the BeagleBone Black go to the administrator control panel, select Security Settings and Renew Let's Encrypt certificate. That will make sure that the TLS certificate is installed.

If all went well you are now federating on the open internet. Use your new powers wisely.

Beglebone Black

This was just one example of installing the Freedombone system. It's possible to install on different hardware, such as an old laptop and also install different internet services, including the exciting new GNU Social variant called PostActiv. For details see the Freedombone site.