Quellcode durchsuchen

Merge branch 'stretch' of https://github.com/bashrc/freedombone

Bob Mottram vor 6 Jahren
Ursprung
Commit
b6467fdea0
68 geänderte Dateien mit 2281 neuen und 1358 gelöschten Zeilen
  1. 8
    18
      README.md
  2. 1
    1
      doc/EN/app_pleroma.org
  3. 1
    1
      doc/EN/armbian.org
  4. 31
    0
      doc/EN/faq.org
  5. 3
    3
      doc/EN/homeserver.org
  6. 1
    1
      doc/EN/installation.org
  7. 0
    1
      doc/EN/mesh_capabilities.org
  8. 7
    7
      doc/EN/mesh_images.org
  9. 2
    29
      doc/EN/mobile.org
  10. 1
    1
      doc/EN/release3.org
  11. 1
    1
      doc/EN/release31.org
  12. 2
    2
      doc/EN/socialinstance.org
  13. BIN
      img/controlpanel/control_panel_about.jpg
  14. BIN
      man/freedombone-image.1.gz
  15. 1
    0
      src/freedombone-addremove
  16. 1
    0
      src/freedombone-app-etherpad
  17. 8
    3
      src/freedombone-app-gnusocial
  18. 2
    2
      src/freedombone-app-gogs
  19. 1
    0
      src/freedombone-app-hubzilla
  20. 1
    0
      src/freedombone-app-jitsi
  21. 2
    2
      src/freedombone-app-keyserver
  22. 3
    1
      src/freedombone-app-matrix
  23. 110
    3
      src/freedombone-app-pleroma
  24. 14
    7
      src/freedombone-app-postactiv
  25. 1
    0
      src/freedombone-app-riot
  26. 1
    0
      src/freedombone-app-scuttlebot
  27. 8
    6
      src/freedombone-app-searx
  28. 30
    16
      src/freedombone-app-tox
  29. 59
    7
      src/freedombone-app-xmpp
  30. 5
    22
      src/freedombone-base-email
  31. 1
    1
      src/freedombone-config
  32. 153
    114
      src/freedombone-controlpanel
  33. 4
    0
      src/freedombone-controlpanel-user
  34. 25
    5
      src/freedombone-image
  35. 12
    6
      src/freedombone-image-customise
  36. 11
    7
      src/freedombone-image-hardware-setup
  37. 6
    1
      src/freedombone-image-make
  38. 20
    15
      src/freedombone-image-makefile
  39. 1
    1
      src/freedombone-image-vmdebootstrap
  40. 32
    47
      src/freedombone-logging
  41. 1
    1
      src/freedombone-mesh-blog
  42. 3
    3
      src/freedombone-prepare-scripts
  43. 6
    0
      src/freedombone-tests
  44. 62
    0
      src/freedombone-tor-health
  45. 2
    1
      src/freedombone-upgrade
  46. 2
    2
      src/freedombone-utils-dns
  47. 49
    1
      src/freedombone-utils-firewall
  48. 1
    1
      src/freedombone-utils-gnusocialtools
  49. 2
    2
      src/freedombone-utils-mesh
  50. 114
    108
      src/freedombone-utils-onion
  51. 20
    0
      src/freedombone-utils-postgresql
  52. 86
    39
      src/freedombone-utils-selector
  53. 96
    25
      src/freedombone-utils-setup
  54. 4
    4
      src/freedombone-utils-web
  55. 2
    2
      src/freedombone-utils-wifi
  56. 13
    0
      tests/check-ssh.sh
  57. 9
    0
      tests/output.sh
  58. 45
    135
      website/EN/app_pleroma.html
  59. 122
    45
      website/EN/armbian.html
  60. 215
    140
      website/EN/faq.html
  61. 127
    46
      website/EN/homeserver.html
  62. 240
    185
      website/EN/installation.html
  63. 136
    61
      website/EN/mesh_capabilities.html
  64. 28
    28
      website/EN/mesh_images.html
  65. 152
    105
      website/EN/mobile.html
  66. 136
    55
      website/EN/release3.html
  67. 11
    11
      website/EN/release31.html
  68. 27
    27
      website/EN/socialinstance.html

+ 8
- 18
README.md Datei anzeigen

@@ -1,25 +1,15 @@
1
-<img src="https://github.com/bashrc/freedombone/blob/master/img/logo.png?raw=true" width=800/>
1
+<img src="https://github.com/bashrc/freedombone/blob/master/img/logo.png?raw=true" width=600/>
2 2
 
3
-> _"With the increasing move of our computing to cloud infrastructures, we give up the control of our computing to the managers of those infrastructures. Our terminals (laptops, desktops) might now be running entirely on Free Software, but this is increasingly irrelevant given that most of what actually matters gets executed on a remote closed system that we don’t control. The Free Software community needs to work to help users keep the control of all their computing, by developing suitable alternatives and facilitating their deployment."_ -- Lucas Nussbaum
3
+So you want to run your own internet services? Email, chat, VoIP, web sites, file synchronisation, wikis, blogs, social networks, media hosting, backups, VPN. Freedombone is a home server system which enables you to self-host all of these things.
4 4
 
