#+TITLE: #+AUTHOR: Bob Mottram #+EMAIL: bob@freedombone.net #+KEYWORDS: freedombone, mesh #+DESCRIPTION: Freedombone mesh network images #+OPTIONS: ^:nil toc:nil #+HTML_HEAD: #+attr_html: :width 80% :height 10% :align center [[file:images/logo.png]] * Mesh Network: Images * Pre-built Disk Images ** Writing many images quickly There may be situations where you need to write the same disk image to multiple drives at the same time in order to maximize rate of deployment. In the instructions given below the *dd* command is used for writing to the target drive, but to write to multiple drives you can use a tool such as [[https://wiki.gnome.org/Apps/MultiWriter][GNOME MultiWriter]]. For example on Arch/Parabola: #+begin_src bash sudo pacman -S gnome-multi-writer #+end_src Or on Debian based systems: #+begin_src bash sudo apt-get install gnome-multi-writer #+end_src The MultiWriter tool is also available within mesh client images, so that you can use mesh systems to create more copies of the same system. ** Client images #+attr_html: :width 100% :align center [[file:images/mesh_netbook.jpg]] "Client" isn't exactly the right term, but it's a mesh peer with a user interface. These images can be copied to a USB drive, then you can plug it into a laptop/netbook/desktop machine and boot from it. You will probably also need an Atheros USB wifi dongle (the black protruding object on the left side of the netbook in the picture above), because most built-in wifi usually requires proprietary firmware. In the commands below substitute /dev/sdX with the USB drive device, excluding any trailing numbers (eg. /dev/sdb). The USB drive you're copying to will need to be at least 16GB in size. Install some prerequisites: #+begin_src bash sudo apt-get install xz-utils wget #+end_src To download images with dat: #+begin_src bash dat clone dat://e2ed9767d6ab64f4c43a2adbce65af225133fec7ba95737f0a2f6ae292ba358e/ cd e2ed9767d6ab64f4c43a2adbce65af225133fec7ba95737f0a2f6ae292ba358e #+end_src Or to download images directly with wget (may be slower): #+begin_src bash wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig #+end_src Check the signature: #+begin_src bash gpg --verify freedombone-meshclient-i386.img.xz.sig unxz freedombone-meshclient-i386.img.xz #+end_src Then clone to the USB drive, where sdX is your USB device: #+begin_src bash sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8 sudo dd bs=32M if=freedombone-meshclient-i386.img of=/dev/sdX conv=fdatasync,sync,noerror #+end_src To get a number of systems onto the mesh repeat the /dd/ command to create however many bootable USB drives you need. If you're in an emergency and don't have Atheros wifi dongles then there is also an "insecure" image which contains some proprietary wifi drivers which may work with a wider range of laptops. Proprietary drivers *are not recommended* because they're unsupportable and may be exploitable or contain malicious antifeatures which fundamentally compromise the security of the network. However, the trade-off between security/maintainability and simply having the ability to communicate at all may be a valid one in some situations. Install some prerequisites: #+begin_src bash sudo apt-get install xz-utils wget #+end_src To download images with dat: #+begin_src bash dat clone dat://6d1b73d13b6f9b5c481c6dfd64be6aa58e1cd2d153a6bb04bbc177999ee9925e/ cd 6d1b73d13b6f9b5c481c6dfd64be6aa58e1cd2d153a6bb04bbc177999ee9925e #+end_src Or to download images directly with wget (may be slower): #+begin_src bash wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig #+end_src Check the signature: #+begin_src bash gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig unxz freedombone-meshclient-insecure-i386.img.xz #+end_src Then clone to the USB drive, where sdX is your USB device: #+begin_src bash sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8 sudo dd bs=32M if=freedombone-meshclient-insecure-i386.img of=/dev/sdX conv=fdatasync,sync,noerror #+end_src ** Router images Routers are intended to build network coverage for an area using small and low cost hardware. You can bolt them to walls or leave them on window ledges. They don't have any user interface and their only job is to haul network traffic across the mesh and to enable peers to find each other via running bootstrap nodes for Tox and IPFS. Copy the image to a microSD card and insert it into the router, plug in an Atheros wifi dongle and power on. That should be all you need to do. *** Beaglebone Black #+attr_html: :width 50% :align center [[file:images/mesh_router.jpg]] The above picture shows a Beaglebone Black with the image copied onto a microSD card (there's no need to do anything with the internal EMMC). A USB Atheros wifi adaptor with a large antenna is attached and in this case power is from the mains, although it could be from a battery or solar power system capable of supplying 5 volts and maybe 1A (depending upon how active the router is). #+begin_src bash sudo apt-get install xz-utils wget wget https://freedombone.net/downloads/v31/freedombone-mesh_beaglebone-armhf.img.xz wget https://freedombone.net/downloads/v31/freedombone-mesh_beaglebone-armhf.img.xz.sig gpg --verify freedombone-mesh_beaglebone-armhf.img.xz.sig unxz freedombone-mesh_beaglebone-armhf.img.xz sudo dd bs=32M if=freedombone-mesh_beaglebone-armhf.img of=/dev/sdX conv=fdatasync,sync,noerror #+end_src If you have a few Beaglebone Blacks to use as routers then repeat the /dd/ command to create however many microSD cards you need. There is still a software freedom issue with the Beaglebone Black, but it doesn't prevent you from running a fully free system on the board. The TI AM335X SOC has a PowerVR SGX530 GPU which will only run with a proprietary blob, but this would only be an issue for systems with a monitor or LCD screen attached running a desktop environment which also needs GPU acceleration. For "headless" systems such as servers or mesh routers this isn't a problem. * Building Disk Images It's better not to trust images downloaded from random places on the interwebs. Chances are that unless you are in the web of trust of the above GPG signatures then they don't mean very much to you. If you actually want something trustworthy then build the images from scratch. It will take some time. Here's how to do it. First you will need to create an image. On a Debian based system (tested on Debian Stretch): #+begin_src bash sudo apt-get -y install git wget build-essential wget https://freedombone.net/downloads/v31/freedombone.tar.gz wget https://freedombone.net/downloads/v31/freedombone.tar.gz.sig gpg --verify freedombone.tar.gz.sig tar -xzvf freedombone.tar.gz cd freedombone git checkout stretch sudo make install freedombone-image --setup debian freedombone-image -t i386 -v meshclient #+end_src If you don't have Atheros or free software compatible wifi adapter then you can include proprietary wifi drivers which will work with most laptops. This is *NOT RECOMMENDED* because proprietary drivers are unsupportable and may contain either malware or be exploitable in a way which can't be fixed. However, if you're in an emergency and don't have any Atheros or free software wifi USB dongles then you can use the following command to make the image: #+begin_src bash freedombone-image -t i386 -v meshclient --insecure yes #+end_src This takes a while. Maybe an hour or so, depending on the speed of your system and the internets. The good news though is that once created you can use the resulting image any number of times, and you don't need to trust some pre-built image. List what drives are on your system with: #+begin_src bash ls /dev/sd* #+end_src Now plug in the USB thumb drive, and do the same again. Notice which drive letter gets added. You can now copy the image to the USB thumb drive, replacing *sdX* with the identifier of the USB thumb drive. Don't include any numbers (so for example use *sdc* instead of *sdc1*). #+begin_src bash sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8 sudo dd bs=32M if=myimagefile.img of=/dev/sdX conv=fdatasync,sync,noerror #+end_src And wait. Again it will take a while to copy over. When that's done plug it into the laptop or netbook which you want to use on the mesh, power on and set the BIOS to boot from the USB stick. On first boot you'll be asked to set a username, and then you can open the chat client and select the *users* icon to show the Tox IDs for other users on the mesh. When folks join they will be announced. Rinse, repeat, for any number of laptops that you want to get onto the mesh or to build out coverage within an area. There are no servers. Just peer-to-peer communications routed through the network which are end-to-end secure after a friend request is accepted. By default the chat client doesn't log anything. You can also use single board computers (SBCs) such as the BeagleBone Black to make mesh routers which can be bolted to walls or the sides of buildings and consume minimal electrical power, so could be solar or battery powered for short term events such as festivals. To do that use the following command to make the image: #+begin_src bash freedombone-image -t beaglebone -v mesh #+end_src The resulting image can be copied to a microSD card, inserted into a Beaglebone Black and booted. Don't forget to plug in an Atheros USB wifi dongle. #+attr_html: :width 10% :height 2% :align center [[file:fdl-1.3.txt][file:images/gfdl.png]]