浏览代码

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

Bob Mottram 7 年前
父节点
当前提交
b6467fdea0
共有 68 个文件被更改,包括 2281 次插入1358 次删除
  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. 二进制
      img/controlpanel/control_panel_about.jpg
  14. 二进制
      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 查看文件

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 查看文件

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.
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
 * Initial setup
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
 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.
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 查看文件

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:
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
 #+begin_src bash
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
 #+end_src
27
 #+end_src
28
 
28
 
29
 Where */dev/sdX* is the path for the microSD drive on your system.
29
 Where */dev/sdX* is the path for the microSD drive on your system.

+ 31
- 0
doc/EN/faq.org 查看文件

19
 #+ATTR_HTML: :border -1
19
 #+ATTR_HTML: :border -1
20
 | [[What applications are supported?]]                                                          |
20
 | [[What applications are supported?]]                                                          |
21
 | [[I don't have a static IP address. Can I still install this system?]]                        |
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
 | [[Why Freedombone and not FreedomBox?]]                                                       |
24
 | [[Why Freedombone and not FreedomBox?]]                                                       |
23
 | [[Why not support building images for Raspberry Pi?]]                                         |
25
 | [[Why not support building images for Raspberry Pi?]]                                         |
24
 | [[Why use Tor? I've heard it's used by bad people]]                                           |
26
 | [[Why use Tor? I've heard it's used by bad people]]                                           |
25
 | [[How is Tor integrated with Freedombone?]]                                                   |
27
 | [[How is Tor integrated with Freedombone?]]                                                   |
26
 | [[Can I add a clearnet domain to an onion build?]]                                            |
28
 | [[Can I add a clearnet domain to an onion build?]]                                            |
27
 | [[Why use Github?]]                                                                           |
29
 | [[Why use Github?]]                                                                           |
30
+| [[What are the data protection implications of running this system?]]                         |
28
 | [[After using nmap or other scanning tool I can no longer log in]]                            |
31
 | [[After using nmap or other scanning tool I can no longer log in]]                            |
29
 | [[Should I upload my GPG keys to keybase.io?]]                                                |
32
 | [[Should I upload my GPG keys to keybase.io?]]                                                |
30
 | [[Keys and emails should not be stored on servers. Why do you do that?]]                      |
33
 | [[Keys and emails should not be stored on servers. Why do you do that?]]                      |
59
 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.
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
 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.
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
 * Why Freedombone and not FreedomBox?
83
 * Why Freedombone and not FreedomBox?
63
 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:
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
 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.
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
 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.
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
 * After using nmap or other scanning tool I can no longer log in
149
 * After using nmap or other scanning tool I can no longer log in
119
 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.
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
 * Should I upload my GPG keys to keybase.io?
151
 * Should I upload my GPG keys to keybase.io?

+ 3
- 3
doc/EN/homeserver.org 查看文件

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*).
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
 #+begin_src bash
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
 #+end_src
74
 #+end_src
75
 
75
 
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.
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
 
119
 
120
 Then select *About*. You'll see a list of sites and their onion addresses.
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
 [[file:images/controlpanel/control_panel_about.jpg]]
123
 [[file:images/controlpanel/control_panel_about.jpg]]
124
 
124
 
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.
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 查看文件

129
 Then copy it to a microSD card. Depending on your system you may need an adaptor to be able to do that.
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
 #+BEGIN_SRC bash
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
 #+END_SRC
133
 #+END_SRC
134
 
134
 
135
 Where *sdX* is the microSD drive. You can check which drive is the microSD drive using:
135
 Where *sdX* is the microSD drive. You can check which drive is the microSD drive using:

+ 0
- 1
doc/EN/mesh_capabilities.org 查看文件

19
  - Private and public sharing of files
19
  - Private and public sharing of files
20
  - Blogging
20
  - Blogging
21
  - Collaborative editing of documents and presentations
21
  - Collaborative editing of documents and presentations
22
- - Creating and broadcasting audio media/podcasts
23
  - Social network stream. Follow/unfollow other peers
22
  - Social network stream. Follow/unfollow other peers
24
  - No network administration required
23
  - No network administration required
25
  - No servers
24
  - No servers

+ 7
- 7
doc/EN/mesh_images.org 查看文件

41
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
41
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
42
 gpg --verify freedombone-meshclient-i386.img.xz.sig
42
 gpg --verify freedombone-meshclient-i386.img.xz.sig
43
 unxz freedombone-meshclient-i386.img.xz
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
 #+end_src
46
 #+end_src
47
 
47
 
48
 To get a number of systems onto the mesh repeat the /dd/ command to create however many bootable USB drives you need.
48
 To get a number of systems onto the mesh repeat the /dd/ command to create however many bootable USB drives you need.
55
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
55
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
56
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
56
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
57
 unxz freedombone-meshclient-insecure-i386.img.xz
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
 #+end_src
60
 #+end_src
61
 
61
 
62
 ** Router images
62
 ** Router images
75
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
75
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
76
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
76
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
77
 unxz freedombone-mesh_beaglebone-armhf.img.xz
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
 #+end_src
79
 #+end_src
80
 
80
 
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.
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
 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*).
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
 #+begin_src bash
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
 #+end_src
124
 #+end_src
125
 
125
 
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.
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 查看文件

9
 #+attr_html: :width 80% :height 10% :align center
9
 #+attr_html: :width 80% :height 10% :align center
10
 [[file:images/logo.png]]
10
 [[file:images/logo.png]]
11
 
11
 
12
-* Mobile
13
-
14
 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.
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
 * Open
14
 * Open
44
 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.
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
 127.0.0.1       www.google-analytics.com
96
 127.0.0.1       www.google-analytics.com
126
 127.0.0.1       google-analytics.com
97
 127.0.0.1       google-analytics.com
127
 127.0.0.1       ssl.google-analytics.com
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
 #+end_src
101
 #+end_src
129
 
102
 
130
 Then upload the hosts file back again with:
103
 Then upload the hosts file back again with:

+ 1
- 1
doc/EN/release3.org 查看文件

31
 
31
 
32
 #+BEGIN_SRC bash
32
 #+BEGIN_SRC bash
33
 unxz downloadedimagefile.img.xz
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
 #+END_SRC
35
 #+END_SRC
36
 
36
 
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.
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 查看文件

39
 
39
 
40
 #+BEGIN_SRC bash
40
 #+BEGIN_SRC bash
41
 unxz downloadedimagefile.img.xz
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
 #+END_SRC
43
 #+END_SRC
44
 
44
 
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.
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 查看文件

31
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
31
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
32
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
32
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
33
 unxz freedombone-pleroma-amd64.img.xz
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
 #+end_src
36
 #+end_src
37
 
37
 
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.
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.

二进制
img/controlpanel/control_panel_about.jpg 查看文件


二进制
man/freedombone-image.1.gz 查看文件


+ 1
- 0
src/freedombone-addremove 查看文件

203
             fi
203
             fi
204
         fi
204
         fi
205
         app_index=$((app_index+1))
205
         app_index=$((app_index+1))
206
+
206
     done
207
     done
207
 
208
 
208
     # if no apps to be installed then don't do anything
209
     # if no apps to be installed then don't do anything

+ 1
- 0
src/freedombone-app-etherpad 查看文件

30
 
30
 
31
 IN_DEFAULT_INSTALL=0
31
 IN_DEFAULT_INSTALL=0
32
 SHOW_ON_ABOUT=1
32
 SHOW_ON_ABOUT=1
33
+MINIMUM_RAM_MB=2000
33
 
34
 
34
 ETHERPAD_DOMAIN_NAME=
35
 ETHERPAD_DOMAIN_NAME=
35
 ETHERPAD_CODE=
36
 ETHERPAD_CODE=

+ 8
- 3
src/freedombone-app-gnusocial 查看文件

30
 
30
 
31
 IN_DEFAULT_INSTALL=0
31
 IN_DEFAULT_INSTALL=0
32
 SHOW_ON_ABOUT=1
32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33
 
34
 
34
 GNUSOCIAL_DOMAIN_NAME=
35
 GNUSOCIAL_DOMAIN_NAME=
35
 GNUSOCIAL_CODE=
36
 GNUSOCIAL_CODE=
581
     fi
582
     fi
582
     kill_pid=$(pgrep "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
583
     kill_pid=$(pgrep "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
583
     kill -9 "$kill_pid"
584
     kill -9 "$kill_pid"
585
+    pkill "$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/queuedaemon.php"
584
 
586
 
585
     if [ -d "/var/www/$GNUSOCIAL_DOMAIN_NAME" ]; then
587
     if [ -d "/var/www/$GNUSOCIAL_DOMAIN_NAME" ]; then
586
         rm -rf "/var/www/$GNUSOCIAL_DOMAIN_NAME"
588
         rm -rf "/var/www/$GNUSOCIAL_DOMAIN_NAME"
911
 }
913
 }
912
 
914
 
