FreedomBox/doc/freedombox-manual.raw.xml
James Valleroy 76b709fba0
Fetch latest manual
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2019-01-14 21:55:47 -05:00

10728 lines
562 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.docbook.org/xml/4.4/docbookx.dtd">
<article>
<articleinfo>
<title>FreedomBox/Manual</title>
<revhistory>
<revision>
<revnumber>66</revnumber>
<date>2019-01-10 21:46:53</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Include Cockpit manual page</revremark>
</revision>
<revision>
<revnumber>65</revnumber>
<date>2019-01-03 04:17:54</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Update link to rpi3b and add link to rpi3b+</revremark>
</revision>
<revision>
<revnumber>64</revnumber>
<date>2018-03-05 12:22:59</date>
<authorinitials>JosephNuthalapati</authorinitials>
<revremark>Renamed Disks to Storage</revremark>
</revision>
<revision>
<revnumber>63</revnumber>
<date>2018-03-05 03:57:14</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Update link to XMPP to ejabberd</revremark>
</revision>
<revision>
<revnumber>62</revnumber>
<date>2018-03-02 12:03:07</date>
<authorinitials>JosephNuthalapati</authorinitials>
<revremark>Rename Matrix to MatrixSynapse</revremark>
</revision>
<revision>
<revnumber>61</revnumber>
<date>2018-02-22 12:14:31</date>
<authorinitials>JosephNuthalapati</authorinitials>
<revremark>Include Searx manual entry</revremark>
</revision>
<revision>
<revnumber>60</revnumber>
<date>2018-02-10 03:19:17</date>
<authorinitials>JosephNuthalapati</authorinitials>
<revremark>Add Coquelicot and sort Apps section in alphabetical order</revremark>
</revision>
<revision>
<revnumber>59</revnumber>
<date>2018-01-17 10:27:42</date>
<authorinitials>JosephNuthalapati</authorinitials>
<revremark>Include MediaWiki manual entry</revremark>
</revision>
<revision>
<revnumber>58</revnumber>
<date>2018-01-04 20:04:28</date>
<authorinitials>David Jones</authorinitials>
</revision>
<revision>
<revnumber>57</revnumber>
<date>2017-11-14 02:27:58</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>include Snapshots page</revremark>
</revision>
<revision>
<revnumber>56</revnumber>
<date>2017-10-21 14:53:00</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>Adding Syncthing</revremark>
</revision>
<revision>
<revnumber>55</revnumber>
<date>2017-06-06 04:07:40</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Include pcDuino3 and RaspberryPi3</revremark>
</revision>
<revision>
<revnumber>54</revnumber>
<date>2017-03-23 06:34:36</date>
<authorinitials>rahulde</authorinitials>
</revision>
<revision>
<revnumber>53</revnumber>
<date>2017-01-21 17:18:07</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>drop shaarli</revremark>
</revision>
<revision>
<revnumber>52</revnumber>
<date>2017-01-18 23:32:13</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>move release notes down</revremark>
</revision>
<revision>
<revnumber>51</revnumber>
<date>2017-01-18 15:25:21</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>Drop planned apps -- no reason to include them in manual yet</revremark>
</revision>
<revision>
<revnumber>50</revnumber>
<date>2017-01-02 13:54:14</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>include LetsEncrypt page</revremark>
</revision>
<revision>
<revnumber>49</revnumber>
<date>2016-12-23 18:52:10</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>Drop ownCloud page from manual. It has not been available in Debian for some time now.</revremark>
</revision>
<revision>
<revnumber>48</revnumber>
<date>2016-12-23 18:32:35</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>move available apps / planned apps to top level</revremark>
</revision>
<revision>
<revnumber>47</revnumber>
<date>2016-12-23 18:27:34</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>move not available apps to separate section</revremark>
</revision>
<revision>
<revnumber>46</revnumber>
<date>2016-12-23 17:49:13</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>Drop Advanced page from manual. The plugserver repo has not been updated in a long time, and would conflict with our current setup.</revremark>
</revision>
<revision>
<revnumber>45</revnumber>
<date>2016-12-23 14:58:06</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>remove links to old manuals (deleted pages)</revremark>
</revision>
<revision>
<revnumber>44</revnumber>
<date>2016-09-04 10:16:09</date>
<authorinitials>Drahtseil</authorinitials>
</revision>
<revision>
<revnumber>43</revnumber>
<date>2016-08-31 17:50:53</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added security, reordered alphabetically apps and system; dynamic DNS + pagekite -&gt; system; kept secureshell, unhosted, gnusocial</revremark>
</revision>
<revision>
<revnumber>42</revnumber>
<date>2016-08-31 17:13:30</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added Disks</revremark>
</revision>
<revision>
<revnumber>41</revnumber>
<date>2016-08-21 17:19:00</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added NameServices</revremark>
</revision>
<revision>
<revnumber>40</revnumber>
<date>2016-08-21 09:50:21</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added Service Discovery</revremark>
</revision>
<revision>
<revnumber>39</revnumber>
<date>2016-08-21 09:44:45</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added Diagnostics, typo in Power</revremark>
</revision>
<revision>
<revnumber>38</revnumber>
<date>2016-08-21 09:30:28</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added Power</revremark>
</revision>
<revision>
<revnumber>37</revnumber>
<date>2016-08-17 20:11:37</date>
<authorinitials>Drahtseil</authorinitials>
<revremark>added include Quassel</revremark>
</revision>
<revision>
<revnumber>36</revnumber>
<date>2016-05-27 17:24:54</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>add repro page</revremark>
</revision>
<revision>
<revnumber>35</revnumber>
<date>2016-04-10 07:04:38</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Cleaned Radicale feature link made for page creation</revremark>
</revision>
<revision>
<revnumber>34</revnumber>
<date>2016-04-10 06:35:00</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Created manual page "Radicale" [FreedomBox/Manual/Radicale]</revremark>
</revision>
<revision>
<revnumber>33</revnumber>
<date>2016-04-10 06:31:49</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added to FreedomBox manuel new page to do = Radicale</revremark>
</revision>
<revision>
<revnumber>32</revnumber>
<date>2016-02-15 12:50:14</date>
<authorinitials>JamesValleroy</authorinitials>
<revremark>use BEGIN_INCLUDE for Debian page</revremark>
</revision>
<revision>
<revnumber>31</revnumber>
<date>2016-01-20 16:40:56</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added GnuSocial Include in the Manual tree</revremark>
</revision>
<revision>
<revnumber>30</revnumber>
<date>2015-12-16 00:31:47</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added OpenVPN page to Apps manual</revremark>
</revision>
<revision>
<revnumber>29</revnumber>
<date>2015-11-29 20:55:54</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added ## BEGIN_INCLUDE</revremark>
</revision>
<revision>
<revnumber>28</revnumber>
<date>2015-11-29 20:54:55</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added ## BEGIN_INCLUDE for [QuickStart]</revremark>
</revision>
<revision>
<revnumber>27</revnumber>
<date>2015-11-29 20:20:46</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Fixing include for manual</revremark>
</revision>
<revision>
<revnumber>26</revnumber>
<date>2015-11-29 19:27:21</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Text finishing</revremark>
</revision>
<revision>
<revnumber>25</revnumber>
<date>2015-11-29 19:20:25</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Fixing TOC [hardware content]</revremark>
</revision>
<revision>
<revnumber>24</revnumber>
<date>2015-11-29 19:11:48</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Bug fixing</revremark>
</revision>
<revision>
<revnumber>23</revnumber>
<date>2015-11-29 19:10:45</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added from="## BEGIN_INCLUDE" [fbx/download]</revremark>
</revision>
<revision>
<revnumber>22</revnumber>
<date>2015-11-21 16:42:45</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add A20 OLinuXino Lime2/MICRO pages</revremark>
</revision>
<revision>
<revnumber>21</revnumber>
<date>2015-11-08 23:03:14</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added Use page content [Other resources] + [Tell People]</revremark>
</revision>
<revision>
<revnumber>20</revnumber>
<date>2015-11-08 22:49:24</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>&lt;&lt;TableOfContents(1)&gt;&gt; &gt;&gt; &lt;&lt;TableOfContents(2)&gt;&gt;</revremark>
</revision>
<revision>
<revnumber>19</revnumber>
<date>2015-11-08 22:48:14</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>TableOfContents(3) &gt;&gt; TableOfContents(1)</revremark>
</revision>
<revision>
<revnumber>18</revnumber>
<date>2015-11-08 22:10:12</date>
<authorinitials>PhilippeBaret</authorinitials>
<revremark>Added Introduction page</revremark>
</revision>
<revision>
<revnumber>17</revnumber>
<date>2015-11-06 15:23:56</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add APU as supported hardware</revremark>
</revision>
<revision>
<revnumber>16</revnumber>
<date>2015-10-23 20:16:08</date>
<authorinitials>MarkusSabadello</authorinitials>
<revremark>adding Unhosted to Apps</revremark>
</revision>
<revision>
<revnumber>15</revnumber>
<date>2015-10-04 11:17:00</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Include Download page</revremark>
</revision>
<revision>
<revnumber>14</revnumber>
<date>2015-09-16 16:38:33</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Don't include TOC from developer guide</revremark>
</revision>
<revision>
<revnumber>13</revnumber>
<date>2015-09-16 16:24:02</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Include the secure shell page</revremark>
</revision>
<revision>
<revnumber>12</revnumber>
<date>2015-09-16 12:35:53</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Relocate and rename developer section</revremark>
</revision>
<revision>
<revnumber>11</revnumber>
<date>2015-09-16 12:18:57</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add hacking section</revremark>
</revision>
<revision>
<revnumber>10</revnumber>
<date>2015-09-16 12:01:25</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add contributing section</revremark>
</revision>
<revision>
<revnumber>9</revnumber>
<date>2015-09-16 08:29:07</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add USBWiFi page</revremark>
</revision>
<revision>
<revnumber>8</revnumber>
<date>2015-09-14 03:41:12</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Temporarily remove portal link to avoid Dockbook export issue</revremark>
</revision>
<revision>
<revnumber>7</revnumber>
<date>2015-09-14 03:27:32</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Remove Dreamplug TOC</revremark>
</revision>
<revision>
<revnumber>6</revnumber>
<date>2015-09-13 16:03:28</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add release notes</revremark>
</revision>
<revision>
<revnumber>5</revnumber>
<date>2015-09-13 15:26:24</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Minor fix to title</revremark>
</revision>
<revision>
<revnumber>4</revnumber>
<date>2015-09-13 15:20:46</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Move getting help to the top of the manual</revremark>
</revision>
<revision>
<revnumber>3</revnumber>
<date>2015-09-13 15:01:14</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Don't bottom parts of each page</revremark>
</revision>
<revision>
<revnumber>2</revnumber>
<date>2015-09-13 14:45:33</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Add FreedomBox category and portal</revremark>
</revision>
<revision>
<revnumber>1</revnumber>
<date>2015-09-13 14:43:38</date>
<authorinitials>SunilMohanAdapa</authorinitials>
<revremark>Initial page for FreedomBox aggregated manual</revremark>
</revision>
</revhistory>
</articleinfo>
<section>
<title>FreedomBox: take your online privacy back</title>
<para>FreedomBox is a ready made personal server, designed with privacy and data ownership in mind. It is a subset of the <ulink url="https://www.debian.org/">Debian universal operating system</ulink> and includes free software only. You can run it on a small, inexpensive and power-efficient computer box in your home that is dedicated for that use. It can also be installed on any computer running Debian or in a virtual machine.</para>
<para>In order to replace third-party communication services that are data mining your entire life, you will be able to host services yourself and use them at home or over the Internet through a browser or specialized apps. These services include chat and voice calls, webmail, file sharing and calendar, address book and news feed synchronization. For example, to start using a private chat service, activate the service from the administration interface and add your friends as authorized users of the service. They will be able to connect to the service hosted on your FreedomBox, using XMPP chat clients such as Conversations on Android, Pidgin on Windows and Linux, or Messages on Mac OS, for encrypted communications.</para>
<para>FreedomBox can also host a Wi-Fi access point, ad blocking proxy and VPN. More advanced users can replace their router with a FreedomBox. </para>
<para>To set up FreedomBox at home on a specific hardware or on your computer running Debian may require a bit of technical expertise or help from the community. Once installed the interface is easy to use, similar to a smart phone. </para>
<para>Related documentation: </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Features#">FreedomBox applications</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">Machines that support FreedomBox</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">Download and Install</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual#">Manual</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Support#">Live Help from the community</ulink>
</para>
</listitem>
</itemizedlist>
<section>
<title>Typical usage: Private Cloud</title>
<para>FreedomBox provides services to the computers and mobile devices in your home, and to your friends. This includes secure instant messaging and low-bandwidth, high-quality voice conference calling. FreedomBox lets you publish your content in a blog and wiki to collaborate with the rest of the world. On the roadmap are a personal email server and federated social networking using GNU Social and Diaspora, to provide privacy-respecting alternatives to Gmail and Facebook. </para>
</section>
<section>
<title>Advanced usage: Smart Home Router</title>
<para>FreedomBox runs in a physical computer and can route your traffic. It can sit between various devices at home such as mobiles, laptops and TVs and the Internet, replacing a home wireless router. By routing traffic, FreedomBox can remove tracking advertisements and malicious web bugs before they ever reach your devices. FreedomBox can cloak your location and protect your anonymity by "onion routing" your traffic over Tor. FreedomBox provides a VPN server that you can use while you are away from home to keep your traffic secret on untrusted public wireless networks and to securely access various devices at home. </para>
<para>It can also be carried along with your laptop and used to connect to public networks at work, school or office to avail its services. </para>
<para>It could be used in a village to make available digital communications throughout the village. In the future, FreedomBox intends to deliver support for alternative ways of connecting to the Internet such as Mesh networking. </para>
</section>
<section>
<title>FreedomBox Interface</title>
<section>
<title>Screenshot</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Introduction?action=AttachFile&amp;do=get&amp;target=freedombox-frontpage-2018-06-19.png" width="1000"/>
</imageobject>
<textobject>
<phrase>FreedomBox front page</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Screencast introduction</title>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Introduction?action=AttachFile&amp;do=get&amp;target=Plinth_Introduction.webm">Plinth_Introduction.webm</ulink>
</para>
<para>(36 MB, 13 Min.) </para>
</section>
<section>
<title>More video resources</title>
<para>Eben Moglen's talk, <ulink url="https://www.youtube.com/watch?v=8vOF8VsUwbA">Eben Moglen - Freedom in the cloud</ulink>, delivered before the FreedomBox project was started gives insights into the philosophy behind FreedomBox. </para>
<para><ulink url="http://moglen.law.columbia.edu/sflc2015/04_freedombox.webm">First demonstration of FreedomBox at SFLC, University of Columbia</ulink> by Sunil Mohan Adapa. </para>
</section>
</section>
</section>
<section>
<title>Quick Start</title>
<section>
<title>What you need to get started</title>
<itemizedlist>
<listitem>
<para>A supported <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">device</ulink> (including any device that can run Debian). We will call that the FreedomBox in the rest of this manual. </para>
</listitem>
<listitem>
<para>A power cable for your device. </para>
</listitem>
<listitem>
<para>An ethernet cable. </para>
</listitem>
<listitem>
<para>A microSD card (or equivalent storage media for your device), prepared according to the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">Download</ulink> page. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>How to get started</title>
<orderedlist numeration="arabic">
<listitem>
<para>Plug one end of your ethernet cord into your FreedomBox's ethernet port, and plug the other end into your router. </para>
</listitem>
<listitem>
<para>Power on the FreedomBox. <emphasis role="strong">Note:</emphasis> On most single board computers, don't expect any output on a monitor connected via HDMI as the support may not exist in the kernel. See below to access and control your FreedomBox via network. </para>
</listitem>
<listitem>
<para>On first boot, FreedomBox will perform its initial setup (older versions of FreedomBox reboot after this step). This process may take several minutes on some machines. After giving it about 10 minutes, proceed to the next step. <emphasis role="strong">Note:</emphasis> Currently, due a known bug, you need to restart your FreedomBox after 10m and then proceed to the next step. </para>
</listitem>
<listitem>
<para>After the FreedomBox has finished its initial setup, you can access its web interface (called Plinth) through your web browser. </para>
<itemizedlist>
<listitem>
<para>If your computer is connected directly to the FreedomBox through a second (LAN) ethernet port, you can browse to: <ulink url="http://freedombox/"/> or <ulink url="http://10.42.0.1/"/>. </para>
</listitem>
<listitem>
<para>If your computer supports mDNS (GNU/Linux, Mac OSX or Windows with mDNS software installed), you can browse to: <ulink url="http://freedombox.local/"/> (or <ulink url="http://the-hostname-you-entered-during-install.local/"/>) </para>
</listitem>
<listitem>
<para>If you know your way around the router's web interface, you can look up the IP adress of the FreedomBox there, and browse to that address. </para>
</listitem>
<listitem>
<para>If none of these methods are available, then you will need to figure out the IP address of your FreedomBox. You can use the "nmap" program from your computer to find its IP address: </para>
<screen><![CDATA[ nmap -p 80 --open -sV 192.168.0.0/24 (replace the ip/netmask with the one the router uses)]]></screen>
<para>In most cases you can look at your current ip adress, and change the last digits with zero to find your home network, like so: XXX.XXX.XXX.0/24 </para>
<para>Your FreedomBox will show up as an IP address with an open tcp port 80 using Apache httpd service on Debian, such as the example below which would make it accessible at <ulink url="http://192.168.0.165"/>: </para>
<screen><![CDATA[ Nmap scan report for 192.168.0.165
Host is up (0.00088s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.17 ((Debian))]]></screen>
<para>If nmap does not find anything with the above command, you can try replacing 192.168.0.0/24 with 10.42.0.255/24. </para>
<screen><![CDATA[ nmap -n -sP 10.42.0.255/24]]></screen>
<para>The scan report will show something similar to the following: </para>
<screen><![CDATA[ Nmap scan report for 10.42.0.1
Host is up (0.00027s latency).
Nmap scan report for 10.42.0.50
Host is up (0.00044s latency).]]></screen>
<para>In this example, the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> is accessible at <ulink url="http://10.42.0.50"/>. (10.42.0.1 is my laptop.) </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>On accessing Plinth your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". After installation this certificate can be changed to a normal one using the Let's Encrypt option. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=plinth_insecure_connection.png" width="600"/>
</imageobject>
<textobject>
<phrase>Self-signed certificate warning</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=add_security_exception.png" width="400"/>
</imageobject>
<textobject>
<phrase>Add Security Exception</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>The first time you access the FreedomBox web interface, you will see a welcome page. Click the "Start Setup" button to continue. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=plinth_firstboot_welcome.png" width="500"/>
</imageobject>
<textobject>
<phrase>Welcome</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>The next page asks you to provide a user name and password. Fill in the form, and then click "Create Account." </para>
<itemizedlist>
<listitem>
<para>Note: The user that you create here has Admin privileges and can also <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/SecureShell#">log in using ssh</ulink>. You might not want to use the user account you will want to use in daily usage, to prevent security issues. You can later add more users. </para>
</listitem>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=plinth_firstboot_account.png" width="500"/>
</imageobject>
<textobject>
<phrase>Account</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>After completing the form, you will be logged in to Plinth and able to access apps and configuration through the interface. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=plinth_firstboot_complete.png" width="500"/>
</imageobject>
<textobject>
<phrase>Complete</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
</orderedlist>
<para>Now you can try <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Features#">any of the Apps</ulink> that are available on FreedomBox. </para>
</section>
<section>
<title>Finding your way around</title>
<section>
<title>Front page</title>
<para>The front page is the page that you will see when accessing the web root of your FreedomBox. You can also access it by clicking the FreedomBox logo in the top-left corner of the Plinth web interface. </para>
<para>The front page includes shortcuts to apps that have been installed and are enabled. For web apps, clicking the shortcut will take you directly to the app's web page. For other services, clicking the shortcut will show more information about the service. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=frontpage.png" width="600"/>
</imageobject>
<textobject>
<phrase>Front page</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Apps menu</title>
<para>The Apps menu can be accessed by clicking the grid icon, next to the FreedomBox logo. This page lists all of the apps that are available for installing on FreedomBox. Click the name of an app to visit its page, where you can install and configure it. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=apps.png" width="600"/>
</imageobject>
<textobject>
<phrase>Apps</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Help menu</title>
<para>The Help menu can be accessed by clicking the question mark icon in the top-right corner. It includes helpful links and the FreedomBox manual. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=help.png" width="600"/>
</imageobject>
<textobject>
<phrase>Help</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>System menu</title>
<para>The System menu can be accessed by clicking the gear icon in the top-right corner. It includes a number of pages related to system configuration. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=system.png" width="600"/>
</imageobject>
<textobject>
<phrase>System</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>User menu</title>
<para>In the top-right corner, the name of the currently logged-in user is shown. A drop-down menu includes options for editing the current user or logging out of the user interface. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/QuickStart?action=AttachFile&amp;do=get&amp;target=user.png" width="600"/>
</imageobject>
<textobject>
<phrase>User</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
</section>
</section>
<section>
<title>Getting Help</title>
<para>
<anchor id="gettinghelp"/>
</para>
<para>This document is intended to give you the information you need to get started with your FreedomBox. However, if you have any questions after reading this document, you can get help by: </para>
<itemizedlist>
<listitem>
<para>Emailing to our mailinglist at <ulink url="mailto:freedombox-discuss@lists.alioth.debian.org">freedombox-discuss@lists.alioth.debian.org</ulink>. You can also <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">sign up</ulink> to receive copies of every discussion that happens on the mailing list or <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">read the archives</ulink>. </para>
</listitem>
<listitem>
<para>Chatting at <ulink url="irc://irc.oftc.net:6667/%23freedombox">#freedombox@irc.oftc.net</ulink>. </para>
</listitem>
<listitem>
<para>Reading the <ulink url="http://wiki.debian.org/FreedomBox">wiki</ulink>. </para>
</listitem>
<listitem>
<para>Reading the <ulink url="https://freedomboxfoundation.org/">FreedomBox Foundation's website</ulink>. </para>
</listitem>
<listitem>
<para>Reading the <ulink url="https://alioth.debian.org/projects/freedombox">FreedomBox Project Page</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Download and Install</title>
<para>Welcome to the FreedomBox download page. You may either install FreedomBox on one of the supported inexpensive <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">hardware</ulink> devices, on any Linux <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">Debian</ulink> operating system, or deploy it on a virtual machine. </para>
<para>Installing on a machine running a Debian system is easy because FreedomBox is available as a package. We do recommend to install FreedomBox on a supported single board computer (SBC). The board will be dedicated for FreedomBox use from home, this will prevent a lot of risks, such as accidental misconfiguration by the user. In case of trouble deciding which hardware is best for you or during the installation, please use the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Support#">support page</ulink> or read the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/QuestionsAndAnswers#">Questions and Answers</ulink> page based on posts on the <ulink url="https://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">Freedombox-discuss</ulink> mailing list archives. </para>
<section>
<title>Downloading on Debian</title>
<para>If you are installing on an existing Debian installation, you don't need to download these images. Instead read the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">instructions</ulink> on setting up FreedomBox on Debian. </para>
</section>
<section>
<title>Downloading for SBC or Virtual Machine</title>
<section>
<title>Prepare your device</title>
<para>Read the hardware specific instructions on how to prepare your device at the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">Hardware</ulink> section. On the web is a lot of documentation about setting your device up and flashing USB or SD Cards to boot your hardware. </para>
</section>
<section>
<title>Downloading Images</title>
<para>Recent images for supported targets are available here: </para>
<itemizedlist>
<listitem>
<para>Official Images: <ulink url="https://freedombox.org/download/"/> </para>
</listitem>
<listitem>
<para>Official Images: <ulink url="https://ftp.freedombox.org/pub/freedombox/"/> </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Verifying the Downloaded Images</title>
<para>It is important to verify the images you have downloaded to ensure that the file has not be corrupted during the transmission and that it is indeed the image built by FreedomBox developers. </para>
<para><emphasis role="strong">Note:</emphasis> Testing and nightly images are automatically signed by the FreedomBox CI server. </para>
<itemizedlist>
<listitem>
<para>First open a terminal and import the public keys of the FreedomBox developers who built the images: </para>
<screen><![CDATA[$ gpg --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
$ gpg --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
# This is the FreedomBox CI server's key
$ gpg --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8]]></screen>
</listitem>
<listitem>
<para>Next, verify the fingerprint of the public keys: </para>
<screen><![CDATA[$ gpg --fingerprint BCBEBD57A11F70B23782BC5736C361440C9BC971
pub 4096R/0C9BC971 2011-11-12
Key fingerprint = BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971
uid Sunil Mohan Adapa <sunil@medhas.org>
sub 4096R/4C1D4B57 2011-11-12
$ gpg --fingerprint 7D6ADB750F91085589484BE677C0C75E7B650808
pub 4096R/7B650808 2015-06-07 [expires: 2020-06-05]
Key fingerprint = 7D6A DB75 0F91 0855 8948 4BE6 77C0 C75E 7B65 0808
uid James Valleroy <jvalleroy@mailbox.org>
uid James Valleroy <jvalleroy@freedombox.org>
sub 4096R/25D22BF4 2015-06-07 [expires: 2020-06-05]
sub 4096R/DDA11207 2015-07-03 [expires: 2020-07-01]
sub 2048R/2A624357 2015-12-22
$ gpg --fingerprint 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
pub rsa4096 2018-06-06 [SC]
013D 86D8 BA32 EAB4 A669 1BF8 5D41 53D6 FE18 8FC8
uid [ unknown] FreedomBox CI (Continuous Integration server) <admin@freedombox.org>
sub rsa4096 2018-06-06 [E]]]></screen>
</listitem>
<listitem>
<para>Finally, verify your downloaded image with its signature file <code>.sig</code>. For example: </para>
<screen><![CDATA[$ gpg --verify freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz.sig freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz
gpg: Signature made Thursday 15 January 2015 09:27:50 AM IST using RSA key ID 0C9BC971
gpg: Good signature from "Sunil Mohan Adapa <sunil@medhas.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971]]></screen>
</listitem>
</itemizedlist>
</section>
<section>
<title>Installation</title>
<para>After the download you can use the image to boot your chosen <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">hardware</ulink> (including virtual machines). You'll need to copy the image to the memory card or USB stick as follows: </para>
<orderedlist numeration="arabic">
<listitem>
<para>Figure out which device your card actually is. </para>
<orderedlist numeration="arabic">
<listitem>
<para>Unplug your card. </para>
</listitem>
<listitem>
<para>Run <code>dmesg -w</code> to show and follow the kernel messages. </para>
</listitem>
<listitem>
<para>Plug your card in. You will see messages such as following: </para>
<screen><![CDATA[[33299.023096] usb 4-6: new high-speed USB device number 12 using ehci-pci
[33299.157160] usb 4-6: New USB device found, idVendor=058f, idProduct=6361
[33299.157162] usb 4-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[33299.157164] usb 4-6: Product: Mass Storage Device
[33299.157165] usb 4-6: Manufacturer: Generic
[33299.157167] usb 4-6: SerialNumber: XXXXXXXXXXXX
[33299.157452] usb-storage 4-6:1.0: USB Mass Storage device detected
[33299.157683] scsi host13: usb-storage 4-6:1.0
[33300.155626] scsi 13:0:0:0: Direct-Access Generic- Compact Flash 1.01 PQ: 0 ANSI: 0
[33300.156223] scsi 13:0:0:1: Direct-Access Multiple Flash Reader 1.05 PQ: 0 ANSI: 0
[33300.157059] sd 13:0:0:0: Attached scsi generic sg4 type 0
[33300.157462] sd 13:0:0:1: Attached scsi generic sg5 type 0
[33300.462115] sd 13:0:0:1: [sdg] 30367744 512-byte logical blocks: (15.5 GB/14.4 GiB)
[33300.464144] sd 13:0:0:1: [sdg] Write Protect is off
[33300.464159] sd 13:0:0:1: [sdg] Mode Sense: 03 00 00 00
[33300.465896] sd 13:0:0:1: [sdg] No Caching mode page found
[33300.465912] sd 13:0:0:1: [sdg] Assuming drive cache: write through
[33300.470489] sd 13:0:0:0: [sdf] Attached SCSI removable disk
[33300.479493] sdg: sdg1
[33300.483566] sd 13:0:0:1: [sdg] Attached SCSI removable disk]]></screen>
</listitem>
<listitem>
<para>In the above case, the disk that is newly inserted is available as <emphasis>/dev/sdg</emphasis>. Very carefully note this and use it in the copying step below. </para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>Decompress the downloaded image using tar: </para>
<screen><![CDATA[$ xz -d freedombox-unstable-free_2015-12-13_cubietruck-armhf.img.xz]]></screen>
<para>The above command is an example for the <emphasis>cubietruck</emphasis> image built on 2015-12-13. Your downloaded file name will be different. </para>
</listitem>
<listitem>
<para>Copy the image to your card. Double check to make sure you don't write to your computer's main storage (such as /dev/sda). Also make sure that you don't run this step as root to avoid potentially overriding data on your hard drive due to a mistake in identifying the device or errors while typing the command. USB disks and SD cards inserted into the system should typically be write accessible to normal users. If you don't have permission to write to your SD card as a user, you may need to run this command as root. In this case triple check everything before you run the command. Another safety precaution is to unplug all external disks except the SD card before running the command. </para>
<para>For example, if your SD card is <emphasis>/dev/sdg</emphasis> as noted in the first step above, then to copy the image, run: </para>
<screen><![CDATA[$ dd bs=1M if=freedombox-unstable-free_2015-12-13_cubietruck-armhf.img of=/dev/sdg conv=fdatasync status=progress]]></screen>
</listitem>
</orderedlist>
<para>An alternative to copy to SD card command </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[$ cat freedombox-unstable-free_2015-12-13_cubietruck-armhf.img > /dev/sdg ; sync]]></screen>
</listitem>
</itemizedlist>
<para>On MS Windows you will need a tool like <emphasis>etcher</emphasis>. </para>
<itemizedlist>
<listitem override="none">
<para>The above command is an example for the <emphasis>cubietruck</emphasis> image built on 2015-12-13. Your image file name will be different. </para>
<para>When picking a device, use the drive-letter destination, like <emphasis>/dev/sdg</emphasis>, not a numbered destination, like <emphasis>/dev/sdg1</emphasis>. The device without a number refers to the entire device, while the device with a number refers to a specific partition. We want to use the whole device. Downloaded images contain complete information about how many partitions there should be, their sizes and types. You don't have to format your SD card or create partitions. All the data on the SD card will be wiped off during the write process. </para>
</listitem>
<listitem>
<para>Use the image by inserting the SD card or USB disk into the target device and booting from it. Your device should also be prepared (see the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">Hardware</ulink> section). </para>
</listitem>
<listitem>
<para>Read (the rest of) the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual#">Manual</ulink> for instructions on how to use applications in FreedomBox. </para>
</listitem>
</itemizedlist>
</section>
</section>
</section>
<section>
<title>Apps</title>
<section>
<title>Anonymity Network (Tor)</title>
<section>
<title>What is Tor?</title>
<para>Tor is a network of servers operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your FreedomBox via Tor network without revealing its IP address. Activating Tor application on your FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web. </para>
</section>
<section>
<title>Using Tor to browse anonymously</title>
<para>Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from <ulink url="https://www.torproject.org/projects/torbrowser.html"/> and follow the instructions on that site to install and run it. </para>
</section>
<section>
<title>Using Tor Hidden Service to access your FreedomBox</title>
<para>Tor Hidden Service provides a way to access your FreedomBox, even if it's behind a router or firewall. </para>
<para>To enable Tor Hidden Service, first navigate to the Anonymity Network (Tor) page. (If you don't see it, click on the FreedomBox logo at the top-left of the page, to go to the main Apps page.) On the Anonymity Network (Tor) page, under Configuration, check "Enable Tor Hidden Service", then press the Update setup button. Tor will be reconfigured and restarted. </para>
<para>After a while, the page will refresh and under Status, you will see a table listing the Hidden Service .onion address. Copy the entire address (ending in .onion) and paste it into the Tor Browser's address field, and you should be able to access your FreedomBox. (You may see a certificate warning because FreedomBox has a self-signed certificate.) </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Tor?action=AttachFile&amp;do=get&amp;target=tor_browser_plinth.png" width="800"/>
</imageobject>
<textobject>
<phrase>Tor Browser - Plinth</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Currently only HTTP (port 80), HTTPS (port 443), and SSH (port 22) are accessible through the Tor Hidden Service configured on the FreedomBox. </para>
</section>
<section>
<title>Running a Tor relay</title>
<para>When Tor is installed, it is configured by default to run as a bridge relay. The relay or bridge option can be disabled through the Tor configuration page in Plinth. </para>
<para>At the bottom of the Tor page in Plinth, there is a list of ports used by the Tor relay. If your FreedomBox is behind a router, you will need to configure port forwarding on your router so that these ports can be reached from the public Internet. </para>
<para>The requirements to run a relay are listed in the <ulink url="https://trac.torproject.org/projects/tor/wiki/TorRelayGuide">Tor Relay Guide</ulink>. In short, it is </para>
<itemizedlist>
<listitem>
<para>recommended that a relay has at least 16 Mbit/s (Mbps) upload and download bandwidth available for Tor. More is better. </para>
</listitem>
<listitem>
<para>required that a Tor relay be allowed to use a minimum of 100 GByte of outbound and of incoming traffic per month. </para>
</listitem>
<listitem>
<para>recommended that a &lt;40 Mbit/s non-exit relay should have at least 512 MB of RAM available; A relay faster than 40 Mbit/s should have at least 1 GB of RAM. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Using Tor SOCKS port (advanced)</title>
<para>FreedomBox provides a Tor SOCKS port that other applications can connect to, in order to route their traffic over the Tor network. This port is accessible on any interfaces configured in the internal firewall zone. To configure the application, set SOCKS Host to the internal network connection's IP address, and set the SOCKS Port to 9050. </para>
</section>
<section>
<title>Circumventing Tor censorship</title>
<para>If your ISP is trying to block Tor traffic, you can use tor bridge relays to connect to the tor network. </para>
<para>1. Get the bridge configuration from the <ulink url="https://bridges.torproject.org/bridges">Tor BridgeDB</ulink> </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Tor?action=AttachFile&amp;do=get&amp;target=tor-bridge-db.png" width="800"/>
</imageobject>
<textobject>
<phrase>Tor BridgeDB</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>2. Add the lines to your FreedomBox Tor configuration as show below. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Tor?action=AttachFile&amp;do=get&amp;target=tor-bridge-configuration.png" width="800"/>
</imageobject>
<textobject>
<phrase>Tor Configuration Page</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
</section>
<section>
<title>BitTorrent (Transmission)</title>
<section>
<title>What is Transmission ?</title>
<para>BitTorrent is a communications protocol using peer-to-peer (P2P) file sharing. It is not anonymous; you should assume that others can see what files you are sharing. There are two BitTorrent web clients available in FreedomBox: Transmission and <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Deluge#">Deluge</ulink>. They have similar features, but you may prefer one over the other. </para>
<para>Transmission is a lightweight BitTorrent client that is well known for its simplicity and a default configuration that "Just Works". </para>
</section>
<section>
<title>Screenshot</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Transmission?action=AttachFile&amp;do=get&amp;target=transmission.png" width="800"/>
</imageobject>
<textobject>
<phrase>Transmission Web Interface</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Using Transmission</title>
<para>After installing Transmission, it can be accessed at <code>https://&lt;your freedombox&gt;/transmission</code>. When you try to access this page, you will be required to login with a username and password. The default for both is "transmission". You can change the username and password using the configuration form in Plinth. </para>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>The initial password is shown in the Plinth configuration form in a hashed format. This prevents it from being read or copied. However, after the password is changed, it is shown directly, without hashing. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>BitTorrent (Deluge)</title>
<section>
<title>What is Deluge?</title>
<para>BitTorrent is a communications protocol using peer-to-peer (P2P) file sharing. It is not anonymous; you should assume that others can see what files you are sharing. There are two BitTorrent web clients available in FreedomBox: <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Transmission#">Transmission</ulink> and Deluge. They have similar features, but you may prefer one over the other. </para>
<para>Deluge is a lightweight BitTorrent client that is highly configurable. Additional functionality can be added by installing plugins. </para>
</section>
<section>
<title>Screenshot</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Deluge?action=AttachFile&amp;do=get&amp;target=deluge.png" width="800"/>
</imageobject>
<textobject>
<phrase>Deluge Web UI</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Initial Setup</title>
<para>After installing Deluge, it can be accessed by pointing your browser to <code>https://&lt;your freedombox&gt;/deluge</code>. You will need to enter a password to login: </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Deluge?action=AttachFile&amp;do=get&amp;target=deluge_login.png"/>
</imageobject>
<textobject>
<phrase>Deluge Login</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>The initial password is "deluge". The first time that you login, Deluge will ask if you wish to change the password. You should change it to something that is harder to guess. </para>
<para>Next you will be shown the connection manager. Click on the first entry (Offline - 127.0.0.1:58846). Then click "Start Daemon" to start the Deluge service that will run in the background. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Deluge?action=AttachFile&amp;do=get&amp;target=deluge_connection_manager.png"/>
</imageobject>
<textobject>
<phrase>Deluge Connection Manager (Offline)</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Now it should say "Online". Click "Connect" to complete the setup. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Deluge?action=AttachFile&amp;do=get&amp;target=deluge_connection_manager_2.png"/>
</imageobject>
<textobject>
<phrase>Deluge Connection Manager (Online)</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>At this point, you are ready to begin using Deluge. You can make further changes in the Preferences, or add a torrent file or URL. </para>
</section>
</section>
<section>
<title>Block Sandbox (Minetest)</title>
<para>Minetest is a multiplayer infinite-world block sandbox. This module enables the Minetest server to be run on this FreedomBox, on the default port (30000). To connect to the server, a <ulink url="http://www.minetest.net/downloads/">Minetest client</ulink> is needed. </para>
<section>
<title>Port Forwarding</title>
<para>If your FreedomBox is behind a router, you will need to set up port forwarding on your router. You should forward the following ports for Minetest: </para>
<itemizedlist>
<listitem>
<para>UDP 30000 </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Calendar and Addressbook (Radicale)</title>
<para>With Radicale, you can synchronize your personal calendars, ToDo lists, and addressbooks with your various computers, tablets, and smartphones, and share them with friends, without letting third parties know your personal schedule or contacts. </para>
<section>
<title>Why should I run Radicale?</title>
<para>Using Radicale, you can get rid of centralized services like Google Calendar or Apple Calendar (iCloud) data mining your events and social connections. </para>
</section>
<section>
<title>How to setup Radicale?</title>
<para>First, the Radicale server needs to be activated on your box. </para>
<itemizedlist>
<listitem>
<para>Within Plinth </para>
<orderedlist numeration="arabic">
<listitem>
<para>select <emphasis>Applications</emphasis> </para>
</listitem>
<listitem>
<para>go to <emphasis>Calendar and Addressbook (Radicale)</emphasis> and </para>
</listitem>
<listitem>
<para>install the application. After the installation is complete, make sure the application is marked "enabled" in the FreedomBox interface. Enabling the application launches the Radicale CalDAV/CardDAV server. </para>
</listitem>
<listitem>
<para>define the access rights: </para>
<itemizedlist>
<listitem>
<para>Only the owner of a calendar/addressbook can view or make changes </para>
</listitem>
<listitem>
<para>Any user can view any calendar/addressbook, but only the owner can make changes </para>
</listitem>
<listitem>
<para>Any user can view or make changes to any calendar/addressbook </para>
</listitem>
</itemizedlist>
</listitem>
</orderedlist>
</listitem>
</itemizedlist>
<para>Note, that only users with a FreedomBox login can access Radicale. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Radicale?action=AttachFile&amp;do=get&amp;target=Radicale-Plinth.png"/>
</imageobject>
<textobject>
<phrase>Radicale-Plinth.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>If you want to share a calendar with only some users, the simplest approach is to create an additional user-name for these users and to share that user-name and password with them. </para>
<para>Radicale does not have a user interface. An external <ulink url="http://radicale.org/clients/">supported client application</ulink> is needed. </para>
<para>Now open your client application to create new calendar and address books that will use your FreedomBox and Radicale server. The Radicale website provides <ulink url="http://radicale.org/clients/">an overview of supported clients</ulink>, but do <emphasis>not</emphasis> use the URLs described there; FreedomBox uses another setup, follow this manual. Below are the steps for two examples: </para>
<itemizedlist>
<listitem>
<para>Example of setup with Evolution client: </para>
<itemizedlist>
<listitem>
<para>Calendar </para>
<orderedlist numeration="arabic">
<listitem>
<para>Create a new calendar </para>
</listitem>
<listitem>
<para>For "Type," select "CalDAV" </para>
</listitem>
<listitem>
<para>When "CalDAV" is selected, additional options will appear in the dialogue window. </para>
</listitem>
<listitem>
<para>URL: <code>https://</code><emphasis>IP-address-or-domain-for-your-server</emphasis><code>/radicale/</code><emphasis>user</emphasis><code>/</code><emphasis>calendar-name</emphasis><code>.ics/</code>. Items in <emphasis>italics</emphasis> need to be changed to match your settings. </para>
<itemizedlist>
<listitem>
<para>note the trailing <code>/</code> in the path, it is important. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Enable "Use a secure connection." </para>
</listitem>
<listitem>
<para>Name the calendar </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Radicale?action=AttachFile&amp;do=get&amp;target=Radicale-Evolution-Docu.png"/>
</imageobject>
<textobject>
<phrase>Radicale-Evolution-Docu.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>TODO/Tasks list: Adding a TODO/Tasks list is basically the same as a calendar. </para>
</listitem>
<listitem>
<para>Contacts </para>
<itemizedlist>
<listitem>
<para>Follow the same steps described above and replace CalDAV with WebDAV. The extension of the address book will be .vcf. </para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Synchronizing with your Android phone</title>
<para>There are various Apps that allow integration with the Radicale server. This example uses DAVdroid, which is available e.g. on <ulink url="https://f-droid.org/repository/browse/?fdid=at.bitfire.davdroid">F-Droid</ulink>. If you intend to use ToDo-Lists as well, the compatible app <ulink url="https://f-droid.org/repository/browse/?fdid=org.dmfs.tasks">OpenTasks</ulink> has to be installed first. </para>
<para>Follow these steps for setting up your account with the Radicale server running on your FreedomBox. </para>
<orderedlist numeration="arabic">
<listitem>
<para>Install DAVdroid </para>
</listitem>
<listitem>
<para>Create a new account on DAVdroid by clicking on the floating + button. </para>
</listitem>
<listitem>
<para>Select the second option as shown in the first figure below and enter the base url as <emphasis><ulink url="https://&lt;your.freedombox.address&gt;/radicale/&lt;username&gt;/"/></emphasis> (see the first screenshot below). DAVdroid will be able to discover both CalDAV and WebDAV accounts for the user. </para>
</listitem>
<listitem>
<para>Follow this video from <ulink url="https://www.davdroid.com/faq/existing-contacts-are-not-synced">DAVdroid FAQ</ulink> to learn how to migrate your existing contacts to Radicale. </para>
</listitem>
</orderedlist>
<para>
<emphasis role="strong">Synchronizing contacts</emphasis>
</para>
<orderedlist numeration="arabic">
<listitem>
<para>Click on the hamburger menus of CalDAV and CardDAV and select either "Refresh ..." in case of existing accounts or "Create ..." in case of new accounts (see the second screenshot below). </para>
</listitem>
<listitem>
<para>Check the checkboxes for the address books and calendars you want to synchronize and click on the sync button in the header. (see the third screenshot below) </para>
</listitem>
</orderedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Radicale?action=AttachFile&amp;do=get&amp;target=DAVdroid-setup-account.png" width="288"/>
</imageobject>
<textobject>
<phrase>DAVdroid account setup</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Radicale?action=AttachFile&amp;do=get&amp;target=DAVdroid-refresh.png" width="288"/>
</imageobject>
<textobject>
<phrase>DAVdroid refresh</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Radicale?action=AttachFile&amp;do=get&amp;target=DAVdroid-sync-account.png" width="288"/>
</imageobject>
<textobject>
<phrase>DAVdroid account sync</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Advanced Users</title>
<section>
<title>Sharing resources</title>
<para>Above was shown an easy way to create a resource for a group of people by creating a dedicated account for all. Here will be described an alternative method where two users <code>User1</code> and <code>User2</code> are granted access to a calendar. This requires SSH-access to the FreedomBox. </para>
<orderedlist numeration="arabic">
<listitem>
<para>create a file <code>/etc/radicale/rights</code> </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[[friends_calendar]
user: ^(User1|User2)$
collection: ^.*/calendar_of_my_friends.ics$
permission: rw
# Give write access to owners
[owner-write]
user: .+
collection: ^%(login)s/.+$
permission: rw]]></screen>
</listitem>
<listitem>
<para><code>[friends_calendar]</code> is just an identifier, can be any name. </para>
</listitem>
<listitem>
<para>The <code>[owner-write]</code> section makes sure that owners have access to their own files </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>edit file <code>/etc/radicale/config</code> and make the following changes in section <code>[rights)</code> </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[[rights]
type = from_file
file = /etc/radicale/rights]]></screen>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Restart the radicale server or the FreedomBox </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Importing files</title>
<para>If you are using a contacts file exported from another service or application, it should be copied to: /var/lib/radicale/collections/<emphasis>user</emphasis>/<emphasis>contact file name</emphasis>.vcf. </para>
</section>
<section>
<title>Installing Radicale on ''testing'' version of Freedombox</title>
<para>Radicale is currently not included in the <emphasis>testing</emphasis> version of Freedombox, but can be installed by temporarily using files from the <emphasis>unstable</emphasis> version. Use SSH to connect to your Freedombox: </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[ssh username@freedombox.local]]></screen>
</listitem>
</itemizedlist>
<para>Then edit the sources for the Freedombox software repositories: </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[sudo apt edit-sources]]></screen>
</listitem>
</itemizedlist>
<para>This will open a command line text editor. Edit the list as seen below. Add one line with the unstable sources and disable the other sources by turning them into comments by adding # in front: </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[ deb http://deb.debian.org/debian unstable main
#deb http://deb.debian.org/debian testing main
#deb-src http://deb.debian.org/debian testing main
#deb http://deb.debian.org/debian testing-updates main
#deb-src http://deb.debian.org/debian testing-updates main
#deb http://security.debian.org/debian-security/ testing/updates main
#deb-src http://security.debian.org/debian-security/ testing/updates main ]]></screen>
</listitem>
</itemizedlist>
<para>After saving this file, refresh the sources: </para>
<itemizedlist>
<listitem override="none">
<screen><![CDATA[sudo apt update]]></screen>
</listitem>
</itemizedlist>
<para>Then you may install Radicale from Plinth. </para>
<para>Afterwards, reverse the changes to the software sources list so automatic updates may be processed properly - <emphasis role="strong">important for the security of your Freedombox</emphasis>. </para>
</section>
</section>
</section>
<section>
<title>Chat Server (XMPP)</title>
<section>
<title>What is XMPP?</title>
<para>XMPP is a federated protocol for Instant Messaging. This means that users who have accounts on one server, can talk to users that are on another server. XMPP can also be used for voice and video calls, if supported by the clients. </para>
<para>With XMPP, there are two ways that conversations can be secured: </para>
<orderedlist numeration="arabic">
<listitem>
<para>TLS: This secures the connection between the client and server, or between two servers. This should be supported by all clients and is highly recommended. </para>
</listitem>
<listitem>
<para>End-to-end: This secures the messages sent from one client to another, so that even the server cannot see the contents. The latest and most convenient protocol is called OMEMO, but it is only supported by a few clients. There is another protocol called OTR that may be supported by some clients that lack OMEMO support. Both clients must support the same protocol for it to work. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Setting the Domain Name</title>
<para>For XMPP to work, your FreedomBox needs to have a Domain Name that can be accessed over the public Internet. You can read more about obtaining a Domain Name in the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/DynamicDNS#">Dynamic DNS section of this manual</ulink>. </para>
<para>Once you have a Domain Name, you can tell your FreedomBox to use it by setting the Domain Name in the System <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Configure#">Configuration</ulink>. </para>
<itemizedlist>
<listitem>
<para>Note: After changing your Domain Name, the Chat Server (XMPP) page may show that the service is not running. After a minute or so, it should be up and running again. </para>
</listitem>
</itemizedlist>
<para>Please note that <ulink url="https://wiki.debian.org/FreedomBox/Manual/Pagekite#">Pagekite</ulink> does not support the XMPP protocol at this time. </para>
</section>
<section>
<title>Registering XMPP users through SSO</title>
<para>Currently, all users created through Plinth will be able to login to the XMPP server. You can add new users through the System Users and Groups module. It does not matter which Groups are selected for the new user. </para>
</section>
<section>
<title>Using the web client</title>
<para>After the XMPP module install completes, the JSXC web client for XMPP can be accessed at <code>https://&lt;your freedombox&gt;/plinth/apps/xmpp/jsxc/</code>. It will automatically check the BOSH server connection to the configured domain name. </para>
</section>
<section>
<title>Using a desktop or mobile client</title>
<para><ulink url="https://xmpp.org/software/clients.html">XMPP clients</ulink> are available for various desktop and mobile platforms. </para>
</section>
<section>
<title>Port Forwarding</title>
<para>If your FreedomBox is behind a router, you will need to set up port forwarding on your router. You should forward the following ports for XMPP: </para>
<itemizedlist>
<listitem>
<para>TCP 5222 (client-to-server) </para>
</listitem>
<listitem>
<para>TCP 5269 (server-to-server) </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Chat Server (Matrix Synapse)</title>
<section>
<title>What is the Matrix?</title>
<para><ulink url="https://matrix.org/">Matrix</ulink> is an open standard for interoperable, decentralized, real-time communication over IP. Synapse is the reference implementation of a Matrix server. It can be used to setup instant messaging on <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> to host large chat rooms, end to end encrypted communication and audio/video calls. Each instance of a Matrix server federates with other instances such that all your contacts need not hold accounts on your server. <ulink url="https://matrix.org/docs/guides/faq.html">See</ulink> more detailed info about Matrix. </para>
<para><emphasis role="strong">Note:</emphasis> The Matrix Synapse is available in FreedomBox starting with Plinth version 0.14. </para>
</section>
<section>
<title>How to access the Matrix?</title>
<para>We recommend the <ulink url="https://riot.im">Riot</ulink> client to access the Matrix server. You can <ulink url="https://riot.im/desktop.html">download</ulink> Riot for desktops. Mobile applications for Android and iOS are available from app stores. </para>
</section>
<section>
<title>Setting up your FreedomBox for Matrix</title>
<para>To enable Matrix, first navigate to the Chat Server (Matrix Synapse) page and install it. Matrix needs a valid domain name to be configured. After installation, you will be asked to configure it. You will be able to select a domain from a drop down menu of available domains. Domains are configured using System -&gt; Configure page. After configuring a domain, you will see that the service is running. The service will be accessible on the configured <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> domain. All the registered users will have their Matrix IDs as <code>@username:domain</code>. Currently, you will not be able to change the domain once is it configured. </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://github.com/matrix-org/synapse/blob/master/README.rst">System requirements:</ulink>
<emphasis>At least 1GB of free RAM if you want to join large public rooms like #matrix:matrix.org</emphasis>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Federating with other Matrix instances</title>
<para>You will be able to interact with any other person running another Matrix instance. This is done by simply starting a conversation with them using their matrix ID which is of the format <code>@their-username:their-domain</code>. You can also join rooms which are in another server and have audio/video calls with contacts on other server. </para>
</section>
</section>
<section>
<title>Email Client (Roundcube)</title>
<section>
<title>What is Roundcube?</title>
<para>Roundcube is a browser-based multilingual email client with an application-like user interface. Roundcube is using the Internet Message Access Protocol (IMAP) to access e-mail on a remote mail server. It supports MIME to send files, and provides particularly address book, folder management, message searching and spell checking. </para>
</section>
<section>
<title>Using Roundcube</title>
<para>After Roundcube is installed, it can be accessed at <code>https://&lt;your freedombox&gt;/roundcube</code>. </para>
</section>
</section>
<section>
<title>File Sharing (Coquelicot)</title>
<section>
<title>About Coquelicot</title>
<para>Coquelicot is a "one-click" file sharing web application with a focus on protecting users' privacy. The basic principle is simple: users can upload a file to the server, in return they get a unique URL which can be shared with others in order to download the file. A download password can be defined. </para>
<para>After the upload you get a unique link that can be shared to your partners in order to </para>
<para>Read more about Coquelicot at <ulink url="https://coquelicot.potager.org/README">the Coquelicot README</ulink> </para>
<para><emphasis role="strong">Available since:</emphasis> version 0.24.0 </para>
</section>
<section>
<title>When to use Coquelicot</title>
<para>Coquelicot is best used to quickly share a single file. If you want to share a folder, </para>
<orderedlist numeration="arabic">
<listitem>
<para>for a single use, compress the folder and share it over Coquelicot </para>
</listitem>
<listitem>
<para>which must be kept synchronized between computers, use <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Syncthing#">Syncthing</ulink> instead </para>
</listitem>
</orderedlist>
<para>Coquelicot can only provide a reasonable degree of privacy. If anonymity is required, you should consider using the desktop application <ulink url="https://onionshare.org/">Onionshare</ulink> instead. </para>
<para>Since Coquelicot fully uploads the file to the server, your FreedomBox will incur both upload and download bandwidth costs. For very large files, consider sharing them using BitTorrent by creating a private torrent file. If anonymity is required, use Onionshare. It is P2P and doesn't require a server. </para>
</section>
<section>
<title>Coquelicot on FreedomBox</title>
<para>With Coquelicot installed, you can upload files to your FreedomBox server and privately share them. </para>
<para>Post installation, the Coquelicot page offers two settings. </para>
<orderedlist numeration="arabic">
<listitem>
<para><emphasis role="strong">Upload Password</emphasis>: Coquelicot on FreedomBox is currently configured to use simple password authentication for ease of use. Remember that it's one global password for this Coquelicot instance and not your user password for FreedomBox. You need not remember this password. You can set a new one from the Plinth interface anytime. </para>
</listitem>
<listitem>
<para><emphasis role="strong">Maximum File Size</emphasis>: You can alter the maximum size of the file that can be transferred through Coquelicot using this setting. The size is in <ulink url="https://en.wikipedia.org/wiki/Mebibyte">Mebibytes</ulink>. The maximum file size is only limited by the disk size of your FreedomBox. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Privacy</title>
<para>Someone monitoring your network traffic might find out that some file is being transferred through your FreedomBox and also possibly its size, but will not know the file name. Coquelicot encrypts files on the server and also fills the file contents with 0s when deleting them. This eliminates the risk of file contents being revealed in the event of your FreedomBox being confiscated or stolen. The real risk to mitigate here is a third-party also downloading your file along with the intended recipient. </para>
<section>
<title>Sharing over instant messengers</title>
<para>Some instant messengers which have previews for websites might download your file in order to show a preview in the conversation. If you set the option of one-time download on a file, you might notice that the one download will be used up by the instant messenger. If sharing over such messengers, please use a download password in combination with a one-time download option. </para>
</section>
<section>
<title>Sharing download links privately</title>
<para>It is recommended to share your file download links and download passwords over encrypted channels. You can simply avoid all the above problems with instant messenger previews by using instant messengers that support encrypted conversations like Riot with <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/MatrixSynapse#">Matrix Synapse</ulink> or <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/ejabberd#">XMPP</ulink> (ejabberd server on FreedomBox) with clients that support end-to-end encryption. Send the download link and the download password in two separate messages (helps if your messenger supports perfect forward secrecy like XMPP with OTR). You can also share your links over PGP-encrypted email using <ulink url="https://securityinabox.org/en/guide/thunderbird/linux/">Thunderbird</ulink>. </para>
</section>
</section>
</section>
<section>
<title>File Synchronization (Syncthing)</title>
<para>With <emphasis>Syncthing</emphasis> installed on your FreedomBox, you can synchronize content from other devices to your FreedomBox and vice-versa. For example, you can keep the photos taken on your mobile phone synchronized to your FreedomBox. </para>
<para><emphasis role="strong">Note:</emphasis> Syncthing is available in FreedomBox starting with Plinth version 0.14. </para>
<para>Users should keep in mind that Syncthing is a peer-to-peer synchronization solution, not a client-server one. This means that the FreedomBox isn't really the server and your other devices clients. They're all devices from Syncthing's perspective. You can use Syncthing to synchronize your files between any of your devices. The advantage that FreedomBox provides is that it is a server that's always running. Suppose you want your photos on your phone to be synchronized to your laptop, if you simply sync the photos to the FreedomBox, the laptop can get them from the FreedomBox whenever it comes online the next time. You don't have to be worried about your other devices being online for synchronization. If your FreedomBox is one of the devices set up with your Syncthing shared folder, you can rest assured that your other devices will eventually get the latest files once they come online. </para>
<para>After installation follow the instructions in the <ulink url="https://docs.syncthing.net/intro/getting-started.html">getting started of the Syncthing project</ulink>. Syncthing allows individual folders to be selectively shared with other devices. Devices must be paired up before sharing by scanning QR codes or entering the device ids manually. Syncthing has a discovery service for easily identifying the other devices on the same network having Syncthing installed. </para>
<para>In order to access to the web client of the Syncthing instance running on your FreedomBox, use the path <emphasis>/syncthing</emphasis>. This web client is currently only accessible to the users of the FreedomBox that have administrator privileges, though it might be accessible to all FreedomBox users in a future release. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Syncthing?action=AttachFile&amp;do=get&amp;target=Syncthing_GUI.png" width="800"/>
</imageobject>
<textobject>
<phrase>Syncthing web interface</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Syncthing has android apps available on the <ulink url="https://f-droid.org/repository/browse/?fdid=com.nutomic.syncthingandroid">F-Droid</ulink> and <ulink url="https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid">Google Play</ulink> app stores. Cross-platform desktop apps are also available. </para>
<para>To learn more about Syncthing, please visit their <ulink url="https://syncthing.net">official website</ulink> and <ulink url="https://docs.syncthing.net">documentation</ulink>. </para>
</section>
<section>
<title>IRC Client (Quassel)</title>
<para><emphasis>Quassel</emphasis> is an IRC application that is split into two parts, a "core" and a "client". This allows the core to remain connected to IRC servers, and to continue receiving messages, even when the client is disconnected. FreedomBox can run the Quassel core service keeping you always online and one or more Quassel clients from a desktop or a mobile device can be used to connect and disconnect from it. </para>
<section>
<title>Why running Quassel?</title>
<para>Many discussions about FreedomBox are being done on the IRC-Channel <code>irc://irc.debian.org/freedombox</code>. If your FreedomBox is running <emphasis>Quassel</emphasis>, it will collect all discussions while you are away, such as responses to your questions. Remember, the FreedomBox project is a worldwide project with people from nearly every time zone. You use your <emphasis>client</emphasis> to connect to the <emphasis>Quassel</emphasis> core to read and respond whenever you have time and are available. </para>
</section>
<section>
<title>How to setup Quassel?</title>
<itemizedlist>
<listitem>
<para>Within Plinth </para>
<orderedlist numeration="arabic">
<listitem>
<para>select <emphasis>Applications</emphasis> </para>
</listitem>
<listitem>
<para>go to <emphasis>IRC Client (Quassel)</emphasis> and </para>
</listitem>
<listitem>
<para>install the application and make sure it is enabled </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=Quassel_Installation.png" width="800"/>
</imageobject>
<textobject>
<phrase>Quassel Installation</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem>
<para>now your Quassel core is running </para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>Configure in your router port forwarding for port <code>4242</code> </para>
<itemizedlist>
<listitem>
<para>on my device, this setting can be found in the section <emphasis>Network &gt; NAT &amp; Port rules &gt; Port Forwarding</emphasis> </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=Quassel_PortForwarding.png"/>
</imageobject>
<textobject>
<phrase>Quassel_PortForwarding.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Clients</title>
<para>Clients to connect to Quassel from your <ulink url="http://quassel-irc.org/downloads">desktop</ulink> and <ulink url="http://quasseldroid.iskrembilen.com/">mobile</ulink> devices are available. </para>
<section>
<title>Desktop</title>
<para>In a Debian system, you can e.g. use <ulink url="https://packages.debian.org/search?keywords=quassel-client">quassel-client</ulink>. The following steps describe how to connect Quassel Client with Quassel Core running on a FreedomBox. The first time you do this connection, Quassel Core will be initialized too. </para>
<orderedlist numeration="arabic">
<listitem>
<para>Launch Quassel Client. You will be greeted with a wizard to <code>Connect to Core</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-1-connect-to-core.png" width="394"/>
</imageobject>
<textobject>
<phrase>Connect to Core</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Click the <code>Add</code> button to launch <code>Add Core Account</code> dialog. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-2-add-core-account.png" width="382"/>
</imageobject>
<textobject>
<phrase>Add Core Account</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Fill any value in the <code>Account Name</code> field. Fill proper DNS hostname of your FreedomBox in <code>Hostname</code> filed. <code>Port</code> field must have the value <code>4242</code>. Provide the username and password of the account you wish to create to connect to the Quassel Core in the <code>User</code> and <code>Password</code> fields. Choose <code>Remember</code> if don't wish to be prompted for a password every time you launch Quassel client. </para>
</listitem>
<listitem>
<para>After pressing <code>OK</code> in the <code>Add Core Account</code> dialog, you should see the core account in the <code>Connect to Core</code> dialog. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-3-connect-to-core.png" width="394"/>
</imageobject>
<textobject>
<phrase>Connect to Core</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Select the newly created core account and select <code>OK</code> to connect to it. </para>
</listitem>
<listitem>
<para>If this is the first time you are connecting to this core. You will see an <code>Untrusted Security Certificate</code> warning and need to accept the server certificate. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-4-untrusted-security-certficate.png" width="504"/>
</imageobject>
<textobject>
<phrase>Untrusted Security Certificate</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Select <code>Continue</code>. Then you will be asked if you wish to accept the certificate permanently. Select <code>Forever</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-5-untrusted-security-certificate.png" width="434"/>
</imageobject>
<textobject>
<phrase>Untrusted Security Certificate</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>If this Quassel Core has not been connected to before, you will then see a <code>Core Configuration Wizard</code>. Select <code>Next</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-6-core-configuration-wizard.png" width="504"/>
</imageobject>
<textobject>
<phrase>Core Configuration Wizard</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>In the <code>Create Admin User</code> page, enter the username and password you have used earlier to create the core connection. Select <code>Remember password</code> to remember this password for future sessions. Click <code>Next</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-7-create-admin-user.png" width="504"/>
</imageobject>
<textobject>
<phrase>Create Admin User Page</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>In the <code>Select Storage Backend</code> page, select <code>SQLite</code> and click <code>Commit</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-8-select-storage-backend.png" width="504"/>
</imageobject>
<textobject>
<phrase>Select Storage Backend</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>The core configuration is then complete and you will see a <code>Quassel IRC</code> wizard to configure your IRC connections. Click <code>Next</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-9-welcome-wizard.png" width="504"/>
</imageobject>
<textobject>
<phrase>Welcome Wizard</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>In <code>Setup Identity</code> page next, provide a name and multiple nicknames. This is how you present yourself to other users on IRC. It is not necessary to give your real world name. Multiple nicknames are useful as fallback nicknames when the first nickname can't be used for some reason. After providing the information click <code>Next</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-10-setup-identity.png" width="504"/>
</imageobject>
<textobject>
<phrase>Setup Identity</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>In <code>Setup Network Connection</code> page next, provide a network name of your choice. Next provide a list of servers to which Quassel Core should connect to in order to join this IRC network (such as irc.debian.org:6667). </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-11-setup-network-connection.png" width="504"/>
</imageobject>
<textobject>
<phrase>Setup Network Connection</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Select the server in the servers list and click <code>Edit</code>. In the <code>Server Info</code> dialog, set the port <code>6697</code> (consult your network's documentation for actual list of servers and their secure ports) and click <code>Use SSL</code>. Click <code>OK</code>. This is to ensure that communication between your FreedomBox and the IRC network server is encrypted. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-12-server-info.png" width="390"/>
</imageobject>
<textobject>
<phrase>Server Info</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-13-server-info-ssl.png" width="390"/>
</imageobject>
<textobject>
<phrase>Server Info SSL</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Back in the <code>Setup Network Connection</code> dialog, provide a list of IRC channels (such as #freedombox) to join upon connecting to the network. Click <code>Save &amp; Connect</code>. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-14-setup-network-connection.png" width="504"/>
</imageobject>
<textobject>
<phrase>Setup Network Connection</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>You should connect to the network and see the list of channels you have joined on the <code>All Chats</code> pane on the left of the Quassel Client main window. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=quassel-client-15-quassel-main.png" width="644"/>
</imageobject>
<textobject>
<phrase>Quassel Main Window</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Select a channel and start seeing messages from others in the channel and send your own messages. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Android</title>
<para>For Android devices you may use e.g. <emphasis>Quasseldroid</emphasis> from <ulink url="https://f-droid.org/repository/browse/?fdfilter=quassel&amp;fdid=com.iskrembilen.quasseldroid">F-Droid</ulink> </para>
<itemizedlist>
<listitem>
<para>enter core, username etc. as above </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Quassel?action=AttachFile&amp;do=get&amp;target=Quasseldroid.png"/>
</imageobject>
<textobject>
<phrase>Quasseldroid.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
<para>By the way, the German verb <emphasis>quasseln</emphasis> means <emphasis>talking a lot</emphasis>, to <emphasis>jabber</emphasis>. </para>
</section>
</section>
</section>
<section>
<title>News Feed Reader (Tiny Tiny RSS)</title>
<para>Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, designed to allow reading news from any location, while feeling as close to a real desktop application as possible. </para>
<para>Any user created through FreedomBox web interface will be able to login and use this app. Each user has their own feeds, state and preferences. </para>
<section>
<title>Using the Web Interface</title>
<para>When enabled, Tiny Tiny RSS will be available from <emphasis>/tt-rss</emphasis> path on the web server. Any user created through Plinth will be able to login and use this app. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrss.png" width="800"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
</para>
<section>
<title>Adding a new feed</title>
<para>1. Go to the website you want the RSS feed for and copy the RSS/Atom feed link from it. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=Select-RSS-feed.png" width="800"/>
</imageobject>
<textobject>
<phrase>Selecting feeds</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>2. Select "Subscribe to feed.." from the Actions dropdown. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=Subscribe-to-feed.png"/>
</imageobject>
<textobject>
<phrase>Subscribe to feed</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>3. In the dialog box that appears, paste the URL for copied in step 1 and click the <emphasis role="strong">Subscribe</emphasis> button. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=Subscribe-dialog.png" width="800"/>
</imageobject>
<textobject>
<phrase>Subscription dialog box</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Give the application a minute to fetch the feeds after clicking Subscribe. </para>
<para>In some websites, the RSS feeds button isn't clearly visible. In that case, you can simply paste the website URL into the Subscribe dialog (step 3) and let TT-RSS automatically detect the RSS feeds on the page. </para>
<para>You can try this now with the homepage of <ulink url="https://en.wikinews.org/wiki/Main_Page">WikiNews</ulink> </para>
<para>As you can see in the image below, TT-RSS detected and added the Atom feed of WikiNews to our list of feeds. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=WikiNews-feed.png"/>
</imageobject>
<textobject>
<phrase>WikiNews feed added</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>If you don't want to keep this feed, right click on the feed shown in the above image, select <emphasis role="strong">Edit feed</emphasis> and click <emphasis role="strong">Unsubscribe</emphasis> in the dialog box that appears. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=Unsubscribe.png" width="800"/>
</imageobject>
<textobject>
<phrase>Unsubscribe from a feed</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Importing your feeds from another feed reader</title>
<para>In your existing feed reader, find an option to <emphasis>Export</emphasis> your feeds to a file. Prefer the OPML file format if you have to choose between multiple formats. Let's say your exported feeds file is called Subscriptions.opml </para>
<para>Click on the <emphasis>Actions</emphasis> menu at the top left corner and select <emphasis>Preferences</emphasis>. You will be taken to another page. </para>
<para>Select the second tab called <emphasis>Feeds</emphasis> in the top header. Feeds has several sections. The second one is called <emphasis>OPML</emphasis>. Select it. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=OPML.png" width="960"/>
</imageobject>
<textobject>
<phrase>OPML feeds page</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>To import your Subscriptions.opml file into TT-RSS, </para>
<orderedlist numeration="arabic">
<listitem>
<para>Click <emphasis>Browse</emphasis> and select the file from your file system </para>
</listitem>
<listitem>
<para>Click <emphasis>Import my OPML</emphasis> </para>
</listitem>
</orderedlist>
<para>After importing, you'll be taken to the <emphasis role="strong">Feeds</emphasis> section that's above the OPML section in the page. You can see that the feeds from your earlier feed reader are now imported into Tiny Tiny RSS. You can now start using Tiny Tiny RSS as your primary feed reader. </para>
<para>In the next section, we will discuss setting up the mobile app, which can let you read your feeds on the go. </para>
</section>
</section>
<section>
<title>Using the Mobile App</title>
<para>The official Android app from the Tiny Tiny RSS project works with FreedomBox's Tiny Tiny RSS Server. The older TTRSS-Reader application is known <emphasis role="strong">not</emphasis> to work. </para>
<para>The official Android app is unfortunately only available on the Google Play Store and not on F-Droid. You can still obtain the source code and build the apk file yourself. </para>
<para>To configure, first install the application, then in the setting page, set URL as <emphasis><ulink url="https://&lt;your.freedombox.address&gt;/tt-rss-app/"/></emphasis>. Set your user name and password in the Login details as well as HTTP Authentication details. If your FreedomBox does not have a valid HTTPS certificate, then in settings request allowing any SSL certificate and any host. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrssapp1.png" width="288"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrssapp2.png" width="288"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrssapp3.png" width="288"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrssapp4.png" width="288"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/TinyTinyRSS?action=AttachFile&amp;do=get&amp;target=ttrssapp5.png" width="288"/>
</imageobject>
<textobject>
<phrase>Tiny Tiny RSS</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
</section>
<section>
<title>SIP Server (repro)</title>
<para>repro is a server for SIP, a standard that enables Voice-over-IP calls. A desktop or mobile SIP client is required to use repro. </para>
<section>
<title>How to set up the SIP server</title>
<orderedlist numeration="arabic">
<listitem>
<para>Configure the domain at /repro/domains.html on the FreedomBox. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Repro?action=AttachFile&amp;do=get&amp;target=repro_domains.png" width="800"/>
</imageobject>
<textobject>
<phrase>Repro Domains</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Add users at /repro/addUser.html. </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Repro?action=AttachFile&amp;do=get&amp;target=repro_users.png" width="800"/>
</imageobject>
<textobject>
<phrase>Repro Users</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Disable and re-enable the repro application in Plinth. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Port Forwarding</title>
<para>If your FreedomBox is behind a router, you will need to set up port forwarding on your router. You should forward the following ports for repro: </para>
<itemizedlist>
<listitem>
<para>TCP 5060 </para>
</listitem>
<listitem>
<para>TCP 5061 </para>
</listitem>
<listitem>
<para>UDP 5060 </para>
</listitem>
<listitem>
<para>UDP 5061 </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>SOCKS5 proxy (Shadowsocks)</title>
<section>
<title>What is Shadowsocks?</title>
<para><ulink url="https://shadowsocks.org/en/index.html">Shadowsocks</ulink> is a lightweight and secure SOCKS5 proxy, designed to protect your Internet traffic. It can be used to bypass Internet filtering and censorship. Your <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> can run a Shadowsocks client which can connect to a Shadowsocks server. It will also run a SOCKS5 proxy. Local devices can connect to this proxy, and their data will be encrypted and proxied through the Shadowsocks server. </para>
<para><emphasis role="strong">Note:</emphasis> Shadowsocks is available in FreedomBox starting with Plinth version 0.18. </para>
</section>
<section>
<title>Using the Shadowsocks client?</title>
<para>The current implementation of Shadowsocks in <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> only supports configuring <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> as a Shadowsocks client. The current use case for Shadowsocks is as follows: </para>
<itemizedlist>
<listitem>
<para>Shadowsocks client (<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink>) is in a region where some parts of the Internet are blocked or censored. </para>
</listitem>
<listitem>
<para>Shadowsocks server is in a different region, which doesn't have these blocks. </para>
</listitem>
<listitem>
<para>The <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> provides SOCKS proxy service on the local network for other devices to make use of its Shadowsocks connection. </para>
</listitem>
</itemizedlist>
<para>At a future date it will be possible to configure <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> as Shadowsocks server. </para>
</section>
<section>
<title>Configuring your FreedomBox for the Shadowsocks client</title>
<para>To enable Shadowsocks, first navigate to the Socks5 Proxy (Shadowsocks) page and install it. </para>
<para>Server: the Shadowsocks server is not the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> IP or URL; rather, it will be another server or VPS that has been configured as a Shadowsocks server. There are also some public Shadowsocks servers listed on the web, but be aware that whoever operates the server can see where requests are going, and any non-encrypted data will be visible to them. </para>
<para>To use Shadowsocks after setup, set the SOCKS5 proxy URL in your device, browser or application to <ulink url="http://freedombox_address:1080/"/> </para>
</section>
</section>
<section>
<title>Virtual Private Network (OpenVPN)</title>
<section>
<title>What is OpenVPN?</title>
<para>OpenVPN provides to your FreedomBox a virtual private network service. You can use this software for remote access, site-to-site VPNs and Wi-Fi security. OpenVPN includes support for dynamic IP addresses and NAT. </para>
</section>
<section>
<title>Setting up</title>
<orderedlist numeration="arabic">
<listitem>
<para>In Plinth apps menu, select <emphasis>Virtual Private Network (OpenVPN)</emphasis> and click Install. </para>
</listitem>
<listitem>
<para>After the module is installed, there is an additional setup step that may take a long time to complete. Click "Start setup" to begin. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/OpenVPN?action=AttachFile&amp;do=get&amp;target=plinth_openvpn.png"/>
</imageobject>
<textobject>
<phrase>plinth_openvpn.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem>
<para>Wait for the setup to finish. This could take a while. </para>
</listitem>
<listitem>
<para>Once the setup of the OpenVPN server is complete, you can download your profile. This will download a file called &lt;USER&gt;.ovpn, where &lt;USER&gt; is the name of a FreedomBox user. Each FreedomBox user will be able to download a different profile. </para>
</listitem>
<listitem>
<para>The ovpn file contains all the information a vpn client needs to connect to the server. </para>
</listitem>
<listitem>
<para>If you are behind a modem, you may have to change the ip address (if not, you can skip this step). Open the ovpn file in any text editor. The second line shows the IP address or hostname the client will try to connect to. This should be your WAN IP address or your hostname. This line also contains the port number, 1194 being the default. You may have to open this port on your modem and enable port forwarding. </para>
</listitem>
</orderedlist>
<screen><![CDATA[client
remote mybox.sds-ip.de 1194
proto udp]]></screen>
</section>
<section>
<title>Usage</title>
<section>
<title>On Debian</title>
<para>Install an OpenVPN client for your system </para>
<screen><![CDATA[$ sudo apt install openvpn]]></screen>
<para>Open the ovpn file with the OpenVPN client. </para>
<screen><![CDATA[$ sudo openvpn --config /path/to/<USER>.ovpn]]></screen>
</section>
</section>
<section>
<title>Checking if you are connected</title>
<section>
<title>On Debian</title>
<orderedlist numeration="arabic">
<listitem>
<para>Try to ping the FreedomBox or other devices on the local network. </para>
</listitem>
<listitem>
<para>Running the command <code>ip addr</code> should show a <code>tun0</code> connection. </para>
</listitem>
<listitem>
<para>The command <code>traceroute freedombox.org</code> should show you the ip address of the VPN server as the first hop. </para>
</listitem>
</orderedlist>
</section>
</section>
<section>
<title>External Links</title>
<para>
<ulink url="https://community.openvpn.net/openvpn"/>
</para>
</section>
</section>
<section>
<title>Voice Chat (Mumble)</title>
<section>
<title>What is Mumble?</title>
<para>Mumble is a voice chat software. Primarily intended for use while gaming, it is suitable for simple talking with high audio quality, noise suppression, encrypted communication, public/private-key authentication by default, and "wizards" to configure your microphone for instance. A user can be marked as a "priority speaker" within a channel. </para>
</section>
<section>
<title>Using Mumble</title>
<para>FreedomBox includes the Mumble server. <ulink url="https://wiki.mumble.info/wiki/Main_Page">Clients</ulink> are available for desktop and mobile platforms. Users can download one of these clients and connect to the server. </para>
</section>
<section>
<title>Port Forwarding</title>
<para>If your FreedomBox is behind a router, you will need to set up port forwarding on your router. You should forward the following ports for Mumble: </para>
<itemizedlist>
<listitem>
<para>TCP 64738 </para>
</listitem>
<listitem>
<para>UDP 64738 </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Web Proxy (Privoxy)</title>
<para>A web proxy acts as a filter for incoming and outgoing internet traffic. Thus, you can instruct any computer in your network to pass internet traffic through the proxy to remove unwanted ads and tracking mechanisms. </para>
<para>Privoxy is a software for security, privacy, and accurate control over the web. It provides a much more powerful web proxy (and anonymity on the web) than what your browser can offer. Privoxy "is a proxy that is primarily focused on privacy enhancement, ad and junk elimination and freeing the user from restrictions placed on his activities" (source: <ulink url="http://www.privoxy.org/faq/index.html">Privoxy FAQ</ulink>). </para>
<section>
<title>Screencast</title>
<para>Watch the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Privoxy?action=AttachFile&amp;do=get&amp;target=Privoxy_Installation.webm">screencast</ulink> on how to setup and use Privoxy in FreedomBox. </para>
</section>
<section>
<title>Setting up</title>
<orderedlist numeration="arabic">
<listitem>
<para>In Plinth install <emphasis>Web Proxy (Privoxy)</emphasis> </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Privoxy?action=AttachFile&amp;do=get&amp;target=Privoxy-Installation.png" width="800"/>
</imageobject>
<textobject>
<phrase>Privoxy Installation</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem>
<para>Adapt your browser proxy settings to your FreedomBox hostname (or IP address) with port 8118. Please note that Privoxy can only proxy HTTP and HTTPS traffic. It will not work with FTP or other protocols. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Privoxy?action=AttachFile&amp;do=get&amp;target=Privoxy-BrowserSettings.png" width="800"/>
</imageobject>
<textobject>
<phrase>Privoxy Browser Settings</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem>
<para>Go to page <ulink url="http://config.privoxy.org/"/> or <ulink url="http://p.p"/>. If Privoxy is installed properly, you will be able to configure it in detail; if not you will see an error message. </para>
</listitem>
<listitem>
<para>If you are using a laptop that occasionally has to connect through other routers than yours with the FreedomBox and Privoxy, you may want to install a proxy switch add-on that allows you to easily turn the proxy on or off. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Advanced Users</title>
<orderedlist numeration="arabic">
<listitem>
<para>The default installation should provide a reasonable starting point for most. There will undoubtedly be occasions where you will want to adjust the configuration, that can be dealt with as the need arises. </para>
</listitem>
<listitem>
<para>While using Privoxy, you can see its configuration details and documentation at <ulink url="http://config.privoxy.org/"/> or <ulink url="http://p.p"/>. </para>
</listitem>
<listitem>
<para>To enable changing these configurations, you first have to change the value of <code>enable-edit-actions</code> in <code>/etc/privoxy/config</code> to <code>1</code>. Before doing so, read carefully the manual, especially: </para>
<itemizedlist>
<listitem override="none">
<para>
<emphasis>Access to the editor can not be controlled separately by "ACLs" or HTTP authentication, so that everybody who can access Privoxy can modify its configuration for all users. This option is not recommended for environments with untrusted users. Note that malicious client side code (e.g Java) is also capable of using the actions editor and you shouldn't enable this options unless you understand the consequences and are sure your browser is configured correctly.</emphasis>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Now you find an <code>EDIT</code> button on the configuration screen in <code>http://config.privoxy.org/</code>. </para>
</listitem>
<listitem>
<para>The <ulink url="http://www.privoxy.org/user-manual/quickstart.html">Quickstart</ulink> is a good starting point to read on how to define own blocking and filtering rules. </para>
</listitem>
</orderedlist>
</section>
</section>
<section>
<title>Web Search (Searx)</title>
<section>
<title>About Searx</title>
<para>Searx is a <ulink url="https://en.wikipedia.org/wiki/Metasearch_engine">metasearch engine</ulink>. A metasearch engine aggregates the results from various search engines and presents them in a unified interface. </para>
<para>Read more about Searx on their <ulink url="https://asciimoo.github.io/searx/">official website</ulink>. </para>
<para><emphasis role="strong">Available since:</emphasis> version 0.24.0 </para>
</section>
<section>
<title>Screenshot</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Searx?action=AttachFile&amp;do=get&amp;target=searx-screenshot.png" width="800"/>
</imageobject>
<textobject>
<phrase>Searx Screenshot</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Screencast</title>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Searx?action=AttachFile&amp;do=get&amp;target=Searx.webm">Searx installation and first steps</ulink> (14 MB) </para>
</section>
<section>
<title>Why use Searx?</title>
<section>
<title>Personalization and Filter Bubbles</title>
<para>Search engines have the ability to profile users and serve results most relevant to them, putting people into <ulink url="https://en.wikipedia.org/wiki/Filter_bubble">filter bubbles</ulink>, thus distorting people's view of the world. Search engines have a financial incentive to serve interesting advertisements to their users, increasing their chances of clicking on the advertisements. </para>
<para>A metasearch engine is a possible solution to this problem, as it aggregates results from multiple search engines thus bypassing personalization attempts by search engines. </para>
<para>Searx avoids storing cookies from search engines as a means of preventing tracking and profiling by search engines. </para>
</section>
<section>
<title>Advertisement filtering</title>
<para>Searx filters out advertisements from the search results before serving the results, thus increasing relevance the of your search results and saving you from distractions. </para>
</section>
<section>
<title>Privacy</title>
<para>Searx uses HTTP POST instead of GET by default to send your search queries to the <ulink url="https://en.wikipedia.org/wiki/Web_search_engine">search engines</ulink>, so that anyone snooping your traffic wouldn't be able to read your queries. The search queries wouldn't stored in browser history either. </para>
<para><emphasis role="strong">Note:</emphasis> Searx used from Chrome browser's omnibar would make GET requests instead of POST. </para>
</section>
</section>
<section>
<title>Searx on FreedomBox</title>
<itemizedlist>
<listitem>
<para>Searx on FreedomBox uses Single Sign On. This means that you should be logged in into your FreedomBox in the browser that you're using Searx. </para>
</listitem>
<listitem>
<para>Searx can be added as a search engine to the Firefox browser's search bar. See <ulink url="https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox">Firefox Help</ulink> on this topic. Once Searx is added, you can also set it as your default search engine. </para>
</listitem>
<listitem>
<para>Searx also offers search results in csv, json and rss formats, which can be used with scripts to automate some tasks. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Wiki (MediaWiki)</title>
<section>
<title>About MediaWiki</title>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/MediaWiki#">MediaWiki</ulink> is the software that powers the Wikimedia suite of wikis. </para>
<para>Read more about MediaWiki on <ulink url="https://en.wikipedia.org/wiki/MediaWiki">Wikipedia</ulink> </para>
<para><emphasis role="strong">Available since:</emphasis> version 0.20.0 </para>
</section>
<section>
<title>MediaWiki on FreedomBox</title>
<para>MediaWiki on FreedomBox is configured to be publicly readable and privately editable. Only logged in users can make edits to the wiki. This configuration prevents spam and vandalism on the wiki. </para>
<section>
<title>User management</title>
<para>Users can be created by the MediaWiki administrator (user "admin") only. The "admin" user can also be used to reset passwords of MediaWiki users. The administrator password, if forgotten can be reset anytime from the MediaWiki page in the Plinth UI. </para>
</section>
<section>
<title>Use cases</title>
<para>MediaWiki is quite versatile and can be put to many creative uses. It also comes with a lot of plugins and themes and is highly customizable. </para>
<section>
<title>Personal Knowledge Repository</title>
<itemizedlist>
<listitem override="none">
<para>MediaWiki on FreedomBox can be your own personal knowledge repository. Since MediaWiki has good multimedia support, you can write notes, store images, create checklists, store references and bookmarks etc. in an organized manner. You can store the knowledge of a lifetime in your MediaWiki instance. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Community Wiki</title>
<itemizedlist>
<listitem override="none">
<para>A community of users can use MediaWiki as their common repository of knowledge and reference material. It can used as a college notice board, documentation server for a small company, common notebook for study groups or as a fan wiki like wikia. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Personal Wiki-based Website</title>
<itemizedlist>
<listitem override="none">
<para><ulink url="https://www.mediawiki.org/wiki/Sites_using_MediaWiki/en">Several websites</ulink> on the internet are simply MediaWiki instances. MediaWiki on FreedomBox is read-only to visitors. Hence, it can be adapted to serve as your personal website and/or blog. MediaWiki content is easy to export and can be later moved to use another blog engine. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Editing Wiki Content</title>
<section>
<title>Visual Editor</title>
<itemizedlist>
<listitem override="none">
<para>MediaWiki's new Visual Editor gives a WYSIWYG user interface to creating wiki pages. Unfortunately, it is not yet available in the current version of MediaWiki on Debian. A workaround is to use write your content using the Visual Editor in <ulink url="https://en.wikipedia.org/wiki/Wikipedia:Sandbox">Wikipedia's Sandbox</ulink>, switching to source editing mode and copying the content into your wiki. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Other Formats</title>
<itemizedlist>
<listitem override="none">
<para>You don't have to necessarily learn the MediaWiki formatting language. You can write in your favorite format (Markdown, Org-mode, LaTeX etc.) and convert it to the MediaWiki format using <ulink url="https://pandoc.org/try/">Pandoc</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Image Uploads</title>
<itemizedlist>
<listitem override="none">
<para>Image uploads have been enabled since FreedomBox version 0.36.0. You can also directly use images from Wikimedia Commons using a feature called <ulink url="https://www.mediawiki.org/wiki/InstantCommons">Instant Commons</ulink>. </para>
</listitem>
</itemizedlist>
</section>
</section>
</section>
</section>
<section>
<title>Wiki and Blog (Ikiwiki)</title>
<section>
<title>What is Ikiwiki?</title>
<para>Ikiwiki converts wiki pages into HTML pages suitable for publishing on a website. It provides particularly blogging, podcasting, calendars and a large selection of plugins. </para>
</section>
<section>
<title>Quick Start</title>
<para>After the app installation on your box administration interface: </para>
<itemizedlist>
<listitem>
<para>Go to "Create" section and create a wiki or a blog </para>
</listitem>
<listitem>
<para>Go back to "Configure" section and click on /ikiwiki link </para>
</listitem>
<listitem>
<para>Click on your new wiki or blog name under "Parent directory" </para>
</listitem>
<listitem>
<para>Enjoy your new publication page. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Creating a wiki or blog</title>
<para>You can create a wiki or blog to be hosted on your FreedomBox through the Wiki &amp; Blog (Ikiwiki) page in Plinth. The first time you visit this page, it will ask to install packages required by Ikiwiki. </para>
<para>After the package install has completed, select the Create tab. You can select the type to be Wiki or Blog. Also type in a name for the wiki or blog, and the username and password for the wiki's/blog's admin account. Then click Update setup and you will see the wiki/blog added to your list. Note that each wiki/blog has its own admin account. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Ikiwiki?action=AttachFile&amp;do=get&amp;target=ikiwiki_create.png" width="800"/>
</imageobject>
<textobject>
<phrase>ikiwiki: Create</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Accessing your wiki or blog</title>
<para>From the Wiki &amp; Blog (Ikiwiki) page, select the Manage tab and you will see a list of your wikis and blogs. Click a name to navigate to that wiki or blog. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Ikiwiki?action=AttachFile&amp;do=get&amp;target=ikiwiki_manage.png" width="800"/>
</imageobject>
<textobject>
<phrase>ikiwiki: Manage</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>From here, if you click Edit or Preferences, you will be taken to a login page. To log in with the admin account that you created before, select the Other tab, enter the username and password, and click Login. </para>
</section>
<section>
<title>User login through SSO</title>
<para>Besides the wiki/blog admin, other FreedomBox users can be given access to login and edit wikis and blogs. However, they will not have all the same permissions as the wiki admin. They can add or edit pages, but cannot change the wiki's configuration. </para>
<para>To add a wiki user, go to the Users and Groups page in Plinth (under System configuration, the gear icon at the top right corner of the page). Create or modify a user, and add them to the wiki group. (Users in the admin group will also have wiki access.) </para>
<para>To login as a FreedomBox user, go to the wiki/blog's login page and select the Other tab. Then click the "Login with HTTP auth" button. The browser will show a popup dialog where you can enter the username and password of the FreedomBox user. </para>
</section>
<section>
<title>Adding FreedomBox users as wiki admins</title>
<orderedlist numeration="arabic">
<listitem>
<para>Login to the wiki, using the admin account that was specified when the wiki was created. </para>
</listitem>
<listitem>
<para>Click "Preferences", then "Setup". </para>
</listitem>
<listitem>
<para>Under "main", in the "users who are wiki admins", add the name of a user on the FreedomBox. </para>
</listitem>
<listitem>
<para>(Optional) Under "auth plugin: passwordauth", uncheck the "enable passwordauth?" option. (Note: This will disable the old admin account login. Only SSO login using HTTP auth will be possible.) </para>
</listitem>
<listitem>
<para>Click "Save Setup". </para>
</listitem>
<listitem>
<para>Click "Preferences", then "Logout". </para>
</listitem>
<listitem>
<para>Login as the new admin user using "Login with HTTP auth". </para>
</listitem>
</orderedlist>
</section>
</section>
</section>
<section>
<title>System</title>
<section>
<title>Configure</title>
<para>Configure has some general configuration options: </para>
<section>
<title>Hostname</title>
<itemizedlist>
<listitem override="none">
<para>Hostname is the local name by which other devices on the local network can reach your FreedomBox. Default is <emphasis>freedombox</emphasis>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Domain Name</title>
<itemizedlist>
<listitem override="none">
<para>Domain name is the global name by which other devices on the Internet can reach your FreedomBox. The value set here is used by the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/ejabberd#">Chat Server (XMPP)</ulink>, <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/LetsEncrypt#">Certificates (Let's Encrypt)</ulink>, and <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Monkeysphere#">Monkeysphere</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Default App</title>
<itemizedlist>
<listitem override="none">
<para>This is an advanced option that allows you to set something other than FreedomBox Service (Plinth) as the default application to be served on the domain name of the FreedomBox. For example, if your FreedomBox's domain name is <ulink url="https://myfreedombox.rocks"/> and you set MediaWiki as the default app, visiting <ulink url="https://myfreedombox.rocks"/> will take you to <ulink url="https://myfreedombox.rocks/mediawiki/"/> instead of the usual <ulink url="https://myfreedombox.rocks/plinth/"/>. Only web applications served from FreedomBox are allowed as choices. </para>
</listitem>
</itemizedlist>
<caution>
<para>
<emphasis role="strong">Warning</emphasis>
</para>
<para>Once some other app is set as the default app, you can only navigate to the FreedomBox Service (Plinth) by typing <ulink url="https://myfreedombox.rocks/plinth/"/> into the browser. </para>
<para><emphasis>/freedombox</emphasis> can also be used as an alias to <emphasis>/plinth</emphasis> </para>
</caution>
<itemizedlist>
<listitem override="none">
<para><emphasis>Tip:</emphasis> Bookmark the URL of FreedomBox Service (Plinth) before changing the default app to some other app. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Cockpit (Server Administration)</title>
<para>Cockpit is a server manager that makes it easy to administer GNU/Linux servers via a web browser. On a FreedomBox, controls are available for many advanced functions that are not usually required. A web based terminal for console operations is also available. </para>
<para>It can be accessed by any user on your FreedomBox belonging to the admin group. </para>
<caution>
<para>Use cockpit only if you are an administrator of GNU/Linux systems with advanced skills. FreedomBox tries to coexist with changes to system by system administrators and system administration tools like Cockpit. However, improper changes to the system might causes failures in FreedomBox functions. </para>
</caution>
<section>
<title>Using Cockpit</title>
<para>Install Cockpit like any other application on FreedomBox. Make sure that Cockpit is enabled after that. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-enable.png"/>
</imageobject>
<textobject>
<phrase>cockpit-enable.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Ensure that the user account on FreedomBox that will used for Cockpit is part of the administrators group. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-admin-user.png"/>
</imageobject>
<textobject>
<phrase>cockpit-admin-user.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Launch the Cockpit web interface. Login using the configured user account. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-login.png"/>
</imageobject>
<textobject>
<phrase>cockpit-login.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Start using cockpit. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-system.png"/>
</imageobject>
<textobject>
<phrase>cockpit-system.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Cockpit is usable on mobile interfaces too. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-mobile.png"/>
</imageobject>
<textobject>
<phrase>cockpit-mobile.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Features</title>
<para>The following features of Cockpit may be useful for advanced FreedomBox users. </para>
<section>
<title>System Dashboard</title>
<para>Cockpit has a system dashboard that </para>
<itemizedlist>
<listitem>
<para>Shows detailed hardware information </para>
</listitem>
<listitem>
<para>Shows basic performance metrics of a system </para>
</listitem>
<listitem>
<para>Allows changing system time and timezone </para>
</listitem>
<listitem>
<para>Allows changing hostname. Please use FreedomBox UI to do this </para>
</listitem>
<listitem>
<para>Shows SSH server fingerprints </para>
</listitem>
</itemizedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-system.png"/>
</imageobject>
<textobject>
<phrase>cockpit-system.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Viewing System Logs</title>
<para>Cockpit allows querying system logs and examining them in full detail. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-logs.png"/>
</imageobject>
<textobject>
<phrase>cockpit-logs.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Managing Storage</title>
<para>Cockpit allows following advanced storage functions: </para>
<itemizedlist>
<listitem>
<para>View full disk information </para>
</listitem>
<listitem>
<para>Editing disk partitions </para>
</listitem>
<listitem>
<para>RAID management </para>
</listitem>
</itemizedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-storage1.png"/>
</imageobject>
<textobject>
<phrase>cockpit-storage1.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-storage2.png"/>
</imageobject>
<textobject>
<phrase>cockpit-storage2.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Networking</title>
<para>Cockpit and FreedomBox both rely on NetworkManager to configure the network. However, Cockpit offers some advanced configuration not available on FreedomBox: </para>
<itemizedlist>
<listitem>
<para>Route configuration </para>
</listitem>
<listitem>
<para>Configure Bonds, Bridges, VLANs </para>
</listitem>
</itemizedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-network1.png"/>
</imageobject>
<textobject>
<phrase>cockpit-network1.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-network2.png"/>
</imageobject>
<textobject>
<phrase>cockpit-network2.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-network3.png"/>
</imageobject>
<textobject>
<phrase>cockpit-network3.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Services</title>
<para>Cockpit allows management of services and periodic jobs (similar to cron). </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-services1.png"/>
</imageobject>
<textobject>
<phrase>cockpit-services1.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-services2.png"/>
</imageobject>
<textobject>
<phrase>cockpit-services2.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Web Terminal</title>
<para>Cockpit offers a web based terminal that can be used perform manual system administration tasks. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Cockpit?action=AttachFile&amp;do=get&amp;target=cockpit-terminal.png"/>
</imageobject>
<textobject>
<phrase>cockpit-terminal.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
</section>
</section>
<section>
<title>Date &amp; Time</title>
<para>This network time server is a program that maintains the system time in synchronization with servers on the Internet. </para>
<para>You can select your time zone by picking a big city nearby (they are sorted by <emphasis>Continent/City</emphasis>) or select directly the zone with respect to GMT (Greenwich Mean Time). </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/DateTime?action=AttachFile&amp;do=get&amp;target=DateTime.png"/>
</imageobject>
<textobject>
<phrase>DateTime.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Diagnostics</title>
<para>The system diagnostic test will run a number of checks on your system to confirm that applications and services are working as expected. </para>
<para>Just click <emphasis>Run Diagnostics</emphasis>. This may take some minutes. </para>
</section>
<section>
<title>Dynamic DNS Client</title>
<section>
<title>What is Dynamic DNS?</title>
<para>In order to reach a server on the Internet, the server needs to have permanent address also know as the static IP address. Many Internet service providers don't provide home users with a static IP address or they charge more providing a static IP address. Instead they provide the home user with an IP address that changes every time the user connects to the Internet. Clients wishing to contact the server will have difficulty reaching the server. </para>
<para>Dynamic DNS service providers assist in working around a problem. First they provide you with a domain name, such as 'myhost.example.org'. Then they associate your IP address, whenever it changes, with this domain name. Then anyone intending to reach the server will be to contact the server using the domain name 'myhost.example.org' which always points to the latest IP address of the server. </para>
<para>For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on FreedomBox, such as ownCloud, to the Internet. </para>
</section>
<section>
<title>GnuDIP vs. Update URL</title>
<para>There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the <emphasis>GnuDIP</emphasis> protocol and using the <emphasis>Update URL</emphasis> mechanism. </para>
<para>If a service provided using update URL is not properly secured using HTTPS, your credentials may be visible to an adversary. Once an adversary gains your credentials, they will be able to replay your request your server and hijack your domain. </para>
<para>On the other hand, the GnuDIP protocol will only transport a salted MD5 value of your password, in a way that is secure against replay attacks. </para>
</section>
<section>
<title>Using the GnuDIP protocol</title>
<orderedlist numeration="arabic">
<listitem>
<para>Register an account with any Dynamic DNS service provider. A free service provided by the FreedomBox community is available at <ulink url="https://gnudip.datasystems24.net"/> . </para>
</listitem>
<listitem>
<para>In FreedomBox UI, enable the Dynamic DNS Service. </para>
</listitem>
<listitem>
<para>Select <emphasis>GnuDIP</emphasis> as <emphasis>Service type</emphasis>, enter your Dynamic DNS service provider address (for example, gnudip.datasystems24.net) into <emphasis>GnuDIP Server Address</emphasis> field. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/DynamicDNS?action=AttachFile&amp;do=get&amp;target=DynamicDNS-Settings.png" width="800"/>
</imageobject>
<textobject>
<phrase>Dynamic DNS Settings</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
<listitem>
<para>Fill <emphasis>Domain Name</emphasis>, <emphasis>Username</emphasis>, <emphasis>Password</emphasis> information given by your provider into the corresponding fields. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Using an Update URL</title>
<para>This feature is implemented because the most popular Dynamic DNS providers are using Update URLs mechanism. </para>
<orderedlist numeration="arabic">
<listitem>
<para>Register an account with a Dynamic DNS service provider providing their service using Update URL mechanism. Some example providers are listed in the configuration page itself. </para>
</listitem>
<listitem>
<para>In FreedomBox UI, enable the Dynamic DNS service. </para>
</listitem>
<listitem>
<para>Select <emphasis>other Update URL</emphasis> as <emphasis>Service type</emphasis>, enter the update URL given by your provider into <emphasis>Update URL</emphasis> field. </para>
</listitem>
<listitem>
<para>If you browse the update URL with your Internet browser and a warning message about untrusted certificate appears, then enable <emphasis>accept all SSL certificates</emphasis>. WARNING: your credentials may be readable here because man-in-the-middle attacks are possible! Consider choosing a better service provider instead. </para>
</listitem>
<listitem>
<para>If you browse the update URL with your Internet browser and the username/password box appears, enable <emphasis>use HTTP basic authentication</emphasis> checkbox and provide the <emphasis>Username</emphasis> and <emphasis>Password</emphasis>. </para>
</listitem>
<listitem>
<para>If the update URL contains your current IP address, replace the IP address with the string <emphasis>&lt;Ip&gt;</emphasis>. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Checking If It Works</title>
<orderedlist numeration="arabic">
<listitem>
<para>Make sure that external services you have enabled such as /jwchat, /roundcube and /ikiwiki are available on your domain address. </para>
</listitem>
<listitem>
<para>Go to the <emphasis>Status</emphasis> page, make sure that the NAT type is detected correctly. If your FreedomBox is behind a NAT device, this should be detected over there (Text: <emphasis>Behind NAT</emphasis>). If your FreedomBox has a public IP address assigned, the text should be "Direct connection to the Internet". </para>
</listitem>
<listitem>
<para>Check that the last update status is not <emphasis>failed</emphasis>. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Recap: How to create a DNS name with GnuDIP</title>
<para>
<remark>to delete or to replace the old text</remark>
</para>
<orderedlist numeration="arabic">
<listitem>
<para>Access to <ulink url="https://gnudip.datasystems24.net">GnuIP login page</ulink> (answer Yes to all pop ups) </para>
</listitem>
<listitem>
<para>Click on "Self Register" </para>
</listitem>
<listitem>
<para>Fill the registration form (Username and domain will form the public IP address [username.domain]) </para>
</listitem>
<listitem>
<para>Take note of the username/hostname and password that will be used on the FreedomBox app. </para>
</listitem>
<listitem>
<para>Save and return to the GnuDIP login page to verify your username, domain and password (enter the datas, click login). </para>
</listitem>
<listitem>
<para>Login output should display your new domain name along with your current public IP address (this is a unique address provided by your router for all your local devices). </para>
</listitem>
<listitem>
<para>Leave the GnuDIP interface and open the Dynamic DNS Client app page in your FreedomBox. </para>
</listitem>
<listitem>
<para>Click on "Set Up" in the top menu. </para>
</listitem>
<listitem>
<para>Activate Dynamic DNS </para>
</listitem>
<listitem>
<para>Choose GnuDIP service. </para>
</listitem>
<listitem>
<para>Add server address (gnudip.datasystems24.net) </para>
</listitem>
<listitem>
<para>Add your fresh domain name (username.domain, ie [username].freedombox.rocks) </para>
</listitem>
<listitem>
<para>Add your fresh username (the one used in your new IP address) and password </para>
</listitem>
<listitem>
<para>Add your GnuDIP password </para>
</listitem>
<listitem>
<para>Fill the option with <ulink url="http://myip.datasystems24.de"/> (try this url in your browser, you will figure out immediatly) </para>
</listitem>
</orderedlist>
</section>
</section>
<section>
<title>Firewall</title>
<para>Firewall is a network security system that controls the incoming and outgoing network traffic. Keeping a firewall enabled and properly configured reduces risk of security threat from the Internet. </para>
<para>The operation of the firewall in Plinth web interface of FreedomBox is automatic. When you enable a service it is automatically permitted in the firewall and when you disable a service it is automatically disabled in the firewall. For services which are enabled by default on FreedomBox, firewall ports are also enabled by default during the first run process. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Firewall?action=AttachFile&amp;do=get&amp;target=Firewall.png" width="800"/>
</imageobject>
<textobject>
<phrase>Firewall</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Firewall management in FreedomBox is done using <ulink url="https://fedoraproject.org/wiki/FirewallD">FirewallD</ulink>. </para>
<section>
<title>Interfaces</title>
<para>Each interface is needs to be assigned to one (and only one) zone. Whatever rules are in effect for a zone, those rules start to apply for that interface. For example, if HTTP traffic is allowed in a particular zone, then web requests will be accepted on all the addresses configured for all the interfaces assigned to that zone. </para>
<para>There are primarily two firewall zones used. The <code>internal</code> zone is meant for services that are provided to all machines on the local network. This may include services such as streaming media and simple file sharing. The <code>external</code> zone is meant for services that are provided publicly on the Internet. This may include services such as blog, website, email web client etc. </para>
<para>For details on how network interfaces are configured by default, see the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Networks#">Networks</ulink> section. </para>
</section>
<section>
<title>Ports/Services</title>
<para>The following table attempts to document the ports, services and their default statuses in FreedomBox. If you find this page outdated, see the Plinth source for <ulink url="http://sources.debian.net/src/plinth/latest/data/usr/lib/freedombox/first-run.d/90_firewall">lib/freedombox/first-run.d/90_firewall</ulink> and Firewall status page in Plinth UI. </para>
<informaltable>
<tgroup cols="6">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<colspec colname="col_3"/>
<colspec colname="col_4"/>
<colspec colname="col_5"/>
<tbody>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Service</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Port</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">External</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Enabled by default</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Status shown in Plinth</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Managed by Plinth</emphasis>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Minetest </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 30000/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> XMPP Client </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5222/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> XMPP Server </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5269/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> XMPP Bosh </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5280/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> NTP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 123/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Plinth </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 443/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Quassel </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 4242/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> SIP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5060/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> SIP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5060/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> SIP-TLS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5061/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> SIP-TLS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5061/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> RTP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 1024-65535/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> SSH </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 22/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> mDNS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 5353/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Tor (Socks) </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 9050/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Obfsproxy </para>
</entry>
<entry colsep="1" rowsep="1">
<para> &lt;random&gt;/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> OpenVPN </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 1194/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Mumble </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 64378/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Mumble </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 64378/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Privoxy </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 8118/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> JSXC </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 80/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> JSXC </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 443/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_on.png" width="16"/>
</imageobject>
<textobject>
<phrase>{*}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> DNS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 53/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> DNS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 53/tdp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> DHCP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 67/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Bootp </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 67/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Bootp </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 67/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Bootp </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 68/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> Bootp </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 68/udp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> LDAP </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 389/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> LDAPS </para>
</entry>
<entry colsep="1" rowsep="1">
<para> 636/tcp </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/star_off.png" width="16"/>
</imageobject>
<textobject>
<phrase>{o}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
<section>
<title>Manual operation</title>
<para>See <ulink url="https://fedoraproject.org/wiki/FirewallD">FirewallD</ulink> documentation for more information on the basic concepts and comprehensive documentation. </para>
<section>
<title>Enable/disable firewall</title>
<para>To disable firewall </para>
<screen><![CDATA[service firewalld stop]]></screen>
<para>or with systemd </para>
<screen><![CDATA[systemctl stop firewalld]]></screen>
<para>To re-enable firewall </para>
<screen><![CDATA[service firewalld start]]></screen>
<para>or with systemd </para>
<screen><![CDATA[systemctl start firewalld]]></screen>
</section>
<section>
<title>Modifying services/ports</title>
<para>You can manually add or remove a service from a zone. </para>
<para>To see list of services enabled: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --list-services]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --list-services]]></screen>
<para>To see list of ports enabled: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --list-ports]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --list-ports]]></screen>
<para>To remove a service from a zone: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --remove-service=<service>
firewall-cmd --permanent --zone=<zone> --remove-service=<interface>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --remove-service=xmpp-bosh
firewall-cmd --permanent --zone=internal --remove-service=xmpp-bosh]]></screen>
<para>To remove a port from a zone: </para>
<screen><![CDATA[firewall-cmd --zone=internal --remove-port=<port>/<protocol>
firewall-cmd --permanent --zone=internal --remove-port=<port>/<protocol>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --remove-port=5353/udp
firewall-cmd --permanent --zone=internal --remove-port=5353/udp]]></screen>
<para>To add a service to a zone: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --add-service=<service>
firewall-cmd --permanent --zone=<zone> --add-service=<interface>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --add-service=xmpp-bosh
firewall-cmd --permanent --zone=internal --add-service=xmpp-bosh]]></screen>
<para>To add a port to a zone: </para>
<screen><![CDATA[firewall-cmd --zone=internal --add-port=<port>/<protocol>
firewall-cmd --permanent --zone=internal --add-port=<port>/<protocol>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --add-port=5353/udp
firewall-cmd --permanent --zone=internal --add-port=5353/udp]]></screen>
</section>
<section>
<title>Modifying the zone of interfaces</title>
<para>You can manually change the assignment of zones of each interfaces after they have been autuomatically assigned by the first boot process. </para>
<para>To see current assignment of interfaces to zones: </para>
<screen><![CDATA[firewall-cmd --list-all-zones]]></screen>
<para>To remove an interface from a zone: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --remove-interface=<interface>
firewall-cmd --permanent --zone=<zone> --remove-interface=<interface>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=external --remove-interface=eth0
firewall-cmd --permanent --zone=external --remove-interface=eth0]]></screen>
<para>To add an interface to a zone: </para>
<screen><![CDATA[firewall-cmd --zone=<zone> --add-interface=<interface>
firewall-cmd --permanent --zone=<zone> --add-interface=<interface>]]></screen>
<para>Example: </para>
<screen><![CDATA[firewall-cmd --zone=internal --add-interface=eth0
firewall-cmd --permanent --zone=internal --add-interface=eth0]]></screen>
</section>
</section>
</section>
<section>
<title>Certificates (Let's Encrypt)</title>
<para>A digital certficate allows users of a web service to verify the identity of the service and to securely communicate with it. FreedomBox can automatically obtain and setup digital certificates for each available domain. It does so by proving itself to be the owner of a domain to Let's Encrypt, a certificate authority (CA). </para>
<para>Let's Encrypt is a free, automated, and open certificate authority, run for the public's benefit by the Internet Security Research Group (ISRG). Please read and agree with the Let's Encrypt Subscriber Agreement before using this service. </para>
<section>
<title>Why using Certificates</title>
<para>The communication with your FreedomBox can be secured so that it is not possible to intercept the content of the web pages viewed and about the content exchanged. </para>
</section>
<section>
<title>How to setup</title>
<orderedlist numeration="arabic">
<listitem>
<para>If your FreedomBox is behind a router, you will need to set up port forwarding on your router. You should forward the following ports: </para>
<itemizedlist>
<listitem>
<para>TCP 80 (http) </para>
</listitem>
<listitem>
<para>TCP 443 (https) </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Make the domain name known: </para>
<itemizedlist>
<listitem>
<para>In <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Configure#">Configure</ulink> insert your <emphasis>domain name</emphasis>, e.g. <emphasis><code>MyWebName.com</code></emphasis> <inlinemediaobject><imageobject><imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/LetsEncrypt?action=AttachFile&amp;do=get&amp;target=LetsEncrypt-Configure.png" width="800"/></imageobject><textobject><phrase>Let's Encrypt</phrase></textobject></inlinemediaobject> </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Verify the domain name was accepted </para>
<itemizedlist>
<listitem>
<para>Check that it is enabled in <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/NameServices#">Name Services</ulink> </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/LetsEncrypt?action=AttachFile&amp;do=get&amp;target=LetsEncrypt-NameServices.png" width="800"/>
</imageobject>
<textobject>
<phrase>Let's Encrypt Name Services</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Go to the Certificates (Let's Encrypt) page, and complete the module install if needed. Then click the "Obtain" button for your domain name. </para>
<itemizedlist>
<listitem>
<para>After some minutes a valid certificate is available </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/LetsEncrypt?action=AttachFile&amp;do=get&amp;target=LetsEncrypt.png" width="800"/>
</imageobject>
<textobject>
<phrase>Let's Encrypt</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Verify in your browser by checking <emphasis><code>https://MyWebName.com</code></emphasis> </para>
<itemizedlist>
<listitem override="none">
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/LetsEncrypt?action=AttachFile&amp;do=get&amp;target=LetsEncrypt-Certificate.png" width="800"/>
</imageobject>
<textobject>
<phrase>Let's Encrypt Certificate</phrase>
</textobject>
</inlinemediaobject>
</para>
</listitem>
</itemizedlist>
</listitem>
</orderedlist>
<para><emphasis role="strong">Screencast</emphasis>: <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/LetsEncrypt?action=AttachFile&amp;do=get&amp;target=Let%27s+Encrypt.webm">Let's Encrypt</ulink></para>
</section>
<section>
<title>Using</title>
<para>The certificate is valid for 3 months. It is renewed automatically and can also be re-obtained or revoked manually. </para>
<para>With running <emphasis>diagnostics</emphasis> the certificate can also be verified. </para>
</section>
</section>
<section>
<title>Monkeysphere</title>
<para>With Monkeysphere, an OpenPGP key can be generated for each configured domain serving SSH. The OpenPGP public key can then be uploaded to the OpenPGP keyservers. Users connecting to this machine through SSH can verify that they are connecting to the correct host. For users to trust the key, at least one person (usually the machine owner) must sign the key using the regular OpenPGP key signing process. See the <ulink url="http://web.monkeysphere.info/getting-started-ssh/">Monkeysphere SSH documentation</ulink> for more details. </para>
<para>Monkeysphere can also generate an OpenPGP key for each Secure Web Server (HTTPS) certificate installed on this machine. The OpenPGP public key can then be uploaded to the OpenPGP keyservers. Users accessing the web server through HTTPS can verify that they are connecting to the correct host. To validate the certificate, the user will need to install some software that is available on the <ulink url="https://web.monkeysphere.info/download/">Monkeysphere website</ulink>. </para>
</section>
<section>
<title>Name Services</title>
<para>Name Services provides an overview of ways the box can be reached from the public Internet: domain name, Tor hidden service, and Pagekite. For each type of name, it is shown whether the HTTP, HTTPS, and SSH services are enabled or disabled for incoming connections through the given name. </para>
</section>
<section>
<title>Networks</title>
<para>This section describes how networking is setup by default in FreedomBox and how you can customize it. See also the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Firewall#">Firewall</ulink> section for more information on how firewall works. </para>
<section>
<title>Default setup</title>
<para>In a fresh image of FreedomBox, network is not configured at all. When the image is written to an SD card and the device boots, configuration is done. During first boot, FreedomBox setup package detects the networks interfaces and tries to automatically configure them so that FreedomBox is available for further configuration via the web interface from another machine without the need to connect a monitor. Automatic configuration also tries to make FreedomBox useful, out of the box, for the most important scenarios FreedomBox is used for. </para>
<para>There are two scenarios it handles: when is a single ethernet interface and when there are multiple ethernet interfaces. </para>
<section>
<title>Single ethernet interface</title>
<para>When there is only single ethernet interface available on the hardware device, there is not much scope for it to play the role of a router. In this case, the device is assumed to be just another machine in the network. Accordingly, the only available interface is configured to be an <code>internal</code> interface in <code>automatic</code> configuration mode. This means that it connects to the Internet using the configuration provided by a router in the network and also makes all (internal and external) of its services available to all the clients on this network. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Networks?action=AttachFile&amp;do=get&amp;target=network_single.png"/>
</imageobject>
<textobject>
<phrase>network_single.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Multiple ethernet interface</title>
<para>When there are multiple ethernet interfaces available on the hardware device, the device can act as a router. The interfaces are then configured to perform this function. </para>
<para>The first network interface is configured to be an WAN or <code>external</code> interface in automatic configuration mode. This means that it connects to the Internet using network configuration provided by the Internet Service Provider (ISP). Only services that are meant to be provided across the entire Internet (external services) will be exposed on this interface. You must plug your Internet connection into the port of this ethernet interface. If you wish to continue to have your existing router manage the Internet connection for you, then plug a connection from your router to the port on this interface. </para>
<para>The remaining network interfaces are configured for the clients of a router. They are configured as LAN or <code>internal</code> interfaces in <code>shared</code> configuration mode. This means that all the services (both external and internal) services are provided to who ever connects on this interface. Further, the <code>shared</code> mode means that clients will be able to receive details of automatic network connection on this interface. Specifically, DHCP configuration and DNS servers are provided on this interface. The Internet connection available to the device using the first network interface will be <code>shared</code> with clients using this interface. This all means that you can connect your computers to this network interface and they will get automatically configured and will be able to access the Internet via the FreedomBox. </para>
<para>Currently, it is not very clear which interface will be come the WAN interface (and the remaining being LAN interfaces) although the assignment process is deterministic. So, it take a bit of trail and error to figure out which one is which. In future, for each device, this will be well documented. </para>
</section>
<section>
<title>Wi-Fi configuration</title>
<para>All Wi-Fi interfaces are configured to be LAN or <code>internal</code> interfaces in <code>shared</code> configuration mode. They are also configured to become Wi-Fi access points with following details. </para>
<itemizedlist>
<listitem>
<para>Name of the access point will be <code>FreedomBox</code> plus the name of the interface (to handle the case where there are multiple of them). </para>
</listitem>
<listitem>
<para>Password for connecting to the interface will be <code>freedombox123</code>. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Internet Connection Sharing</title>
<para>Although the primary duty of FreedomBox is to provide decentralized services, it can also act like a home router. Hence, in most cases, FreedomBox connects to the Internet and provides other machines in the network the ability to use that Internet connection. FreedomBox can do this in two ways: using a <code>shared</code> mode connection or using an <code>internal</code> connection. </para>
<para>When an interface is set in <code>shared</code> mode, you may connect your machine directly to it. This is either by plugging in an ethernet cable from this interface to your machine or by connecting to a Wi-Fi access point. This case is the simplest to use, as FreedomBox automatically provides your machine with the necessary network configuration. Your machine will automatically connect to FreedomBox provided network and will be able to connect to the Internet given that FreedomBox can itself connect to the Internet. </para>
<para>Sometimes the above setup may not be possible because the hardware device may have only one network interface or for other reasons. Even in this case, your machine can still connect to the Internet via FreedomBox. For this to work, make sure that the network interface that your machine is connecting to is in <code>internal</code> mode. Then, connect your machine to network in which FreedomBox is present. After this, in your machine's network configuration, set FreedomBox's IP address as the gateway. FreedomBox will then accept your network traffic from your machine and send it over to the Internet. This works because network interfaces in <code>internal</code> mode are configured to <code>masquerade</code> packets from local machines to the Internet and receive packets from Internet and forward them back to local machines. </para>
</section>
<section>
<title>Customization</title>
<para>The above default configuration may not be fit for your setup. You can customize the configuration to suit your needs from the <code>Networks</code> area in the 'setup' section of the FreedomBox web interface. </para>
<section>
<title>PPPoE connections</title>
<para>If your ISP does not provide automatic network configuration via DHCP and requires you to connection via PPPoE. To configure PPPoE, remove any network connection existing on an interface and add a PPPoE connection. Here, optionally, provide the account username and password given by your ISP and activate the connection. </para>
</section>
<section>
<title>Connect to Internet via Wi-Fi</title>
<para>By default Wi-Fi devices attached during first boot will be configured as access points. They can be configured as regular Wi-Fi devices instead to connection to a local network or an existing Wi-Fi router. To do this, click on the Wi-Fi connection to edit it. Change the mode to <code>Infrastructure</code> instead of <code>Access Point</code> mode and <code>IPv4 Addressing Method</code> to <code>Automatic (DHCP)</code> instead of <code>Shared</code> mode. Then the SSID provided will mean the Wi-Fi network name you wish to connect to and passphrase will be the used to while making the connection. </para>
</section>
<section>
<title>Adding a new network device</title>
<para>When a new network device is added, network manager will automatically configure it. In most cases this will not work to your liking. Delete the automatic configuration created on the interface and create a new network connection. Select your newly added network interface in the add connection page. </para>
<itemizedlist>
<listitem>
<para>Then set firewall zone to <code>internal</code> and <code>external</code> appropriately. </para>
</listitem>
<listitem>
<para>You can configure the interface to connect to a network or provide network configuration to whatever machine connects to it. </para>
</listitem>
<listitem>
<para>Similarly, if it is a Wi-Fi interface, you can configure it to become a Wi-FI access point or to connect to an existing access points in the network. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Configuring a mesh network</title>
<para>FreedomBox has rudimentary support for participating in BATMAN-Adv based mesh networks. It is possible to either join an existing network in your area or create a new mesh network and share your Internet connection with the rest of the nodes that join the network. Currently, two connections have to be created and activated manually to join or create a mesh network. </para>
<section>
<title>Joining a mesh network</title>
<para>To join an existing mesh network in your area, first consult the organizers and get information about the mesh network. </para>
<orderedlist numeration="arabic">
<listitem>
<para>Create a new connection, then select the connection type as <emphasis>Wi-Fi</emphasis>. In the following dialog, provide the following values: </para>
<informaltable>
<tgroup cols="3">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<tbody>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Field Name</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Example Value</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Explanation</emphasis>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Connection Name</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Mesh Join - BATMAN </para>
</entry>
<entry colsep="1" rowsep="1">
<para> The name must end with 'BATMAN' (uppercase) </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Physical Interface</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> wlan0 </para>
</entry>
<entry colsep="1" rowsep="1">
<para> The Wi-Fi device you wish to use for joining the mesh network </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Firewall Zone</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> External </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Since you don't wish that participants in mesh network to use internal services of FreedomBox </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>SSID</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> ch1.freifunk.net </para>
</entry>
<entry colsep="1" rowsep="1">
<para> As provided to you by the operators of the mesh network. You should see this as a network in <emphasis>Nearby Wi-Fi Networks</emphasis> </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Mode</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Ad-hoc </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Because this is a peer-to-peer network </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Frequency Band</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> 2.4Ghz </para>
</entry>
<entry colsep="1" rowsep="1">
<para> As provided to you by the operators of the mesh network </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Channel</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> 1 </para>
</entry>
<entry colsep="1" rowsep="1">
<para> As provided to you by the operators of the mesh network </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>BSSID</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> 12:CA:FF:EE:BA:BE </para>
</entry>
<entry colsep="1" rowsep="1">
<para> As provided to you by the operators of the mesh network </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Authentication</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Open </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Leave this as open, unless you know your mesh network needs it be otherwise </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Passphrase</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1"/>
<entry colsep="1" rowsep="1">
<para> Leave empty unless you know your mesh network requires one </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>IPv4 Addressing Method</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Disabled </para>
</entry>
<entry colsep="1" rowsep="1">
<para> We don't want to request IP configuration information yet </para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Save the connection. Join the mesh network by activating this newly created connection. </para>
</listitem>
<listitem>
<para>Create a second new connection, then select the connection type as <emphasis>Generic</emphasis>. In the following dialog, provide this following values: </para>
<informaltable>
<tgroup cols="3">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<tbody>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Field Name</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Example Value</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Explanation</emphasis>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Connection Name</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Mesh Connect </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Any name to identify this connection </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Physical Interface</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> bat0 </para>
</entry>
<entry colsep="1" rowsep="1">
<para> This interface will only show up after you successfully activate the connection in first step </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>Firewall Zone</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> External </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Since you don't wish that participants in mesh network to use internal services of FreedomBox </para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis>IPv4 Addressing Method</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para> Auto </para>
</entry>
<entry colsep="1" rowsep="1">
<para> Mesh networks usually have a DHCP server somewhere that provide your machine with IP configuration. If not, consult the operator and configure IP address setting accordingly with <emphasis>Manual</emphasis> method </para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>Save the connection. Configure your machine for participation in the network by activating this connection. Currently, this connection has to be manually activated every time you need to join the network. In future, FreedomBox will do this automatically. You will now be able reach other nodes in the network. You will also be able to connect to the Internet via the mesh network if there is an Internet connection point somewhere in mesh as setup by the operators. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Creating a mesh network</title>
<para>To create your own mesh network and share your Internet connection with the rest of the nodes in the network: </para>
<orderedlist numeration="arabic">
<listitem>
<para>Follow the instructions as provided above in step 1 of <emphasis>Joining a mesh network</emphasis> but choose and fix upon your own valid values for <emphasis>SSID</emphasis> (a name for you mesh network), <emphasis>Frequency Band</emphasis> (usually 2.4Ghz), <emphasis>Channel</emphasis> (1 to 11 in 2.4Ghz band) and <emphasis>BSSID</emphasis> (a hex value like 12:CA:DE:AD:BE:EF). Create this connection and activate it. </para>
</listitem>
<listitem>
<para>Follow the instructions as provided above in step 2 of <emphasis>Joining a mesh network</emphasis> but select <emphasis>IPv4 Addressing Method</emphasis> as <emphasis>Shared</emphasis>. This will provide automatic IP configuration to other nodes in the network as well as share the Internet connection on your machine (achieved using a second Wi-Fi interface, using Ethernet, etc.) with other nodes in the mesh network. </para>
</listitem>
</orderedlist>
<para>Spread the word about your mesh network to your neighbors and let them know the parameters you have provided when creating the network. When other nodes connect to this mesh network, they have to follow steps in <emphasis>Joining a mesh network</emphasis> but use the values for <emphasis>SSID</emphasis>, <emphasis>Frequency Band</emphasis> and <emphasis>Channel</emphasis> that you have chosen when you created the mesh network. </para>
</section>
</section>
</section>
<section>
<title>Manual Network Operation</title>
<para>FreedomBox automatically configures networks by default and provides a simplified interface to customize the configuration to specific needs. In most cases, manual operation is not necessary. The following steps describe how to manually operate network configuration in the event that a user finds FreedomBox interface to insufficient for task at hand or to diagnose a problem that FreedomBox does not identify. </para>
<para>On the command line interface: </para>
<para>For text based user interface for configuring network connections: </para>
<screen><![CDATA[nmtui]]></screen>
<para>To see the list of available network devices: </para>
<screen><![CDATA[nmcli device]]></screen>
<para>To see the list of configured connections: </para>
<screen><![CDATA[nmcli connection]]></screen>
<para>To see the current status of a connection: </para>
<screen><![CDATA[nmcli connection show '<connection_name>']]></screen>
<para>To see the current firewall zone assigned to a network interface: </para>
<screen><![CDATA[nmcli connection show '<connection_name>' | grep zone]]></screen>
<para>or </para>
<screen><![CDATA[firewall-cmd --zone=internal --list-all
firewall-cmd --zone=external --list-all]]></screen>
<para>To create a new network connection: </para>
<screen><![CDATA[nmcli con add con-name "<connection_name>" ifname "<interface>" type ethernet
nmcli con modify "<connection_name>" connection.autoconnect TRUE
nmcli con modify "<connection_name>" connection.zone internal]]></screen>
<para>To change the firewall zone for a connection: </para>
<screen><![CDATA[nmcli con modify "<connection_name>" connection.zone "<internal|external>"]]></screen>
<para>For more information on how to use <code>nmcli</code> command, see its man page. Also for a full list of configuration settings and type of connections accepted by Network Manager see: </para>
<para>
<ulink url="https://developer.gnome.org/NetworkManager/stable/ref-settings.html"/>
</para>
<para>To see the current status of the firewall and manually operate it, see the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Firewall#">Firewall</ulink> section. </para>
</section>
</section>
<section>
<title>Power</title>
<para>Power provides an easy way to restart or shut down FreedomBox. After you select "Restart" or "Shut Down", you will be asked to confirm. </para>
</section>
<section>
<title>Public Visibility (PageKite)</title>
<section>
<title>What is PageKite?</title>
<para>PageKite makes local websites and services publicly accessible immediately without creating yourself a public IP address. It does this by tunneling protocols such as HTTPS or SSH through firewalls and NAT. Using PageKite requires an account on a PageKite relay service. One such service is <ulink url="https://pagekite.net"/>. </para>
<para>A PageKite relay service will allow you to create kites. Kites are similar to domain names, but with different advantages and drawbacks. A kite can have a number of configured services. PageKite is known to work with HTTP, HTTPS, and SSH, and may work with some other services, but not all. </para>
</section>
<section>
<title>Using PageKite</title>
<orderedlist numeration="arabic">
<listitem>
<para>Create an account on a PageKite relay service. </para>
</listitem>
<listitem>
<para>Add a kite to your account. Note your kite name and kite secret. </para>
</listitem>
<listitem>
<para>In Plinth, go to the "Configure PageKite" tab on the Public Visibility (PageKite) page. </para>
</listitem>
<listitem>
<para>Check the "Enable PageKite" box, then enter your kite name and kite secret. Click "Save settings". </para>
</listitem>
<listitem>
<para>On the "Standard Services" tab, you can enable HTTP and HTTPS (recommended) and SSH (optional). </para>
<itemizedlist>
<listitem>
<para>HTTP is needed to obtain the Let's Encrypt certificate. You can disable it later. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>On the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/LetsEncrypt#">Certificates (Let's Encrypt)</ulink> page, you can obtain a Let's Encrypt certificate for your kite name. </para>
</listitem>
</orderedlist>
</section>
</section>
<section>
<title>Secure Shell</title>
<section>
<title>What is Secure Shell?</title>
<para>FreedomBox runs <code>openssh-server</code> server by default allowing remote logins from all interfaces. If your hardware device is connected to a monitor and a keyboard, you may login directly as well. Regular operation of FreedomBox does not require you to use the shell. However, some tasks or identifying a problem may require you to login to a shell. </para>
</section>
<section>
<title>Setting Up A User Account</title>
<section>
<title>Plinth First Log In: Admin Account</title>
<para>When creating an account in Plinth for the first time, this user will automatically have administrator capabilities. <code>Admin</code> users are able to log in using ssh (see Logging In below) and have superuser privileges via sudo. </para>
</section>
<section>
<title>Default User Account</title>
<itemizedlist>
<listitem>
<para>Note: If you can access Plinth, then you don't need to do this. You can use the user account created in Plinth to connect to SSH. </para>
</listitem>
</itemizedlist>
<para>The pre-built FreedomBox images have a default user account called "fbx". However the password is not set for this account, so it will not be possible to log in with this account by default. </para>
<para>There is a script included in the freedom-maker program, that will allow you to set the password for this account, if it is needed. To set a password for the "fbx" user: </para>
<para>1. Decompress the image file. </para>
<para>2. Get a copy of freedom-maker from <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker/"/>. </para>
<para>3. Run <code>sudo ./bin/passwd-in-image &lt;image-file&gt; fbx</code>. </para>
<para>4. Copy the image file to SD card and boot device as normal. </para>
<para>The "fbx" user also has superuser privileges via sudo. </para>
</section>
</section>
<section>
<title>Logging In</title>
<section>
<title>Local</title>
<para>To login via SSH, to your FreedomBox: </para>
<screen><![CDATA[$ ssh fbx@freedombox]]></screen>
<para>Replace <code>fbx</code> with the name of the user you wish to login as. <code>freedombox</code> should be replaced with the hostname or IP address of you FreedomBox device as found in the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/QuickStart#">Quick Start</ulink> process. </para>
<para><code>fbx</code> is the default user present on FreedomBox with superuser privileges. Any other user created using Plinth and belonging to the group <code>admin</code> will be able to login. The <code>root</code> account has no password set and will not be able to login. Access will be denied to all other users. </para>
<para><code>fbx</code> and users in <code>admin</code> group will also be able to login on the terminal directly. Other users will be denied access. </para>
<para>If you repeatedly try to login as a user and fail, you will be blocked from logging in for some time. This is due to <code>libpam-abl</code> package that FreedomBox installs by default. To control this behavior consult <code>libpam-abl</code> documentation. </para>
</section>
<section>
<title>SSH over Tor</title>
<para>If in Plinth you have enabled hidden services via Tor, you can access your <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> using ssh over Tor. On a GNU/Linux computer, install netcat-openbsd. </para>
<screen><![CDATA[$ sudo apt-get install netcat-openbsd]]></screen>
<para>Edit ~/.ssh/config to enable connections over Tor. </para>
<screen><![CDATA[$ nano ~/.ssh/config]]></screen>
<para>Add the following: </para>
<screen><![CDATA[Host *.onion
user USERNAME
port 22
ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p]]></screen>
<para>Replace USERNAME with, e.g., an <code>admin</code> username (see above). </para>
<para>Note that in some cases you may need to replace 9050 with 9150. </para>
<para>Now to connect to the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink>, open a terminal and type: </para>
<screen><![CDATA[$ ssh USERNAME@ADDRESS.onion]]></screen>
<para>Replace USERNAME with, e.g., an <code>admin</code> username, and ADDRESS with the hidden service address for your <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink>. </para>
</section>
</section>
<section>
<title>Becoming Superuser</title>
<para>After logging in, if you want to become the superuser for performing administrative activities: </para>
<screen><![CDATA[$ sudo su]]></screen>
<para>Make a habit of logging in as root <emphasis>only when you need to</emphasis>. If you aren't logged in as root, you can't accidentally break everything. </para>
<para>
<anchor id="changingpassword"/>
</para>
</section>
<section>
<title>Changing Password</title>
<para>To change the password of a user managed by Plinth, use the change password page. However, the <code>fbx</code> default user is not managed by Plinth and its password cannot be changed in the web interface. </para>
<para>To change password on the terminal, log in to your FreedomBox as the user whose password you want to change. Then, run the following command: </para>
<screen><![CDATA[$ passwd]]></screen>
<para>This will ask you for your current password before giving you the opportunity to set a new one. </para>
</section>
</section>
<section>
<title>Security</title>
<para>When this option is enabled, only users in the "admin" group will be able to log in to console or via SSH. Console users may be able to access some services without further authorization. </para>
<para>You can define the group of the users in the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Users#">Users</ulink> section. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Security?action=AttachFile&amp;do=get&amp;target=Security.png"/>
</imageobject>
<textobject>
<phrase>Security.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Service Discovery</title>
<para>Service discovery allows other devices on the network to discover your FreedomBox and services running on it. If a client on the local network supports mDNS, it can find your FreedomBox at &lt;hostname&gt;.local (for example: freedombox.local). </para>
<para>It also allows FreedomBox to discover other devices and services running on your local network. </para>
<para>Service discovery is not essential and works only on internal networks. It may be disabled to improve security especially when connecting to a hostile local network. </para>
</section>
<section>
<title>Snapshots</title>
<para><emphasis>Snapshots</emphasis> allows you to create filesystem snapshots, and rollback the system to a previous snapshot. </para>
<itemizedlist>
<listitem>
<para>Note: This feature requires a Btrfs filesystem. All of the FreedomBox stable disk images use Btrfs. </para>
</listitem>
</itemizedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Snapshots?action=AttachFile&amp;do=get&amp;target=snapshots.png" width="800"/>
</imageobject>
<textobject>
<phrase>Snapshots</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Storage</title>
<para><emphasis>Storage</emphasis> allows you to see the storage devices attached to your FreedomBox and their disk space usage. </para>
<para>FreedomBox can automatically detect and mount removable media like USB flash drives. They are listed under the <emphasis>Removable Devices</emphasis> section along with an option to eject them. </para>
<para>If there is some free space left after the root partition, the option to expand the root partition is also available. This is typically not shown, since expanding the root partition happens automatically when the FreedomBox starts up for the first time. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Storage?action=AttachFile&amp;do=get&amp;target=Storage.png" width="800"/>
</imageobject>
<textobject>
<phrase>Storage.png</phrase>
</textobject>
</inlinemediaobject>
</para>
</section>
<section>
<title>Software Upgrades</title>
<para>FreedomBox can automatically install security upgrades. On the <emphasis>Upgrades</emphasis> page of the <emphasis>Settings</emphasis> section in Plinth you can turn on automatic upgrades. For FreedomBox versions above 0.5, this feature is enabled by default and there is no manual action necessary. It is strongly recommended that you have this option enabled to keep your FreedomBox secure. </para>
<para>Upgrades are performed every day at night. If you wish to shutdown FreedomBox every day after use, keep it running at night once a week or so to let the automatic upgrades happen. Alternatively, you can perform manual upgrades as described below. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/Upgrades?action=AttachFile&amp;do=get&amp;target=upgrades.png"/>
</imageobject>
<textobject>
<phrase>upgrades.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<section>
<title>Manual Upgrades</title>
<para>In the Plinth web interface, you can initiate a manual upgrade process from <emphasis>Upgrades</emphasis> page of the <emphasis>Settings</emphasis> section. Note that once the upgrades start, it may take a long time to complete and Plinth may seem to wait for the page to load. </para>
<para>Under some circumstances, automatic upgrades may fail and require you perform a manual upgrade action. Even upgrades initiated from Plinth may not finish properly. This may be because the upgrade process requires you to make a decision. In these cases, manual upgrade on the terminal may be the only option. </para>
<para>In addition, while the upgrade task is running any application installations will wait until the upgrade task is finished. Depending on the hardware, the upgrade task may take a little time, therefore, giving the impression that the application installation stalled. </para>
<para>To perform manual upgrades on the terminal, login into FreedomBox on a terminal or using a remote secure shell (see <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/SecureShell#">Secure Shell</ulink> section). Then run the following commands: </para>
<screen><![CDATA[$ sudo su -
Password:
# apt-get update
# apt-get dist-upgrade]]></screen>
<para>This will ask you if it is alright to install/upgrade (or remove) some packages and use (or release) some disk space. Say <emphasis>yes</emphasis> after review. In some cases, during the upgrades process you will be asked questions about modified configuration files, answering with a default <emphasis>Keep current configuration</emphasis> is usually safe. </para>
</section>
</section>
<section>
<title>Users and Groups</title>
<para>You can grant access to your FreedomBox for other users. Provide the Username with a password and assign a group to it. Currently the groups </para>
<itemizedlist>
<listitem>
<para>admin </para>
</listitem>
<listitem>
<para>wiki </para>
</listitem>
</itemizedlist>
<para>are supported. </para>
<para>The user will be able to log in to services that support single sign-on through LDAP, if they are in the appropriate group. </para>
<para>Users in the admin group will be able to log in to all services. They can also log in to the system through SSH and have administrative privileges (sudo). </para>
<para>These characteristics can also be changed later-on. </para>
<para>It is also possible to set an SSH public key which will allow this user to securely log in to the system without using a password. You may enter multiple keys, one on each line. Blank lines and lines starting with # will be ignored. </para>
<para>A user's account can be deactivated, which will temporarily disable the account. </para>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>Currently, Plinth does not distinguish between users and administrators. Every user added through Plinth will have full access to the Plinth interface. </para>
</listitem>
</itemizedlist>
</section>
</section>
</section>
<section>
<title>Hardware</title>
<para>FreedomBox is designed to be the software for a consumer electronics device that is easy to setup, maintain and use. The project does not aim to create a custom hardware device ourselves, but instead we plan to support/customize existing hardware. </para>
<para>In addition to supporting various single board computers and other devices, FreedomBox also supports being installed in a virtual machine. Also, any Debian machine can be turned into a FreedomBox by installing the <code>freedombox-setup</code> package. See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual#">manual</ulink> for more details. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Supported Hardware</title>
<section>
<title>Recommended Hardware</title>
<informaltable>
<tgroup cols="3">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<tbody>
<row rowsep="1">
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Cubietruck#">
<inlinemediaobject>
<imageobject>
<imagedata depth="206" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=danube_thumb.png" width="235"/>
</imageobject>
<textobject>
<phrase>FreedomBox Danube Edition</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Cubietruck#">FreedomBox - Danube Edition</ulink>
</para>
<para> (based on Cubietruck) </para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Cubieboard2#">
<inlinemediaobject>
<imageobject>
<imagedata depth="156" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=cubieboard2_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>Cubieboard 2</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Cubieboard2#">Cubieboard2</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/BeagleBone#">
<inlinemediaobject>
<imageobject>
<imagedata depth="157" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=beagleboard_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>BeagleBone Black</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/BeagleBone#">BeagleBone Black</ulink>
</para>
</entry>
</row>
<row rowsep="1">
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/A20-OLinuXino-Lime2#">
<inlinemediaobject>
<imageobject>
<imagedata depth="159" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=a20-olinuxino-lime2_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>A20 OLinuXino Lime2</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/A20-OLinuXino-Lime2#">A20 OLinuXino Lime2</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/A20-OLinuXino-MICRO#">
<inlinemediaobject>
<imageobject>
<imagedata depth="132" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=a20-olinuxino-micro_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>A20 OLinuXino MICRO</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/A20-OLinuXino-MICRO#">A20 OLinuXino MICRO</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/APU#">
<inlinemediaobject>
<imageobject>
<imagedata depth="157" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=apu1d_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>PC Engines APU</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/APU#">PC Engines APU</ulink>
</para>
</entry>
</row>
<row rowsep="1">
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/pcDuino3#">
<inlinemediaobject>
<imageobject>
<imagedata depth="107" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=pcduino3s_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>pcDuino3</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/pcDuino3#">pcDuino3</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">
<inlinemediaobject>
<imageobject>
<imagedata depth="201" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=debian_thumb.png" width="156"/>
</imageobject>
<textobject>
<phrase>Debian</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">Debian</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/VirtualBox#">
<inlinemediaobject>
<imageobject>
<imagedata depth="154" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=virtualbox_thumb.png" width="235"/>
</imageobject>
<textobject>
<phrase>VirtualBox</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/VirtualBox#">VirtualBox</ulink>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<section>
<title>Recommended Hardware chart</title>
<informaltable>
<tgroup cols="9">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<colspec colname="col_3"/>
<colspec colname="col_4"/>
<colspec colname="col_5"/>
<colspec colname="col_6"/>
<colspec colname="col_7"/>
<colspec colname="col_8"/>
<tbody>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Name</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Speed (GHz)</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Debian arch</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Ram (GB)</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">disk (GB)</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">battery</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">SATA</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Ethernet speed</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">
<ulink url="https://wiki.debian.org/FreedomBox/Manual/OpenSourceHardware#">OSHW</ulink>
</emphasis>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>APU.1D </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>amd64 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para> - </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>1000x3</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>APU.1D4 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>amd64 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>4</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para> - </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>1000x3</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>BeagleBone Black C </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/omap </para>
</entry>
<entry colsep="1" rowsep="1">
<para>½</para>
</entry>
<entry colsep="1" rowsep="1">
<para>4</para>
</entry>
<entry colsep="1" rowsep="1">
<para> - </para>
</entry>
<entry colsep="1" rowsep="1">
<para> - </para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>Cubieboard2 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1</para>
</entry>
<entry colsep="1" rowsep="1">
<para>4</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>Cubieboard2-Dual </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>Cubieboard3/Cubietruck </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>8</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>1000 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>OLinuXino A20 LIME </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>½</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>OLinuXino A20 LIME2 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>1000 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>OLinuXino A20 MICRO </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1</para>
</entry>
<entry colsep="1" rowsep="1">
<para>-</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>pcDunino3 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1x2</para>
</entry>
<entry colsep="1" rowsep="1">
<para>armhf/sunxi </para>
</entry>
<entry colsep="1" rowsep="1">
<para>1</para>
</entry>
<entry colsep="1" rowsep="1">
<para>4</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>100 </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
</section>
<section>
<title>Also Working Hardware</title>
<para>This hardware works but is not recommended due to freedom, performance-per-cost, or other concerns: </para>
<informaltable>
<tgroup cols="3">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<tbody>
<row rowsep="1">
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi2#">
<inlinemediaobject>
<imageobject>
<imagedata depth="157" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=raspberry2_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 2</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi2#">Raspberry Pi 2</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi3B#">
<inlinemediaobject>
<imageobject>
<imagedata depth="155" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=raspberrypi3b_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 3 Model B</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi3B#">Raspberry Pi 3 Model B</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi3B+#">
<inlinemediaobject>
<imageobject>
<imagedata depth="153" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=raspberrypi3bplus_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 3 Model B+</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi3B+#">Raspberry Pi 3 Model B+</ulink>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
<section>
<title>Deprecated Hardware</title>
<para>This hardware was supported earlier but is no longer supported. If you downloaded an earlier image and are running FreedomBox on one of these hardware, you will keep getting software updates. However, no new images will be provided for these hardware. It is recommended that you migrate to newer, supported hardware using backup and restore. </para>
<informaltable>
<tgroup cols="2">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<tbody>
<row rowsep="1">
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/DreamPlug#">
<inlinemediaobject>
<imageobject>
<imagedata depth="156" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=dreamplug_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>DreamPlug</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/DreamPlug#">DreamPlug</ulink>
</para>
</entry>
<entry align="center" colsep="1" rowsep="1">
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi#">
<inlinemediaobject>
<imageobject>
<imagedata depth="158" fileref="https://wiki.debian.org/FreedomBox/Hardware?action=AttachFile&amp;do=get&amp;target=raspberry_thumb.jpg" width="235"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/RaspberryPi#">Raspberry Pi</ulink>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para><emphasis>Note</emphasis>: As FreedomBox is currently in the development stage, <emphasis>Supported Hardware</emphasis> means that FreedomBox images are built for said hardware and at least one developer has reported the basic functions to be working. </para>
</section>
</section>
<section>
<title>Targeted Hardware</title>
<section>
<title>List of Targeted Hardware</title>
<para>Although the project may focus on supporting specific devices, we are looking to support as much hardware as possible given that it is suitable for FreedomBox's needs. Take a look at the list of <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TargetedHardware#">targeted hardware</ulink> for more information. </para>
</section>
<section>
<title>Adding Hardware Support</title>
<para>If you are a developer, consider adding hardware support for your device by modifying <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink> and <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Setup#">FreedomBox Setup</ulink>. If you have access to one of these <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TargetedHardware#">targeted hardware</ulink> devices and would like to work with us to make it run FreedomBox, please contact us! </para>
</section>
</section>
<section>
<title>Cubietruck</title>
<section>
<title>FreedomBox Danube Edition</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="561" fileref="https://wiki.debian.org/FreedomBox/Hardware/Cubietruck?action=AttachFile&amp;do=get&amp;target=freedombox-danube.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>FreedomBox Danube Edition</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="http://projectdanube.org">FreedomBox Danube Edition</ulink> is a custom casing around Cubietruck and an SSD-hard drive. </para>
</section>
<section>
<title>Cubietruck / Cubieboard3</title>
<para><ulink url="http://cubieboard.org/model/">Cubietruck</ulink> (Cubieboard3) is a single board computer with very good performance compared to many other boards. FreedomBox images are built for this device. To use this board as FreedomBox, a separate <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para>Recommendation: If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
</section>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> are provided for this hardware. These SD card images are meant for use with the on-board SD card slot and do not work when used with a separate SD card reader connected via USB. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/Allwinner#">install Debian</ulink> on the Cubietruck and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<para>FreedomBox Danube Edition </para>
<itemizedlist>
<listitem>
<para>A limited number of units are planned to be shipped along with the release of FreedomBox 1.0. If you wish to get one, <ulink url="http://projectdanube.org">express your interest</ulink>. </para>
</listitem>
</itemizedlist>
<para>Cubietruck / Cubieboard3 </para>
<itemizedlist>
<listitem>
<para>Price: 89 USD </para>
</listitem>
<listitem>
<para>
<ulink url="http://cubieboard.org/buy/">List of suppliers</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core </para>
</listitem>
<listitem>
<para>RAM: 2 GiB DDR3 @ 480 MHz </para>
</listitem>
<listitem>
<para>Storage: 8 GB NAND flash built-in, 1x microSD slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100/1000, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: Broadcom BCM4329/BCM40181 (no free WiFi drivers + firmware available) </para>
</listitem>
<listitem>
<para>SATA: 1x 2.0 port </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: ? </para>
</listitem>
<listitem>
<para>WiFi: no free WiFi drivers + firmware available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: yes </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>The on-board WiFi does not work with free software. A separate <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> is recommended. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Beagle Bone Black</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="421" fileref="https://wiki.debian.org/FreedomBox/Hardware/BeagleBone?action=AttachFile&amp;do=get&amp;target=beagleboard.jpg" width="632"/>
</imageobject>
<textobject>
<phrase>Beagle Bone Black</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="http://beagleboard.org/black">Beagle Bone Black</ulink> (Revision C.1) is an Open Source Hardware (OSHW) single board computer. This means that the designer is actively helping people using the platform for their own designs, and supports them in adding hardware functionality and production advice. This is a part of freedom that is often overlooked, but very much aligned with the FreedomBox goals. FreedomBox images are built and tested for this device. To use this device as a FreedomBox, a separate USB <ulink url="https://wiki.debian.org/FreedomBox/Manual/WiFi#">WiFi</ulink> device that does not require non-free firmware is recommended. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> are available for this device. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot the device. </para>
<para>Note: This image is for BeagleBone Black (Revision C.1) only. It will not work on the BeagleBone Green, and also not on the Revisions A&amp;B. If you have such a device and would like to help getting FreedomBox to run on it, contact us! </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/TI/BeagleBone#">install Debian</ulink> on the BeagleBone and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: ~ 59 USD (50 EUR) </para>
</listitem>
<listitem>
<para>
<ulink url="http://dk.mouser.com/access/?pn=595-BB-BBLK-000">Mouser Electronics</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://beagleboard.org/black">Full list of suppliers</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Source Hardware (OSHW): <ulink url="http://elinux.org/Beagleboard:BeagleBoneBlack">Yes</ulink> </para>
</listitem>
<listitem>
<para>CPU: <ulink url="http://www.ti.com/product/am3358">AM335x 1GHz ARM Cortex-A8</ulink> </para>
</listitem>
<listitem>
<para>RAM: 512MB DDR3L 800 Mhz </para>
</listitem>
<listitem>
<para>Storage: Onboard 4GB, 8bit Embedded MMC and microSD </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: None </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: No </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<para>None </para>
</section>
</section>
<section>
<title>A20 OLinuXino Lime2</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="432" fileref="https://wiki.debian.org/FreedomBox/Hardware/A20-OLinuXino-Lime2?action=AttachFile&amp;do=get&amp;target=a20-olinuxino-lime2.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>A20 OLinuXino Lime2</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Olimex's <ulink url="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME2/open-source-hardware">A20 OLinuXino Lime2</ulink> is a fully Open Source Hardware (OSHW) single board computer. This means that the designer is actively helping people using the platform for their own designs, and supports them in adding hardware functionality and production advice. This is a part of freedom that is often overlooked, but very much aligned with the FreedomBox goals. It uses the Allwinner A20 Dual Core ARM processor. FreedomBox images are built and tested for this device starting with version 0.7. To use this device as a FreedomBox, a separate USB <ulink url="https://wiki.debian.org/FreedomBox/Manual/WiFi#">WiFi</ulink> device that does not require non-free firmware is recommended. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Similar Hardware</title>
<para>The following similar hardware will also work well with FreedomBox. </para>
<itemizedlist>
<listitem>
<para>Olimex's <ulink url="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME2-4GB/open-source-hardware">A20 OLinuXino Lime2 4GB</ulink>. This hardware merely has extra 4GB NAND storage that is not used by FreedomBox. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> are available for this device. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot the device. These SD card images are meant for use with the on-board SD card slot and won't work when used with a separate SD card reader connected via USB. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/Allwinner#">install Debian</ulink> on the device and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 45 EUR (A20 OLinuXino Lime2) </para>
</listitem>
<listitem>
<para>Price: 55 EUR (A20 OLinuXino Lime2 4GB) </para>
</listitem>
<listitem>
<para>
<ulink url="https://www.olimex.com/Products/OLinuXino/A20/open-source-hardware">Olimex Store</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Source Hardware (OSHW): <ulink url="https://github.com/OLIMEX/OLINUXINO/tree/master/HARDWARE">Yes</ulink> </para>
</listitem>
<listitem>
<para>CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core </para>
</listitem>
<listitem>
<para>RAM: 1 GiB DDR3 </para>
</listitem>
<listitem>
<para>Storage: 4 GB NAND flash built-in (only on 4GB model), 1x microSD slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100/1000, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: 1x port </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: No </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
<listitem>
<para>Boot Firmware: <ulink url="https://linux-sunxi.org/BROM">BROM</ulink> (GPLV2+) </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>
<ulink url="https://salsa.debian.org/freedombox-team/freedom-maker/issues/148">LIME2: Not working properly</ulink>
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>A20 OLinuXino MICRO</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="359" fileref="https://wiki.debian.org/FreedomBox/Hardware/A20-OLinuXino-MICRO?action=AttachFile&amp;do=get&amp;target=a20-olinuxino-micro.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>A20 OLinuXino MICRO</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>Olimex's <ulink url="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-MICRO/open-source-hardware">A20 OLinuXino MICRO</ulink> is a fully Open Source Hardware (OSHW) single board computer. This means that the designer is actively helping people using the platform for their own designs, and supports them in adding hardware functionality and production advice. This is a part of freedom that is often overlooked, but very much aligned with the FreedomBox goals. It uses the Allwinner A20 Dual Core ARM processor. FreedomBox images are built and tested for this device starting with version 0.7. To use this device as a FreedomBox, a separate USB <ulink url="https://wiki.debian.org/FreedomBox/Manual/WiFi#">WiFi</ulink> device that does not require non-free firmware is recommended. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Similar Hardware</title>
<para>The following similar hardware will also work well with FreedomBox. </para>
<itemizedlist>
<listitem>
<para>Olimex's <ulink url="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-MICRO-4GB/open-source-hardware">A20 OLinuXino MICRO 4GB</ulink>. This hardware merely has extra 4GB NAND storage that is not used by FreedomBox. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Download</title>
<para>FreedomBox MicroSD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> are available for this device. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox MicroSD card and boot the device. These MicroSD card images are meant for use with the on-board MicroSD card slot and won't work on the SD card slot or when using a separate MicroSD card reader connected via USB. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/Allwinner#">install Debian</ulink> on the device and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 55 EUR (A20 OLinuXino MICRO) </para>
</listitem>
<listitem>
<para>Price: 65 EUR (A20 OLinuXino MICRO 4GB) </para>
</listitem>
<listitem>
<para>
<ulink url="https://www.olimex.com/Products/OLinuXino/A20/open-source-hardware">Olimex Store</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Source Hardware (OSHW): <ulink url="https://github.com/OLIMEX/OLINUXINO/tree/master/HARDWARE">Yes</ulink> </para>
</listitem>
<listitem>
<para>CPU: Allwinner A20, ARM Cortex-A7 @ 1GHz dual-core </para>
</listitem>
<listitem>
<para>RAM: 1 GiB DDR3 </para>
</listitem>
<listitem>
<para>Storage: 4 GB NAND flash built-in (only on 4GB model), 1x microSD slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: 1x port </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: No </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
<listitem>
<para>Boot Firmware: <ulink url="https://linux-sunxi.org/BROM">BROM</ulink> (GPLV2+) </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>Not visible on local network </para>
</listitem>
<listitem>
<para>When booting the 'stable' image (made on 2017-06-18) the board does not automatically get an IP address from the router's DHCP server over ethernet. Booting the 'testing' image (2018-06) the board does get an IP address. Tested on MICRO hardware revision J. see also: <ulink url="https://www.olimex.com/forum/index.php?topic=5839.msg24167#msg24167"/> </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>APU</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="319" fileref="https://wiki.debian.org/FreedomBox/Hardware/APU?action=AttachFile&amp;do=get&amp;target=apu1d.jpg" width="632"/>
</imageobject>
<textobject>
<phrase>PC Engines APU 1D</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="http://www.pcengines.ch/apu1d.htm">PC Engines APU 1D</ulink> is a single board computer with 3 Gigabit ethernet ports, a powerful AMD APU and Coreboot firmware. FreedomBox images built for AMD64 machines are tested to work well for it. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Similar Hardware</title>
<para>Although untested, the following similar hardware is also likely to work well with FreedomBox. </para>
<itemizedlist>
<listitem>
<para>Using amd64 image: </para>
<itemizedlist>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu1c.htm">apu1c</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu1c4.htm">apu1c4</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu1d4.htm">apu1d4</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu2b2.htm">apu2b2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu2b4.htm">apu2b4</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu2c0.htm">apu2c0</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu2c2.htm">apu2c2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu2c4.htm">apu2c4</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu3a2.htm">apu3a2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu3a4.htm">apu3a4</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu3b2.htm">apu3b2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/apu3b4.htm">apu3b4</ulink>
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Using i386 image: </para>
<itemizedlist>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix1d.htm">alix1d</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix1e.htm">alix1e</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix2d2.htm">alix2d2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix2d3.htm">alix2d3</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix2d13.htm">alix2d13</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix3d2.htm">alix3d2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix3d3.htm">alix3d3</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/alix6f2.htm">alix6f2</ulink>
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Download</title>
<para>FreedomBox disk <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card, USB disk, SSD or hard drive and boot into FreedomBox. Pick the image meant for all amd64 machines. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/Alix3d2#">install Debian</ulink> on the APU and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Networking</title>
<para>The first network port, the left most one in the above picture, is configured by FreedomBox to be an upstream Internet link and the remaining 2 ports are configured for local computers to connect to. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware, which is for all amd64 machines, can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 110 - 170 USD (depending on the board and supplier) </para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/order.htm">PC Engines</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.pcengines.ch/order.htm">Full list of suppliers</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: <ulink url="http://www.amd.com/en-gb/products/embedded/processors/g-series">AMD G series T40E</ulink> </para>
</listitem>
<listitem>
<para>RAM: 2 GB DDR3-1066 DRAM </para>
</listitem>
<listitem>
<para>Storage: SD card, External USB </para>
</listitem>
<listitem>
<para>Architecture: amd64 </para>
</listitem>
<listitem>
<para>Ethernet: 3 Gigabit Ethernet ports </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: 1 m-SATA and 1 SATA </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: No </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
<listitem>
<para>Boot firmware: <ulink url="http://www.pcengines.ch/apu1d.htm">Coreboot</ulink> </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<para>None </para>
</section>
</section>
<section>
<title>pcDuino3</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="310" fileref="https://wiki.debian.org/FreedomBox/Hardware/pcDuino3?action=AttachFile&amp;do=get&amp;target=pcduino3s.jpg" width="682"/>
</imageobject>
<textobject>
<phrase>LinkSprite pcDuino3S</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="http://www.linksprite.com/linksprite-pcduino3s/">LinkSprite pcDuino3S</ulink> is a single board computer running on Allwinner A20 and sold with a good case. FreedomBox images are built and tested for this device for images built after June 2017. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para>Note: The FreedomBox logo is simply a sticker on top of device brought from store. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Similar Hardware</title>
<para>Although untested, the following similar hardware is also likely to work well with FreedomBox. </para>
<itemizedlist>
<listitem>
<para>
<ulink url="http://www.linksprite.com/linksprite-pcduino3/pcDuino3"/>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.linksprite.com/linksprite-pcduino3/pcDuino3B"/>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Download</title>
<para>FreedomBox disk <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card, USB disk, SSD or hard drive and boot into FreedomBox. Pick the image meant for pcduino3. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/Allwinner#">install Debian</ulink> on the APU and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 89 USD </para>
</listitem>
<listitem>
<para>
<ulink url="http://store.linksprite.com/pcduino3s-a20-single-board-computer-no-power-supply-or-hdmi-cable/">LinkSprite</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.linksprite.com/buy-2/">Full list of suppliers</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: AllWinner A20 SoC, 1GHz ARM Cortex A7 Dual Core </para>
</listitem>
<listitem>
<para>RAM: 1 GB </para>
</listitem>
<listitem>
<para>Storage: SD card, 4 GB onboard flash </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100 Mbps </para>
</listitem>
<listitem>
<para>WiFi: Built-in <ulink url="https://wiki.debian.org/FreedomBox/Manual/WiFi#">WiFi</ulink> requires non-free firmware, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> instead </para>
</listitem>
<listitem>
<para>SATA: 1 SATA host socket </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: No </para>
</listitem>
<listitem>
<para>WiFi: Requires non-free firmware </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
<listitem>
<para>Boot Firmware: <ulink url="https://linux-sunxi.org/BROM">BROM</ulink> (GPLV2+) </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<para>None </para>
</section>
</section>
<section>
<title>VirtualBox</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="475" fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=virtualbox.png" width="726"/>
</imageobject>
<textobject>
<phrase>VirtualBox</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>This page will help you get started with using FreedomBox on a <ulink url="https://en.wikipedia.org/wiki/Virtual_machine">virtual machine</ulink> using <ulink url="https://wiki.debian.org/FreedomBox/Manual/VirtualBox#">VirtualBox</ulink>. While VirtualBox images are primarily used for testing and development, they can also be used for regular use if you have spare resources on one of your machines. This setup is useful if: </para>
<itemizedlist>
<listitem>
<para>You don't own one of the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware#">supported hardware</ulink> devices. </para>
</listitem>
<listitem>
<para>You don't use Debian GNU/Linux as your operating system. </para>
</listitem>
<listitem>
<para>You don't want to disturb your Debian installation to try out FreedomBox. </para>
</listitem>
</itemizedlist>
<para>Prebuilt FreedomBox images for VirtualBox are routinely made available in <ulink url="https://wiki.debian.org/FreedomBox/Manual/VirtualBox#">VirtualBox</ulink>'s own <ulink url="https://www.virtualbox.org/manual/ch05.html#vdidetails">VDI image file format</ulink>. They contain a Debian GNU/Linux operating system and an installation of FreedomBox with all dependencies ready to run on any OS supported by VirtualBox (Windows, Linux, Macintosh, and Solaris). </para>
<para>A more adventurous alternative to downloading one of these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn#">install Debian</ulink> on VirtualBox and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/VirtualBox#">VirtualBox</ulink> itself is available from <ulink url="https://www.virtualbox.org/"/> (or your distribution's package manager). </para>
<section>
<title>Download</title>
<para>Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to download and verify a VirtualBox image. The latest images are available on <ulink url="https://freedombox.org/download/">freedombox.org</ulink>. </para>
</section>
<section>
<title>Creating a Virtual Machine</title>
<orderedlist numeration="arabic">
<listitem>
<para>Decompress the downloaded VDI image (tool for <ulink url="http://www.7-zip.org/">Windows</ulink>, <ulink url="http://unarchiver.c3.cx/unarchiver">Mac</ulink>). </para>
</listitem>
<listitem>
<para>Create a new VM in the VirtualBox UI with OS type <emphasis>Linux</emphasis> and Version <emphasis>Debian</emphasis> (32/64-bit according to the downloaded image). </para>
</listitem>
</orderedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=virtualbox_os_type.png"/>
</imageobject>
<textobject>
<phrase>VirtualBox Name and OS dialog</phrase>
</textobject>
</inlinemediaobject>
</para>
<orderedlist numeration="arabic">
<listitem>
<para>In the <emphasis>Hard disk</emphasis> dialog choose <emphasis>Use an existing virtual hard disk file</emphasis> and select the .vdi file you extracted in step 1. </para>
</listitem>
</orderedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=virtualbox_harddisk_file.png"/>
</imageobject>
<textobject>
<phrase>VirtualBox Hard disk dialog</phrase>
</textobject>
</inlinemediaobject>
</para>
<orderedlist numeration="arabic">
<listitem>
<para>When created, go to the virtual machine's Settings -&gt; [Network] -&gt; [Adapter 1]-&gt;[Attached to:] and choose the network type your want the machine to use according to the explanation in Network Configuration below. The recommended type is the <emphasis>Bridged adapter</emphasis> option, but be aware that this exposes the FreedomBox's services to your entire local network. </para>
</listitem>
</orderedlist>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=virtualbox_network_type.png"/>
</imageobject>
<textobject>
<phrase>VirtualBox recommended network setting</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><emphasis role="strong">Note:</emphasis> It is important to make sure that you have provided the correct network interface in the above step. For example, if the virtual machine is running on a laptop connected to a Wi-Fi network, then the wireless interface (starts with <emphasis>wlp</emphasis>) must be chosen as shown in the screenshot. </para>
</section>
<section>
<title>First Boot</title>
<para>When satisfied with the VM settings click the start button in the VirtualBox UI and your new FreedomBox will boot. </para>
<para>The console of the VM will show the textual screen below when finished booting, from here most interaction with FreedomBox will be through the web interface (aka. <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth#">Plinth</ulink>) in a browser. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=virtualbox_console_after_boot.png"/>
</imageobject>
<textobject>
<phrase>FreedomBox console after booting successfully</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>If everything went well so far, you should be able to access the web interface of FreedomBox by pointing a browser on the host machine to <ulink url="https://freedombox.local"/>. </para>
<para>In case freedombox.local cannot be resolved, you need to find out your FreedomBox's IP address as described in <link linkend="finding-ip-address-of-vm">Finding out the IP address of the virtual machine</link>. Then access this IP from a web browser which is on the same network as the VM (f.ex. the host). If all is well, you are now presented with a welcome message and invited to complete the <emphasis>first boot</emphasis> process. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Hardware/VirtualBox?action=AttachFile&amp;do=get&amp;target=plinth_first_boot.png"/>
</imageobject>
<textobject>
<phrase>FreedomBox welcomes you to the first boot</phrase>
</textobject>
</inlinemediaobject>
</para>
<para>This mainly consist of creating an administrative user for the system. </para>
</section>
<section>
<title>Using</title>
<para>See the FreedomBox <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Use#">usage</ulink> page for more details. </para>
<para>You can log in to the Debian GNU/Linux system as the user created during Plinth first boot on the VirtualBox console or remotely via ssh. </para>
<para>After logging in, you can become root with the command <code>sudo su</code>. </para>
</section>
<section>
<title>Build Image</title>
<para>If you wish to build your own images instead of downloading available images, it can be done using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Tips &amp; Troubleshooting</title>
<section>
<title>Network Configuration</title>
<para>VirtualBox provides many types of networking options. Each has its advantages and disadvantages. For more information about how various networking types work in VirtualBox, see VirtualBox's networking documentation. <ulink url="https://www.virtualbox.org/manual/ch06.html"/> </para>
<para>For a simple setup, it is recommended that you use a single network interface in your guest machine. This will make the first boot script automatically configure that interface as an <code>internal</code> network with <code>automatic</code> network configuration. Inside the guest machine, the networking is configured automatically and all the services are made available on this network interface. For more information on how networks are configured by default in FreedomBox, see <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Networks#">Networks</ulink> section. </para>
<para>What remains is to make those services available to the host machine or to other machines in the network. You must then choose one of the following types of networking for the network interface on your guest machine. To set a particular type of network for the guest's network adapter, go to the guest VM's settings then the network options and then select the adapter you wish to configure. There, set the network type from the available list of networks. </para>
<orderedlist numeration="arabic">
<listitem>
<para>First and the recommended option is to use the <emphasis>Bridged</emphasis> type of network. This option exposes the guest machine to the same network that host network is connected to. The guest obtains network configuration information from a router or DHCP server on the network. The guest will appear as just another machine in the network. A major advantage of this of setup is that the host and all other machines in the network will be able to access the services provided by guest without requiring any further setup. The only drawback of this approach is that if the host is not connected to any network, the guest's network will remain unconfigured making it inaccessible even from the host. </para>
</listitem>
<listitem>
<para>Second method is <emphasis>Host only</emphasis> type of networking. With a guest's network interface configured in this manner, it will only be accessible from the host machine. The guest will not able access any other machine but the host, so you do not have internet access on the guest. All services on the guest are available to the host machine without any configuration such as port forwarding. </para>
</listitem>
<listitem>
<para>The third option is to use the <emphasis>NAT</emphasis> type of network. This the networking type that VirtualBox assigns to a freshly created virtual machine. This option works even when host is not connected to any network. The guest is automatically configured and is able to access the internet and local networks that host is able to connect to. However, the services provided by the guest require port forwarding configuration setup to be available outside. </para>
<para>To configure this go to VM settings -&gt; [Network] -&gt; [Adapter] -&gt; [Port Forwarding]. Map a port such as 2222 from host to guest port 22 and you will be able to ssh into FreedomBox from host machine as follows: </para>
<screen><![CDATA[ ssh -p 2222 fbx@localhost]]></screen>
<para>Map 4443 on host to 443 on the guest. This make FreedomBox HTTPS service available on host using the URL <ulink url="https://localhost:4443/"/> You will need to add a mapping for each such services from host to guest. </para>
</listitem>
<listitem>
<para>The final option is to create two network interfaces, one <emphasis>host only</emphasis> and one <emphasis>NAT</emphasis> type. This way you can access the guest without any additional configuration, and you have internet access on the guest. The guest will be invisible to any other machines on the network. </para>
</listitem>
</orderedlist>
<para>Summary of various network types: </para>
<informaltable>
<tgroup cols="6">
<colspec colname="col_0"/>
<colspec colname="col_1"/>
<colspec colname="col_2"/>
<colspec colname="col_3"/>
<colspec colname="col_4"/>
<colspec colname="col_5"/>
<tbody>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para> - </para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Guest accessible from other machines</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Guest accessible from host</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Works without port forwarding</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Works without host connected to network</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Guest has internet access</emphasis>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Bridged</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">Host only</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">NAT</emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
<row rowsep="1">
<entry colsep="1" rowsep="1">
<para>
<emphasis role="strong">NAT and Host </emphasis>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/icon-error.png" width="16"/>
</imageobject>
<textobject>
<phrase>{X}</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
<entry colsep="1" rowsep="1">
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="16" fileref="https://wiki.debian.org/htdocs/debwiki/img/checkmark.png" width="16"/>
</imageobject>
<textobject>
<phrase>(./)</phrase>
</textobject>
</inlinemediaobject>
</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<anchor id="finding-ip-address-of-vm"/>
</para>
</section>
<section>
<title>Finding out the IP address of the virtual machine</title>
<para>This depends on the network configuration you chose. With a <emphasis>bridged adapter</emphasis>, your virtual machine gets its IP address from the DHCP server of your network, most likely of your Router. You can try the first couple of IP addresses or check your router web interface for a list of connected devices. </para>
<para>If you chose <emphasis>host-only adapter</emphasis>, the IP address is assigned by the DHCP server of your VirtualBox network. In the VirtualBox Manager, go to File -&gt; Preferences -&gt; Network -&gt; Host-only Networks. You can see and edit the DHCP address range there, typically you get assigned addresses close to the <emphasis>Lower Address Bound</emphasis>. </para>
<para>Another possibility of finding the IP address is to login via the Virtualbox Manager (or similar software). The FreedomBox images do not have any default user accounts, so you need to set an initial user and password using the <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker/blob/master/bin/passwd-in-image">passwd-in-image script</ulink>. </para>
<para>See also <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/QuickStart#">QuickStart</ulink> for instructions on how to scan your network to discover the IP of the VM. </para>
</section>
<section>
<title>Networking Problems with macchanger</title>
<para>The package <code>macchanger</code> can cause network problems with VirtualBox. If you have a valid IP address on your guest's host network adapter (like 192.168.56.101) but are not able to ping or access the host (like 192.168.56.1), try uninstalling <code>macchanger</code>: </para>
<screen><![CDATA[$ dpkg --ignore-depends=freedombox-setup --remove macchanger ]]></screen>
<para>You might have to manually remove the script <code>/etc/network/if-prep-up/macchanger</code>. If Debian complains about unmet dependencies when you use a package manager (apt-get, aptitude, dpkg), try to remove 'macchanger' from the dependencies of 'freedombox-setup' in the file <code>/var/lib/dpkg/status</code>. </para>
</section>
<section>
<title>Mounting Images Locally</title>
<para>If you want to mount images locally, use the following to copy built images off the VirtualBox: </para>
<screen><![CDATA[$ mkdir /tmp/vbox-img1 /tmp/vbox-root1
$ vdfuse -f freedombox-unstable_2013.0519_virtualbox-i386-hdd.vdi /tmp/vbox-img1/
$ sudo mount -o loop /tmp/vbox-img1/Partition1 /tmp/vbox-root1
$ cp /tmp/vbox-root1/home/fbx/freedom-maker/build/freedom*vdi ~/
$ sudo umount /tmp/vbox-root1
# $ sudo umount /tmp/vbox-img1 # corruption here.]]></screen>
</section>
<section>
<title>Fixing the time after suspend and resume</title>
<para>The virtual machine loses the correct time/date after suspending and resuming. One way to fix this is to create a cron-job that restarts the time service <code>ntp</code>. You can add a crontab entry as root to restart ntp every 15 minutes by typing <code>'crontab -e'</code> and adding this line: </para>
<screen><![CDATA[*/15 * * * * /etc/init.d/ntp restart]]></screen>
<para>Do not restart this service too often as this increases the load of publicly and freely available NTP servers. </para>
</section>
</section>
</section>
<section>
<title>Debian</title>
<para>FreedomBox is a <ulink url="https://wiki.debian.org/FreedomBox/Manual/DebianPureBlends#">pure blend</ulink> of Debian. This means that all the work on FreedomBox is available in Debian as packages. It also means that any machine running Debian can be turned into a FreedomBox. </para>
<para>This page describes the process of installing FreedomBox on a Debian system. Currently, FreedomBox works in Debian Stable (Stretch), Testing (Buster), and Unstable (Sid). </para>
<caution>
<para>
<emphasis role="strong">Use a fresh Debian installation</emphasis>
</para>
<para>Installing FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install FreedomBox on a fresh Debian installation instead of an existing setup. </para>
</caution>
<section>
<title>Installing on Debian</title>
<orderedlist numeration="arabic">
<listitem>
<para>Check the Troubleshooting section below, for any tips or work-arounds that might help during the install. </para>
</listitem>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn#">Install Debian</ulink> Stable (Stretch), Testing (Buster), or Unstable (Sid) on your hardware. </para>
</listitem>
<listitem>
<para>Update your package list. </para>
<screen><![CDATA[$ sudo apt-get update]]></screen>
</listitem>
<listitem>
<para>Install <code>freedombox-setup</code> package. </para>
<screen><![CDATA[$ sudo DEBIAN_FRONTEND=noninteractive apt-get install freedombox-setup]]></screen>
<itemizedlist>
<listitem>
<para>The "DEBIAN_FRONTEND=noninteractive" will avoid several configuration prompts that would otherwise appear during the install. </para>
</listitem>
<listitem>
<para><emphasis role="strong">Note:</emphasis> If you are using Debian Buster or later, then the steps below (running setup script and rebooting) do not apply. You can jump to <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Use#">using</ulink> FreedomBox. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Run FreedomBox setup program. This installs further packages and sets up basic configuration. </para>
<screen><![CDATA[$ sudo /usr/lib/freedombox/setup | tee freedombox-setup.log]]></screen>
<para>You may have to clear your existing network configuration. See Troubleshooting note #2 below. </para>
</listitem>
<listitem>
<para>Reboot the system. This is necessary to trigger the first-run script. </para>
<screen><![CDATA[$ sudo reboot]]></screen>
</listitem>
<listitem>
<para>After the system boots up, wait for it to reboot again. The first-run scripts sets up a few things and initiates a reboot. </para>
</listitem>
<listitem>
<para>After the second reboot you can start <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Use#">using</ulink> FreedomBox. </para>
</listitem>
</orderedlist>
</section>
<section>
<title>Troubleshooting</title>
<orderedlist numeration="arabic">
<listitem>
<para>There is a <ulink url="https://bugs.debian.org/797368">bug</ulink> in policykit-1 package that causes errors and hangs during installation of freedombox-setup package. A workaround is to first install policykit-1 package and then reboot. After that, follow the above setup procedure. </para>
<screen><![CDATA[$ sudo apt-get update
$ sudo apt-get install policykit-1
$ sudo reboot]]></screen>
</listitem>
<listitem>
<para>Freedombox does not support network device configuration via <code>/etc/network/interfaces</code>, and it will not manage any non-loopback interfaces mentioned there. (See <ulink url="https://bugs.debian.org/797614">bug #797614</ulink>.) Future versions of freedombox-setup will clear this file automatically; for now, edit it manually and ensure that it contains only the following: </para>
<screen><![CDATA[auto lo
iface lo inet loopback]]></screen>
<para>If you have already completed the setup process without doing this step, you will need to clear out the <code>/etc/network/interfaces</code> file keeping only the above lines. Then perform a reboot. After this network connections configured by the <code>setup</code> step above will configure your network. Network interfaces will then be in the <code>internal</code> or <code>external</code> firewall zone. This is essential for the FreedomBox's web interface to be reachable from other machines in the network. You can tweak network manager connections with the <code>nmtui</code> command if you wish. </para>
</listitem>
<listitem>
<para>Freedombox-setup will not set up a static IP, and if you set one up during your Debian install, it will clobber it. After you have run the setup, you will need to re-configure the network. For ipv4 addresses, use: </para>
<screen><![CDATA[ nmcli con mod "Ethernet connection 1" \
ipv4.addresses A.A.A.A/X \
ipv4.gateway G.G.G.G \
ipv4.dns N.N.N.N \
ipv4.dns-search somedomain.com \
ipv4.method "manual" \
ipv4.ignore-auto-dns yes \
ipv6.method ignore]]></screen>
</listitem>
</orderedlist>
<para>...with the block capitals and somedomain.com replaced with your actual address, mask description, gateway and dns server details. </para>
</section>
</section>
<section>
<title>DreamPlug</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="425" fileref="https://wiki.debian.org/FreedomBox/Hardware/DreamPlug?action=AttachFile&amp;do=get&amp;target=dreamplug.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>DreamPlug</phrase>
</textobject>
</inlinemediaobject>
</para>
<caution>
<para>
<emphasis role="strong">Deprecated Hardware</emphasis>
</para>
<para>This hardware was supported earlier but is no longer supported. If you downloaded an earlier image and are running FreedomBox on this hardware, you will keep getting software updates. You can stay secure and up-to-date. However, no new images will be provided for this hardware. It is recommended that you migrate to newer, supported hardware using backup and restore. </para>
</caution>
<para><ulink url="https://www.globalscaletechnologies.com/t-dreamplugdetails.aspx">DreamPlug</ulink> is the hardware for which FreedomBox has been originally targeted. FreedomBox images are built and tested for it. For using this device as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para>You can find more support and discussion for DreamPlug on the <ulink url="http://www.plugcomputer.org/plugforum/">official forum</ulink>. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot into FreedomBox. See also instructions for using an <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/DreamPlug/InternalMicroSD#">internal micro-SD</ulink> with DreamPlug. </para>
<para>An alternative to downloading these images is to <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/DreamPlug#">install Debian</ulink> on DreamPlug and then <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">install FreedomBox</ulink> on it. </para>
</section>
<section>
<title>Networking</title>
<para>The network port towards the middle of the box, is configured by FreedomBox to be an upstream Internet link. The remaining port is configured for a local computer to connect to. </para>
</section>
<section>
<title>Firmware</title>
<para>Note that the factory firmware configurations may vary between revisions of the hardware, and render some images incompatible. See the DreamPlug <ulink url="https://wiki.debian.org/FreedomBox/Manual/InstallingDebianOn/DreamPlug/U-bootUpgradeFromUSB#">firmware</ulink> page for information on what images are compatible and how to update your DreamPlug firmware. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Testing</title>
<para>Instructions on how to <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/DreamPlug/Testing#">test</ulink> this hardware are available. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 159 USD </para>
</listitem>
<listitem>
<para>
<ulink url="http://www.globalscaletechnologies.com/p-54-dreamplug-devkit.aspx">DreamPlug manufacturer</ulink>
</para>
</listitem>
<listitem>
<para>Reseller <ulink url="http://www.spinifex.com.au/shop/">Spinifex</ulink> in Australia </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: Marvell Kirkwood 88F6281 @ 1.2GHz </para>
</listitem>
<listitem>
<para>RAM: 512MB 16bit DDR2-800 MHz </para>
</listitem>
<listitem>
<para>Storage: 4 GB on board micro-SD </para>
</listitem>
<listitem>
<para>Architecture: armel </para>
</listitem>
<listitem>
<para>Ethernet: 2x 10/100/1000, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: <ulink url="https://origin-www.marvell.com/wireless/assets/8787.pdf">SD8787</ulink>, 802.11 b/g/n </para>
</listitem>
<listitem>
<para>SATA: eSATA 2.0 port </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: built-in WiFi </para>
</listitem>
<listitem>
<para>WiFi: no free WiFi drivers + firmware available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: yes </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>WiFi does not work with free software. A separate <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> is recommended. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Raspberry Pi Model B+</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="429" fileref="https://wiki.debian.org/FreedomBox/Hardware/RaspberryPi?action=AttachFile&amp;do=get&amp;target=raspberrypi.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi (Model B+)</phrase>
</textobject>
</inlinemediaobject>
</para>
<caution>
<para>
<emphasis role="strong">Deprecated Hardware</emphasis>
</para>
<para>This hardware was supported earlier but is no longer supported. If you downloaded an earlier image and are running FreedomBox on this hardware, you will keep getting software updates. You can stay secure and up-to-date. However, no new images will be provided for this hardware. It is recommended that you migrate to newer, supported hardware using backup and restore. </para>
</caution>
<para><ulink url="http://www.raspberrypi.org/products/model-b-plus/">Raspberry Pi</ulink> (Model B+) is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. FreedomBox images are built and tested for it. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para><emphasis>Note:</emphasis> The Debian architecture used for this device is <code>armel</code>. This means floating point computations are done in software and most operations are slower than what Raspberry Pi is capable of. </para>
<para><emphasis role="strong">Recommendation:</emphasis> When you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot into FreedomBox. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 35 USD </para>
</listitem>
<listitem>
<para>
<ulink url="http://www.raspberrypi.org/products/model-b-plus/">List of official distributors</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: ARM1176JZF-S (ARMv6k) 700 MHz </para>
</listitem>
<listitem>
<para>RAM: 512 MB </para>
</listitem>
<listitem>
<para>Storage: MicroSD card slot </para>
</listitem>
<listitem>
<para>Architecture: armel </para>
</listitem>
<listitem>
<para>Ethernet: 10/100, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: None </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: boot firmware </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: No </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Known Issues</title>
<itemizedlist>
<listitem>
<para>The Debian architecture used for this device is <code>armel</code>. This means floating point computations are done in software and generally most operations are slower than what Raspberry Pi is capable of. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Raspberry Pi 2 Model B</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="428" fileref="https://wiki.debian.org/FreedomBox/Hardware/RaspberryPi2?action=AttachFile&amp;do=get&amp;target=raspberrypi2.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 2</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="https://www.raspberrypi.org/products/raspberry-pi-2-model-b/">Raspberry Pi 2</ulink> (Model B ) is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. It is a successor to Raspberry Pi Model B+ with much faster processor and more RAM. FreedomBox images are built and tested for it. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> that does not require non-free firmware is recommended. </para>
<para>Please do not expect any output on a monitor connected via HDMI to this device as it does not display anything beyond the message 'Starting kernel...'. See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/QuickStart#">Quick Start page</ulink> to access and control your FreedomBox from network. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot into FreedomBox. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 35 USD </para>
</listitem>
<listitem>
<para>
<ulink url="https://www.raspberrypi.org/products/raspberry-pi-2-model-b/">List of official distributors</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: 900 MHz quad-core ARM Cortex-A7 </para>
</listitem>
<listitem>
<para>RAM: 1 GB </para>
</listitem>
<listitem>
<para>Storage: MicroSD card slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: None, use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: None </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: boot firmware </para>
</listitem>
<listitem>
<para>WiFi: Not available </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Raspberry Pi 3 Model B</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="421" fileref="https://wiki.debian.org/FreedomBox/Hardware/RaspberryPi3B?action=AttachFile&amp;do=get&amp;target=raspberrypi3.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 3 Model B</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="https://www.raspberrypi.org/products/raspberry-pi-3-model-b/">Raspberry Pi 3 Model B</ulink> is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. It is a successor to Raspberry Pi 2 Model B with a 64-bit processor and on-board Wi-Fi. A FreedomBox "testing" image is available for Raspberry Pi 3 Model B. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink>, that does not require non-free firmware, is recommended instead of the on-board Wi-Fi. </para>
<para>Please do not expect any output on a monitor connected via HDMI to this device as it does not display anything beyond the message 'Starting kernel...'. See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/QuickStart#">Quick Start page</ulink> to access and control your FreedomBox from network. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Download the "testing" image for Raspberry Pi 3 Model B. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot into FreedomBox. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. Use the target 'raspberry3' with distribution 'testing' to build the image for this board. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 35 USD </para>
</listitem>
<listitem>
<para>
<ulink url="https://www.raspberrypi.org/products/raspberry-pi-3-model-b/">List of official distributors</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: 1.2GHz 64-bit quad-core ARMv8 CPU </para>
</listitem>
<listitem>
<para>RAM: 1 GB </para>
</listitem>
<listitem>
<para>Storage: MicroSD card slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: 802.11n but requires non-free firmware, instead use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: None </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: boot firmware </para>
</listitem>
<listitem>
<para>WiFi: Requires non-free firmware </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Raspberry Pi 3 Model B+</title>
<para>
<inlinemediaobject>
<imageobject>
<imagedata depth="418" fileref="https://wiki.debian.org/FreedomBox/Hardware/RaspberryPi3B+?action=AttachFile&amp;do=get&amp;target=raspberrypi3bplus.jpg" width="640"/>
</imageobject>
<textobject>
<phrase>Raspberry Pi 3 Model B+</phrase>
</textobject>
</inlinemediaobject>
</para>
<para><ulink url="https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/">Raspberry Pi 3 Model B+</ulink> is a popular single board computer developed with the intention of promoting teaching of basic computer science in schools. It is a successor to Raspberry Pi 3 Model B with better Ethernet and a 5Ghz Wi-Fi. A FreedomBox "testing" image is available for Raspberry Pi 3 Model B+. For using this board as FreedomBox, a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink>, that does not require non-free firmware, is recommended instead of the on-board Wi-Fi. </para>
<para>Please do not expect any output on a monitor connected via HDMI to this device as it does not display anything beyond the message 'Starting kernel...'. See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/QuickStart#">Quick Start page</ulink> to access and control your FreedomBox from network. </para>
<para><emphasis role="strong">Recommendation:</emphasis> If you are using a board that uses SD cards, when you flash the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> image onto your SD card, we recommend that you use an SD card with at least 8GB of storage space. </para>
<section>
<title>Download</title>
<para>FreedomBox SD card <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">images</ulink> for this hardware are available. Download the "testing" image for Raspberry Pi 3 Model B+. Follow the instructions on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> page to create a FreedomBox SD card and boot into FreedomBox. </para>
</section>
<section>
<title>Build Image</title>
<para>FreedomBox images for this hardware can be built using <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>. Use the target 'raspberry3-b-plus' with distribution 'testing' to build the image for this board. </para>
</section>
<section>
<title>Availability</title>
<itemizedlist>
<listitem>
<para>Price: 35 USD </para>
</listitem>
<listitem>
<para>
<ulink url="https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/">List of official distributors</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Hardware</title>
<itemizedlist>
<listitem>
<para>Open Hardware: No </para>
</listitem>
<listitem>
<para>CPU: 1.4GHz 64-bit quad-core ARMv8 CPU </para>
</listitem>
<listitem>
<para>RAM: 1 GB </para>
</listitem>
<listitem>
<para>Storage: MicroSD card slot </para>
</listitem>
<listitem>
<para>Architecture: armhf </para>
</listitem>
<listitem>
<para>Ethernet: 10/100/1000, RJ45 </para>
</listitem>
<listitem>
<para>WiFi: 802.11ac but requires non-free firmware, instead use a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/USBWiFi#">USB WiFi device</ulink> </para>
</listitem>
<listitem>
<para>SATA: None </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Non-Free Status</title>
<itemizedlist>
<listitem>
<para>Non-free blobs required: boot firmware </para>
</listitem>
<listitem>
<para>WiFi: Requires non-free firmware </para>
</listitem>
<listitem>
<para>Works with stock Debian kernel: Yes </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>USB Wi-Fi</title>
<para>FreedomBox works on many single board computers. However, many of these boards do not have built-in Wi-Fi capabilities. Even when Wi-Fi capability is available, non-free proprietary firmware is required to make them work. </para>
<para>A solution to the problem is to plug-in a USB Wi-Fi device into one of the available USB ports. There are many such devices available which do not require non-free firmware to work. The following is a list of such devices that work with FreedomBox devices. Some devices based on these chips have tested to work well with FreedomBox including functions such as access point mode. </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://wikidevi.com/wiki/AR7010">Devices with Atheros AR7010 chip</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wikidevi.com/wiki/AR9271">Devices with Atheros AR9271 chip</ulink>
</para>
</listitem>
</itemizedlist>
<section>
<title>Firmware Installation</title>
<para>The free firmware for these devices is not packaged in Debian yet. You can manually download and install the firmware as follows: </para>
<screen><![CDATA[sudo su [enter password]
cd /lib/firmware
wget https://www.thinkpenguin.com/files/ath9k-htc/version-1.4-beta/htc_9271.fw
wget https://www.thinkpenguin.com/files/ath9k_firmware_free-version/htc_7010.fw]]></screen>
</section>
<section>
<title>Resources</title>
<itemizedlist>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/WiFi#USB_Devices">Debian Wiki on WiFi drivers</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Comparison_of_open-source_wireless_drivers#Linux_drivers_for_802.11_.22wireless.22">Wikipedia: Comparison of open-source Linux wireless network drivers</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wikidevi.com/wiki/Main_Page">WikiDevi: database of computer hardware</ulink>
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Release Notes</title>
<para>The following are the release notes for each FreedomBox version. </para>
<section>
<title>Version 0.47.0 (2019-01-14)</title>
<itemizedlist>
<listitem>
<para>Show Gujarati in the list of languages. </para>
</listitem>
<listitem>
<para>Replace glyphicons with forkawesome icons. </para>
</listitem>
<listitem>
<para>Snapshots: </para>
<itemizedlist>
<listitem>
<para>Change configuration to avoid filling up disk. </para>
</listitem>
<listitem>
<para>Handle "Config in use" error. </para>
</listitem>
<listitem>
<para>Update descriptions and configuration options. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Firewall: Fix issue with transition from iptables. </para>
</listitem>
<listitem>
<para>Security: Switch to Argon2 password hash. </para>
</listitem>
<listitem>
<para>Cockpit: Add link to manual page and update description. </para>
</listitem>
<listitem>
<para>Radicale: Add initial support for radicale 2.x. </para>
</listitem>
<listitem>
<para>Setup: </para>
<itemizedlist>
<listitem>
<para>Handle showing setup page after app completes installation. </para>
</listitem>
<listitem>
<para>Optimize installation in-progress checks and refresh time. </para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.46.0 (2018-12-31)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Czech, German, Spanish, Ukrainian, and Norwegian Bokmål. </para>
</listitem>
<listitem>
<para>Use systemd journal for logging. </para>
</listitem>
<listitem>
<para>Rename plinth binary package to "freedombox", and merge freedombox-setup package into it. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.45.0 (2018-12-17)</title>
<itemizedlist>
<listitem>
<para>Storage: Merge list of removable media into existing table. </para>
</listitem>
<listitem>
<para>Backups: Allow remote backups to SSH servers using sshfs. </para>
</listitem>
<listitem>
<para>Backups: Removed asking for backup archive name. </para>
</listitem>
<listitem>
<para>Automatically handle future versions of PHP. </para>
</listitem>
<listitem>
<para>Updated translations for Hungarian, Czech, Spanish, Chinese (Simplified), Italian, Norwegian Bokmål, French, and German. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.44.0 (2018-12-03)</title>
<itemizedlist>
<listitem>
<para>UI: Add card style and gray noise background to apps pages. </para>
</listitem>
<listitem>
<para>UI: Fix distortion of the client apps buttons. </para>
</listitem>
<listitem>
<para>ejabberd: Handle BOSH port change from TCP 5280 to 5443. </para>
</listitem>
<listitem>
<para>Minetest: Update mods list to available Debian packages. </para>
</listitem>
<listitem>
<para>Firewall: Use nftables instead of iptables. </para>
</listitem>
<listitem>
<para>Snapshots: Fix default snapshot listing. </para>
</listitem>
<listitem>
<para>Snapshots: Show description above either tab. </para>
</listitem>
<listitem>
<para>Snapshots: Allow snapshots to be selected for deletion. </para>
</listitem>
<listitem>
<para>Translations: Updated Czech, Norwegian Bokmål, Spanish, German, and Portuguese. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.43.0 (2018-11-19)</title>
<itemizedlist>
<listitem>
<para>Backups improvements: </para>
<itemizedlist>
<listitem>
<para>Allow backups to be downloaded directly, without export step. </para>
</listitem>
<listitem>
<para>Restore directly from uploaded backup. </para>
</listitem>
<listitem>
<para>Avoid error for apps with no data to backup. </para>
</listitem>
<listitem>
<para>Show free disk space on upload and restore page. </para>
</listitem>
<listitem>
<para>Do not limit maximum upload size. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>openvpn: Migrate to easy-rsa 3 and fix setup issues. </para>
</listitem>
<listitem>
<para>Make single sign-on tickets valid for 12 hours. </para>
</listitem>
<listitem>
<para>Use consistent terminology for updates. </para>
</listitem>
<listitem>
<para>Updated translations for Czech and Portuguese. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.42.0 (2018-11-05)</title>
<itemizedlist>
<listitem>
<para>Fix wrong color in mobile menu </para>
</listitem>
<listitem>
<para>snapshot: Fix broken snapshot management after snapper update </para>
</listitem>
<listitem>
<para>Enable backup/restore for tor, upgrades, monkeysphere, letsencrypt, tahoe </para>
</listitem>
<listitem>
<para>monkeysphere: Handle importing new OpenSSH format keys </para>
</listitem>
<listitem>
<para>udiskie: unmount drive as superuser </para>
</listitem>
<listitem>
<para>Updated translations for Telugu, Indonesian, and Italian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.41.0 (2018-10-22)</title>
<itemizedlist>
<listitem>
<para>Enable backup/restore for datetime, deluge, avahi, backups, bind, security, snapshot, ssh, firewall, diagnostics, names, power, and storage. </para>
</listitem>
<listitem>
<para>snapshot: Fix issue with setting configuration. </para>
</listitem>
<listitem>
<para>backups: Fix backup archives ownership issue. </para>
</listitem>
<listitem>
<para>backups: Fix issue with showing exports from disks without labels. </para>
</listitem>
<listitem>
<para>backups: Don't rely on disk labels during export/restore. </para>
</listitem>
<listitem>
<para>backups: Fix downloading extracted archive files. </para>
</listitem>
<listitem>
<para>Updated translations for Norwegian Bokmål, French, Russian, and Spanish. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.40.0 (2018-10-08)</title>
<itemizedlist>
<listitem>
<para>Backups </para>
<itemizedlist>
<listitem>
<para>Enable backup/restore for mumble, privoxy, roundcube, searx, jsxc, coquelicot, transmission, quassel, shadowsocks, sharing, pagekite, and cockpit. </para>
</listitem>
<listitem>
<para>Allow backup archives to be downloaded/uploaded through browser. </para>
</listitem>
<listitem>
<para>mediawiki: Backup/restore settings as well as data. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>User Interface </para>
<itemizedlist>
<listitem>
<para>Change card text style and position. </para>
</listitem>
<listitem>
<para>Change maximum cards per row. </para>
</listitem>
<listitem>
<para>Add tint effect on card icons under "Apps". </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>mediawiki: Run update script for 1.31 upgrade. </para>
</listitem>
<listitem>
<para>customization: Show custom shortcuts on frontpage. </para>
</listitem>
<listitem>
<para>Updated translations for Norwegian Bokmål, Portuguese, Spanish, Czech, German, French, and Italian. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.39.0 (2018-09-24)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Hungarian and Norwegian Bokmål. </para>
</listitem>
<listitem>
<para>Merge Removable Media (udiskie) into Storage module. </para>
</listitem>
<listitem>
<para>Add Backups module for backing up apps data. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.38.0 (2018-09-10)</title>
<itemizedlist>
<listitem>
<para>mediawiki: Enable SVG support for MediaWiki </para>
</listitem>
<listitem>
<para>upgrades: Clean up old kernel packages during automatic upgrades </para>
</listitem>
<listitem>
<para>Make the progress bar at the top of the page more visible. </para>
</listitem>
<listitem>
<para>Updated translations for Norwegian Bokmål, Czech, Russian, German, Hungarian, and Spanish. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.37.0 (2018-08-27)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Czech, Norwegian Bokmål, Russian, Spanish, Hungarian, and Dutch. </para>
</listitem>
<listitem>
<para>install: Use Post/Response/Get pattern for reloads. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.36.0 (2018-08-13)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Hindi, Spanish, Russian, Telugu, German, Hungarian, Czech, and French </para>
</listitem>
<listitem>
<para>ejabberd: Remove deprecated settings from already existing config files </para>
</listitem>
<listitem>
<para>mediawiki: Fix issue with re-installation </para>
</listitem>
<listitem>
<para>mediawiki: Enable Instant Commons </para>
</listitem>
<listitem>
<para>mediawiki: Fix images throwing 403s </para>
</listitem>
<listitem>
<para>turbolinks: Reload page using JavaScript </para>
</listitem>
<listitem>
<para>Add Lato woff2 fonts </para>
</listitem>
<listitem>
<para>Disable launch button for web client when not installed </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.35.0 (2018-07-30)</title>
<itemizedlist>
<listitem>
<para>configuration: Add an option to set a default app for FreedomBox. The root URL path (<code>https://domainname/</code>) will redirect to the selected app. </para>
</listitem>
<listitem>
<para>ejabberd: Remove deprecated <code>iqdisc</code> setting. To apply this fix, disable and then re-enable the Message Archive Management setting. </para>
</listitem>
<listitem>
<para>ejabberd: Replace logo with original version. </para>
</listitem>
<listitem>
<para>mediawiki: Enable short URLs, which look like <code>https://domainname/mediawiki/ArticleName</code>. </para>
</listitem>
<listitem>
<para>radicale: Clarify description for shared calendar/addressbook. </para>
</listitem>
<listitem>
<para>storage: Handle mount points with spaces. </para>
</listitem>
<listitem>
<para>udiskie: Add button to eject drives. </para>
</listitem>
<listitem>
<para>udiskie: Also show read-only filesystems. </para>
</listitem>
<listitem>
<para>udiskie: Remove internal networks warning. </para>
</listitem>
<listitem>
<para>udiskie: Show special message when no storage device available. </para>
</listitem>
<listitem>
<para>Add turbolinks library for smoother navigation. </para>
</listitem>
<listitem>
<para>Removed extra text from icons for mediawiki, radicale, and tahoe-lafs. </para>
</listitem>
<listitem>
<para>Updated translations for Russian, Spanish, Dutch, Hungarian, Hindi, Italian, Telugu, German, and Norwegian Bokmål. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.34.0 (2018-07-16)</title>
<itemizedlist>
<listitem>
<para>Prompt for secret during firstboot welcome </para>
<itemizedlist>
<listitem>
<para>(Does not apply to downloadable FreedomBox images, but only when installed using freedombox-setup package.) </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Updated translations for Italian, Dutch, Hindi, Hungarian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.33.1 (2018-07-04)</title>
<itemizedlist>
<listitem>
<para>Fix issue where editing a user would remove them from admin group </para>
</listitem>
<listitem>
<para>Updated translations for Hungarian, Czech, Spanish, Russian, Hindi </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.33.0 (2018-07-02)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Hungarian, Norwegian Bokmål, Spanish, Russian, Czech, Hindi, Dutch, Italian </para>
</listitem>
<listitem>
<para>firewall: Display information that a service is internal only </para>
</listitem>
<listitem>
<para>users: Don't show Create User link to non-admin users </para>
</listitem>
<listitem>
<para>users: Redirect to users list on successful user creation </para>
</listitem>
<listitem>
<para>packages: Show button to refresh package lists when a package is not available for install </para>
</listitem>
<listitem>
<para>Only show front page shortcuts that a user is allowed to access </para>
</listitem>
<listitem>
<para>Restrict removal of last admin user </para>
</listitem>
<listitem>
<para>Use logos instead of icons in the apps page </para>
</listitem>
<listitem>
<para>udiskie: New module for automatic mounting of removable media </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.32.0 (2018-06-18)</title>
<itemizedlist>
<listitem>
<para>Apply new card based design </para>
</listitem>
<listitem>
<para>Fix client info table size and flickering </para>
</listitem>
<listitem>
<para>first-setup: Automatically expand root partition </para>
</listitem>
<listitem>
<para>mediawiki: Enable image uploads </para>
</listitem>
<listitem>
<para>mediawiki: Make private mode and public registrations mutually exclusive </para>
</listitem>
<listitem>
<para>mediawiki: Hide frontpage shortcut when private mode is enabled </para>
</listitem>
<listitem>
<para>Updated translations for Norwegian Bokmål, Czech, Spanish, Russian, Hindi, Telugu, Italian, Dutch, German, and Hungarian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.31.0 (2018-06-04)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Czech, Spanish, Russian, German, Italian, Hindi, Telugu, and Norwegian Bokmål </para>
</listitem>
<listitem>
<para>mediawiki: Added private mode option </para>
</listitem>
<listitem>
<para>users: Fix user permissions not being saved </para>
</listitem>
<listitem>
<para>users: internationalize a string </para>
</listitem>
<listitem>
<para>mediawiki: Run update script for 1.30 upgrade </para>
</listitem>
<listitem>
<para>shortcuts: Fix urls for ikiwiki shortcuts </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.30.0 (2018-05-21)</title>
<itemizedlist>
<listitem>
<para>Updated translations for Russian, Italian, Norwegian Bokmål, Hungarian, and Hindi </para>
</listitem>
<listitem>
<para>setup: Remove unavailable as a state in setup_helper </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.29.1 (2018-05-08)</title>
<itemizedlist>
<listitem>
<para>security: Fix issue with Plinth locked out from sudo </para>
</listitem>
<listitem>
<para>Updated translations for Czech and Spanish </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.29.0 (2018-05-07)</title>
<itemizedlist>
<listitem>
<para>security: Allow console login access to user plinth </para>
</listitem>
<listitem>
<para>Add an option to enable/disable public registrations in mediawiki </para>
</listitem>
<listitem>
<para>tt-rss: Skip the check for SELF_URL_PATH </para>
</listitem>
<listitem>
<para>searx: Fix issue with uwsgi crashing </para>
</listitem>
<listitem>
<para>Updated translations for Czech, Spanish, German, Norwegian Bokmål, and Italian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.28.0 (2018-04-23)</title>
<itemizedlist>
<listitem>
<para>setup: disable install button for currently unavailable apps </para>
</listitem>
<listitem>
<para>Add locale for Lithuanian (lt) </para>
</listitem>
<listitem>
<para>Translation updates for Italian, Czech, Russian, Spanish, German, Norwegian Bokmål, Telugu, and Dutch </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.27.0 (2018-04-09)</title>
<itemizedlist>
<listitem>
<para>middleware: Skip 'installed' message for essential apps </para>
</listitem>
<listitem>
<para>users: Fix admin group appearing twice in permissions </para>
</listitem>
<listitem>
<para>apps: Fix app names and short descriptions not being translated </para>
</listitem>
<listitem>
<para>snapshots: Move manual page link to the index page </para>
</listitem>
<listitem>
<para>UI: Fix progress bar not appearing </para>
</listitem>
<listitem>
<para>snapshots: Fix for permissions issue when updating configuration </para>
</listitem>
<listitem>
<para>snapshots: Add option to enable/diable software installation snapshots </para>
</listitem>
<listitem>
<para>Translation updates for Italian, Czech, Russian, Spanish, Dutch, German, Norwegian Bokmål, and Ukrainian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.26.0 (2018-03-26)</title>
<itemizedlist>
<listitem>
<para>snapshots: Update description </para>
</listitem>
<listitem>
<para>searx: Rewrite url from /searx to /searx/ </para>
</listitem>
<listitem>
<para>manual: Link to manual from each service </para>
</listitem>
<listitem>
<para>Workaround security issues in django-axes </para>
</listitem>
<listitem>
<para>apache: Only regenerate snake oil cert when needed </para>
</listitem>
<listitem>
<para>apache: Explicitly enable the latest version of PHP module </para>
</listitem>
<listitem>
<para>apache: Increase module version number to fix php7.2 </para>
</listitem>
<listitem>
<para>Update translations for Chinese (Simplified), Russian, Czech, German, Norwegian Bokmål, Hungarian, Spanish, and Italian </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.25.0 (2018-03-12)</title>
<itemizedlist>
<listitem>
<para>sharing: Add app for sharing disk folders. </para>
</listitem>
<listitem>
<para>ttrss: Update list of client apps. </para>
</listitem>
<listitem>
<para>infinoted: Allow setup to recover after timeout issue. </para>
</listitem>
<listitem>
<para>snapshots: Add configuration tab with settings for time-based snapshots. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.24.0 (2018-02-26)</title>
<itemizedlist>
<listitem>
<para>Add file-sharing application Coquelicot. </para>
</listitem>
<listitem>
<para>Add metasearch engine application Searx. </para>
</listitem>
<listitem>
<para>Add locale for Hungarian (hu). </para>
</listitem>
<listitem>
<para>mediawiki: Allow shortcut to be publicly visible on front page. </para>
</listitem>
<listitem>
<para>clients: Add and correct Client Apps. </para>
</listitem>
<listitem>
<para>locale: Preferred language can be set in each user's profile. </para>
</listitem>
<listitem>
<para>locale: Anonymous users can select preferred language. </para>
</listitem>
<listitem>
<para>config: Remove language selection from config page. </para>
</listitem>
<listitem>
<para>matrixsynapse: Fix mail attribute for ldap login. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.23.0 (2018-02-12)</title>
<itemizedlist>
<listitem>
<para>snapshots: Modify configurations to reduce disk usage. </para>
</listitem>
<listitem>
<para>snapshots: Skip currently active snapshot when deleting all snapshots. </para>
</listitem>
<listitem>
<para>jsxc: Use consistent url format. </para>
</listitem>
<listitem>
<para>sso: Increase timeout to 60 minutes. </para>
</listitem>
<listitem>
<para>theme: Change font from Helvetica to Lato. </para>
</listitem>
<listitem>
<para>Translation updates for Czech, German, Gujarati, and Telugu. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.22.0 (2018-01-30)</title>
<itemizedlist>
<listitem>
<para>matrix-synapse: Make sure configuration file does not get corrupted. </para>
</listitem>
<listitem>
<para>tor: Show enabled status properly. </para>
</listitem>
<listitem>
<para>first_setup: Fix not showing admin user creation step. </para>
</listitem>
<listitem>
<para>Migrate from GitHub to Salsa </para>
</listitem>
<listitem>
<para>Migrate from CirceCI to GitLab CI on Salsa. </para>
</listitem>
<listitem>
<para>Translation updates for Czech, Dutch, Gujarati, Hindi, Russian and Telugu. </para>
</listitem>
<listitem>
<para>Started new translation for Ukrainian. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.21.0 (2018-01-15)</title>
<itemizedlist>
<listitem>
<para>navigation bar: Change label from 'Configuration' to 'System'. </para>
</listitem>
<listitem>
<para>storage: Removed beta warning for expanding partition. </para>
</listitem>
<listitem>
<para>groups: Consistently show available user groups, even before applications are installed. </para>
</listitem>
<listitem>
<para>syncthing: Restrict administration to users in "syncthing" group. </para>
</listitem>
<listitem>
<para>help: Show menu on smaller screens also. </para>
</listitem>
<listitem>
<para>diagnostics: Enable the "Run Diagnostics" button when applications are enabled but not running. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.20.0 (2018-01-01)</title>
<itemizedlist>
<listitem>
<para>bind: Don't use forwarders by default </para>
</listitem>
<listitem>
<para>ejabberd: Remove redundant button Client Apps </para>
</listitem>
<listitem>
<para>mediawiki: Add wiki application </para>
</listitem>
<listitem>
<para>users: Make sure first run actually works </para>
</listitem>
<listitem>
<para>bind: Add information about current utility </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.19.0 (2017-12-18)</title>
<itemizedlist>
<listitem>
<para>ejabberd: Use dynamic reload instead of restart when changing configuration. </para>
</listitem>
<listitem>
<para>manual: Make manual available as a PDF download. </para>
</listitem>
<listitem>
<para>minetest: Show domain information for users to connect to minetest. </para>
</listitem>
<listitem>
<para>snapshots: Add button to delete all snapshots. </para>
</listitem>
<listitem>
<para>snapshots: Add option to enable/disable automatic timeline snapshots. </para>
</listitem>
<listitem>
<para>users: Add groups for bit-torrent and feed-reader, available when these applications are installed. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.18.0 (2017-12-04)</title>
<itemizedlist>
<listitem>
<para>Add Shadowsocks client with socks5 proxy. </para>
</listitem>
<listitem>
<para>Fix SSO regressions and conflict with captcha. </para>
</listitem>
<listitem>
<para>transmission: Fix sso not being enabled on upgrade. </para>
</listitem>
<listitem>
<para>avahi: Add service for FreedomBox discovery. </para>
</listitem>
<listitem>
<para>Add client information for modules. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.17.0 (2017-11-20)</title>
<itemizedlist>
<listitem>
<para>transmission: Enable Single Sign On. </para>
</listitem>
<listitem>
<para>cockpit: Add short description to frontpage shortcut. </para>
</listitem>
<listitem>
<para>fail2ban: Fix spelling and sentence structure. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.16.0 (2017-11-06)</title>
<section>
<title>Added</title>
<itemizedlist>
<listitem>
<para>Add mobile, web and desktop client info for modules. </para>
</listitem>
<listitem>
<para>Enable django SecurityMiddleware to improve security ratings. </para>
</listitem>
<listitem>
<para>cockpit: New module for server administration and web terminal. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Fixed</title>
<itemizedlist>
<listitem>
<para>letsencrypt: Fix internal server error when obtaining a certificate. </para>
</listitem>
<listitem>
<para>ejabberd: Fix LDAP server entry in config file during setup. </para>
</listitem>
<listitem>
<para>jsxc: Fix outdated URLs for connecting to local ejabberd server. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Plinth v0.15.3 (2017-10-20)</title>
<section>
<title>Changed</title>
<itemizedlist>
<listitem>
<para>Rename Disks to Storage. </para>
</listitem>
<listitem>
<para>Rename Snapshot to Storage Snapshots. </para>
</listitem>
<listitem>
<para>tt-rss: Enable API access by default. </para>
</listitem>
<listitem>
<para>Allow access to Plinth from outside the LAN. </para>
</listitem>
<listitem>
<para>matrix-synapse: Disable public registration by default. </para>
</listitem>
<listitem>
<para>power: Merge actions into the user dropdown. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Added</title>
<itemizedlist>
<listitem>
<para>Add locales for Kannada (kn) and for Bengali (bn). </para>
</listitem>
<listitem>
<para>ejabberd: Use Let's Encrypt certificate, also across renewals. </para>
</listitem>
<listitem>
<para>matrix-synapse: Add enable/disable public registrations. </para>
</listitem>
<listitem>
<para>Add captcha validation on 3 failed attempts. </para>
</listitem>
<listitem>
<para>matrix-synapse: Enable LDAP integration. </para>
</listitem>
<listitem>
<para>letsencrypt: Automatically obtain and revoke SSL certificates. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Fixed</title>
<itemizedlist>
<listitem>
<para>Fix front page label names. </para>
</listitem>
<listitem>
<para>Fix vertical alignment of shortcut icons. </para>
</listitem>
<listitem>
<para>storage: Fix issue with locales that use other decimal separators. </para>
</listitem>
<listitem>
<para>Make tt-rss api accessible using Apache basic auth. </para>
</listitem>
<listitem>
<para>letsencrypt: Handle case where current domain is empty. </para>
</listitem>
<listitem>
<para>Handle both admin and non-admin user names in update user template. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Plinth v0.15.2 (2017-09-24)</title>
<section>
<title>Added</title>
<itemizedlist>
<listitem>
<para>letsencrypt: Show more info on cert validity status. </para>
</listitem>
<listitem>
<para>letsencrypt: Add option to delete certificates. </para>
</listitem>
<listitem>
<para>letsencrypt: Add option to let Plinth manage certbot's renewal hooks. </para>
</listitem>
<listitem>
<para>power: Warn if a package manager is running before shutdown/restart. </para>
</listitem>
<listitem>
<para>security: Install and manage fail2ban. </para>
</listitem>
<listitem>
<para>names: Include domain and services from dynamicdns. </para>
</listitem>
<listitem>
<para>disks: Add low disk space warning to system and disks page. </para>
</listitem>
<listitem>
<para>ssh: New application to manage SSH server. </para>
</listitem>
<listitem>
<para>Add api module to get enabled services and access info. </para>
</listitem>
<listitem>
<para>Add Django password validators. </para>
</listitem>
<listitem>
<para>ejabberd, ikiwiki, ttrss: Add user login descriptions. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Removed</title>
<itemizedlist>
<listitem>
<para>diaspora: Disable for this release due to issues affecting package. </para>
</listitem>
<listitem>
<para>Remove help from navbar before firstboot complete. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Fixed</title>
<itemizedlist>
<listitem>
<para>i18n: Don't use backslash-newline for wrapping long lines. </para>
</listitem>
<listitem>
<para>radicale: Update link to documentation. </para>
</listitem>
<listitem>
<para>sso: Upgrade crypto to 4096-bit RSA and SHA-512. </para>
</listitem>
<listitem>
<para>Users: Allow non-admin users to log out. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Changed</title>
<itemizedlist>
<listitem>
<para>letsencrypt: Make Let's Encrypt an essential module. </para>
</listitem>
<listitem>
<para>UI: Make apps and configure pages responsive on small screens. </para>
</listitem>
<listitem>
<para>Make help accessible for logged-in non-admin users. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Plinth v0.15.0 (2017-07-01)</title>
<itemizedlist>
<listitem>
<para>Added Tahoe-LAFS module for distributed file storage. </para>
</listitem>
<listitem>
<para>Added Diaspora* module for federated social networking. </para>
<itemizedlist>
<listitem>
<para>Currently only available in "contrib" repository. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>New Locales for Czech (cs) and Tamil (ta). </para>
</listitem>
<listitem>
<para>Added SSO using auth_pubtkt for Syncthing, TT-RSS, and the Repro admin panel. </para>
<itemizedlist>
<listitem>
<para>If you are logged in to Plinth, you will be automatically logged in to these web apps. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>ejabberd: Added option to enable/disable Message Archive Management. </para>
</listitem>
<listitem>
<para>help: Added Debian release name to about page. </para>
</listitem>
<listitem>
<para>firstboot: De-bloat first welcome screen. </para>
</listitem>
<listitem>
<para>Pinned footer to the bottom of the viewport. </para>
</listitem>
<listitem>
<para>disks: Restrict precision of reported available space on root partition. </para>
</listitem>
<listitem>
<para>diagnostics: Disable button if app/service is not running. </para>
</listitem>
<listitem>
<para>help: Only show help pages if user is logged in. </para>
</listitem>
<listitem>
<para>navbar: Moved logout to user drop-down and added a new power drop-down. </para>
</listitem>
<listitem>
<para>disks: Show disabled partition resize option if no space is available. </para>
</listitem>
<listitem>
<para>Added line break to titles to fix frontpage layout. </para>
</listitem>
<listitem>
<para>syncthing: Fixed typos and clarity in description. </para>
</listitem>
<listitem>
<para>firewall: Fix 500 error when firewalld is not running. </para>
</listitem>
<listitem>
<para>setup: Disable install/upgrade when dpkg/apt is running. </para>
</listitem>
<listitem>
<para>disks: Use information from lsblk for more accuracy. </para>
</listitem>
<listitem>
<para>datetime: Show timezone properly when it not in expected list. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.14.0 (2017-04)</title>
<itemizedlist>
<listitem>
<para>tor: Added option to use upstream bridges. </para>
</listitem>
<listitem>
<para>openvpn: Added shortcut to front page, shown only when logged-in. </para>
</listitem>
<listitem>
<para>openvpn: Non-admin users can download their own profiles. </para>
</listitem>
<listitem>
<para>Added new locales for Hindi (hi) and Gujarati (gu). </para>
</listitem>
<listitem>
<para>Added Syncthing module for file synchronization. </para>
</listitem>
<listitem>
<para>Added Matrix Synapse as chat server with groups, audio and video. </para>
</listitem>
<listitem>
<para>Require admin access for all system configuration pages. </para>
</listitem>
<listitem>
<para>Changed appearance of topbar and footer. </para>
</listitem>
<listitem>
<para>openvpn: Regenerate user key or certificate if empty. </para>
</listitem>
<listitem>
<para>disks: Workaround issue in parted during resize. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.13.1 (2017-01-22)</title>
<itemizedlist>
<listitem>
<para>Two new apps were added: </para>
<itemizedlist>
<listitem>
<para>Gobby Server (infinoted) for collaborative editing of text documents </para>
</listitem>
<listitem>
<para>Domain Name Server (BIND), in system menu </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Added JavaScript license web labels to provide partial support for LibreJS. </para>
</listitem>
<listitem>
<para>Added basic configuration form for Minetest server. </para>
</listitem>
<listitem>
<para>Added indicator to Help-&gt;About page if new Plinth version is available. </para>
</listitem>
<listitem>
<para>Show app logos on front page instead of generic icons. </para>
</listitem>
<listitem>
<para>Prevent anonymous users from accessing setup pages. </para>
</listitem>
<listitem>
<para>Split Chat Server (XMPP) app into Chat Server (ejabberd) and Chat Client (jsxc). </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.12.0 (2016-12-08)</title>
<itemizedlist>
<listitem>
<para>Open up RTP ports in the firewall for repro (SIP server). </para>
</listitem>
<listitem>
<para>Front page shortcuts for services show a Configure button in the details box for logged-in users. </para>
</listitem>
<listitem>
<para>Add mods packages to be installed with Minetest server. </para>
</listitem>
<listitem>
<para>Fix issue with reading Dynamic DNS status as non-root user. </para>
</listitem>
<listitem>
<para>After the hostname is changed, ensure the domain name is still set correctly. </para>
</listitem>
<listitem>
<para>Allow the domain name to be cleared, and properly set the configuration in this case. </para>
</listitem>
<listitem>
<para>On the Certificates (Let's Encrypt) page, show a more informative message when no domains are configured. </para>
</listitem>
<listitem>
<para>On the Chat Server (XMPP) page, show more clearly if domain is not set. </para>
</listitem>
<listitem>
<para>Apps that require login will not be shown on the front page, unless the user is logged in. </para>
</listitem>
<listitem>
<para>Show status block for News Feed Reader (Tiny Tiny RSS). </para>
</listitem>
<listitem>
<para>Change appearance of front page with larger icons and repositioned text. </para>
</listitem>
<listitem>
<para>Firewall page only lists services that have been setup. The port lists are collapsible under each service. </para>
</listitem>
<listitem>
<para>Support configuring IPv6 networks. </para>
</listitem>
<listitem>
<para>Make it less likely to accidentally delete the only Plinth user. </para>
</listitem>
<listitem>
<para>Updated to work with JSXC 3.0.0 (XMPP web client). </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.11.0 (2016-09-29)</title>
<itemizedlist>
<listitem>
<para>Added loading icon for additional busy operations. </para>
</listitem>
<listitem>
<para>Added basic front page with shortcuts to web apps, and information about enabled services. </para>
</listitem>
<listitem>
<para>networks: Add batctl as dependency, required for batman-adv mesh networking. </para>
</listitem>
<listitem>
<para>users: </para>
<itemizedlist>
<listitem>
<para>Fixed checking restricted usernames. </para>
</listitem>
<listitem>
<para>Display error message if unable to set SSH keys. </para>
</listitem>
<listitem>
<para>Flush nscd cache after user operations to avoid some types of errors. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>monkeysphere: </para>
<itemizedlist>
<listitem>
<para>Adopted to using SHA256 fingerprints. </para>
</listitem>
<listitem>
<para>Sort items for consistent display. </para>
</listitem>
<listitem>
<para>Handle new uid format of gpg2. </para>
</listitem>
<listitem>
<para>Fixed handling of unavailable imported domains. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>minetest: Fixed showing status block and diagnostics. </para>
</listitem>
<listitem>
<para>Fixed stretched favicon. </para>
</listitem>
<listitem>
<para>Switched base template from container-fluid to container. This will narrow the content area for larger displays. </para>
</listitem>
<listitem>
<para>Plinth is now able to run as "plinth" user instead of root user. </para>
</listitem>
<listitem>
<para>xmpp: Replaced jwchat with jsxc. </para>
</listitem>
<listitem>
<para>ikiwiki: Allow only alphanumerics in wiki/blog name to avoid invalid paths. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Plinth v0.10.0 (2016-08-21)</title>
<itemizedlist>
<listitem>
<para>Updated Plinth to support Django 1.10. </para>
</listitem>
<listitem>
<para>Added a page to display recent status log from Plinth. It is accessible from the 500 error page. </para>
</listitem>
<listitem>
<para>Tor: Added options to toggle relay and bridge relay modes. </para>
</listitem>
<listitem>
<para>Radicale: Added access rights control. </para>
</listitem>
<listitem>
<para>Ikiwiki: Updated suggested packages. </para>
</listitem>
<listitem>
<para>Users and Groups: Fixed editing users without SSH keys. </para>
</listitem>
<listitem>
<para>Networks: Added basic support for configuring batman-adv mesh networking. </para>
</listitem>
<listitem>
<para>Networks: Fixed incorrect access for retrieving DNS entries. </para>
</listitem>
<listitem>
<para>New languages: </para>
<itemizedlist>
<listitem>
<para>Persian (50% translated) </para>
</listitem>
<listitem>
<para>Indonesian (not started, contributions needed) </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>New modules added to Plinth: </para>
<itemizedlist>
<listitem>
<para>Disks: Shows free space of mounted partitions, and allows expanding the root partition. </para>
</listitem>
<listitem>
<para>Security: Controls login restrictions. </para>
</listitem>
<listitem>
<para>Snapshots: Manages Btrfs snapshots. </para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.9.4 (2016-06-24)</title>
<itemizedlist>
<listitem>
<para>Added Polish translation. </para>
</listitem>
<listitem>
<para>Fixed issue preventing access to Plinth on a non-standard port. </para>
</listitem>
<listitem>
<para>Dealt with ownCloud removal from Debian. The ownCloud page in Plinth will be hidden if it has not been setup. Otherwise, a warning is shown. </para>
</listitem>
<listitem>
<para>Fixed issue in Privoxy configuration. Two overlapping listen-addresses were configured, which prevented privoxy service from starting. </para>
</listitem>
<listitem>
<para>Fixed issue that could allow someone to start a module setup process without being logged in to Plinth. </para>
</listitem>
<listitem>
<para>Fixed issues with some diagnostic tests that would show false positive results. </para>
</listitem>
<listitem>
<para>Added check to Diagnostics to skip tests for modules that have not been setup. </para>
</listitem>
<listitem>
<para>Fixed some username checks that could cause errors when editing the user. </para>
</listitem>
<listitem>
<para>Added sorting of menu items per locale. </para>
</listitem>
<listitem>
<para>Moved Dynamic DNS and Pagekite from Applications to System Configuration. </para>
</listitem>
<listitem>
<para>Allowed setting IP for shared network connections. </para>
</listitem>
<listitem>
<para>Switched Dreamplug image from "non-free" to "free". This means that we no longer include the non-free firmware for the built-in wifi on Dreamplug. </para>
</listitem>
<listitem>
<para>Added the "userdir" module for the Apache web server. This allows users in the "admin" group to create a folder called "public_html" under their home folder, and to publicly share files placed in this folder. </para>
</listitem>
<listitem>
<para>New wiki and manual content licence: <emphasis><ulink url="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International</ulink></emphasis> (from June 13rd 2016). </para>
</listitem>
<listitem>
<para>Switched to using apt-get for module setup in Plinth. This fixes several issues that were seen during package installs. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.9 (2016-04-24)</title>
<itemizedlist>
<listitem>
<para>Fixed Wi-Fi AP setup. </para>
</listitem>
<listitem>
<para>Prevent lockout of users in 'sudo' group after setup is complete. </para>
</listitem>
<listitem>
<para>Improved setup mechanism for Plinth modules. Allows users to see what a module is useful for, before doing the setup and package install. Also allows essential modules to be setup by default during FreedomBox install. </para>
</listitem>
<listitem>
<para>Added HTTPS certificates to Monkeysphere page. Reorganized so that multiple domains can be added to a key. </para>
</listitem>
<listitem>
<para>Added Radicale, a CalDAV and CardDAV server. </para>
</listitem>
<listitem>
<para>Added Minetest Server, a multiplayer infinite-world block sandbox. </para>
</listitem>
<listitem>
<para>Added Tiny Tiny RSS, a news feed reader. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.8 (2016-02-20)</title>
<itemizedlist>
<listitem>
<para>Added Quassel, an IRC client that stays connected to IRC networks and can synchronize multiple frontends. </para>
</listitem>
<listitem>
<para>Improved first boot user interface. </para>
</listitem>
<listitem>
<para>Fixed Transmission RPC whitelist issue. </para>
</listitem>
<listitem>
<para>Added translations for Turkish, Chinese, and Russian. Fixed and updated translations in other languages. </para>
</listitem>
<listitem>
<para>Added Monkeysphere, which uses PGP web of trust for SSH host key verification. </para>
</listitem>
<listitem>
<para>Added Let's Encrypt, to obtain certificates for domains, so that browser certificate warnings can be avoided. </para>
</listitem>
<listitem>
<para>Added repro, a SIP server for audio and video calls. </para>
</listitem>
<listitem>
<para>Allow users to set their SSH public keys, so they can login over SSH without a password. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.7 (2015-12-13)</title>
<itemizedlist>
<listitem>
<para>Translations! Full translations of the interface in Danish, Dutch, French, German and Norwegian Bokmål, and partial Telugu. </para>
</listitem>
<listitem>
<para>Support for OLinuXino A20 MICRO and LIME2 </para>
</listitem>
<listitem>
<para>New Plinth applications: OpenVPN, reStore </para>
</listitem>
<listitem>
<para>Improved first-boot experience </para>
</listitem>
<listitem>
<para>Many bugfixes and cleanups </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.6 (2015-10-31)</title>
<itemizedlist>
<listitem>
<para>New supported hardware target: Raspberry Pi 2 </para>
</listitem>
<listitem>
<para>New modules in Plinth: </para>
<itemizedlist>
<listitem>
<para>Shaarli: Web application to manage and share bookmarks </para>
</listitem>
<listitem>
<para>Date &amp; Time: Configure time zone and NTP service </para>
</listitem>
<listitem>
<para>Service Discovery: Configure Avahi service </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Documentation revamp including new user manual and developer guide </para>
</listitem>
<listitem>
<para>Improved diagnostic tests, available in Plinth </para>
</listitem>
<listitem>
<para>Avoid unnecessary changes when installing on existing Debian system </para>
</listitem>
<listitem>
<para>Network configuration supports PPPoE connections </para>
</listitem>
<listitem>
<para>Debian packages can be download over Tor </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.5 (2015-08-07)</title>
<itemizedlist>
<listitem>
<para>New targets: CubieTruck, i386, amd64 </para>
</listitem>
<listitem>
<para>New apps in Plinth: Transmission, Dynamic DNS, Mumble, ikiwiki, Deluge, Roundcube, Privoxy </para>
</listitem>
<listitem>
<para>NetworkManager handles network configuration and can be manipulated through Plinth. </para>
</listitem>
<listitem>
<para>Software Upgrades (unattended-upgrades) module can upgrade the system, and enable automatic upgrades. </para>
</listitem>
<listitem>
<para>Plinth is now capable of installing ejabberd, jwchat, and privoxy, so they are not included in image but can be installed when needed. </para>
</listitem>
<listitem>
<para>User authentication through LDAP for SSH, XMPP (ejabberd), and ikiwiki. </para>
</listitem>
<listitem>
<para>Unit test suite is automatically run on Plinth upstream. This helps us catch at least some code errors before they are discovered by users! </para>
</listitem>
<listitem>
<para>New, simpler look for Plinth. </para>
</listitem>
<listitem>
<para>Performance improvements for Plinth. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.3 (2015-01-20)</title>
<itemizedlist>
<listitem>
<para>Tor Bridges: All boxes now act as non-exit Tor bridges, routing traffic for the Tor network. </para>
</listitem>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Firewall#">Firewall</ulink>: firewall is on by default and is automatically managed. </para>
</listitem>
<listitem>
<para>Add BeagleBone support. We now have images for BeagleBone, RaspberryPi, VirtualBox i386/amd64, and DreamPlug. </para>
</listitem>
<listitem>
<para>Ability to enable and use Tor Hidden Services. Works with Ejabberd/JWChat and ownCloud services. </para>
</listitem>
<listitem>
<para>Enable Tor obfsproxy with scramblesuit. </para>
</listitem>
<listitem>
<para>Drop well-known root password (an account with sudo capabilities still exists for now but will be removed soon). </para>
</listitem>
<listitem>
<para>Switch to unstable as suite of choice for easier development. </para>
</listitem>
<listitem>
<para>Newer images are built with systemd by default (due to Debian change). </para>
</listitem>
<listitem>
<para>Install and operate firewall automatically (uses firewalld). </para>
</listitem>
<listitem>
<para>Major restructuring of Plinth UI using Python3, Django web development framework and Bootstrap3. Code quality is much better and UI is more polished. </para>
</listitem>
<listitem>
<para>Introduced packaging framework in Plinth UI for on-demand application installation. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.2 (2014-03-16)</title>
<itemizedlist>
<listitem>
<para>Support for Raspberry Pi and VirtualBox (x86) in addition to the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/ReleaseNotes/FreedomBox/Hardware/DreamPlug#">DreamPlug</ulink>. </para>
</listitem>
<listitem>
<para>New Services: </para>
<itemizedlist>
<listitem>
<para>Configuration Management UI. </para>
</listitem>
<listitem>
<para>Instant Messaging. </para>
</listitem>
<listitem>
<para>OwnCloud. </para>
</listitem>
<listitem>
<para>dnsmasq. </para>
</listitem>
<listitem>
<para>Low-Level Configuration Management. </para>
</listitem>
<listitem>
<para>Service Announcement. </para>
</listitem>
<listitem>
<para>LDAP Server. </para>
</listitem>
<listitem>
<para>LXC Support. </para>
</listitem>
<listitem>
<para>Source Packages. </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>The privoxy setup is now the default from Debian. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Version 0.1 (2013-02-26)</title>
<itemizedlist>
<listitem>
<para>First FreedomBox software release (0.1 image, developer release). </para>
</listitem>
<listitem>
<para>Full hardware support in Debian </para>
</listitem>
<listitem>
<para>Support for <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/DreamPlug#">DreamPlug</ulink>. </para>
</listitem>
<listitem>
<para>Basic software tools selected as common working environment: </para>
<itemizedlist>
<listitem>
<para>User interface system "plinth" </para>
</listitem>
<listitem>
<para>Cryptography tools: gpg or "monkeysphere" </para>
</listitem>
<listitem>
<para>Box-to-box communication design: Freedom-buddy (uses <ulink url="https://en.wikipedia.org/wiki/Tor_%28anonymity_network%29">TOR network</ulink>) </para>
</listitem>
<listitem>
<para>Web cleaning: "privoxy-freedombox". </para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
</section>
</section>
<section>
<title>Contributing</title>
<para>From code, design and translation to spreading the world and donation, here is a list of possible contributions to develop FreedomBox. </para>
<section>
<title>Quick Links</title>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/ProgressCalls#">Progess calls</ulink>
</para>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TODO#">TODO page</ulink>
</para>
<para>
<ulink url="https://www.freedomboxfoundation.org/donate/">Donation page</ulink>
</para>
</section>
<section>
<title>Welcome to newcomers</title>
<para>As a newcomer, you are more than welcome to introduce yourself to all users and doers on the "FreedomBox-discuss" <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">mailing list</ulink> or on the <ulink url="irc://irc.debian.org/freedombox">#freedombox IRC</ulink> channel. In addition to make useful contacts, you can start reporting bugs and translate (see below) the wiki website and the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> web interface. </para>
</section>
<section>
<title>Development priorities</title>
<para>Upcoming priorities are discussed on an regular basis. You find the progress of the web interface Plinth with its priorities here:<ulink url="https://tree.taiga.io/project/freedombox-freedombox/">Project Progress</ulink>. We want to enjoy soon a version 1.0.</para>
<para>Please check next <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/ProgressCalls#">progess calls</ulink> to keep yourself on track and meet members of the release team. A <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TODO#">TODO page</ulink> aggregates the complete list of the items to work on for <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink>. </para>
</section>
<section>
<title>Contributions needed</title>
<section>
<title>Add an Application</title>
<para>If you are a developer and wish to see an application available in FreedomBox, you can contribute by adding the application to FreedomBox. See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Manual/Developer#">FreedomBox Developer Manual</ulink>. </para>
</section>
<section>
<title>Bugs</title>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Contribute/Bugs#">List of bugs</ulink> listed on Debian universal system. Also see the <ulink url="https://qa.debian.org/developer.php?login=freedombox-pkg-team%40lists.alioth.debian.org&amp;comaint=yes">Packages overview for FreedomBox packaging team</ulink> for status of various packages that we use. </para>
</section>
<section>
<title>Code</title>
<para>If you are a developer, you can contribute code to one of the sub-projects of FreedomBox. Step-by-step process of <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Contribute/Code#">contributing code</ulink> to FreedomBox is available. </para>
<itemizedlist>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Setup#">FreedomBox Setup</ulink>: a Debian package for setting up the FreedomBox. </para>
</listitem>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth#">Plinth</ulink>: a web interface to administer the functions of FreedomBox. </para>
</listitem>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Maker#">Freedom Maker</ulink>: a script to build FreedomBox disk images for use on various hardware devices or virtual machines. </para>
</listitem>
</itemizedlist>
<para>You can pickup a task from one of the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TODO#">TODO</ulink> lists. The individual page project pages contain information availabily of the code, how to build and TODO lists. </para>
</section>
<section>
<title>Design</title>
<section>
<title>User Experience Design</title>
<para>If you are a user experience designer, you can help FreedomBox with the following items: </para>
<itemizedlist>
<listitem>
<para>UI experience for the Plinth web interface </para>
</listitem>
<listitem>
<para>Web design for <ulink url="https://freedomboxfoundation.org">freedomboxfoundation.org</ulink> and FreedomBox <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">wiki</ulink> pages </para>
</listitem>
<listitem>
<para>Logo and branding (we currently have <ulink url="https://salsa.debian.org/freedombox-team/plinth/tree/master/static/themes/default">an identity manual and logos</ulink>) </para>
</listitem>
<listitem>
<para>Possible designs for custom FreedomBox cases on single board computers </para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Design#">User experience design</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Technical Design</title>
<para>FreedomBox is still under development any many components are yet to be worked on. You can contribute to the discussion on various technical design and implementation aspects of FreedomBox. See: </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Design#">Design portal</ulink>
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Donate</title>
<para>The <ulink url="https://freedomboxfoundation.org">FreedomBox Foundation</ulink> is a 501(c)(3) federal nonprofit corporation with recognition from the IRS. FreedomBox project is run by volunteers. You can help the project financially by donating via PayPal, Bitcoin or by mailing a check. Please see the <ulink url="https://www.freedomboxfoundation.org/donate/">donation page</ulink> for details on how to donate. </para>
</section>
<section>
<title>Document: User Manual, Website and Wiki</title>
<para>FreedomBox needs better documentation for users and contributors. FreedomBox manual is prepared by aggregating various pages on the wiki and exporting to various formats. The manual is then used in Plinth and elsewhere. </para>
<para>If you wish to contribute to the FreedomBox <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">wiki</ulink> (and consequently the FreedomBox manual), you can create a wiki account and start editing. </para>
<para>For contributing to the website please start a discussion on the FreedomBox <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">mailing list</ulink>. </para>
</section>
<section>
<title>Quality Assurance</title>
<itemizedlist>
<listitem>
<para>FreedomBox already runs on many platforms and it is not possible for developers to test all possible platforms. If you have one of the supported hardware you can help with testing FreedomBox on the platform. </para>
</listitem>
<listitem>
<para>When an application is made available on FreedomBox, not all of its functionality is tested in the real world by developer doing the work. Deploying the application and testing it will help ensure high quality applications in FreedomBox. </para>
</listitem>
</itemizedlist>
<para>See the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/QualityAssurance#">quality assurance</ulink> page for a basic list of test cases to check for and information on reporting bugs. </para>
</section>
<section>
<title>Localization</title>
<para>All text visible to users of FreedomBox needs to be localized to various languages. This translation work includes: </para>
<itemizedlist>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth#">Web Interface</ulink> for FreedomBox </para>
</listitem>
<listitem>
<para>FreedomBox documentation </para>
</listitem>
<listitem>
<para>FreedomBox <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">wiki</ulink>, <ulink url="https://freedombox.org">website</ulink> and <ulink url="https://freedomboxfoundation.org">foundation website</ulink>. </para>
</listitem>
<listitem>
<para><ulink url="https://docs.djangoproject.com/en/dev/internals/contributing/localizing/">Django web framework</ulink> that FreedomBox uses. </para>
</listitem>
<listitem>
<para>Individual applications that FreedomBox exposes to users. </para>
</listitem>
</itemizedlist>
<para>You can contribute to the localization effort using the web-based tool at <ulink url="https://hosted.weblate.org/projects/freedombox/">Weblate</ulink> or directly to the source tree via <ulink url="https://salsa.debian.org/freedombox-team/plinth/tree/master/plinth/locale">Salsa</ulink>. </para>
<para>If you wish to see FreedomBox available for one of your languages, please start a discussion on the FreedomBox discuss <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">mailing list</ulink> or on the <ulink url="irc://irc.debian.org/freedombox">#freedombox IRC</ulink> channel to work with others translating for that language. </para>
<para>For more information, please visit the FreedomBox <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Translate#">translators</ulink> page. </para>
</section>
<section>
<title>Spread the Word</title>
<para>Speak to your family, friends, local community or at global conferences about the importance of FreedomBox. To be a successful project we need many more participants, be it users or contributors. Write about your efforts at the <ulink url="https://www.freedomboxfoundation.org/appearances/index.en.html">talks page</ulink> and on the <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TalksAndPresentations#">wiki</ulink>. </para>
</section>
</section>
</section>
<section>
<title>Developer Guide</title>
<para>This manual is meant for developers intending to develop applications for FreedomBox. It provides a step by step tutorial and an API reference. </para>
<section>
<title>Writing Applications - Tutorial</title>
<para>This tutorial covers writing an application for FreedomBox. FreedomBox is a pure blend of Debian with a web interface, known as Plinth, that configures its applications. We shall discuss various aspects of building an application for FreedomBox, by creating an example application. </para>
<para>There are two parts to writing a FreedomBox application. First is to make sure that the application is available as a Debian package uploaded to the repositories. This is the majority of the work involved. However, if an application is already available in Debian repositories, it is trivial to build a FreedomBox UI for it. The second part of writing an application for FreedomBox is to provide a thin web interface layer for configuring the application. This is done by extending Plinth's user interface to provide visibility to the application and to let the user control its operations in a highly simplified way. This layer is referred to as 'Plinth application'. </para>
<para>Plinth applications can either be distributed as part of Plinth source code by submitting the applications to the Plinth project or they can distributed independently. This tutorial covers writing an application that is meant to be distributed as part of Plinth. However, writing independent Plinth applications is also very similar and most of this tutorial is applicable. </para>
<note>
<para>
<emphasis role="strong">Note</emphasis>
</para>
<para>The term application, in this tutorial, is used to mean multiple concepts. FreedomBox application is a combination of Debian package and a web interface layer. The web interface layer is also called a Plinth application which is very similar to and built upon a Django application. </para>
</note>
<section>
<title>Before we begin</title>
<para>Plinth is a web interface built using Python3 and Django. FreedomBox applications are simply Django applications within the Plinth project. Hence, for the most part, writing a FreedomBox application is all about writing a Django application. </para>
<para>You should start by reading the <ulink url="https://docs.djangoproject.com/en/stable/intro/tutorial01/">Django tutorial</ulink>. All the concepts described there are applicable for how plinth and its applications are be built. </para>
</section>
<section>
<title>Picking an application</title>
<para>We must first, of course, pick an application to add to FreedomBox. For the purpose of this tutorial, let us pick Tiny Tiny RSS. The project description reads as, <emphasis>Tiny Tiny RSS is an open source web-based news feed (RSS/Atom) reader and aggregator, designed to allow you to read news from any location, while feeling as close to a real desktop application as possible</emphasis>. </para>
<important>
<para>
<emphasis role="strong">Choosing an application</emphasis>
</para>
<para>When choosing an application we must make sure that the application respects users' freedom and privacy. By choosing to use FreedomBox, users have explicitly made a choice to keep the data with themselves, to not provide privacy compromising data to centralized entities and to use Free Software that respects their Software Freedom. These are not properties of <emphasis>some</emphasis> of the applications in FreedomBox but all applications <emphasis>must</emphasis> adhere to these principles. Applications should not even ask the users questions to this effect, because users have already made a choice. </para>
</important>
</section>
<section>
<title>Packaging the application</title>
<para>Majority of the effort in creating an application for FreedomBox is to package it for Debian and get it uploaded to Debian repositories. Going through the process of packaging itself is outside the scope of this tutorial. It is, however, well documented elsewhere. You should start <ulink url="https://wiki.debian.org/Packaging">here</ulink>. </para>
<para>Debian packaging might seem like an unnecessary process that takes time with its adherence to standards, review process, legal checks, etc. However, upon close examination, one will find that without these steps the goals of the FreedomBox project cannot be met. Some of the advantages of Debian packaging are listed below: </para>
<itemizedlist>
<listitem>
<para>Legal check ensures that proprietary licensed code or code with bad licenses does not inadvertently creep in. </para>
</listitem>
<listitem>
<para>Libraries have to be packaged separately easing security handling. When a security vulnerability is identified in a library, just the library will have to be updated and not all the applications that depend on it. </para>
</listitem>
<listitem>
<para>Upgrades become smoother. The dependency handling of the packaging system, configuration handling tools, tools to deal with various types of well known files help with ensuring a proper upgrade. </para>
</listitem>
<listitem>
<para>Collaborative maintenance teams ensure that the package is well cared for even if you get busy with other work and can't spend time on your package. Following standards and using common infrastructure is critical to enable this development methodology. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Creating the project structure</title>
<para>Create a directory structure as follows with empty files. We will fill them up in a step-by-step manner. </para>
<screen><![CDATA[+- <plinth_root>/
|
+- plinth/
| |
| +- modules/
| |
| +- ttrss/
| |
| +- __init__.py
| |
| +- forms.py
| |
| +- urls.py
| |
| +- views.py
| |
| +- templates/
| | |
| | +- ttrss.html
| |
| +- tests
| |
| +- __init__.py
|
+- actions/
| |
| +- ttrss
|
+- data/
|
+- etc/
|
+- plinth/
|
+- modules-enabled/
|
+- ttrss]]></screen>
<para>The <code>__init__.py</code> indicates that the directory in which it is present is a Python module. For now, it is an empty file. </para>
<para>Plinth's setup script <code>setup.py</code> will automatically install the <code>plinth/modules/ttrss</code> directory (along with other files described later) to an appropriate location. If you are creating an application that stays independent and outside of Plinth source tree, then your <code>setup.py</code> script will need to install it a proper location on the system. The <code>plinth/modules/</code> directory is a Python3 <ulink url="https://www.python.org/dev/peps/pep-0420/">namespace package</ulink>. So, you can install it with the <code>plinth/modules/</code> directory structure into any Python path and still be discovered as <code>plinth.modules.*</code>. </para>
</section>
<section>
<title>Tell Plinth that we exist</title>
<para>The first thing to do is tell Plinth that our application exists. This is done by writing a small file with the Python import path to our application and placing it in <code>data/etc/plinth/modules-enabled/</code>. Let us create this file <code>ttrss</code>: </para>
<screen><![CDATA[plinth.modules.ttrss]]></screen>
<para>This file is automatically installed to <code>/etc/plinth/modules-enabled/</code> by Plinth's installation script <code>setup.py</code>. If we are writing a module that resides independently outside the Plinth's source code, the setup script will need to copy it to the target location. Further, it is not necessary for the application to be part of the <code>plinth.modules</code> namespace. It can, for example, be <code>plinth_ttrss</code>. </para>
</section>
<section>
<title>Writing the URLs</title>
<para>For a user to visit our application in Plinth, we need to provide a URL. When the user visits this URL, a view is executed and a page is displayed. In <code>urls.py</code> write the following: </para>
<screen><![CDATA[from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^apps/ttrss/$', views.index, name='index'),
]]]></screen>
<para>This routes the <code>/apps/ttrss/</code> URL to a view called <code>index</code> defined in <code>plinth/modules/ttrss/views.py</code>. This is no different than how routing URLs are written in Django. See <ulink url="https://docs.djangoproject.com/en/stable/topics/http/urls/">Django URL dispatcher</ulink> for more information. </para>
</section>
<section>
<title>Adding a menu item</title>
<para>We have added a URL to be handled by our application but this does not yet show up to be a link in Plinth web interface. Let us add a link in the applications list. In <code>__init__.py</code> add the following: </para>
<screen><![CDATA[from django.utils.translation import ugettext_lazy as _
from plinth.menu import main_menu
def init():
"""Intialize the module."""
menu = main_menu.get('apps')
menu.add_urlname(_('Tiny Tiny RSS'), 'glyphicon-bullhorn',
'ttrss:index', _('News Feed Reader'))]]></screen>
<para>As soon as Plinth starts, it will load all the enabled modules into memory. After this, it gives a chance to each of the modules to initialize itself by calling the <code>init()</code> method if there is such a method available as <code>&lt;app&gt;.init()</code>. Here we have implemented this method and added our menu item to the applications menu as part of the initialization process. </para>
<para>We wish to add our menu item to the list of applications which is why we have retrieved the applications menu which is available under the main menu. After this we add our own menu item to this menu. There are several parameters during this process that are important: </para>
<itemizedlist>
<listitem>
<para>In the first parameter we are providing the display name to use for our application when showing the menu item. </para>
</listitem>
<listitem>
<para>In the second parameter we are providing the icon to show for this menu item. This is an icon from the Twitter Bootstrap library. See </para>
<para>the Twitter Bootstrap library documentation for a list of <ulink url="http://getbootstrap.com/components/#glyphicons">available icons</ulink>. We can pick an icon from the available list of icons and just mention its glyphicon class as name here. </para>
</listitem>
<listitem>
<para>The third parameter is the name of the URL we have created for our application. Note that when including this application's URLs, Plinth will automatically set the name of the module as the Django </para>
<para>URL namespace. Hence it is <code>ttrss:index</code> and not just <code>index</code>. </para>
</listitem>
<listitem>
<para>The final parameter is a short description of the application. </para>
</listitem>
</itemizedlist>
<para>We have used the application menu item to insert our own menu item as a child. To be able to use the application menu item, we need to make sure that the module providing the application menu is loaded before our application is loaded. We will do that in the next step. </para>
</section>
<section>
<title>Specifying module dependencies</title>
<para>Specifying a simple list of applications to be loaded before our application provided to Plinth is sufficient. Add this in <code>__init__.py</code>. </para>
<screen><![CDATA[depends = ['plinth.modules.apps']]]></screen>
<para>Plinth will now make sure that the <code>apps</code> module is loaded before our module is loaded. Application initialization is also ensured to happen in this order. We can safely use any features of this module knowing that they have been initialized. </para>
<note>
<para>
<emphasis role="strong">Circular dependencies</emphasis>
</para>
<para>Circular dependencies are not possible among Plinth applications. Attempting to add them will result in error during startup. </para>
</note>
</section>
<section>
<title>Writing the enable/disable form</title>
<para>We wish to provide a user interface to the user to enable and disable the application. Complex modules may require more options but this is sufficient for our application. Add the following <code>forms.py</code>. </para>
<screen><![CDATA[from django import forms
class TtrssForm(forms.Form):
"""Tiny Tiny RSS configuration form."""
enabled = forms.BooleanField(
label='Enable Tiny Tiny RSS',
required=False)]]></screen>
<para>This creates a Django form that shows a single option to enable/disable the application. It also shows its current state. This is how a regular Django form is built. See <ulink url="https://docs.djangoproject.com/en/stable/topics/forms/">Django Forms documentation</ulink> for more information. </para>
<tip>
<para>
<emphasis role="strong">Too many options</emphasis>
</para>
<para>Resist the temptation to create a lot of configuration options. Although this will put more control in the hands of the users, it will make FreedomBox less usable. FreedomBox is a consumer product. Our target users are not technically savvy and we have make most of the decisions on behalf of the user to make the interface as simple and easy to use as possible. </para>
</tip>
</section>
<section>
<title>Writing a view</title>
<para>In <code>views.py</code>, let us add a view that can handle the URL we have provided above. </para>
<screen><![CDATA[from .forms import TtrssForm
def index(request):
"""Serve configuration page."""
status = get_status()
form = None
if request.method == 'POST':
form = TtrssForm(request.POST, prefix='ttrss')
if form.is_valid():
_apply_changes(request, status, form.cleaned_data)
status = get_status()
form = TtrssForm(initial=status, prefix='ttrss')
else:
form = TtrssForm(initial=status, prefix='ttrss')
return TemplateResponse(request, 'ttrss.html',
{'title': 'News Feed Reader (Tiny Tiny RSS)',
'status': status,
'form': form})]]></screen>
<para>This view works with the form we created in the previous step. It shows the current status of the service in form. This status is retrieved with the help of <code>get_status()</code> helper method. When the form is posted, again this view is called and it verifies whether the form's input values are correct. If so, it will apply the actions necessary for changed form values using the <code>_apply_changes()</code> method. </para>
</section>
<section>
<title>Getting the current status of the application</title>
<para>The view in the previous setup requires the status of the application to be retrieved using the <code>get_status()</code> method. Let us implement that method in <code>views.py</code>. </para>
<screen><![CDATA[from plinth.modules import ttrss
def get_status():
"""Get the current status."""
return {'enabled': ttrss.is_enabled()}]]></screen>
<para>This method retrieves the various statuses of the application for display in the view. Currently, we only need to show whether the application is enabled or disabled. So, we retrieve that using a helper method defined in <code>__init__.py</code>. </para>
<screen><![CDATA[from plinth import action_utils
def is_enabled():
"""Return whether the module is enabled."""
return action_utils.webserver_is_enabled('50-tt-rss')]]></screen>
<para>This method uses one of the several action utilities provided by Plinth. This method checks whether a webserver configuration named <code>50-tt-rss</code> is enabled. </para>
</section>
<section>
<title>Displaying the application page</title>
<para>The view that we have written above requires a template file known as <code>ttrss.html</code> to work. This template file controls how the web page for our application is displayed. Let us create this template file in <code>templates/ttrss.html</code>. </para>
<screen><![CDATA[{% extends "base.html" %}
{% load bootstrap %}
{% block content %}
<h2>News Feed Reader (Tiny Tiny RSS)</h2>
<p>Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator,
designed to allow you to read news from any location, while feeling
as close to a real desktop application as possible.</p>
<h3>Configuration</h3>
<form class="form" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/>
</form>
{% endblock %}]]></screen>
<para>This template extends an existing template known as <code>base.html</code>. This template is available in Plinth core to provide all the basic layout, styling, menus, JavaScript and CSS libraries. We will override the content area of the base template and keep the rest. </para>
<para>Yet again, there is nothing special about the way this template is written. This is a regular Django template. See <ulink url="https://docs.djangoproject.com/en/stable/topics/templates/">Django Template documentation</ulink>. </para>
<para>For styling and UI components, Plinth uses the Twitter Bootstrap project. See <ulink url="http://getbootstrap.com/css/">Bootstrap documentation</ulink> for reference. </para>
</section>
<section>
<title>Applying the changes from the form</title>
<para>The view we have created displays the form and processes the form after the user submits it. It used a helper method called <code>_apply_changes()</code> to actually get the work done. Let us implement that method in <code>views.py</code>. </para>
<screen><![CDATA[from django.contrib import messages
from plinth import actions
def _apply_changes(request, old_status, new_status):
"""Apply the changes."""
modified = False
if old_status['enabled'] != new_status['enabled']:
sub_command = 'enable' if new_status['enabled'] else 'disable'
actions.superuser_run('ttrss', [sub_command])
modified = True
if modified:
messages.success(request, 'Configuration updated')
else:
messages.info(request, 'Setting unchanged')]]></screen>
<para>We check to make sure that we don't try to disable the application when it is already disabled or try to enable the application when it is already enabled. Although Plinth's operations are idempotent, meaning that running them twice will not be problematic, we still wish avoid unnecessary operations for the sake of speed. </para>
<para>We are actually perform the operation using Plinth actions. We will implement the action to be performed a bit later. </para>
<para>After we perform the operation, we will show a message on the response page showing that the action was successful or that nothing happened. We use the Django messaging framework to accomplish this. See <ulink url="https://docs.djangoproject.com/en/stable/ref/contrib/messages/">Django messaging framework</ulink> for more information. </para>
</section>
<section>
<title>Installing packages required for the application</title>
<para>Plinth takes care of installing all the Debian packages required for our application to work. All we need to do is specify the list of the Debian packages required using a decorator on our view as follows: </para>
<screen><![CDATA[from plinth import package
@package.required(['tt-rss'])
def index(request):
"""Serve configuration page."""
...]]></screen>
<para>The first time this application's view is accessed, Plinth shows a package installation page and allows the user to install the required packages. After the package installation is completed, the user is shown the application's configuration page. </para>
<para>If there are configuration tasks to be performed immediately before or after the package installation, Plinth provides hooks for it. The <code>before_install=</code> and <code>on_install=</code> parameters to the <code>@package.required</code> decorator take a callback methods that are called before installation of packages and after installation of packages respectively. See the reference section of this manual or the <code>plinth.package</code> module for details. Other modules in Plinth that use this feature provided example usage. </para>
</section>
<section>
<title>Writing actions</title>
<para>The actual work of performing the configuration change is carried out by a Plinth action. Actions are independent scripts that run with higher privileges required to perform a task. They are placed in a separate directory and invoked as scripts via sudo. For our application we need to write an action that can enable and disable the web configuration. We will do this by creating a file <code>actions/ttrss</code>. </para>
<screen><![CDATA[import argparse
from plinth import action_utils
def parse_arguments():
"""Return parsed command line arguments as dictionary."""
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
subparsers.add_parser('enable', help='Enable Tiny Tiny RSS')
subparsers.add_parser('disable', help='Disable Tiny Tiny RSS')
return parser.parse_args()
def subcommand_enable(_):
"""Enable web configuration and reload."""
action_utils.webserver_enable('50-tt-rss')
def subcommand_disable(_):
"""Disable web configuration and reload."""
action_utils.webserver_disable('50-tt-rss')
def main():
"""Parse arguments and perform all duties."""
arguments = parse_arguments()
subcommand = arguments.subcommand.replace('-', '_')
subcommand_method = globals()['subcommand_' + subcommand]
subcommand_method(arguments)
if __name__ == '__main__':
main()]]></screen>
<para>This is a simple Python3 program that parses command line arguments. While Python3 is preferred, it can be written in other languages also. It uses a helper utility provided by Plinth to actually enable and disable Apache2 web server configuration. </para>
<para>This script is automatically installed to <code>/usr/share/plinth/actions</code> by Plinth's installation script <code>setup.py</code>. Only from here will there is a possibility of running the script under <code>sudo</code>. If you are writing an application that resides indenpendently of Plinth's source code, your <code>setup.py</code> script will need to take care of copying the file to the target location. </para>
</section>
<section>
<title>Creating diagnostics</title>
<para>Plinth provides a simple API for showing diagnostics results. The application has to implement a method for actually running the diagnostics and return the results as a list. Plinth then takes care of calling the diagnostics method and displaying the list in a formatted manner. </para>
<para>To implement the diagnostics method, method called <code>diagnose()</code> has to be available as <code>&lt;app&gt;.diagnose()</code>. It must return a list in which each item is the result of a test performed. The item itself is a two-tuple containing the display name of the test followed by the result as <code>passed</code>, <code>failed</code> or <code>error</code>. </para>
<screen><![CDATA[def diagnose():
"""Run diagnostics and return the results."""
results = []
results.extend(action_utils.diagnose_url_on_all(
'https://{host}/ttrss', extra_options=['--no-check-certificate']))
return results]]></screen>
<para>There are several helpers available to implement some of the common diagnostic tests. For our application we wish to implement a test to check whether the <code>/ttrss</code> URL is accessible. Since this is a commonly performed test, there is a helper method available and we have used it in the above code. The <code>{host}</code> tag replaced with various IP addresses, hostnames and domain names by the helper to produce different kinds of URLs and they are all tested. Results for all tests are returned which we then pass on to Plinth. </para>
<para>The user can trigger the diagnostics test by going to <code>System -&gt; Diagnostics</code> page. This runs diagnostics for all the applications. If we want users to be able to run diagnostics specifically for this application, we can include a button for it in our template immediately after the application description. </para>
<screen><![CDATA[{% include "diagnostics_button.html" with module="ttrss" enabled=True %}]]></screen>
</section>
<section>
<title>Logging</title>
<para>Sometimes we may feel the need to write some debug messages to the console and Plinth log file. Doing this in Plinth is just like doing this any other Python application. </para>
<screen><![CDATA[import logging
logger = logging.getLogger(__name__)
def example_method():
logger.debug('A debug level message')
logger.info('Showing application page - %s', request.method)
try:
something()
except Exception as exception:
# Print stack trace
logger.exception('Encountered an exception - %s', exception)]]></screen>
<para>For more information see Python <ulink url="https://docs.python.org/3.4/library/logging.html">logging framework</ulink> documentation. </para>
</section>
<section>
<title>Adding a License</title>
<para>Plinth is licensed under the GNU Affero General Public License Version 3 or later. FreedomBox UI applications, which run as modules under Plinth, also need to be under the same license or under a compatible license. The license of our application needs to clear for our application to be accepted by users and other developers. Let us add license headers to our application. </para>
<screen><![CDATA[#
# This file is part of FreedomBox.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#]]></screen>
<para>The above header needs to be present in every file of the application. It is suitable for Python files. However, in template files, we need to modify it slightly. </para>
<screen><![CDATA[{% extends "base.html" %}
{% comment %}
#
# This file is part of FreedomBox.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
{% endcomment %}
...]]></screen>
</section>
<section>
<title>Internationalization</title>
<para>Every string message that is visible to the user must be localized to user's native language. For this to happen, our application needs to be internationalized. This requires marking the user visible messages for translation. Plinth applications use the Django's localization methods to make that happen. </para>
<screen><![CDATA[from django.utils.translation import ugettext as _
def index(request):
...
return TemplateResponse(request, 'ttrss.html',
{'title': _('News Feed Reader (Tiny Tiny RSS)'),
'status': status,
'form': form})]]></screen>
<para>Notice that the page's title is wrapped in the <code>_()</code> method call. Let us do that for the menu item of the application too. </para>
<screen><![CDATA[from django.utils.translation import ugettext_lazy as _
def init():
"""Intialize the module."""
menu = cfg.main_menu.get('apps:index')
menu.add_urlname(_('News Feed Reader (Tiny Tiny RSS)'), 'glyphicon-envelope',
'ttrss:index', 600)]]></screen>
<para>Notice that in this case, we have used the <code>ugettext_lazy</code> and in the first case we have used the regular <code>ugettext</code>. This is because in the second case the <code>gettext</code> lookup is made once and reused for every user looking at the interface. These users may each have a different language set for their interface. Lookup made for one language should not be used for other users. The <code>_lazy</code> method provided by Django makes sure that the return value is an object that will actually be converted to string at the final moment when the string is being displayed. In the first case, the looked is made and string is returned immediately. </para>
<para>All of this is the usual way internationalization is done in Django. See <ulink url="https://docs.djangoproject.com/en/stable/topics/i18n/">Django internationalization and localization</ulink> documentation for more information. </para>
</section>
<section>
<title>Coding standards</title>
<para>For readability and easy collaboration it is important to follow common coding standards. Plinth uses the Python coding standards and uses the <code>pylint</code> and <code>flake8</code> tools to check if the there are any violations. Run these tools on our application and fix any errors and warnings. Better yet, integrate these tools into your favorite IDE for on-the-fly checking. </para>
<para>For the most part, the code we have written so far, is already compliant with the coding standards. This includes variable/method naming, indentation, document strings, comments, etc. One thing we have to add are the module documentation strings. Let us add those. In <code>__init__.py</code> add the top: </para>
<screen><![CDATA["""
FreedomBox app to configure Tiny Tiny RSS.
"""]]></screen>
</section>
</section>
<section>
<title>Reference Guide</title>
<para>This section describes Plinth API that is most frequently used by application. Note that since Plinth is under development and has not yet reached 1.0, this API is subject to change. This is not usually a problem because all the Plinth applications currently reside in Plinth source repository itself and are updated when the API is updated. </para>
<section>
<title>Applications</title>
<para>These methods are optionally provided by the application and Plinth calls/uses them if they are present. </para>
<section>
<title>&lt;application&gt;.init()</title>
<para>Optional. This method is called by Plinth soon after all the applications are loaded. The <code>init()</code> call order guarantees that other applications that this application depends on will be initialized before this application is initialized. </para>
</section>
<section>
<title>&lt;application&gt;.diagnose()</title>
<para>Optional. Called when the user invokes system-wide diagnostics by visiting <code>System -&gt; Diagnositcs</code>. This method must return an array of diagnostic results. Each diagnostic result must be a two-tuple with first element as a string that is shown to the user as name of the test and second element is the result of the test. It must be one of <code>passed</code>, <code>failed</code>, <code>error</code>. Example return value: </para>
<screen><![CDATA[[('Check http://localhost/app is reachable', 'passed'),
('Check configuration is sane', 'passed')]]]></screen>
</section>
<section>
<title>&lt;appliation&gt;.depends</title>
<para>Optional. This module property must contain a list of all applications that this application depends on. The application is specified as string containing the full module load path. For example, <code>plinth.modules.apps</code>. </para>
</section>
<section>
<title>plinth.package.required(package_list, before_install=None, on_install=on_install)</title>
<para>Make sure that a set of Debian packages are installed before a view can be accessed. If the packages are not currently installed on the system, a special installation view is displayed showing the list of packages to be installed. If the user chooses to proceed, package installation will start and an installation progress screen will be shown. After completion of the installation process, the original view is shown. </para>
<para>The <code>package_list</code> must be an iterable containing the Debian package names as strings. If provided, the <code>before_install</code> callable is called just before the installation process starts. Similarly, <code>on_install</code> callable is called just after the package installation completes. </para>
</section>
</section>
<section>
<title>Actions</title>
<para>Plinth's web front does not directly change any aspect of the underlying operating system. Instead, it calls upon <emphasis>Actions</emphasis>, as shell commands. Actions live in <code>/usr/share/plinth/actions</code> directory. They require no interaction beyond passing command line arguments or taking sensitive arguments via stdin. They change the operation of the services and applications of the FreedomBox and nothing else. These actions are also directly usable by a skilled administrator. </para>
<para>The following methods are provided by Plinth to run actions and to implement them easily by reusing code for common tasks. </para>
<section>
<title>plinth.actions.run(action, options=None, input=None, async=False)</title>
<para>Run an action command present under the <code>actions/</code> directory. This runs <code>subprocess.Popen()</code> after some checks. The action must be present in the actions/ directory. </para>
<para><code>options</code> are a list of additional arguments to pass to the command. If <code>input</code> is given it must be bytearray containing the input to pass on to the executed action. If <code>async</code> is set to True, the method will return without waiting for the command to finish. </para>
</section>
<section>
<title>plinth.actions.superuser_run(action, options=None, input=None, async=False)</title>
<para>This is same as <code>plinth.actions.run()</code> except the command is run with superuser privelages. </para>
</section>
<section>
<title>plinth.action_utils</title>
<para>Several utlities to help with the implementation of actions and diagnotic tests are implemented in this module. Refer to the module source code for a list of these methods and their documentation. </para>
</section>
</section>
<section>
<title>Menus</title>
<section>
<title>plinth.cfg.main_menu</title>
<para>This is a reference to the global main menu. All menu entries in Plinth are decendents of this menu item. See <code>Menu.add_item()</code> and <code>Menu.add_urlname()</code> for adding items to this menu or its children. </para>
</section>
<section>
<title>plinth.menu.Menu.get(self, urlname, url_args=None, url_kwargs=None)</title>
<para>Return a child of this menu item. <code>urlname</code> must be the name of a URL as configured in Django. <code>django.core.urlresolvers.reverse()</code> is called before the lookup for child menu item is performed. <code>url_args</code> and <code>url_kwargs</code> are passed on to <code>reverse()</code>. </para>
</section>
<section>
<title>plinth.menu.Menu.add_item(self, label, icon, url, order=50)</title>
<para>Add a menu item as a child to the current menu item. <code>label</code> is the user visible string shown for the menu item. <code>icon</code> must be a glyphicon class from the Twitter Bootstrap library. <code>url</code> is the relative URL to which this menu item will take the user to. </para>
</section>
<section>
<title>plinth.menu.Menu.add_urlname(self, label, icon, urlname, order=50, url_args=None, url_kwargs=None)</title>
<para>Same as <code>plinth.menu.Menu.add_item()</code> but instead of URL as input it is the name of a URL as configured in Django. <code>django.core.urlresolvers.reverse()</code> is called before it is added to the parent menu item. <code>url_args</code> and <code>url_kwargs</code> are passed on to <code>reverse()</code>. </para>
</section>
</section>
<section>
<title>Services</title>
<section>
<title>plinth.service.Service.__init__(self, service_id, name, ports=None, is_external=False, enabled=True)</title>
<para>Create a new Service object to notify all applications about the existence and status of a given application. <code>service_id</code> is a unique identifier for this application. <code>name</code> is a display name of this application that is shown by other applications such as on the firewall status page. <code>ports</code> is a list of names recognized by firewalld when enabling or disabling firewalld services. If <code>is_external</code> is true, the ports for this service are accessible from external interfaces, that is, from the Internet. Otherwise, the service is only available for client connected via LAN. <code>enabled</code> is the current state of the application. </para>
</section>
<section>
<title>plinth.service.Service.is_enabled(self)</title>
<para>Return whether the service is currently enabled. </para>
</section>
<section>
<title>plinth.service.Service.notify_enabled(self, sender, enabled)</title>
<para>Notify other applications about the change of status of this application. <code>sender</code> object should identify which application made the change. <code>enabled</code> is a boolean that signifies whether the application is enabled (= True) or disabled (= False). </para>
<para>This is typically caught by the firewall application to enable or disable the ports corresponding to an application. </para>
</section>
</section>
</section>
</section>
<section>
<title>Hacking</title>
<para>FreedomBox consists of three main projects: </para>
<itemizedlist>
<listitem>
<para>Plinth, the web interface </para>
</listitem>
<listitem>
<para>FreedomBox Setup, the Debian package to perform initial setup and </para>
</listitem>
<listitem>
<para>Freedom Maker, a script to build disk images for various hardware </para>
</listitem>
</itemizedlist>
<section>
<title>Plinth</title>
<para>Plinth is a web interface to administer the functions of the FreedomBox. </para>
<para>Plinth is <ulink url="https://www.gnu.org/philosophy/">Free Software</ulink> under <ulink url="https://www.gnu.org/licenses/agpl.html">GNU Affero General Public License</ulink> version 3 or (at your option) a later version. </para>
<section>
<title>Using</title>
<itemizedlist>
<listitem>
<para>Plinth comes installed with all FreedomBox images. You can <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> FreedomBox images and run on any of the supported hardware. Then, you can access Plinth by visiting the URL <ulink url="http://freedombox/plinth"/> or <ulink url="https://freedombox.local/plinth"/>. </para>
</listitem>
<listitem>
<para>If you are on a Debian box, you may install Plinth from Debian package archive. Currently, only Stretch (testing) and Sid (unstable) are supported. To install Plinth run: </para>
</listitem>
</itemizedlist>
<screen><![CDATA[$ sudo apt-get install plinth]]></screen>
<itemizedlist>
<listitem>
<para>You can also get Plinth from its <ulink url="https://salsa.debian.org/freedombox-team/plinth/">Git repository</ulink> and <ulink url="https://salsa.debian.org/freedombox-team/plinth/blob/master/INSTALL.md">install from source</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Screenshots</title>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=about.png">
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=about.png" width="300"/>
</imageobject>
<textobject>
<phrase>About Page</phrase>
</textobject>
</inlinemediaobject>
</ulink>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=tor.png">
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=tor.png" width="300"/>
</imageobject>
<textobject>
<phrase>Enabling Tor Hidden Services</phrase>
</textobject>
</inlinemediaobject>
</ulink>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=emailclient.png">
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=emailclient.png" width="300"/>
</imageobject>
<textobject>
<phrase>Setting up Email Client</phrase>
</textobject>
</inlinemediaobject>
</ulink>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=newsfeed.png">
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Plinth?action=AttachFile&amp;do=get&amp;target=newsfeed.png" width="300"/>
</imageobject>
<textobject>
<phrase>Newsfeed from anywhere</phrase>
</textobject>
</inlinemediaobject>
</ulink>
</para>
</section>
<section>
<title>Support</title>
<para>You may ask for support on </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss#">The mailing list</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Contributing</title>
<para>We are looking for help to improve Plinth. You can contribute to Plinth by not just by coding but also by translating, documenting, designing, packaging and providing support. </para>
<itemizedlist>
<listitem>
<para>Instructions on how to <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Contribute/Code#">contribute code</ulink> are available. </para>
</listitem>
<listitem>
<para>The primary Git repository is hosted at <ulink url="https://salsa.debian.org/freedombox-team/plinth/">FreedomBox Salsa Page</ulink>. </para>
</listitem>
<listitem>
<para>Instructions for <ulink url="https://salsa.debian.org/freedombox-team/plinth/blob/master/INSTALL.md">installing from source</ulink> and <ulink url="https://salsa.debian.org/freedombox-team/plinth/blob/master/HACKING.md">hacking the source</ulink> are available. </para>
</listitem>
<listitem>
<para>List of bugs, TODO items and feature requests are available on the <ulink url="https://salsa.debian.org/freedombox-team/plinth/issues">issue tracker</ulink>. </para>
</listitem>
<listitem>
<para>Before contributing to Plinth code, you need understand <ulink url="https://www.python.org/">Python</ulink> and <ulink url="https://www.djangoproject.com/">Django</ulink> on top which it is built. </para>
</listitem>
<listitem>
<para>You can request for development assistance on <ulink url="https://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss#">the mailing list</ulink> or the <ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>. </para>
</listitem>
</itemizedlist>
<section>
<title>Debian Package</title>
<itemizedlist>
<listitem>
<para>Plinth is <ulink url="https://packages.debian.org/plinth#">packaged</ulink> for Debian. Plinth is a native package and packaging source code is part of the main package source code. </para>
</listitem>
<listitem>
<para>Issues related to packaging are listed on <ulink url="https://bugs.debian.org/plinth#">Debian BTS</ulink>. </para>
</listitem>
</itemizedlist>
</section>
</section>
</section>
<section>
<title>FreedomBox Setup</title>
<para>FreedomBox Setup is a Debian package for setting up the FreedomBox. If you <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download and use pre-built images</ulink> you don't have to worry about this package. </para>
<para>FreedomBox Setup is responsible for setting up basic networking, web server, user accounts, installing essential packages etc. It performs first part of the setup during the image build process. Later, when the image is booted for the first time on actual hardware (or on a virtual machine), it does the remaining setup and then reboots the machine. It also comes with a diagnostic script to check if the FreedomBox Setup is running as expected. </para>
<para>FreedomBox Setup is <ulink url="https://www.gnu.org/philosophy/">Free Software</ulink> licensed under <ulink url="https://www.gnu.org/licenses/gpl.html">GNU General Public License</ulink> version 3 or (at your option) a later version. </para>
<section>
<title>Using</title>
<itemizedlist>
<listitem>
<para>FreedomBox Setup comes installed with all FreedomBox images. You can <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Download#">download</ulink> FreedomBox images and run on any of the supported hardware. </para>
</listitem>
<listitem>
<para>If you are on a Debian box, you may install FreedomBox Setup from Debian package archive. This essentially turns your Debian installation into a FreedomBox! Currently, only Sid (unstable) is supported. To install FreedomBox Setup, see <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Hardware/Debian#">instructions</ulink> on setting up FreedomBox on a Debian machine. </para>
</listitem>
<listitem>
<para>You can also get FreedomBox Setup from its <ulink url="https://salsa.debian.org/freedombox-team/freedombox-setup">Git repository</ulink> and <ulink url="https://salsa.debian.org/freedombox-team/freedombox-setup/blob/master/README">build Debian package from source</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Support</title>
<para>You may ask for support on </para>
<itemizedlist>
<listitem>
<para>
<ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">The mailing list</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Contributing</title>
<para>We are looking for help to improve FreedomBox Setup. </para>
<itemizedlist>
<listitem>
<para>Instructions on how to <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Contribute/Code#">contribute code</ulink> are available. </para>
</listitem>
<listitem>
<para>FreedomBox Setup is part of the <ulink url="https://salsa.debian.org/freedombox-team/freedombox-setup">FreedomBox Salsa Project</ulink>. </para>
</listitem>
<listitem>
<para>List of bugs, TODO items, packages issues and feature requests are available on the <ulink url="https://bugs.debian.org/cgi-bin/pkgreport.cgi?src=freedombox-setup">issue tracker</ulink>. </para>
</listitem>
<listitem>
<para>You can request for development assistance on <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the mailing list</ulink> or the <ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>. </para>
</listitem>
<listitem>
<para>See <ulink url="https://tracker.debian.org/pkg/freedombox-setup">Debian tracker</ulink> for information on Debian package. FreedomBox Setup is a Debian native package meaning it is primarily built for Debian and comes with Debian packaging scripts in its repository. </para>
</listitem>
</itemizedlist>
</section>
</section>
<section>
<title>Freedom Maker</title>
<para>Freedom Maker is a script to build FreedomBox disk images for use on various hardware devices or virtual machines. </para>
<para>Freedom Maker can currently build FreedomBox disk images for the following: </para>
<itemizedlist>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/OLinuXino#A20-OlinuXino-LIME">A20-OlinuXino-LIME</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/OLinuXino#A20-OlinuXino-LIME2">A20-OlinuXino-LIME2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/OLinuXino#A20-OLinuXino-MICRO">A20-OLinuXino-MICRO</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Banana_Pro">Banana Pro</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/BeagleBoard#BeagleBone">BeagleBone</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Cubieboard#Cubieboard2">Cubieboard2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Cubieboard#Cubietruck_.28Cubieboard3.29">Cubietruck</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://www.linksprite.com/linksprite-pcduino3/">pcDuino3</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi 2</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi 3 Model B</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi 3 Model B+</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/VirtualBox">VirtualBox</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://en.wikipedia.org/wiki/QEMU">QEMU</ulink>
</para>
</listitem>
<listitem>
<para><ulink url="https://en.wikipedia.org/wiki/X86-64#AMD64">AMD64 (x86-64) Machines</ulink>, <ulink url="https://en.wikipedia.org/wiki/X86">X86 Machines</ulink> and other virtual machines (using raw disk images) </para>
</listitem>
</itemizedlist>
<para>It relies on the <ulink url="http://liw.fi/vmdebootstrap/">vmdebootstrap</ulink> project actually create images. If a hardware platform is capable of running Debian, it should not be too much effort adopt Freedom Maker to create <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> images for the platform. </para>
<para>Freedom Maker is <ulink url="https://www.gnu.org/philosophy/">Free Software</ulink> licensed under <ulink url="https://www.gnu.org/licenses/gpl.html">GNU General Public License</ulink> version 3 or (at your option) a later version. </para>
<section>
<title>Building FreedomBox Images</title>
<itemizedlist>
<listitem>
<para>You can get Freedom Maker from its <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker.git">Git repository</ulink> and follow the instructions in the README to <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker/blob/master/README.md">build a FreedomBox image</ulink>. </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Support</title>
<para>You may ask for support on </para>
<itemizedlist>
<listitem>
<para>
<ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">The mailing list</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>
</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>Contributing</title>
<para>We are looking for help to improve Freedom Maker. </para>
<itemizedlist>
<listitem>
<para>Instructions on how to <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Contribute/Code#">contribute code</ulink> are available. </para>
</listitem>
<listitem>
<para>Freedom Maker is hosted at <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker">FreedomBox Salsa Project</ulink>. The primary Git repository is hosted <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker.git">there</ulink>. </para>
</listitem>
<listitem>
<para>You can contribute to FreedomBox by adding support for more hardware platforms. Freedom Maker can be easily adopted to newer platforms if they already support running Debian. </para>
</listitem>
<listitem>
<para>You can create and test images with Freedom Maker regularly to test for new features and check for regressions. </para>
</listitem>
<listitem>
<para>List of bugs, TODO items and feature requests are available on the <ulink url="https://salsa.debian.org/freedombox-team/freedom-maker/issues">issue tracker</ulink>. </para>
</listitem>
<listitem>
<para>You can request for development assistance on <ulink url="http://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">the mailing list</ulink> or the <ulink url="irc://irc.debian.org/freedombox">#freedombox IRC channel</ulink>. </para>
</listitem>
</itemizedlist>
</section>
</section>
</section>
<section>
<title>Tell people around you</title>
<itemizedlist>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Press#">FreedomBox in the Press</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/Conferences#">Conferences</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TalksAndPresentations#">Talks and presentations</ulink>
</para>
<itemizedlist>
<listitem>
<para><ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox/TalksAndPresentations/AvailableMaterial#">Available Material</ulink> Slides and other raw material </para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
<ulink url="http://www.facebook.com/freedomboxfoundation">Facebook</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://twitter.com/#!/FreedomBoxFndn">Twitter</ulink>
</para>
</listitem>
<listitem>
<para>
<ulink url="http://meetings-archive.debian.net/pub/debian-meetings/2011/debconf11/low/">Debconf11 Videos</ulink>
</para>
</listitem>
</itemizedlist>
</section>
</article>