Project Byzantium would like to announce the accomplishment of the first milestone of our ISC Development Grant, the successful port of Byzantium Linux to the RaspberryPi!
We considered using the Arm port of Porteus Linux for the RaspberryPi version of Byzantium but decided to examine other options available first. A little research revealed that there are two Linuxes in common use on the RaspberryPi right now, Raspbian (which is Debian Wheezy for the Arm platform) and Arch Linux for Arm. These distributions are already in wide use by the RaspberryPi community so we felt fairly sure that this was a sign of both stability and flexibility. We opted to use Raspbian because it seems to be the more popular of the two. Also, the packaging process for Debian was better understood than that for Arch Linux by the Project Byzantium team. We’re in a rapid development cycle so we wanted to hit the ground running and accomplish as much as possible in the available time before the first milestone.
We created a separate Git repository for ByzPi so that we could patch our code to account for Debian’s idiosyncracies without interfering with the main code tree. We modified our initscripts to be Debian compatible and worked out the service dependencies in the existing installation image. We also ported our customized configuration files to Raspbian where necessary. Early in this development cycle we organized our code in such a way that building Debian packages would be easier as well as maintainable for the future. We created packages for the captive portal daemon, service directory, and autoconfiguration daemon. There were a couple of things that weren’t available in the Debian repositories that we had to package ourselves, like QwebIRC and etherpad-lite. We also created a public Debian repository for the packages we created so they could be installed with APT.
Puppet is used to manage the installation of our customized configuration files, and we used Blueprint to generate the initial manifests. We also use Puppet to manage whether or not a system service runs at boot-time on Byzantium nodes. The autoconfiguration daemon controls the states of some services and we need to exercise greater control over them to avoid functional conflicts. To automate the process of turning a running copy of Raspbian into a Byzantium node, we wrote an all-in-one installation script that is executed with a single cut-and-pastable command. It takes some time to run because the script does an apt-get upgrade so all of the systemware will be up to date, but by the end of the process the only thing you will have to do is plug in a USB 802.11 interface and reboot the RaspberryPi. Here’s how to do it once you’ve logged into a RaspberryPi:
curl -s http://byzantium.github.io/ByzPi/install.sh | bash
ByzPi has all of the features of the latest stable release of Byzantium Linux. It will automatically configure itself at boot time, and is automatically interoperable with existing Commotion Wireless networks. If plugged into an Ethernet network (even at boot-time) it will configure itself as a gateway to the global Net for the mesh network. It will even run completely headless, which makes it ideal for semipermanant infrastructure installation. Due to the fact that ByzPi is a ‘real’ installation and not a live distribution, we’ve also made it sensitive to its internal state and it will account for configuration changes that may potentially cause confusion, such as the existence and later non-existence of network gateways.