913
 function install_gnusocial {
915
 function install_gnusocial {
914
-    if [ ! "$ONION_ONLY" ]; then
915
-        ONION_ONLY='no'
916
+    if [[ "$ONION_ONLY" != 'no' ]]; then
917
+        return
916
     fi
918
     fi
917
 
919
 
918
     install_gnusocial_main
920
     install_gnusocial_main
935
         sed -i 's|"theme":.*|"theme": "base16-apathy.css",|g' "/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs/static/config.json"
937
         sed -i 's|"theme":.*|"theme": "base16-apathy.css",|g' "/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs/static/config.json"
936
     fi
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
     cd "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs" || exit 236482684
942
     cd "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs" || exit 236482684
940
     php scripts/checkschema.php
943
     php scripts/checkschema.php
944
+    sh scripts/startdaemons.sh
945
+
941
     /etc/cron.hourly/gnusocial-daemons
946
     /etc/cron.hourly/gnusocial-daemons
942
 
947
 
943
     systemctl restart nginx
948
     systemctl restart nginx

+ 2
- 2
src/freedombone-app-gogs 查看文件

655
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
655
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
656
         exit 877367
656
         exit 877367
657
     fi
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
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_gogs/';
659
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_gogs/';
660
           echo 'HiddenServiceVersion 3';
660
           echo 'HiddenServiceVersion 3';
661
           echo "HiddenServicePort 80 127.0.0.1:${GIT_ONION_PORT}";
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
         echo $'Added onion site for Gogs'
663
         echo $'Added onion site for Gogs'
664
     fi
664
     fi
665
 
665
 

+ 1
- 0
src/freedombone-app-hubzilla 查看文件

30
 
30
 
31
 IN_DEFAULT_INSTALL=0
31
 IN_DEFAULT_INSTALL=0
32
 SHOW_ON_ABOUT=1
32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33
 
34
 
34
 HUBZILLA_DOMAIN_NAME=
35
 HUBZILLA_DOMAIN_NAME=
35
 HUBZILLA_CODE=
36
 HUBZILLA_CODE=

+ 1
- 0
src/freedombone-app-jitsi 查看文件

32
 
32
 
33
 IN_DEFAULT_INSTALL=0
33
 IN_DEFAULT_INSTALL=0
34
 SHOW_ON_ABOUT=0
34
 SHOW_ON_ABOUT=0
35
+NOT_ON_ONION=1
35
 
36
 
36
 VIDEOBRIDGE_PORT=5347
37
 VIDEOBRIDGE_PORT=5347
37
 JITSI_ONION_PORT=8102
38
 JITSI_ONION_PORT=8102

+ 2
- 2
src/freedombone-app-keyserver 查看文件

656
 
656
 
657
     chown debian-sks: $sksconf_file
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
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/';
660
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_sks/';
661
           echo 'HiddenServiceVersion 3';
661
           echo 'HiddenServiceVersion 3';
662
           echo "HiddenServicePort 11370 127.0.0.1:11370";
662
           echo "HiddenServicePort 11370 127.0.0.1:11370";
663
           echo "HiddenServicePort 11373 127.0.0.1:11371";
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
         echo $'Added onion site for sks'
665
         echo $'Added onion site for sks'
666
     fi
666
     fi
667
 
667
 

+ 3
- 1
src/freedombone-app-matrix 查看文件

36
 
36
 
37
 IN_DEFAULT_INSTALL=0
37
 IN_DEFAULT_INSTALL=0
38
 SHOW_ON_ABOUT=1
38
 SHOW_ON_ABOUT=1
39
+NOT_ON_ONION=1
40
+MINIMUM_RAM_MB=1500
39
 
41
 
40
 MATRIX_DOMAIN_NAME=
42
 MATRIX_DOMAIN_NAME=
41
 MATRIX_CODE=
43
 MATRIX_CODE=
702
 
704
 
703
     #MATRIX_ONION_HOSTNAME=$(add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT})
705
     #MATRIX_ONION_HOSTNAME=$(add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT})
704
     add_onion_service matrix ${MATRIX_PORT} ${MATRIX_ONION_PORT}
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
     systemctl restart tor
708
     systemctl restart tor
707
 
709
 
708
     if [ ! "${MATRIX_PASSWORD}" ]; then
710
     if [ ! "${MATRIX_PASSWORD}" ]; then

+ 110
- 3
src/freedombone-app-pleroma 查看文件

36
 PLEROMA_PORT=4000
36
 PLEROMA_PORT=4000
37
 PLEROMA_ONION_PORT=8011
37
 PLEROMA_ONION_PORT=8011
38
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
38
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
39
-PLEROMA_COMMIT='e153b364a71de431787db236c57114f229162ddf'
39
+PLEROMA_COMMIT='762f6edc29a7a48e3a663e9bedec58e0036ff363'
40
 PLEROMA_ADMIN_PASSWORD=
40
 PLEROMA_ADMIN_PASSWORD=
41
 PLEROMA_DIR=/etc/pleroma
41
 PLEROMA_DIR=/etc/pleroma
42
 PLEROMA_SECRET_KEY=""
42
 PLEROMA_SECRET_KEY=""
62
                    MY_EMAIL_ADDRESS
62
                    MY_EMAIL_ADDRESS
63
                    MY_USERNAME)
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
 function pleroma_enable_chat {
83
 function pleroma_enable_chat {
66
     if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
84
     if [[ "$1" == 't'* || "$1" == 'y'* || "$1" == 'T'* || "$1" == 'Y'* ]]; then
67
         sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
85
         sed -i 's|"chatDisabled":.*|"chatDisabled": false,|g' $PLEROMA_DIR/priv/static/static/config.json
91
       echo 'users_query="DELETE FROM users WHERE"';
109
       echo 'users_query="DELETE FROM users WHERE"';
92
       echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
110
       echo 'websub_server_subscriptions_query="DELETE FROM websub_server_subscriptions WHERE"';
93
       echo 'websub_server_subscriptions_updated=';
111
       echo 'websub_server_subscriptions_updated=';
112
+      echo 'filter_str=';
94
       echo 'while read blocked; do';
113
       echo 'while read blocked; do';
95
       echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
114
       echo "    if [[ \"\$blocked\" == *\".\"* || \"\$blocked\" == *\"@\"* ]]; then";
96
       echo "        if [ \${#blocked} -gt 4 ]; then";
115
       echo "        if [ \${#blocked} -gt 4 ]; then";
102
       echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
121
       echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"";
103
       echo '            objects_updated=1';
122
       echo '            objects_updated=1';
104
       echo "            if [[ \"\$blocked\" != *\"@\"* ]]; then";
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
       echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
131
       echo "                if ! grep -q \"127.0.0.1  \$blocked\" /etc/hosts; then";
106
       echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
132
       echo "                    echo \"127.0.0.1  \$blocked\" >> /etc/hosts";
107
       echo '                fi';
133
       echo '                fi';
115
       echo '    fi';
141
       echo '    fi';
116
       echo 'done </root/freedombone-firewall-domains.cfg';
142
       echo 'done </root/freedombone-firewall-domains.cfg';
117
       echo '';
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
       echo 'cd /etc/postgresql';
157
       echo 'cd /etc/postgresql';
119
       echo "if [ \$objects_updated ]; then";
158
       echo "if [ \$objects_updated ]; then";
120
       echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
159
       echo "    sudo -u postgres psql -d pleroma -c \"\$objects_query\"";
694
             enablechatstr=$'Disable chat system'
733
             enablechatstr=$'Disable chat system'
695
         fi
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
         W=(1 $"Set a background image"
741
         W=(1 $"Set a background image"
698
            2 $"Set the title"
742
            2 $"Set the title"
699
            3 $"Disable new account registrations"
743
            3 $"Disable new account registrations"
700
            4 $"Add a custom emoji"
744
            4 $"Add a custom emoji"
701
            5 $"Set post expiry period (currently $PLEROMA_EXPIRE_MONTHS months)"
745
            5 $"Set post expiry period (currently $PLEROMA_EXPIRE_MONTHS months)"
702
-           6 "$enablechatstr")
746
+           6 "$enablechatstr"
747
+           7 "$pleromatorstr")
703
 
748
 
704
         # shellcheck disable=SC2068
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
         if [ ! "$selection" ]; then
752
         if [ ! "$selection" ]; then
708
             break
753
             break
720
                    pleroma_enable_chat true
765
                    pleroma_enable_chat true
721
                fi
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
         esac
774
         esac
724
     done
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
 function upgrade_pleroma {
813
 function upgrade_pleroma {
728
     read_config_param PLEROMA_DOMAIN_NAME
814
     read_config_param PLEROMA_DOMAIN_NAME
729
     read_config_param PLEROMA_EXPIRE_MONTHS
815
     read_config_param PLEROMA_EXPIRE_MONTHS
730
 
816
 
817
+    pleroma_add_filtering
818
+
731
     if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
819
     if ! grep -q "/media/" /etc/cron.daily/pleroma-expire; then
732
         rm $pleroma_expire_posts_script
820
         rm $pleroma_expire_posts_script
733
     fi
821
     fi
738
         create_pleroma_blocklist
826
         create_pleroma_blocklist
739
     fi
827
     fi
740
 
828
 
829
+    #pleroma_enable_tor
830
+
741
     CURR_PLEROMA_COMMIT=$(get_completion_param "pleroma commit")
831
     CURR_PLEROMA_COMMIT=$(get_completion_param "pleroma commit")
742
     if [[ "$CURR_PLEROMA_COMMIT" == "$PLEROMA_COMMIT" ]]; then
832
     if [[ "$CURR_PLEROMA_COMMIT" == "$PLEROMA_COMMIT" ]]; then
743
         return
833
         return
748
         pleroma_registrations=
838
         pleroma_registrations=
749
     fi
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
     # make a copy of the configuration
846
     # make a copy of the configuration
752
     cp $PLEROMA_DIR/priv/static/static/config.json $PLEROMA_DIR/priv/static/static/config_prev.json
847
     cp $PLEROMA_DIR/priv/static/static/config.json $PLEROMA_DIR/priv/static/static/config_prev.json
753
 
848
 
780
         sed -i 's|registrations_open: True|registrations_open: false|g' $PLEROMA_DIR/config/config.exs
875
         sed -i 's|registrations_open: True|registrations_open: false|g' $PLEROMA_DIR/config/config.exs
781
     fi
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
     pleroma_recompile
884
     pleroma_recompile
784
 
885
 
785
     # migrate database
886
     # migrate database
1252
     sed -i 's|redirect_on_failure:.*|redirect_on_failure: false|g' $PLEROMA_DIR/config/config.exs
1353
     sed -i 's|redirect_on_failure:.*|redirect_on_failure: false|g' $PLEROMA_DIR/config/config.exs
1253
     sed -i 's|:chat, enabled:.*|:chat, enabled: false|g' $PLEROMA_DIR/config/config.exs
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
     # set registrations open initially
1360
     # set registrations open initially
1256
     sed -i 's|registrations_open:.*|registrations_open: true,|g' $PLEROMA_DIR/config/config.exs
1361
     sed -i 's|registrations_open:.*|registrations_open: true,|g' $PLEROMA_DIR/config/config.exs
1257
     sed -i 's|"registrationOpen":.*|"registrationOpen": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1362
     sed -i 's|"registrationOpen":.*|"registrationOpen": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1264
     fi
1369
     fi
1265
     sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1370
     sed -i 's|"chatDisabled":.*|"chatDisabled": true,|g' $PLEROMA_DIR/priv/static/static/config.json
1266
 
1371
 
1372
+    pleroma_add_filtering
1373
+
1267
     systemctl daemon-reload
1374
     systemctl daemon-reload
1268
     systemctl enable pleroma
1375
     systemctl enable pleroma
1269
     systemctl start pleroma
1376
     systemctl start pleroma

+ 14
- 7
src/freedombone-app-postactiv 查看文件

30
 
30
 
31
 IN_DEFAULT_INSTALL=0
31
 IN_DEFAULT_INSTALL=0
32
 SHOW_ON_ABOUT=1
32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33
 
34
 
34
 POSTACTIV_DOMAIN_NAME=
35
 POSTACTIV_DOMAIN_NAME=
35
 POSTACTIV_CODE=
36
 POSTACTIV_CODE=
65
     domain_name=$1
66
     domain_name=$1
66
 
67
 
67
     if [ -f "/var/www/${domain_name}/htdocs/static/logo.png" ]; then
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
         else
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
             fi
74
             fi
74
         fi
75
         fi
75
     fi
76
     fi
595
     fi
596
     fi
596
     kill_pid=$(pgrep "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
597
     kill_pid=$(pgrep "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs/scripts/queuedaemon.php" | head -n 1)
597
     kill -9 "$kill_pid"
598
     kill -9 "$kill_pid"
599
+    pkill "$POSTACTIV_DOMAIN_NAME/htdocs/scripts/queuedaemon.php"
598
 
600
 
599
     if [ -d "/var/www/$POSTACTIV_DOMAIN_NAME" ]; then
601
     if [ -d "/var/www/$POSTACTIV_DOMAIN_NAME" ]; then
600
         rm -rf "/var/www/$POSTACTIV_DOMAIN_NAME"
602
         rm -rf "/var/www/$POSTACTIV_DOMAIN_NAME"
926
 }
928
 }
927
 
929
 
928
 function install_postactiv {
930
 function install_postactiv {
929
-    if [ ! "$ONION_ONLY" ]; then
930
-        ONION_ONLY='no'
931
+    if [[ "$ONION_ONLY" != 'no' ]]; then
932
+        return
931
     fi
933
     fi
932
 
934
 
933
     install_postactiv_main
935
     install_postactiv_main
952
 
954
 
953
     expire_gnusocial_posts "$POSTACTIV_DOMAIN_NAME" "postactiv" "$POSTACTIV_EXPIRE_MONTHS"
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
     /etc/cron.hourly/postactiv-daemons
963
     /etc/cron.hourly/postactiv-daemons
957
 
964
 
958
     systemctl restart nginx
965
     systemctl restart nginx

+ 1
- 0
src/freedombone-app-riot 查看文件

30
 
30
 
31
 IN_DEFAULT_INSTALL=0
31
 IN_DEFAULT_INSTALL=0
32
 SHOW_ON_ABOUT=1
32
 SHOW_ON_ABOUT=1
33
+NOT_ON_ONION=1
33
 
34
 
34
 RIOT_VERSION='0.13.3'
35
 RIOT_VERSION='0.13.3'
35
 RIOT_FILENAME="riot-v${RIOT_VERSION}"
36
 RIOT_FILENAME="riot-v${RIOT_VERSION}"

+ 1
- 0
src/freedombone-app-scuttlebot 查看文件

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

+ 8
- 6
src/freedombone-app-searx 查看文件

35
 SEARX_REPO="https://github.com/asciimoo/searx"
35
 SEARX_REPO="https://github.com/asciimoo/searx"
36
 SEARX_COMMIT='80460be8f69cea5f15c9d5ddbb63e4e48fde2dd0'
36
 SEARX_COMMIT='80460be8f69cea5f15c9d5ddbb63e4e48fde2dd0'
37
 SEARX_PATH=/etc
37
 SEARX_PATH=/etc
38
+SEARX_PORT=8888
38
 SEARX_ONION_PORT=8094
39
 SEARX_ONION_PORT=8094
39
 SEARX_ONION_HOSTNAME=
40
 SEARX_ONION_HOSTNAME=
40
 SEARX_LOGIN_TEXT=$"Search engine login"
41
 SEARX_LOGIN_TEXT=$"Search engine login"
55
 }
56
 }
56
 
57
 
57
 function searx_set_default_background {
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
         chown -R searx:searx ${SEARX_PATH}/searx
61
         chown -R searx:searx ${SEARX_PATH}/searx
61
     else
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
             chown -R searx:searx ${SEARX_PATH}/searx
65
             chown -R searx:searx ${SEARX_PATH}/searx
65
         fi
66
         fi
66
     fi
67
     fi
258
       echo '    language : "all"';
259
       echo '    language : "all"';
259
       echo '';
260
       echo '';
260
       echo 'server:';
261
       echo 'server:';
261
-      echo '    port : 8888';
262
+      echo "    port : ${SEARX_PORT}";
262
       echo '    bind_address : "127.0.0.1" # address to listen on';
263
       echo '    bind_address : "127.0.0.1" # address to listen on';
263
       echo "    secret_key : \"${SEARX_SECRET_KEY}\"";
264
       echo "    secret_key : \"${SEARX_SECRET_KEY}\"";
264
       echo "    base_url : http://${SEARX_ONION_HOSTNAME}/";
265
       echo "    base_url : http://${SEARX_ONION_HOSTNAME}/";
926
     set_completion_param "searx commit" "$SEARX_COMMIT"
927
     set_completion_param "searx commit" "$SEARX_COMMIT"
927
 
928
 
928
     # create an onion service
929
     # create an onion service
930
+    USE_V2_ONION_ADDRESS=1
929
     SEARX_ONION_HOSTNAME=$(add_onion_service searx 80 ${SEARX_ONION_PORT})
931
     SEARX_ONION_HOSTNAME=$(add_onion_service searx 80 ${SEARX_ONION_PORT})
930
 
932
 
931
     # an unprivileged user to run as
933
     # an unprivileged user to run as
965
       echo '    location / {'; } >> /etc/nginx/sites-available/searx
967
       echo '    location / {'; } >> /etc/nginx/sites-available/searx
966
     function_check nginx_limits
968
     function_check nginx_limits
967
     nginx_limits searx '1M'
969
     nginx_limits searx '1M'
968
-    { echo '        proxy_pass http://localhost:8888;';
970
+    { echo "        proxy_pass http://localhost:${SEARX_PORT};";
969
       echo "        #auth_basic \"${SEARX_LOGIN_TEXT}\";";
971
       echo "        #auth_basic \"${SEARX_LOGIN_TEXT}\";";
970
       echo '        #auth_basic_user_file /etc/nginx/.htpasswd;';
972
       echo '        #auth_basic_user_file /etc/nginx/.htpasswd;';
971
       echo '    }';
973
       echo '    }';

+ 30
- 16
src/freedombone-app-tox 查看文件

35
 
35
 
36
 # upstream is https://github.com/TokTok/c-toxcore
36
 # upstream is https://github.com/TokTok/c-toxcore
37
 TOXCORE_REPO="https://github.com/bashrc/toxcore"
37
 TOXCORE_REPO="https://github.com/bashrc/toxcore"
38
-TOXCORE_COMMIT='987ad5eac173442d6ad2d5cd80c2da763a815a9a'
38
+TOXCORE_COMMIT='7d399cedcfd20f0d91a8caf386ae3c63f4dcf285'
39
 
39
 
40
 TOXID_REPO="https://github.com/bashrc/toxid"
40
 TOXID_REPO="https://github.com/bashrc/toxid"
41
 TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
41
 TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
47
 #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
47
 #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
48
 #)
48
 #)
49
 TOXIC_REPO="https://github.com/Tox/toxic"
49
 TOXIC_REPO="https://github.com/Tox/toxic"
50
-TOXIC_COMMIT='5cc83a7cb584886d90d7da15e8398215fed0d315'
50
+TOXIC_COMMIT='68ce17a57fd05599968a299e5dc516e183ebcf75'
51
 TOXIC_FILE=/usr/local/bin/toxic
51
 TOXIC_FILE=/usr/local/bin/toxic
52
 
52
 
53
 QTOX_REPO="https://github.com/bashrc/qTox"
53
 QTOX_REPO="https://github.com/bashrc/qTox"
184
     if [[ $(commit_has_changed "$INSTALL_DIR/toxcore" "toxcore commit" "$TOXCORE_COMMIT") == "1" ]]; then
184
     if [[ $(commit_has_changed "$INSTALL_DIR/toxcore" "toxcore commit" "$TOXCORE_COMMIT") == "1" ]]; then
185
         cd "$INSTALL_DIR/toxcore" || exit 53683563
185
         cd "$INSTALL_DIR/toxcore" || exit 53683563
186
         sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/tox-bootstrapd --config /etc/tox-bootstrapd.conf|g' "$rootdir/etc/systemd/system/tox-bootstrapd.service"
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
         make
193
         make
190
         make install
194
         make install
191
         systemctl daemon-reload
195
         systemctl daemon-reload
426
 }
430
 }
427
 
431
 
428
 function mesh_tox_node {
432
 function mesh_tox_node {
433
+    SECONDS=0
429
     # obtain commits from the main file
434
     # obtain commits from the main file
430
     TOXCORE_COMMIT_MAIN=$(grep "TOXCORE_COMMIT=" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-tox" | head -n 1 | awk -F "'" '{print $2}')
435
     TOXCORE_COMMIT_MAIN=$(grep "TOXCORE_COMMIT=" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-tox" | head -n 1 | awk -F "'" '{print $2}')
431
     if [ ${#TOXCORE_COMMIT_MAIN} -gt 10 ]; then
436
     if [ ${#TOXCORE_COMMIT_MAIN} -gt 10 ]; then
478
         chroot "${rootdir}" apt-get -yq install automake checkinstall check git yasm
483
         chroot "${rootdir}" apt-get -yq install automake checkinstall check git yasm
479
         chroot "${rootdir}" apt-get -yq install libsodium18 libsodium-dev libcap2-bin
484
         chroot "${rootdir}" apt-get -yq install libsodium18 libsodium-dev libcap2-bin
480
         chroot "${rootdir}" apt-get -yq install libconfig9 libconfig-dev autoconf
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
     else
487
     else
483
         apt-get -yq install build-essential libtool autotools-dev
488
         apt-get -yq install build-essential libtool autotools-dev
484
         apt-get -yq install automake checkinstall check git yasm
489
         apt-get -yq install automake checkinstall check git yasm
485
         apt-get -yq install libsodium18 libsodium-dev libcap2-bin
490
         apt-get -yq install libsodium18 libsodium-dev libcap2-bin
486
         apt-get -yq install libconfig9 libconfig-dev autoconf
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
     fi
493
     fi
489
 
494
 
490
     if [ ! -d "${rootdir}${INSTALL_DIR}" ]; then
495
     if [ ! -d "${rootdir}${INSTALL_DIR}" ]; then
508
     if [ "${rootdir}" ]; then
513
     if [ "${rootdir}" ]; then
509
         chroot "${rootdir}" /bin/bash -x <<EOF
514
         chroot "${rootdir}" /bin/bash -x <<EOF
510
 cd ${INSTALL_DIR}/toxcore
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
 make
520
 make
514
 make install
521
 make install
515
 EOF
522
 EOF
516
     else
523
     else
517
         /bin/bash -x <<EOF
524
         /bin/bash -x <<EOF
518
 cd ${INSTALL_DIR}/toxcore
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
 make
530
 make
522
 make install
531
 make install
523
 EOF
532
 EOF
524
     fi
533
     fi
525
 
534
 
526
     # shellcheck disable=SC2086
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
     cp "${rootdir}${INSTALL_DIR}/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" "$rootdir/etc/systemd/system/"
537
     cp "${rootdir}${INSTALL_DIR}/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" "$rootdir/etc/systemd/system/"
529
     sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/tox-bootstrapd --config /etc/tox-bootstrapd.conf|g' "$rootdir/etc/systemd/system/tox-bootstrapd.service"
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
     if [ "${rootdir}" ]; then
539
     if [ "${rootdir}" ]; then
533
         systemctl enable tox-bootstrapd.service
542
         systemctl enable tox-bootstrapd.service
534
     fi
543
     fi
535
 
544
 
536
-    SECONDS=0
537
     if [ ! -f "$rootdir/usr/local/bin/tox-bootstrapd" ]; then
545
     if [ ! -f "$rootdir/usr/local/bin/tox-bootstrapd" ]; then
538
         duration=$SECONDS
546
         duration=$SECONDS
539
         echo $"Toxcore compile failed at $((duration / 60)) minutes and $((duration % 60)) seconds elapsed."
547
         echo $"Toxcore compile failed at $((duration / 60)) minutes and $((duration % 60)) seconds elapsed."
690
     if [ "${rootdir}" ]; then
698
     if [ "${rootdir}" ]; then
691
         chroot "${rootdir}" apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
699
         chroot "${rootdir}" apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
692
         chroot "${rootdir}" apt-get -yq install libcurl4-openssl-dev libvpx-dev libopenal-dev
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
     else
704
     else
695
         apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
705
         apt-get -yq install libncursesw5-dev libconfig-dev libqrencode-dev
696
         apt-get -yq install libcurl4-openssl-dev libvpx-dev libopenal-dev
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
     fi
709
     fi
699
 
710
 
700
     TEMP_SCRIPT_NAME=fbtmp728353.sh
711
     TEMP_SCRIPT_NAME=fbtmp728353.sh
711
       echo 'fi';
722
       echo 'fi';
712
       echo "cd $INSTALL_DIR/toxic";
723
       echo "cd $INSTALL_DIR/toxic";
713
       echo "git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT";
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
       echo '    exit 1';
730
       echo '    exit 1';
717
       echo 'fi';
731
       echo 'fi';
718
       echo 'make install';
732
       echo 'make install';

+ 59
- 7
src/freedombone-app-xmpp 查看文件

51
 # From https://hg.prosody.im/prosody-modules
51
 # From https://hg.prosody.im/prosody-modules
52
 prosody_modules_filename='prosody-modules-20180322.tar.gz'
52
 prosody_modules_filename='prosody-modules-20180322.tar.gz'
53
 prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072'
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
 xmpp_variables=(ONION_ONLY
56
 xmpp_variables=(ONION_ONLY
56
                 INSTALLED_WITHIN_DOCKER
57
                 INSTALLED_WITHIN_DOCKER
62
                 DEFAULT_DOMAIN_NAME
63
                 DEFAULT_DOMAIN_NAME
63
                 XMPP_DOMAIN_CODE)
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
 function logging_on_xmpp {
97
 function logging_on_xmpp {
66
     if [ -d /etc/prosody ]; then
98
     if [ -d /etc/prosody ]; then
67
         if [ ! -d /var/log/prosody ]; then
99
         if [ ! -d /var/log/prosody ]; then
345
 
377
 
346
     if [ ! -f "$INSTALL_DIR/$prosody_modules_filename" ]; then
378
     if [ ! -f "$INSTALL_DIR/$prosody_modules_filename" ]; then
347
         # Obtain the modules
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
         else
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
             fi
385
             fi
354
         fi
386
         fi
355
 
387
 
425
             usermod -a -G ssl-cert prosody
457
             usermod -a -G ssl-cert prosody
426
         fi
458
         fi
427
     fi
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
     prosody_daemon_restart_script
464
     prosody_daemon_restart_script
429
     function_check update_prosody_modules
465
     function_check update_prosody_modules
430
     update_prosody_modules
466
     update_prosody_modules
608
 
644
 
609
     function_check remove_onion_service
645
     function_check remove_onion_service
610
     remove_onion_service xmpp 5222 5223 5269
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
     apt-mark -q unhold prosody
649
     apt-mark -q unhold prosody
614
     apt-get -yq remove --purge prosody
650
     apt-get -yq remove --purge prosody
818
     else
854
     else
819
         echo "    dhparam = \"/etc/ssl/certs/xmpp.dhparam\";" >> /etc/prosody/prosody.cfg.lua
855
         echo "    dhparam = \"/etc/ssl/certs/xmpp.dhparam\";" >> /etc/prosody/prosody.cfg.lua
820
     fi
856
     fi
857
+
821
     { echo '}';
858
     { echo '}';
822
       echo '';
859
       echo '';
823
       echo 'c2s_require_encryption = true';
860
       echo 'c2s_require_encryption = true';
824
       echo 's2s_require_encryption = true';
861
       echo 's2s_require_encryption = true';
825
       echo '';
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
       echo 's2s_secure_auth = false';
867
       echo 's2s_secure_auth = false';
827
       echo '';
868
       echo '';
828
       echo 'authentication = "internal_hashed"';
869
       echo 'authentication = "internal_hashed"';
838
       echo ''; } >> /etc/prosody/prosody.cfg.lua
879
       echo ''; } >> /etc/prosody/prosody.cfg.lua
839
     if [[ "$ONION_ONLY" != 'no' ]]; then
880
     if [[ "$ONION_ONLY" != 'no' ]]; then
840
         echo "VirtualHost \"${XMPP_ONION_HOSTNAME}\"" >> /etc/prosody/prosody.cfg.lua
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
     else
885
     else
842
         echo "VirtualHost \"${DEFAULT_DOMAIN_NAME}\"" >> /etc/prosody/prosody.cfg.lua
886
         echo "VirtualHost \"${DEFAULT_DOMAIN_NAME}\"" >> /etc/prosody/prosody.cfg.lua
843
     fi
887
     fi
1068
     else
1112
     else
1069
         sed -i 's|s2s_require_encryption.*|s2s_require_encryption = true|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1113
         sed -i 's|s2s_require_encryption.*|s2s_require_encryption = true|g' /etc/prosody/conf.avail/xmpp.cfg.lua
1070
     fi
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
     if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/conf.avail/xmpp.cfg.lua; then
1123
     if ! grep -q "allow_unencrypted_plain_auth" /etc/prosody/conf.avail/xmpp.cfg.lua; then
1072
         echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
1124
         echo 'allow_unencrypted_plain_auth = false' >> /etc/prosody/conf.avail/xmpp.cfg.lua
1073
     else
1125
     else
1079
         echo $'No Tor installation found. xmpp onion site cannot be configured.'
1131
         echo $'No Tor installation found. xmpp onion site cannot be configured.'
1080
         exit 877367
1132
         exit 877367
1081
     fi
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
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_xmpp/';
1135
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_xmpp/';
1084
           echo 'HiddenServiceVersion 2';
1136
           echo 'HiddenServiceVersion 2';
1085
           echo "HiddenServicePort 5222 127.0.0.1:5222";
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
         echo $'Added onion site for xmpp chat'
1139
         echo $'Added onion site for xmpp chat'
1088
     fi
1140
     fi
1089
 
1141
 

+ 5
- 22
src/freedombone-base-email 查看文件

224
 
224
 
225
 function create_email_onion_address {
225
 function create_email_onion_address {
226
     email_hostname='/var/lib/tor/hidden_service_email/hostname'
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
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_email/';
228
         { echo 'HiddenServiceDir /var/lib/tor/hidden_service_email/';
229
           echo 'HiddenServiceVersion 3';
229
           echo 'HiddenServiceVersion 3';
230
           echo 'HiddenServicePort 25 127.0.0.1:25';
230
           echo 'HiddenServicePort 25 127.0.0.1:25';
231
           echo 'HiddenServicePort 587 127.0.0.1:587';
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
         function_check onion_update
234
         function_check onion_update
235
         onion_update
235
         onion_update
320
       echo "  hosts_avoid_tls = *";
320
       echo "  hosts_avoid_tls = *";
321
       echo "  socks_proxy = 127.0.0.1 port=9050"; } > /etc/exim4/conf.d/transport/050_exim4-config_onion_relay
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
     update-exim4.conf.template -r
327
     update-exim4.conf.template -r
345
     update-exim4.conf
328
     update-exim4.conf

+ 1
- 1
src/freedombone-config 查看文件

138
     echo ''
138
     echo ''
139
     echo ''
139
     echo ''
140
     echo $'  -h --help                         Show help'
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
     echo $'  -m --min                          Minimum password length (characters)'
142
     echo $'  -m --min                          Minimum password length (characters)'
143
     echo $'  -w --www                          Freedombone web site'
143
     echo $'  -w --www                          Freedombone web site'
144
     echo $'  -o --onion [yes|no]               Whether to only create .onion sites'
144
     echo $'  -o --onion [yes|no]               Whether to only create .onion sites'

+ 153
- 114
src/freedombone-controlpanel 查看文件

224
 function show_domains {
224
 function show_domains {
225
     read_config_param "DEFAULT_DOMAIN_NAME"
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
                 fi
282
                 fi
274
             fi
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
                     icann_address='-'
288
                     icann_address='-'
285
                 fi
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
                 fi
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
                 if [[ "${icann_address}" != '-' ]]; then
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
                 else
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
                 fi
317
                 fi
309
             fi
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
         fi
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
 function show_users {
376
 function show_users {
362
     echo ''
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
 function show_about {
410
 function show_about {
388
     detect_apps
411
     detect_apps
389
     get_apps_installed_names
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
     show_domains
413
     show_domains
397
-    #show_users
398
-    #any_key
399
 }
414
 }
400
 
415
 
401
 function select_user {
416
 function select_user {
1817
     "${PROJECT_NAME}-wifi" --disable $disable_wifi
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
 function add_clacks {
1857
 function add_clacks {
1821
     clacks=
1858
     clacks=
1822
 
1859
 
1943
            12 $"Wifi menu"
1980
            12 $"Wifi menu"
1944
            13 $"Add Clacks"
1981
            13 $"Add Clacks"
1945
            14 $"Check for updates"
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
         # shellcheck disable=SC2068
1987
         # shellcheck disable=SC2068
1950
         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)
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
             12) menu_wifi;;
2011
             12) menu_wifi;;
1974
             13) add_clacks;;
2012
             13) add_clacks;;
1975
             14) check_for_updates;;
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
         esac
2017
         esac
1979
     done
2018
     done
1980
 }
2019
 }

+ 4
- 0
src/freedombone-controlpanel-user 查看文件

434
     dialog --title $"My PGP/GPG Key" \
434
     dialog --title $"My PGP/GPG Key" \
435
            --backtitle $"Freedombone User Control Panel" \
435
            --backtitle $"Freedombone User Control Panel" \
436
            --msgbox $"Email Address: $MY_EMAIL_ADDRESS\\n\\nKey ID: $GPG_ID\\n\\nFingerprint: $GPG_FINGERPRINT\\n\\nCreated: $GPG_DATE" 12 70
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
 function show_full_gpg_key {
443
 function show_full_gpg_key {

+ 25
- 5
src/freedombone-image 查看文件

74
 USERNAME="$USER"
74
 USERNAME="$USER"
75
 PASSWORD=
75
 PASSWORD=
76
 
76
 
77
+CONTINUOUS_INTEGRATION=
78
+
77
 # IP address of the router (gateway)
79
 # IP address of the router (gateway)
78
 ROUTER_IP_ADDRESS="192.168.1.254"
80
 ROUTER_IP_ADDRESS="192.168.1.254"
79
 
81
 
153
 MBR_REPO="https://aur.archlinux.org/mbr.git"
155
 MBR_REPO="https://aur.archlinux.org/mbr.git"
154
 CLIAPP_REPO="git://git.liw.fi/cliapp"
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
 function image_setup {
162
 function image_setup {
157
     setup_type=$1
163
     setup_type=$1
158
 
164
 
240
             cd "$USERHOME/develop/multipath-tools" || exit 27462454
246
             cd "$USERHOME/develop/multipath-tools" || exit 27462454
241
             makepkg --force --noconfirm
247
             makepkg --force --noconfirm
242
             makepkg -i --force --noconfirm
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
             sudo cp -f "/usr/share/debootstrap/scripts/debscript" "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}"
250
             sudo cp -f "/usr/share/debootstrap/scripts/debscript" "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}"
245
             if [ ! -f "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}" ]; then
251
             if [ ! -f "/usr/share/debootstrap/scripts/${DEBIAN_VERSION}" ]; then
246
                 echo $"No debian debootstrap script was found for $DEBIAN_VERSION"
252
                 echo $"No debian debootstrap script was found for $DEBIAN_VERSION"
374
             shift
380
             shift
375
             INTERACTIVE="$1"
381
             INTERACTIVE="$1"
376
             ;;
382
             ;;
383
+        --ci)
384
+            shift
385
+            CONTINUOUS_INTEGRATION="$1"
386
+            ;;
377
         -g|--generic)
387
         -g|--generic)
378
             shift
388
             shift
379
             GENERIC_IMAGE="$1"
389
             GENERIC_IMAGE="$1"
453
             shift
463
             shift
454
             LOCAL_NAME="$1"
464
             LOCAL_NAME="$1"
455
             ;;
465
             ;;
466
+        --sata|--hdd)
467
+            shift
468
+            EXTERNAL_DRIVE="$1"
469
+            ;;
456
         *)
470
         *)
457
             # unknown option
471
             # unknown option
458
             ;;
472
             ;;
533
     IMAGE_NAME=$'onion'
547
     IMAGE_NAME=$'onion'
534
 fi
548
 fi
535
 
549
 
550
+if [ "$EXTERNAL_DRIVE" ]; then
551
+    IMAGE_NAME=$'sata'
552
+fi
553
+
536
 if [[ $VARIANT == 'mesh' ]]; then
554
 if [[ $VARIANT == 'mesh' ]]; then
537
     IMAGE_NAME=$'mesh'
555
     IMAGE_NAME=$'mesh'
538
     # typically not much disk space is needed for a mesh node
556
     # typically not much disk space is needed for a mesh node
601
      INSECURE="$INSECURE" \
619
      INSECURE="$INSECURE" \
602
      AMNESIC="$AMNESIC" \
620
      AMNESIC="$AMNESIC" \
603
      SOCIALINSTANCE="$SOCIALINSTANCE" \
621
      SOCIALINSTANCE="$SOCIALINSTANCE" \
622
+     EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \
623
+     CONTINUOUS_INTEGRATION="$CONTINUOUS_INTEGRATION" \
604
      LOCAL_NAME="$LOCAL_NAME"
624
      LOCAL_NAME="$LOCAL_NAME"
605
 
625
 
606
 # shellcheck disable=SC2181
626
 # shellcheck disable=SC2181
628
 for im in ${image_types[@]}
648
 for im in ${image_types[@]}
629
 do
649
 do
630
     # shellcheck disable=SC2012,SC2086
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
         # shellcheck disable=SC2086
653
         # shellcheck disable=SC2086
634
         mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
654
         mv build/${PROJECT_NAME}*.${im} ${CURR_DIR}/
635
         # shellcheck disable=SC2086
655
         # shellcheck disable=SC2086
698
     fi
718
     fi
699
     echo ''
719
     echo ''
700
     echo "    unxz -k ${PROJECT_NAME}*.img.xz"
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
     echo ''
723
     echo ''
704
 fi
724
 fi
705
 
725
 

+ 12
- 6
src/freedombone-image-customise 查看文件

139
 BMX7_REPO="https://github.com/bmx-routing/bmx7"
139
 BMX7_REPO="https://github.com/bmx-routing/bmx7"
140
 BMX7_COMMIT='0a82c7c10fef44b259b35e77ab33632aa132d219'
140
 BMX7_COMMIT='0a82c7c10fef44b259b35e77ab33632aa132d219'
141
 
141
 
142
+CONTINUOUS_INTEGRATION=
143
+
142
 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
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
 configure_backports() {
150
 configure_backports() {
145
     echo "deb http://${DEBIAN_REPO}/debian/ ${DEBIAN_VERSION}-backports main" >> "$rootdir/etc/apt/sources.list"
151
     echo "deb http://${DEBIAN_REPO}/debian/ ${DEBIAN_VERSION}-backports main" >> "$rootdir/etc/apt/sources.list"
146
 }
152
 }
437
       echo "                    echo 'User=root' >> /etc/systemd/system/wifistart.service";
443
       echo "                    echo 'User=root' >> /etc/systemd/system/wifistart.service";
438
       echo "                    echo 'Group=root' >> /etc/systemd/system/wifistart.service";
444
       echo "                    echo 'Group=root' >> /etc/systemd/system/wifistart.service";
439
       echo "                    echo 'WorkingDirectory=/root' >> /etc/systemd/system/wifistart.service";
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
       echo "                    echo '' >> /etc/systemd/system/wifistart.service";
447
       echo "                    echo '' >> /etc/systemd/system/wifistart.service";
442
       echo "                    echo '[Install]' >> /etc/systemd/system/wifistart.service";
448
       echo "                    echo '[Install]' >> /etc/systemd/system/wifistart.service";
443
       echo "                    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/wifistart.service";
449
       echo "                    echo 'WantedBy=multi-user.target' >> /etc/systemd/system/wifistart.service";
483
 }
489
 }
484
 
490
 
485
 atheros_wifi() {
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
     chroot "$rootdir" apt-get -yq install firmware-linux-free
493
     chroot "$rootdir" apt-get -yq install firmware-linux-free
488
 }
494
 }
489
 
495
 
1526
             echo 'Comment[it]=Crea un invito per patchwork' >> /home/$MY_USERNAME/Desktop/invite.desktop
1532
             echo 'Comment[it]=Crea un invito per patchwork' >> /home/$MY_USERNAME/Desktop/invite.desktop
1527
             echo 'Comment[ru]=    ' >> /home/$MY_USERNAME/Desktop/invite.desktop
1533
             echo 'Comment[ru]=    ' >> /home/$MY_USERNAME/Desktop/invite.desktop
1528
             echo 'Comment[zh]=' >> /home/$MY_USERNAME/Desktop/invite.desktop
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
             echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_invite.png' >> /home/$MY_USERNAME/Desktop/invite.desktop
1536
             echo 'Icon=/usr/share/$PROJECT_NAME/avatars/icon_invite.png' >> /home/$MY_USERNAME/Desktop/invite.desktop
1531
             echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/invite.desktop
1537
             echo 'Terminal=false' >> /home/$MY_USERNAME/Desktop/invite.desktop
1532
             echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/invite.desktop
1538
             echo 'Categories=Application;' >> /home/$MY_USERNAME/Desktop/invite.desktop
1719
     chroot "$rootdir" apt-get -yq dist-upgrade
1725
     chroot "$rootdir" apt-get -yq dist-upgrade
1720
     chroot "$rootdir" apt-get -yq install ca-certificates
1726
     chroot "$rootdir" apt-get -yq install ca-certificates
1721
     chroot "$rootdir" apt-get -yq install apt-utils
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
     if [[ "$ARCHITECTURE" == 'amd64' ]]; then
1730
     if [[ "$ARCHITECTURE" == 'amd64' ]]; then
1725
         chroot "$rootdir" apt-get -yq install linux-image-amd64
1731
         chroot "$rootdir" apt-get -yq install linux-image-amd64
1762
     chroot "$rootdir" apt-get -yq -t stretch-backports install tor
1768
     chroot "$rootdir" apt-get -yq -t stretch-backports install tor
1763
     chroot "$rootdir" apt-get -yq install connect-proxy
1769
     chroot "$rootdir" apt-get -yq install connect-proxy
1764
     chroot "$rootdir" connect-proxy
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
     sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1773
     sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1768
     sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1774
     sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" "$rootdir/etc/tor/torrc"
1769
     if ! grep -q 'Host *.onion' "$rootdir/root/.ssh/config"; then
1775
     if ! grep -q 'Host *.onion' "$rootdir/root/.ssh/config"; then

+ 11
- 7
src/freedombone-image-hardware-setup 查看文件

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

+ 6
- 1
src/freedombone-image-make 查看文件

77
 export AMNESIC
77
 export AMNESIC
78
 export SOCIALINSTANCE
78
 export SOCIALINSTANCE
79
 export LOCAL_NAME
79
 export LOCAL_NAME
80
+export EXTERNAL_DRIVE
81
+export CONTINUOUS_INTEGRATION
80
 
82
 
81
 # Locate vmdebootstrap program fetched in Makefile
83
 # Locate vmdebootstrap program fetched in Makefile
82
 basedir=`pwd`
84
 basedir=`pwd`
101
 # Packages needed for self-hosted development
103
 # Packages needed for self-hosted development
102
 dev_pkgs="build-essential devscripts make man-db emacs org-mode git mercurial"
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
 case "$MACHINE" in
108
 case "$MACHINE" in
107
     beaglebone)
109
     beaglebone)
225
 sed -i "s|AMNESIC=.*|AMNESIC=\"${AMNESIC}\"|g" "$TEMP_CUSTOMISE3"
227
 sed -i "s|AMNESIC=.*|AMNESIC=\"${AMNESIC}\"|g" "$TEMP_CUSTOMISE3"
226
 sed -i "s|SOCIALINSTANCE=.*|SOCIALINSTANCE=\"${SOCIALINSTANCE}\"|g" "$TEMP_CUSTOMISE3"
228
 sed -i "s|SOCIALINSTANCE=.*|SOCIALINSTANCE=\"${SOCIALINSTANCE}\"|g" "$TEMP_CUSTOMISE3"
227
 sed -i "s|LOCAL_NAME=.*|LOCAL_NAME=\"${LOCAL_NAME}\"|g" "$TEMP_CUSTOMISE3"
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
 sed -i 's|#!/bin/bash||g' "$TEMP_CUSTOMISE3"
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
 cat $TEMP_CUSTOMISE2 $TEMP_CUSTOMISE3 > $TEMP_CUSTOMISE4
234
 cat $TEMP_CUSTOMISE2 $TEMP_CUSTOMISE3 > $TEMP_CUSTOMISE4
231
 if [ -f $TEMP_CUSTOMISE ]; then
235
 if [ -f $TEMP_CUSTOMISE ]; then
254
      ARCHITECTURE="$ARCHITECTURE" \
258
      ARCHITECTURE="$ARCHITECTURE" \
255
      SOURCE="$SOURCE" \
259
      SOURCE="$SOURCE" \
256
      CUSTOM_SETUP="$CUSTOM_SETUP" \
260
      CUSTOM_SETUP="$CUSTOM_SETUP" \
261
+     EXTERNAL_DRIVE="$EXTERNAL_DRIVE" \
257
      $VMDEBOOTSTRAP \
262
      $VMDEBOOTSTRAP \
258
      --log "$(dirname "$IMAGE")/${PROJECT_NAME}.log" \
263
      --log "$(dirname "$IMAGE")/${PROJECT_NAME}.log" \
259
      --log-level debug \
264
      --log-level debug \

+ 20
- 15
src/freedombone-image-makefile 查看文件

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

+ 1
- 1
src/freedombone-image-vmdebootstrap 查看文件

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

+ 32
- 47
src/freedombone-logging 查看文件

90
     done
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
 function turn_on_rsys_logging {
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
 if [ ! "$1" ]; then
120
 if [ ! "$1" ]; then
150
             touch /var/log/tor/notices.log
133
             touch /var/log/tor/notices.log
151
             chown debian-tor:adm /var/log/tor/notices.log
134
             chown debian-tor:adm /var/log/tor/notices.log
152
         fi
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
     fi
137
     fi
156
     if [ -f /etc/php/7.0/fpm/php-fpm.conf ]; then
138
     if [ -f /etc/php/7.0/fpm/php-fpm.conf ]; then
157
         sed -i 's|error_log =.*|error_log = /var/log/php-fpm.log|g' /etc/php/7.0/fpm/php-fpm.conf
139
         sed -i 's|error_log =.*|error_log = /var/log/php-fpm.log|g' /etc/php/7.0/fpm/php-fpm.conf
193
         fi
175
         fi
194
     fi
176
     fi
195
     turn_on_rsys_logging
177
     turn_on_rsys_logging
178
+    turn_on_postgresql_logging
196
 else
179
 else
197
     turn_logging_off
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
     fi
184
     fi
204
     if [ -d /var/log/radicale ]; then
185
     if [ -d /var/log/radicale ]; then
205
         $REMOVE_FILES_COMMAND /var/log/radicale/*
186
         $REMOVE_FILES_COMMAND /var/log/radicale/*
250
         fi
231
         fi
251
     fi
232
     fi
252
     turn_off_rsys_logging
233
     turn_off_rsys_logging
234
+    turn_off_postgresql_logging
253
 fi
235
 fi
254
 
236
 
255
 if [ -d /etc/exim4 ]; then
237
 if [ -d /etc/exim4 ]; then
295
 if [ -d /etc/matrix ]; then
277
 if [ -d /etc/matrix ]; then
296
     systemctl restart matrix
278
     systemctl restart matrix
297
 fi
279
 fi
280
+if [ -d /etc/postgresql ]; then
281
+    systemctl restart postgresql
282
+fi
298
 
283
 
299
 exit 0
284
 exit 0

+ 1
- 1
src/freedombone-mesh-blog 查看文件

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

+ 3
- 3
src/freedombone-prepare-scripts 查看文件

30
 
30
 
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
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
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/control
37
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/control
38
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/controluser
38
 sed -i '/# Start including files/,/# End including files/d' /usr/local/bin/controluser

+ 6
- 0
src/freedombone-tests 查看文件

759
     output "V-38605" $? ${SETLANG}
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
     ##RHEL-06-000227
768
     ##RHEL-06-000227
763
     ##The SSH daemon must be configured to use only the SSHv2 protocol.
769
     ##The SSH daemon must be configured to use only the SSHv2 protocol.
764
 
770
 

+ 62
- 0
src/freedombone-tor-health 查看文件

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 查看文件

64
 if [ -f /usr/bin/backupdatabases ]; then
64
 if [ -f /usr/bin/backupdatabases ]; then
65
     if grep -q "cat /root/dbpass" /usr/bin/backupdatabases; then
65
     if grep -q "cat /root/dbpass" /usr/bin/backupdatabases; then
66
         # update to using the password manager
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
     fi
68
     fi
69
 fi
69
 fi
70
 
70
 
95
         fi
95
         fi
96
 
96
 
97
         #rebuild_exim_with_socks
97
         #rebuild_exim_with_socks
98
+        torrc_migrate
98
         nodejs_upgrade
99
         nodejs_upgrade
99
         apt-get -yq -t stretch-backports install certbot
100
         apt-get -yq -t stretch-backports install certbot
100
         email_install_tls
101
         email_install_tls

+ 2
- 2
src/freedombone-utils-dns 查看文件

119
     fi
119
     fi
120
 
120
 
121
     # add the update command to cron
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
         function_check cron_add_mins
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
         systemctl restart cron
125
         systemctl restart cron
126
     fi
126
     fi
127
 
127
 

+ 49
- 1
src/freedombone-utils-firewall 查看文件

32
 FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg
32
 FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg
33
 FIREWALL_EIFACE=eth0
33
 FIREWALL_EIFACE=eth0
34
 EXTERNAL_IPV4_ADDRESS=
34
 EXTERNAL_IPV4_ADDRESS=
35
+FIREFOX_TELEMETRY_IP='52.88.27.118'
35
 
36
 
36
 function save_firewall_settings {
37
 function save_firewall_settings {
37
     iptables-save > /etc/firewall.conf
38
     iptables-save > /etc/firewall.conf
47
     fi
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
 function firewall_block_bad_ip_ranges {
70
 function firewall_block_bad_ip_ranges {
51
     if [ "$INSTALLING_MESH" ]; then
71
     if [ "$INSTALLING_MESH" ]; then
52
         return
72
         return
340
     FIREWALL_FILENAME="${rootdir}/etc/systemd/system/meshfirewall.service"
360
     FIREWALL_FILENAME="${rootdir}/etc/systemd/system/meshfirewall.service"
341
     MESH_FIREWALL_SCRIPT=${rootdir}/usr/bin/mesh-firewall
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
     { echo '#!/bin/bash';
389
     { echo '#!/bin/bash';
344
       echo 'iptables -P INPUT ACCEPT';
390
       echo 'iptables -P INPUT ACCEPT';
345
       echo 'ip6tables -P INPUT ACCEPT';
391
       echo 'ip6tables -P INPUT ACCEPT';
387
       echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
433
       echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
388
       echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
434
       echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT";
389
       echo "iptables -A INPUT -p udp --dport 1900 -j ACCEPT";
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
     chmod +x "$MESH_FIREWALL_SCRIPT"
439
     chmod +x "$MESH_FIREWALL_SCRIPT"
392
 
440
 
393
     { echo '[Unit]';
441
     { echo '[Unit]';

+ 1
- 1
src/freedombone-utils-gnusocialtools 查看文件

484
       echo "database_name=\$1";
484
       echo "database_name=\$1";
485
       echo "remove_user=\$2";
485
       echo "remove_user=\$2";
486
       echo "domain_name=\$3";
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
       echo '';
488
       echo '';
489
       echo "if [ \${#remove_user} -lt 2 ]; then";
489
       echo "if [ \${#remove_user} -lt 2 ]; then";
490
       echo '  echo $"No user was specified"';
490
       echo '  echo $"No user was specified"';

+ 2
- 2
src/freedombone-utils-mesh 查看文件

182
     if [ ! -f /var/www/html/images/trifa.png ]; then
182
     if [ ! -f /var/www/html/images/trifa.png ]; then
183
         cp "/root/$PROJECT_NAME/img/trifa.png" /var/www/html/images/trifa.png
183
         cp "/root/$PROJECT_NAME/img/trifa.png" /var/www/html/images/trifa.png
184
     fi
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
     fi
187
     fi
188
     chown -R www-data:www-data /var/www/html/*
188
     chown -R www-data:www-data /var/www/html/*
189
 }
189
 }

+ 114
- 108
src/freedombone-utils-onion 查看文件

31
 
31
 
32
 USE_V2_ONION_ADDRESS=
32
 USE_V2_ONION_ADDRESS=
33
 HIDDEN_SERVICE_PATH='/var/lib/tor/hidden_service_'
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
 function add_email_hostname {
76
 function add_email_hostname {
36
     extra_email_hostname="$1"
77
     extra_email_hostname="$1"
80
     nick="$3"
121
     nick="$3"
81
 
122
 
82
     if [ ${#nick} -gt 0 ]; then
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
     fi
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
     if [ "$3" ]; then
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
         if [ "$4" ]; then
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
             if [ "$5" ]; then
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
             fi
135
             fi
95
         fi
136
         fi
96
     fi
137
     fi
123
         USE_V2_ONION_ADDRESS=
164
         USE_V2_ONION_ADDRESS=
124
         exit 877367
165
         exit 877367
125
     fi
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
         if [ ! $USE_V2_ONION_ADDRESS ]; then
169
         if [ ! $USE_V2_ONION_ADDRESS ]; then
129
-            echo 'HiddenServiceVersion 3' >> /etc/tor/torrc
170
+            echo 'HiddenServiceVersion 3' >> "$ONION_SERVICES_FILE"
130
         else
171
         else
131
-            echo 'HiddenServiceVersion 2' >> /etc/tor/torrc
172
+            echo 'HiddenServiceVersion 2' >> "$ONION_SERVICES_FILE"
132
         fi
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
         if [ ${#onion_stealth_name} -gt 0 ]; then
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
         fi
177
         fi
137
     fi
178
     fi
138
 
179
 
270
     mark_completed "${FUNCNAME[0]}"
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
 function install_tor {
342
 function install_tor {
274
     if [[ $SYSTEM_TYPE == "mesh*" ]]; then
343
     if [[ $SYSTEM_TYPE == "mesh*" ]]; then
275
         return
344
         return
287
     # For torify
356
     # For torify
288
     apt-get -yq install torsocks
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
     fi
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
     fi
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
     mark_completed "${FUNCNAME[0]}"
370
     mark_completed "${FUNCNAME[0]}"
330
 }
371
 }
465
 
506
 
466
     apt-get -yq install obfs4proxy
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
     else
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
     fi
517
     fi
487
 
518
 
488
     systemctl restart tor
519
     systemctl restart tor
495
     if [[ "$bridge_ip_address" == *"."* ]]; then
526
     if [[ "$bridge_ip_address" == *"."* ]]; then
496
         bridge_str="Bridge $bridge_type ${bridge_ip_address}"
527
         bridge_str="Bridge $bridge_type ${bridge_ip_address}"
497
     else
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
             bridge_str=" ${bridge_ip_address}"
530
             bridge_str=" ${bridge_ip_address}"
500
         else
531
         else
501
             return
532
             return
502
         fi
533
         fi
503
     fi
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
     fi
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
     fi
542
     fi
517
 
543
 
518
     systemctl restart tor
544
     systemctl restart tor
521
 function tor_create_bridge_relay {
547
 function tor_create_bridge_relay {
522
     read_config_param 'TOR_BRIDGE_PORT'
548
     read_config_param 'TOR_BRIDGE_PORT'
523
     read_config_param 'TOR_BRIDGE_NICKNAME'
549
     read_config_param 'TOR_BRIDGE_NICKNAME'
550
+    read_config_param 'MY_EMAIL_ADDRESS'
551
+
524
     if [ ! "$TOR_BRIDGE_PORT" ]; then
552
     if [ ! "$TOR_BRIDGE_PORT" ]; then
525
         return
553
         return
526
     fi
554
     fi
533
 
561
 
534
     apt-get -yq install obfs4proxy
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
     firewall_add tor_bridge "$TOR_BRIDGE_PORT" tcp
570
     firewall_add tor_bridge "$TOR_BRIDGE_PORT" tcp
571
+
556
     systemctl restart tor
572
     systemctl restart tor
557
 }
573
 }
558
 
574
 
559
 function tor_remove_bridge_relay {
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
     fi
578
     fi
579
+
575
     read_config_param 'TOR_BRIDGE_PORT'
580
     read_config_param 'TOR_BRIDGE_PORT'
576
     firewall_remove "$TOR_BRIDGE_PORT" tcp
581
     firewall_remove "$TOR_BRIDGE_PORT" tcp
582
+
577
     systemctl restart tor
583
     systemctl restart tor
578
 }
584
 }
579
 
585
 

+ 20
- 0
src/freedombone-utils-postgresql 查看文件

29
 # Set this when calling backup and restore commands
29
 # Set this when calling backup and restore commands
30
 USE_POSTGRESQL=
30
 USE_POSTGRESQL=
31
 POSTGRESQL_PACKAGES='postgresql-9.6 postgresql-contrib-9.6 postgresql-client'
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
 function store_original_postgresql_password {
53
 function store_original_postgresql_password {
34
     if [ ! -f /root/.postgresqloriginal ]; then
54
     if [ ! -f /root/.postgresqloriginal ]; then

+ 86
- 39
src/freedombone-utils-selector 查看文件

272
     done
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
 # detects what apps are available
308
 # detects what apps are available
276
 function detect_apps {
309
 function detect_apps {
277
     FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*"
310
     FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*"
285
     for filename in $FILES
318
     for filename in $FILES
286
     do
319
     do
287
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
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
         fi
329
         fi
294
     done
330
     done
295
 
331
 
318
     do
354
     do
319
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
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
                 fi
371
                 fi
332
             fi
372
             fi
333
         fi
373
         fi
350
     do
390
     do
351
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
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
                 fi
404
                 fi
361
             fi
405
             fi
362
         fi
406
         fi
385
     for filename in $FILES
429
     for filename in $FILES
386
     do
430
     do
387
         app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
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
                     else
452
                     else
402
                         APPS_CHOSEN+=("0")
453
                         APPS_CHOSEN+=("0")
403
                     fi
454
                     fi
404
-                else
405
-                    APPS_CHOSEN+=("0")
406
                 fi
455
                 fi
407
-            else
408
-                APPS_CHOSEN+=("0")
409
             fi
456
             fi
410
         fi
457
         fi
411
     done
458
     done

+ 96
- 25
src/freedombone-utils-setup 查看文件

223
     fi
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
 function turn_off_rsys_logging {
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
 function initial_setup {
275
 function initial_setup {
697
     function_check configure_firewall
720
     function_check configure_firewall
698
     configure_firewall
721
     configure_firewall
699
 
722
 
723
+    function_check block_firefox_telemetry
724
+    block_firefox_telemetry
725
+
700
     function_check configure_firewall_ping
726
     function_check configure_firewall_ping
701
     configure_firewall_ping
727
     configure_firewall_ping
702
 
728
 
794
     apt-get -yq install shellcheck
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
 function setup_utils {
865
 function setup_utils {
798
     read_config_param "PROJECT_REPO"
866
     read_config_param "PROJECT_REPO"
799
     write_config_param "PROJECT_REPO" "$PROJECT_REPO"
867
     write_config_param "PROJECT_REPO" "$PROJECT_REPO"
816
     function_check separate_tmp_filesystem
884
     function_check separate_tmp_filesystem
817
     separate_tmp_filesystem 150
885
     separate_tmp_filesystem 150
818
 
886
 
887
+    function_check microsd_card_optimisations
888
+    microsd_card_optimisations
889
+
819
     function_check proc_filesystem_settings
890
     function_check proc_filesystem_settings
820
     proc_filesystem_settings
891
     proc_filesystem_settings
821
 
892
 
903
     function_check install_tor
974
     function_check install_tor
904
     install_tor
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
     function_check install_command_line_browser
980
     function_check install_command_line_browser
910
     install_command_line_browser
981
     install_command_line_browser

+ 4
- 4
src/freedombone-utils-web 查看文件

88
         max_body=$2
88
         max_body=$2
89
     fi
89
     fi
90
     filename=/etc/nginx/sites-available/$domain_name
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
       echo '';
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
       echo ''; } >> "$filename"
96
       echo ''; } >> "$filename"
97
 }
97
 }
98
 
98
 

+ 2
- 2
src/freedombone-utils-wifi 查看文件

88
 
88
 
89
     atheros_drivers_file=drivers/firmware-ath9k-htc.deb
89
     atheros_drivers_file=drivers/firmware-ath9k-htc.deb
90
     if [ ! -f $atheros_drivers_file ]; then
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
             return
92
             return
93
         else
93
         else
94
-            atheros_drivers_file=~/freedombone/$atheros_drivers_file
94
+            atheros_drivers_file="$HOME/${PROJECT_NAME}/$atheros_drivers_file"
95
         fi
95
         fi
96
     else
96
     else
97
         atheros_drivers_file=$(pwd)/$atheros_drivers_file
97
         atheros_drivers_file=$(pwd)/$atheros_drivers_file

+ 13
- 0
tests/check-ssh.sh 查看文件

44
             exit 1
44
             exit 1
45
         fi
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
     sshd_status)
60
     sshd_status)
48
         if systemctl status sshd | grep "Active:.*(running)";then
61
         if systemctl status sshd | grep "Active:.*(running)";then
49
             :
62
             :

+ 9
- 0
tests/output.sh 查看文件

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
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
               fi
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
     V-38607)  if [ "$3" = "en" ]; then
1411
     V-38607)  if [ "$3" = "en" ]; then
1403
                   log_msg $2 'The SSH daemon must be configured to use only the SSHv2 protocol.'
1412
                   log_msg $2 'The SSH daemon must be configured to use only the SSHv2 protocol.'
1404
               else
1413
               else

+ 45
- 135
website/EN/app_pleroma.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
14
 <style type="text/css">
16
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
19
   .tag    { background-color: #eee; font-family: monospace;
27
             padding: 2px; font-size: 80%; font-weight: normal; }
20
             padding: 2px; font-size: 80%; font-weight: normal; }
28
   .timestamp { color: #bebebe; }
21
   .timestamp { color: #bebebe; }
29
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
26
   .underline { text-decoration: underline; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
   p.verse { margin-left: 3%; }
28
   p.verse { margin-left: 3%; }
56
     border: 1px solid black;
49
     border: 1px solid black;
57
   }
50
   }
58
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
60
   table { border-collapse:collapse; }
153
   caption.t-above { caption-side: top; }
61
   caption.t-above { caption-side: top; }
154
   caption.t-bottom { caption-side: bottom; }
62
   caption.t-bottom { caption-side: bottom; }
155
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
70
   dt { font-weight: bold; }
163
-  .footpara { display: inline; }
71
+  .footpara:nth-child(2) { display: inline; }
72
+  .footpara { display: block; }
164
   .footdef  { margin-bottom: 1em; }
73
   .footdef  { margin-bottom: 1em; }
165
   .figure { padding: 1em; }
74
   .figure { padding: 1em; }
166
   .figure p { text-align: center; }
75
   .figure p { text-align: center; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
   .org-info-js_search-highlight
90
   .org-info-js_search-highlight
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
-  .org-svg { width: 90%; }
184
   /*]]>*/-->
92
   /*]]>*/-->
185
 </style>
93
 </style>
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
189
 @licstart  The following is the entire license notice for the
97
 @licstart  The following is the entire license notice for the
190
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
102
 The JavaScript code in this tag is free software: you can
195
 redistribute it and/or modify it under the terms of the GNU
103
 redistribute it and/or modify it under the terms of the GNU
236
 <a name="top" id="top"></a>
144
 <a name="top" id="top"></a>
237
 </div>
145
 </div>
238
 <div id="content">
146
 <div id="content">
147
+<h1 class="title"></h1>
239
 
148
 
240
 <div class="figure">
149
 <div class="figure">
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
262
 </p>
171
 </p>
263
 </div>
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
 <p>
177
 <p>
269
 Log into your system with:
178
 Log into your system with:
270
 </p>
179
 </p>
271
 
180
 
272
 <div class="org-src-container">
181
 <div class="org-src-container">
182
+
273
 <pre class="src src-bash">ssh myusername@mydomain -p 2222
183
 <pre class="src src-bash">ssh myusername@mydomain -p 2222
274
 </pre>
184
 </pre>
275
 </div>
185
 </div>
284
 </div>
194
 </div>
285
 </div>
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
 <p>
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
 </p>
202
 </p>
293
 
203
 
294
 <p>
204
 <p>
297
 </div>
207
 </div>
298
 </div>
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
 <p>
213
 <p>
304
 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.
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
 </p>
215
 </p>
312
 </div>
222
 </div>
313
 </div>
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
 <p>
228
 <p>
319
 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.
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
 </p>
230
 </p>
327
 </div>
237
 </div>
328
 </div>
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
 <div class="figure">
244
 <div class="figure">
335
 <p><img src="images/controlpanel/control_panel_blocking.jpg" alt="control_panel_blocking.jpg" width="80%" align="center" />
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 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
152
 </div>
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
 <blockquote>
248
 <blockquote>
163
 <p>
249
 <p>
174
 </p>
260
 </p>
175
 
261
 
176
 <div class="org-src-container">
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
 </pre>
264
 </pre>
180
 </div>
265
 </div>
181
 
266
 
200
 </p>
285
 </p>
201
 
286
 
202
 <div class="org-src-container">
287
 <div class="org-src-container">
203
-
204
 <pre class="src src-bash">ssh root@[local IP address]
288
 <pre class="src src-bash">ssh root@[local IP address]
205
 </pre>
289
 </pre>
206
 </div>
290
 </div>
220
 </p>
304
 </p>
221
 
305
 
222
 <div class="org-src-container">
306
 <div class="org-src-container">
223
-
224
 <pre class="src src-bash">ssh myusername@[local IP address]
307
 <pre class="src src-bash">ssh myusername@[local IP address]
225
 </pre>
308
 </pre>
226
 </div>
309
 </div>
230
 </p>
313
 </p>
231
 
314
 
232
 <div class="org-src-container">
315
 <div class="org-src-container">
233
-
234
 <pre class="src src-bash">sudo su
316
 <pre class="src src-bash">sudo su
235
 </pre>
317
 </pre>
236
 </div>
318
 </div>
240
 </p>
322
 </p>
241
 
323
 
242
 <div class="org-src-container">
324
 <div class="org-src-container">
243
-
244
 <pre class="src src-bash">apt-get -y install git dialog build-essential
325
 <pre class="src src-bash">apt-get -y install git dialog build-essential
245
 git clone https://github.com/bashrc/freedombone
326
 git clone https://github.com/bashrc/freedombone
246
-cd freedombone
327
+<span class="org-builtin">cd</span> freedombone
247
 git checkout stretch
328
 git checkout stretch
248
 </pre>
329
 </pre>
249
 </div>
330
 </div>
253
 </p>
334
 </p>
254
 
335
 
255
 <div class="org-src-container">
336
 <div class="org-src-container">
256
-
257
 <pre class="src src-bash">make install
337
 <pre class="src src-bash">make install
258
 </pre>
338
 </pre>
259
 </div>
339
 </div>
263
 </p>
343
 </p>
264
 
344
 
265
 <div class="org-src-container">
345
 <div class="org-src-container">
266
-
267
 <pre class="src src-bash">freedombone menuconfig
346
 <pre class="src src-bash">freedombone menuconfig
268
 </pre>
347
 </pre>
269
 </div>
348
 </div>
273
 </p>
352
 </p>
274
 
353
 
275
 <div class="org-src-container">
354
 <div class="org-src-container">
276
-
277
 <pre class="src src-bash">freedombone menuconfig-onion
355
 <pre class="src src-bash">freedombone menuconfig-onion
278
 </pre>
356
 </pre>
279
 </div>
357
 </div>
283
 </p>
361
 </p>
284
 
362
 
285
 <div class="org-src-container">
363
 <div class="org-src-container">
286
-
287
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
364
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
288
 </pre>
365
 </pre>
289
 </div>
366
 </div>

+ 215
- 140
website/EN/faq.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2018-04-14 Sat 15:14 -->
6
+<!-- 2018-05-02 Wed 10:48 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
262
 </colgroup>
262
 </colgroup>
263
 <tbody>
263
 <tbody>
264
 <tr>
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
 </tr>
266
 </tr>
267
 
267
 
268
 <tr>
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
 </tr>
270
 </tr>
271
 
271
 
272
 <tr>
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
 </tr>
274
 </tr>
275
 
275
 
276
 <tr>
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
 </tr>
278
 </tr>
279
 
279
 
280
 <tr>
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
 </tr>
282
 </tr>
283
 
283
 
284
 <tr>
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
 </tr>
286
 </tr>
287
 
287
 
288
 <tr>
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
 </tr>
290
 </tr>
291
 
291
 
292
 <tr>
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
 </tr>
294
 </tr>
295
 
295
 
296
 <tr>
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
 </tr>
298
 </tr>
299
 
299
 
300
 <tr>
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
 </tr>
302
 </tr>
303
 
303
 
304
 <tr>
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
 </tr>
306
 </tr>
307
 
307
 
308
 <tr>
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
 </tr>
310
 </tr>
311
 
311
 
312
 <tr>
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
 </tr>
314
 </tr>
315
 
315
 
316
 <tr>
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
 </tr>
318
 </tr>
319
 
319
 
320
 <tr>
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
 </tr>
322
 </tr>
323
 
323
 
324
 <tr>
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
 </tr>
326
 </tr>
327
 
327
 
328
 <tr>
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
 </tr>
330
 </tr>
331
 
331
 
332
 <tr>
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
 </tr>
334
 </tr>
335
 
335
 
336
 <tr>
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
 </tr>
338
 </tr>
339
 
339
 
340
 <tr>
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
 </tr>
342
 </tr>
343
 
343
 
344
 <tr>
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
 </tr>
346
 </tr>
347
 
347
 
348
 <tr>
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
 </tr>
350
 </tr>
351
 
351
 
352
 <tr>
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
 </tr>
354
 </tr>
355
 
355
 
356
 <tr>
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
 </tr>
358
 </tr>
359
 
359
 
360
 <tr>
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
 </tr>
362
 </tr>
363
 
363
 
364
 <tr>
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
 </tr>
366
 </tr>
367
 
367
 
368
 <tr>
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
 </tr>
370
 </tr>
371
 
371
 
372
 <tr>
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
 </tr>
374
 </tr>
375
 
375
 
376
 <tr>
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
 </tr>
378
 </tr>
379
 
379
 
380
 <tr>
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
 </tr>
382
 </tr>
383
 
383
 
384
 <tr>
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
 </tr>
386
 </tr>
387
 
387
 
388
 <tr>
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
 </tr>
390
 </tr>
391
 
391
 
392
 <tr>
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
 </tr>
406
 </tr>
395
 </tbody>
407
 </tbody>
396
 </table>
408
 </table>
397
 </div>
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
 <p>
414
 <p>
403
 <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.
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
 </p>
416
 </p>
405
 </div>
417
 </div>
406
 </div>
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
 <p>
422
 <p>
411
 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.
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
 </p>
424
 </p>
416
 </p>
428
 </p>
417
 </div>
429
 </div>
418
 </div>
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
 <p>
475
 <p>
423
 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:
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
 </p>
477
 </p>
425
 </div>
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
 <ul class="org-ul">
483
 <ul class="org-ul">
431
 <li>Uses freedom-maker and vmdebootstrap to build debian images</li>
484
 <li>Uses freedom-maker and vmdebootstrap to build debian images</li>
432
 <li>Supports the use of Tor onion addresses to access websites</li>
485
 <li>Supports the use of Tor onion addresses to access websites</li>
440
 </ul>
493
 </ul>
441
 </div>
494
 </div>
442
 </div>
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
 <ul class="org-ul">
499
 <ul class="org-ul">
447
 <li>FreedomBox is a Debian pure blend. Freedombone is not</li>
500
 <li>FreedomBox is a Debian pure blend. Freedombone is not</li>
448
 <li>Freedombone only supports Free Software. FreedomBox includes some closed binary boot blobs for certain ARM boards</li>
501
 <li>Freedombone only supports Free Software. FreedomBox includes some closed binary boot blobs for certain ARM boards</li>
457
 </div>
510
 </div>
458
 </div>
511
 </div>
459
 </div>
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
 <p>
516
 <p>
464
 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.
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
 </p>
518
 </p>
469
 </p>
522
 </p>
470
 </div>
523
 </div>
471
 </div>
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
 <p>
528
 <p>
476
 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.
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
 </p>
530
 </p>
492
 </p>
545
 </p>
493
 </div>
546
 </div>
494
 </div>
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
 <p>
551
 <p>
499
 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.
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
 </p>
553
 </p>
512
 </p>
565
 </p>
513
 </div>
566
 </div>
514
 </div>
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
 <p>
571
 <p>
519
 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.
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
 </p>
573
 </p>
521
 </div>
574
 </div>
522
 </div>
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
 <p>
579
 <p>
527
 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.
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
 </p>
581
 </p>
540
 </p>
593
 </p>
541
 </div>
594
 </div>
542
 </div>
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
 <p>
621
 <p>
547
 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.
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
 </p>
623
 </p>
549
 </div>
624
 </div>
550
 </div>
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
 <p>
629
 <p>
555
 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.
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
 </p>
631
 </p>
560
 </p>
635
 </p>
561
 </div>
636
 </div>
562
 </div>
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
 <p>
641
 <p>
567
 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:
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
 </p>
643
 </p>
620
 </div>
695
 </div>
621
 </div>
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
 <p>
701
 <p>
627
 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.
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
 </p>
703
 </p>
632
 </p>
707
 </p>
633
 </div>
708
 </div>
634
 </div>
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
 <p>
713
 <p>
639
 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.
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
 </p>
715
 </p>
644
 </p>
719
 </p>
645
 </div>
720
 </div>
646
 </div>
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
 <p>
725
 <p>
651
 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).
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
 </p>
727
 </p>
669
 </p>
744
 </p>
670
 </div>
745
 </div>
671
 </div>
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
 <p>
750
 <p>
676
 Celebrities recommend Signal. It's Free Software so it must be good, right?
751
 Celebrities recommend Signal. It's Free Software so it must be good, right?
677
 </p>
752
 </p>
694
 </p>
769
 </p>
695
 </div>
770
 </div>
696
 </div>
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
 <p>
775
 <p>
701
 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.
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
 </p>
777
 </p>
706
 </p>
781
 </p>
707
 
782
 
708
 <p>
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
 </p>
785
 </p>
711
 </div>
786
 </div>
712
 </div>
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
 <p>
791
 <p>
717
 To remove a user:
792
 To remove a user:
718
 </p>
793
 </p>
727
 </p>
802
 </p>
728
 </div>
803
 </div>
729
 </div>
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
 <p>
808
 <p>
734
 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.
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
 </p>
810
 </p>
743
 </p>
818
 </p>
744
 </div>
819
 </div>
745
 </div>
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
 <p>
824
 <p>
750
 The tripwire will be automatically reset once per week. If you want to reset it earlier then do the following:
825
 The tripwire will be automatically reset once per week. If you want to reset it earlier then do the following:
751
 </p>
826
 </p>
760
 </p>
835
 </p>
761
 </div>
836
 </div>
762
 </div>
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
 <blockquote>
841
 <blockquote>
767
 <p>
842
 <p>
768
 "<i>We kill people based on metadata</i>"
843
 "<i>We kill people based on metadata</i>"
778
 </p>
853
 </p>
779
 </div>
854
 </div>
780
 </div>
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
 <div class="org-src-container">
859
 <div class="org-src-container">
785
 <pre class="src src-bash">ssh username@domainname -p 2222
860
 <pre class="src src-bash">ssh username@domainname -p 2222
786
 </pre>
861
 </pre>
836
 </p>
911
 </p>
837
 </div>
912
 </div>
838
 </div>
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
 <p>
917
 <p>
843
 If you run the command:
918
 If you run the command:
844
 </p>
919
 </p>
861
 </div>
936
 </div>
862
 </div>
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
 <p>
942
 <p>
868
 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:
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
 </p>
944
 </p>
878
 </p>
953
 </p>
879
 </div>
954
 </div>
880
 </div>
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
 <p>
959
 <p>
885
 Suppose that you have bought a domain name (rather than using a free subdomain on freedns) and you want to use that instead.
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
 </p>
961
 </p>
944
 </div>
1019
 </div>
945
 </div>
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
 <p>
1025
 <p>
951
 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:
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
 </p>
1027
 </p>
965
 </p>
1040
 </p>
966
 </div>
1041
 </div>
967
 </div>
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
 <p>
1046
 <p>
972
 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.
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
 </p>
1048
 </p>
986
 </p>
1061
 </p>
987
 </div>
1062
 </div>
988
 </div>
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
 <p>
1067
 <p>
993
 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:
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
 </p>
1069
 </p>
1003
 </p>
1078
 </p>
1004
 </div>
1079
 </div>
1005
 </div>
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
 <p>
1084
 <p>
1010
 <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.
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
 </p>
1086
 </p>
1012
 </div>
1087
 </div>
1013
 </div>
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
 <p>
1092
 <p>
1018
 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.
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
 </p>
1094
 </p>
1044
 </p>
1119
 </p>
1045
 </div>
1120
 </div>
1046
 </div>
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
 <p>
1125
 <p>
1051
 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.
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
 </p>
1127
 </p>
1071
 </div>
1146
 </div>
1072
 </div>
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
 <p>
1152
 <p>
1078
 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.
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
 </p>
1154
 </p>
1088
 </div>
1163
 </div>
1089
 </div>
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
 <p>
1169
 <p>
1095
 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.
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
 </p>
1171
 </p>
1101
 </div>
1176
 </div>
1102
 </div>
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
 <p>
1182
 <p>
1108
 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.
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
 </p>
1184
 </p>

+ 127
- 46
website/EN/homeserver.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
152
 </div>
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
 <p>
249
 <p>
159
 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.
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
 </p>
251
 </p>
164
 </p>
255
 </p>
165
 
256
 
166
 <div class="org-src-container">
257
 <div class="org-src-container">
167
-
168
 <pre class="src src-bash">sudo apt-get install git dialog build-essential
258
 <pre class="src src-bash">sudo apt-get install git dialog build-essential
169
 git clone https://github.com/bashrc/freedombone
259
 git clone https://github.com/bashrc/freedombone
170
-cd freedombone
260
+<span class="org-builtin">cd</span> freedombone
171
 git checkout stretch
261
 git checkout stretch
172
 sudo make install
262
 sudo make install
173
 freedombone-image --setup debian
263
 freedombone-image --setup debian
180
 </p>
270
 </p>
181
 
271
 
182
 <div class="org-src-container">
272
 <div class="org-src-container">
183
-
184
 <pre class="src src-bash">sudo pacman -S git dialog
273
 <pre class="src src-bash">sudo pacman -S git dialog
185
 git clone https://github.com/bashrc/freedombone
274
 git clone https://github.com/bashrc/freedombone
186
-cd freedombone
275
+<span class="org-builtin">cd</span> freedombone
187
 git checkout stretch
276
 git checkout stretch
188
 sudo make install
277
 sudo make install
189
 freedombone-image --setup parabola
278
 freedombone-image --setup parabola
196
 </p>
285
 </p>
197
 
286
 
198
 <div class="org-src-container">
287
 <div class="org-src-container">
199
-
200
 <pre class="src src-bash">freedombone-client
288
 <pre class="src src-bash">freedombone-client
201
 </pre>
289
 </pre>
202
 </div>
290
 </div>
234
 </p>
322
 </p>
235
 
323
 
236
 <div class="org-src-container">
324
 <div class="org-src-container">
237
-
238
 <pre class="src src-bash">ls /dev/sd*
325
 <pre class="src src-bash">ls /dev/sd*
239
 </pre>
326
 </pre>
240
 </div>
327
 </div>
248
 </p>
335
 </p>
249
 
336
 
250
 <div class="org-src-container">
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
 </pre>
340
 </pre>
255
 </div>
341
 </div>
256
 
342
 
263
 </p>
349
 </p>
264
 
350
 
265
 <div class="org-src-container">
351
 <div class="org-src-container">
266
-
267
 <pre class="src src-bash">username: fbone
352
 <pre class="src src-bash">username: fbone
268
 password: freedombone
353
 password: freedombone
269
 </pre>
354
 </pre>
274
 </p>
359
 </p>
275
 
360
 
276
 <div class="org-src-container">
361
 <div class="org-src-container">
277
-
278
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
362
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
279
 </pre>
363
 </pre>
280
 </div>
364
 </div>
296
 </p>
380
 </p>
297
 
381
 
298
 <div class="org-src-container">
382
 <div class="org-src-container">
299
-
300
 <pre class="src src-bash">freedombone-client --verify
383
 <pre class="src src-bash">freedombone-client --verify
301
 </pre>
384
 </pre>
302
 </div>
385
 </div>
316
 </p>
399
 </p>
317
 
400
 
318
 <div class="org-src-container">
401
 <div class="org-src-container">
319
-
320
 <pre class="src src-bash">freedombone-client
402
 <pre class="src src-bash">freedombone-client
321
 ssh myusername@freedombone.local -p 2222
403
 ssh myusername@freedombone.local -p 2222
322
 </pre>
404
 </pre>
338
 
420
 
339
 
421
 
340
 <div class="figure">
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
 </p>
424
 </p>
343
 </div>
425
 </div>
344
 
426
 
377
 </p>
459
 </p>
378
 
460
 
379
 <div class="org-src-container">
461
 <div class="org-src-container">
380
-
381
 <pre class="src src-bash">man freedombone-image
462
 <pre class="src src-bash">man freedombone-image
382
 </pre>
463
 </pre>
383
 </div>
464
 </div>

+ 240
- 185
website/EN/installation.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151
 </p>
242
 </p>
152
 </div>
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
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
248
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
158
 
249
 
159
 
250
 
160
 <colgroup>
251
 <colgroup>
161
-<col  class="left" />
252
+<col  class="org-left" />
162
 </colgroup>
253
 </colgroup>
163
 <tbody>
254
 <tbody>
164
 <tr>
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
 </tr>
257
 </tr>
167
 
258
 
168
 <tr>
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
 </tr>
261
 </tr>
171
 
262
 
172
 <tr>
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
 </tr>
265
 </tr>
175
 
266
 
176
 <tr>
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
 </tr>
269
 </tr>
179
 
270
 
180
 <tr>
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
 </tr>
273
 </tr>
183
 
274
 
184
 <tr>
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
 </tr>
277
 </tr>
187
 
278
 
188
 <tr>
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
 </tr>
281
 </tr>
191
 
282
 
192
 <tr>
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
 </tr>
285
 </tr>
195
 
286
 
196
 <tr>
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
 </tr>
289
 </tr>
199
 </tbody>
290
 </tbody>
200
 </table>
291
 </table>
201
 </div>
292
 </div>
202
 </div>
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
 <p>
298
 <p>
208
 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.
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
 </p>
300
 </p>
213
 </p>
304
 </p>
214
 
305
 
215
 <div class="org-src-container">
306
 <div class="org-src-container">
216
-
217
 <pre class="src src-bash">sudo apt-get install git build-essential dialog
307
 <pre class="src src-bash">sudo apt-get install git build-essential dialog
218
 git clone https://github.com/bashrc/freedombone
308
 git clone https://github.com/bashrc/freedombone
219
-cd freedombone
309
+<span class="org-builtin">cd</span> freedombone
220
 git checkout stretch
310
 git checkout stretch
221
 sudo make install
311
 sudo make install
222
 </pre>
312
 </pre>
227
 </p>
317
 </p>
228
 
318
 
229
 <div class="org-src-container">
319
 <div class="org-src-container">
230
-
231
 <pre class="src src-bash">freedombone-image --setup debian
320
 <pre class="src src-bash">freedombone-image --setup debian
232
 </pre>
321
 </pre>
233
 </div>
322
 </div>
237
 </p>
326
 </p>
238
 
327
 
239
 <div class="org-src-container">
328
 <div class="org-src-container">
240
-
241
 <pre class="src src-bash">freedombone-image --setup parabola
329
 <pre class="src src-bash">freedombone-image --setup parabola
242
 </pre>
330
 </pre>
243
 </div>
331
 </div>
247
 </p>
335
 </p>
248
 
336
 
249
 <div class="org-src-container">
337
 <div class="org-src-container">
250
-
251
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G
338
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G
252
 </pre>
339
 </pre>
253
 </div>
340
 </div>
257
 </p>
344
 </p>
258
 
345
 
259
 <div class="org-src-container">
346
 <div class="org-src-container">
260
-
261
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G --minimal no
347
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G --minimal no
262
 </pre>
348
 </pre>
263
 </div>
349
 </div>
267
 </p>
353
 </p>
268
 
354
 
269
 <div class="org-src-container">
355
 <div class="org-src-container">
270
-
271
 <pre class="src src-bash">freedombone-image -t qemu-x86_64 -s 8G
356
 <pre class="src src-bash">freedombone-image -t qemu-x86_64 -s 8G
272
 </pre>
357
 </pre>
273
 </div>
358
 </div>
281
 </p>
366
 </p>
282
 
367
 
283
 <div class="org-src-container">
368
 <div class="org-src-container">
284
-
285
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G -m http://ftp.de.debian.org/debian
369
 <pre class="src src-bash">freedombone-image -t beaglebone -s 8G -m http://ftp.de.debian.org/debian
286
 </pre>
370
 </pre>
287
 </div>
371
 </div>
288
 </div>
372
 </div>
289
 </div>
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
 <p>
378
 <p>
295
 Before installing Freedombone you will need a few things.
379
 Before installing Freedombone you will need a few things.
296
 </p>
380
 </p>
297
 
381
 
298
 <ul class="org-ul">
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
 </ul>
388
 </ul>
310
 </div>
389
 </div>
311
 </div>
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
 <p>
394
 <p>
316
 There are three install options: Laptop/Desktop/Netbook, SBC and Virtual Machine.
395
 There are three install options: Laptop/Desktop/Netbook, SBC and Virtual Machine.
317
 </p>
396
 </p>
318
 </div>
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
 <p>
402
 <p>
324
 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:
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
 </p>
404
 </p>
326
 
405
 
327
 <div class="org-src-container">
406
 <div class="org-src-container">
328
-
329
 <pre class="src src-bash">su
407
 <pre class="src src-bash">su
330
 apt-get update
408
 apt-get update
331
 apt-get -y install git dialog build-essential
409
 apt-get -y install git dialog build-essential
332
 git clone https://github.com/bashrc/freedombone
410
 git clone https://github.com/bashrc/freedombone
333
-cd freedombone
411
+<span class="org-builtin">cd</span> freedombone
334
 git checkout stretch
412
 git checkout stretch
335
 make install
413
 make install
336
 freedombone menuconfig
414
 freedombone menuconfig
339
 </div>
417
 </div>
340
 </div>
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
 <p>
423
 <p>
346
 Currently the following boards are supported:
424
 Currently the following boards are supported:
347
 </p>
425
 </p>
348
 
426
 
349
 <ul class="org-ul">
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
 </ul>
435
 </ul>
365
 
436
 
366
 <p>
437
 <p>
368
 </p>
439
 </p>
369
 
440
 
370
 <div class="org-src-container">
441
 <div class="org-src-container">
371
-
372
 <pre class="src src-bash">gpg --verify filename.img.asc
442
 <pre class="src src-bash">gpg --verify filename.img.asc
373
 </pre>
443
 </pre>
374
 </div>
444
 </div>
378
 </p>
448
 </p>
379
 
449
 
380
 <div class="org-src-container">
450
 <div class="org-src-container">
381
-
382
 <pre class="src src-bash">sha256sum filename.img
451
 <pre class="src src-bash">sha256sum filename.img
383
 </pre>
452
 </pre>
384
 </div>
453
 </div>
388
 </p>
457
 </p>
389
 
458
 
390
 <div class="org-src-container">
459
 <div class="org-src-container">
391
-
392
 <pre class="src src-bash">unxz filename.img.xz
460
 <pre class="src src-bash">unxz filename.img.xz
393
 </pre>
461
 </pre>
394
 </div>
462
 </div>
398
 </p>
466
 </p>
399
 
467
 
400
 <div class="org-src-container">
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
 </pre>
470
 </pre>
404
 </div>
471
 </div>
405
 
472
 
408
 </p>
475
 </p>
409
 
476
 
410
 <div class="org-src-container">
477
 <div class="org-src-container">
411
-
412
 <pre class="src src-bash">ls /dev/sd*
478
 <pre class="src src-bash">ls /dev/sd*
413
 </pre>
479
 </pre>
414
 </div>
480
 </div>
422
 </p>
488
 </p>
423
 
489
 
424
 <div class="org-src-container">
490
 <div class="org-src-container">
425
-
426
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
491
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
427
 </pre>
492
 </pre>
428
 </div>
493
 </div>
433
 </div>
498
 </div>
434
 </div>
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
 <p>
504
 <p>
440
 Qemu is currently supported, since it's s fully free software system. You can run a 64 bit Qemu image with:
505
 Qemu is currently supported, since it's s fully free software system. You can run a 64 bit Qemu image with:
441
 </p>
506
 </p>
442
 
507
 
443
 <div class="org-src-container">
508
 <div class="org-src-container">
444
-
445
 <pre class="src src-bash">qemu-system-x86_64 -m 1G filename.img
509
 <pre class="src src-bash">qemu-system-x86_64 -m 1G filename.img
446
 </pre>
510
 </pre>
447
 </div>
511
 </div>
453
 </div>
517
 </div>
454
 </div>
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
 <p>
523
 <p>
460
 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
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
 </p>
525
 </p>
462
 </div>
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
 <p>
531
 <p>
468
 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.
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
 </p>
533
 </p>
470
 </div>
534
 </div>
471
 </div>
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
 <p>
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
 </p>
541
 </p>
478
 </div>
542
 </div>
479
 </div>
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
 <p>
547
 <p>
484
 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.
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
 </p>
549
 </p>
486
 </div>
550
 </div>
487
 </div>
551
 </div>
488
 </div>
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
 <p>
556
 <p>
493
 Any manual post-installation setup instructions or passwords can be found in /home/username/README.
557
 Any manual post-installation setup instructions or passwords can be found in /home/username/README.
494
 </p>
558
 </p>
501
 
565
 
502
 
566
 
503
 <colgroup>
567
 <colgroup>
504
-<col  class="left" />
568
+<col  class="org-left" />
505
 
569
 
506
-<col  class="right" />
570
+<col  class="org-right" />
507
 </colgroup>
571
 </colgroup>
508
 <thead>
572
 <thead>
509
 <tr>
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
 </tr>
576
 </tr>
513
 </thead>
577
 </thead>
514
 <tbody>
578
 <tbody>
515
 <tr>
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
 </tr>
582
 </tr>
519
 
583
 
520
 <tr>
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
 </tr>
587
 </tr>
524
 
588
 
525
 <tr>
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
 </tr>
592
 </tr>
529
 
593
 
530
 <tr>
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
 </tr>
597
 </tr>
534
 
598
 
535
 <tr>
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
 </tr>
602
 </tr>
539
 
603
 
540
 <tr>
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
 </tr>
607
 </tr>
544
 
608
 
545
 <tr>
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
 </tr>
612
 </tr>
549
 
613
 
550
 <tr>
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
 </tr>
617
 </tr>
554
 
618
 
555
 <tr>
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
 </tr>
622
 </tr>
559
 
623
 
560
 <tr>
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
 </tr>
627
 </tr>
564
 
628
 
565
 <tr>
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
 </tr>
632
 </tr>
569
 
633
 
570
 <tr>
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
 </tr>
637
 </tr>
574
 
638
 
575
 <tr>
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
 </tr>
642
 </tr>
579
 
643
 
580
 <tr>
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
 </tr>
647
 </tr>
584
 
648
 
585
 <tr>
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
 </tr>
652
 </tr>
589
 
653
 
590
 <tr>
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
 </tr>
657
 </tr>
594
 
658
 
595
 <tr>
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
 </tr>
662
 </tr>
599
 
663
 
600
 <tr>
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
 </tr>
667
 </tr>
604
 </tbody>
668
 </tbody>
605
 </table>
669
 </table>
606
 </div>
670
 </div>
607
 </div>
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
 <p>
676
 <p>
613
 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:
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
 </p>
678
 </p>
615
 </div>
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
 <p>
683
 <p>
620
 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:
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
 </p>
685
 </p>
622
 
686
 
623
 <div class="org-src-container">
687
 <div class="org-src-container">
624
-
625
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
688
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
626
 </pre>
689
 </pre>
627
 </div>
690
 </div>
631
 </p>
694
 </p>
632
 </div>
695
 </div>
633
 </div>
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
 <p>
700
 <p>
638
 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:
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
 </p>
702
 </p>
640
 
703
 
641
 <div class="org-src-container">
704
 <div class="org-src-container">
642
-
643
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
705
 <pre class="src src-bash">ssh myusername@mydomainname -p 2222
644
 </pre>
706
 </pre>
645
 </div>
707
 </div>
654
 </div>
716
 </div>
655
 </div>
717
 </div>
656
 </div>
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
 <p>
722
 <p>
661
 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.
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
 </p>
724
 </p>
663
 
725
 
664
 <div class="org-src-container">
726
 <div class="org-src-container">
665
-
666
 <pre class="src src-bash">sudo apt-get update
727
 <pre class="src src-bash">sudo apt-get update
667
 sudo apt-get install git dialog haveged build-essential
728
 sudo apt-get install git dialog haveged build-essential
668
 git clone https://github.com/bashrc/freedombone
729
 git clone https://github.com/bashrc/freedombone
669
-cd freedombone
730
+<span class="org-builtin">cd</span> freedombone
670
 git checkout stretch
731
 git checkout stretch
671
 sudo make install
732
 sudo make install
672
 freedombone-client
733
 freedombone-client
675
 </div>
736
 </div>
676
 </div>
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
 <p>
742
 <p>
682
 To administer the system after installation log in via ssh, become the root user and then launch the control panel.
743
 To administer the system after installation log in via ssh, become the root user and then launch the control panel.
683
 </p>
744
 </p>
684
 
745
 
685
 <div class="org-src-container">
746
 <div class="org-src-container">
686
-
687
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
747
 <pre class="src src-bash">ssh myusername@freedombone.local -p 2222
688
 </pre>
748
 </pre>
689
 </div>
749
 </div>
692
 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.
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
 </p>
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
 </div>
758
 </div>
704
 </div>
759
 </div>
705
 </div>
760
 </div>

+ 136
- 61
website/EN/mesh_capabilities.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151
 </p>
242
 </p>
152
 </div>
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
 <p>
248
 <p>
158
 The mesh system has the following capabilities:
249
 The mesh system has the following capabilities:
159
 </p>
250
 </p>
160
 
251
 
161
 <ul class="org-ul">
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
 </ul>
267
 </ul>
193
 
268
 
194
 <p>
269
 <p>

+ 28
- 28
website/EN/mesh_images.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2018-04-15 Sun 18:25 -->
6
+<!-- 2018-04-21 Sat 14:59 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
242
 </p>
242
 </p>
243
 </div>
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
 </div>
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
 </div>
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
 <p>
256
 <p>
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>.
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
 </p>
258
 </p>
280
 </p>
280
 </p>
281
 </div>
281
 </div>
282
 </div>
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
 <div class="figure">
287
 <div class="figure">
288
 <p><img src="images/mesh_netbook.jpg" alt="mesh_netbook.jpg" width="100%" align="center" />
288
 <p><img src="images/mesh_netbook.jpg" alt="mesh_netbook.jpg" width="100%" align="center" />
299
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
299
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-i386.img.xz.sig
300
 gpg --verify freedombone-meshclient-i386.img.xz.sig
300
 gpg --verify freedombone-meshclient-i386.img.xz.sig
301
 unxz freedombone-meshclient-i386.img.xz
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
 </pre>
304
 </pre>
305
 </div>
305
 </div>
306
 
306
 
318
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
318
 wget https://freedombone.net/downloads/v31/freedombone-meshclient-insecure-i386.img.xz.sig
319
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
319
 gpg --verify freedombone-meshclient-insecure-i386.img.xz.sig
320
 unxz freedombone-meshclient-insecure-i386.img.xz
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
 </pre>
323
 </pre>
324
 </div>
324
 </div>
325
 </div>
325
 </div>
326
 </div>
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
 <p>
331
 <p>
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.
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
 </p>
333
 </p>
334
 </div>
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
 <div class="figure">
339
 <div class="figure">
340
 <p><img src="images/mesh_router.jpg" alt="mesh_router.jpg" width="50%" align="center" />
340
 <p><img src="images/mesh_router.jpg" alt="mesh_router.jpg" width="50%" align="center" />
353
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
353
 sha256sum freedombone-mesh_beaglebone-armhf.img.xz
354
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
354
 ad8f22c0d46c98a80aa47b5809402971cf5cf26ebf587c59a667307b2386c3d2
355
 unxz freedombone-mesh_beaglebone-armhf.img.xz
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
 </pre>
357
 </pre>
358
 </div>
358
 </div>
359
 
359
 
369
 </div>
369
 </div>
370
 </div>
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
 <p>
375
 <p>
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.
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
 </p>
377
 </p>
425
 </p>
425
 </p>
426
 
426
 
427
 <div class="org-src-container">
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
 </pre>
430
 </pre>
431
 </div>
431
 </div>
432
 
432
 

+ 152
- 105
website/EN/mobile.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
241
 <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
151
 </p>
242
 </p>
152
 </div>
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
 <p>
245
 <p>
158
 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.
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
 </p>
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
 <p>
252
 <p>
197
 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.
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
 </p>
254
 </p>
207
 </div>
263
 </div>
208
 </div>
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
 <p>
269
 <p>
214
 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.
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
 </p>
271
 </p>
216
 </div>
272
 </div>
217
 </div>
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
 <p>
278
 <p>
223
 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.
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
 </p>
280
 </p>
225
 </div>
281
 </div>
226
 </div>
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
 <p>
287
 <p>
232
 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.
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
 </p>
289
 </p>
238
 </div>
294
 </div>
239
 </div>
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
 <p>
300
 <p>
245
 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.
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
 </p>
302
 </p>
247
 </div>
303
 </div>
248
 </div>
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
 <p>
309
 <p>
254
 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.
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
 </p>
311
 </p>
260
 </div>
316
 </div>
261
 </div>
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
 <p>
322
 <p>
267
 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.
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
 </p>
324
 </p>
269
 </div>
325
 </div>
270
 </div>
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
 <p>
330
 <p>
275
 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>.
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
 </p>
332
 </p>
277
 </div>
333
 </div>
278
 </div>
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
 <p>
339
 <p>
284
 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.
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
 </p>
341
 </p>
298
 </div>
354
 </div>
299
 </div>
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
 <p>
360
 <p>
305
 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.
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
 </p>
362
 </p>
318
 </p>
374
 </p>
319
 
375
 
320
 <div class="org-src-container">
376
 <div class="org-src-container">
321
-
322
 <pre class="src src-bash">sudo pacman -S android-tools
377
 <pre class="src src-bash">sudo pacman -S android-tools
323
 </pre>
378
 </pre>
324
 </div>
379
 </div>
328
 </p>
383
 </p>
329
 
384
 
330
 <div class="org-src-container">
385
 <div class="org-src-container">
331
-
332
 <pre class="src src-bash">adb root
386
 <pre class="src src-bash">adb root
333
 adb remount
387
 adb remount
334
 adb pull /system/etc/hosts
388
 adb pull /system/etc/hosts
340
 </p>
394
 </p>
341
 
395
 
342
 <div class="org-src-container">
396
 <div class="org-src-container">
343
-
344
 <pre class="src src-bash">127.0.0.1       www.facebook.com
397
 <pre class="src src-bash">127.0.0.1       www.facebook.com
345
 127.0.0.1       facebook.com
398
 127.0.0.1       facebook.com
346
 127.0.0.1       static.ak.fbcdn.net
399
 127.0.0.1       static.ak.fbcdn.net
365
 </p>
418
 </p>
366
 
419
 
367
 <div class="org-src-container">
420
 <div class="org-src-container">
368
-
369
 <pre class="src src-bash">adb push hosts /system/etc/hosts
421
 <pre class="src src-bash">adb push hosts /system/etc/hosts
370
 </pre>
422
 </pre>
371
 </div>
423
 </div>
374
 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.
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
 </p>
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 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
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
 <style type="text/css">
15
 <style type="text/css">
15
  <!--/*--><![CDATA[/*><!--*/
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
   .todo   { font-family: monospace; color: red; }
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
   .tag    { background-color: #eee; font-family: monospace;
26
   .tag    { background-color: #eee; font-family: monospace;
20
             padding: 2px; font-size: 80%; font-weight: normal; }
27
             padding: 2px; font-size: 80%; font-weight: normal; }
21
   .timestamp { color: #bebebe; }
28
   .timestamp { color: #bebebe; }
22
   .timestamp-kwd { color: #5f9ea0; }
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
   .underline { text-decoration: underline; }
33
   .underline { text-decoration: underline; }
27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
34
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
   p.verse { margin-left: 3%; }
35
   p.verse { margin-left: 3%; }
49
     border: 1px solid black;
56
     border: 1px solid black;
50
   }
57
   }
51
   pre.src:hover:before { display: inline;}
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
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
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
   table { border-collapse:collapse; }
152
   table { border-collapse:collapse; }
61
   caption.t-above { caption-side: top; }
153
   caption.t-above { caption-side: top; }
62
   caption.t-bottom { caption-side: bottom; }
154
   caption.t-bottom { caption-side: bottom; }
63
   td, th { vertical-align:top;  }
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
   dt { font-weight: bold; }
162
   dt { font-weight: bold; }
71
-  .footpara:nth-child(2) { display: inline; }
72
-  .footpara { display: block; }
163
+  .footpara { display: inline; }
73
   .footdef  { margin-bottom: 1em; }
164
   .footdef  { margin-bottom: 1em; }
74
   .figure { padding: 1em; }
165
   .figure { padding: 1em; }
75
   .figure p { text-align: center; }
166
   .figure p { text-align: center; }
89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
   .org-info-js_search-highlight
181
   .org-info-js_search-highlight
91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
     { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
92
   /*]]>*/-->
184
   /*]]>*/-->
93
 </style>
185
 </style>
94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
186
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
97
 @licstart  The following is the entire license notice for the
189
 @licstart  The following is the entire license notice for the
98
 JavaScript code in this tag.
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
 The JavaScript code in this tag is free software: you can
194
 The JavaScript code in this tag is free software: you can
103
 redistribute it and/or modify it under the terms of the GNU
195
 redistribute it and/or modify it under the terms of the GNU
144
 <a name="top" id="top"></a>
236
 <a name="top" id="top"></a>
145
 </div>
237
 </div>
146
 <div id="content">
238
 <div id="content">
147
-<h1 class="title"></h1>
148
 
239
 
149
 <div class="figure">
240
 <div class="figure">
150
 <p><img src="images/release3.jpg" alt="release3.jpg" width="100%" align="center" />
241
 <p><img src="images/release3.jpg" alt="release3.jpg" width="100%" align="center" />
151
 </p>
242
 </p>
152
 </div>
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
 <p>
248
 <p>
158
 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.
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
 </p>
250
 </p>
163
 </p>
254
 </p>
164
 
255
 
165
 <ul class="org-ul">
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
 </ul>
264
 </ul>
181
 </div>
265
 </div>
182
 </div>
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
 <p>
271
 <p>
188
 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.
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
 </p>
273
 </p>
193
 </p>
277
 </p>
194
 
278
 
195
 <div class="org-src-container">
279
 <div class="org-src-container">
196
-
197
 <pre class="src src-bash">unxz downloadedimagefile.img.xz
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
 </pre>
282
 </pre>
200
 </div>
283
 </div>
201
 
284
 
212
 </p>
295
 </p>
213
 
296
 
214
 <div class="org-src-container">
297
 <div class="org-src-container">
215
-
216
 <pre class="src src-bash">username: fbone
298
 <pre class="src src-bash">username: fbone
217
 password: freedombone
299
 password: freedombone
218
 </pre>
300
 </pre>
223
 </p>
305
 </p>
224
 
306
 
225
 <div class="org-src-container">
307
 <div class="org-src-container">
226
-
227
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
308
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
228
 </pre>
309
 </pre>
229
 </div>
310
 </div>
242
 </div>
323
 </div>
243
 </div>
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
 <p>
329
 <p>
249
 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.
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
 </p>
331
 </p>

+ 11
- 11
website/EN/release31.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2018-04-15 Sun 19:01 -->
6
+<!-- 2018-04-21 Sat 15:00 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
242
 </p>
242
 </p>
243
 </div>
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
 <p>
248
 <p>
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:
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
 </p>
250
 </p>
281
 </div>
281
 </div>
282
 </div>
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
 <p>
287
 <p>
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.
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
 </p>
289
 </p>
294
 
294
 
295
 <div class="org-src-container">
295
 <div class="org-src-container">
296
 <pre class="src src-bash">unxz downloadedimagefile.img.xz
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
 </pre>
298
 </pre>
299
 </div>
299
 </div>
300
 
300
 
339
 </div>
339
 </div>
340
 </div>
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
 <p>
345
 <p>
346
 To upgrade from version 3 just go to the <b>administrator control panel</b> and select <b>check for updates</b>.
346
 To upgrade from version 3 just go to the <b>administrator control panel</b> and select <b>check for updates</b>.
347
 </p>
347
 </p>

+ 27
- 27
website/EN/socialinstance.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2018-04-15 Sun 18:26 -->
6
+<!-- 2018-04-21 Sat 15:00 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
242
 </p>
242
 </p>
243
 </div>
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
 <p>
248
 <p>
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:
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
 </p>
250
 </p>
263
 </div>
263
 </div>
264
 </div>
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
 <p>
269
 <p>
270
 Substitute <b>sdX</b> with the device name for your USB drive.
270
 Substitute <b>sdX</b> with the device name for your USB drive.
271
 </p>
271
 </p>
276
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
276
 wget https://freedombone.net/downloads/v31/freedombone-pleroma-amd64.img.xz.sig
277
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
277
 gpg --verify freedombone-pleroma-amd64.img.xz.sig
278
 unxz freedombone-pleroma-amd64.img.xz
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
 </pre>
281
 </pre>
282
 </div>
282
 </div>
283
 
283
 
287
 </div>
287
 </div>
288
 </div>
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
 <p>
293
 <p>
294
 Plug the USB drive into the laptop and connect it to your internet router with the ethernet cable.
294
 Plug the USB drive into the laptop and connect it to your internet router with the ethernet cable.
295
 </p>
295
 </p>
302
 </div>
302
 </div>
303
 </div>
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
 <p>
308
 <p>
309
 You may need to alter the BIOS settings to get this to work reliably.
309
 You may need to alter the BIOS settings to get this to work reliably.
310
 </p>
310
 </p>
317
 </div>
317
 </div>
318
 </div>
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
 <p>
323
 <p>
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.
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
 </p>
325
 </p>
332
 </div>
332
 </div>
333
 </div>
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
 <div class="org-src-container">
338
 <div class="org-src-container">
339
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
339
 <pre class="src src-bash">ssh fbone@freedombone.local -p 2222
340
 </pre>
340
 </pre>
346
 </div>
346
 </div>
347
 </div>
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
 <p>
352
 <p>
353
 Enter your user details, domain name and dynamic DNS settings.
353
 Enter your user details, domain name and dynamic DNS settings.
354
 </p>
354
 </p>
355
 </div>
355
 </div>
356
 </div>
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
 <p>
361
 <p>
362
 Navigate to your domain and register a new user.
362
 Navigate to your domain and register a new user.
363
 </p>
363
 </p>