5
-<img src="https://github.com/bashrc/freedombone/blob/master/img/bbb_above.jpg?raw=true" width=800/>
5
+You can run Freedombone on an old laptop or a single board computer. See the [list of installation methods](https://freedombone.net/installmethods.html). You can also use it to [set up a mesh network](https://freedombone.net/mesh.html) in your local area.
6 6
 
7
-So you want to run your own internet services? Email, chat, VoIP, web sites, file synchronisation, wikis, blogs, social networks, media hosting, backups, VPN. Freedombone enables you to do all of that in a self-hosted way, where you keep control of your data and it resides in your own home.
7
+Check out the [list of available apps](https://freedombone.net/apps.html) and [Frequently Asked Questions](https://freedombone.net/faq.html) section. Recent developments are also described on [the blog](https://blog.freedombone.net/tag/freedombone).
8 8
 
9
-[Here's how](https://freedombone.net/homeserver.html).
9
+Disk images which can be cloned straight to USB or microSD drives are [available here](https://freedombone.net/downloads/v31).
10 10
 
11
-And here's how [on a Beaglebone Black](https://freedombone.net/beaglebone.html). A list of other supported ARM boards [can be found here](https://freedombone.net/boards.html).
11
+If you find bugs, or want to add a new app to this system see the [Developers Guide](https://freedombone.net/devguide.html) and [Code of Conduct](https://freedombone.net/codeofconduct.html). There is a Matrix chat room available at *#fbone:matrix.freedombone.net*.
12 12
 
13
-Want to make a community mesh network which doesn't depend upon the internet? The [Freedombone Mesh](https://freedombone.net/mesh.html) is a wireless solution for autonomous communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised.
13
+If you like this project and want to support continued development then [here's what to do](https://freedombone.net/support.html).
14 14
 
15
-After installation it's possible that you might want some advice on how to run your system and set up apps to work nicely with it.
16
-
17
- * [Apps available on the system](https://freedombone.net/apps.html)
18
- * [General usage](https://freedombone.net/usage.html)
19
- * [Frequently Asked Questions](https://freedombone.net/faq.html)
20
- * [Advice on setting up on a mobile phone](https://freedombone.net/mobile.html)
21
- * [I like this project. How can I help to support it?](https://freedombone.net/support.html)
22
-
23
-If you find bugs, or want to add a new app to this system see the [Developers Guide](https://freedombone.net/devguide.html).
24
-
25
-Ready made disk images which can be copied onto USB or microSD drives are [available here](https://freedombone.net/downloads/v3).
15
+<a href="https://raw.githubusercontent.com/bashrc/freedombone/master/website/EN/fdl-1.3.txt"><img src="https://github.com/bashrc/freedombone/blob/master/img/gfdl.png?raw=true" width=80/></a>

+ 1
- 1
doc/EN/app_pleroma.org Datei anzeigen

@@ -32,7 +32,7 @@ Using cursor keys, space bar and Enter key select *Administrator controls* and t
32 32
 Select *Add/Remove Apps* then *pleroma*. You will then be asked for a domain name and if you are using FreeDNS also the code for the domain which can be found under *Dynamic DNS* on the FreeDNS site (the random string from "/quick cron example/" which appears after /update.php?/ and before />>/). For more details on obtaining a domain and making it accessible via dynamic DNS see the [[./faq.html][FAQ]]. Typically the domain name you use will be a subdomain, such as /pleroma.mydomainname.net/. It will need to be a domain which you have bought somewhere and own and not one of the FreeDNS subdomains, otherwise you won't be able to get a SSL/TLS certificate for it.
33 33
 
34 34
 * Initial setup
35
-The first thing you'll need to do is register a new account. You can set your profile details and profile image by selecting the small settings icon to the right of your name.
35
+The first thing you'll need to do is to obtain your login details. From the *administrator control panel* select *security settings* then *passwords* then *pleroma*. This gives the password you will need to log in, together with the username you gave during installation of the Freedombone system.
36 36
 
37 37
 Once you have done that then you can disable further registrations from the *Administrator control panel* by going to *App Settings* then *pleroma* then *Disable new account registrations*. This may take a while because the app gets recompiled afterwards.
38 38
 

+ 1
- 1
doc/EN/armbian.org Datei anzeigen

@@ -23,7 +23,7 @@ If you have a single board ARM computer which isn't one of the supported ones th
23 23
 Download the Armbian image for your board. It must be version 9 (Stretch), otherwise it won't work. Extract the image from its archive, then copy it to a microSD card:
24 24
 
25 25
 #+begin_src bash
26
-sudo dd bs=1M if=[Armbian .img file] of=/dev/sdX conv=fdatasync
26
+sudo dd bs=32M if=[Armbian .img file] of=/dev/sdX conv=fdatasync
27 27
 #+end_src
28 28
 
29 29
 Where */dev/sdX* is the path for the microSD drive on your system.

+ 31
- 0
doc/EN/faq.org Datei anzeigen

@@ -19,12 +19,15 @@
19 19
 #+ATTR_HTML: :border -1
20 20
 | [[What applications are supported?]]                                                          |
21 21
 | [[I don't have a static IP address. Can I still install this system?]]                        |
22
+| [[What are the best microSD cards to use?]]                                                   |
23
+| [[On a single board computer can I boot from an external SSD or hard drive?]]                 |
22 24
 | [[Why Freedombone and not FreedomBox?]]                                                       |
23 25
 | [[Why not support building images for Raspberry Pi?]]                                         |
24 26
 | [[Why use Tor? I've heard it's used by bad people]]                                           |
25 27
 | [[How is Tor integrated with Freedombone?]]                                                   |
26 28
 | [[Can I add a clearnet domain to an onion build?]]                                            |
27 29
 | [[Why use Github?]]                                                                           |
30
+| [[What are the data protection implications of running this system?]]                         |
28 31
 | [[After using nmap or other scanning tool I can no longer log in]]                            |
29 32
 | [[Should I upload my GPG keys to keybase.io?]]                                                |
30 33
 | [[Keys and emails should not be stored on servers. Why do you do that?]]                      |
@@ -59,6 +62,24 @@
59 62
 Yes. The minimum requirements are to have some hardware that you can install Debian onto and also that you have administrator access to your internet router so that you can forward ports to the system which has Freedombone installed.
60 63
 
61 64
 The lack of a static IP address can be worked around by using a dynamic DNS service. Freedombone uses [[https://troglobit.com/inadyn.html][inadyn]] , which supports a variety of dynamic DNS providers.
65
+* What are the best microSD cards to use?
66
+There can be big differences in the performance of microSD cards, and the cheaper ones are almost invariably terrible and/or unusable. Sandisk and Samsung currently appear to be the better brands. You can find some performance benchmarks [[http://www.pidramble.com/wiki/benchmarks/microsd-cards][here]]. However, benchmarks like this only give a very rough idea of performance and they can vary significantly between individual cards even within the same brand.
67
+* On a single board computer can I boot from an external SSD or hard drive?
68
+Some single board computers, such as Cubieboards or OLinuxino, have a SATA socket on them which enables an external drive to be connected. This is usually intended for extra file storage, but it is also possible to run the operating system from an external drive. This can have the advantage of significantly increasing the read/write performance and your apps will appear to run more quickly.
69
+
70
+Typically a microSD read speed is 10-30MB/s. An SSD or hard drive can be 100MB/s or more, so that's a big potential gain.
71
+
72
+Single board computers usually don't have the capability of booting directly from an external drive, but what you can do is boot from a partition on a microSD drive, which then runs the main filesystem (the rootfs) from the external drive.
73
+
74
+To create an image suitable for running from an SSD or hard drive use the --sata option, such as:
75
+
76
+#+BEGIN_SRC bash
77
+freedombone-image -t cubieboard2 --sata sda2
78
+#+END_SRC
79
+
80
+Note that the sata option should be set to point to the second partition on the drive, which is normally sda2.
81
+
82
+When the image is created then use the dd command to copy it both to a microSD card and to the SSD or hard drive. Plug them both into the board and it should then boot and use the external drive.
62 83
 * Why Freedombone and not FreedomBox?
63 84
 When the project began in late 2013 the FreedomBox project seemed to be going nowhere, and was only designed to work with the DreamPlug hardware. There was some new hardware out - the Beaglebone Black - which could run Debian and was also a free hardware design so seemed more appropriate. Hence the name "Freedombone", being like FreedomBox but on a Beaglebone. There are some similarities and differences between the two projects:
64 85
 
@@ -115,6 +136,16 @@ At present Github is useful just because of the sheer number of eyeballs and the
115 136
 The source code for this project is experimentally independently hosted, and it is expected that in future the main development will shift over to an independent site, maybe with mirrors on Github if it still exists in a viable form.
116 137
 
117 138
 Currently many of the repositories used for applications which are not yet packaged for Debian are on Github, and to provide some degree of resilliance against depending too much upon that copies of them also exist within disk images.
139
+* What are the data protection implications of running this system?
140
+Data protection laws such as [[https://en.wikipedia.org/wiki/General_Data_Protection_Regulation][GDPR]] in the EU or the [[https://en.wikipedia.org/wiki/Data_Protection_Act_1998][Data Protection Act]] in the UK usually only apply to formal organizations which are recognized as being legal entities. So you have to be running a business or a charity or some other formal organization in order for the storage of what's known as /personally identifying information/ to potentially become a legal issue. Laws like this usually include:
141
+
142
+ * A right to obtain your information
143
+ * A right to be forgotten (i.e. to have your data permanently deleted)
144
+ * Ensuring that stored personal data remains accurate
145
+
146
+If you're self-hosting then in the language of data protection law the "/data controller/" and the "/data subject/" are one and the same, so there isn't any power differential of that sort. Freedombone is only intended for small numbers of users, so if you are hosting more than one person chances are that you know the others quite well and can arrange to update their data or delete their account if that's needed. Even if data protection laws are later extended to include home server type scenarios it's unlikely that this will become a problem.
147
+
148
+For the mesh version similar applies. Each peer stores their own personal data and it never gets aggregated and stored in any centralized way.
118 149
 * After using nmap or other scanning tool I can no longer log in
119 150
 This system tries to block port scanners. Any other system trying to scan for open ports will have their IP address added to a temporary block list for 24 hours.
120 151
 * Should I upload my GPG keys to keybase.io?

+ 3
- 3
doc/EN/homeserver.org Datei anzeigen

@@ -69,8 +69,8 @@ Now plug in the USB thumb drive, and do the same again. Notice which drive lette
69 69
 You can now copy the image to the USB thumb drive, replacing *sdX* with the identifier of the USB thumb drive. Don't include any numbers (so for example use *sdc* instead of *sdc1*).
70 70
 
71 71
 #+begin_src bash
72
-dd if=/dev/zero of=/dev/sdX bs=1M count=8
73
-dd bs=1M if=myimagefile.img of=/dev/sdX conv=fdatasync
72
+dd if=/dev/zero of=/dev/sdX bs=32M count=8
73
+dd bs=32M if=myimagefile.img of=/dev/sdX conv=fdatasync
74 74
 #+end_src
75 75
 
76 76
 And wait. Again it will take a while to copy over. When that's done plug it into the laptop or netbook which you want to use as a server, power on and set the BIOS to boot from the USB stick.
@@ -119,7 +119,7 @@ Use the password you wrote down earlier to log in. Select the *administrator con
119 119
 
120 120
 Then select *About*. You'll see a list of sites and their onion addresses.
121 121
 
122
-#+attr_html: :width 80% :align center
122
+#+attr_html: :width 100% :align center
123 123
 [[file:images/controlpanel/control_panel_about.jpg]]
124 124
 
125 125
 The About screen contains the ssh server public key hashes and you can compare the relevant one with the previous terminal window to verify that they're the same. If they're not then you might have a /machine-in-the-middle/ snooping on you.

+ 1
- 1
doc/EN/installation.org Datei anzeigen

@@ -129,7 +129,7 @@ unxz filename.img.xz
129 129
 Then copy it to a microSD card. Depending on your system you may need an adaptor to be able to do that.
130 130
 
131 131
 #+BEGIN_SRC bash
132
-sudo dd bs=1M if=filename.img of=/dev/sdX conv=fdatasync
132
+sudo dd bs=32M if=filename.img of=/dev/sdX conv=fdatasync
133 133
 #+END_SRC
134 134
 
135 135
 Where *sdX* is the microSD drive. You can check which drive is the microSD drive using:

+ 0
- 1
doc/EN/mesh_capabilities.org Datei anzeigen

@@ -19,7 +19,6 @@ The mesh system has the following capabilities:
19 19
  - Private and public sharing of files
20 20
  - Blogging
21 21
  - Collaborative editing of documents and presentations
22
- - Creating and broadcasting audio media/podcasts
23 22
  - Social network stream. Follow/unfollow other peers
24 23
  - No network administration required
25 24
  - No servers

+ 7
- 7
doc/EN/mesh_images.org Datei anzeigen

@@ -41,8 +41,8 @@ wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz
41 41
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
42 42
 gpg --verify freedombone-meshclient-i386.img.xz.sig
43 43
 unxz freedombone-meshclient-i386.img.xz
44
-sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
45
-sudo dd bs=1M if=freedombone-meshclient-i386.img of=/dev/sdX conv=fdatasync
44
+sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8
45
+sudo dd bs=32M if=freedombone-meshclient-i386.img of=/dev/sdX conv=fdatasync
46 46
 #+end_src
47 47
 
48 48
 To get a number of systems onto the mesh repeat the /dd/ command to create however many bootable USB drives you need.
@@ -55,8 +55,8 @@ wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.
55 55
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
56 56
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
57 57
 unxz freedombone-meshclient-insecure-i386.img.xz
58
-sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
59
-sudo dd bs=1M if=freedombone-meshclient-insecure-i386.img of=/dev/sdX conv=fdatasync
58
+sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8
59
+sudo dd bs=32M if=freedombone-meshclient-insecure-i386.img of=/dev/sdX conv=fdatasync
60 60
 #+end_src
61 61
 
62 62
 ** Router images
@@ -75,7 +75,7 @@ gpg --verify freedombone-mesh_beaglebone-armhf.img.xz.sig
75 75
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
76 76
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
77 77
 unxz freedombone-mesh_beaglebone-armhf.img.xz
78
-sudo dd bs=1M if=freedombone-mesh_beaglebone-armhf.img of=/dev/sdX conv=fdatasync
78
+sudo dd bs=32M if=freedombone-mesh_beaglebone-armhf.img of=/dev/sdX conv=fdatasync
79 79
 #+end_src
80 80
 
81 81
 If you have a few Beaglebone Blacks to use as routers then repeat the /dd/ command to create however many microSD cards you need.
@@ -119,8 +119,8 @@ Now plug in the USB thumb drive, and do the same again. Notice which drive lette
119 119
 You can now copy the image to the USB thumb drive, replacing *sdX* with the identifier of the USB thumb drive. Don't include any numbers (so for example use *sdc* instead of *sdc1*).
120 120
 
121 121
 #+begin_src bash
122
-sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
123
-sudo dd bs=1M if=myimagefile.img of=/dev/sdX conv=fdatasync
122
+sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8
123
+sudo dd bs=32M if=myimagefile.img of=/dev/sdX conv=fdatasync
124 124
 #+end_src
125 125
 
126 126
 And wait. Again it will take a while to copy over. When that's done plug it into the laptop or netbook which you want to use on the mesh, power on and set the BIOS to boot from the USB stick.

+ 2
- 29
doc/EN/mobile.org Datei anzeigen

@@ -9,37 +9,8 @@
9 9
 #+attr_html: :width 80% :height 10% :align center
10 10
 [[file:images/logo.png]]
11 11
 
12
-* Mobile
13
-
14 12
 Mobile phones are insecure devices, but they're regarded as being so essential to modern life that telling people not to use them isn't a viable option. Here are some recommendations on setting up a mobile phone (aka "smartphone") to work with Freedombone.
15 13
 
16
-#+BEGIN_EXPORT html
17
- <center>
18
- <table style="width:80%; border:0">
19
-  <tr>
20
-    <td><center><b><h3>Open</h3></b><br>Use a free and open source operating system. Open means more trustworthy</center></td>
21
-    <td><center><b><h3>Remove</h3></b><br>If there are any proprietary apps then remove or deactivate them</center></td>
22
-  </tr>
23
-  <tr>
24
-    <td><center><b><h3>Encrypt</h3></b><br>Make sure your phone is encrypted with a password which isn't easy to guess</center></td>
25
-    <td><center><b><h3>Apps</h3></b><br>Use F-droid to install new apps</center></td>
26
-  </tr>
27
-  <tr>
28
-    <td><center><b><h3>Lock</h3></b><br>Enable a lock screen with a maximum number of password guesses</center></td>
29
-    <td><center><b><h3>Onion</h3></b><br>Onion route your connections to avoid bulk metadata collection</center></td>
30
-  </tr>
31
-  <tr>
32
-    <td><center><b><h3>Email</h3></b><br>Access webmail in a browser</center></td>
33
-    <td><center><b><h3>Services</h3></b><br>Connect to the Freedombone services</center></td>
34
-  </tr>
35
-  <tr>
36
-    <td><center><b><h3>Battery</h3></b><br>Avoid battery-eating apps and disable some optimisations</center></td>
37
-    <td><center><b><h3>Block</h3></b><br>Prevent access to know bad domains</center></td>
38
-  </tr>
39
-</table>
40
-</center>
41
-#+END_EXPORT
42
-
43 14
 * Open
44 15
 Use a Linux based phone operating system. Typically this will mean Android, but could also mean LineageOS or Replicant. LineageOS is the most preferable, because you can usually get an up to date image with a recent kernel which will give you better security against exploits. If you're buying a phone then look for a model which is supported by LineageOS. Replicant is the most free (as in freedom) but only runs on a small number of phone models. If you have a phone which runs a full GNU/Linux system then that's fantastic, and you can probably use it in much the same way as a desktop system and the rest of the advice on this page won't apply. If you don't have a phone capable of running a Linux based operating system then consider selling, giving away or bartering your existing one.
45 16
 
@@ -125,6 +96,8 @@ Now edit the hosts file which was pulled and append:
125 96
 127.0.0.1       www.google-analytics.com
126 97
 127.0.0.1       google-analytics.com
127 98
 127.0.0.1       ssl.google-analytics.com
99
+127.0.0.1       telemetry.mozilla.org
100
+127.0.0.1       incoming.telemetry.mozilla.org
128 101
 #+end_src
129 102
 
130 103
 Then upload the hosts file back again with:

+ 1
- 1
doc/EN/release3.org Datei anzeigen

@@ -31,7 +31,7 @@ Copy the image to a microSD card or USB thumb drive, replacing sdX with the iden
31 31
 
32 32
 #+BEGIN_SRC bash
33 33
 unxz downloadedimagefile.img.xz
34
-dd bs=1M if=downloadedimagefile.img of=/dev/sdX conv=fdatasync
34
+dd bs=32M if=downloadedimagefile.img of=/dev/sdX conv=fdatasync
35 35
 #+END_SRC
36 36
 
37 37
 And wait. It will take a while to copy over. When that's done you might want to increase the partition size on the drive, using a tool such as [[http://gparted.org][Gparted]]. Whether you need to do that will depend upon how many apps you intend to install and how much data they will store.

+ 1
- 1
doc/EN/release31.org Datei anzeigen

@@ -39,7 +39,7 @@ Copy the image to a microSD card or USB thumb drive, replacing sdX with the iden
39 39
 
40 40
 #+BEGIN_SRC bash
41 41
 unxz downloadedimagefile.img.xz
42
-dd bs=1M if=downloadedimagefile.img of=/dev/sdX conv=fdatasync
42
+dd bs=32M if=downloadedimagefile.img of=/dev/sdX conv=fdatasync
43 43
 #+END_SRC
44 44
 
45 45
 And wait. It will take a while to copy over. When that's done you might want to increase the partition size on the drive, using a tool such as [[http://gparted.org][Gparted]]. Whether you need to do that will depend upon how many apps you intend to install and how much data they will store.

+ 2
- 2
doc/EN/socialinstance.org Datei anzeigen

@@ -31,8 +31,8 @@ wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz
31 31
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
32 32
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
33 33
 unxz freedombone-pleroma-amd64.img.xz
34
-sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
35
-sudo dd bs=1M if=freedombone-pleroma-amd64.img of=/dev/sdX conv=fdatasync
34
+sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8
35
+sudo dd bs=32M if=freedombone-pleroma-amd64.img of=/dev/sdX conv=fdatasync
36 36
 #+end_src
37 37
 
38 38
 Also note that if the laptop has a removable SSD drive it's possible to copy the image directly to that if you have enough equipment.

BIN
img/controlpanel/control_panel_about.jpg Datei anzeigen


BIN
man/freedombone-image.1.gz Datei anzeigen


+ 1
- 0
src/freedombone-addremove Datei anzeigen

@@ -203,6 +203,7 @@ function install_apps_selected {
203 203
             fi
204 204
         fi
205 205
         app_index=$((app_index+1))
206
+
206 207
     done
207 208
 
208 209
     # if no apps to be installed then don't do anything

+ 1
- 0
src/freedombone-app-etherpad Datei anzeigen

@@ -30,6 +30,7 @@ VARIANTS="full full-vim writer"
30 30
 
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=1
33
+MINIMUM_RAM_MB=2000
33 34
 
34 35
 ETHERPAD_DOMAIN_NAME=
35 36
 ETHERPAD_CODE=

+ 8
- 3
src/freedombone-app-gnusocial Datei anzeigen

@@ -30,6 +30,7 @@ VARIANTS='full full-vim social'
30 30
 
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33 34
 
34 35
 GNUSOCIAL_DOMAIN_NAME=
35 36
 GNUSOCIAL_CODE=
@@ -581,6 +582,7 @@ function remove_gnusocial {
581 582
     fi
582 583
     kill_pid=$(pgrep "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
583 584
     kill -9 "$kill_pid"
585
+    pkill "$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/queuedaemon.php"
584 586
 
585 587
     if [ -d "/var/www/$GNUSOCIAL_DOMAIN_NAME" ]; then
586 588
         rm -rf "/var/www/$GNUSOCIAL_DOMAIN_NAME"
@@ -911,8 +913,8 @@ function install_gnusocial_main {
911 913
 }
912 914
 
913 915
 function install_gnusocial {
914
-    if [ ! "$ONION_ONLY" ]; then
915
-        ONION_ONLY='no'
916
+    if [[ "$ONION_ONLY" != 'no' ]]; then
917
+        return
916 918
     fi
917 919
 
918 920
     install_gnusocial_main
@@ -935,9 +937,12 @@ function install_gnusocial {
935 937
         sed -i 's|"theme":.*|"theme": "base16-apathy.css",|g' "/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs/static/config.json"
936 938
     fi
937 939
 
938
-    # unleash the daemons!
940
+    # this has to be run as root initially, otherwise database tables
941
+    # don't get created
939 942
     cd "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs" || exit 236482684
940 943
     php scripts/checkschema.php
944
+    sh scripts/startdaemons.sh
945
+
941 946
     /etc/cron.hourly/gnusocial-daemons
942 947
 
943 948
     systemctl restart nginx

+ 2
- 2
src/freedombone-app-gogs Datei anzeigen

@@ -655,11 +655,11 @@ function install_gogs {
655 655
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
656 656
         exit 877367
657 657
     fi
658
-    if ! grep -q "hidden_service_gogs" /etc/tor/torrc; then
658
+    if ! grep -q "hidden_service_gogs" "$ONION_SERVICES_FILE"; then
659 659
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_gogs/';
660 660
           echo 'HiddenServiceVersion 3';
661 661
           echo "HiddenServicePort 80 127.0.0.1:${GIT_ONION_PORT}";
662
-          echo "HiddenServicePort 9418 127.0.0.1:9418"; } >> /etc/tor/torrc
662
+          echo "HiddenServicePort 9418 127.0.0.1:9418"; } >> "$ONION_SERVICES_FILE"
663 663
         echo $'Added onion site for Gogs'
664 664
     fi
665 665
 

+ 1
- 0
src/freedombone-app-hubzilla Datei anzeigen

@@ -30,6 +30,7 @@ VARIANTS='full full-vim social'
30 30
 
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33 34
 
34 35
 HUBZILLA_DOMAIN_NAME=
35 36
 HUBZILLA_CODE=

+ 1
- 0
src/freedombone-app-jitsi Datei anzeigen

@@ -32,6 +32,7 @@ VARIANTS=""
32 32
 
33 33
 IN_DEFAULT_INSTALL=0
34 34
 SHOW_ON_ABOUT=0
35
+NOT_ON_ONION=1
35 36
 
36 37
 VIDEOBRIDGE_PORT=5347
37 38
 JITSI_ONION_PORT=8102

+ 2
- 2
src/freedombone-app-keyserver Datei anzeigen

@@ -656,12 +656,12 @@ function install_keyserver {
656 656
 
657 657
     chown debian-sks: $sksconf_file
658 658
 
659
-    if ! grep -q "hidden_service_sks" /etc/tor/torrc; then
659
+    if ! grep -q "hidden_service_sks" "$ONION_SERVICES_FILE"; then
660 660
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/';
661 661
           echo 'HiddenServiceVersion 3';
662 662
           echo "HiddenServicePort 11370 127.0.0.1:11370";
663 663
           echo "HiddenServicePort 11373 127.0.0.1:11371";
664
-          echo "HiddenServicePort 11372 127.0.0.1:11372"; } >> /etc/tor/torrc
664
+          echo "HiddenServicePort 11372 127.0.0.1:11372"; } >> "$ONION_SERVICES_FILE"
665 665
         echo $'Added onion site for sks'
666 666
     fi
667 667
 

+ 3
- 1
src/freedombone-app-matrix Datei anzeigen

@@ -36,6 +36,8 @@ VARIANTS='full full-vim chat'
36 36
 
37 37
 IN_DEFAULT_INSTALL=0
38 38
 SHOW_ON_ABOUT=1
39
+NOT_ON_ONION=1
40
+MINIMUM_RAM_MB=1500
39 41
 
40 42
 MATRIX_DOMAIN_NAME=
41 43
 MATRIX_CODE=
@@ -702,7 +704,7 @@ function install_home_server {
702 704
 
703 705
     #MATRIX_ONION_HOSTNAME=$(add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT})
704 706
     add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT}
705
-    echo "HiddenServicePort ${MATRIX_HTTP_PORT} 127.0.0.1:${MATRIX_FEDERATION_ONION_PORT}" >> /etc/tor/torrc
707
+    echo "HiddenServicePort ${MATRIX_HTTP_PORT} 127.0.0.1:${MATRIX_FEDERATION_ONION_PORT}" >> "$ONION_SERVICES_FILE"
706 708
     systemctl restart tor
707 709
 
708 710
     if [ ! "${MATRIX_PASSWORD}" ]; then

+ 110
- 3
src/freedombone-app-pleroma Datei anzeigen

@@ -36,7 +36,7 @@ PLEROMA_CODE=
36 36
 PLEROMA_PORT=4000
37 37
 PLEROMA_ONION_PORT=8011
38 38
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
39
-PLEROMA_COMMIT='e153b364a71de431787db236c57114f229162ddf'
39
+PLEROMA_COMMIT='762f6edc29a7a48e3a663e9bedec58e0036ff363'
40 40
 PLEROMA_ADMIN_PASSWORD=
41 41
 PLEROMA_DIR=/etc/pleroma
42 42
 PLEROMA_SECRET_KEY=""
@@ -62,6 +62,24 @@ pleroma_variables=(ONION_ONLY
62 62
                    MY_EMAIL_ADDRESS
63 63
                    MY_USERNAME)
64 64
 
65
+function pleroma_add_filtering {
66
+    if grep -q "# begin filtering" $pleroma_secret; then
67
+        return
68
+    fi
69
+    sed -i '/pbkdf2_rounds/a reject: []' $pleroma_secret
70
+    sed -i '/pbkdf2_rounds/a federated_timeline_removal: [],' $pleroma_secret
71
+    sed -i '/pbkdf2_rounds/a media_nsfw: [],' $pleroma_secret
72
+    sed -i '/pbkdf2_rounds/a media_removal: [],' $pleroma_secret
73
+    sed -i '/pbkdf2_rounds/a config :pleroma, :mrf_simple,' $pleroma_secret
74
+    sed -i '/pbkdf2_rounds/a # begin filtering' $pleroma_secret
75
+
76
+    sed -i 's|reject: |  reject: |g' $pleroma_secret
77
+    sed -i 's|federated_timeline_removal: |  federated_timeline_removal: |g' $pleroma_secret
78
+    sed -i 's|media_nsfw: |  media_nsfw: |g' $pleroma_secret
79
+    sed -i 's|media_removal: |  media_removal: |g' $pleroma_secret
80
+    create_pleroma_blocklist
81
+}
82
+
65 83
 function pleroma_enable_chat {
66 84
     if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
67 85
         sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
@@ -91,6 +109,7 @@ function create_pleroma_blocklist {
91 109
       echo 'users_query="DELETE FROM users WHERE"';
92 110
       echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
93 111
       echo 'websub_server_subscriptions_updated=';
112
+      echo 'filter_str=';
94 113
       echo 'while read blocked; do';
95 114
       echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
96 115
       echo "        if [ \${#blocked} -gt 4 ]; then";
@@ -102,6 +121,13 @@ function create_pleroma_blocklist {
102 121
       echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
103 122
       echo '            objects_updated=1';
104 123
       echo "            if [[ \"\$blocked\" != *\"@\"* ]]; then";
124
+      echo '                # Create a filter string for the pleroma configuration';
125
+      echo "                if [ \"\$filter_str\" ]; then";
126
+      echo "                    filter_str=\"\${filter_str}, \\\"\$blocked\\\"\"";
127
+      echo '                else';
128
+      echo "                    filter_str=\"\\\"\${blocked}\\\"\"";
129
+      echo '                fi';
130
+      echo '';
105 131
       echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
106 132
       echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
107 133
       echo '                fi';
@@ -115,6 +141,19 @@ function create_pleroma_blocklist {
115 141
       echo '    fi';
116 142
       echo 'done </root/freedombone-firewall-domains.cfg';
117 143
       echo '';
144
+      echo "if [ \"\$filter_str\" ]; then";
145
+      echo "    if ! grep -q \" \$filter_str \" $pleroma_secret; then";
146
+      echo "        sed -i \"s| media_removal:.*| media_removal: [ \$filter_str ],|g\" $pleroma_secret";
147
+      echo "        sed -i \"s| federated_timeline_removal:.*| federated_timeline_removal: [ \$filter_str ],|g\" $pleroma_secret";
148
+      echo "        sed -i \"s| reject:.*| reject: [ \$filter_str ]|g\" $pleroma_secret";
149
+      echo "        chown -R pleroma:pleroma $PLEROMA_DIR";
150
+      echo '        sudo -u pleroma mix clean';
151
+      echo '        sudo -u pleroma mix deps.compile';
152
+      echo '        sudo -u pleroma mix compile';
153
+      echo '        systemctl restart pleroma';
154
+      echo '    fi';
155
+      echo 'fi';
156
+      echo '';
118 157
       echo 'cd /etc/postgresql';
119 158
       echo "if [ \$objects_updated ]; then";
120 159
       echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
@@ -694,15 +733,21 @@ function configure_interactive_pleroma {
694 733
             enablechatstr=$'Disable chat system'
695 734
         fi
696 735
 
736
+        pleromatorstr=$'Enable routing through Tor for onion addresses'
737
+        if grep -q '9050' $pleroma_secret; then
738
+            pleromatorstr=$'Disable routing through Tor'
739
+        fi
740
+
697 741
         W=(1 $"Set a background image"
698 742
            2 $"Set the title"
699 743
            3 $"Disable new account registrations"
700 744
            4 $"Add a custom emoji"
701 745
            5 $"Set post expiry period (currently $PLEROMA_EXPIRE_MONTHS months)"
702
-           6 "$enablechatstr")
746
+           6 "$enablechatstr"
747
+           7 "$pleromatorstr")
703 748
 
704 749
         # shellcheck disable=SC2068
705
-        selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Pleroma" --menu $"Choose an operation, or ESC to exit:" 13 60 6 "${W[@]}" 3>&2 2>&1 1>&3)
750
+        selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Pleroma" --menu $"Choose an operation, or ESC to exit:" 14 60 7 "${W[@]}" 3>&2 2>&1 1>&3)
706 751
 
707 752
         if [ ! "$selection" ]; then
708 753
             break
@@ -720,14 +765,57 @@ function configure_interactive_pleroma {
720 765
                    pleroma_enable_chat true
721 766
                fi
722 767
                ;;
768
+            7) if grep -q '9050' $pleroma_secret; then
769
+                   pleroma_disable_tor
770
+               else
771
+                   pleroma_enable_tor
772
+               fi
773
+               ;;
723 774
         esac
724 775
     done
725 776
 }
726 777
 
778
+function pleroma_disable_tor {
779
+    if grep -q '9050' $pleroma_secret; then
780
+        sed -i '/9050/d' $pleroma_secret
781
+        sed -i 's|# config :pleroma, :http, proxy_url:|config :pleroma, :http, proxy_url:|g' $PLEROMA_DIR/config/config.exs
782
+        pleroma_recompile
783
+    fi
784
+}
785
+
786
+function pleroma_enable_tor {
787
+    pleroma_tor_update=
788
+
789
+    if ! grep -q '{:socks5, :localhost, 9050}' $pleroma_secret; then
790
+        pleroma_tor_update=1
791
+    fi
792
+
793
+    if ! grep -q '# config :pleroma, :http, proxy_url:' $PLEROMA_DIR/config/config.exs; then
794
+        pleroma_tor_update=1
795
+    fi
796
+
797
+    if [ ! $pleroma_tor_update ]; then
798
+        return
799
+    fi
800
+
801
+    if ! grep -q '{:socks5, :localhost, 9050}' $pleroma_secret; then
802
+        sed -i '/9050/d' $pleroma_secret
803
+        sed -i '/url:/a config :pleroma, :http, proxy_url: {:socks5, :localhost, 9050}' $pleroma_secret
804
+    fi
805
+
806
+    if ! grep -q '# config :pleroma, :http, proxy_url:' $PLEROMA_DIR/config/config.exs; then
807
+        sed -i 's|config :pleroma, :http, proxy_url:|# config :pleroma, :http, proxy_url:|g' $PLEROMA_DIR/config/config.exs
808
+    fi
809
+
810
+    pleroma_recompile
811
+}
812
+
727 813
 function upgrade_pleroma {
728 814
     read_config_param PLEROMA_DOMAIN_NAME
729 815
     read_config_param PLEROMA_EXPIRE_MONTHS
730 816
 
817
+    pleroma_add_filtering
818
+
731 819
     if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
732 820
         rm $pleroma_expire_posts_script
733 821
     fi
@@ -738,6 +826,8 @@ function upgrade_pleroma {
738 826
         create_pleroma_blocklist
739 827
     fi
740 828
 
829
+    #pleroma_enable_tor
830
+
741 831
     CURR_PLEROMA_COMMIT=$(get_completion_param "pleroma commit")
742 832
     if [[ "$CURR_PLEROMA_COMMIT" == "$PLEROMA_COMMIT" ]]; then
743 833
         return
@@ -748,6 +838,11 @@ function upgrade_pleroma {
748 838
         pleroma_registrations=
749 839
     fi
750 840
 
841
+    pleroma_chat_enabled=1
842
+    if grep -q ':chat, enabled: false' $PLEROMA_DIR/config/config.exs; then
843
+        pleroma_chat_enabled=
844
+    fi
845
+
751 846
     # make a copy of the configuration
752 847
     cp $PLEROMA_DIR/priv/static/static/config.json $PLEROMA_DIR/priv/static/static/config_prev.json
753 848
 
@@ -780,6 +875,12 @@ function upgrade_pleroma {
780 875
         sed -i 's|registrations_open: True|registrations_open: false|g' $PLEROMA_DIR/config/config.exs
781 876
     fi
782 877
 
878
+    if [ ! $pleroma_chat_enabled ]; then
879
+        sed -i 's|config :pleroma, :chat.*|config :pleroma, :chat, enabled: false|g' $PLEROMA_DIR/config/config.exs
880
+    else
881
+        sed -i 's|config :pleroma, :chat.*|config :pleroma, :chat, enabled: true|g' $PLEROMA_DIR/config/config.exs
882
+    fi
883
+
783 884
     pleroma_recompile
784 885
 
785 886
     # migrate database
@@ -1252,6 +1353,10 @@ function install_pleroma {
1252 1353
     sed -i 's|redirect_on_failure:.*|redirect_on_failure: false|g' $PLEROMA_DIR/config/config.exs
1253 1354
     sed -i 's|:chat, enabled:.*|:chat, enabled: false|g' $PLEROMA_DIR/config/config.exs
1254 1355
 
1356
+    # onion routing
1357
+    sed -i '/url:/a config :pleroma, :http, proxy_url: {:socks5, :localhost, 9050}' $pleroma_secret
1358
+    sed -i 's|config :pleroma, :http, proxy_url:|# config :pleroma, :http, proxy_url:|g' $PLEROMA_DIR/config/config.exs
1359
+
1255 1360
     # set registrations open initially
1256 1361
     sed -i 's|registrations_open:.*|registrations_open: true,|g' $PLEROMA_DIR/config/config.exs
1257 1362
     sed -i 's|"registrationOpen":.*|"registrationOpen": true,|g' $PLEROMA_DIR/priv/static/static/config.json
@@ -1264,6 +1369,8 @@ function install_pleroma {
1264 1369
     fi
1265 1370
     sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1266 1371
 
1372
+    pleroma_add_filtering
1373
+
1267 1374
     systemctl daemon-reload
1268 1375
     systemctl enable pleroma
1269 1376
     systemctl start pleroma

+ 14
- 7
src/freedombone-app-postactiv Datei anzeigen

@@ -30,6 +30,7 @@ VARIANTS='full full-vim media'
30 30
 
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33 34
 
34 35
 POSTACTIV_DOMAIN_NAME=
35 36
 POSTACTIV_CODE=
@@ -65,11 +66,11 @@ function postactiv_customise_logo {
65 66
     domain_name=$1
66 67
 
67 68
     if [ -f "/var/www/${domain_name}/htdocs/static/logo.png" ]; then
68
-        if [ -f ~/freedombone/img/postactiv.png ]; then
69
-            cp ~/freedombone/img/postactiv.png "/var/www/${domain_name}/htdocs/static/logo.png"
69
+        if [ -f "$HOME/${PROJECT_NAME}/img/postactiv.png" ]; then
70
+            cp "$HOME/${PROJECT_NAME}/img/postactiv.png" "/var/www/${domain_name}/htdocs/static/logo.png"
70 71
         else
71
-            if [ -f "/home/$MY_USERNAME/freedombone/img/postactiv.png" ]; then
72
-                cp "/home/$MY_USERNAME/freedombone/img/postactiv.png" "/var/www/${domain_name}/htdocs/static/logo.png"
72
+            if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/postactiv.png" ]; then
73
+                cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/postactiv.png" "/var/www/${domain_name}/htdocs/static/logo.png"
73 74
             fi
74 75
         fi
75 76
     fi
@@ -595,6 +596,7 @@ function remove_postactiv {
595 596
     fi
596 597
     kill_pid=$(pgrep "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
597 598
     kill -9 "$kill_pid"
599
+    pkill "$POSTACTIV_DOMAIN_NAME/htdocs/scripts/queuedaemon.php"
598 600
 
599 601
     if [ -d "/var/www/$POSTACTIV_DOMAIN_NAME" ]; then
600 602
         rm -rf "/var/www/$POSTACTIV_DOMAIN_NAME"
@@ -926,8 +928,8 @@ function install_postactiv_main {
926 928
 }
927 929
 
928 930
 function install_postactiv {
929
-    if [ ! "$ONION_ONLY" ]; then
930
-        ONION_ONLY='no'
931
+    if [[ "$ONION_ONLY" != 'no' ]]; then
932
+        return
931 933
     fi
932 934
 
933 935
     install_postactiv_main
@@ -952,7 +954,12 @@ function install_postactiv {
952 954
 
953 955
     expire_gnusocial_posts "$POSTACTIV_DOMAIN_NAME" "postactiv" "$POSTACTIV_EXPIRE_MONTHS"
954 956
 
955
-    # unleash the daemons!
957
+    # this has to be run as root initially, otherwise database tables
958
+    # don't get created
959
+    cd "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs" || exit 3658254254
960
+    sh scripts/startdaemons.sh
961
+    php scripts/checkschema.php
962
+
956 963
     /etc/cron.hourly/postactiv-daemons
957 964
 
958 965
     systemctl restart nginx

+ 1
- 0
src/freedombone-app-riot Datei anzeigen

@@ -30,6 +30,7 @@ VARIANTS='full full-vim chat'
30 30
 
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33 34
 
34 35
 RIOT_VERSION='0.13.3'
35 36
 RIOT_FILENAME="riot-v${RIOT_VERSION}"

+ 1
- 0
src/freedombone-app-scuttlebot Datei anzeigen

@@ -376,6 +376,7 @@ function install_dat {
376 376
 }
377 377
 
378 378
 function mesh_install_scuttlebot {
379
+    #shellcheck disable=SC2153
379 380
     if [[ "$VARIANT" != "meshclient" && "$VARIANT" != "meshusb" ]]; then
380 381
         return
381 382
     fi

+ 8
- 6
src/freedombone-app-searx Datei anzeigen

@@ -35,6 +35,7 @@ SHOW_ICANN_ADDRESS_ON_ABOUT=0
35 35
 SEARX_REPO="https://github.com/asciimoo/searx"
36 36
 SEARX_COMMIT='80460be8f69cea5f15c9d5ddbb63e4e48fde2dd0'
37 37
 SEARX_PATH=/etc
38
+SEARX_PORT=8888
38 39
 SEARX_ONION_PORT=8094
39 40
 SEARX_ONION_HOSTNAME=
40 41
 SEARX_LOGIN_TEXT=$"Search engine login"
@@ -55,12 +56,12 @@ function logging_off_searx {
55 56
 }
56 57
 
57 58
 function searx_set_default_background {
58
-    if [ -f ~/freedombone/img/backgrounds/searx.jpg ]; then
59
-        cp ~/freedombone/img/backgrounds/searx.jpg /etc/searx/searx/static/themes/courgette/img/bg-body-index.jpg
59
+    if [ -f "$HOME/${PROJECT_NAME}/img/backgrounds/searx.jpg" ]; then
60
+        cp "$HOME/${PROJECT_NAME}/img/backgrounds/searx.jpg" /etc/searx/searx/static/themes/courgette/img/bg-body-index.jpg
60 61
         chown -R searx:searx ${SEARX_PATH}/searx
61 62
     else
62
-        if [ -f "/home/$MY_USERNAME/freedombone/img/backgrounds/searx.jpg" ]; then
63
-            cp "/home/$MY_USERNAME/freedombone/img/backgrounds/searx.jpg" "/etc/searx/searx/static/themes/courgette/img/bg-body-index.jpg"
63
+        if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/searx.jpg" ]; then
64
+            cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/searx.jpg" "/etc/searx/searx/static/themes/courgette/img/bg-body-index.jpg"
64 65
             chown -R searx:searx ${SEARX_PATH}/searx
65 66
         fi
66 67
     fi
@@ -258,7 +259,7 @@ function create_searx_config {
258 259
       echo '    language : "all"';
259 260
       echo '';
260 261
       echo 'server:';
261
-      echo '    port : 8888';
262
+      echo "    port : ${SEARX_PORT}";
262 263
       echo '    bind_address : "127.0.0.1" # address to listen on';
263 264
       echo "    secret_key : \"${SEARX_SECRET_KEY}\"";
264 265
       echo "    base_url : http://${SEARX_ONION_HOSTNAME}/";
@@ -926,6 +927,7 @@ function install_searx {
926 927
     set_completion_param "searx commit" "$SEARX_COMMIT"
927 928
 
928 929
     # create an onion service
930
+    USE_V2_ONION_ADDRESS=1
929 931
     SEARX_ONION_HOSTNAME=$(add_onion_service searx 80 ${SEARX_ONION_PORT})
930 932
 
931 933
     # an unprivileged user to run as
@@ -965,7 +967,7 @@ function install_searx {
965 967
       echo '    location / {'; } >> /etc/nginx/sites-available/searx
966 968
     function_check nginx_limits
967 969
     nginx_limits searx '1M'
968
-    { echo '        proxy_pass http://localhost:8888;';
970
+    { echo "        proxy_pass http://localhost:${SEARX_PORT};";
969 971
       echo "        #auth_basic \"${SEARX_LOGIN_TEXT}\";";
970 972
       echo '        #auth_basic_user_file /etc/nginx/.htpasswd;';
971 973
       echo '    }';

+ 30
- 16
src/freedombone-app-tox Datei anzeigen

@@ -35,7 +35,7 @@ TOX_PORT=33445
35 35
 
36 36
 # upstream is https://github.com/TokTok/c-toxcore
37 37
 TOXCORE_REPO="https://github.com/bashrc/toxcore"
38
-TOXCORE_COMMIT='987ad5eac173442d6ad2d5cd80c2da763a815a9a'
38
+TOXCORE_COMMIT='7d399cedcfd20f0d91a8caf386ae3c63f4dcf285'
39 39
 
40 40
 TOXID_REPO="https://github.com/bashrc/toxid"
41 41
 TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
@@ -47,7 +47,7 @@ TOX_NODES=
47 47
 #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
48 48
 #)
49 49
 TOXIC_REPO="https://github.com/Tox/toxic"
50
-TOXIC_COMMIT='5cc83a7cb584886d90d7da15e8398215fed0d315'
50
+TOXIC_COMMIT='68ce17a57fd05599968a299e5dc516e183ebcf75'
51 51
 TOXIC_FILE=/usr/local/bin/toxic
52 52
 
53 53
 QTOX_REPO="https://github.com/bashrc/qTox"
@@ -184,8 +184,12 @@ function upgrade_tox {
184 184
     if [[ $(commit_has_changed "$INSTALL_DIR/toxcore" "toxcore commit" "$TOXCORE_COMMIT") == "1" ]]; then
185 185
         cd "$INSTALL_DIR/toxcore" || exit 53683563
186 186
         sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/tox-bootstrapd --config /etc/tox-bootstrapd.conf|g' "$rootdir/etc/systemd/system/tox-bootstrapd.service"
187
-        autoreconf -i
188
-        ./configure --enable-daemon
187
+        ./autogen.sh
188
+        if [ ! -d "$INSTALL_DIR/toxcore/_build" ]; then
189
+            mkdir "$INSTALL_DIR/toxcore/_build"
190
+        fi
191
+        cd "$INSTALL_DIR/toxcore/_build" || return
192
+        cmake ..
189 193
         make
190 194
         make install
191 195
         systemctl daemon-reload
@@ -426,6 +430,7 @@ function install_tox_client {
426 430
 }
427 431
 
428 432
 function mesh_tox_node {
433
+    SECONDS=0
429 434
     # obtain commits from the main file
430 435
     TOXCORE_COMMIT_MAIN=$(grep "TOXCORE_COMMIT=" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-tox" | head -n 1 | awk -F "'" '{print $2}')
431 436
     if [ ${#TOXCORE_COMMIT_MAIN} -gt 10 ]; then
@@ -478,13 +483,13 @@ function mesh_tox_node {
478 483
         chroot "${rootdir}" apt-get -yq install automake checkinstall check git yasm
479 484
         chroot "${rootdir}" apt-get -yq install libsodium18 libsodium-dev libcap2-bin
480 485
         chroot "${rootdir}" apt-get -yq install libconfig9 libconfig-dev autoconf
481
-        chroot "${rootdir}" apt-get -yq install libopus-dev libvpx-dev
486
+        chroot "${rootdir}" apt-get -yq install libopus-dev libvpx-dev cmake
482 487
     else
483 488
         apt-get -yq install build-essential libtool autotools-dev
484 489
         apt-get -yq install automake checkinstall check git yasm
485 490
         apt-get -yq install libsodium18 libsodium-dev libcap2-bin
486 491
         apt-get -yq install libconfig9 libconfig-dev autoconf
487
-        apt-get -yq install libopus-dev libvpx-dev
492
+        apt-get -yq install libopus-dev libvpx-dev cmake
488 493
     fi
489 494
 
490 495
     if [ ! -d "${rootdir}${INSTALL_DIR}" ]; then
@@ -508,23 +513,27 @@ function mesh_tox_node {
508 513
     if [ "${rootdir}" ]; then
509 514
         chroot "${rootdir}" /bin/bash -x <<EOF
510 515
 cd ${INSTALL_DIR}/toxcore
511
-autoreconf -i
512
-./configure --enable-daemon
516
+./autogen.sh
517
+mkdir _build
518
+cd _build || exit 1
519
+cmake ..
513 520
 make
514 521
 make install
515 522
 EOF
516 523
     else
517 524
         /bin/bash -x <<EOF
518 525
 cd ${INSTALL_DIR}/toxcore
519
-autoreconf -i
520
-./configure --enable-daemon
526
+./autogen.sh
527
+mkdir _build
528
+cd _build || exit 1
529
+cmake ..
521 530
 make
522 531
 make install
523 532
 EOF
524 533
     fi
525 534
 
526 535
     # shellcheck disable=SC2086
527
-    cp $rootdir/usr/local/lib/libtoxcore* "$rootdir/usr/lib/"
536
+    cp -l $rootdir/usr/local/lib/libtoxcore* "$rootdir/usr/lib/"
528 537
     cp "${rootdir}${INSTALL_DIR}/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" "$rootdir/etc/systemd/system/"
529 538
     sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/tox-bootstrapd --config /etc/tox-bootstrapd.conf|g' "$rootdir/etc/systemd/system/tox-bootstrapd.service"
530 539
     if [ "${rootdir}" ]; then
@@ -533,7 +542,6 @@ EOF
533 542
         systemctl enable tox-bootstrapd.service
534 543
     fi
535 544
 
536
-    SECONDS=0
537 545
     if [ ! -f "$rootdir/usr/local/bin/tox-bootstrapd" ]; then
538 546
         duration=$SECONDS
539 547
         echo $"Toxcore compile failed at $((duration / 60)) minutes and $((duration % 60)) seconds elapsed."
@@ -690,11 +698,14 @@ function mesh_tox_client {
690 698
     if [ "${rootdir}" ]; then
691 699
         chroot "${rootdir}" apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
692 700
         chroot "${rootdir}" apt-get -yq install libcurl4-openssl-dev libvpx-dev libopenal-dev
693
-        chroot "${rootdir}" apt-get -yq install libqrencode-dev
701
+        chroot "${rootdir}" apt-get -yq install libqrencode-dev libpng-dev libncurses5-dev libalut-dev
702
+        chroot "${rootdir}" apt-get -yq install libnotify-dev python3-dev
703
+        toxic_disable_notify=0
694 704
     else
695 705
         apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
696 706
         apt-get -yq install libcurl4-openssl-dev libvpx-dev libopenal-dev
697
-        apt-get -yq install libqrencode-dev
707
+        apt-get -yq install libqrencode-dev libpng-dev libncurses5-dev libalut-dev python3-dev
708
+        toxic_disable_notify=1
698 709
     fi
699 710
 
700 711
     TEMP_SCRIPT_NAME=fbtmp728353.sh
@@ -711,8 +722,11 @@ function mesh_tox_client {
711 722
       echo 'fi';
712 723
       echo "cd $INSTALL_DIR/toxic";
713 724
       echo "git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT";
714
-      echo 'make';
715
-      echo 'if [ ! "$?" = "0" ]; then';
725
+      echo "export DISABLE_DESKTOP_NOTIFY=$toxic_disable_notify";
726
+      echo "export DISABLE_AV=$toxic_disable_notify";
727
+      echo "export DISABLE_X11=$toxic_disable_notify";
728
+      echo "export DISABLE_SOUND_NOTIFY=$toxic_disable_notify";
729
+      echo 'if ! make; then';
716 730
       echo '    exit 1';
717 731
       echo 'fi';
718 732
       echo 'make install';

+ 59
- 7
src/freedombone-app-xmpp Datei anzeigen

@@ -51,6 +51,7 @@ prosody_nightly_url="https://prosody.im/nightly/${prosody_latest_version}/latest
51 51
 # From https://hg.prosody.im/prosody-modules
52 52
 prosody_modules_filename='prosody-modules-20180322.tar.gz'
53 53
 prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072'
54
+xmpp_encryption_warning=$"For security reasons, OMEMO or PGP encryption is required for conversations on this server."
54 55
 
55 56
 xmpp_variables=(ONION_ONLY
56 57
                 INSTALLED_WITHIN_DOCKER
@@ -62,6 +63,37 @@ xmpp_variables=(ONION_ONLY
62 63
                 DEFAULT_DOMAIN_NAME
63 64
                 XMPP_DOMAIN_CODE)
64 65
 
66
+function xmpp_update_e2e_policy {
67
+    filename="$1"
68
+
69
+    read_config_param DEFAULT_DOMAIN_NAME
70
+    read_config_param ONION_ONLY
71
+
72
+    if ! grep -q "e2e_policy_muc" "$filename"; then
73
+        echo "e2e_policy_muc = \"none\"" >> "$filename"
74
+    else
75
+        sed -i 's|e2e_policy_muc.*|e2e_policy_muc = "none"|g' "$filename"
76
+    fi
77
+    if ! grep -q "e2e_policy_chat" "$filename"; then
78
+        echo "e2e_policy_chat = \"required\"" >> "$filename"
79
+    else
80
+        sed -i 's|e2e_policy_chat.*|e2e_policy_chat = "required"|g' "$filename"
81
+    fi
82
+    if ! grep -q "e2e_policy_message_required_chat" "$filename"; then
83
+        echo "e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"" >> "$filename"
84
+    else
85
+        sed -i "s|e2e_policy_message_required_chat.*|e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"|g" "$filename"
86
+    fi
87
+
88
+    if [[ "$ONION_ONLY" != 'no' ]]; then
89
+        XMPP_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_xmpp/hostname)
90
+        sed -i "s|VirtualHost \".*.onion.*|VirtualHost \"${XMPP_ONION_HOSTNAME}\"|g" "$filename"
91
+        # TLS is not strictly needed for onion transport security
92
+        sed -i 's|c2s_require_encryption =.*|c2s_require_encryption = false|g' "$filename"
93
+        sed -i 's|s2s_require_encryption =.*|s2s_require_encryption = false|g' "$filename"
94
+    fi
95
+}
96
+
65 97
 function logging_on_xmpp {
66 98
     if [ -d /etc/prosody ]; then
67 99
         if [ ! -d /var/log/prosody ]; then
@@ -345,11 +377,11 @@ function update_prosody_modules {
345 377
 
346 378
     if [ ! -f "$INSTALL_DIR/$prosody_modules_filename" ]; then
347 379
         # Obtain the modules
348
-        if [ -f ~/freedombone/image_build/$prosody_modules_filename ]; then
349
-            cp ~/freedombone/image_build/$prosody_modules_filename "$INSTALL_DIR"
380
+        if [ -f "$HOME/${PROJECT_NAME}/image_build/$prosody_modules_filename" ]; then
381
+            cp "$HOME/${PROJECT_NAME}/image_build/$prosody_modules_filename" "$INSTALL_DIR"
350 382
         else
351
-            if [ -f "/home/$MY_USERNAME/freedombone/image_build/$prosody_modules_filename" ]; then
352
-                cp "/home/$MY_USERNAME/freedombone/image_build/$prosody_modules_filename" "$INSTALL_DIR"
383
+            if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/image_build/$prosody_modules_filename" ]; then
384
+                cp "/home/$MY_USERNAME/${PROJECT_NAME}/image_build/$prosody_modules_filename" "$INSTALL_DIR"
353 385
             fi
354 386
         fi
355 387
 
@@ -425,6 +457,10 @@ function upgrade_xmpp {
425 457
             usermod -a -G ssl-cert prosody
426 458
         fi
427 459
     fi
460
+
461
+    xmpp_update_e2e_policy /etc/prosody/conf.avail/xmpp.cfg.lua
462
+    xmpp_update_e2e_policy /etc/prosody/prosody.cfg.lua
463
+
428 464
     prosody_daemon_restart_script
429 465
     function_check update_prosody_modules
430 466
     update_prosody_modules
@@ -608,7 +644,7 @@ function remove_xmpp {
608 644
 
609 645
     function_check remove_onion_service
610 646
     remove_onion_service xmpp 5222 5223 5269
611
-    sed -i '/HiddenServiceVersion 2/d' /etc/tor/torrc
647
+    sed -i '/HiddenServiceVersion 2/d' "$ONION_SERVICES_FILE"
612 648
 
613 649
     apt-mark -q unhold prosody
614 650
     apt-get -yq remove --purge prosody
@@ -818,11 +854,16 @@ function xmpp_create_config {
818 854
     else
819 855
         echo "    dhparam = \"/etc/ssl/certs/xmpp.dhparam\";" >> /etc/prosody/prosody.cfg.lua
820 856
     fi
857
+
821 858
     { echo '}';
822 859
       echo '';
823 860
       echo 'c2s_require_encryption = true';
824 861
       echo 's2s_require_encryption = true';
825 862
       echo '';
863
+      echo 'e2e_policy_muc = "none"';
864
+      echo 'e2e_policy_chat = "required"';
865
+      echo "e2e_policy_message_required_chat = \"$xmpp_encryption_warning\"";
866
+      echo '';
826 867
       echo 's2s_secure_auth = false';
827 868
       echo '';
828 869
       echo 'authentication = "internal_hashed"';
@@ -838,6 +879,9 @@ function xmpp_create_config {
838 879
       echo ''; } >> /etc/prosody/prosody.cfg.lua
839 880
     if [[ "$ONION_ONLY" != 'no' ]]; then
840 881
         echo "VirtualHost \"${XMPP_ONION_HOSTNAME}\"" >> /etc/prosody/prosody.cfg.lua
882
+        # TLS is not needed for onion transport security
883
+        sed -i 's|s2s_require_encryption =.*|s2s_require_encryption = false|g' /etc/prosody/prosody.cfg.lua
884
+        sed -i 's|c2s_require_encryption =.*|c2s_require_encryption = false|g' /etc/prosody/prosody.cfg.lua
841 885
     else
842 886
         echo "VirtualHost \"${DEFAULT_DOMAIN_NAME}\"" >> /etc/prosody/prosody.cfg.lua
843 887
     fi
@@ -1068,6 +1112,14 @@ function install_xmpp {
1068 1112
     else
1069 1113
         sed -i 's|s2s_require_encryption.*|s2s_require_encryption = true|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1070 1114
     fi
1115
+
1116
+    if [[ "$ONION_ONLY" != 'no' ]]; then
1117
+        sed -i 's|c2s_require_encryption.*|c2s_require_encryption = false|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1118
+        sed -i 's|s2s_require_encryption.*|s2s_require_encryption = false|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1119
+    fi
1120
+
1121
+    xmpp_update_e2e_policy /etc/prosody/conf.avail/xmpp.cfg.lua
1122
+
1071 1123
     if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/conf.avail/xmpp.cfg.lua; then
1072 1124
         echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
1073 1125
     else
@@ -1079,11 +1131,11 @@ function install_xmpp {
1079 1131
         echo $'No Tor installation found. xmpp onion site cannot be configured.'
1080 1132
         exit 877367
1081 1133
     fi
1082
-    if ! grep -q "hidden_service_xmpp" /etc/tor/torrc; then
1134
+    if ! grep -q "hidden_service_xmpp" "$ONION_SERVICES_FILE"; then
1083 1135
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_xmpp/';
1084 1136
           echo 'HiddenServiceVersion 2';
1085 1137
           echo "HiddenServicePort 5222 127.0.0.1:5222";
1086
-          echo "HiddenServicePort 5269 127.0.0.1:5269"; } >> /etc/tor/torrc
1138
+          echo "HiddenServicePort 5269 127.0.0.1:5269"; } >> "$ONION_SERVICES_FILE"
1087 1139
         echo $'Added onion site for xmpp chat'
1088 1140
     fi
1089 1141
 

+ 5
- 22
src/freedombone-base-email Datei anzeigen

@@ -224,12 +224,12 @@ function email_create_template {
224 224
 
225 225
 function create_email_onion_address {
226 226
     email_hostname='/var/lib/tor/hidden_service_email/hostname'
227
-    if ! grep -q "hidden_service_email" /etc/tor/torrc; then
227
+    if ! grep -q "hidden_service_email" $ONION_SERVICES_FILE; then
228 228
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_email/';
229 229
           echo 'HiddenServiceVersion 3';
230 230
           echo 'HiddenServicePort 25 127.0.0.1:25';
231 231
           echo 'HiddenServicePort 587 127.0.0.1:587';
232
-          echo 'HiddenServicePort 465 127.0.0.1:465'; } >> /etc/tor/torrc
232
+          echo 'HiddenServicePort 465 127.0.0.1:465'; } >> $ONION_SERVICES_FILE
233 233
 
234 234
         function_check onion_update
235 235
         onion_update
@@ -320,26 +320,9 @@ function configure_email_onion {
320 320
       echo "  hosts_avoid_tls = *";
321 321
       echo "  socks_proxy = 127.0.0.1 port=9050"; } > /etc/exim4/conf.d/transport/050_exim4-config_onion_relay
322 322
 
323
-    if ! grep -q "AutomapHostsOnResolve" /etc/tor/torrc; then
324
-        echo 'AutomapHostsOnResolve 1' >> /etc/tor/torrc
325
-    else
326
-        sed -i 's|#AutomapHostsOnResolve.*|AutomapHostsOnResolve 1|g' /etc/tor/torrc
327
-        sed -i 's|AutomapHostsOnResolve.*|AutomapHostsOnResolve 1|g' /etc/tor/torrc
328
-    fi
329
-
330
-    if ! grep -q "DNSPort " /etc/tor/torrc; then
331
-        echo 'DNSPort 5300' >> /etc/tor/torrc
332
-    else
333
-        sed -i 's|#DNSPort .*|DNSPort 5300|g' /etc/tor/torrc
334
-        sed -i 's|DNSPort .*|DNSPort 5300|g' /etc/tor/torrc
335
-    fi
336
-
337
-    if ! grep -q "DNSListenAddress" /etc/tor/torrc; then
338
-        echo 'DNSListenAddress 127.0.0.1' >> /etc/tor/torrc
339
-    else
340
-        sed -i 's|#DNSListenAddress.*|DNSListenAddress 127.0.0.1|g' /etc/tor/torrc
341
-        sed -i 's|DNSListenAddress.*|DNSListenAddress 127.0.0.1|g' /etc/tor/torrc
342
-    fi
323
+    { echo 'DNSPort 5300';
324
+      echo 'DNSListenAddress 127.0.0.1';
325
+      echo 'AutomapHostsOnResolve 1'; } > /etc/torrc.d/dns
343 326
 
344 327
     update-exim4.conf.template -r
345 328
     update-exim4.conf

+ 1
- 1
src/freedombone-config Datei anzeigen

@@ -138,7 +138,7 @@ function show_help {
138 138
     echo ''
139 139
     echo ''
140 140
     echo $'  -h --help                         Show help'
141
-    echo $'  -f --filename                     Configuration file (usually freedombone.cfg)'
141
+    echo $"  -f --filename                     Configuration file (usually ${PROJECT_NAME}.cfg)"
142 142
     echo $'  -m --min                          Minimum password length (characters)'
143 143
     echo $'  -w --www                          Freedombone web site'
144 144
     echo $'  -o --onion [yes|no]               Whether to only create .onion sites'

+ 153
- 114
src/freedombone-controlpanel Datei anzeigen

@@ -224,108 +224,153 @@ function show_tor_bridges {
224 224
 function show_domains {
225 225
     read_config_param "DEFAULT_DOMAIN_NAME"
226 226
 
227
-    W=()
227
+    while true
228
+    do
229
+        W=()
228 230
 
229
-    W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)")
230
-    ipv6_address="$(get_ipv6_address)"
231
-    if [ ${#ipv6_address} -gt 0 ]; then
232
-        W+=("IPv6" "${ipv6_address}")
233
-    fi
231
+        W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)")
232
+        ipv6_address="$(get_ipv6_address)"
233
+        if [ ${#ipv6_address} -gt 0 ]; then
234
+            W+=("IPv6" "${ipv6_address}")
235
+        fi
234 236
 
237
+        if [ -f /etc/ssh/ssh_host_rsa_key.pub ]; then
238
+            W+=("ssh rsa sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')")
239
+        fi
240
+        if [ -f /etc/ssh/ssh_host_ed25519_key.pub ]; then
241
+            W+=("ssh ed25519 sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')")
242
+        fi
235 243
 
236
-    if grep -q "ssh onion domain" "$COMPLETION_FILE"; then
237
-        domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
238
-        W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}")
239
-    fi
240
-    if grep -q "email onion domain" "$COMPLETION_FILE"; then
241
-        domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
242
-        W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}")
243
-    fi
244
-    if grep -q "sks onion domain" "$COMPLETION_FILE"; then
245
-        read_config_param "KEYSERVER_DOMAIN_NAME"
246
-        domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
247
-        W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}")
248
-    fi
244
+        if grep -q "ssh onion domain" "$COMPLETION_FILE"; then
245
+            domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
246
+            W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}")
247
+        fi
248
+        if grep -q "email onion domain" "$COMPLETION_FILE"; then
249
+            domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
250
+            W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}")
251
+        fi
252
+        if grep -q "sks onion domain" "$COMPLETION_FILE"; then
253
+            read_config_param "KEYSERVER_DOMAIN_NAME"
254
+            domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}')
255
+            W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}")
256
+        fi
249 257
 
250
-    INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl
251
-    if [ -f $INTRODUCER_FILENAME ]; then
252
-        W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)")
253
-    fi
258
+        INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl
259
+        if [ -f $INTRODUCER_FILENAME ]; then
260
+            W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)")
261
+        fi
254 262
 
255
-    show_tor_bridges
263
+        show_tor_bridges
256 264
 
257
-    # shellcheck disable=SC2068
258
-    for app_name in ${APPS_INSTALLED_NAMES[@]}
259
-    do
260
-        if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
261
-            continue
262
-        fi
265
+        # shellcheck disable=SC2068
266
+        for app_name in ${APPS_INSTALLED_NAMES[@]}
267
+        do
268
+            if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
269
+                continue
270
+            fi
263 271
 
264
-        # handle the foibles of capitalisation
265
-        if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then
266
-            app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}')
267
-            if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then
268
-                app_name=${app_name_upper}
269
-            else
270
-                app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}"
271
-                if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then
272
-                    app_name=${app_name_first_upper}
272
+            # handle the foibles of capitalisation
273
+            if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then
274
+                app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}')
275
+                if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then
276
+                    app_name=${app_name_upper}
277
+                else
278
+                    app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}"
279
+                    if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then
280
+                        app_name=${app_name_first_upper}
281
+                    fi
273 282
                 fi
274 283
             fi
275
-        fi
276 284
 
277
-        if [ ${#app_name} -gt 0 ]; then
278
-            icann_address=$(get_app_icann_address "$app_name")
279
-            if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
280
-                icann_address='-'
281
-            fi
282
-            if [[ "$ONION_ONLY" != 'no' ]]; then
283
-                if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then
285
+            if [ ${#app_name} -gt 0 ]; then
286
+                icann_address=$(get_app_icann_address "$app_name")
287
+                if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
284 288
                     icann_address='-'
285 289
                 fi
286
-            fi
287
-            onion_address=$(get_app_onion_address "$app_name")
288
-            if [ ${#onion_address} -eq 0 ]; then
289
-                onion_address="-"
290
-            fi
291
-
292
-            if [[ "${icann_address}" != '-' ]]; then
293
-                if [[ "${onion_address}" != '-' ]]; then
294
-                    W+=("${app_name}" "${icann_address} / ${onion_address}")
295
-                else
296
-                    W+=("${app_name}" "${icann_address}")
290
+                if [[ "$ONION_ONLY" != 'no' ]]; then
291
+                    if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then
292
+                        icann_address='-'
293
+                    fi
294
+                fi
295
+                onion_address=$(get_app_onion_address "$app_name")
296
+                if [ ${#onion_address} -eq 0 ]; then
297
+                    onion_address="-"
297 298
                 fi
298
-            else
299
-                W+=("${app_name}" "${onion_address}")
300
-            fi
301 299
 
302
-            if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then
303
-                onion_address=$(get_app_onion_address "${app_name}" "mobile")
304 300
                 if [[ "${icann_address}" != '-' ]]; then
305
-                    W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}")
301
+                    if [[ "${onion_address}" != '-' ]]; then
302
+                        W+=("${app_name}" "${icann_address} / ${onion_address}")
303
+                    else
304
+                        W+=("${app_name}" "${icann_address}")
305
+                    fi
306 306
                 else
307
-                    W+=("${app_name} (mobile)" "${onion_address}")
307
+                    W+=("${app_name}" "${onion_address}")
308
+                fi
309
+
310
+                if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then
311
+                    onion_address=$(get_app_onion_address "${app_name}" "mobile")
312
+                    if [[ "${icann_address}" != '-' ]]; then
313
+                        W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}")
314
+                    else
315
+                        W+=("${app_name} (mobile)" "${onion_address}")
316
+                    fi
308 317
                 fi
309 318
             fi
310
-        fi
311
-    done
319
+        done
312 320
 
313
-    if grep -q "rss reader domain" "$COMPLETION_FILE"; then
314
-        if [ -d /var/lib/tor/hidden_service_ttrss ]; then
315
-            domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname)
316
-            W+=("RSS Reader" "${domain_onion}")
317
-        fi
318
-        if [ -d /var/lib/tor/hidden_service_mobilerss ]; then
319
-            domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname)
320
-            W+=("RSS mobile" "${domain_onion}")
321
+        if grep -q "rss reader domain" "$COMPLETION_FILE"; then
322
+            if [ -d /var/lib/tor/hidden_service_ttrss ]; then
323
+                domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname)
324
+                W+=("RSS Reader" "${domain_onion}")
325
+            fi
326
+            if [ -d /var/lib/tor/hidden_service_mobilerss ]; then
327
+                domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname)
328
+                W+=("RSS mobile" "${domain_onion}")
329
+            fi
321 330
         fi
322
-    fi
323 331
 
324
-    width=$(tput cols)
325
-    height=$(tput lines)
332
+        width=$(tput cols)
333
+        height=$(tput lines)
326 334
 
327
-    # shellcheck disable=SC2068
328
-    dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3
335
+        # shellcheck disable=SC2068
336
+        selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3)
337
+        if [ ! "$selected" ]; then
338
+            break
339
+        fi
340
+        # obtain the addresses from the key by itterating through
341
+        # the array. This is quite crude and maybe there's a better way
342
+        key_found=
343
+        selected_addresses=
344
+        for key in "${W[@]}";
345
+        do
346
+            if [ $key_found ]; then
347
+                selected_addresses="$key"
348
+                break
349
+            fi
350
+            if [[ "$key" == "$selected" ]]; then
351
+                key_found=1
352
+            fi
353
+        done
354
+        # Was the key matched?
355
+        if [ ! "$selected_addresses" ]; then
356
+            break
357
+        fi
358
+        # addresses were found - is this an onion?
359
+        if [[ "$selected_addresses" != *".onion"* ]]; then
360
+            continue
361
+        fi
362
+        # There are two forms of addresses: "x / y.onion" and "x.onion"
363
+        if [[ "$selected_addresses" == *'/'* ]]; then
364
+            onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}')
365
+        else
366
+            onion_addr="$selected_addresses"
367
+        fi
368
+        # show the onion address as a QR code
369
+        clear
370
+        echo "${selected}: ${onion_addr}"
371
+        echo -n "$onion_addr" | qrencode -t UTF8
372
+        any_key
373
+    done
329 374
 }
330 375
 
331 376
 function show_users {
@@ -362,40 +407,10 @@ function show_tahoelafs {
362 407
     echo ''
363 408
 }
364 409
 
365
-function show_ip_addresses {
366
-    echo $'IP/DNS addresses'
367
-    echo '================'
368
-    echo ''
369
-    echo -n "IPv4: $(get_ipv4_address)/$(get_external_ipv4_address)"
370
-    ipv6_address="$(get_ipv6_address)"
371
-    if [ ${#ipv6_address} -gt 0 ]; then
372
-        echo "    IPv6: ${ipv6_address}"
373
-    fi
374
-    echo ''
375
-    echo ''
376
-}
377
-
378
-function show_ssh_public_key {
379
-    echo $'SSH Public Keys'
380
-    echo '==============='
381
-    echo ''
382
-    get_ssh_server_key
383
-    echo ''
384
-    echo ''
385
-}
386
-
387 410
 function show_about {
388 411
     detect_apps
389 412
     get_apps_installed_names
390
-
391
-    #clear
392
-    #echo "==== ${PROJECT_NAME} version ${VERSION} ($DEBIAN_VERSION) ===="
393
-    #echo ''
394
-    #show_ip_addresses
395
-    #show_ssh_public_key
396 413
     show_domains
397
-    #show_users
398
-    #any_key
399 414
 }
400 415
 
401 416
 function select_user {
@@ -1817,6 +1832,28 @@ function wifi_enable {
1817 1832
     "${PROJECT_NAME}-wifi" --disable $disable_wifi
1818 1833
 }
1819 1834
 
1835
+function performance_benchmarks {
1836
+    clear
1837
+
1838
+    if [ ! -f /sbin/hdparm ]; then
1839
+        apt-get -yq install hdparm
1840
+    fi
1841
+
1842
+    test_drive=/dev/sda1
1843
+    if ! ls $test_drive; then
1844
+        if ls /dev/mmcblk0p2; then
1845
+            test_drive=/dev/mmcblk0p2
1846
+        else
1847
+            return
1848
+        fi
1849
+    fi
1850
+    clear
1851
+    echo ''
1852
+    echo $"Testing read speed of drive $test_drive"
1853
+    hdparm -tT $test_drive
1854
+    any_key
1855
+}
1856
+
1820 1857
 function add_clacks {
1821 1858
     clacks=
1822 1859
 
@@ -1943,8 +1980,9 @@ function menu_top_level {
1943 1980
            12 $"Wifi menu"
1944 1981
            13 $"Add Clacks"
1945 1982
            14 $"Check for updates"
1946
-           15 $"Power off the system"
1947
-           16 $"Restart the system")
1983
+           15 $"Performance Benchmarks"
1984
+           16 $"Power off the system"
1985
+           17 $"Restart the system")
1948 1986
 
1949 1987
         # shellcheck disable=SC2068
1950 1988
         selection=$(dialog --backtitle $"Freedombone Administrator Control Panel" --title $"Administrator Control Panel" --menu $"Choose an operation, or ESC to exit:" 24 60 24 "${W[@]}" 3>&2 2>&1 1>&3)
@@ -1973,8 +2011,9 @@ function menu_top_level {
1973 2011
             12) menu_wifi;;
1974 2012
             13) add_clacks;;
1975 2013
             14) check_for_updates;;
1976
-            15) shut_down_system;;
1977
-            16) restart_system;;
2014
+            15) performance_benchmarks;;
2015
+            16) shut_down_system;;
2016
+            17) restart_system;;
1978 2017
         esac
1979 2018
     done
1980 2019
 }

+ 4
- 0
src/freedombone-controlpanel-user Datei anzeigen

@@ -434,6 +434,10 @@ function show_gpg_key {
434 434
     dialog --title $"My PGP/GPG Key" \
435 435
            --backtitle $"Freedombone User Control Panel" \
436 436
            --msgbox $"Email Address: $MY_EMAIL_ADDRESS\\n\\nKey ID: $GPG_ID\\n\\nFingerprint: $GPG_FINGERPRINT\\n\\nCreated: $GPG_DATE" 12 70
437
+    clear
438
+    echo $"Your GPG/PGP public key:"
439
+    gpg --armor --export "$GPG_ID" | qrencode -t UTF8
440
+    any_key
437 441
 }
438 442
 
439 443
 function show_full_gpg_key {

+ 25
- 5
src/freedombone-image Datei anzeigen

@@ -74,6 +74,8 @@ IMAGE_NAME='full'
74 74
 USERNAME="$USER"
75 75
 PASSWORD=
76 76
 
77
+CONTINUOUS_INTEGRATION=
78
+
77 79
 # IP address of the router (gateway)
78 80
 ROUTER_IP_ADDRESS="192.168.1.254"
79 81
 
@@ -153,6 +155,10 @@ MULTIPATH_TOOLS_REPO="https://aur.archlinux.org/multipath-tools.git"
153 155
 MBR_REPO="https://aur.archlinux.org/mbr.git"
154 156
 CLIAPP_REPO="git://git.liw.fi/cliapp"
155 157
 
158
+# Whether to use a SATA drive and if so what its device/partition name is
159
+# eg. sda2
160
+EXTERNAL_DRIVE=
161
+
156 162
 function image_setup {
157 163
     setup_type=$1
158 164
 
@@ -240,7 +246,7 @@ function image_setup {
240 246
             cd "$USERHOME/develop/multipath-tools" || exit 27462454
241 247
             makepkg --force --noconfirm
242 248
             makepkg -i --force --noconfirm
243
-            sudo wget "https://raw.githubusercontent.com/bashrc/freedombone/master/image_build/debootstrap/scripts/${DEBIAN_VERSION}" -O /usr/share/debootstrap/scripts/debscript
249
+            sudo wget "https://raw.githubusercontent.com/bashrc/${PROJECT_NAME}/master/image_build/debootstrap/scripts/${DEBIAN_VERSION}" -O /usr/share/debootstrap/scripts/debscript
244 250
             sudo cp -f "/usr/share/debootstrap/scripts/debscript" "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}"
245 251
             if [ ! -f "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}" ]; then
246 252
                 echo $"No debian debootstrap script was found for $DEBIAN_VERSION"
@@ -374,6 +380,10 @@ do
374 380
             shift
375 381
             INTERACTIVE="$1"
376 382
             ;;
383
+        --ci)
384
+            shift
385
+            CONTINUOUS_INTEGRATION="$1"
386
+            ;;
377 387
         -g|--generic)
378 388
             shift
379 389
             GENERIC_IMAGE="$1"
@@ -453,6 +463,10 @@ do
453 463
             shift
454 464
             LOCAL_NAME="$1"
455 465
             ;;
466
+        --sata|--hdd)
467
+            shift
468
+            EXTERNAL_DRIVE="$1"
469
+            ;;
456 470
         *)
457 471
             # unknown option
458 472
             ;;
@@ -533,6 +547,10 @@ if [[ $ONION_ONLY != "no" ]]; then
533 547
     IMAGE_NAME=$'onion'
534 548
 fi
535 549
 
550
+if [ "$EXTERNAL_DRIVE" ]; then
551
+    IMAGE_NAME=$'sata'
552
+fi
553
+
536 554
 if [[ $VARIANT == 'mesh' ]]; then
537 555
     IMAGE_NAME=$'mesh'
538 556
     # typically not much disk space is needed for a mesh node
@@ -601,6 +619,8 @@ make "$IMAGE_TYPE" \
601 619
      INSECURE="$INSECURE" \
602 620
      AMNESIC="$AMNESIC" \
603 621
      SOCIALINSTANCE="$SOCIALINSTANCE" \
622
+     EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \
623
+     CONTINUOUS_INTEGRATION="$CONTINUOUS_INTEGRATION" \
604 624
      LOCAL_NAME="$LOCAL_NAME"
605 625
 
606 626
 # shellcheck disable=SC2181
@@ -628,8 +648,8 @@ fi
628 648
 for im in ${image_types[@]}
629 649
 do
630 650
     # shellcheck disable=SC2012,SC2086
631
-    no_of_files=$(ls -afq build/${PROJECT_NAME}*.${im} | wc -l)
632
-    if (( no_of_files > 0 )); then
651
+    no_of_files=$(ls -l build/${PROJECT_NAME}*.${im} | wc -l)
652
+    if [ "$no_of_files" -gt 0 ]; then
633 653
         # shellcheck disable=SC2086
634 654
         mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
635 655
         # shellcheck disable=SC2086
@@ -698,8 +718,8 @@ if [[ $IMAGE_TYPE != "qemu"* ]]; then
698 718
     fi
699 719
     echo ''
700 720
     echo "    unxz -k ${PROJECT_NAME}*.img.xz"
701
-    echo '    sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8'
702
-    echo "    sudo dd bs=1M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync"
721
+    echo '    sudo dd if=/dev/zero of=/dev/sdX bs=32M count=8'
722
+    echo "    sudo dd bs=32M if=${PROJECT_NAME}*.img of=/dev/sdX conv=fdatasync"
703 723
     echo ''
704 724
 fi
705 725
 

+ 12
- 6
src/freedombone-image-customise Datei anzeigen

@@ -139,8 +139,14 @@ BMX6_COMMIT='39dd1f2d99ac5a3fa28e92f8173c15039132e181'
139 139
 BMX7_REPO="https://github.com/bmx-routing/bmx7"
140 140
 BMX7_COMMIT='0a82c7c10fef44b259b35e77ab33632aa132d219'
141 141
 
142
+CONTINUOUS_INTEGRATION=
143
+
142 144
 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
143 145
 
146
+# Whether to use a SATA drive and if so what its device/partition name is
147
+# eg. sda2
148
+EXTERNAL_DRIVE=
149
+
144 150
 configure_backports() {
145 151
     echo "deb http://${DEBIAN_REPO}/debian/ ${DEBIAN_VERSION}-backports main" >> "$rootdir/etc/apt/sources.list"
146 152
 }
@@ -437,7 +443,7 @@ EOF
437 443
       echo "                    echo 'User=root' >> /etc/systemd/system/wifistart.service";
438 444
       echo "                    echo 'Group=root' >> /etc/systemd/system/wifistart.service";
439 445
       echo "                    echo 'WorkingDirectory=/root' >> /etc/systemd/system/wifistart.service";
440
-      echo "                    echo 'ExecStart=/usr/local/bin/freedombone-wifi --wait 5 2> /dev/null' >> /etc/systemd/system/wifistart.service";
446
+      echo "                    echo 'ExecStart=/usr/local/bin/${PROJECT_NAME}-wifi --wait 5 2> /dev/null' >> /etc/systemd/system/wifistart.service";
441 447
       echo "                    echo '' >> /etc/systemd/system/wifistart.service";
442 448
       echo "                    echo '[Install]' >> /etc/systemd/system/wifistart.service";
443 449
       echo "                    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/wifistart.service";
@@ -483,7 +489,7 @@ continue_installation() {
483 489
 }
484 490
 
485 491
 atheros_wifi() {
486
-    chroot "$rootdir" dpkg -i /root/freedombone/drivers/firmware-ath9k-htc.deb
492
+    chroot "$rootdir" dpkg -i /root/${PROJECT_NAME}/drivers/firmware-ath9k-htc.deb
487 493
     chroot "$rootdir" apt-get -yq install firmware-linux-free
488 494
 }
489 495
 
@@ -1526,7 +1532,7 @@ if [ \$no_of_users -gt 0 ]; then
1526 1532
             echo 'Comment[it]=Crea un invito per patchwork' >> /home/$MY_USERNAME/Desktop/invite.desktop
1527 1533
             echo 'Comment[ru]=    ' >> /home/$MY_USERNAME/Desktop/invite.desktop
1528 1534
             echo 'Comment[zh]=' >> /home/$MY_USERNAME/Desktop/invite.desktop
1529
-            echo 'Exec=mate-terminal -e freedombone-mesh-invite' >> /home/$MY_USERNAME/Desktop/invite.desktop
1535
+            echo 'Exec=mate-terminal -e ${PROJECT_NAME}-mesh-invite' >> /home/$MY_USERNAME/Desktop/invite.desktop
1530 1536
             echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_invite.png' >> /home/$MY_USERNAME/Desktop/invite.desktop
1531 1537
             echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/invite.desktop
1532 1538
             echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/invite.desktop
@@ -1719,7 +1725,7 @@ image_setup_utils() {
1719 1725
     chroot "$rootdir" apt-get -yq dist-upgrade
1720 1726
     chroot "$rootdir" apt-get -yq install ca-certificates
1721 1727
     chroot "$rootdir" apt-get -yq install apt-utils
1722
-    chroot "$rootdir" apt-get -yq install shellcheck
1728
+    chroot "$rootdir" apt-get -yq install shellcheck hdparm
1723 1729
 
1724 1730
     if [[ "$ARCHITECTURE" == 'amd64' ]]; then
1725 1731
         chroot "$rootdir" apt-get -yq install linux-image-amd64
@@ -1762,8 +1768,8 @@ image_setup_utils() {
1762 1768
     chroot "$rootdir" apt-get -yq -t stretch-backports install tor
1763 1769
     chroot "$rootdir" apt-get -yq install connect-proxy
1764 1770
     chroot "$rootdir" connect-proxy
1765
-    sed -i 's|#Log notice file.*|Log notice file /dev/null|g' "$rootdir/etc/tor/torrc"
1766
-    sed -i 's|Log notice file.*|Log notice file /dev/null|g' "$rootdir/etc/tor/torrc"
1771
+    sed -i 's|#Log notice file.*|Log notice file /var/log/tor/notices.log|g' "$rootdir/etc/tor/torrc"
1772
+    sed -i 's|Log notice file.*|Log notice file /var/log/tor/notices.log|g' "$rootdir/etc/tor/torrc"
1767 1773
     sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1768 1774
     sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1769 1775
     if ! grep -q 'Host *.onion' "$rootdir/root/.ssh/config"; then

+ 11
- 7
src/freedombone-image-hardware-setup Datei anzeigen

@@ -155,6 +155,10 @@ beaglebone_repack_kernel() {
155 155
 
156 156
 a20_setup_boot() {
157 157
     dtb="$1"
158
+    a20_root_device='mmcblk0p2'
159
+    if [ "$2" ]; then
160
+        a20_root_device="$2"
161
+    fi
158 162
 
159 163
     # Setup boot.cmd
160 164
     if grep -q btrfs /etc/fstab ; then
@@ -173,7 +177,7 @@ a20_setup_boot() {
173 177
 setenv mmcdev 0
174 178
 setenv mmcpart 1
175 179
 
176
-setenv mmcroot /dev/mmcblk0p2 ro
180
+setenv mmcroot /dev/${a20_root_device} ro
177 181
 setenv mmcrootfstype $fstype rootwait fixrtc
178 182
 setenv mmcrootflags subvol=@
179 183
 
@@ -239,27 +243,27 @@ case "$MACHINE" in
239 243
         enable_serial_console ttyO0
240 244
         ;;
241 245
     cubietruck)
242
-        a20_setup_boot sun7i-a20-cubietruck.dtb
246
+        a20_setup_boot sun7i-a20-cubietruck.dtb "$EXTERNAL_DRIVE"
243 247
         enable_serial_console ttyS0
244 248
         ;;
245 249
     a20-olinuxino-lime)
246
-        a20_setup_boot sun7i-a20-olinuxino-lime.dtb
250
+        a20_setup_boot sun7i-a20-olinuxino-lime.dtb "$EXTERNAL_DRIVE"
247 251
         enable_serial_console ttyS0
248 252
         ;;
249 253
     a20-olinuxino-lime2)
250
-        a20_setup_boot sun7i-a20-olinuxino-lime2.dtb
254
+        a20_setup_boot sun7i-a20-olinuxino-lime2.dtb "$EXTERNAL_DRIVE"
251 255
         enable_serial_console ttyS0
252 256
         ;;
253 257
     a20-olinuxino-micro)
254
-        a20_setup_boot sun7i-a20-olinuxino-micro.dtb
258
+        a20_setup_boot sun7i-a20-olinuxino-micro.dtb "$EXTERNAL_DRIVE"
255 259
         enable_serial_console ttyS0
256 260
         ;;
257 261
     cubieboard2)
258
-        a20_setup_boot sun7i-a20-cubieboard2.dtb
262
+        a20_setup_boot sun7i-a20-cubieboard2.dtb "$EXTERNAL_DRIVE"
259 263
         enable_serial_console ttyS0
260 264
         ;;
261 265
     pcduino3)
262
-        a20_setup_boot sun7i-a20-pcduino3.dtb
266
+        a20_setup_boot sun7i-a20-pcduino3.dtb "$EXTERNAL_DRIVE"
263 267
         enable_serial_console ttyS0
264 268
         ;;
265 269
 esac

+ 6
- 1
src/freedombone-image-make Datei anzeigen

@@ -77,6 +77,8 @@ export INSECURE
77 77
 export AMNESIC
78 78
 export SOCIALINSTANCE
79 79
 export LOCAL_NAME
80
+export EXTERNAL_DRIVE
81
+export CONTINUOUS_INTEGRATION
80 82
 
81 83
 # Locate vmdebootstrap program fetched in Makefile
82 84
 basedir=`pwd`
@@ -101,7 +103,7 @@ a20_pkgs="linux-image-armmp-lpae u-boot-tools u-boot u-boot-sunxi"
101 103
 # Packages needed for self-hosted development
102 104
 dev_pkgs="build-essential devscripts make man-db emacs org-mode git mercurial"
103 105
 
104
-echo Building "$MACHINE" "$PROJECT_NAME" for "$ARCHITECTURE".
106
+echo Building "$MACHINE" "$PROJECT_NAME" for "$ARCHITECTURE" "$EXTERNAL_DRIVE"
105 107
 
106 108
 case "$MACHINE" in
107 109
     beaglebone)
@@ -225,7 +227,9 @@ sed -i "s|INSECURE=.*|INSECURE=\"${INSECURE}\"|g" "$TEMP_CUSTOMISE3"
225 227
 sed -i "s|AMNESIC=.*|AMNESIC=\"${AMNESIC}\"|g" "$TEMP_CUSTOMISE3"
226 228
 sed -i "s|SOCIALINSTANCE=.*|SOCIALINSTANCE=\"${SOCIALINSTANCE}\"|g" "$TEMP_CUSTOMISE3"
227 229
 sed -i "s|LOCAL_NAME=.*|LOCAL_NAME=\"${LOCAL_NAME}\"|g" "$TEMP_CUSTOMISE3"
230
+sed -i "s|EXTERNAL_DRIVE=.*|EXTERNAL_DRIVE=\"${EXTERNAL_DRIVE}\"|g" "$TEMP_CUSTOMISE3"
228 231
 sed -i 's|#!/bin/bash||g' "$TEMP_CUSTOMISE3"
232
+sed -i "s|CONTINUOUS_INTEGRATION=.*|CONTINUOUS_INTEGRATION=${CONTINUOUS_INTEGRATION}|g" "$TEMP_CUSTOMISE3"
229 233
 
230 234
 cat $TEMP_CUSTOMISE2 $TEMP_CUSTOMISE3 > $TEMP_CUSTOMISE4
231 235
 if [ -f $TEMP_CUSTOMISE ]; then
@@ -254,6 +258,7 @@ sudo -H \
254 258
      ARCHITECTURE="$ARCHITECTURE" \
255 259
      SOURCE="$SOURCE" \
256 260
      CUSTOM_SETUP="$CUSTOM_SETUP" \
261
+     EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \
257 262
      $VMDEBOOTSTRAP \
258 263
      --log "$(dirname "$IMAGE")/${PROJECT_NAME}.log" \
259 264
      --log-level debug \

+ 20
- 15
src/freedombone-image-makefile Datei anzeigen

@@ -41,8 +41,13 @@ IMAGE = $(NAME).img
41 41
 ARCHIVE = $(IMAGE).xz
42 42
 SIGNATURE = $(ARCHIVE).sig
43 43
 OWNER = 1000
44
-XZ = xz --no-warn --verbose --keep --threads=0 -3
45
-SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE)
44
+ifeq ("$CONTINUOUS_INTEGRATION", "")
45
+    XZ = xz --no-warn --verbose --keep --threads=0 -3 $(IMAGE)
46
+    SIGN = -gpg --output $(SIGNATURE) --detach-sig $(ARCHIVE)
47
+else
48
+	XZ =
49
+	SIGN =
50
+endif
46 51
 
47 52
 # settings for `make test`
48 53
 TEST_SSH_PORT = 2222
@@ -90,7 +95,7 @@ beaglebone: prep
90 95
 	$(eval MACHINE = beaglebone)
91 96
 	$(MAKE_IMAGE)
92 97
 	@rm -f $(ARCHIVE)
93
-	$(XZ) $(IMAGE)
98
+	$(XZ)
94 99
 	@echo ""
95 100
 	$(SIGN)
96 101
 	@echo "Build complete."
@@ -101,7 +106,7 @@ cubieboard2: prep
101 106
 	$(eval MACHINE = cubieboard2)
102 107
 	$(MAKE_IMAGE)
103 108
 	@rm -f $(ARCHIVE)
104
-	$(XZ) $(IMAGE)
109
+	$(XZ)
105 110
 	@echo ""
106 111
 	$(SIGN)
107 112
 	@echo "Build complete."
@@ -112,7 +117,7 @@ pcduino3: prep
112 117
 	$(eval MACHINE = pcduino3)
113 118
 	$(MAKE_IMAGE)
114 119
 	@rm -f $(ARCHIVE)
115
-	$(XZ) $(IMAGE)
120
+	$(XZ)
116 121
 	@echo ""
117 122
 	$(SIGN)
118 123
 	@echo "Build complete."
@@ -123,7 +128,7 @@ cubietruck: prep
123 128
 	$(eval MACHINE = cubietruck)
124 129
 	$(MAKE_IMAGE)
125 130
 	@rm -f $(ARCHIVE)
126
-	$(XZ) $(IMAGE)
131
+	$(XZ)
127 132
 	@echo ""
128 133
 	$(SIGN)
129 134
 	@echo "Build complete."
@@ -135,7 +140,7 @@ a20-olinuxino-lime: prep
135 140
 	$(eval IMAGE = $(NAME).img)
136 141
 	$(MAKE_IMAGE)
137 142
 	rm -f $(ARCHIVE)
138
-	$(XZ) $(IMAGE)
143
+	$(XZ)
139 144
 	@echo ""
140 145
 	$(SIGN)
141 146
 
@@ -145,7 +150,7 @@ a20-olinuxino-lime2: prep
145 150
 	$(eval MACHINE = a20-olinuxino-lime2)
146 151
 	$(MAKE_IMAGE)
147 152
 	@rm -f $(ARCHIVE)
148
-	$(XZ) $(IMAGE)
153
+	$(XZ)
149 154
 	@echo ""
150 155
 	$(SIGN)
151 156
 	@echo "Build complete."
@@ -156,7 +161,7 @@ a20-olinuxino-micro: prep
156 161
 	$(eval MACHINE = a20-olinuxino-micro)
157 162
 	$(MAKE_IMAGE)
158 163
 	@rm -f $(ARCHIVE)
159
-	$(XZ) $(IMAGE)
164
+	$(XZ)
160 165
 	@echo ""
161 166
 	$(SIGN)
162 167
 	@echo "Build complete."
@@ -167,7 +172,7 @@ i386: prep
167 172
 	$(eval MACHINE = all)
168 173
 	$(MAKE_IMAGE)
169 174
 	@rm -f $(ARCHIVE)
170
-	$(XZ) $(IMAGE)
175
+	$(XZ)
171 176
 	@echo ""
172 177
 	$(SIGN)
173 178
 	@echo "Build complete."
@@ -178,7 +183,7 @@ i686: prep
178 183
 	$(eval MACHINE = all)
179 184
 	$(MAKE_IMAGE)
180 185
 	@rm -f $(ARCHIVE)
181
-	$(XZ) $(IMAGE)
186
+	$(XZ)
182 187
 	@echo ""
183 188
 	$(SIGN)
184 189
 	@echo "Build complete."
@@ -189,7 +194,7 @@ amd64: prep
189 194
 	$(eval MACHINE = all)
190 195
 	$(MAKE_IMAGE)
191 196
 	@rm -f $(ARCHIVE)
192
-	$(XZ) $(IMAGE)
197
+	$(XZ)
193 198
 	@echo ""
194 199
 	$(SIGN)
195 200
 	@echo "Build complete."
@@ -200,7 +205,7 @@ apu: prep
200 205
 	$(eval MACHINE = all)
201 206
 	$(MAKE_IMAGE)
202 207
 	@rm -f $(ARCHIVE)
203
-	$(XZ) $(IMAGE)
208
+	$(XZ)
204 209
 	@echo ""
205 210
 	$(SIGN)
206 211
 	@echo "Build complete."
@@ -215,7 +220,7 @@ qemu-i386: prep
215 220
 	# Convert image to qemu format
216 221
 	qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
217 222
 	@rm -f $(ARCHIVE)
218
-	$(XZ) $(IMAGE)
223
+	$(XZ)
219 224
 	@echo ""
220 225
 	$(SIGN)
221 226
 	@echo "Build complete."
@@ -227,7 +232,7 @@ qemu-x86_64: prep
227 232
 	# Convert image to qemu format
228 233
 	qemu-img convert -O qcow2 $(NAME).img $(NAME).qcow2
229 234
 	@rm -f $(ARCHIVE)
230
-	$(XZ) $(IMAGE)
235
+	$(XZ)
231 236
 	@echo ""
232 237
 	$(SIGN)
233 238
 	@echo "Build complete."

+ 1
- 1
src/freedombone-image-vmdebootstrap Datei anzeigen

@@ -30,7 +30,7 @@ export TEXTDOMAIN=${PROJECT_NAME}-image-vmdebootstrap
30 30
 export TEXTDOMAINDIR="/usr/share/locale"
31 31
 
32 32
 VMDEBOOTSTRAP_REPO="https://github.com/bashrc/vmdebootstrap"
33
-VMDEBOOTSTRAP_BRANCH='bashrc/freedombone'
33
+VMDEBOOTSTRAP_BRANCH="bashrc/${PROJECT_NAME}"
34 34
 
35 35
 mkdir -p vendor
36 36
 if [ -d vendor/vmdebootstrap ] ; then

+ 32
- 47
src/freedombone-logging Datei anzeigen

@@ -90,48 +90,31 @@ function turn_logging_off {
90 90
     done
91 91
 }
92 92
 
93
-function turn_off_rsys_logging {
94
-    if ! grep -q '/var/log/auth.log' /etc/rsyslog.conf; then
95
-        return
96
-    fi
97
-    sed -i 's|mail,news.none.*|mail,news.none      /dev/null|g' /etc/rsyslog.conf
98
-    sed -i 's|auth,authpriv.\*.*|auth,authpriv.\*         /dev/null|g' /etc/rsyslog.conf
99
-    sed -i 's|mail.info.*|mail.info            /dev/null|g' /etc/rsyslog.conf
100
-    sed -i 's|mail.warn.*|mail.warn            /dev/null|g' /etc/rsyslog.conf
101
-    sed -i 's|mail.err.*|mail.err            /dev/null|g' /etc/rsyslog.conf
102
-    sed -i 's|daemon.\*.*|daemon.\*              /dev/null|g' /etc/rsyslog.conf
103
-    sed -i 's|mail.\*.*|mail.\*              /dev/null|g' /etc/rsyslog.conf
104
-    sed -i 's|user.\*.*|user.\*              /dev/null|g' /etc/rsyslog.conf
105
-    sed -i 's|news.none;mail.none.*|news.none;mail.none /dev/null|g' /etc/rsyslog.conf
106
-    sed -i 's|\*.\*;auth,authpriv.none.*|\*.\*;auth,authpriv.none      /dev/null|g' /etc/rsyslog.conf
107
-    sed -i 's|#cron.\*|cron.\*|g' /etc/rsyslog.conf
108
-    sed -i 's|cron.\*.*|cron.\*             /dev/null|g' /etc/rsyslog.conf
109
-    $REMOVE_FILES_COMMAND /var/log/wtmp*
110
-    $REMOVE_FILES_COMMAND /var/log/debug*
111
-    $REMOVE_FILES_COMMAND /var/log/cron.*
112
-    $REMOVE_FILES_COMMAND /var/log/auth.*
113
-    $REMOVE_FILES_COMMAND /var/log/mail.*
114
-    $REMOVE_FILES_COMMAND /var/log/daemon.*
115
-    $REMOVE_FILES_COMMAND /var/log/user.*
116
-    $REMOVE_FILES_COMMAND /var/log/messages*
117
-}
118
-
119 93
 function turn_on_rsys_logging {
120
-    if grep -q '/var/log/auth.log' /etc/rsyslog.conf; then
121
-        return
122
-    fi
123
-    sed -i 's|mail,news.none.*|mail,news.none      -/var/log/messages|g' /etc/rsyslog.conf
124
-    sed -i 's|auth,authpriv.\*.*|auth,authpriv.\*         /var/log/auth.log|g' /etc/rsyslog.conf
125
-    sed -i 's|mail.info.*|mail.info            -/var/log/mail.info|g' /etc/rsyslog.conf
126
-    sed -i 's|mail.warn.*|mail.warn            -/var/log/mail.warn|g' /etc/rsyslog.conf
127
-    sed -i 's|mail.err.*|mail.err            /var/log/mail.err|g' /etc/rsyslog.conf
128
-    sed -i 's|daemon.\*.*|daemon.\*              -/var/log/daemon.log|g' /etc/rsyslog.conf
129
-    sed -i 's|mail.\*.*|mail.\*              -/var/log/mail.log|g' /etc/rsyslog.conf
130
-    sed -i 's|user.\*.*|user.\*              -/var/log/user.log|g' /etc/rsyslog.conf
131
-    sed -i 's|news.none;mail.none.*|news.none;mail.none -/var/log/debug|g' /etc/rsyslog.conf
132
-    sed -i 's|\*.\*;auth,authpriv.none.*|\*.\*;auth,authpriv.none      -/var/log/syslog|g' /etc/rsyslog.conf
133
-    sed -i 's|#cron.\*|cron.\*|g' /etc/rsyslog.conf
134
-    sed -i 's|cron.\*.*|cron.\*             /var/log/cron.log|g' /etc/rsyslog.conf
94
+    save_rsys_header
95
+
96
+    { echo 'auth,authpriv.*         /var/log/auth.log';
97
+      echo '*.*;auth,authpriv.none -/var/log/syslog';
98
+      echo 'cron.*                  /var/log/cron.log';
99
+      echo 'daemon.*               -/var/log/daemon.log';
100
+      echo 'kern.*                 -/var/log/kern.log';
101
+      echo 'lpr.*                  -/var/log/lpr.log';
102
+      echo 'mail.*                 -/var/log/mail.log';
103
+      echo 'user.*                 -/var/log/user.log';
104
+      echo '';
105
+      echo 'mail.info              -/var/log/mail.info';
106
+      echo 'mail.warn              -/var/log/mail.warn';
107
+      echo 'mail.err                /var/log/mail.err';
108
+      echo '';
109
+      echo "*.=debug;\\";
110
+      echo "        auth,authpriv.none;\\";
111
+      echo '        news.none;mail.none -/var/log/debug';
112
+      echo "*.=info;*.=notice;*.=warn;\\";
113
+      echo "        auth,authpriv.none;\\";
114
+      echo "        cron,daemon.none;\\";
115
+      echo '        mail,news.none      -/var/log/messages';
116
+      echo '';
117
+      echo '*.emerg                         :omusrmsg:*'; } >> /etc/rsyslog.conf
135 118
 }
136 119
 
137 120
 if [ ! "$1" ]; then
@@ -150,8 +133,7 @@ if [[ "$1" == "on" || "$1" == "On" || "$1" == "ON" ]]; then
150 133
             touch /var/log/tor/notices.log
151 134
             chown debian-tor:adm /var/log/tor/notices.log
152 135
         fi
153
-        sed -i 's|#Log notice file.*|Log notice file /var/log/tor/notices.log|g' /etc/tor/torrc
154
-        sed -i 's|Log notice file.*|Log notice file /var/log/tor/notices.log|g' /etc/tor/torrc
136
+        echo 'Log notice file /var/log/tor/notices.log' > /etc/torrc.d/logging
155 137
     fi
156 138
     if [ -f /etc/php/7.0/fpm/php-fpm.conf ]; then
157 139
         sed -i 's|error_log =.*|error_log = /var/log/php-fpm.log|g' /etc/php/7.0/fpm/php-fpm.conf
@@ -193,13 +175,12 @@ if [[ "$1" == "on" || "$1" == "On" || "$1" == "ON" ]]; then
193 175
         fi
194 176
     fi
195 177
     turn_on_rsys_logging
178
+    turn_on_postgresql_logging
196 179
 else
197 180
     turn_logging_off
198 181
 
199
-    if [ -d /etc/tor ]; then
200
-        sed -i 's|#Log notice file.*|Log notice file /dev/null|g' /etc/tor/torrc
201
-        sed -i 's|Log notice file.*|Log notice file /dev/null|g' /etc/tor/torrc
202
-        rm /var/log/tor/*
182
+    if [ -d /etc/torrc.d ]; then
183
+        echo 'Log notice file /var/log/tor/notices.log' > /etc/torrc.d/logging
203 184
     fi
204 185
     if [ -d /var/log/radicale ]; then
205 186
         $REMOVE_FILES_COMMAND /var/log/radicale/*
@@ -250,6 +231,7 @@ else
250 231
         fi
251 232
     fi
252 233
     turn_off_rsys_logging
234
+    turn_off_postgresql_logging
253 235
 fi
254 236
 
255 237
 if [ -d /etc/exim4 ]; then
@@ -295,5 +277,8 @@ fi
295 277
 if [ -d /etc/matrix ]; then
296 278
     systemctl restart matrix
297 279
 fi
280
+if [ -d /etc/postgresql ]; then
281
+    systemctl restart postgresql
282
+fi
298 283
 
299 284
 exit 0

+ 1
- 1
src/freedombone-mesh-blog Datei anzeigen

@@ -88,7 +88,7 @@ function regenerate_blog {
88 88
 }
89 89
 
90 90
 function view_blog {
91
-    freedombone-mesh-visit-site '/Blog'
91
+    ${PROJECT_NAME}-mesh-visit-site '/Blog'
92 92
     exit 0
93 93
 }
94 94
 

+ 3
- 3
src/freedombone-prepare-scripts Datei anzeigen

@@ -30,9 +30,9 @@ PROJECT_NAME='freedombone'
30 30
 
31 31
 cat /usr/local/bin/${PROJECT_NAME}-vars /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* /usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* > /tmp/includescripts
32 32
 
33
-cat /tmp/includescripts /usr/local/bin/freedombone-controlpanel > /usr/local/bin/control
34
-cat /tmp/includescripts /usr/local/bin/freedombone-controlpanel-user > /usr/local/bin/controluser
35
-cat /tmp/includescripts /usr/local/bin/freedombone-addremove > /usr/local/bin/addremove
33
+cat /tmp/includescripts /usr/local/bin/${PROJECT_NAME}-controlpanel > /usr/local/bin/control
34
+cat /tmp/includescripts /usr/local/bin/${PROJECT_NAME}-controlpanel-user > /usr/local/bin/controluser
35
+cat /tmp/includescripts /usr/local/bin/${PROJECT_NAME}-addremove > /usr/local/bin/addremove
36 36
 
37 37
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/control
38 38
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/controluser

+ 6
- 0
src/freedombone-tests Datei anzeigen

@@ -759,6 +759,12 @@ function test_stig {
759 759
     output "V-38605" $? ${SETLANG}
760 760
     ################
761 761
 
762
+    ##Check that openssh client and server are installed
763
+    bash $STIG_TESTS_DIR/check-ssh.sh installed >/dev/null 2>&1 &
764
+    stig_spinner $!
765
+    output "SV-86857r1_rule" $? ${SETLANG}
766
+    ################
767
+    
762 768
     ##RHEL-06-000227
763 769
     ##The SSH daemon must be configured to use only the SSHv2 protocol.
764 770
 

+ 62
- 0
src/freedombone-tor-health Datei anzeigen

@@ -0,0 +1,62 @@
1
+#!/bin/bash
2
+#  _____               _           _
3
+# |   __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
4
+# |   __|  _| -_| -_| . | . |     | . | . |   | -_|
5
+# |__|  |_| |___|___|___|___|_|_|_|___|___|_|_|___|
6
+#
7
+#                              Freedom in the Cloud
8
+#
9
+# Returns a health status for Tor
10
+#
11
+# License
12
+# =======
13
+#
14
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
15
+#
16
+# This program is free software: you can redistribute it and/or modify
17
+# it under the terms of the GNU Affero General Public License as published by
18
+# the Free Software Foundation, either version 3 of the License, or
19
+# (at your option) any later version.
20
+#
21
+# This program is distributed in the hope that it will be useful,
22
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
23
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
+# GNU Affero General Public License for more details.
25
+#
26
+# You should have received a copy of the GNU Affero General Public License
27
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
+
29
+PROJECT_NAME='freedombone'
30
+
31
+export TEXTDOMAIN=${PROJECT_NAME}-tor-health
32
+export TEXTDOMAINDIR="/usr/share/locale"
33
+
34
+d1=$(date --date="-10 min" "+%b %d %H:%M"):00
35
+d2=$(date "+%b %d %H:%M"):00
36
+ctr=0
37
+echo -n '' > /var/log/tor/notices_new.log
38
+while read -r line; do
39
+    datestr=$(echo "$line" | awk -F '.' '{print $1}')
40
+    if [[ "$datestr" > "$d1" && "$datestr" < "$d2" || "$datestr" =~ $d2 ]]; then
41
+        if [[ "$line" == *'Retrying'* ]]; then
42
+            ctr=$((ctr+1))
43
+        fi
44
+        echo "$line" >> /var/log/tor/notices_new.log
45
+    fi
46
+done < /var/log/tor/notices.log
47
+
48
+mv /var/log/tor/notices_new.log /var/log/tor/notices.log
49
+chown -R debian-tor:adm /var/log/tor
50
+
51
+if [ $ctr -gt 5 ]; then
52
+    echo $'Failed'
53
+    exit 0
54
+fi
55
+
56
+if [ $ctr -gt 0 ]; then
57
+    echo $'Poor'
58
+    exit 0
59
+fi
60
+
61
+echo $'Good'
62
+exit 0

+ 2
- 1
src/freedombone-upgrade Datei anzeigen

@@ -64,7 +64,7 @@ fi
64 64
 if [ -f /usr/bin/backupdatabases ]; then
65 65
     if grep -q "cat /root/dbpass" /usr/bin/backupdatabases; then
66 66
         # update to using the password manager
67
-        sed -i "s|cat /root/dbpass|freedombone-pass -u root -a mariadb|g" /usr/bin/backupdatabases
67
+        sed -i "s|cat /root/dbpass|${PROJECT_NAME}-pass -u root -a mariadb|g" /usr/bin/backupdatabases
68 68
     fi
69 69
 fi
70 70
 
@@ -95,6 +95,7 @@ if [ -d "$PROJECT_DIR" ]; then
95 95
         fi
96 96
 
97 97
         #rebuild_exim_with_socks
98
+        torrc_migrate
98 99
         nodejs_upgrade
99 100
         apt-get -yq -t stretch-backports install certbot
100 101
         email_install_tls

+ 2
- 2
src/freedombone-utils-dns Datei anzeigen

@@ -119,9 +119,9 @@ function create_freedns_updater {
119 119
     fi
120 120
 
121 121
     # add the update command to cron
122
-    if ! grep -q "/usr/local/bin/freedombone-freedns" /etc/crontab; then
122
+    if ! grep -q "/usr/local/bin/${PROJECT_NAME}-freedns" /etc/crontab; then
123 123
         function_check cron_add_mins
124
-        cron_add_mins 3 '/usr/local/bin/freedombone-freedns'
124
+        cron_add_mins 3 "/usr/local/bin/${PROJECT_NAME}-freedns"
125 125
         systemctl restart cron
126 126
     fi
127 127
 

+ 49
- 1
src/freedombone-utils-firewall Datei anzeigen

@@ -32,6 +32,7 @@ FIREWALL_CONFIG=$HOME/${PROJECT_NAME}-firewall.cfg
32 32
 FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg
33 33
 FIREWALL_EIFACE=eth0
34 34
 EXTERNAL_IPV4_ADDRESS=
35
+FIREFOX_TELEMETRY_IP='52.88.27.118'
35 36
 
36 37
 function save_firewall_settings {
37 38
     iptables-save > /etc/firewall.conf
@@ -47,6 +48,25 @@ function save_firewall_settings {
47 48
     fi
48 49
 }
49 50
 
51
+function block_firefox_telemetry {
52
+    # This shouldn't be needed on a server, but we'll do it anyway
53
+    # to be on the safe side
54
+    # Within firefox source code see submit_telemetry_data.py
55
+
56
+    if ! grep -q 'telemetry.mozilla' /etc/hosts; then
57
+	echo '127.0.0.1  telemetry.mozilla.org' >> /etc/hosts
58
+	echo '127.0.0.1  incoming.telemetry.mozilla.org' >> /etc/hosts
59
+    fi
60
+        
61
+    if grep -q "$FIREFOX_TELEMETRY_IP" /etc/firewall.conf; then
62
+        return
63
+    fi
64
+
65
+    iptables -A INPUT -s $FIREFOX_TELEMETRY_IP -j DROP
66
+    iptables -A OUTPUT -s $FIREFOX_TELEMETRY_IP -j DROP
67
+    save_firewall_settings
68
+}
69
+
50 70
 function firewall_block_bad_ip_ranges {
51 71
     if [ "$INSTALLING_MESH" ]; then
52 72
         return
@@ -340,6 +360,32 @@ function mesh_firewall {
340 360
     FIREWALL_FILENAME="${rootdir}/etc/systemd/system/meshfirewall.service"
341 361
     MESH_FIREWALL_SCRIPT=${rootdir}/usr/bin/mesh-firewall
342 362
 
363
+    if ! grep -q 'telemetry.mozilla' ${rootdir}/etc/hosts; then
364
+	echo '127.0.0.1       telemetry.mozilla.org' >> ${rootdir}/etc/hosts
365
+	echo '127.0.0.1       incoming.telemetry.mozilla.org' >> ${rootdir}/etc/hosts
366
+    fi
367
+
368
+    if ! grep -q 'facebook' ${rootdir}/etc/hosts; then
369
+	{ echo '127.0.0.1       www.facebook.com';
370
+	  echo '127.0.0.1       facebook.com';
371
+	  echo '127.0.0.1       static.ak.fbcdn.net';
372
+	  echo '127.0.0.1       www.static.ak.fbcdn.net';
373
+	  echo '127.0.0.1       login.facebook.com';
374
+	  echo '127.0.0.1       www.login.facebook.com';
375
+	  echo '127.0.0.1       fbcdn.net';
376
+	  echo '127.0.0.1       www.fbcdn.net';
377
+	  echo '127.0.0.1       fbcdn.com';
378
+	  echo '127.0.0.1       www.fbcdn.com';
379
+	  echo '127.0.0.1       static.ak.connect.facebook.com';
380
+	  echo '127.0.0.1       www.static.ak.connect.facebook.com'; } >> ${rootdir}/etc/hosts	
381
+    fi
382
+    
383
+    if ! grep -q 'google' ${rootdir}/etc/hosts; then
384
+	{ echo '127.0.0.1       www.google-analytics.com';
385
+	  echo '127.0.0.1       google-analytics.com';
386
+	  echo '127.0.0.1       ssl.google-analytics.com'; } >> ${rootdir}/etc/hosts
387
+    fi    
388
+    
343 389
     { echo '#!/bin/bash';
344 390
       echo 'iptables -P INPUT ACCEPT';
345 391
       echo 'ip6tables -P INPUT ACCEPT';
@@ -387,7 +433,9 @@ function mesh_firewall {
387 433
       echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
388 434
       echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
389 435
       echo "iptables -A INPUT -p udp --dport 1900 -j ACCEPT";
390
-      echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT"; } > "$MESH_FIREWALL_SCRIPT"
436
+      echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT";
437
+      echo "iptables -A INPUT -s $FIREFOX_TELEMETRY_IP -j DROP";
438
+      echo "iptables -A OUTPUT -s $FIREFOX_TELEMETRY_IP -j DROP"; } > "$MESH_FIREWALL_SCRIPT"
391 439
     chmod +x "$MESH_FIREWALL_SCRIPT"
392 440
 
393 441
     { echo '[Unit]';

+ 1
- 1
src/freedombone-utils-gnusocialtools Datei anzeigen

@@ -484,7 +484,7 @@ function gnusocial_block_user_script {
484 484
       echo "database_name=\$1";
485 485
       echo "remove_user=\$2";
486 486
       echo "domain_name=\$3";
487
-      echo "MARIADB_PASSWORD=\$(freedombone-pass -u root -a mariadb)";
487
+      echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)";
488 488
       echo '';
489 489
       echo "if [ \${#remove_user} -lt 2 ]; then";
490 490
       echo '  echo $"No user was specified"';

+ 2
- 2
src/freedombone-utils-mesh Datei anzeigen

@@ -182,8 +182,8 @@ function mesh_create_app_downloads_page {
182 182
     if [ ! -f /var/www/html/images/trifa.png ]; then
183 183
         cp "/root/$PROJECT_NAME/img/trifa.png" /var/www/html/images/trifa.png
184 184
     fi
185
-    if [ ! -f /var/www/html/freedombone.css ]; then
186
-        cp "/root/$PROJECT_NAME/website/freedombone.css" /var/www/html/freedombone.css
185
+    if [ ! -f "/var/www/html/${PROJECT_NAME}.css" ]; then
186
+        cp "/root/$PROJECT_NAME/website/${PROJECT_NAME}.css" "/var/www/html/${PROJECT_NAME}.css"
187 187
     fi
188 188
     chown -R www-data:www-data /var/www/html/*
189 189
 }

+ 114
- 108
src/freedombone-utils-onion Datei anzeigen

@@ -31,6 +31,47 @@ TOR_MAX_TRAFFIC_PER_MONTH_GB=10
31 31
 
32 32
 USE_V2_ONION_ADDRESS=
33 33
 HIDDEN_SERVICE_PATH='/var/lib/tor/hidden_service_'
34
+ONION_SERVICES_FILE=/etc/torrc.d/${PROJECT_NAME}
35
+
36
+function torrc_migrate {
37
+    if [ -f "$ONION_SERVICES_FILE" ]; then
38
+        if grep -q "#%include /etc/torrc.d" /etc/tor/torrc; then
39
+            sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
40
+            systemctl restart tor
41
+        fi
42
+        return
43
+    fi
44
+    systemctl stop tor
45
+
46
+    mkdir /etc/torrc.d
47
+
48
+    grep "HiddenServiceDir\\|HiddenServiceVersion\\|HiddenServicePort" /etc/tor/torrc | grep -v "#HiddenServiceDir" >> "$ONION_SERVICES_FILE"
49
+
50
+    if ! grep "HiddenServiceVersion" "$ONION_SERVICES_FILE"; then
51
+        systemctl restart tor
52
+        return
53
+    fi
54
+
55
+    if grep -q "#%include /etc/torrc.d" /etc/tor/torrc; then
56
+        sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
57
+    else
58
+        echo "%include /etc/torrc.d" >> /etc/tor/torrc
59
+    fi
60
+
61
+    { echo 'DNSPort 5300';
62
+      echo 'DNSListenAddress 127.0.0.1';
63
+      echo 'AutomapHostsOnResolve 1'; } > /etc/torrc.d/dns
64
+
65
+    sed -i '/DNSPort 5300/d' /etc/tor/torrc
66
+    sed -i '/DNSListenAddress 127.0.0./d' /etc/tor/torrc
67
+    sed -i '/AutomapHostsOnResolve 1/d' /etc/tor/torrc
68
+
69
+    sed -i '/HiddenServiceDir/d' /etc/tor/torrc
70
+    sed -i '/HiddenServiceVersion/d' /etc/tor/torrc
71
+    sed -i '/HiddenServicePort/d' /etc/tor/torrc
72
+
73
+    systemctl restart tor
74
+}
34 75
 
35 76
 function add_email_hostname {
36 77
     extra_email_hostname="$1"
@@ -80,17 +121,17 @@ function remove_onion_service {
80 121
     nick="$3"
81 122
 
82 123
     if [ ${#nick} -gt 0 ]; then
83
-        sed -i "/stealth ${nick}/d" /etc/tor/torrc
124
+        sed -i "/stealth ${nick}/d" "$ONION_SERVICES_FILE"
84 125
     fi
85
-    sed -i "/hidden_service_${onion_service_name}/,+1 d" /etc/tor/torrc
86
-    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" /etc/tor/torrc
87
-    sed -i "/127.0.0.1:${onion_service_port_to}/d" /etc/tor/torrc
126
+    sed -i "/hidden_service_${onion_service_name}/,+1 d" "$ONION_SERVICES_FILE"
127
+    sed -i "/hidden_service_${onion_service_name}_mobile/,+1 d" "$ONION_SERVICES_FILE"
128
+    sed -i "/127.0.0.1:${onion_service_port_to}/d" "$ONION_SERVICES_FILE"
88 129
     if [ "$3" ]; then
89
-        sed -i "/127.0.0.1:${3}/d" /etc/tor/torrc
130
+        sed -i "/127.0.0.1:${3}/d" "$ONION_SERVICES_FILE"
90 131
         if [ "$4" ]; then
91
-            sed -i "/127.0.0.1:${4}/d" /etc/tor/torrc
132
+            sed -i "/127.0.0.1:${4}/d" "$ONION_SERVICES_FILE"
92 133
             if [ "$5" ]; then
93
-                sed -i "/127.0.0.1:${5}/d" /etc/tor/torrc
134
+                sed -i "/127.0.0.1:${5}/d" "$ONION_SERVICES_FILE"
94 135
             fi
95 136
         fi
96 137
     fi
@@ -123,16 +164,16 @@ function add_onion_service {
123 164
         USE_V2_ONION_ADDRESS=
124 165
         exit 877367
125 166
     fi
126
-    if ! grep -q "hidden_service_${onion_service_name}" /etc/tor/torrc; then
127
-        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> /etc/tor/torrc
167
+    if ! grep -q "hidden_service_${onion_service_name}" "$ONION_SERVICES_FILE"; then
168
+        echo "HiddenServiceDir ${HIDDEN_SERVICE_PATH}${onion_service_name}/" >> "$ONION_SERVICES_FILE"
128 169
         if [ ! $USE_V2_ONION_ADDRESS ]; then
129
-            echo 'HiddenServiceVersion 3' >> /etc/tor/torrc
170
+            echo 'HiddenServiceVersion 3' >> "$ONION_SERVICES_FILE"
130 171
         else
131
-            echo 'HiddenServiceVersion 2' >> /etc/tor/torrc
172
+            echo 'HiddenServiceVersion 2' >> "$ONION_SERVICES_FILE"
132 173
         fi
133
-        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> /etc/tor/torrc
174
+        echo "HiddenServicePort ${onion_service_port_from} 127.0.0.1:${onion_service_port_to}" >> "$ONION_SERVICES_FILE"
134 175
         if [ ${#onion_stealth_name} -gt 0 ]; then
135
-            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> /etc/tor/torrc
176
+            echo "HiddenServiceAuthorizeClient stealth ${onion_stealth_name}" >> "$ONION_SERVICES_FILE"
136 177
         fi
137 178
     fi
138 179
 
@@ -270,6 +311,34 @@ function configure_ssh_onion {
270 311
     mark_completed "${FUNCNAME[0]}"
271 312
 }
272 313
 
314
+function check_tor_health {
315
+    { echo '#!/bin/bash';
316
+      echo "status=\$(${PROJECT_NAME}-tor-health)";
317
+      echo "ADMIN_USER=\$(grep \"MY_USERNAME=\" ~/${PROJECT_NAME}.cfg | awk -F '=' '{print \$2}')";
318
+      echo "if [[ \"\$status\" == 'G'* ]]; then";
319
+      echo '    if [ -f /tmp/.torfailed ]; then';
320
+      echo '        rm /tmp/.torfailed';
321
+      echo "        tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is now \$status\" \$ADMIN_USER@\$HOSTNAME";
322
+      echo '    fi';
323
+      echo '    exit 0';
324
+      echo 'fi';
325
+      echo 'if [ ! -f /tmp/.torfailed ]; then';
326
+      echo "    tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME";
327
+      echo "    echo \"\$status\" > /tmp/.torfailed";
328
+      echo 'else';
329
+      echo "    prev_status=\$(cat /tmp/.torfailed)";
330
+      echo "    if [[ \"\$prev_status\" != \"\$status\" ]]; then";
331
+      echo "        tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME";
332
+      echo "        echo \"\$status\" > /tmp/.torfailed";
333
+      echo '    fi';
334
+      echo 'fi'; } > /usr/bin/check_tor_health
335
+    chmod +x /usr/bin/check_tor_health
336
+
337
+    if ! grep -q 'check_tor_health' /etc/crontab; then
338
+        cron_add_mins 10 "/usr/bin/check_tor_health"
339
+    fi
340
+}
341
+
273 342
 function install_tor {
274 343
     if [[ $SYSTEM_TYPE == "mesh*" ]]; then
275 344
         return
@@ -287,44 +356,16 @@ function install_tor {
287 356
     # For torify
288 357
     apt-get -yq install torsocks
289 358
 
290
-    # turn off logging
291
-    sed -i 's|#Log notice file.*|Log notice file /dev/null|g' /etc/tor/torrc
292
-    sed -i 's|Log notice file.*|Log notice file /dev/null|g' /etc/tor/torrc
293
-
294
-    # Restrict traffic
295
-    sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc
296
-    sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc
297
-
298
-    mark_completed "${FUNCNAME[0]}"
299
-}
300
-
301
-function resolve_dns_via_tor {
302
-    if [[ $SYSTEM_TYPE == "mesh"* ]]; then
303
-        return
304
-    fi
305
-    if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then
306
-        return
307
-    fi
308
-    if [ ! -f /etc/tor/torrc ]; then
309
-        echo $'tor was not installed'
310
-        exit 52952
359
+    if [ ! -d /etc/torrc.d ]; then
360
+        mkdir /etc/torrc.d
311 361
     fi
312
-
313
-    # resolve DNS via tor
314
-    if ! grep -q 'DNSPort 53' /etc/tor/torrc; then
315
-        { echo 'DNSPort 53';
316
-          echo 'AutomapHostsOnResolve 1';
317
-          echo 'AutomapHostsSuffixes .exit,.onion'; } >> /etc/tor/torrc
318
-        onion_update
362
+    sed -i 's|#%include /etc/torrc.d|%include /etc/torrc.d|g' /etc/tor/torrc
363
+    if ! grep -q '%include /etc/torrc.d' /etc/tor/torrc; then
364
+        echo '%include /etc/torrc.d' >> /etc/tor/torrc
319 365
     fi
320 366
 
321
-    # don't change resolv.conf
322
-    sed -i 's|, domain-name-servers||g' /etc/dhcp/dhclient.conf
323
-
324
-    # point resolv.conf to tor
325
-    resolvconf=/etc/resolvconf/resolv.conf.d/head
326
-    echo 'nameserver 127.0.0.1:53' > $resolvconf
327
-    resolvconf -u
367
+    echo 'Log notice file /var/log/tor/notices.log' > /etc/torrc.d/logging
368
+    echo "AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes" > /etc/torrc.d/maxtraffic
328 369
 
329 370
     mark_completed "${FUNCNAME[0]}"
330 371
 }
@@ -465,24 +506,14 @@ function tor_add_bridge {
465 506
 
466 507
     apt-get -yq install obfs4proxy
467 508
 
468
-    if grep -q "ClientTransportPlugin" /etc/tor/torrc; then
469
-        sed -i 's|#ClientTransportPlugin|ClientTransportPlugin|g' /etc/tor/torrc
470
-        sed -i 's|# ClientTransportPlugin|ClientTransportPlugin|g' /etc/tor/torrc
471
-        sed -i 's|ClientTransportPlugin.*|ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed|g' /etc/tor/torrc
509
+    if [ ! -f /etc/torrc.d/bridges ]; then
510
+        { echo 'ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed';
511
+          echo 'UseBridges 1';
512
+          echo "Bridge $bridge_type ${bridge_ip_address}:${bridge_port} ${bridge_key}"; } > /etc/torrc.d/bridges
472 513
     else
473
-        echo 'ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy managed' >> /etc/tor/torrc
474
-    fi
475
-    if grep -q "UseBridges" /etc/tor/torrc; then
476
-        sed -i 's|#UseBridges|UseBridges|g' /etc/tor/torrc
477
-        sed -i 's|# UseBridges|UseBridges|g' /etc/tor/torrc
478
-        sed -i 's|UseBridges.*|UseBridges 1|g' /etc/tor/torrc
479
-    else
480
-        echo 'UseBridges 1' >> /etc/tor/torrc
481
-    fi
482
-
483
-    bridge_str="Bridge $bridge_type ${bridge_ip_address}:${bridge_port} ${bridge_key}"
484
-    if ! grep -q "${bridge_str}" /etc/tor/torrc; then
485
-        sed -i "/UseBridges/a ${bridge_str}" >> /etc/tor/torrc
514
+        if ! grep -q "Bridge $bridge_type ${bridge_ip_address}:${bridge_port} ${bridge_key}" /etc/torrc.d/bridges; then
515
+            echo "Bridge $bridge_type ${bridge_ip_address}:${bridge_port} ${bridge_key}" >> /etc/torrc.d/bridges
516
+        fi
486 517
     fi
487 518
 
488 519
     systemctl restart tor
@@ -495,24 +526,19 @@ function tor_remove_bridge {
495 526
     if [[ "$bridge_ip_address" == *"."* ]]; then
496 527
         bridge_str="Bridge $bridge_type ${bridge_ip_address}"
497 528
     else
498
-        if grep -q " ${bridge_ip_address}" /etc/tor/torrc; then
529
+        if grep -q " ${bridge_ip_address}" /etc/torrc.d/bridges; then
499 530
             bridge_str=" ${bridge_ip_address}"
500 531
         else
501 532
             return
502 533
         fi
503 534
     fi
504
-    if grep -q "${bridge_str}" /etc/tor/torrc; then
505
-        sed -i "/${bridge_str}/d" /etc/tor/torrc
535
+    if grep -q "${bridge_str}" /etc/torrc.d/bridges; then
536
+        sed -i "/${bridge_str}/d" /etc/torrc.d/bridges
506 537
     fi
507 538
 
508
-    # If there are no bridges remaining then remove UseBridges
509
-    if ! grep -q "Bridge " /etc/tor/torrc; then
510
-        if ! grep -q "#UseBridges" /etc/tor/torrc; then
511
-            sed -i 's|UseBridges|#UseBridges|g' /etc/tor/torrc
512
-        fi
513
-        if ! grep -q "#ClientTransportPlugin" /etc/tor/torrc; then
514
-            sed -i 's|ClientTransportPlugin|#ClientTransportPlugin|g' /etc/tor/torrc
515
-        fi
539
+    # If there are no bridges remaining then remove the file
540
+    if ! grep -q "Bridge " /etc/torrc.d/bridges; then
541
+        rm /etc/torrc.d/bridges
516 542
     fi
517 543
 
518 544
     systemctl restart tor
@@ -521,6 +547,8 @@ function tor_remove_bridge {
521 547
 function tor_create_bridge_relay {
522 548
     read_config_param 'TOR_BRIDGE_PORT'
523 549
     read_config_param 'TOR_BRIDGE_NICKNAME'
550
+    read_config_param 'MY_EMAIL_ADDRESS'
551
+
524 552
     if [ ! "$TOR_BRIDGE_PORT" ]; then
525 553
         return
526 554
     fi
@@ -533,47 +561,25 @@ function tor_create_bridge_relay {
533 561
 
534 562
     apt-get -yq install obfs4proxy
535 563
 
536
-    sed -i 's|#BridgeRelay.*|BridgeRelay 1|g' /etc/tor/torrc
537
-    sed -i 's|BridgeRelay.*|BridgeRelay 1|g' /etc/tor/torrc
538
-    sed -i 's|#ServerTransportPlugin.*|ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy|g' /etc/tor/torrc
539
-    sed -i 's|ServerTransportPlugin.*|ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy|g' /etc/tor/torrc
540
-
541
-    if ! grep -q 'ExtORPort ' /etc/tor/torrc; then
542
-        echo "ExtORPort $TOR_BRIDGE_PORT" >> /etc/tor/torrc
543
-    else
544
-        sed -i "s|#ExtORPort .*|ExtORPort $TOR_BRIDGE_PORT|g" /etc/tor/torrc
545
-        sed -i "s|ExtORPort .*|ExtORPort $TOR_BRIDGE_PORT|g" /etc/tor/torrc
546
-    fi
547
-
548
-    read_config_param 'MY_EMAIL_ADDRESS'
564
+    { echo 'BridgeRelay 1';
565
+      echo 'ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy';
566
+      echo "ExtORPort $TOR_BRIDGE_PORT";
567
+      echo "ContactInfo $MY_EMAIL_ADDRESS";
568
+      echo "Nickname $TOR_BRIDGE_NICKNAME"; } > /etc/torrc.d/bridgerelay
549 569
 
550
-    sed -i "s|#ContactInfo.*|ContactInfo $MY_EMAIL_ADDRESS|g" /etc/tor/torrc
551
-    if [ "$TOR_BRIDGE_NICKNAME" ]; then
552
-        sed -i "s|#Nickname.*|Nickname $TOR_BRIDGE_NICKNAME|g" /etc/tor/torrc
553
-        sed -i "s|Nickname.*|Nickname $TOR_BRIDGE_NICKNAME|g" /etc/tor/torrc
554
-    fi
555 570
     firewall_add tor_bridge "$TOR_BRIDGE_PORT" tcp
571
+
556 572
     systemctl restart tor
557 573
 }
558 574
 
559 575
 function tor_remove_bridge_relay {
560
-    if ! grep -q '#BridgeRelay ' /etc/tor/torrc; then
561
-        sed -i 's|BridgeRelay |#BridgeRelay |g' /etc/tor/torrc
562
-    fi
563
-    if ! grep -q '#ServerTransportPlugin ' /etc/tor/torrc; then
564
-        sed -i 's|ServerTransportPlugin |#ServerTransportPlugin |g' /etc/tor/torrc
565
-    fi
566
-    if ! grep -q '#ExtORPort ' /etc/tor/torrc; then
567
-        sed -i 's|ExtORPort |#ExtORPort |g' /etc/tor/torrc
568
-    fi
569
-    if ! grep -q '#ContactInfo ' /etc/tor/torrc; then
570
-        sed -i "s|ContactInfo |#ContactInfo |g" /etc/tor/torrc
571
-    fi
572
-    if ! grep -q '#Nickname ' /etc/tor/torrc; then
573
-        sed -i "s|Nickname |#Nickname |g" /etc/tor/torrc
576
+    if [ -f /etc/torrc.d/bridgerelay ]; then
577
+        rm /etc/torrc.d/bridgerelay
574 578
     fi
579
+
575 580
     read_config_param 'TOR_BRIDGE_PORT'
576 581
     firewall_remove "$TOR_BRIDGE_PORT" tcp
582
+
577 583
     systemctl restart tor
578 584
 }
579 585
 

+ 20
- 0
src/freedombone-utils-postgresql Datei anzeigen

@@ -29,6 +29,26 @@
29 29
 # Set this when calling backup and restore commands
30 30
 USE_POSTGRESQL=
31 31
 POSTGRESQL_PACKAGES='postgresql-9.6 postgresql-contrib-9.6 postgresql-client'
32
+POSTGRESQL_VERSION=9.6
33
+
34
+function turn_off_postgresql_logging {
35
+    if [ ! -f /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf ]; then
36
+        return
37
+    fi
38
+    sed -i 's|#log_destination|log_destination|g' /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
39
+    sed -i "s|log_destination.*|log_destination = 'syslog'|g" /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
40
+    if [ -d /var/log/postgresql ]; then
41
+        $REMOVE_FILES_COMMAND /var/log/postgresql/*
42
+    fi
43
+}
44
+
45
+function turn_on_postgresql_logging {
46
+    if [ ! -f /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf ]; then
47
+        return
48
+    fi
49
+    sed -i 's|log_destination|#log_destination|g' /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
50
+    sed -i "s|log_destination.*|log_destination = 'stderr'|g" /etc/postgresql/$POSTGRESQL_VERSION/main/postgresql.conf
51
+}
32 52
 
33 53
 function store_original_postgresql_password {
34 54
     if [ ! -f /root/.postgresqloriginal ]; then

+ 86
- 39
src/freedombone-utils-selector Datei anzeigen

@@ -272,6 +272,39 @@ function get_apps_installed_names {
272 272
     done
273 273
 }
274 274
 
275
+function app_not_on_onion_only {
276
+    app_name="$1"
277
+
278
+    read_config_param ONION_ONLY
279
+
280
+    if [[ "$ONION_ONLY" != 'no' ]]; then
281
+        if grep -q "NOT_ON_ONION=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
282
+            echo "0"
283
+            return
284
+        fi
285
+    fi
286
+    echo "1"
287
+}
288
+
289
+function enough_ram_for_app {
290
+    app_name="$1"
291
+
292
+    if ! grep -q "MINIMUM_RAM_MB=" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then
293
+        echo "0"
294
+        return
295
+    fi
296
+
297
+    minimum_ram_MB=$(grep "MINIMUM_RAM_MB=" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}" | head -n 1 | awk -F '=' '{print $2}')
298
+    minimum_ram_bytes=$((minimum_ram_MB * 1024))
299
+
300
+    ram_available=$(grep MemTotal /proc/meminfo | awk '{print $2}')
301
+    if [ "$ram_available" -lt "$minimum_ram_bytes" ]; then
302
+        echo "1"
303
+        return
304
+    fi
305
+    echo "0"
306
+}
307
+
275 308
 # detects what apps are available
276 309
 function detect_apps {
277 310
     FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*"
@@ -285,11 +318,14 @@ function detect_apps {
285 318
     for filename in $FILES
286 319
     do
287 320
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
288
-
289
-        # shellcheck disable=SC2068
290
-        if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
291
-            APPS_AVAILABLE+=("${app_name}")
292
-            APPS_CHOSEN+=("0")
321
+        if [[ $(enough_ram_for_app "$app_name") == "0" ]]; then
322
+            if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
323
+                # shellcheck disable=SC2068
324
+                if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
325
+                    APPS_AVAILABLE+=("${app_name}")
326
+                    APPS_CHOSEN+=("0")
327
+                fi
328
+            fi
293 329
         fi
294 330
     done
295 331
 
@@ -318,16 +354,20 @@ function detect_installable_apps {
318 354
     do
319 355
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
320 356
 
321
-        # shellcheck disable=SC2068
322
-        if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
323
-            variants_list=$(app_variants "$filename")
324
-            # check for empty string
325
-            if [ ${#variants_list} -gt 0 ]; then
326
-                APPS_AVAILABLE+=("${app_name}")
327
-                APPS_CHOSEN+=("0")
328
-                APPS_INSTALLED+=("$(app_is_installed "$app_name")")
329
-                if [[ $(app_is_installed "$app_name") == "1" ]]; then
330
-                    APPS_INSTALLED_NAMES+=("$app_name")
357
+        if [[ $(enough_ram_for_app "$app_name") == "0" ]]; then
358
+            if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
359
+                # shellcheck disable=SC2068
360
+                if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
361
+                    variants_list=$(app_variants "$filename")
362
+                    # check for empty string
363
+                    if [ ${#variants_list} -gt 0 ]; then
364
+                        APPS_AVAILABLE+=("${app_name}")
365
+                        APPS_CHOSEN+=("0")
366
+                        APPS_INSTALLED+=("$(app_is_installed "$app_name")")
367
+                        if [[ $(app_is_installed "$app_name") == "1" ]]; then
368
+                            APPS_INSTALLED_NAMES+=("$app_name")
369
+                        fi
370
+                    fi
331 371
                 fi
332 372
             fi
333 373
         fi
@@ -350,13 +390,17 @@ function detect_installed_apps {
350 390
     do
351 391
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
352 392
 
353
-        if [[ $(app_is_installed "$app_name") == "1" ]]; then
354
-            # shellcheck disable=SC2068
355
-            if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
356
-                variants_list=$(app_variants "$filename")
357
-                if [ ${#variants_list} -gt 0 ]; then
358
-                    APPS_AVAILABLE+=("${app_name}")
359
-                    APPS_INSTALLED_NAMES+=("$app_name")
393
+        if [[ $(enough_ram_for_app "$app_name") == "0" ]]; then
394
+            if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
395
+                if [[ $(app_is_installed "$app_name") == "1" ]]; then
396
+                    # shellcheck disable=SC2068
397
+                    if ! item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
398
+                        variants_list=$(app_variants "$filename")
399
+                        if [ ${#variants_list} -gt 0 ]; then
400
+                            APPS_AVAILABLE+=("${app_name}")
401
+                            APPS_INSTALLED_NAMES+=("$app_name")
402
+                        fi
403
+                    fi
360 404
                 fi
361 405
             fi
362 406
         fi
@@ -385,27 +429,30 @@ function choose_apps_for_variant {
385 429
     for filename in $FILES
386 430
     do
387 431
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
388
-
389
-        # shellcheck disable=SC2068
390
-        if item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
391
-            if grep -q "VARIANTS=" "${filename}"; then
392
-                variants_list=$(app_variants "$filename")
393
-                if [[ "${variants_list}" == 'all'* || \
394
-                      "${variants_list}" == "$variant_name" || \
395
-                      "${variants_list}" == "$variant_name "* || \
396
-                      "${variants_list}" == *" $variant_name "* || \
397
-                      "${variants_list}" == *" $variant_name" ]]; then
398
-                    if [[ $(app_is_removed "${a}") == "0" ]]; then
399
-                        #echo $"${app_name} chosen"
400
-                        APPS_CHOSEN+=("1")
432
+        if [[ $(enough_ram_for_app "$app_name") == "0" ]]; then
433
+            if [[ $(app_not_on_onion_only "$app_name") != "0" ]]; then
434
+                # shellcheck disable=SC2068
435
+                if item_in_array "${app_name}" ${APPS_AVAILABLE[@]}; then
436
+                    if grep -q "VARIANTS=" "${filename}"; then
437
+                        variants_list=$(app_variants "$filename")
438
+                        if [[ "${variants_list}" == 'all'* || \
439
+                                  "${variants_list}" == "$variant_name" || \
440
+                                  "${variants_list}" == "$variant_name "* || \
441
+                                  "${variants_list}" == *" $variant_name "* || \
442
+                                  "${variants_list}" == *" $variant_name" ]]; then
443
+                            if [[ $(app_is_removed "${a}") == "0" ]]; then
444
+                                #echo $"${app_name} chosen"
445
+                                APPS_CHOSEN+=("1")
446
+                            else
447
+                                APPS_CHOSEN+=("0")
448
+                            fi
449
+                        else
450
+                            APPS_CHOSEN+=("0")
451
+                        fi
401 452
                     else
402 453
                         APPS_CHOSEN+=("0")
403 454
                     fi
404
-                else
405
-                    APPS_CHOSEN+=("0")
406 455
                 fi
407
-            else
408
-                APPS_CHOSEN+=("0")
409 456
             fi
410 457
         fi
411 458
     done

+ 96
- 25
src/freedombone-utils-setup Datei anzeigen

@@ -223,30 +223,53 @@ function install_backports_kernel {
223 223
     fi
224 224
 }
225 225
 
226
+function save_rsys_header {
227
+    { echo "";
228
+      echo "#################";
229
+      echo "#### MODULES ####";
230
+      echo "#################";
231
+      echo '';
232
+      echo 'module(load="imuxsock")';
233
+      echo 'module(load="imklog")';
234
+      echo '';
235
+      echo '###########################';
236
+      echo '#### GLOBAL DIRECTIVES ####';
237
+      echo '###########################';
238
+      echo '';
239
+      echo "\$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat";
240
+      echo '';
241
+      echo "\$FileOwner root";
242
+      echo "\$FileGroup adm";
243
+      echo "\$FileCreateMode 0640";
244
+      echo "\$DirCreateMode 0755";
245
+      echo "\$Umask 0022";
246
+      echo '';
247
+      echo "\$WorkDirectory /var/spool/rsyslog";
248
+      echo '';
249
+      echo "\$IncludeConfig /etc/rsyslog.d/*.conf";
250
+      echo '';
251
+      echo '###############';
252
+      echo '#### RULES ####';
253
+      echo '###############';
254
+      echo ''; } > /etc/rsyslog.conf
255
+}
256
+
226 257
 function turn_off_rsys_logging {
227
-    if grep -q '/dev/null' /etc/rsyslog.conf; then
228
-        return
229
-    fi
230
-    sed -i 's|mail,news.none.*|mail,news.none      /dev/null|g' /etc/rsyslog.conf
231
-    sed -i 's|auth,authpriv.\*.*|auth,authpriv.\*         /dev/null|g' /etc/rsyslog.conf
232
-    sed -i 's|mail.info.*|mail.info            /dev/null|g' /etc/rsyslog.conf
233
-    sed -i 's|mail.warn.*|mail.warn            /dev/null|g' /etc/rsyslog.conf
234
-    sed -i 's|mail.err.*|mail.err            /dev/null|g' /etc/rsyslog.conf
235
-    sed -i 's|daemon.\*.*|daemon.\*              /dev/null|g' /etc/rsyslog.conf
236
-    sed -i 's|mail.\*.*|mail.\*              /dev/null|g' /etc/rsyslog.conf
237
-    sed -i 's|user.\*.*|user.\*              /dev/null|g' /etc/rsyslog.conf
238
-    sed -i 's|news.none;mail.none.*|news.none;mail.none /dev/null|g' /etc/rsyslog.conf
239
-    sed -i 's|\*.\*;auth,authpriv.none.*|\*.\*;auth,authpriv.none      /dev/null|g' /etc/rsyslog.conf
240
-    sed -i 's|#cron.\*|cron.\*|g' /etc/rsyslog.conf
241
-    sed -i 's|cron.\*.*|cron.\*             /dev/null|g' /etc/rsyslog.conf
242
-    shred -zu /var/log/wtmp*
243
-    shred -zu /var/log/debug*
244
-    shred -zu /var/log/cron.*
245
-    shred -zu /var/log/auth.*
246
-    shred -zu /var/log/mail.*
247
-    shred -zu /var/log/daemon.*
248
-    shred -zu /var/log/user.*
249
-    shred -zu /var/log/messages*
258
+    save_rsys_header
259
+    echo '*.*     ~' >> /etc/rsyslog.conf
260
+
261
+    rm -rf /var/log/wtmp*
262
+    rm -rf /var/log/debug*
263
+    rm -rf /var/log/cron.*
264
+    rm -rf /var/log/auth.*
265
+    rm -rf /var/log/mail.*
266
+    rm -rf /var/log/daemon.*
267
+    rm -rf /var/log/user.*
268
+    rm -rf /var/log/messages*
269
+    rm -rf /var/log/syslog*
270
+    rm -rf /var/log/alternatives*
271
+    rm -rf /var/log/faillog
272
+    rm -rf /var/log/kern.log*
250 273
 }
251 274
 
252 275
 function initial_setup {
@@ -697,6 +720,9 @@ function setup_firewall {
697 720
     function_check configure_firewall
698 721
     configure_firewall
699 722
 
723
+    function_check block_firefox_telemetry
724
+    block_firefox_telemetry
725
+
700 726
     function_check configure_firewall_ping
701 727
     configure_firewall_ping
702 728
 
@@ -794,6 +820,48 @@ function install_shellcheck {
794 820
     apt-get -yq install shellcheck
795 821
 }
796 822
 
823
+function microsd_card_optimisations {
824
+    # These values can improve performance on microSD cards
825
+
826
+    apt-get -yq install hdparm
827
+
828
+    printf '#!/bin/bash\n' > /usr/bin/enable_optimisations
829
+
830
+    if [ -f /sys/devices/virtual/bdi/179:0/read_ahead_kb ]; then
831
+        echo -n '4096' > /sys/devices/virtual/bdi/179:0/read_ahead_kb
832
+        echo "echo -n '4096' > /sys/devices/virtual/bdi/179:0/read_ahead_kb" >> /usr/bin/enable_optimisations
833
+    fi
834
+
835
+    if [ -f /proc/sys/vm/dirty_expire_centisecs ]; then
836
+        echo -n '100' > /proc/sys/vm/dirty_expire_centisecs
837
+        echo "echo -n '100' > /proc/sys/vm/dirty_expire_centisecs" >> /usr/bin/enable_optimisations
838
+    fi
839
+
840
+    if [ -f /proc/sys/vm/dirty_writeback_centisecs ]; then
841
+        echo -n '100' > /proc/sys/vm/dirty_writeback_centisecs
842
+        echo "echo -n '100' > /proc/sys/vm/dirty_writeback_centisecs" >> /usr/bin/enable_optimisations
843
+    fi
844
+
845
+    chmod +x /usr/bin/enable_optimisations
846
+
847
+    { echo '[Unit]';
848
+      echo "Description=${PROJECT_NAME} optimisations";
849
+      echo 'After=syslog.target';
850
+      echo 'After=network.target';
851
+      echo 'After=remote-fs.target';
852
+      echo '';
853
+      echo '[Service]';
854
+      echo 'Type=simple';
855
+      echo 'User=root';
856
+      echo 'Group=root';
857
+      echo 'WorkingDirectory=/root';
858
+      echo 'ExecStart=/usr/bin/enable_optimisations';
859
+      echo '';
860
+      echo '[Install]';
861
+      echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/optimisations.service
862
+      systemctl enable optimisations
863
+}
864
+
797 865
 function setup_utils {
798 866
     read_config_param "PROJECT_REPO"
799 867
     write_config_param "PROJECT_REPO" "$PROJECT_REPO"
@@ -816,6 +884,9 @@ function setup_utils {
816 884
     function_check separate_tmp_filesystem
817 885
     separate_tmp_filesystem 150
818 886
 
887
+    function_check microsd_card_optimisations
888
+    microsd_card_optimisations
889
+
819 890
     function_check proc_filesystem_settings
820 891
     proc_filesystem_settings
821 892
 
@@ -903,8 +974,8 @@ function setup_utils {
903 974
     function_check install_tor
904 975
     install_tor
905 976
 
906
-    #function_check resolve_dns_via_tor
907
-    #resolve_dns_via_tor
977
+    function_check check_tor_health
978
+    check_tor_health
908 979
 
909 980
     function_check install_command_line_browser
910 981
     install_command_line_browser

+ 4
- 4
src/freedombone-utils-web Datei anzeigen

@@ -88,11 +88,11 @@ function nginx_limits {
88 88
         max_body=$2
89 89
     fi
90 90
     filename=/etc/nginx/sites-available/$domain_name
91
-    { echo "    client_max_body_size ${max_body};";
92
-      echo '    client_body_buffer_size 128k;';
91
+    { echo "        client_max_body_size ${max_body};";
92
+      echo '        client_body_buffer_size 128k;';
93 93
       echo '';
94
-      echo '    limit_conn conn_limit_per_ip 10;';
95
-      echo '    limit_req zone=req_limit_per_ip burst=10 nodelay;';
94
+      echo '        limit_conn conn_limit_per_ip 10;';
95
+      echo '        limit_req zone=req_limit_per_ip burst=10 nodelay;';
96 96
       echo ''; } >> "$filename"
97 97
 }
98 98
 

+ 2
- 2
src/freedombone-utils-wifi Datei anzeigen

@@ -88,10 +88,10 @@ function setup_wifi_atheros {
88 88
 
89 89
     atheros_drivers_file=drivers/firmware-ath9k-htc.deb
90 90
     if [ ! -f $atheros_drivers_file ]; then
91
-        if [ ! -f ~/freedombone/$atheros_drivers_file ]; then
91
+        if [ ! -f "$HOME/${PROJECT_NAME}/$atheros_drivers_file" ]; then
92 92
             return
93 93
         else
94
-            atheros_drivers_file=~/freedombone/$atheros_drivers_file
94
+            atheros_drivers_file="$HOME/${PROJECT_NAME}/$atheros_drivers_file"
95 95
         fi
96 96
     else
97 97
         atheros_drivers_file=$(pwd)/$atheros_drivers_file

+ 13
- 0
tests/check-ssh.sh Datei anzeigen

@@ -44,6 +44,19 @@ case $1 in
44 44
             exit 1
45 45
         fi
46 46
         ;;
47
+    installed)
48
+	OPENSSH_SERVER=$(dpkg -s openssh-server | grep -i "Status:.*install.*ok.*installed" | wc -l)
49
+	OPENSSH_CLIENT=$(dpkg -s openssh-client | grep -i "Status:.*install.*ok.*installed" | wc -l)
50
+	if [ ${OPENSSH_SERVER} -eq 1 ]; then
51
+	    if [ ${OPENSSH_CLIENT} -eq 1 ]; then
52
+		:
53
+	    else
54
+		exit 1
55
+	    fi
56
+	else
57
+	    exit 1
58
+	fi	
59
+	;;    
47 60
     sshd_status)
48 61
         if systemctl status sshd | grep "Active:.*(running)";then
49 62
             :

+ 9
- 0
tests/output.sh Datei anzeigen

@@ -1399,6 +1399,15 @@ disabled. The "nis" service can be disabled with the following commands:\n\n#upd
1399 1399
                   printf '\n######################\n\nSTIG-ID:RHEL-06-000224\n\nVulnerability Discussion: Due to its usage for maintenance and security-supporting tasks, enabling the cron daemon is essential.\n\nFix text: The "crond" service is used to execute commands at preconfigured times. It is required by almost all systems to perform necessary maintenance tasks, such as notifying root of system activity. The "crond" service can be enabled with the following commands:\n\n#update-rc.d cron defaults\nservice cron start\n\n######################\n\n' >> $LOG
1400 1400
               fi
1401 1401
               ;;
1402
+    SV-86857r1_rule) if [ "$3" = "en" ]; then
1403
+			 log_msg $2 'OpenSSH server and client must be installed.'
1404
+		     else
1405
+			 log_msg $2 '必须安装OpenSSH服务器和客户端'
1406
+		     fi		     
1407
+		     if [ $2 -ne 0 ];then
1408
+			 printf '\n######################\n\nWithout protection of the transmitted information, confidentiality and integrity may be compromised because unprotected communications can be intercepted and either read or altered. \n\nThis requirement applies to both internal and external networks and all types of information system components from which information can be transmitted (e.g., servers, mobile devices, notebook computers, printers, copiers, scanners, and facsimile machines). Communication paths outside the physical protection of a controlled boundary are exposed to the possibility of interception and modification. \n\nProtecting the confidentiality and integrity of organizational information can be accomplished by physical means (e.g., employing physical distribution systems) or by logical means (e.g., employing cryptographic techniques). If physical means of protection are employed, logical means (cryptography) do not have to be employed, and vice versa.\n\n######################\n\n' >> $LOG
1409
+		     fi
1410
+		     ;;
1402 1411
     V-38607)  if [ "$3" = "en" ]; then
1403 1412
                   log_msg $2 'The SSH daemon must be configured to use only the SSHv2 protocol.'
1404 1413
               else

+ 45
- 135
website/EN/app_pleroma.html Datei anzeigen

@@ -3,33 +3,26 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-04-14 Sat 22:26 -->
7
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
-<meta name="viewport" content="width=device-width, initial-scale=1" />
9
-<title>&lrm;</title>
10
-<meta name="generator" content="Org mode" />
11
-<meta name="author" content="Bob Mottram" />
12
-<meta name="description" content="How to use Pleroma"
6
+<title></title>
7
+<!-- 2018-04-18 Wed 15:48 -->
8
+<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
+<meta  name="generator" content="Org-mode" />
10
+<meta  name="author" content="Bob Mottram" />
11
+<meta  name="description" content="How to use Pleroma"
13 12
  />
14
-<meta name="keywords" content="freedombone, pleroma" />
13
+<meta  name="keywords" content="freedombone, pleroma" />
15 14
 <style type="text/css">
16 15
  <!--/*--><![CDATA[/*><!--*/
17
-  .title  { text-align: center;
18
-             margin-bottom: .2em; }
19
-  .subtitle { text-align: center;
20
-              font-size: medium;
21
-              font-weight: bold;
22
-              margin-top:0; }
16
+  .title  { text-align: center; }
23 17
   .todo   { font-family: monospace; color: red; }
24
-  .done   { font-family: monospace; color: green; }
25
-  .priority { font-family: monospace; color: orange; }
18
+  .done   { color: green; }
26 19
   .tag    { background-color: #eee; font-family: monospace;
27 20
             padding: 2px; font-size: 80%; font-weight: normal; }
28 21
   .timestamp { color: #bebebe; }
29 22
   .timestamp-kwd { color: #5f9ea0; }
30
-  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
-  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
-  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
23
+  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
+  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
+  .center { margin-left: auto; margin-right: auto; text-align: center; }
33 26
   .underline { text-decoration: underline; }
34 27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35 28
   p.verse { margin-left: 3%; }
@@ -56,111 +49,27 @@
56 49
     border: 1px solid black;
57 50
   }
58 51
   pre.src:hover:before { display: inline;}
59
-  /* Languages per Org manual */
60
-  pre.src-asymptote:before { content: 'Asymptote'; }
61
-  pre.src-awk:before { content: 'Awk'; }
62
-  pre.src-C:before { content: 'C'; }
63
-  /* pre.src-C++ doesn't work in CSS */
64
-  pre.src-clojure:before { content: 'Clojure'; }
65
-  pre.src-css:before { content: 'CSS'; }
66
-  pre.src-D:before { content: 'D'; }
67
-  pre.src-ditaa:before { content: 'ditaa'; }
68
-  pre.src-dot:before { content: 'Graphviz'; }
69
-  pre.src-calc:before { content: 'Emacs Calc'; }
52
+  pre.src-sh:before    { content: 'sh'; }
53
+  pre.src-bash:before  { content: 'sh'; }
70 54
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
-  pre.src-fortran:before { content: 'Fortran'; }
72
-  pre.src-gnuplot:before { content: 'gnuplot'; }
73
-  pre.src-haskell:before { content: 'Haskell'; }
74
-  pre.src-hledger:before { content: 'hledger'; }
75
-  pre.src-java:before { content: 'Java'; }
76
-  pre.src-js:before { content: 'Javascript'; }
77
-  pre.src-latex:before { content: 'LaTeX'; }
78
-  pre.src-ledger:before { content: 'Ledger'; }
79
-  pre.src-lisp:before { content: 'Lisp'; }
80
-  pre.src-lilypond:before { content: 'Lilypond'; }
81
-  pre.src-lua:before { content: 'Lua'; }
82
-  pre.src-matlab:before { content: 'MATLAB'; }
83
-  pre.src-mscgen:before { content: 'Mscgen'; }
84
-  pre.src-ocaml:before { content: 'Objective Caml'; }
85
-  pre.src-octave:before { content: 'Octave'; }
86
-  pre.src-org:before { content: 'Org mode'; }
87
-  pre.src-oz:before { content: 'OZ'; }
88
-  pre.src-plantuml:before { content: 'Plantuml'; }
89
-  pre.src-processing:before { content: 'Processing.js'; }
90
-  pre.src-python:before { content: 'Python'; }
91
-  pre.src-R:before { content: 'R'; }
92
-  pre.src-ruby:before { content: 'Ruby'; }
93
-  pre.src-sass:before { content: 'Sass'; }
94
-  pre.src-scheme:before { content: 'Scheme'; }
95
-  pre.src-screen:before { content: 'Gnu Screen'; }
96
-  pre.src-sed:before { content: 'Sed'; }
97
-  pre.src-sh:before { content: 'shell'; }
98
-  pre.src-sql:before { content: 'SQL'; }
99
-  pre.src-sqlite:before { content: 'SQLite'; }
100
-  /* additional languages in org.el's org-babel-load-languages alist */
101
-  pre.src-forth:before { content: 'Forth'; }
102
-  pre.src-io:before { content: 'IO'; }
103
-  pre.src-J:before { content: 'J'; }
104
-  pre.src-makefile:before { content: 'Makefile'; }
105
-  pre.src-maxima:before { content: 'Maxima'; }
106
-  pre.src-perl:before { content: 'Perl'; }
107
-  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
-  pre.src-scala:before { content: 'Scala'; }
109
-  pre.src-shell:before { content: 'Shell Script'; }
110
-  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
-  /* additional language identifiers per "defun org-babel-execute"
112
-       in ob-*.el */
113
-  pre.src-cpp:before  { content: 'C++'; }
114
-  pre.src-abc:before  { content: 'ABC'; }
115
-  pre.src-coq:before  { content: 'Coq'; }
116
-  pre.src-groovy:before  { content: 'Groovy'; }
117
-  /* additional language identifiers from org-babel-shell-names in
118
-     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
-     the execution function name together. */
120
-  pre.src-bash:before  { content: 'bash'; }
121
-  pre.src-csh:before  { content: 'csh'; }
122
-  pre.src-ash:before  { content: 'ash'; }
123
-  pre.src-dash:before  { content: 'dash'; }
124
-  pre.src-ksh:before  { content: 'ksh'; }
125
-  pre.src-mksh:before  { content: 'mksh'; }
126
-  pre.src-posh:before  { content: 'posh'; }
127
-  /* Additional Emacs modes also supported by the LaTeX listings package */
128
-  pre.src-ada:before { content: 'Ada'; }
129
-  pre.src-asm:before { content: 'Assembler'; }
130
-  pre.src-caml:before { content: 'Caml'; }
131
-  pre.src-delphi:before { content: 'Delphi'; }
132
-  pre.src-html:before { content: 'HTML'; }
133
-  pre.src-idl:before { content: 'IDL'; }
134
-  pre.src-mercury:before { content: 'Mercury'; }
135
-  pre.src-metapost:before { content: 'MetaPost'; }
136
-  pre.src-modula-2:before { content: 'Modula-2'; }
137
-  pre.src-pascal:before { content: 'Pascal'; }
138
-  pre.src-ps:before { content: 'PostScript'; }
139
-  pre.src-prolog:before { content: 'Prolog'; }
140
-  pre.src-simula:before { content: 'Simula'; }
141
-  pre.src-tcl:before { content: 'tcl'; }
142
-  pre.src-tex:before { content: 'TeX'; }
143
-  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
-  pre.src-verilog:before { content: 'Verilog'; }
145
-  pre.src-vhdl:before { content: 'VHDL'; }
146
-  pre.src-xml:before { content: 'XML'; }
147
-  pre.src-nxml:before { content: 'XML'; }
148
-  /* add a generic configuration mode; LaTeX export needs an additional
149
-     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
-  pre.src-conf:before { content: 'Configuration File'; }
55
+  pre.src-R:before     { content: 'R'; }
56
+  pre.src-perl:before  { content: 'Perl'; }
57
+  pre.src-java:before  { content: 'Java'; }
58
+  pre.src-sql:before   { content: 'SQL'; }
151 59
 
152 60
   table { border-collapse:collapse; }
153 61
   caption.t-above { caption-side: top; }
154 62
   caption.t-bottom { caption-side: bottom; }
155 63
   td, th { vertical-align:top;  }
156
-  th.org-right  { text-align: center;  }
157
-  th.org-left   { text-align: center;   }
158
-  th.org-center { text-align: center; }
159
-  td.org-right  { text-align: right;  }
160
-  td.org-left   { text-align: left;   }
161
-  td.org-center { text-align: center; }
64
+  th.right  { text-align: center;  }
65
+  th.left   { text-align: center;   }
66
+  th.center { text-align: center; }
67
+  td.right  { text-align: right;  }
68
+  td.left   { text-align: left;   }
69
+  td.center { text-align: center; }
162 70
   dt { font-weight: bold; }
163
-  .footpara { display: inline; }
71
+  .footpara:nth-child(2) { display: inline; }
72
+  .footpara { display: block; }
164 73
   .footdef  { margin-bottom: 1em; }
165 74
   .figure { padding: 1em; }
166 75
   .figure p { text-align: center; }
@@ -180,7 +89,6 @@
180 89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
181 90
   .org-info-js_search-highlight
182 91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
-  .org-svg { width: 90%; }
184 92
   /*]]>*/-->
185 93
 </style>
186 94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -189,7 +97,7 @@
189 97
 @licstart  The following is the entire license notice for the
190 98
 JavaScript code in this tag.
191 99
 
192
-Copyright (C) 2012-2017 Free Software Foundation, Inc.
100
+Copyright (C) 2012-2013 Free Software Foundation, Inc.
193 101
 
194 102
 The JavaScript code in this tag is free software: you can
195 103
 redistribute it and/or modify it under the terms of the GNU
@@ -236,6 +144,7 @@ for the JavaScript code in this tag.
236 144
 <a name="top" id="top"></a>
237 145
 </div>
238 146
 <div id="content">
147
+<h1 class="title"></h1>
239 148
 
240 149
 <div class="figure">
241 150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
@@ -262,14 +171,15 @@ Some general advice about life in the fediverse <a href="./fediverse.html">can b
262 171
 </p>
263 172
 </div>
264 173
 
265
-<div id="outline-container-org0daf1b1" class="outline-2">
266
-<h2 id="org0daf1b1">Installation</h2>
267
-<div class="outline-text-2" id="text-org0daf1b1">
174
+<div id="outline-container-sec-1" class="outline-2">
175
+<h2 id="sec-1">Installation</h2>
176
+<div class="outline-text-2" id="text-1">
268 177
 <p>
269 178
 Log into your system with:
270 179
 </p>
271 180
 
272 181
 <div class="org-src-container">
182
+
273 183
 <pre class="src src-bash">ssh myusername@mydomain -p 2222
274 184
 </pre>
275 185
 </div>
@@ -284,11 +194,11 @@ Select <b>Add/Remove Apps</b> then <b>pleroma</b>. You will then be asked for a
284 194
 </div>
285 195
 </div>
286 196
 
287
-<div id="outline-container-org79fb756" class="outline-2">
288
-<h2 id="org79fb756">Initial setup</h2>
289
-<div class="outline-text-2" id="text-org79fb756">
197
+<div id="outline-container-sec-2" class="outline-2">
198
+<h2 id="sec-2">Initial setup</h2>
199
+<div class="outline-text-2" id="text-2">
290 200
 <p>
291
-The first thing you'll need to do is register a new account. You can set your profile details and profile image by selecting the small settings icon to the right of your name.
201
+The first thing you'll need to do is to obtain your login details. From the <b>administrator control panel</b> select <b>security settings</b> then <b>passwords</b> then <b>pleroma</b>. This gives the password you will need to log in, together with the username you gave during installation of the Freedombone system.
292 202
 </p>
293 203
 
294 204
 <p>
@@ -297,9 +207,9 @@ Once you have done that then you can disable further registrations from the <b>A
297 207
 </div>
298 208
 </div>
299 209
 
300
-<div id="outline-container-org260dfa9" class="outline-2">
301
-<h2 id="org260dfa9">Mastodon user interface</h2>
302
-<div class="outline-text-2" id="text-org260dfa9">
210
+<div id="outline-container-sec-3" class="outline-2">
211
+<h2 id="sec-3">Mastodon user interface</h2>
212
+<div class="outline-text-2" id="text-3">
303 213
 <p>
304 214
 If you prefer a Tweetdeck-style user interface, similar to Mastodon, then once you have registered an account navigate to <b>/yourpleromadomainname/web</b> and log in.
305 215
 </p>
@@ -312,9 +222,9 @@ If you prefer a Tweetdeck-style user interface, similar to Mastodon, then once y
312 222
 </div>
313 223
 </div>
314 224
 
315
-<div id="outline-container-org2c42cb3" class="outline-2">
316
-<h2 id="org2c42cb3">Mobile apps</h2>
317
-<div class="outline-text-2" id="text-org2c42cb3">
225
+<div id="outline-container-sec-4" class="outline-2">
226
+<h2 id="sec-4">Mobile apps</h2>
227
+<div class="outline-text-2" id="text-4">
318 228
 <p>
319 229
 It's also possible to use Mastodon apps together with Pleroma, such as Tusky, since it supports the Mastodon API. You may need to install <b>IcecatMobile</b> and set it as your default browser (under <b>Settings/Apps/Menu</b>) in order for the initial oauth registration process to work.
320 230
 </p>
@@ -327,9 +237,9 @@ It's also possible to use Mastodon apps together with Pleroma, such as Tusky, si
327 237
 </div>
328 238
 </div>
329 239
 
330
-<div id="outline-container-org07c16bd" class="outline-2">
331
-<h2 id="org07c16bd">Blocking controls</h2>
332
-<div class="outline-text-2" id="text-org07c16bd">
240
+<div id="outline-container-sec-5" class="outline-2">
241
+<h2 id="sec-5">Blocking controls</h2>
242
+<div class="outline-text-2" id="text-5">
333 243
 
334 244
 <div class="figure">
335 245
 <p><img src="images/controlpanel/control_panel_blocking.jpg" alt="control_panel_blocking.jpg" width="80%" align="center" />

+ 122
- 45
website/EN/armbian.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 14:28 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Installing Freedombone on Armbian"
6
+<!-- 2018-04-21 Sat 14:58 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Installing Freedombone on Armbian"
12 13
  />
13
-<meta  name="keywords" content="freedombone, debian, armbian, sbc" />
14
+<meta name="keywords" content="freedombone, debian, armbian, sbc" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,7 +236,6 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
@@ -152,12 +243,7 @@ for the JavaScript code in this tag.
152 243
 </div>
153 244
 
154 245
 
155
-<div class="export">
156
-<p>
157
-&lt;center&gt;&lt;h1&gt;Installing on Armbian&lt;/h1&gt;&lt;/center&gt;
158
-</p>
159
-
160
-</div>
246
+<center><h1>Installing on Armbian</h1></center>
161 247
 
162 248
 <blockquote>
163 249
 <p>
@@ -174,8 +260,7 @@ Download the Armbian image for your board. It must be version 9 (Stretch), other
174 260
 </p>
175 261
 
176 262
 <div class="org-src-container">
177
-
178
-<pre class="src src-bash">sudo dd bs=1M if=[Armbian .img file] of=/dev/sdX conv=fdatasync
263
+<pre class="src src-bash">sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=[Armbian .img file] <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
179 264
 </pre>
180 265
 </div>
181 266
 
@@ -200,7 +285,6 @@ Once you know the local IP address of your ARM board then you can log into it wi
200 285
 </p>
201 286
 
202 287
 <div class="org-src-container">
203
-
204 288
 <pre class="src src-bash">ssh root@[local IP address]
205 289
 </pre>
206 290
 </div>
@@ -220,7 +304,6 @@ When the user account is created type <b>exit</b> to leave the ssh session then
220 304
 </p>
221 305
 
222 306
 <div class="org-src-container">
223
-
224 307
 <pre class="src src-bash">ssh myusername@[local IP address]
225 308
 </pre>
226 309
 </div>
@@ -230,7 +313,6 @@ Become the root user:
230 313
 </p>
231 314
 
232 315
 <div class="org-src-container">
233
-
234 316
 <pre class="src src-bash">sudo su
235 317
 </pre>
236 318
 </div>
@@ -240,10 +322,9 @@ Then clone the Freedombone repository and checkout the stretch development branc
240 322
 </p>
241 323
 
242 324
 <div class="org-src-container">
243
-
244 325
 <pre class="src src-bash">apt-get -y install git dialog build-essential
245 326
 git clone https://github.com/bashrc/freedombone
246
-cd freedombone
327
+<span class="org-builtin">cd</span> freedombone
247 328
 git checkout stretch
248 329
 </pre>
249 330
 </div>
@@ -253,7 +334,6 @@ Install the Freedombone commands:
253 334
 </p>
254 335
 
255 336
 <div class="org-src-container">
256
-
257 337
 <pre class="src src-bash">make install
258 338
 </pre>
259 339
 </div>
@@ -263,7 +343,6 @@ And now you can begin installing the Freedombone system. There are two ways of d
263 343
 </p>
264 344
 
265 345
 <div class="org-src-container">
266
-
267 346
 <pre class="src src-bash">freedombone menuconfig
268 347
 </pre>
269 348
 </div>
@@ -273,7 +352,6 @@ Alternatively, if you don't own a domain name, don't have administrator access t
273 352
 </p>
274 353
 
275 354
 <div class="org-src-container">
276
-
277 355
 <pre class="src src-bash">freedombone menuconfig-onion
278 356
 </pre>
279 357
 </div>
@@ -283,7 +361,6 @@ You will then be taken through a few questions and the system will install. Afte
283 361
 </p>
284 362
 
285 363
 <div class="org-src-container">
286
-
287 364
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
288 365
 </pre>
289 366
 </div>

+ 215
- 140
website/EN/faq.html Datei anzeigen

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-04-14 Sat 15:14 -->
6
+<!-- 2018-05-02 Wed 10:48 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -262,151 +262,163 @@ for the JavaScript code in this tag.
262 262
 </colgroup>
263 263
 <tbody>
264 264
 <tr>
265
-<td class="org-left"><a href="#org2ecea54">What applications are supported?</a></td>
265
+<td class="org-left"><a href="#org93b2b96">What applications are supported?</a></td>
266 266
 </tr>
267 267
 
268 268
 <tr>
269
-<td class="org-left"><a href="#orgaa0a705">I don't have a static IP address. Can I still install this system?</a></td>
269
+<td class="org-left"><a href="#org6b1a1dc">I don't have a static IP address. Can I still install this system?</a></td>
270 270
 </tr>
271 271
 
272 272
 <tr>
273
-<td class="org-left"><a href="#org340be8a">Why Freedombone and not FreedomBox?</a></td>
273
+<td class="org-left"><a href="#orgf904a2b">What are the best microSD cards to use?</a></td>
274 274
 </tr>
275 275
 
276 276
 <tr>
277
-<td class="org-left"><a href="#orgccf5702">Why not support building images for Raspberry Pi?</a></td>
277
+<td class="org-left"><a href="#orgd5b8a5e">On a single board computer can I boot from an external SSD or hard drive?</a></td>
278 278
 </tr>
279 279
 
280 280
 <tr>
281
-<td class="org-left"><a href="#org2af436d">Why use Tor? I've heard it's used by bad people</a></td>
281
+<td class="org-left"><a href="#org5e06ace">Why Freedombone and not FreedomBox?</a></td>
282 282
 </tr>
283 283
 
284 284
 <tr>
285
-<td class="org-left"><a href="#org3981923">How is Tor integrated with Freedombone?</a></td>
285
+<td class="org-left"><a href="#org84e7731">Why not support building images for Raspberry Pi?</a></td>
286 286
 </tr>
287 287
 
288 288
 <tr>
289
-<td class="org-left"><a href="#orgb732986">Can I add a clearnet domain to an onion build?</a></td>
289
+<td class="org-left"><a href="#orgfa08e9c">Why use Tor? I've heard it's used by bad people</a></td>
290 290
 </tr>
291 291
 
292 292
 <tr>
293
-<td class="org-left"><a href="#orgb1382c0">Why use Github?</a></td>
293
+<td class="org-left"><a href="#org047311c">How is Tor integrated with Freedombone?</a></td>
294 294
 </tr>
295 295
 
296 296
 <tr>
297
-<td class="org-left"><a href="#org8d5c33e">After using nmap or other scanning tool I can no longer log in</a></td>
297
+<td class="org-left"><a href="#org8a3b2df">Can I add a clearnet domain to an onion build?</a></td>
298 298
 </tr>
299 299
 
300 300
 <tr>
301
-<td class="org-left"><a href="#orgcaa8f8c">Should I upload my GPG keys to keybase.io?</a></td>
301
+<td class="org-left"><a href="#org7f5c083">Why use Github?</a></td>
302 302
 </tr>
303 303
 
304 304
 <tr>
305
-<td class="org-left"><a href="#org787d325">Keys and emails should not be stored on servers. Why do you do that?</a></td>
305
+<td class="org-left"><a href="#org8fe35e9">What are the data protection implications of running this system?</a></td>
306 306
 </tr>
307 307
 
308 308
 <tr>
309
-<td class="org-left"><a href="#org45d4472">Why can't I access my .onion site with a Tor browser?</a></td>
309
+<td class="org-left"><a href="#org972c439">After using nmap or other scanning tool I can no longer log in</a></td>
310 310
 </tr>
311 311
 
312 312
 <tr>
313
-<td class="org-left"><a href="#org000c926">What is the best hardware to run this system on?</a></td>
313
+<td class="org-left"><a href="#org67aacdc">Should I upload my GPG keys to keybase.io?</a></td>
314 314
 </tr>
315 315
 
316 316
 <tr>
317
-<td class="org-left"><a href="#org36ddec5">Can I add more users to the system?</a></td>
317
+<td class="org-left"><a href="#orgbc89a7d">Keys and emails should not be stored on servers. Why do you do that?</a></td>
318 318
 </tr>
319 319
 
320 320
 <tr>
321
-<td class="org-left"><a href="#orgdd36f96">Why not use Signal for mobile chat?</a></td>
321
+<td class="org-left"><a href="#org4d0819e">Why can't I access my .onion site with a Tor browser?</a></td>
322 322
 </tr>
323 323
 
324 324
 <tr>
325
-<td class="org-left"><a href="#org79827b5">What is the most secure chat app to use on mobile?</a></td>
325
+<td class="org-left"><a href="#org7256ac2">What is the best hardware to run this system on?</a></td>
326 326
 </tr>
327 327
 
328 328
 <tr>
329
-<td class="org-left"><a href="#org5e417ee">How do I remove a user from the system?</a></td>
329
+<td class="org-left"><a href="#org890ba4a">Can I add more users to the system?</a></td>
330 330
 </tr>
331 331
 
332 332
 <tr>
333
-<td class="org-left"><a href="#org24c86ab">Why is logging for web sites turned off by default?</a></td>
333
+<td class="org-left"><a href="#org61728f5">Why not use Signal for mobile chat?</a></td>
334 334
 </tr>
335 335
 
336 336
 <tr>
337
-<td class="org-left"><a href="#orgd972cda">How do I reset the tripwire?</a></td>
337
+<td class="org-left"><a href="#orgfd44c68">What is the most secure chat app to use on mobile?</a></td>
338 338
 </tr>
339 339
 
340 340
 <tr>
341
-<td class="org-left"><a href="#org4d6c566">Is metadata protected?</a></td>
341
+<td class="org-left"><a href="#orgb4af501">How do I remove a user from the system?</a></td>
342 342
 </tr>
343 343
 
344 344
 <tr>
345
-<td class="org-left"><a href="#orga67d74a">How do I create email processing rules?</a></td>
345
+<td class="org-left"><a href="#orgc664233">Why is logging for web sites turned off by default?</a></td>
346 346
 </tr>
347 347
 
348 348
 <tr>
349
-<td class="org-left"><a href="#org69c34a0">Why isn't dynamic DNS working?</a></td>
349
+<td class="org-left"><a href="#orgcfb3562">How do I reset the tripwire?</a></td>
350 350
 </tr>
351 351
 
352 352
 <tr>
353
-<td class="org-left"><a href="#orgd5c5acc">How do I change my encryption settings?</a></td>
353
+<td class="org-left"><a href="#org693ad33">Is metadata protected?</a></td>
354 354
 </tr>
355 355
 
356 356
 <tr>
357
-<td class="org-left"><a href="#orgfc6fd46">How do I get a domain name?</a></td>
357
+<td class="org-left"><a href="#org3879dd9">How do I create email processing rules?</a></td>
358 358
 </tr>
359 359
 
360 360
 <tr>
361
-<td class="org-left"><a href="#org90eafd9">How do I get a "real" SSL/TLS/HTTPS certificate?</a></td>
361
+<td class="org-left"><a href="#org2e9552d">Why isn't dynamic DNS working?</a></td>
362 362
 </tr>
363 363
 
364 364
 <tr>
365
-<td class="org-left"><a href="#orgc91fc72">How do I renew a Let's Encrypt certificate?</a></td>
365
+<td class="org-left"><a href="#org88c1819">How do I change my encryption settings?</a></td>
366 366
 </tr>
367 367
 
368 368
 <tr>
369
-<td class="org-left"><a href="#org73b061c">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</a></td>
369
+<td class="org-left"><a href="#org7fa4cfd">How do I get a domain name?</a></td>
370 370
 </tr>
371 371
 
372 372
 <tr>
373
-<td class="org-left"><a href="#org6a6cce4">Why not use the services of $company instead? They took the Seppuku pledge</a></td>
373
+<td class="org-left"><a href="#org082c153">How do I get a "real" SSL/TLS/HTTPS certificate?</a></td>
374 374
 </tr>
375 375
 
376 376
 <tr>
377
-<td class="org-left"><a href="#orgc36400d">Why does my email keep getting rejected as spam by Gmail/etc?</a></td>
377
+<td class="org-left"><a href="#org30ff050">How do I renew a Let's Encrypt certificate?</a></td>
378 378
 </tr>
379 379
 
380 380
 <tr>
381
-<td class="org-left"><a href="#org73e8a5c">Tor is censored/blocked in my area. What can I do?</a></td>
381
+<td class="org-left"><a href="#org5e86349">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</a></td>
382 382
 </tr>
383 383
 
384 384
 <tr>
385
-<td class="org-left"><a href="#org1332523">I want to block a particular domain from getting its content into my social network sites</a></td>
385
+<td class="org-left"><a href="#org839eacd">Why not use the services of $company instead? They took the Seppuku pledge</a></td>
386 386
 </tr>
387 387
 
388 388
 <tr>
389
-<td class="org-left"><a href="#org7e84bef">The mesh system doesn't boot from USB drive</a></td>
389
+<td class="org-left"><a href="#org7b528f9">Why does my email keep getting rejected as spam by Gmail/etc?</a></td>
390 390
 </tr>
391 391
 
392 392
 <tr>
393
-<td class="org-left"><a href="#orgdae680c">Mesh system doesn't connect to the network</a></td>
393
+<td class="org-left"><a href="#org840d72e">Tor is censored/blocked in my area. What can I do?</a></td>
394
+</tr>
395
+
396
+<tr>
397
+<td class="org-left"><a href="#org4f99713">I want to block a particular domain from getting its content into my social network sites</a></td>
398
+</tr>
399
+
400
+<tr>
401
+<td class="org-left"><a href="#org99e5150">The mesh system doesn't boot from USB drive</a></td>
402
+</tr>
403
+
404
+<tr>
405
+<td class="org-left"><a href="#org80b7531">Mesh system doesn't connect to the network</a></td>
394 406
 </tr>
395 407
 </tbody>
396 408
 </table>
397 409
 </div>
398 410
 
399
-<div id="outline-container-org2ecea54" class="outline-2">
400
-<h2 id="org2ecea54">What applications are supported?</h2>
401
-<div class="outline-text-2" id="text-org2ecea54">
411
+<div id="outline-container-org93b2b96" class="outline-2">
412
+<h2 id="org93b2b96">What applications are supported?</h2>
413
+<div class="outline-text-2" id="text-org93b2b96">
402 414
 <p>
403 415
 <a href="./apps.html">See here</a> for the complete list of apps. In addition to those as part of the base install you get an email server.
404 416
 </p>
405 417
 </div>
406 418
 </div>
407
-<div id="outline-container-orgaa0a705" class="outline-2">
408
-<h2 id="orgaa0a705">I don't have a static IP address. Can I still install this system?</h2>
409
-<div class="outline-text-2" id="text-orgaa0a705">
419
+<div id="outline-container-org6b1a1dc" class="outline-2">
420
+<h2 id="org6b1a1dc">I don't have a static IP address. Can I still install this system?</h2>
421
+<div class="outline-text-2" id="text-org6b1a1dc">
410 422
 <p>
411 423
 Yes. The minimum requirements are to have some hardware that you can install Debian onto and also that you have administrator access to your internet router so that you can forward ports to the system which has Freedombone installed.
412 424
 </p>
@@ -416,17 +428,58 @@ The lack of a static IP address can be worked around by using a dynamic DNS serv
416 428
 </p>
417 429
 </div>
418 430
 </div>
419
-<div id="outline-container-org340be8a" class="outline-2">
420
-<h2 id="org340be8a">Why Freedombone and not FreedomBox?</h2>
421
-<div class="outline-text-2" id="text-org340be8a">
431
+<div id="outline-container-orgf904a2b" class="outline-2">
432
+<h2 id="orgf904a2b">What are the best microSD cards to use?</h2>
433
+<div class="outline-text-2" id="text-orgf904a2b">
434
+<p>
435
+There can be big differences in the performance of microSD cards, and the cheaper ones are almost invariably terrible and/or unusable. Sandisk and Samsung currently appear to be the better brands. You can find some performance benchmarks <a href="http://www.pidramble.com/wiki/benchmarks/microsd-cards">here</a>. However, benchmarks like this only give a very rough idea of performance and they can vary significantly between individual cards even within the same brand.
436
+</p>
437
+</div>
438
+</div>
439
+<div id="outline-container-orgd5b8a5e" class="outline-2">
440
+<h2 id="orgd5b8a5e">On a single board computer can I boot from an external SSD or hard drive?</h2>
441
+<div class="outline-text-2" id="text-orgd5b8a5e">
442
+<p>
443
+Some single board computers, such as Cubieboards or OLinuxino, have a SATA socket on them which enables an external drive to be connected. This is usually intended for extra file storage, but it is also possible to run the operating system from an external drive. This can have the advantage of significantly increasing the read/write performance and your apps will appear to run more quickly.
444
+</p>
445
+
446
+<p>
447
+Typically a microSD read speed is 10-30MB/s. An SSD or hard drive can be 100MB/s or more, so that's a big potential gain.
448
+</p>
449
+
450
+<p>
451
+Single board computers usually don't have the capability of booting directly from an external drive, but what you can do is boot from a partition on a microSD drive, which then runs the main filesystem (the rootfs) from the external drive.
452
+</p>
453
+
454
+<p>
455
+To create an image suitable for running from an SSD or hard drive use the &#x2013;sata option, such as:
456
+</p>
457
+
458
+<div class="org-src-container">
459
+<pre class="src src-bash">freedombone-image -t cubieboard2 --sata sda2
460
+</pre>
461
+</div>
462
+
463
+<p>
464
+Note that the sata option should be set to point to the second partition on the drive, which is normally sda2.
465
+</p>
466
+
467
+<p>
468
+When the image is created then use the dd command to copy it both to a microSD card and to the SSD or hard drive. Plug them both into the board and it should then boot and use the external drive.
469
+</p>
470
+</div>
471
+</div>
472
+<div id="outline-container-org5e06ace" class="outline-2">
473
+<h2 id="org5e06ace">Why Freedombone and not FreedomBox?</h2>
474
+<div class="outline-text-2" id="text-org5e06ace">
422 475
 <p>
423 476
 When the project began in late 2013 the FreedomBox project seemed to be going nowhere, and was only designed to work with the DreamPlug hardware. There was some new hardware out - the Beaglebone Black - which could run Debian and was also a free hardware design so seemed more appropriate. Hence the name "Freedombone", being like FreedomBox but on a Beaglebone. There are some similarities and differences between the two projects:
424 477
 </p>
425 478
 </div>
426 479
 
427
-<div id="outline-container-org918eba1" class="outline-3">
428
-<h3 id="org918eba1">Similarities</h3>
429
-<div class="outline-text-3" id="text-org918eba1">
480
+<div id="outline-container-orgb6fee98" class="outline-3">
481
+<h3 id="orgb6fee98">Similarities</h3>
482
+<div class="outline-text-3" id="text-orgb6fee98">
430 483
 <ul class="org-ul">
431 484
 <li>Uses freedom-maker and vmdebootstrap to build debian images</li>
432 485
 <li>Supports the use of Tor onion addresses to access websites</li>
@@ -440,9 +493,9 @@ When the project began in late 2013 the FreedomBox project seemed to be going no
440 493
 </ul>
441 494
 </div>
442 495
 </div>
443
-<div id="outline-container-orgf04a715" class="outline-3">
444
-<h3 id="orgf04a715">Differences</h3>
445
-<div class="outline-text-3" id="text-orgf04a715">
496
+<div id="outline-container-org0568d2b" class="outline-3">
497
+<h3 id="org0568d2b">Differences</h3>
498
+<div class="outline-text-3" id="text-org0568d2b">
446 499
 <ul class="org-ul">
447 500
 <li>FreedomBox is a Debian pure blend. Freedombone is not</li>
448 501
 <li>Freedombone only supports Free Software. FreedomBox includes some closed binary boot blobs for certain ARM boards</li>
@@ -457,9 +510,9 @@ When the project began in late 2013 the FreedomBox project seemed to be going no
457 510
 </div>
458 511
 </div>
459 512
 </div>
460
-<div id="outline-container-orgccf5702" class="outline-2">
461
-<h2 id="orgccf5702">Why not support building images for Raspberry Pi?</h2>
462
-<div class="outline-text-2" id="text-orgccf5702">
513
+<div id="outline-container-org84e7731" class="outline-2">
514
+<h2 id="org84e7731">Why not support building images for Raspberry Pi?</h2>
515
+<div class="outline-text-2" id="text-org84e7731">
463 516
 <p>
464 517
 The FreedomBox project supports Raspberry Pi builds, and the image build system for Freedombone is based on the same system. However, although the Raspberry Pi can run a version of Debian it requires a closed proprietary blob in order to boot the hardware. Who knows what that blob might contain or what exploits it could facilitate. From an adversarial point of view if you were trying to deliver "bulk equipment interference" then it doesn't get any better than piggybacking on something which has control of the boot process, and hence all subsequently run processes.
465 518
 </p>
@@ -469,9 +522,9 @@ So although the Raspberry Pi is cheap and hugely popular it's not supported by t
469 522
 </p>
470 523
 </div>
471 524
 </div>
472
-<div id="outline-container-org2af436d" class="outline-2">
473
-<h2 id="org2af436d">Why use Tor? I've heard it's used by bad people</h2>
474
-<div class="outline-text-2" id="text-org2af436d">
525
+<div id="outline-container-orgfa08e9c" class="outline-2">
526
+<h2 id="orgfa08e9c">Why use Tor? I've heard it's used by bad people</h2>
527
+<div class="outline-text-2" id="text-orgfa08e9c">
475 528
 <p>
476 529
 Years ago Tor was usually depicted in the mainstream media as something scary inhabited by cyberterrorists and other bad cybers, but today to a large extent Tor is accepted as just another way of routing data in a network. Depending upon where you live there may still be some amount of fearmongering about Tor, but it now seems clear that the trajectory is towards general acceptance.
477 530
 </p>
@@ -492,9 +545,9 @@ On the negative side it's a complex system which is not fully decentralized.
492 545
 </p>
493 546
 </div>
494 547
 </div>
495
-<div id="outline-container-org3981923" class="outline-2">
496
-<h2 id="org3981923">How is Tor integrated with Freedombone?</h2>
497
-<div class="outline-text-2" id="text-org3981923">
548
+<div id="outline-container-org047311c" class="outline-2">
549
+<h2 id="org047311c">How is Tor integrated with Freedombone?</h2>
550
+<div class="outline-text-2" id="text-org047311c">
498 551
 <p>
499 552
 Within this project Tor is used more to provide <i>accessibility</i> than the <i>anonymity</i> factor for which Tor is better known. The onion address system provides a way of being able to access sites even if you don't own a conventional domain name or don't have administrator access to your local internet router to be able to do port forwarding.
500 553
 </p>
@@ -512,17 +565,17 @@ Even if you're running the "onion only" build, this only means that sites are ac
512 565
 </p>
513 566
 </div>
514 567
 </div>
515
-<div id="outline-container-orgb732986" class="outline-2">
516
-<h2 id="orgb732986">Can I add a clearnet domain to an onion build?</h2>
517
-<div class="outline-text-2" id="text-orgb732986">
568
+<div id="outline-container-org8a3b2df" class="outline-2">
569
+<h2 id="org8a3b2df">Can I add a clearnet domain to an onion build?</h2>
570
+<div class="outline-text-2" id="text-org8a3b2df">
518 571
 <p>
519 572
 You could if you manually edited the relevant nginx configuration files and installed some dynamic DNS system yourself. If you already have sysadmin knowledge then that's probably not too hard. But the builds created with the <b>onion-addresses-only</b> option aren't really intended to support access via clearnet domains.
520 573
 </p>
521 574
 </div>
522 575
 </div>
523
-<div id="outline-container-orgb1382c0" class="outline-2">
524
-<h2 id="orgb1382c0">Why use Github?</h2>
525
-<div class="outline-text-2" id="text-orgb1382c0">
576
+<div id="outline-container-org7f5c083" class="outline-2">
577
+<h2 id="org7f5c083">Why use Github?</h2>
578
+<div class="outline-text-2" id="text-org7f5c083">
526 579
 <p>
527 580
 Github is paradoxically a centralized, closed and proprietary system which happens to mostly host free and open source projects. Up until now it has been relatively benign, but at some point in the name of "growth" it will likely start becoming more evil, or just become like SourceForge - which was also once much loved by FOSS developers, but turned into a den of malvertizing.
528 581
 </p>
@@ -540,17 +593,39 @@ Currently many of the repositories used for applications which are not yet packa
540 593
 </p>
541 594
 </div>
542 595
 </div>
543
-<div id="outline-container-org8d5c33e" class="outline-2">
544
-<h2 id="org8d5c33e">After using nmap or other scanning tool I can no longer log in</h2>
545
-<div class="outline-text-2" id="text-org8d5c33e">
596
+<div id="outline-container-org8fe35e9" class="outline-2">
597
+<h2 id="org8fe35e9">What are the data protection implications of running this system?</h2>
598
+<div class="outline-text-2" id="text-org8fe35e9">
599
+<p>
600
+Data protection laws such as <a href="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation">GDPR</a> in the EU or the <a href="https://en.wikipedia.org/wiki/Data_Protection_Act_1998">Data Protection Act</a> in the UK usually only apply to formal organizations which are recognized as being legal entities. So you have to be running a business or a charity or some other formal organization in order for the storage of what's known as <i>personally identifying information</i> to potentially become a legal issue. Laws like this usually include:
601
+</p>
602
+
603
+<ul class="org-ul">
604
+<li>A right to obtain your information</li>
605
+<li>A right to be forgotten (i.e. to have your data permanently deleted)</li>
606
+<li>Ensuring that stored personal data remains accurate</li>
607
+</ul>
608
+
609
+<p>
610
+If you're self-hosting then in the language of data protection law the "<i>data controller</i>" and the "<i>data subject</i>" are one and the same, so there isn't any power differential of that sort. Freedombone is only intended for small numbers of users, so if you are hosting more than one person chances are that you know the others quite well and can arrange to update their data or delete their account if that's needed. Even if data protection laws are later extended to include home server type scenarios it's unlikely that this will become a problem.
611
+</p>
612
+
613
+<p>
614
+For the mesh version similar applies. Each peer stores their own personal data and it never gets aggregated and stored in any centralized way.
615
+</p>
616
+</div>
617
+</div>
618
+<div id="outline-container-org972c439" class="outline-2">
619
+<h2 id="org972c439">After using nmap or other scanning tool I can no longer log in</h2>
620
+<div class="outline-text-2" id="text-org972c439">
546 621
 <p>
547 622
 This system tries to block port scanners. Any other system trying to scan for open ports will have their IP address added to a temporary block list for 24 hours.
548 623
 </p>
549 624
 </div>
550 625
 </div>
551
-<div id="outline-container-orgcaa8f8c" class="outline-2">
552
-<h2 id="orgcaa8f8c">Should I upload my GPG keys to keybase.io?</h2>
553
-<div class="outline-text-2" id="text-orgcaa8f8c">
626
+<div id="outline-container-org67aacdc" class="outline-2">
627
+<h2 id="org67aacdc">Should I upload my GPG keys to keybase.io?</h2>
628
+<div class="outline-text-2" id="text-org67aacdc">
554 629
 <p>
555 630
 It's not recommended unless there exists some compelling reason for you to be on there. That site asks users to upload the <b>private keys</b>, and even if the keys are client side encrypted with a passphrase there's always the chance that there will be a data leak in future and letter agencies will then have a full time opportunity to crack the passphrases.
556 631
 </p>
@@ -560,9 +635,9 @@ Saying something resembling <i>"only noobs will use crackable private key passph
560 635
 </p>
561 636
 </div>
562 637
 </div>
563
-<div id="outline-container-org787d325" class="outline-2">
564
-<h2 id="org787d325">Keys and emails should not be stored on servers. Why do you do that?</h2>
565
-<div class="outline-text-2" id="text-org787d325">
638
+<div id="outline-container-orgbc89a7d" class="outline-2">
639
+<h2 id="orgbc89a7d">Keys and emails should not be stored on servers. Why do you do that?</h2>
640
+<div class="outline-text-2" id="text-orgbc89a7d">
566 641
 <p>
567 642
 Ordinarily this is good advice. However, the threat model for a device in your home is different from the one for a generic server in a massive warehouse. Compare and contrast:
568 643
 </p>
@@ -620,9 +695,9 @@ In the home environment a box with a good firewall and no GUI components install
620 695
 </div>
621 696
 </div>
622 697
 
623
-<div id="outline-container-org45d4472" class="outline-2">
624
-<h2 id="org45d4472">Why can't I access my .onion site with a Tor browser?</h2>
625
-<div class="outline-text-2" id="text-org45d4472">
698
+<div id="outline-container-org4d0819e" class="outline-2">
699
+<h2 id="org4d0819e">Why can't I access my .onion site with a Tor browser?</h2>
700
+<div class="outline-text-2" id="text-org4d0819e">
626 701
 <p>
627 702
 Probably you need to add the site to the NoScript whitelist. Typically click/press on the noscript icon (or select from the menu on mobile) then select <i>whitelist</i> and add the site URL. You may also need to disable HTTPS Everywhere when using onion addresses, which don't use https.
628 703
 </p>
@@ -632,9 +707,9 @@ Another factor to be aware of is that it can take a while for the onion address
632 707
 </p>
633 708
 </div>
634 709
 </div>
635
-<div id="outline-container-org000c926" class="outline-2">
636
-<h2 id="org000c926">What is the best hardware to run this system on?</h2>
637
-<div class="outline-text-2" id="text-org000c926">
710
+<div id="outline-container-org7256ac2" class="outline-2">
711
+<h2 id="org7256ac2">What is the best hardware to run this system on?</h2>
712
+<div class="outline-text-2" id="text-org7256ac2">
638 713
 <p>
639 714
 It was originally designed to run on the Beaglebone Black, but that should be regarded as the most minimal system, because it's single core and has by today's standards a small amount of memory. Obviously the more powerful the hardware is the faster things like web pages (blog, social networking, etc) will be served but the more electricity such a system will require if you're running it 24/7. A good compromise between performance and energy consumption is something like an old netbook. The battery of an old netbook or laptop even gives you <a href="https://en.wikipedia.org/wiki/Uninterruptible_power_supply">UPS capability</a> to keep the system going during brief power outages or cable re-arrangements, and that means using full disk encryption on the server also becomes more practical.
640 715
 </p>
@@ -644,9 +719,9 @@ It was originally designed to run on the Beaglebone Black, but that should be re
644 719
 </p>
645 720
 </div>
646 721
 </div>
647
-<div id="outline-container-org36ddec5" class="outline-2">
648
-<h2 id="org36ddec5">Can I add more users to the system?</h2>
649
-<div class="outline-text-2" id="text-org36ddec5">
722
+<div id="outline-container-org890ba4a" class="outline-2">
723
+<h2 id="org890ba4a">Can I add more users to the system?</h2>
724
+<div class="outline-text-2" id="text-org890ba4a">
650 725
 <p>
651 726
 Yes. Freedombone can support a small number of users, for a "<i>friends and family</i>" type of home installation. This gives them access to an email account, XMPP, SIP phone and the blog (depending on whether the variant which you installed includes those).
652 727
 </p>
@@ -669,9 +744,9 @@ Another point is that Freedombone installations are not intended to support many
669 744
 </p>
670 745
 </div>
671 746
 </div>
672
-<div id="outline-container-orgdd36f96" class="outline-2">
673
-<h2 id="orgdd36f96">Why not use Signal for mobile chat?</h2>
674
-<div class="outline-text-2" id="text-orgdd36f96">
747
+<div id="outline-container-org61728f5" class="outline-2">
748
+<h2 id="org61728f5">Why not use Signal for mobile chat?</h2>
749
+<div class="outline-text-2" id="text-org61728f5">
675 750
 <p>
676 751
 Celebrities recommend Signal. It's Free Software so it must be good, right?
677 752
 </p>
@@ -694,9 +769,9 @@ To give credit where it's due Signal is good, but it could be a lot better. The
694 769
 </p>
695 770
 </div>
696 771
 </div>
697
-<div id="outline-container-org79827b5" class="outline-2">
698
-<h2 id="org79827b5">What is the most secure chat app to use on mobile?</h2>
699
-<div class="outline-text-2" id="text-org79827b5">
772
+<div id="outline-container-orgfd44c68" class="outline-2">
773
+<h2 id="orgfd44c68">What is the most secure chat app to use on mobile?</h2>
774
+<div class="outline-text-2" id="text-orgfd44c68">
700 775
 <p>
701 776
 On mobile there are various options. The apps which are likely to be most secure are ones which have end-to-end encryption enabled by default and which can also be onion routed via Orbot. End-to-end encryption secures the content of the message and onion routing obscures the metadata, making it hard for a passive adversary to know who is communicating with who.
702 777
 </p>
@@ -706,13 +781,13 @@ The current safest way to chat is to use <a href="https://conversations.im">Conv
706 781
 </p>
707 782
 
708 783
 <p>
709
-There are many <a href="#orgdd36f96">other fashionable chat apps</a> with end-to-end security, but often they are closed source, have a single central server or can't be onion routed. It's also important to remember that closed source chat apps should be assumed to be untrustworthy, since their security cannot be independently verified.
784
+There are many <a href="#org61728f5">other fashionable chat apps</a> with end-to-end security, but often they are closed source, have a single central server or can't be onion routed. It's also important to remember that closed source chat apps should be assumed to be untrustworthy, since their security cannot be independently verified.
710 785
 </p>
711 786
 </div>
712 787
 </div>
713
-<div id="outline-container-org5e417ee" class="outline-2">
714
-<h2 id="org5e417ee">How do I remove a user from the system?</h2>
715
-<div class="outline-text-2" id="text-org5e417ee">
788
+<div id="outline-container-orgb4af501" class="outline-2">
789
+<h2 id="orgb4af501">How do I remove a user from the system?</h2>
790
+<div class="outline-text-2" id="text-orgb4af501">
716 791
 <p>
717 792
 To remove a user:
718 793
 </p>
@@ -727,9 +802,9 @@ Select <i>Administrator controls</i> then <i>Manage Users</i> and then <i>Delete
727 802
 </p>
728 803
 </div>
729 804
 </div>
730
-<div id="outline-container-org24c86ab" class="outline-2">
731
-<h2 id="org24c86ab">Why is logging for web sites turned off by default?</h2>
732
-<div class="outline-text-2" id="text-org24c86ab">
805
+<div id="outline-container-orgc664233" class="outline-2">
806
+<h2 id="orgc664233">Why is logging for web sites turned off by default?</h2>
807
+<div class="outline-text-2" id="text-orgc664233">
733 808
 <p>
734 809
 If you're making profits out of the logs by running large server warehouses and then data mining what users click on - as is the business model of well known internet companies - then logging everything makes total sense. However, if you're running a home server then logging really only makes sense if you're trying to diagnose some specific problem with the system, and outside of that context logging everything becomes more of a liability than an asset.
735 810
 </p>
@@ -743,9 +818,9 @@ On the Freedombone system web logs containing IP addresses are turned off by def
743 818
 </p>
744 819
 </div>
745 820
 </div>
746
-<div id="outline-container-orgd972cda" class="outline-2">
747
-<h2 id="orgd972cda">How do I reset the tripwire?</h2>
748
-<div class="outline-text-2" id="text-orgd972cda">
821
+<div id="outline-container-orgcfb3562" class="outline-2">
822
+<h2 id="orgcfb3562">How do I reset the tripwire?</h2>
823
+<div class="outline-text-2" id="text-orgcfb3562">
749 824
 <p>
750 825
 The tripwire will be automatically reset once per week. If you want to reset it earlier then do the following:
751 826
 </p>
@@ -760,9 +835,9 @@ Select <i>Administrator controls</i> then "reset tripwire" using cursors and spa
760 835
 </p>
761 836
 </div>
762 837
 </div>
763
-<div id="outline-container-org4d6c566" class="outline-2">
764
-<h2 id="org4d6c566">Is metadata protected?</h2>
765
-<div class="outline-text-2" id="text-org4d6c566">
838
+<div id="outline-container-org693ad33" class="outline-2">
839
+<h2 id="org693ad33">Is metadata protected?</h2>
840
+<div class="outline-text-2" id="text-org693ad33">
766 841
 <blockquote>
767 842
 <p>
768 843
 "<i>We kill people based on metadata</i>"
@@ -778,9 +853,9 @@ Even when using Freedombone metadata analysis by third parties is still possible
778 853
 </p>
779 854
 </div>
780 855
 </div>
781
-<div id="outline-container-orga67d74a" class="outline-2">
782
-<h2 id="orga67d74a">How do I create email processing rules?</h2>
783
-<div class="outline-text-2" id="text-orga67d74a">
856
+<div id="outline-container-org3879dd9" class="outline-2">
857
+<h2 id="org3879dd9">How do I create email processing rules?</h2>
858
+<div class="outline-text-2" id="text-org3879dd9">
784 859
 <div class="org-src-container">
785 860
 <pre class="src src-bash">ssh username@domainname -p 2222
786 861
 </pre>
@@ -836,9 +911,9 @@ Spamassassin is also available and within Mutt you can use the S (shift+s) key t
836 911
 </p>
837 912
 </div>
838 913
 </div>
839
-<div id="outline-container-org69c34a0" class="outline-2">
840
-<h2 id="org69c34a0">Why isn't dynamic DNS working?</h2>
841
-<div class="outline-text-2" id="text-org69c34a0">
914
+<div id="outline-container-org2e9552d" class="outline-2">
915
+<h2 id="org2e9552d">Why isn't dynamic DNS working?</h2>
916
+<div class="outline-text-2" id="text-org2e9552d">
842 917
 <p>
843 918
 If you run the command:
844 919
 </p>
@@ -861,9 +936,9 @@ https://www.privateinternetaccess.com/pages/whats-my-ip/
861 936
 </div>
862 937
 </div>
863 938
 
864
-<div id="outline-container-orgd5c5acc" class="outline-2">
865
-<h2 id="orgd5c5acc">How do I change my encryption settings?</h2>
866
-<div class="outline-text-2" id="text-orgd5c5acc">
939
+<div id="outline-container-org88c1819" class="outline-2">
940
+<h2 id="org88c1819">How do I change my encryption settings?</h2>
941
+<div class="outline-text-2" id="text-org88c1819">
867 942
 <p>
868 943
 Suppose that some new encryption vulnerability has been announced and that you need to change your encryption settings. Maybe an algorithm thought to be secure is now no longer so and you need to remove it. You can change your settings by doing the following:
869 944
 </p>
@@ -878,9 +953,9 @@ Select <i>Administrator controls</i> then select <i>Security Settings</i>. You w
878 953
 </p>
879 954
 </div>
880 955
 </div>
881
-<div id="outline-container-orgfc6fd46" class="outline-2">
882
-<h2 id="orgfc6fd46">How do I get a domain name?</h2>
883
-<div class="outline-text-2" id="text-orgfc6fd46">
956
+<div id="outline-container-org7fa4cfd" class="outline-2">
957
+<h2 id="org7fa4cfd">How do I get a domain name?</h2>
958
+<div class="outline-text-2" id="text-org7fa4cfd">
884 959
 <p>
885 960
 Suppose that you have bought a domain name (rather than using a free subdomain on freedns) and you want to use that instead.
886 961
 </p>
@@ -944,9 +1019,9 @@ You should now be able to send an email from <i>postmaster@mynewdomainname</i> a
944 1019
 </div>
945 1020
 </div>
946 1021
 
947
-<div id="outline-container-org90eafd9" class="outline-2">
948
-<h2 id="org90eafd9">How do I get a "real" SSL/TLS/HTTPS certificate?</h2>
949
-<div class="outline-text-2" id="text-org90eafd9">
1022
+<div id="outline-container-org082c153" class="outline-2">
1023
+<h2 id="org082c153">How do I get a "real" SSL/TLS/HTTPS certificate?</h2>
1024
+<div class="outline-text-2" id="text-org082c153">
950 1025
 <p>
951 1026
 If you did the full install or selected the social variant then the system will have tried to obtain a Let's Encrypt certificate automatically during the install process. If this failed for any reason, or if you have created a new site which you need a certificate for then do the following:
952 1027
 </p>
@@ -965,9 +1040,9 @@ One thing to be aware of is that Let's Encrypt doesn't support many dynamic DNS
965 1040
 </p>
966 1041
 </div>
967 1042
 </div>
968
-<div id="outline-container-orgc91fc72" class="outline-2">
969
-<h2 id="orgc91fc72">How do I renew a Let's Encrypt certificate?</h2>
970
-<div class="outline-text-2" id="text-orgc91fc72">
1043
+<div id="outline-container-org30ff050" class="outline-2">
1044
+<h2 id="org30ff050">How do I renew a Let's Encrypt certificate?</h2>
1045
+<div class="outline-text-2" id="text-org30ff050">
971 1046
 <p>
972 1047
 Normally certificates will be automatically renewed once per month, so you don't need to be concerned about it. If anything goes wrong with the automatic renewal then you should receive a warning email.
973 1048
 </p>
@@ -986,9 +1061,9 @@ Select <i>Administrator controls</i> then <b>Security settings</b> then <b>Renew
986 1061
 </p>
987 1062
 </div>
988 1063
 </div>
989
-<div id="outline-container-org73b061c" class="outline-2">
990
-<h2 id="org73b061c">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</h2>
991
-<div class="outline-text-2" id="text-org73b061c">
1064
+<div id="outline-container-org5e86349" class="outline-2">
1065
+<h2 id="org5e86349">I tried to renew a Let's Encrypt certificate and it failed. What should I do?</h2>
1066
+<div class="outline-text-2" id="text-org5e86349">
992 1067
 <p>
993 1068
 Most likely it's because Let's Encrypt doesn't support your particular domain or subdomain. Currently free subdomains tend not to work. You'll need to buy a domain name, link it to your dynamic DNS account and then do:
994 1069
 </p>
@@ -1003,17 +1078,17 @@ Select <i>Administrator controls</i> then <b>Security settings</b> then <b>Creat
1003 1078
 </p>
1004 1079
 </div>
1005 1080
 </div>
1006
-<div id="outline-container-org6a6cce4" class="outline-2">
1007
-<h2 id="org6a6cce4">Why not use the services of $company instead? They took the Seppuku pledge</h2>
1008
-<div class="outline-text-2" id="text-org6a6cce4">
1081
+<div id="outline-container-org839eacd" class="outline-2">
1082
+<h2 id="org839eacd">Why not use the services of $company instead? They took the Seppuku pledge</h2>
1083
+<div class="outline-text-2" id="text-org839eacd">
1009 1084
 <p>
1010 1085
 <a href="https://cryptostorm.org/viewtopic.php?f=63&amp;t=2954&amp;sid=7de2d1e699cfde2f574e6a7f6ea5a173">That pledge</a> is utterly worthless. Years ago people trusted Google in the same sort of way, because they promised not be be evil and because a lot of the engineers working for them seemed like honest types who were "<i>on our side</i>". Post-<a href="https://en.wikipedia.org/wiki/Nymwars">nymwars</a> and post-<a href="https://en.wikipedia.org/wiki/PRISM_(surveillance_program)">PRISM</a> we know exactly how much Google cared about the privacy and security of its users. But Google is only one particular example. In general don't trust pledges made by companies, even if the people running them seem really sincere.
1011 1086
 </p>
1012 1087
 </div>
1013 1088
 </div>
1014
-<div id="outline-container-orgc36400d" class="outline-2">
1015
-<h2 id="orgc36400d">Why does my email keep getting rejected as spam by Gmail/etc?</h2>
1016
-<div class="outline-text-2" id="text-orgc36400d">
1089
+<div id="outline-container-org7b528f9" class="outline-2">
1090
+<h2 id="org7b528f9">Why does my email keep getting rejected as spam by Gmail/etc?</h2>
1091
+<div class="outline-text-2" id="text-org7b528f9">
1017 1092
 <p>
1018 1093
 Welcome to the world of email. Email is really the archetypal decentralized service, developed during the early days of the internet. In principle anyone can run an email server, and that's exactly what you're doing with Freedombone. Email is very useful, but it has a big problem, and that's that the protocols are totally insecure. That made it easy for spammers to do their thing, and in response highly elaborate spam filtering and blocking systems were developed. Chances are that your emails are being blocked in this way. Sometimes the blocking is so indisciminate that entire countries are excluded. What can you do about it? Unless you control the block list at the receiving end you may not be able to do much unless you can find an email proxy server which is trusted by the receiving server.
1019 1094
 </p>
@@ -1044,9 +1119,9 @@ So the situation with email presently is pretty bad, and there's a clear selecti
1044 1119
 </p>
1045 1120
 </div>
1046 1121
 </div>
1047
-<div id="outline-container-org73e8a5c" class="outline-2">
1048
-<h2 id="org73e8a5c">Tor is censored/blocked in my area. What can I do?</h2>
1049
-<div class="outline-text-2" id="text-org73e8a5c">
1122
+<div id="outline-container-org840d72e" class="outline-2">
1123
+<h2 id="org840d72e">Tor is censored/blocked in my area. What can I do?</h2>
1124
+<div class="outline-text-2" id="text-org840d72e">
1050 1125
 <p>
1051 1126
 If you can find some details for an obfs4 Tor bridge (its IP address, port number and key or nickname) then you can set up the system to use it to connect to the Tor network. Unlike relay nodes the IP addresses for bridges are not public information and so can't be easily known and added to block lists by authoritarian regimes or over-zealous ISPs.
1052 1127
 </p>
@@ -1071,9 +1146,9 @@ You can also set your system to act as a Tor bridge, although this is not recomm
1071 1146
 </div>
1072 1147
 </div>
1073 1148
 
1074
-<div id="outline-container-org1332523" class="outline-2">
1075
-<h2 id="org1332523">I want to block a particular domain from getting its content into my social network sites</h2>
1076
-<div class="outline-text-2" id="text-org1332523">
1149
+<div id="outline-container-org4f99713" class="outline-2">
1150
+<h2 id="org4f99713">I want to block a particular domain from getting its content into my social network sites</h2>
1151
+<div class="outline-text-2" id="text-org4f99713">
1077 1152
 <p>
1078 1153
 If you're being pestered by some domain which contains bad/illegal/harrassing content or irritating users you can block domains at the firewall level. Go to the administrator control panel and select <i>domain blocking</i>. You can then block, unblock and view the list of blocked domains.
1079 1154
 </p>
@@ -1088,9 +1163,9 @@ Select <i>Administrator controls</i> then <i>Domain blocking</i>.
1088 1163
 </div>
1089 1164
 </div>
1090 1165
 
1091
-<div id="outline-container-org7e84bef" class="outline-2">
1092
-<h2 id="org7e84bef">The mesh system doesn't boot from USB drive</h2>
1093
-<div class="outline-text-2" id="text-org7e84bef">
1166
+<div id="outline-container-org99e5150" class="outline-2">
1167
+<h2 id="org99e5150">The mesh system doesn't boot from USB drive</h2>
1168
+<div class="outline-text-2" id="text-org99e5150">
1094 1169
 <p>
1095 1170
 If the system doesn't boot and reports an error which includes <b>/dev/mapper/loop0p1</b> then reboot with <b>Ctrl-Alt-Del</b> and when you see the grub menu press <b>e</b> and manually change <b>/dev/mapper/loop0p1</b> to <b>/dev/sdb1</b>, then press <b>Ctrl-x</b>. If that doesn't work then reboot and try <b>/dev/sdc1</b> instead.
1096 1171
 </p>
@@ -1101,9 +1176,9 @@ After the system has booted successfully the problem should resolve itself on su
1101 1176
 </div>
1102 1177
 </div>
1103 1178
 
1104
-<div id="outline-container-orgdae680c" class="outline-2">
1105
-<h2 id="orgdae680c">Mesh system doesn't connect to the network</h2>
1106
-<div class="outline-text-2" id="text-orgdae680c">
1179
+<div id="outline-container-org80b7531" class="outline-2">
1180
+<h2 id="org80b7531">Mesh system doesn't connect to the network</h2>
1181
+<div class="outline-text-2" id="text-org80b7531">
1107 1182
 <p>
1108 1183
 Sometimes after boot the mesh system won't connect to other peers on the network. If this happens select the <b>network restart</b> icon and enter the password, which by default is just "freedombone". Wait for a few minutes to see if it connects.
1109 1184
 </p>

+ 127
- 46
website/EN/homeserver.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 18:24 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Freedombone home server setup"
6
+<!-- 2018-04-24 Tue 18:17 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Freedombone home server setup"
12 13
  />
13
-<meta  name="keywords" content="freedombone, home server" />
14
+<meta name="keywords" content="freedombone, home server" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,7 +236,6 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
@@ -152,9 +243,9 @@ for the JavaScript code in this tag.
152 243
 </div>
153 244
 
154 245
 
155
-<div id="outline-container-sec-1" class="outline-2">
156
-<h2 id="sec-1">Home Server</h2>
157
-<div class="outline-text-2" id="text-1">
246
+<div id="outline-container-org3d2bd4a" class="outline-2">
247
+<h2 id="org3d2bd4a">Home Server</h2>
248
+<div class="outline-text-2" id="text-org3d2bd4a">
158 249
 <p>
159 250
 The quickest way to get started is as follows. You will need to be running a Debian based system (version 8 or later), have an old but still working laptop or netbook which you can use as a server, and 8GB or larger USB thumb drive and an ethernet cable to connect the laptop to your internet router.
160 251
 </p>
@@ -164,10 +255,9 @@ First install freedombone onto your local system (not the target hardware that y
164 255
 </p>
165 256
 
166 257
 <div class="org-src-container">
167
-
168 258
 <pre class="src src-bash">sudo apt-get install git dialog build-essential
169 259
 git clone https://github.com/bashrc/freedombone
170
-cd freedombone
260
+<span class="org-builtin">cd</span> freedombone
171 261
 git checkout stretch
172 262
 sudo make install
173 263
 freedombone-image --setup debian
@@ -180,10 +270,9 @@ Or on Arch/Parabola:
180 270
 </p>
181 271
 
182 272
 <div class="org-src-container">
183
-
184 273
 <pre class="src src-bash">sudo pacman -S git dialog
185 274
 git clone https://github.com/bashrc/freedombone
186
-cd freedombone
275
+<span class="org-builtin">cd</span> freedombone
187 276
 git checkout stretch
188 277
 sudo make install
189 278
 freedombone-image --setup parabola
@@ -196,7 +285,6 @@ Now prepare your local system to talk to the freedombone by running the followin
196 285
 </p>
197 286
 
198 287
 <div class="org-src-container">
199
-
200 288
 <pre class="src src-bash">freedombone-client
201 289
 </pre>
202 290
 </div>
@@ -234,7 +322,6 @@ List what drives are on your system with:
234 322
 </p>
235 323
 
236 324
 <div class="org-src-container">
237
-
238 325
 <pre class="src src-bash">ls /dev/sd*
239 326
 </pre>
240 327
 </div>
@@ -248,9 +335,8 @@ You can now copy the image to the USB thumb drive, replacing <b>sdX</b> with the
248 335
 </p>
249 336
 
250 337
 <div class="org-src-container">
251
-
252
-<pre class="src src-bash">dd if=/dev/zero of=/dev/sdX bs=1M count=8
253
-dd bs=1M if=myimagefile.img of=/dev/sdX conv=fdatasync
338
+<pre class="src src-bash">dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">count</span>=8
339
+dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=myimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
254 340
 </pre>
255 341
 </div>
256 342
 
@@ -263,7 +349,6 @@ As the system boots for the first time the login is:
263 349
 </p>
264 350
 
265 351
 <div class="org-src-container">
266
-
267 352
 <pre class="src src-bash">username: fbone
268 353
 password: freedombone
269 354
 </pre>
@@ -274,7 +359,6 @@ If you're installing from a microSD card on a single board computer without a sc
274 359
 </p>
275 360
 
276 361
 <div class="org-src-container">
277
-
278 362
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
279 363
 </pre>
280 364
 </div>
@@ -296,7 +380,6 @@ When it's installed on your local system open a terminal and verify the ssh serv
296 380
 </p>
297 381
 
298 382
 <div class="org-src-container">
299
-
300 383
 <pre class="src src-bash">freedombone-client --verify
301 384
 </pre>
302 385
 </div>
@@ -316,7 +399,6 @@ Open another terminal window then run:
316 399
 </p>
317 400
 
318 401
 <div class="org-src-container">
319
-
320 402
 <pre class="src src-bash">freedombone-client
321 403
 ssh myusername@freedombone.local -p 2222
322 404
 </pre>
@@ -338,7 +420,7 @@ Then select <b>About</b>. You'll see a list of sites and their onion addresses.
338 420
 
339 421
 
340 422
 <div class="figure">
341
-<p><img src="images/controlpanel/control_panel_about.jpg" alt="control_panel_about.jpg" width="80%" align="center" />
423
+<p><img src="images/controlpanel/control_panel_about.jpg" alt="control_panel_about.jpg" width="100%" align="center" />
342 424
 </p>
343 425
 </div>
344 426
 
@@ -377,7 +459,6 @@ Of course, this is just one way in which you can install the Freedombone system.
377 459
 </p>
378 460
 
379 461
 <div class="org-src-container">
380
-
381 462
 <pre class="src src-bash">man freedombone-image
382 463
 </pre>
383 464
 </div>

+ 240
- 185
website/EN/installation.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 13:09 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Freedombone installation"
6
+<!-- 2018-04-21 Sat 14:58 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Freedombone installation"
12 13
  />
13
-<meta  name="keywords" content="freedombone, installation" />
14
+<meta name="keywords" content="freedombone, installation" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,66 +236,65 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151 242
 </p>
152 243
 </div>
153 244
 
154
-<div id="outline-container-sec-1" class="outline-2">
155
-<h2 id="sec-1">Installation</h2>
156
-<div class="outline-text-2" id="text-1">
245
+<div id="outline-container-orgaaffe7e" class="outline-2">
246
+<h2 id="orgaaffe7e">Installation</h2>
247
+<div class="outline-text-2" id="text-orgaaffe7e">
157 248
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
158 249
 
159 250
 
160 251
 <colgroup>
161
-<col  class="left" />
252
+<col  class="org-left" />
162 253
 </colgroup>
163 254
 <tbody>
164 255
 <tr>
165
-<td class="left"><a href="#sec-2">Building an image for a Single Board Computer or Virtual Machine</a></td>
256
+<td class="org-left"><a href="#org85992f0">Building an image for a Single Board Computer or Virtual Machine</a></td>
166 257
 </tr>
167 258
 
168 259
 <tr>
169
-<td class="left"><a href="#sec-3">Checklist</a></td>
260
+<td class="org-left"><a href="#orga435974">Checklist</a></td>
170 261
 </tr>
171 262
 
172 263
 <tr>
173
-<td class="left"><a href="./mesh.html">Mesh network</a></td>
264
+<td class="org-left"><a href="./mesh.html">Mesh network</a></td>
174 265
 </tr>
175 266
 
176 267
 <tr>
177
-<td class="left"><a href="#sec-1">Installation</a></td>
268
+<td class="org-left"><a href="#orgaaffe7e">Installation</a></td>
178 269
 </tr>
179 270
 
180 271
 <tr>
181
-<td class="left"><a href="#sec-5">Social Key Management - the 'Unforgettable Key'</a></td>
272
+<td class="org-left"><a href="#orgdbb804d">Social Key Management - the 'Unforgettable Key'</a></td>
182 273
 </tr>
183 274
 
184 275
 <tr>
185
-<td class="left"><a href="#sec-6">Final Setup</a></td>
276
+<td class="org-left"><a href="#orgc7f7e79">Final Setup</a></td>
186 277
 </tr>
187 278
 
188 279
 <tr>
189
-<td class="left"><a href="#sec-7">Keydrives</a></td>
280
+<td class="org-left"><a href="#org5c56524">Keydrives</a></td>
190 281
 </tr>
191 282
 
192 283
 <tr>
193
-<td class="left"><a href="#sec-8">On Client Machines</a></td>
284
+<td class="org-left"><a href="#org27e42b6">On Client Machines</a></td>
194 285
 </tr>
195 286
 
196 287
 <tr>
197
-<td class="left"><a href="#sec-9">Administering the system</a></td>
288
+<td class="org-left"><a href="#org24fb926">Administering the system</a></td>
198 289
 </tr>
199 290
 </tbody>
200 291
 </table>
201 292
 </div>
202 293
 </div>
203 294
 
204
-<div id="outline-container-sec-2" class="outline-2">
205
-<h2 id="sec-2">Building an image for a Single Board Computer or Virtual Machine</h2>
206
-<div class="outline-text-2" id="text-2">
295
+<div id="outline-container-org85992f0" class="outline-2">
296
+<h2 id="org85992f0">Building an image for a Single Board Computer or Virtual Machine</h2>
297
+<div class="outline-text-2" id="text-org85992f0">
207 298
 <p>
208 299
 You don't have to trust images downloaded from random internet locations signed with untrusted keys. You can build one from scratch yourself, and this is the recommended procedure for maximum security. For guidance on how to build images see the manpage for the <b>freedombone-image</b> command.
209 300
 </p>
@@ -213,10 +304,9 @@ Install the freedombone commands onto your laptop/desktop:
213 304
 </p>
214 305
 
215 306
 <div class="org-src-container">
216
-
217 307
 <pre class="src src-bash">sudo apt-get install git build-essential dialog
218 308
 git clone https://github.com/bashrc/freedombone
219
-cd freedombone
309
+<span class="org-builtin">cd</span> freedombone
220 310
 git checkout stretch
221 311
 sudo make install
222 312
 </pre>
@@ -227,7 +317,6 @@ Then install packages needed for building images:
227 317
 </p>
228 318
 
229 319
 <div class="org-src-container">
230
-
231 320
 <pre class="src src-bash">freedombone-image --setup debian
232 321
 </pre>
233 322
 </div>
@@ -237,7 +326,6 @@ or on an Arch/Parabola system:
237 326
 </p>
238 327
 
239 328
 <div class="org-src-container">
240
-
241 329
 <pre class="src src-bash">freedombone-image --setup parabola
242 330
 </pre>
243 331
 </div>
@@ -247,7 +335,6 @@ A typical use case to build an 8GB image for a Beaglebone Black is as follows. Y
247 335
 </p>
248 336
 
249 337
 <div class="org-src-container">
250
-
251 338
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G
252 339
 </pre>
253 340
 </div>
@@ -257,7 +344,6 @@ If you prefer an advanced installation with all of the options available then us
257 344
 </p>
258 345
 
259 346
 <div class="org-src-container">
260
-
261 347
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G --minimal no
262 348
 </pre>
263 349
 </div>
@@ -267,7 +353,6 @@ To build a 64bit Qemu image:
267 353
 </p>
268 354
 
269 355
 <div class="org-src-container">
270
-
271 356
 <pre class="src src-bash">freedombone-image -t qemu-x86_64 -s 8G
272 357
 </pre>
273 358
 </div>
@@ -281,56 +366,49 @@ If the image build fails with an error such as "<i>Error reading from server. Re
281 366
 </p>
282 367
 
283 368
 <div class="org-src-container">
284
-
285 369
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G -m http://ftp.de.debian.org/debian
286 370
 </pre>
287 371
 </div>
288 372
 </div>
289 373
 </div>
290 374
 
291
-<div id="outline-container-sec-3" class="outline-2">
292
-<h2 id="sec-3">Checklist</h2>
293
-<div class="outline-text-2" id="text-3">
375
+<div id="outline-container-orga435974" class="outline-2">
376
+<h2 id="orga435974">Checklist</h2>
377
+<div class="outline-text-2" id="text-orga435974">
294 378
 <p>
295 379
 Before installing Freedombone you will need a few things.
296 380
 </p>
297 381
 
298 382
 <ul class="org-ul">
299
-<li>Have some domains, or subdomains, registered with a dynamic DNS service. For the full install you may need two "official" purchased domains or be using a subdomain provider which is supported by Let's Encrypt.
300
-</li>
301
-<li>System with a new installation of Debian Stretch or a downloaded/prepared disk image
302
-</li>
303
-<li>Ethernet connection between the system and your internet router
304
-</li>
305
-<li>That it is possible to forward ports from the internet router to the system, typically via firewall settings
306
-</li>
307
-<li>Have ssh access to the system, typically via fbone@freedombone.local on port 2222
308
-</li>
383
+<li>Have some domains, or subdomains, registered with a dynamic DNS service. For the full install you may need two "official" purchased domains or be using a subdomain provider which is supported by Let's Encrypt.</li>
384
+<li>System with a new installation of Debian Stretch or a downloaded/prepared disk image</li>
385
+<li>Ethernet connection between the system and your internet router</li>
386
+<li>That it is possible to forward ports from the internet router to the system, typically via firewall settings</li>
387
+<li>Have ssh access to the system, typically via fbone@freedombone.local on port 2222</li>
309 388
 </ul>
310 389
 </div>
311 390
 </div>
312
-<div id="outline-container-sec-4" class="outline-2">
313
-<h2 id="sec-4">Installation</h2>
314
-<div class="outline-text-2" id="text-4">
391
+<div id="outline-container-org81afcd3" class="outline-2">
392
+<h2 id="org81afcd3">Installation</h2>
393
+<div class="outline-text-2" id="text-org81afcd3">
315 394
 <p>
316 395
 There are three install options: Laptop/Desktop/Netbook, SBC and Virtual Machine.
317 396
 </p>
318 397
 </div>
319 398
 
320
-<div id="outline-container-sec-4-1" class="outline-3">
321
-<h3 id="sec-4-1">On a Laptop, Netbook or Desktop machine</h3>
322
-<div class="outline-text-3" id="text-4-1">
399
+<div id="outline-container-org8cf2237" class="outline-3">
400
+<h3 id="org8cf2237">On a Laptop, Netbook or Desktop machine</h3>
401
+<div class="outline-text-3" id="text-org8cf2237">
323 402
 <p>
324 403
 If you have an existing system, such as an old laptop or netbook which you can leave running as a server, then install a new version of Debian Stretch onto it. During the Debian install you won't need the print server or the desktop environment, and unchecking those will reduce the attack surface. Once Debian enter the following commands:
325 404
 </p>
326 405
 
327 406
 <div class="org-src-container">
328
-
329 407
 <pre class="src src-bash">su
330 408
 apt-get update
331 409
 apt-get -y install git dialog build-essential
332 410
 git clone https://github.com/bashrc/freedombone
333
-cd freedombone
411
+<span class="org-builtin">cd</span> freedombone
334 412
 git checkout stretch
335 413
 make install
336 414
 freedombone menuconfig
@@ -339,28 +417,21 @@ freedombone menuconfig
339 417
 </div>
340 418
 </div>
341 419
 
342
-<div id="outline-container-sec-4-2" class="outline-3">
343
-<h3 id="sec-4-2">On a single board computer (SBC)</h3>
344
-<div class="outline-text-3" id="text-4-2">
420
+<div id="outline-container-orge5e5408" class="outline-3">
421
+<h3 id="orge5e5408">On a single board computer (SBC)</h3>
422
+<div class="outline-text-3" id="text-orge5e5408">
345 423
 <p>
346 424
 Currently the following boards are supported:
347 425
 </p>
348 426
 
349 427
 <ul class="org-ul">
350
-<li><a href="https://beagleboard.org/BLACK">Beaglebone Black</a>
351
-</li>
352
-<li><a href="https://linux-sunxi.org/Cubietech_Cubieboard2">Cubieboard 2</a>
353
-</li>
354
-<li><a href="https://linux-sunxi.org/Cubietruck">Cubietruck (Cubieboard 3)</a>
355
-</li>
356
-<li><a href="https://www.sparkfun.com/products/retired/12856">PCDuino3</a>
357
-</li>
358
-<li><a href="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME/open-source-hardware">olinuxino Lime</a>
359
-</li>
360
-<li><a href="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME2/open-source-hardware">olinuxino Lime2</a>
361
-</li>
362
-<li><a href="https://www.olimex.com/Products/OlinuXino/A20/A20-OlinuXino-MICRO/open-source-hardware">olinuxino Micro</a>
363
-</li>
428
+<li><a href="https://beagleboard.org/BLACK">Beaglebone Black</a></li>
429
+<li><a href="https://linux-sunxi.org/Cubietech_Cubieboard2">Cubieboard 2</a></li>
430
+<li><a href="https://linux-sunxi.org/Cubietruck">Cubietruck (Cubieboard 3)</a></li>
431
+<li><a href="https://www.sparkfun.com/products/retired/12856">PCDuino3</a></li>
432
+<li><a href="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME/open-source-hardware">olinuxino Lime</a></li>
433
+<li><a href="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXIno-LIME2/open-source-hardware">olinuxino Lime2</a></li>
434
+<li><a href="https://www.olimex.com/Products/OlinuXino/A20/A20-OlinuXino-MICRO/open-source-hardware">olinuxino Micro</a></li>
364 435
 </ul>
365 436
 
366 437
 <p>
@@ -368,7 +439,6 @@ If there is no existing image available then you can build one from scratch. See
368 439
 </p>
369 440
 
370 441
 <div class="org-src-container">
371
-
372 442
 <pre class="src src-bash">gpg --verify filename.img.asc
373 443
 </pre>
374 444
 </div>
@@ -378,7 +448,6 @@ And the hash with:
378 448
 </p>
379 449
 
380 450
 <div class="org-src-container">
381
-
382 451
 <pre class="src src-bash">sha256sum filename.img
383 452
 </pre>
384 453
 </div>
@@ -388,7 +457,6 @@ If the image is compressed then decompress it with:
388 457
 </p>
389 458
 
390 459
 <div class="org-src-container">
391
-
392 460
 <pre class="src src-bash">unxz filename.img.xz
393 461
 </pre>
394 462
 </div>
@@ -398,8 +466,7 @@ Then copy it to a microSD card. Depending on your system you may need an adaptor
398 466
 </p>
399 467
 
400 468
 <div class="org-src-container">
401
-
402
-<pre class="src src-bash">sudo dd bs=1M if=filename.img of=/dev/sdX conv=fdatasync
469
+<pre class="src src-bash">sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=filename.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
403 470
 </pre>
404 471
 </div>
405 472
 
@@ -408,7 +475,6 @@ Where <b>sdX</b> is the microSD drive. You can check which drive is the microSD
408 475
 </p>
409 476
 
410 477
 <div class="org-src-container">
411
-
412 478
 <pre class="src src-bash">ls /dev/sd*
413 479
 </pre>
414 480
 </div>
@@ -422,7 +488,6 @@ With the board connected and running you can ssh into the system with:
422 488
 </p>
423 489
 
424 490
 <div class="org-src-container">
425
-
426 491
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
427 492
 </pre>
428 493
 </div>
@@ -433,15 +498,14 @@ Using the password 'freedombone'. Take a note of the new login password and then
433 498
 </div>
434 499
 </div>
435 500
 
436
-<div id="outline-container-sec-4-3" class="outline-3">
437
-<h3 id="sec-4-3">As a Virtual Machine</h3>
438
-<div class="outline-text-3" id="text-4-3">
501
+<div id="outline-container-org9ae9946" class="outline-3">
502
+<h3 id="org9ae9946">As a Virtual Machine</h3>
503
+<div class="outline-text-3" id="text-org9ae9946">
439 504
 <p>
440 505
 Qemu is currently supported, since it's s fully free software system. You can run a 64 bit Qemu image with:
441 506
 </p>
442 507
 
443 508
 <div class="org-src-container">
444
-
445 509
 <pre class="src src-bash">qemu-system-x86_64 -m 1G filename.img
446 510
 </pre>
447 511
 </div>
@@ -453,42 +517,42 @@ The default login will be username 'fbone' and password 'freedombone'. Take a no
453 517
 </div>
454 518
 </div>
455 519
 
456
-<div id="outline-container-sec-5" class="outline-2">
457
-<h2 id="sec-5">Social Key Management - the 'Unforgettable Key'</h2>
458
-<div class="outline-text-2" id="text-5">
520
+<div id="outline-container-orgdbb804d" class="outline-2">
521
+<h2 id="orgdbb804d">Social Key Management - the 'Unforgettable Key'</h2>
522
+<div class="outline-text-2" id="text-orgdbb804d">
459 523
 <p>
460 524
 During the install procedure you will be asked if you wish to import GPG keys. If you don't already possess GPG keys then just select "Ok" and they will be generated during the install. If you do already have GPG keys then there are a few possibilities
461 525
 </p>
462 526
 </div>
463 527
 
464
-<div id="outline-container-sec-5-1" class="outline-3">
465
-<h3 id="sec-5-1">You have the gnupg keyring on an encrypted USB drive</h3>
466
-<div class="outline-text-3" id="text-5-1">
528
+<div id="outline-container-orgea070ec" class="outline-3">
529
+<h3 id="orgea070ec">You have the gnupg keyring on an encrypted USB drive</h3>
530
+<div class="outline-text-3" id="text-orgea070ec">
467 531
 <p>
468 532
 If you previously made a master keydrive containing the full keyring (the .gnupg directory). This is the most straightforward case, but not as secure as splitting the key into fragments.
469 533
 </p>
470 534
 </div>
471 535
 </div>
472
-<div id="outline-container-sec-5-2" class="outline-3">
473
-<h3 id="sec-5-2">You have a number of key fragments on USB drives retrieved from friends</h3>
474
-<div class="outline-text-3" id="text-5-2">
536
+<div id="outline-container-org08d572c" class="outline-3">
537
+<h3 id="org08d572c">You have a number of key fragments on USB drives retrieved from friends</h3>
538
+<div class="outline-text-3" id="text-org08d572c">
475 539
 <p>
476
-If you previously made some USB drives containing key fragments then retrieve them from your friends and plug them in one after the other. After the last drive has been read then remove it and just select "Ok". The system will then try to reconstruct the key. For this to work you will need to have previously made three or more <a href="#sec-7">Keydrives</a>.
540
+If you previously made some USB drives containing key fragments then retrieve them from your friends and plug them in one after the other. After the last drive has been read then remove it and just select "Ok". The system will then try to reconstruct the key. For this to work you will need to have previously made three or more <a href="#org5c56524">Keydrives</a>.
477 541
 </p>
478 542
 </div>
479 543
 </div>
480
-<div id="outline-container-sec-5-3" class="outline-3">
481
-<h3 id="sec-5-3">You can specify some ssh login details for friends servers containing key fragments</h3>
482
-<div class="outline-text-3" id="text-5-3">
544
+<div id="outline-container-orgf13618c" class="outline-3">
545
+<h3 id="orgf13618c">You can specify some ssh login details for friends servers containing key fragments</h3>
546
+<div class="outline-text-3" id="text-orgf13618c">
483 547
 <p>
484 548
 Enter three or more sets of login details and the installer will try to retrieve key fragments and then assemble them into the full key. This only works if you previously were using remote backups and had social key management enabled.
485 549
 </p>
486 550
 </div>
487 551
 </div>
488 552
 </div>
489
-<div id="outline-container-sec-6" class="outline-2">
490
-<h2 id="sec-6">Final Setup</h2>
491
-<div class="outline-text-2" id="text-6">
553
+<div id="outline-container-orgc7f7e79" class="outline-2">
554
+<h2 id="orgc7f7e79">Final Setup</h2>
555
+<div class="outline-text-2" id="text-orgc7f7e79">
492 556
 <p>
493 557
 Any manual post-installation setup instructions or passwords can be found in /home/username/README.
494 558
 </p>
@@ -501,127 +565,126 @@ On your internet router, typically under firewall settings, open the following p
501 565
 
502 566
 
503 567
 <colgroup>
504
-<col  class="left" />
568
+<col  class="org-left" />
505 569
 
506
-<col  class="right" />
570
+<col  class="org-right" />
507 571
 </colgroup>
508 572
 <thead>
509 573
 <tr>
510
-<th scope="col" class="left">Service</th>
511
-<th scope="col" class="right">Ports</th>
574
+<th scope="col" class="org-left">Service</th>
575
+<th scope="col" class="org-right">Ports</th>
512 576
 </tr>
513 577
 </thead>
514 578
 <tbody>
515 579
 <tr>
516
-<td class="left">HTTP</td>
517
-<td class="right">80</td>
580
+<td class="org-left">HTTP</td>
581
+<td class="org-right">80</td>
518 582
 </tr>
519 583
 
520 584
 <tr>
521
-<td class="left">HTTPS</td>
522
-<td class="right">443</td>
585
+<td class="org-left">HTTPS</td>
586
+<td class="org-right">443</td>
523 587
 </tr>
524 588
 
525 589
 <tr>
526
-<td class="left">SSH</td>
527
-<td class="right">2222</td>
590
+<td class="org-left">SSH</td>
591
+<td class="org-right">2222</td>
528 592
 </tr>
529 593
 
530 594
 <tr>
531
-<td class="left">DLNA</td>
532
-<td class="right">1900</td>
595
+<td class="org-left">DLNA</td>
596
+<td class="org-right">1900</td>
533 597
 </tr>
534 598
 
535 599
 <tr>
536
-<td class="left">DLNA</td>
537
-<td class="right">8200</td>
600
+<td class="org-left">DLNA</td>
601
+<td class="org-right">8200</td>
538 602
 </tr>
539 603
 
540 604
 <tr>
541
-<td class="left">XMPP</td>
542
-<td class="right">5222..5223</td>
605
+<td class="org-left">XMPP</td>
606
+<td class="org-right">5222..5223</td>
543 607
 </tr>
544 608
 
545 609
 <tr>
546
-<td class="left">XMPP</td>
547
-<td class="right">5269</td>
610
+<td class="org-left">XMPP</td>
611
+<td class="org-right">5269</td>
548 612
 </tr>
549 613
 
550 614
 <tr>
551
-<td class="left">XMPP</td>
552
-<td class="right">5280..5281</td>
615
+<td class="org-left">XMPP</td>
616
+<td class="org-right">5280..5281</td>
553 617
 </tr>
554 618
 
555 619
 <tr>
556
-<td class="left">IRC</td>
557
-<td class="right">6697</td>
620
+<td class="org-left">IRC</td>
621
+<td class="org-right">6697</td>
558 622
 </tr>
559 623
 
560 624
 <tr>
561
-<td class="left">Git</td>
562
-<td class="right">9418</td>
625
+<td class="org-left">Git</td>
626
+<td class="org-right">9418</td>
563 627
 </tr>
564 628
 
565 629
 <tr>
566
-<td class="left">Email</td>
567
-<td class="right">25</td>
630
+<td class="org-left">Email</td>
631
+<td class="org-right">25</td>
568 632
 </tr>
569 633
 
570 634
 <tr>
571
-<td class="left">Email</td>
572
-<td class="right">587</td>
635
+<td class="org-left">Email</td>
636
+<td class="org-right">587</td>
573 637
 </tr>
574 638
 
575 639
 <tr>
576
-<td class="left">Email</td>
577
-<td class="right">465</td>
640
+<td class="org-left">Email</td>
641
+<td class="org-right">465</td>
578 642
 </tr>
579 643
 
580 644
 <tr>
581
-<td class="left">Email</td>
582
-<td class="right">993</td>
645
+<td class="org-left">Email</td>
646
+<td class="org-right">993</td>
583 647
 </tr>
584 648
 
585 649
 <tr>
586
-<td class="left">VoIP</td>
587
-<td class="right">64738</td>
650
+<td class="org-left">VoIP</td>
651
+<td class="org-right">64738</td>
588 652
 </tr>
589 653
 
590 654
 <tr>
591
-<td class="left">VoIP</td>
592
-<td class="right">5060</td>
655
+<td class="org-left">VoIP</td>
656
+<td class="org-right">5060</td>
593 657
 </tr>
594 658
 
595 659
 <tr>
596
-<td class="left">Tox</td>
597
-<td class="right">33445</td>
660
+<td class="org-left">Tox</td>
661
+<td class="org-right">33445</td>
598 662
 </tr>
599 663
 
600 664
 <tr>
601
-<td class="left">Syncthing</td>
602
-<td class="right">22000</td>
665
+<td class="org-left">Syncthing</td>
666
+<td class="org-right">22000</td>
603 667
 </tr>
604 668
 </tbody>
605 669
 </table>
606 670
 </div>
607 671
 </div>
608 672
 
609
-<div id="outline-container-sec-7" class="outline-2">
610
-<h2 id="sec-7">Keydrives</h2>
611
-<div class="outline-text-2" id="text-7">
673
+<div id="outline-container-org5c56524" class="outline-2">
674
+<h2 id="org5c56524">Keydrives</h2>
675
+<div class="outline-text-2" id="text-org5c56524">
612 676
 <p>
613 677
 After installing for the first time it's a good idea to create some keydrives. These will store your gpg key so that if all else fails you will still be able to restore from backup. There are two ways to do this:
614 678
 </p>
615 679
 </div>
616
-<div id="outline-container-sec-7-1" class="outline-3">
617
-<h3 id="sec-7-1">Master Keydrive</h3>
618
-<div class="outline-text-3" id="text-7-1">
680
+<div id="outline-container-orga8df9a9" class="outline-3">
681
+<h3 id="orga8df9a9">Master Keydrive</h3>
682
+<div class="outline-text-3" id="text-orga8df9a9">
619 683
 <p>
620 684
 This is the traditional security model in which you carry your full keyring on an encrypted USB drive. To make a master keydrive first format a USB drive as a LUKS encrypted drive. In Ubuntu this can be <a href="https://help.ubuntu.com/community/EncryptedFilesystemsOnRemovableStorage">done from the <i>Disk Utility</i> application</a>. Then plug it into the Freedombone system, then from your local machine run:
621 685
 </p>
622 686
 
623 687
 <div class="org-src-container">
624
-
625 688
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
626 689
 </pre>
627 690
 </div>
@@ -631,15 +694,14 @@ Select <i>Administrator controls</i> then <i>Backup and Restore</i> then <i>Back
631 694
 </p>
632 695
 </div>
633 696
 </div>
634
-<div id="outline-container-sec-7-2" class="outline-3">
635
-<h3 id="sec-7-2">Fragment keydrives</h3>
636
-<div class="outline-text-3" id="text-7-2">
697
+<div id="outline-container-orgfbd6e5b" class="outline-3">
698
+<h3 id="orgfbd6e5b">Fragment keydrives</h3>
699
+<div class="outline-text-3" id="text-orgfbd6e5b">
637 700
 <p>
638 701
 This breaks your GPG key into a number of fragments and randomly selects one to add to the USB drive. First format a USB drive as a LUKS encrypted drive. In Ubuntu this <a href="https://help.ubuntu.com/community/EncryptedFilesystemsOnRemovableStorage">can be done from the <i>Disk Utility</i> application</a>. Plug it into the Freedombone system then from your local machine run the following commands:
639 702
 </p>
640 703
 
641 704
 <div class="org-src-container">
642
-
643 705
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
644 706
 </pre>
645 707
 </div>
@@ -654,19 +716,18 @@ Fragments are randomly assigned and so you will need at least three or four keyd
654 716
 </div>
655 717
 </div>
656 718
 </div>
657
-<div id="outline-container-sec-8" class="outline-2">
658
-<h2 id="sec-8">On Client Machines</h2>
659
-<div class="outline-text-2" id="text-8">
719
+<div id="outline-container-org27e42b6" class="outline-2">
720
+<h2 id="org27e42b6">On Client Machines</h2>
721
+<div class="outline-text-2" id="text-org27e42b6">
660 722
 <p>
661 723
 You can configure laptops or desktop machines which connect to the Freedombone server in the following way. This alters encryption settings to improve overall security.
662 724
 </p>
663 725
 
664 726
 <div class="org-src-container">
665
-
666 727
 <pre class="src src-bash">sudo apt-get update
667 728
 sudo apt-get install git dialog haveged build-essential
668 729
 git clone https://github.com/bashrc/freedombone
669
-cd freedombone
730
+<span class="org-builtin">cd</span> freedombone
670 731
 git checkout stretch
671 732
 sudo make install
672 733
 freedombone-client
@@ -675,15 +736,14 @@ freedombone-client
675 736
 </div>
676 737
 </div>
677 738
 
678
-<div id="outline-container-sec-9" class="outline-2">
679
-<h2 id="sec-9">Administering the system</h2>
680
-<div class="outline-text-2" id="text-9">
739
+<div id="outline-container-org24fb926" class="outline-2">
740
+<h2 id="org24fb926">Administering the system</h2>
741
+<div class="outline-text-2" id="text-org24fb926">
681 742
 <p>
682 743
 To administer the system after installation log in via ssh, become the root user and then launch the control panel.
683 744
 </p>
684 745
 
685 746
 <div class="org-src-container">
686
-
687 747
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
688 748
 </pre>
689 749
 </div>
@@ -692,14 +752,9 @@ To administer the system after installation log in via ssh, become the root user
692 752
 Select <i>Administrator controls</i> then from there you will be able to perform various tasks, such as backups, adding and removing users and so on. You can also do this via commands, which are typically installed as /usr/local/bin/freedombone* and the corresponding manpages.
693 753
 </p>
694 754
 
695
-<div class="export">
696
-<p>
697
-&lt;center&gt;
698
-Return to the &lt;a href="index.html"&gt;home page&lt;/a&gt;
699
-&lt;/center&gt;
700
-</p>
701
-
702
-</div>
755
+<center>
756
+Return to the <a href="index.html">home page</a>
757
+</center>
703 758
 </div>
704 759
 </div>
705 760
 </div>

+ 136
- 61
website/EN/mesh_capabilities.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 18:24 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Freedombone mesh network capabilities"
6
+<!-- 2018-04-22 Sun 10:31 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Freedombone mesh network capabilities"
12 13
  />
13
-<meta  name="keywords" content="freedombone, mesh" />
14
+<meta name="keywords" content="freedombone, mesh" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,51 +236,34 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151 242
 </p>
152 243
 </div>
153 244
 
154
-<div id="outline-container-sec-1" class="outline-2">
155
-<h2 id="sec-1">Mesh Network: Capabilities</h2>
156
-<div class="outline-text-2" id="text-1">
245
+<div id="outline-container-org19c4251" class="outline-2">
246
+<h2 id="org19c4251">Mesh Network: Capabilities</h2>
247
+<div class="outline-text-2" id="text-org19c4251">
157 248
 <p>
158 249
 The mesh system has the following capabilities:
159 250
 </p>
160 251
 
161 252
 <ul class="org-ul">
162
-<li>Discovery of other users on the network
163
-</li>
164
-<li>Text based chat, one-to-one and in groups
165
-</li>
166
-<li>Voice chat (VoIP) and video calls
167
-</li>
168
-<li>Private and public sharing of files
169
-</li>
170
-<li>Blogging
171
-</li>
172
-<li>Collaborative editing of documents and presentations
173
-</li>
174
-<li>Creating and broadcasting audio media/podcasts
175
-</li>
176
-<li>Social network stream. Follow/unfollow other peers
177
-</li>
178
-<li>No network administration required
179
-</li>
180
-<li>No servers
181
-</li>
182
-<li>Internet connection is optional
183
-</li>
184
-<li>Works from bootable USB drives or microSD drives
185
-</li>
186
-<li>Data is mesh routed between systems
187
-</li>
188
-<li>Private communications is end-to-end secured and forward secret
189
-</li>
190
-<li>Publicly shared data is <i>content addressable</i>
191
-</li>
253
+<li>Discovery of other users on the network</li>
254
+<li>Text based chat, one-to-one and in groups</li>
255
+<li>Voice chat (VoIP) and video calls</li>
256
+<li>Private and public sharing of files</li>
257
+<li>Blogging</li>
258
+<li>Collaborative editing of documents and presentations</li>
259
+<li>Social network stream. Follow/unfollow other peers</li>
260
+<li>No network administration required</li>
261
+<li>No servers</li>
262
+<li>Internet connection is optional</li>
263
+<li>Works from bootable USB drives or microSD drives</li>
264
+<li>Data is mesh routed between systems</li>
265
+<li>Private communications is end-to-end secured and forward secret</li>
266
+<li>Publicly shared data is <i>content addressable</i></li>
192 267
 </ul>
193 268
 
194 269
 <p>

+ 28
- 28
website/EN/mesh_images.html Datei anzeigen

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-04-15 Sun 18:25 -->
6
+<!-- 2018-04-21 Sat 14:59 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -242,17 +242,17 @@ for the JavaScript code in this tag.
242 242
 </p>
243 243
 </div>
244 244
 
245
-<div id="outline-container-orgd03cecc" class="outline-2">
246
-<h2 id="orgd03cecc">Mesh Network: Images</h2>
245
+<div id="outline-container-org86cebe1" class="outline-2">
246
+<h2 id="org86cebe1">Mesh Network: Images</h2>
247 247
 </div>
248 248
 
249
-<div id="outline-container-org2613bbd" class="outline-2">
250
-<h2 id="org2613bbd">Pre-built Disk Images</h2>
251
-<div class="outline-text-2" id="text-org2613bbd">
249
+<div id="outline-container-org144a10d" class="outline-2">
250
+<h2 id="org144a10d">Pre-built Disk Images</h2>
251
+<div class="outline-text-2" id="text-org144a10d">
252 252
 </div>
253
-<div id="outline-container-org3cdda6d" class="outline-3">
254
-<h3 id="org3cdda6d">Writing many images quickly</h3>
255
-<div class="outline-text-3" id="text-org3cdda6d">
253
+<div id="outline-container-org4231464" class="outline-3">
254
+<h3 id="org4231464">Writing many images quickly</h3>
255
+<div class="outline-text-3" id="text-org4231464">
256 256
 <p>
257 257
 There may be situations where you need to write the same disk image to multiple drives at the same time in order to maximize rate of deployment. In the instructions given below the <b>dd</b> command is used for writing to the target drive, but to write to multiple drives you can use a tool such as <a href="https://wiki.gnome.org/Apps/MultiWriter">GNOME MultiWriter</a>.
258 258
 </p>
@@ -280,9 +280,9 @@ The MultiWriter tool is also available within mesh client images, so that you ca
280 280
 </p>
281 281
 </div>
282 282
 </div>
283
-<div id="outline-container-org41f717a" class="outline-3">
284
-<h3 id="org41f717a">Client images</h3>
285
-<div class="outline-text-3" id="text-org41f717a">
283
+<div id="outline-container-org47d0e94" class="outline-3">
284
+<h3 id="org47d0e94">Client images</h3>
285
+<div class="outline-text-3" id="text-org47d0e94">
286 286
 
287 287
 <div class="figure">
288 288
 <p><img src="images/mesh_netbook.jpg" alt="mesh_netbook.jpg" width="100%" align="center" />
@@ -299,8 +299,8 @@ wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz
299 299
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
300 300
 gpg --verify freedombone-meshclient-i386.img.xz.sig
301 301
 unxz freedombone-meshclient-i386.img.xz
302
-sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
303
-sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-meshclient-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
302
+sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">count</span>=8
303
+sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=freedombone-meshclient-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
304 304
 </pre>
305 305
 </div>
306 306
 
@@ -318,23 +318,23 @@ wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.
318 318
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
319 319
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
320 320
 unxz freedombone-meshclient-insecure-i386.img.xz
321
-sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
322
-sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-meshclient-insecure-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
321
+sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">count</span>=8
322
+sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=freedombone-meshclient-insecure-i386.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
323 323
 </pre>
324 324
 </div>
325 325
 </div>
326 326
 </div>
327 327
 
328
-<div id="outline-container-orgbe3f97e" class="outline-3">
329
-<h3 id="orgbe3f97e">Router images</h3>
330
-<div class="outline-text-3" id="text-orgbe3f97e">
328
+<div id="outline-container-orge2c765f" class="outline-3">
329
+<h3 id="orge2c765f">Router images</h3>
330
+<div class="outline-text-3" id="text-orge2c765f">
331 331
 <p>
332 332
 Routers are intended to build network coverage for an area using small and low cost hardware. You can bolt them to walls or leave them on window ledges. They don't have any user interface and their only job is to haul network traffic across the mesh and to enable peers to find each other via running bootstrap nodes for Tox and IPFS. Copy the image to a microSD card and insert it into the router, plug in an Atheros wifi dongle and power on. That should be all you need to do.
333 333
 </p>
334 334
 </div>
335
-<div id="outline-container-org1859392" class="outline-4">
336
-<h4 id="org1859392">Beaglebone Black</h4>
337
-<div class="outline-text-4" id="text-org1859392">
335
+<div id="outline-container-org0194fde" class="outline-4">
336
+<h4 id="org0194fde">Beaglebone Black</h4>
337
+<div class="outline-text-4" id="text-org0194fde">
338 338
 
339 339
 <div class="figure">
340 340
 <p><img src="images/mesh_router.jpg" alt="mesh_router.jpg" width="50%" align="center" />
@@ -353,7 +353,7 @@ gpg --verify freedombone-mesh_beaglebone-armhf.img.xz.sig
353 353
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
354 354
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
355 355
 unxz freedombone-mesh_beaglebone-armhf.img.xz
356
-sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-mesh_beaglebone-armhf.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
356
+sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=freedombone-mesh_beaglebone-armhf.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
357 357
 </pre>
358 358
 </div>
359 359
 
@@ -369,9 +369,9 @@ There is still a software freedom issue with the Beaglebone Black, but it doesn'
369 369
 </div>
370 370
 </div>
371 371
 
372
-<div id="outline-container-orgf16e84d" class="outline-2">
373
-<h2 id="orgf16e84d">Building Disk Images</h2>
374
-<div class="outline-text-2" id="text-orgf16e84d">
372
+<div id="outline-container-orgfcd1440" class="outline-2">
373
+<h2 id="orgfcd1440">Building Disk Images</h2>
374
+<div class="outline-text-2" id="text-orgfcd1440">
375 375
 <p>
376 376
 It's better not to trust images downloaded from random places on the interwebs. Chances are that unless you are in the web of trust of the above GPG signatures then they don't mean very much to you. If you actually want something trustworthy then build the images from scratch. It will take some time. Here's how to do it.
377 377
 </p>
@@ -425,8 +425,8 @@ You can now copy the image to the USB thumb drive, replacing <b>sdX</b> with the
425 425
 </p>
426 426
 
427 427
 <div class="org-src-container">
428
-<pre class="src src-bash">sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
429
-sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=myimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
428
+<pre class="src src-bash">sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">count</span>=8
429
+sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=myimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
430 430
 </pre>
431 431
 </div>
432 432
 

+ 152
- 105
website/EN/mobile.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 18:25 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Freedombone mobile setup"
6
+<!-- 2018-04-24 Tue 16:29 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Freedombone mobile setup"
12 13
  />
13
-<meta  name="keywords" content="freedombone, mobile" />
14
+<meta name="keywords" content="freedombone, mobile" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,55 +236,19 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151 242
 </p>
152 243
 </div>
153 244
 
154
-<div id="outline-container-sec-1" class="outline-2">
155
-<h2 id="sec-1">Mobile</h2>
156
-<div class="outline-text-2" id="text-1">
157 245
 <p>
158 246
 Mobile phones are insecure devices, but they're regarded as being so essential to modern life that telling people not to use them isn't a viable option. Here are some recommendations on setting up a mobile phone (aka "smartphone") to work with Freedombone.
159 247
 </p>
160 248
 
161
-<div class="export">
162
-<p>
163
- &lt;center&gt;
164
- &lt;table style="width:80%; border:0"&gt;
165
-  &lt;tr&gt;
166
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Open&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Use a free and open source operating system. Open means more trustworthy&lt;/center&gt;&lt;/td&gt;
167
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Remove&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;If there are any proprietary apps then remove or deactivate them&lt;/center&gt;&lt;/td&gt;
168
-  &lt;/tr&gt;
169
-  &lt;tr&gt;
170
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Encrypt&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Make sure your phone is encrypted with a password which isn't easy to guess&lt;/center&gt;&lt;/td&gt;
171
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Apps&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Use F-droid to install new apps&lt;/center&gt;&lt;/td&gt;
172
-  &lt;/tr&gt;
173
-  &lt;tr&gt;
174
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Lock&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Enable a lock screen with a maximum number of password guesses&lt;/center&gt;&lt;/td&gt;
175
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Onion&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Onion route your connections to avoid bulk metadata collection&lt;/center&gt;&lt;/td&gt;
176
-  &lt;/tr&gt;
177
-  &lt;tr&gt;
178
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Email&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Access webmail in a browser&lt;/center&gt;&lt;/td&gt;
179
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Services&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Connect to the Freedombone services&lt;/center&gt;&lt;/td&gt;
180
-  &lt;/tr&gt;
181
-  &lt;tr&gt;
182
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Battery&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Avoid battery-eating apps and disable some optimisations&lt;/center&gt;&lt;/td&gt;
183
-    &lt;td&gt;&lt;center&gt;&lt;b&gt;&lt;h3&gt;Block&lt;/h3&gt;&lt;/b&gt;&lt;br&gt;Prevent access to know bad domains&lt;/center&gt;&lt;/td&gt;
184
-  &lt;/tr&gt;
185
-&lt;/table&gt;
186
-&lt;/center&gt;
187
-</p>
188
-
189
-</div>
190
-</div>
191
-</div>
192
-
193
-<div id="outline-container-sec-2" class="outline-2">
194
-<h2 id="sec-2">Open</h2>
195
-<div class="outline-text-2" id="text-2">
249
+<div id="outline-container-orgc9f2368" class="outline-2">
250
+<h2 id="orgc9f2368">Open</h2>
251
+<div class="outline-text-2" id="text-orgc9f2368">
196 252
 <p>
197 253
 Use a Linux based phone operating system. Typically this will mean Android, but could also mean LineageOS or Replicant. LineageOS is the most preferable, because you can usually get an up to date image with a recent kernel which will give you better security against exploits. If you're buying a phone then look for a model which is supported by LineageOS. Replicant is the most free (as in freedom) but only runs on a small number of phone models. If you have a phone which runs a full GNU/Linux system then that's fantastic, and you can probably use it in much the same way as a desktop system and the rest of the advice on this page won't apply. If you don't have a phone capable of running a Linux based operating system then consider selling, giving away or bartering your existing one.
198 254
 </p>
@@ -207,27 +263,27 @@ In the end it comes down to the fact that <i>if the source code for the device c
207 263
 </div>
208 264
 </div>
209 265
 
210
-<div id="outline-container-sec-3" class="outline-2">
211
-<h2 id="sec-3">Remove</h2>
212
-<div class="outline-text-2" id="text-3">
266
+<div id="outline-container-org1da5240" class="outline-2">
267
+<h2 id="org1da5240">Remove</h2>
268
+<div class="outline-text-2" id="text-org1da5240">
213 269
 <p>
214 270
 So maybe you're running Android and the phone came with some apps already installed. Almost certainly they'll be proprietary. Go to Settings/Apps and then uninstall or deactivate any apps which you really don't need. Mostly preinstalled apps are intended to send your data to companies who will then sell it to advertisers or governments under the business model of <i>surveillance capital</i>. It's not a good idea to get caught up in that, and to avoid becoming addicted to apps which are surveilling you without consent or installing spyware in the background without your knowledge.
215 271
 </p>
216 272
 </div>
217 273
 </div>
218 274
 
219
-<div id="outline-container-sec-4" class="outline-2">
220
-<h2 id="sec-4">Encrypt</h2>
221
-<div class="outline-text-2" id="text-4">
275
+<div id="outline-container-orge6cd0f0" class="outline-2">
276
+<h2 id="orge6cd0f0">Encrypt</h2>
277
+<div class="outline-text-2" id="text-orge6cd0f0">
222 278
 <p>
223 279
 Encrypt your phone. This can usually be done via <b>Settings/Security</b> and you may need to fully charge the phone first. Encryption means that if you lose your phone or it gets stolen then there is less chance that anyone who picks it up will get access to your data, photos and so on.
224 280
 </p>
225 281
 </div>
226 282
 </div>
227 283
 
228
-<div id="outline-container-sec-5" class="outline-2">
229
-<h2 id="sec-5">Apps</h2>
230
-<div class="outline-text-2" id="text-5">
284
+<div id="outline-container-org149be87" class="outline-2">
285
+<h2 id="org149be87">Apps</h2>
286
+<div class="outline-text-2" id="text-org149be87">
231 287
 <p>
232 288
 Installing <b>F-droid</b> and only adding any new apps via F-droid will ensure that you are always using free and open source software. Open source is not a panacea, since bugs can and do still occur, but it will help you to avoid the worst security and privacy pitfalls.
233 289
 </p>
@@ -238,18 +294,18 @@ Avoid using the Open Whisper Systems Signal app if you can, no matter what "expe
238 294
 </div>
239 295
 </div>
240 296
 
241
-<div id="outline-container-sec-6" class="outline-2">
242
-<h2 id="sec-6">Lock</h2>
243
-<div class="outline-text-2" id="text-6">
297
+<div id="outline-container-orgd1ea4fa" class="outline-2">
298
+<h2 id="orgd1ea4fa">Lock</h2>
299
+<div class="outline-text-2" id="text-orgd1ea4fa">
244 300
 <p>
245 301
 Add a lock screen, preferably with a password which is not easy for other people to guess or for quicker access with a PIN number. Install an app called <b>Locker</b>, activate it and set the maximum number of password guesses to ten (or whatever you feel comfortable with). If bad people get hold of your phone then they may try to brute force your lock screen password or PIN (i.e. automatically trying millions of common word and number combinations) and the locker app will prevent them from succeeding by resetting the phone back to its factory default condition and wiping the data.
246 302
 </p>
247 303
 </div>
248 304
 </div>
249 305
 
250
-<div id="outline-container-sec-7" class="outline-2">
251
-<h2 id="sec-7">Onion</h2>
252
-<div class="outline-text-2" id="text-7">
306
+<div id="outline-container-org98e33e6" class="outline-2">
307
+<h2 id="org98e33e6">Onion</h2>
308
+<div class="outline-text-2" id="text-org98e33e6">
253 309
 <p>
254 310
 Both governments and corporations want to compile matadata dossiers about you. Who you communicated with, when and how often. They want this so that they can data mine, simulate, predict and then ultimately influence (sometimes also called "nudge") your actions and preferences in the directions they prefer. By routing your connections through a number of proxy servers (Tor routers) you can make it perhaps not <i>theoretically</i> impossible but at least <i>very hard</i> for them to have a complete and accurate list of who your friends are, your religion, politics, likely health issues, sexual orientation and what news sites or books you read.
255 311
 </p>
@@ -260,26 +316,26 @@ In F-droid under the <b>repositories</b> menu you can enable the <b>guardian pro
260 316
 </div>
261 317
 </div>
262 318
 
263
-<div id="outline-container-sec-8" class="outline-2">
264
-<h2 id="sec-8">Email</h2>
265
-<div class="outline-text-2" id="text-8">
319
+<div id="outline-container-org0b855a4" class="outline-2">
320
+<h2 id="org0b855a4">Email</h2>
321
+<div class="outline-text-2" id="text-org0b855a4">
266 322
 <p>
267 323
 The easiest way to access email is by installing the <a href="./app_mailpile.html">Mailpile</a> app. This keeps your GPG keys off of possibly insecure mobile devices but still enables encrypted email communications in an easy way. You can use K9 mail if you prefer, but that will require installing OpenKeychain and having your GPG keys on the device, which is a lot more risky.
268 324
 </p>
269 325
 </div>
270 326
 </div>
271
-<div id="outline-container-sec-9" class="outline-2">
272
-<h2 id="sec-9">Services</h2>
273
-<div class="outline-text-2" id="text-9">
327
+<div id="outline-container-org4eecc0f" class="outline-2">
328
+<h2 id="org4eecc0f">Services</h2>
329
+<div class="outline-text-2" id="text-org4eecc0f">
274 330
 <p>
275 331
 For information on configuring various apps to work with Freedombone see the <a href="./apps.html">apps section</a>. Also see advice on chat apps in the <a href="./faq.html">FAQ</a>.
276 332
 </p>
277 333
 </div>
278 334
 </div>
279 335
 
280
-<div id="outline-container-sec-10" class="outline-2">
281
-<h2 id="sec-10">Battery</h2>
282
-<div class="outline-text-2" id="text-10">
336
+<div id="outline-container-org0f96cf1" class="outline-2">
337
+<h2 id="org0f96cf1">Battery</h2>
338
+<div class="outline-text-2" id="text-org0f96cf1">
283 339
 <p>
284 340
 Even with free software apps it's not difficult to get into a situation where your battery doesn't last for long. To maximize battery life access RSS feeds via the onion-based mobile reader within a Tor-compatible browser and not from a locally installed RSS app.
285 341
 </p>
@@ -298,9 +354,9 @@ It's also recommended to disable battery optimisations for Conversations and Orb
298 354
 </div>
299 355
 </div>
300 356
 
301
-<div id="outline-container-sec-11" class="outline-2">
302
-<h2 id="sec-11">Blocking bad domains</h2>
303
-<div class="outline-text-2" id="text-11">
357
+<div id="outline-container-orgb6d0da7" class="outline-2">
358
+<h2 id="orgb6d0da7">Blocking bad domains</h2>
359
+<div class="outline-text-2" id="text-orgb6d0da7">
304 360
 <p>
305 361
 You can block known bad domains by editing the <b>/system/etc/hosts</b> file on your device. It is possible to use extensive ad-blocking hosts files used by other ad-blocking systems such as pi-hole, but merely blocking Facebook and Google Analytics will protect you against much of the corporate surveillance which goes on. Even if you don't have a Facebook account this may still be useful since they will still try to create a "ghost profile" of you, so the less data they have the better.
306 362
 </p>
@@ -318,7 +374,6 @@ On your system (not the device) install the <b>android-tools</b> package. For ex
318 374
 </p>
319 375
 
320 376
 <div class="org-src-container">
321
-
322 377
 <pre class="src src-bash">sudo pacman -S android-tools
323 378
 </pre>
324 379
 </div>
@@ -328,7 +383,6 @@ Connect the device to your system via a USB cable, then:
328 383
 </p>
329 384
 
330 385
 <div class="org-src-container">
331
-
332 386
 <pre class="src src-bash">adb root
333 387
 adb remount
334 388
 adb pull /system/etc/hosts
@@ -340,7 +394,6 @@ Now edit the hosts file which was pulled and append:
340 394
 </p>
341 395
 
342 396
 <div class="org-src-container">
343
-
344 397
 <pre class="src src-bash">127.0.0.1       www.facebook.com
345 398
 127.0.0.1       facebook.com
346 399
 127.0.0.1       static.ak.fbcdn.net
@@ -365,7 +418,6 @@ Then upload the hosts file back again with:
365 418
 </p>
366 419
 
367 420
 <div class="org-src-container">
368
-
369 421
 <pre class="src src-bash">adb push hosts /system/etc/hosts
370 422
 </pre>
371 423
 </div>
@@ -374,14 +426,9 @@ Then upload the hosts file back again with:
374 426
 Once that's done you may want to set <b>Root access</b> on the device back to <b>Disabled</b> and turn <b>Android debugging</b> off.
375 427
 </p>
376 428
 
377
-<div class="export">
378
-<p>
379
-&lt;center&gt;
380
-Return to the &lt;a href="index.html"&gt;home page&lt;/a&gt;
381
-&lt;/center&gt;
382
-</p>
383
-
384
-</div>
429
+<center>
430
+Return to the <a href="index.html">home page</a>
431
+</center>
385 432
 
386 433
 
387 434
 

+ 136
- 55
website/EN/release3.html Datei anzeigen

@@ -3,26 +3,33 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<title></title>
7
-<!-- 2018-04-12 Thu 13:25 -->
8
-<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
-<meta  name="generator" content="Org-mode" />
10
-<meta  name="author" content="Bob Mottram" />
11
-<meta  name="description" content="Version 3"
6
+<!-- 2018-04-21 Sat 14:59 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="Version 3"
12 13
  />
13
-<meta  name="keywords" content="freedombone" />
14
+<meta name="keywords" content="freedombone" />
14 15
 <style type="text/css">
15 16
  <!--/*--><![CDATA[/*><!--*/
16
-  .title  { text-align: center; }
17
+  .title  { text-align: center;
18
+             margin-bottom: .2em; }
19
+  .subtitle { text-align: center;
20
+              font-size: medium;
21
+              font-weight: bold;
22
+              margin-top:0; }
17 23
   .todo   { font-family: monospace; color: red; }
18
-  .done   { color: green; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
19 26
   .tag    { background-color: #eee; font-family: monospace;
20 27
             padding: 2px; font-size: 80%; font-weight: normal; }
21 28
   .timestamp { color: #bebebe; }
22 29
   .timestamp-kwd { color: #5f9ea0; }
23
-  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
-  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
-  .center { margin-left: auto; margin-right: auto; text-align: center; }
30
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
26 33
   .underline { text-decoration: underline; }
27 34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28 35
   p.verse { margin-left: 3%; }
@@ -49,27 +56,111 @@
49 56
     border: 1px solid black;
50 57
   }
51 58
   pre.src:hover:before { display: inline;}
52
-  pre.src-sh:before    { content: 'sh'; }
53
-  pre.src-bash:before  { content: 'sh'; }
59
+  /* Languages per Org manual */
60
+  pre.src-asymptote:before { content: 'Asymptote'; }
61
+  pre.src-awk:before { content: 'Awk'; }
62
+  pre.src-C:before { content: 'C'; }
63
+  /* pre.src-C++ doesn't work in CSS */
64
+  pre.src-clojure:before { content: 'Clojure'; }
65
+  pre.src-css:before { content: 'CSS'; }
66
+  pre.src-D:before { content: 'D'; }
67
+  pre.src-ditaa:before { content: 'ditaa'; }
68
+  pre.src-dot:before { content: 'Graphviz'; }
69
+  pre.src-calc:before { content: 'Emacs Calc'; }
54 70
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
55
-  pre.src-R:before     { content: 'R'; }
56
-  pre.src-perl:before  { content: 'Perl'; }
57
-  pre.src-java:before  { content: 'Java'; }
58
-  pre.src-sql:before   { content: 'SQL'; }
71
+  pre.src-fortran:before { content: 'Fortran'; }
72
+  pre.src-gnuplot:before { content: 'gnuplot'; }
73
+  pre.src-haskell:before { content: 'Haskell'; }
74
+  pre.src-hledger:before { content: 'hledger'; }
75
+  pre.src-java:before { content: 'Java'; }
76
+  pre.src-js:before { content: 'Javascript'; }
77
+  pre.src-latex:before { content: 'LaTeX'; }
78
+  pre.src-ledger:before { content: 'Ledger'; }
79
+  pre.src-lisp:before { content: 'Lisp'; }
80
+  pre.src-lilypond:before { content: 'Lilypond'; }
81
+  pre.src-lua:before { content: 'Lua'; }
82
+  pre.src-matlab:before { content: 'MATLAB'; }
83
+  pre.src-mscgen:before { content: 'Mscgen'; }
84
+  pre.src-ocaml:before { content: 'Objective Caml'; }
85
+  pre.src-octave:before { content: 'Octave'; }
86
+  pre.src-org:before { content: 'Org mode'; }
87
+  pre.src-oz:before { content: 'OZ'; }
88
+  pre.src-plantuml:before { content: 'Plantuml'; }
89
+  pre.src-processing:before { content: 'Processing.js'; }
90
+  pre.src-python:before { content: 'Python'; }
91
+  pre.src-R:before { content: 'R'; }
92
+  pre.src-ruby:before { content: 'Ruby'; }
93
+  pre.src-sass:before { content: 'Sass'; }
94
+  pre.src-scheme:before { content: 'Scheme'; }
95
+  pre.src-screen:before { content: 'Gnu Screen'; }
96
+  pre.src-sed:before { content: 'Sed'; }
97
+  pre.src-sh:before { content: 'shell'; }
98
+  pre.src-sql:before { content: 'SQL'; }
99
+  pre.src-sqlite:before { content: 'SQLite'; }
100
+  /* additional languages in org.el's org-babel-load-languages alist */
101
+  pre.src-forth:before { content: 'Forth'; }
102
+  pre.src-io:before { content: 'IO'; }
103
+  pre.src-J:before { content: 'J'; }
104
+  pre.src-makefile:before { content: 'Makefile'; }
105
+  pre.src-maxima:before { content: 'Maxima'; }
106
+  pre.src-perl:before { content: 'Perl'; }
107
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
108
+  pre.src-scala:before { content: 'Scala'; }
109
+  pre.src-shell:before { content: 'Shell Script'; }
110
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
111
+  /* additional language identifiers per "defun org-babel-execute"
112
+       in ob-*.el */
113
+  pre.src-cpp:before  { content: 'C++'; }
114
+  pre.src-abc:before  { content: 'ABC'; }
115
+  pre.src-coq:before  { content: 'Coq'; }
116
+  pre.src-groovy:before  { content: 'Groovy'; }
117
+  /* additional language identifiers from org-babel-shell-names in
118
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
119
+     the execution function name together. */
120
+  pre.src-bash:before  { content: 'bash'; }
121
+  pre.src-csh:before  { content: 'csh'; }
122
+  pre.src-ash:before  { content: 'ash'; }
123
+  pre.src-dash:before  { content: 'dash'; }
124
+  pre.src-ksh:before  { content: 'ksh'; }
125
+  pre.src-mksh:before  { content: 'mksh'; }
126
+  pre.src-posh:before  { content: 'posh'; }
127
+  /* Additional Emacs modes also supported by the LaTeX listings package */
128
+  pre.src-ada:before { content: 'Ada'; }
129
+  pre.src-asm:before { content: 'Assembler'; }
130
+  pre.src-caml:before { content: 'Caml'; }
131
+  pre.src-delphi:before { content: 'Delphi'; }
132
+  pre.src-html:before { content: 'HTML'; }
133
+  pre.src-idl:before { content: 'IDL'; }
134
+  pre.src-mercury:before { content: 'Mercury'; }
135
+  pre.src-metapost:before { content: 'MetaPost'; }
136
+  pre.src-modula-2:before { content: 'Modula-2'; }
137
+  pre.src-pascal:before { content: 'Pascal'; }
138
+  pre.src-ps:before { content: 'PostScript'; }
139
+  pre.src-prolog:before { content: 'Prolog'; }
140
+  pre.src-simula:before { content: 'Simula'; }
141
+  pre.src-tcl:before { content: 'tcl'; }
142
+  pre.src-tex:before { content: 'TeX'; }
143
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
144
+  pre.src-verilog:before { content: 'Verilog'; }
145
+  pre.src-vhdl:before { content: 'VHDL'; }
146
+  pre.src-xml:before { content: 'XML'; }
147
+  pre.src-nxml:before { content: 'XML'; }
148
+  /* add a generic configuration mode; LaTeX export needs an additional
149
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
150
+  pre.src-conf:before { content: 'Configuration File'; }
59 151
 
60 152
   table { border-collapse:collapse; }
61 153
   caption.t-above { caption-side: top; }
62 154
   caption.t-bottom { caption-side: bottom; }
63 155
   td, th { vertical-align:top;  }
64
-  th.right  { text-align: center;  }
65
-  th.left   { text-align: center;   }
66
-  th.center { text-align: center; }
67
-  td.right  { text-align: right;  }
68
-  td.left   { text-align: left;   }
69
-  td.center { text-align: center; }
156
+  th.org-right  { text-align: center;  }
157
+  th.org-left   { text-align: center;   }
158
+  th.org-center { text-align: center; }
159
+  td.org-right  { text-align: right;  }
160
+  td.org-left   { text-align: left;   }
161
+  td.org-center { text-align: center; }
70 162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73 164
   .footdef  { margin-bottom: 1em; }
74 165
   .figure { padding: 1em; }
75 166
   .figure p { text-align: center; }
@@ -89,6 +180,7 @@
89 180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90 181
   .org-info-js_search-highlight
91 182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92 184
   /*]]>*/-->
93 185
 </style>
94 186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -97,7 +189,7 @@
97 189
 @licstart  The following is the entire license notice for the
98 190
 JavaScript code in this tag.
99 191
 
100
-Copyright (C) 2012-2013 Free Software Foundation, Inc.
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
101 193
 
102 194
 The JavaScript code in this tag is free software: you can
103 195
 redistribute it and/or modify it under the terms of the GNU
@@ -144,16 +236,15 @@ for the JavaScript code in this tag.
144 236
 <a name="top" id="top"></a>
145 237
 </div>
146 238
 <div id="content">
147
-<h1 class="title"></h1>
148 239
 
149 240
 <div class="figure">
150 241
 <p><img src="images/release3.jpg" alt="release3.jpg" width="100%" align="center" />
151 242
 </p>
152 243
 </div>
153 244
 
154
-<div id="outline-container-sec-1" class="outline-2">
155
-<h2 id="sec-1">Building an internet run by the users, for the users</h2>
156
-<div class="outline-text-2" id="text-1">
245
+<div id="outline-container-org9121f8f" class="outline-2">
246
+<h2 id="org9121f8f">Building an internet run by the users, for the users</h2>
247
+<div class="outline-text-2" id="text-org9121f8f">
157 248
 <p>
158 249
 The internet may still be mostly in the clutches of a few giant megacorporations and dubious governments with sketchy agendas, but it doesn't have to remain that way. With the third version of the Freedombone system there is now more scope than before to take back your privacy, have ownership of personal data and run your own online communities without undesirable intermediaries.
159 250
 </p>
@@ -163,27 +254,20 @@ Freedombone version 3 is based on Debian 9 (Stretch). It was released in July 20
163 254
 </p>
164 255
 
165 256
 <ul class="org-ul">
166
-<li>Faster initial setup
167
-</li>
168
-<li>More <a href="./apps.html">installable apps</a>, including CryptPad, Koel, NextCloud, PostActiv, Friendica and Matrix/RiotWeb
169
-</li>
170
-<li>Automated <a href="https://github.com/hardenedlinux/STIG-4-Debian">security tests</a>
171
-</li>
172
-<li>Improved XMPP configuration for support of the <a href="https://conversations.im">Conversations</a> app features
173
-</li>
174
-<li>Improved blocking controls for a better federated network experience
175
-</li>
176
-<li>Uses <a href="https://en.wikipedia.org/wiki/EdDSA">elliptic curve</a> based GPG keys for better performance on low power single board computers
177
-</li>
178
-<li>Pre-downloaded repos distributed within images for faster and more autonomous app installs
179
-</li>
257
+<li>Faster initial setup</li>
258
+<li>More <a href="./apps.html">installable apps</a>, including CryptPad, Koel, NextCloud, PostActiv, Friendica and Matrix/RiotWeb</li>
259
+<li>Automated <a href="https://github.com/hardenedlinux/STIG-4-Debian">security tests</a></li>
260
+<li>Improved XMPP configuration for support of the <a href="https://conversations.im">Conversations</a> app features</li>
261
+<li>Improved blocking controls for a better federated network experience</li>
262
+<li>Uses <a href="https://en.wikipedia.org/wiki/EdDSA">elliptic curve</a> based GPG keys for better performance on low power single board computers</li>
263
+<li>Pre-downloaded repos distributed within images for faster and more autonomous app installs</li>
180 264
 </ul>
181 265
 </div>
182 266
 </div>
183 267
 
184
-<div id="outline-container-sec-2" class="outline-2">
185
-<h2 id="sec-2">Installation</h2>
186
-<div class="outline-text-2" id="text-2">
268
+<div id="outline-container-org68d06a3" class="outline-2">
269
+<h2 id="org68d06a3">Installation</h2>
270
+<div class="outline-text-2" id="text-org68d06a3">
187 271
 <p>
188 272
 The simplest way to install is from a pre-made disk image. Images can be <a href="https://freedombone.net/downloads/v3">downloaded here</a>. You will need to have previously obtained a domain name and have a dynamic DNS account somewhere.
189 273
 </p>
@@ -193,9 +277,8 @@ Copy the image to a microSD card or USB thumb drive, replacing sdX with the iden
193 277
 </p>
194 278
 
195 279
 <div class="org-src-container">
196
-
197 280
 <pre class="src src-bash">unxz downloadedimagefile.img.xz
198
-dd bs=1M if=downloadedimagefile.img of=/dev/sdX conv=fdatasync
281
+dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=downloadedimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
199 282
 </pre>
200 283
 </div>
201 284
 
@@ -212,7 +295,6 @@ As the system boots for the first time the login is:
212 295
 </p>
213 296
 
214 297
 <div class="org-src-container">
215
-
216 298
 <pre class="src src-bash">username: fbone
217 299
 password: freedombone
218 300
 </pre>
@@ -223,7 +305,6 @@ If you're installing from a microSD card on a single board computer without a sc
223 305
 </p>
224 306
 
225 307
 <div class="org-src-container">
226
-
227 308
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
228 309
 </pre>
229 310
 </div>
@@ -242,9 +323,9 @@ More detailed installation instructions are linked from <a href="./index.html">t
242 323
 </div>
243 324
 </div>
244 325
 
245
-<div id="outline-container-sec-3" class="outline-2">
246
-<h2 id="sec-3">Upgrading from a previous install</h2>
247
-<div class="outline-text-2" id="text-3">
326
+<div id="outline-container-org976059e" class="outline-2">
327
+<h2 id="org976059e">Upgrading from a previous install</h2>
328
+<div class="outline-text-2" id="text-org976059e">
248 329
 <p>
249 330
 To upgrade from the Debian Jessie version first create a master keydrive. Go to the <b>Administrator control panel</b> and select <b>Backup and restore</b> then <b>Backup GPG key to USB (master keydrive)</b>. Insert a LUKS encrypted USB drive. When that is done Create a full backup by selecting <b>Backup data to USB drive</b> and using another LUKS encrypted USB drive.
250 331
 </p>

+ 11
- 11
website/EN/release31.html Datei anzeigen

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-04-15 Sun 19:01 -->
6
+<!-- 2018-04-21 Sat 15:00 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -242,9 +242,9 @@ for the JavaScript code in this tag.
242 242
 </p>
243 243
 </div>
244 244
 
245
-<div id="outline-container-org996a8d0" class="outline-2">
246
-<h2 id="org996a8d0"><b>Version 3.1, 2018-04-15</b></h2>
247
-<div class="outline-text-2" id="text-org996a8d0">
245
+<div id="outline-container-org562f1b2" class="outline-2">
246
+<h2 id="org562f1b2"><b>Version 3.1, 2018-04-15</b></h2>
247
+<div class="outline-text-2" id="text-org562f1b2">
248 248
 <p>
249 249
 Newer and shinier than before, <a href="./index.html">Freedombone</a> 3.1 rests upon the solid foundation of Debian stable and delivers major new self-hosted apps, improved mesh networking and a new logo. It supports version 3 onion addresses and the ability to use <a href="./usage_email.html">email with onion and I2P addresses</a>. New apps are:
250 250
 </p>
@@ -281,9 +281,9 @@ The future is decentralized.
281 281
 </div>
282 282
 </div>
283 283
 
284
-<div id="outline-container-org811872a" class="outline-2">
285
-<h2 id="org811872a">Installation</h2>
286
-<div class="outline-text-2" id="text-org811872a">
284
+<div id="outline-container-org0f2b77a" class="outline-2">
285
+<h2 id="org0f2b77a">Installation</h2>
286
+<div class="outline-text-2" id="text-org0f2b77a">
287 287
 <p>
288 288
 The simplest way to install is from a pre-made disk image. Images can be <a href="https://freedombone.net/downloads/v31">downloaded here</a>. You will need to have previously obtained a domain name and have a dynamic DNS account somewhere. Or if you don't need clearnet domains and will be using Tor compatible browsers then you can use the "onion only" images where apps will be accessible via an onion address.
289 289
 </p>
@@ -294,7 +294,7 @@ Copy the image to a microSD card or USB thumb drive, replacing sdX with the iden
294 294
 
295 295
 <div class="org-src-container">
296 296
 <pre class="src src-bash">unxz downloadedimagefile.img.xz
297
-dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=downloadedimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
297
+dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=downloadedimagefile.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
298 298
 </pre>
299 299
 </div>
300 300
 
@@ -339,9 +339,9 @@ More detailed installation instructions are linked from <a href="./installmethod
339 339
 </div>
340 340
 </div>
341 341
 
342
-<div id="outline-container-orgba24030" class="outline-2">
343
-<h2 id="orgba24030">Upgrading from a previous install</h2>
344
-<div class="outline-text-2" id="text-orgba24030">
342
+<div id="outline-container-orgf8d3f00" class="outline-2">
343
+<h2 id="orgf8d3f00">Upgrading from a previous install</h2>
344
+<div class="outline-text-2" id="text-orgf8d3f00">
345 345
 <p>
346 346
 To upgrade from version 3 just go to the <b>administrator control panel</b> and select <b>check for updates</b>.
347 347
 </p>

+ 27
- 27
website/EN/socialinstance.html Datei anzeigen

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-04-15 Sun 18:26 -->
6
+<!-- 2018-04-21 Sat 15:00 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -242,9 +242,9 @@ for the JavaScript code in this tag.
242 242
 </p>
243 243
 </div>
244 244
 
245
-<div id="outline-container-org3a57e54" class="outline-2">
246
-<h2 id="org3a57e54">Social Instance</h2>
247
-<div class="outline-text-2" id="text-org3a57e54">
245
+<div id="outline-container-org7227583" class="outline-2">
246
+<h2 id="org7227583">Social Instance</h2>
247
+<div class="outline-text-2" id="text-org7227583">
248 248
 <p>
249 249
 A social instance image allows you to easily set up a fediverse server, which federates using the OStatus or ActivityPub protocol. You will need:
250 250
 </p>
@@ -263,9 +263,9 @@ The installation process is the same as usual, with the only difference being th
263 263
 </div>
264 264
 </div>
265 265
 
266
-<div id="outline-container-orgb2f2066" class="outline-2">
267
-<h2 id="orgb2f2066">Copy the image to the USB drive</h2>
268
-<div class="outline-text-2" id="text-orgb2f2066">
266
+<div id="outline-container-org1d12ef2" class="outline-2">
267
+<h2 id="org1d12ef2">Copy the image to the USB drive</h2>
268
+<div class="outline-text-2" id="text-org1d12ef2">
269 269
 <p>
270 270
 Substitute <b>sdX</b> with the device name for your USB drive.
271 271
 </p>
@@ -276,8 +276,8 @@ wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz
276 276
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
277 277
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
278 278
 unxz freedombone-pleroma-amd64.img.xz
279
-sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">count</span>=8
280
-sudo dd <span class="org-variable-name">bs</span>=1M <span class="org-variable-name">if</span>=freedombone-pleroma-amd64.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
279
+sudo dd <span class="org-variable-name">if</span>=/dev/zero <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">count</span>=8
280
+sudo dd <span class="org-variable-name">bs</span>=32M <span class="org-variable-name">if</span>=freedombone-pleroma-amd64.img <span class="org-variable-name">of</span>=/dev/sdX <span class="org-variable-name">conv</span>=fdatasync
281 281
 </pre>
282 282
 </div>
283 283
 
@@ -287,9 +287,9 @@ Also note that if the laptop has a removable SSD drive it's possible to copy the
287 287
 </div>
288 288
 </div>
289 289
 
290
-<div id="outline-container-orgb12b5ef" class="outline-2">
291
-<h2 id="orgb12b5ef">Connect the laptop to your internet router</h2>
292
-<div class="outline-text-2" id="text-orgb12b5ef">
290
+<div id="outline-container-org1acc3f8" class="outline-2">
291
+<h2 id="org1acc3f8">Connect the laptop to your internet router</h2>
292
+<div class="outline-text-2" id="text-org1acc3f8">
293 293
 <p>
294 294
 Plug the USB drive into the laptop and connect it to your internet router with the ethernet cable.
295 295
 </p>
@@ -302,9 +302,9 @@ Plug the USB drive into the laptop and connect it to your internet router with t
302 302
 </div>
303 303
 </div>
304 304
 
305
-<div id="outline-container-org32addf2" class="outline-2">
306
-<h2 id="org32addf2">Boot the laptop from the USB drive</h2>
307
-<div class="outline-text-2" id="text-org32addf2">
305
+<div id="outline-container-orgc06c32b" class="outline-2">
306
+<h2 id="orgc06c32b">Boot the laptop from the USB drive</h2>
307
+<div class="outline-text-2" id="text-orgc06c32b">
308 308
 <p>
309 309
 You may need to alter the BIOS settings to get this to work reliably.
310 310
 </p>
@@ -317,9 +317,9 @@ You may need to alter the BIOS settings to get this to work reliably.
317 317
 </div>
318 318
 </div>
319 319
 
320
-<div id="outline-container-org6417b90" class="outline-2">
321
-<h2 id="org6417b90">Forward ports 80 (HTTP) and 443 (HTTPS) from your internet router to the laptop</h2>
322
-<div class="outline-text-2" id="text-org6417b90">
320
+<div id="outline-container-orgbe57b0d" class="outline-2">
321
+<h2 id="orgbe57b0d">Forward ports 80 (HTTP) and 443 (HTTPS) from your internet router to the laptop</h2>
322
+<div class="outline-text-2" id="text-orgbe57b0d">
323 323
 <p>
324 324
 Log into your internet router using a non-Tor browser (usually it's on an address like 192.168.1.1 or 192.168.1.254). Often port forwarding settings are together with firewall settings.
325 325
 </p>
@@ -332,9 +332,9 @@ Log into your internet router using a non-Tor browser (usually it's on an addres
332 332
 </div>
333 333
 </div>
334 334
 
335
-<div id="outline-container-orga1248fc" class="outline-2">
336
-<h2 id="orga1248fc">From another machine ssh into the laptop</h2>
337
-<div class="outline-text-2" id="text-orga1248fc">
335
+<div id="outline-container-org61c8baa" class="outline-2">
336
+<h2 id="org61c8baa">From another machine ssh into the laptop</h2>
337
+<div class="outline-text-2" id="text-org61c8baa">
338 338
 <div class="org-src-container">
339 339
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
340 340
 </pre>
@@ -346,18 +346,18 @@ Or alternatively you can log in directly on the laptop. The initial username is
346 346
 </div>
347 347
 </div>
348 348
 
349
-<div id="outline-container-orge7dea9e" class="outline-2">
350
-<h2 id="orge7dea9e">Follow the setup procedure</h2>
351
-<div class="outline-text-2" id="text-orge7dea9e">
349
+<div id="outline-container-orgaaaf930" class="outline-2">
350
+<h2 id="orgaaaf930">Follow the setup procedure</h2>
351
+<div class="outline-text-2" id="text-orgaaaf930">
352 352
 <p>
353 353
 Enter your user details, domain name and dynamic DNS settings.
354 354
 </p>
355 355
 </div>
356 356
 </div>
357 357
 
358
-<div id="outline-container-orgde5ef18" class="outline-2">
359
-<h2 id="orgde5ef18">When installation is complete</h2>
360
-<div class="outline-text-2" id="text-orgde5ef18">
358
+<div id="outline-container-orgbd9fe95" class="outline-2">
359
+<h2 id="orgbd9fe95">When installation is complete</h2>
360
+<div class="outline-text-2" id="text-orgbd9fe95">
361 361
 <p>
362 362
 Navigate to your domain and register a new user.
363 363
 </p>