In my quest to make use of all my single board computers, there was one project that just needed a bit of modernization. Back in 2014, I created a Quake 3 server using a BeagleBone Black (BBB). This little machine traveled with me for quite a while, but it was taking up extra space in my already stuffed backpack and so it got added to the pile of SBCs in my closet.
I began by making an rsync backup of the existing eMMC drive to another system. I then downloaded the latest Stretch IoT version and burned it to a micro SD card using Etcher. Then, I consulted a few different sources to get the new image flashed to the eMMC correctly. Contrary to the documentation, after following the flashing procedure and waiting a long time, my system had all four LEDs off. I left it untouched for a very long time in the hope that they would come on, but they never did. I didn't have much hope for success, but when I removed the SD card, and pushed the reset button it booted right up. I checked that I didn't still have the previous version, but this was definitely the latest.
cat /etc/debian_version
9.5
I skipped the usual boot-with-the-USB-plugged-into-a-computer-and-go-to-the-webpage procedure and just powered up the system and used SSH to connect. It took me a while to figure out the default username and password because there are different values documented. Turns out they were "debian" and "temppwd", respectively. I changed the debian user password, disabled root SSH logins, and created a new account for myself with sudo rights so I didn't have to use either default account.
Since the BBB is described as
a low-cost, community-supported development platform for developers and hobbyists. Boot Linux in under 10 seconds and get started on development in less than 5 minutes with just a single USB cable.
There are a lot of services enabled by default, and I need as much space as possible of the available 4GB eMMC for Quake 3. So, I disabled a bunch of services and removed a bunch of pre-installed packages and files:
sudo systemctl disable bonescript.socket
sudo systemctl disable bonescript.service
sudo systemctl stop bonescript.socket
sudo systemctl stop bonescript.service
sudo systemctl disable bonescript-autorun.service
sudo systemctl stop bonescript-autorun.service
sudo systemctl disable cloud9.service
sudo systemctl stop cloud9.service
sudo apt remove bone101 bonescript c9-core-installer doc-beaglebone-getting-started
Moved Apache back to port 80:
sudo vi /etc/apache2/ports.conf
sudo vi /etc/apache2/sites-enabled/000-default.conf
Disable USB mounting and network:
sudo vi /etc/default/bb-boot
(Uncomment the following)
USB_IMAGE_FILE_DISABLED=yes
USB_NETWORK_DISABLED=yes
Also gathering dust in my closet was a ChronoDot, which I bought years ago to give the BBB a real time clock that didn't reset to 1970 whenever the system was shutdown. I primarily followed directions in a post by Lemoneer to get the clock recognized and setup. There were a few differences between the article and the process I had to follow. First, I had to run i2cdetect on a different bus number:
i2cdetect -y -r 2
Then, I had to change the i2c devices echo similarly:
echo ds3231 0x68 > /sys/bus/i2c/devices/i2c-2/new_device
I also had to configure locale and add a timezone to get the clock offset correct:
ln -s /usr/share/zoneinfo/America/New_York localtime
Then, I had to solder the ChronoDot in to the case. I had done all the test wiring with a Beagle Bone Proto, but I didn't want to solder directly to the Proto in case I need it in the future. Also, the ChronoDot was too tall to fit in my case when it was sitting on top of the Proto cape. So, I just decided to mount the ChronoDot on top of the case and wire it directly to a few header pins so I could wire to pins 1,3 and 19,20 as pairs. I drilled a hole for each leg of the ChronoDot and soldered wires to the pins. I was having a hard time with getting wires soldered to the pins and found this excellent YouTube video with a technique I had not seen before. Now the BBB can be shut off and will have the correct time on restart.
The idea behind this server is that I can bring it anywhere I want to go, plug it in to an ethernet port, power it up, and play Quake 3. I have always been worried about disk corruption when I pull the power plug. The BBB has a power and reset button, but they are hidden inside the case. I noticed in the pin diagram that there is a power output at pin 9, and I had a push button switch in my pile. There were already a few holes in my case, what's one more? I wired up the shutdown switch and tested that it will stop and start the BBB. I like that it is recessed and you have to use a pen or similar to access it. I was concerned that it was just cutting power, but system logs indicate it is actually performing a clean shutdown:
root@beaglebone:~# last -x | grep shutdown
...
shutdown system down 4.14.67-ti-r73 Mon Sep 17 17:15 - 19:00 (-6834+-21:-15)
...
Finally, I did the Quake 3 server installation, but there's already an blog entry about that.
Now, I'm back to a modernized, portable Quake 3 server with a couple extra bells and whistles. I can take with me when I want to play some Quake 3 with friends. This particular system does have one last wrinkle in my SBC project, though. I want to be able to mount all of these devices in a way that includes a power source, and now I need to add an network switch with ethernet ports to the installation.