### Setting up a gopher server on a RaspberryPi B+ ###
       
       
       Until now, my gopher was running on a full-blown Debian server (that was also
       tasked with a few other things). I decided to terminate this server due to
       maintenance cost, and pondered about shutting down the gopher service as well,
       after 12 years of solid service. But before doing so, I thought I'd try
       running it at home on some cheap RPi box. If it proves not to be too flaky
       or time consuming, I might leave it on for another 12 years or so.
       
       I have a few RPis laying around. For this gopher hosting task, I decided to
       go with the oldest one: a Raspberry Pi B+ from 2014. I chose this one mostly
       out of concern for power consumption - according to benchmarks found on the
       internet, all newer RPis have a higher consumption, even at idle time.
       Besides, gopher being a tech from the '90, it needs no CPU power anyway.
       
       I downloaded the latest available Raspbian release (took the "lite" variant,
       in the hope it was indeed light - but it was not). The image I downloaded was
       dated August 2020 and nicknamed "Buster" (/etc/debian_version says "10.4").
       I made some minor changes to the boot/config.txt file:
       
       arm_freq=100  (sets CPU speed to 100 MHz, should keep it cool and low-power)
       gpu_mem=16    (limits GPU memory to minimum, 16 MB, so OS can use the rest)
       
       I also created an empty "ssh" file in the boot partition of the SD card, for
       enabling out-of-the-box ssh support.
       
       Powered the RPi and... yes, it actually booted and allowed me to log in via
       ssh using the default "pi" account.
       
       Then, I tweaked the ssh and IP configuration:
       
       /etc/ssh/sshd.conf   -> enabled root login, disable password auth (and PAM)
       /etc/dhcpcd.conf     -> set up a static IP address
       
       Since the distribution, despite claiming to be "lite", is kind of bloated, I
       removed (apt-get purge) "some" packages that I didn't feel useful to me:
       
       bluez bluez-firmware avahi-daemon dphys-swapfile dc logrotate libx11-6 ed
       libx11-data libxau6 libxcb1 libxdmcp6 bind9-host geoip-database libdaemon0
       libavahi-common-data libavahi-common3 libavahi-core7 libbind9-161 libdns1104
       libfstrm0 libgeoip1 libisc1100 libisccc161 libisccfg163 liblmdb0 liblwres161
       libprotobuf-c1 avahi-daemon bluez bluez-firmware libnss-mdns pi-bluetooth
       firmware-atheros firmware-realtek firmware-libertas g++ lua5.1 luajit nano
       manpages manpages-dev ncdu ntfs-3g parted pigz rpcbind rsync triggerhappy
       alsa-utils fuse g++-8 libasound2 libasound2-data libbabeltrace1 libc6-dbg gdb
       libdw1 libevent-2.1-6 libfftw3-single3 libfuse2 libluajit-5.1-2 libtirpc3
       libluajit-5.1-common libnfsidmap2 libntfs-3g883 libparted2 libpython3.7 iw
       libsamplerate0 libstdc++-8-dev libtirpc-common rsyslog curl wpasupplicant
       xkb-data console-setup-linux libcurl4 libnghttp2-14 libnl-route-3-200 dbus
       libpcsclite1 librtmp1 libssh2-1 man-db htop netcat-openbsd netcat-traditional
       rfkill unzip wireless-tools wireless-regdb libiw30 zlib1g-dev libfreetype6
       libdbus-1-3 v4l-utils libnl-3-200 libnl-genl-3-200 libpng-tools libpng16-16
       libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 libncursesw5
       python3-urllib3 python3-six python3-requests python3-idna openresolv libv4l-0
       libjpeg62-turbo libv4l2rds0 libv4lconvert0 python3-certifi python3-chardet
       python3-pkg-resources libraspberrypi-doc gcc-5-base gcc-6-base gcc-7-base
       libboost-iostreams1.58.0 libfastjson4 liblognorm5
       
       And proceeded with a minor upgrade:
       
       apt-get update
       apt-get upgrade
       apt-get dist-upgrade
       
       Once all was done, the OS was taking about 1 GiB of SD space... Still way too
       much to my taste, but I will leave it as it is for the time being. I can't
       fight progress forever.
       
       When configuring the network, I had set up the static IP by editing the
       /etc/dhcpcd.conf file, as advised by Debian. Weird idea to configure a static
       IP through a DHCP client if you ask me, but whatever works, right? Well, I
       then noticed that the DHCP daemon was still listening on a UDP/68 socket:
       
       root@raspberrypi:~# netstat -anup
       Active Internet connections (servers and established)
       Proto Recv-Q Send-Q Local Address   Foreign Address   State   PID/Program name
       udp        0      0 0.0.0.0:68      0.0.0.0:*                 280/dhcpcd
       
       Not cool!
       
       So I ended up doing it the good old way by adding a configuration file named
       /etc/network/interfaces.d/eth0, and removed all DHCP clients:
       
       apt-get purge isc-dhcp-client isc-dhcp-common dhcpcd5
       
       Next, I downloaded the latest version of the Motsognir gopher server, built
       it (make), configured it and copied all my gopher content to the RPi.
       
       Finally, added a tmpfs-based /tmp in fstab and switched the partitions into
       read-only mode to forbid the system to wear off the SD card.
       
       Mounting / as read-only requires to pass a "ro" argument through the
       /boot/cmdline.txt file. I added there "fastboot" as well, to disable boot-time
       fsck checks (useless, since partitions are read-only anyway).
       
       Final reboot. Done. Let's see how stable this setup will be.