Browse Source

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

Bob Mottram 7 years ago
parent
commit
899f34805a

+ 6
- 0
doc/EN/app_pleroma.org View File

49
 [[file:images/pleromamastodon.jpg]]
49
 [[file:images/pleromamastodon.jpg]]
50
 #+END_CENTER
50
 #+END_CENTER
51
 
51
 
52
+* Mobile apps
53
+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 *IcecatMobile* and set it as your default browser (under *Settings/Apps/Menu*) in order for the initial oauth registration process to work.
54
+
55
+#+BEGIN_CENTER
56
+[[file:images/tusky.jpg]]
57
+#+END_CENTER
52
 * Blocking controls
58
 * Blocking controls
53
 #+BEGIN_CENTER
59
 #+BEGIN_CENTER
54
 [[file:images/controlpanel/control_panel_blocking.jpg]]
60
 [[file:images/controlpanel/control_panel_blocking.jpg]]

+ 2
- 4
doc/EN/apps.org View File

10
 [[file:images/logo.png]]
10
 [[file:images/logo.png]]
11
 #+END_CENTER
11
 #+END_CENTER
12
 
12
 
13
-#+begin_export html
14
-<center><h1>Apps</h1></center>
15
-#+end_export
16
-
17
 #+begin_quote
13
 #+begin_quote
18
 "/In times of aggressive corporatization, increasing enclosure of communication spaces, and blanket surveillance, emancipatory communication practices appear to be particularly well suited to offer concrete alternatives to activists and citizens alike/" -- Stefania Milan
14
 "/In times of aggressive corporatization, increasing enclosure of communication spaces, and blanket surveillance, emancipatory communication practices appear to be particularly well suited to offer concrete alternatives to activists and citizens alike/" -- Stefania Milan
19
 #+end_quote
15
 #+end_quote
53
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
49
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
54
 
50
 
55
 [[./app_emacs.html][How to use it]]
51
 [[./app_emacs.html][How to use it]]
52
+* Email Server
53
+Since many apps require email registration an email server is installed by default. You can find advice on using the email system [[./usage_email.html][here]].
56
 * Etherpad
54
 * Etherpad
57
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
55
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
58
 
56
 

+ 7
- 7
doc/EN/fediverse.org View File

10
 [[file:images/logo.png]]
10
 [[file:images/logo.png]]
11
 #+END_CENTER
11
 #+END_CENTER
12
 
12
 
13
-#+BEGIN_EXPORT html
14
-<center>
15
-<h1>Homesteading the Fediverse</h1>
16
-</center>
17
-#+END_EXPORT
13
+#+BEGIN_CENTER
14
+*Homesteading the Fediverse*
15
+#+END_CENTER
18
 
16
 
19
 Some things you might want to know about the Fediverse:
17
 Some things you might want to know about the Fediverse:
20
 
18
 
21
 * Federation as a concept
19
 * Federation as a concept
22
-The political definition of a federation is "/a union of partially self-governing states or regions under a central (federal) government/". The fediverse isn't exactly like that, in that there is no federal government. However there are protocols which govern the communication between instances and that might be analogized to being a sort of elemantary constitution or mutual agreement binding all participants together. The protocols are merely ways of moving data around though, and don't impose any sort of moral code.
20
+The political definition of a federation is "/a union of partially self-governing states or regions under a central (federal) government/". The fediverse isn't exactly like that, in that there is no federal government. However there are protocols which govern the communication between instances and that might be analogized to being a sort of elementary constitution or mutual agreement binding all participants together. The protocols are merely ways of moving data around though, and don't impose any sort of moral code.
23
 * Keep the number of users on each server small
21
 * Keep the number of users on each server small
24
 The importance of this can't be overstated. Servers with lots of users always eventually have problems where the interests of the users are not the same as the interests of the server administrator. If you are the server administrator, or if there are only a small squad-size group of people on the server, then it's a lot easier to resolve differences and everyone's interests are likely to be similar.
22
 The importance of this can't be overstated. Servers with lots of users always eventually have problems where the interests of the users are not the same as the interests of the server administrator. If you are the server administrator, or if there are only a small squad-size group of people on the server, then it's a lot easier to resolve differences and everyone's interests are likely to be similar.
25
 
23
 
33
 Over time follows and blocking rules come to match the underlying social geography of affinity groups. Blocking will happen and users will move around or start new servers. Drama related to blocking will dissipate.
31
 Over time follows and blocking rules come to match the underlying social geography of affinity groups. Blocking will happen and users will move around or start new servers. Drama related to blocking will dissipate.
34
 
32
 
35
 * Keep your follows under the Dunbar number
33
 * Keep your follows under the Dunbar number
36
-Keep the number of other users you're following and who are also active to under a couple of hundred. Any more than that and you'll just be overwhelmed by irrelevant stuff and whatever community you may have been part of will dissolve in a sea of entropy. There are no algorithmic timelines, and even if they're introduced then they create their own problems as an opaque form of censorship. _Real community happens at tribal scale_. It's something which people often don't like to admit because they get fixated upon bigger and bigger numbers, but it definitely seems to be true.
34
+Keep the number of other frequently active users you're following to under a couple of hundred. Your actual number of follows might be larger than this but could include users who rarely post anything.
35
+
36
+Once there are more than a couple of hundred highly active users in your timeline then you'll just be overwhelmed by irrelevant stuff and whatever community you may have been part of will be drowned in the entropy. There are no algorithmic timelines to hide posts, and even if they're introduced then they create their own problems as an opaque form of censorship. _Real community happens at tribal scale_. It's something which people often don't like to admit because they get fixated upon bigger and bigger numbers, but it definitely seems to be true.
37
 
37
 
38
 * Avoid big public servers
38
 * Avoid big public servers
39
 It may seem like a good idea and it may seem like you're doing a service to the community by allowing random strangers to register, but servers with thousands of users only cause problems - social, administrative, financial and possibly also legal. The financial strain of running a powerful server with high reliability may be enough to encourage the administrator to begin pushing advertising onto the system, or sell user content, and then before you know it you have identical problems to Twitter. Instead try to encourage people to set up their own servers. Follow this principle and a lot of arguments and stress will be more easily avoided.
39
 It may seem like a good idea and it may seem like you're doing a service to the community by allowing random strangers to register, but servers with thousands of users only cause problems - social, administrative, financial and possibly also legal. The financial strain of running a powerful server with high reliability may be enough to encourage the administrator to begin pushing advertising onto the system, or sell user content, and then before you know it you have identical problems to Twitter. Instead try to encourage people to set up their own servers. Follow this principle and a lot of arguments and stress will be more easily avoided.

+ 10
- 9
doc/EN/index.org View File

19
 
19
 
20
 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.
20
 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.
21
 
21
 
22
-[[./homeserver.html][Here's how]].
22
+A list of other supported ARM boards [[./boards.html][can be found here]], or you can install onto an old laptop or netbook. Some installation instructions for different use cases are:
23
 
23
 
24
-And here's how [[./beaglebone.html][on a Beaglebone Black]]. A list of other supported ARM boards [[./boards.html][can be found here]].
25
-
26
-Or you can install [[./debianinstall.html][onto an existing Debian system]].
27
-
28
-If you have a single board ARM computer which isn't one of the officially supported ones, such as Raspberry Pi, then you may still be able to install [[./armbian.html][Freedombone with Armbian]].
29
-
30
-Want to make a community mesh network which can either be fully autonomous or connected to the internet? The [[./mesh.html][Freedombone Mesh]] is a wireless solution for networked communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised, or used as an infrastructural community service similar to [[https://en.wikipedia.org/wiki/Freifunk][Freifunk]].
24
+ * [[./homeserver.html][Typical installation]]
25
+ * Installing [[./beaglebone.html][on a Beaglebone Black]]
26
+ * Installing on an [[./debianinstall.html][existing Debian system]]
27
+ * Installing [[./armbian.html][on Armbian]], for unsupported ARM boards such as Raspberry Pi
28
+ * Creating a dedicated [[./socialinstance.html][fediverse instance]] for a single user or to host a community
29
+ * Deploying a [[./mesh.html][mesh network]] which can operate with or without the internet
31
 
30
 
32
 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.
31
 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.
33
 
32
 
34
  * [[./domains.html][How to get a domain name]]
33
  * [[./domains.html][How to get a domain name]]
34
+ * [[./security.html][Improving security]]
35
+ * [[./users.html][Adding or removing users]]
35
  * [[./apps.html][Apps available on the system]]
36
  * [[./apps.html][Apps available on the system]]
36
- * [[./usage.html][General usage]]
37
  * [[./faq.html][Frequently Asked Questions]]
37
  * [[./faq.html][Frequently Asked Questions]]
38
  * [[./mobile.html][Advice on setting up a mobile phone]]
38
  * [[./mobile.html][Advice on setting up a mobile phone]]
39
  * [[./support.html][I like this project. How can I help to support it?]]
39
  * [[./support.html][I like this project. How can I help to support it?]]
40
 
40
 
41
+
41
 If you find bugs, or want to add a new app to this system see the [[./devguide.html][Developers Guide]] and [[./codeofconduct.html][Code of Conduct]]. There is a Matrix chat room available at *#fbone:matrix.freedombone.net*.
42
 If you find bugs, or want to add a new app to this system see the [[./devguide.html][Developers Guide]] and [[./codeofconduct.html][Code of Conduct]]. There is a Matrix chat room available at *#fbone:matrix.freedombone.net*.
42
 
43
 
43
 Ready made disk images which can be copied onto USB or microSD drives are [[./downloads/current][available here]].
44
 Ready made disk images which can be copied onto USB or microSD drives are [[./downloads/current][available here]].

+ 48
- 0
doc/EN/security.org View File

1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, security, ssh, debian, beaglebone
5
+#+DESCRIPTION: Improving security
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+* Authentication with keys
14
+It's a lot more secure to log in to the Freedombone system using ssh keys rather than with a password. You can set that up by first running:
15
+
16
+#+begin_src bash
17
+freedombone-client
18
+#+end_src
19
+
20
+On your local system (i.e. whatever you're logging in to the Freedombone system from, typically a laptop). Then:
21
+
22
+#+begin_src
23
+ssh myusername@freedombone.local -p 2222
24
+#+end_src
25
+
26
+Select *Administrator controls* and re-enter your password, then *Manage Users* and *Change user ssh public key*. Copy and paste the ssh public keys which appeared after the *freedombone-client* command was run. Then go to *Security settings* and select *Allow ssh login with passwords* followed by *no*.
27
+
28
+You'll need to make sure that you have a copy of the ~/.ssh directory on your local system. You could just copy that directory to a USB drive and then keep that somewhere safe so that you can restore the keys if you need to.
29
+* Administrating the system via an onion address (Tor)
30
+You can also access your system via the Tor system using an onion address. To find out what the onion address for ssh access is you can do the following:
31
+
32
+#+BEGIN_SRC bash
33
+ssh username@freedombone.local -p 2222
34
+#+END_SRC
35
+
36
+Select /Administrator controls/ then select "About this system" and look for the onion address for ssh. You can then close the terminal and open another, then do the following on your local system:
37
+
38
+#+BEGIN_SRC bash
39
+freedombone-client
40
+#+END_SRC
41
+
42
+This will set up your ssh environment to be able to handle onion addresses. Then you can test ssh with:
43
+
44
+#+BEGIN_SRC bash
45
+ssh username@address.onion -p 2222
46
+#+END_SRC
47
+
48
+Subsequently even if dynamic DNS isn't working you may still be able to administer your system. Using the onion address also gives you some degree of protection against corporate or government metadata analysis, since it becomes more difficult to passively detect which systems are communicating.

+ 93
- 0
doc/EN/socialinstance.org View File

1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, debian, social, fediverse, instance, pleroma, gnusocial, postactiv
5
+#+DESCRIPTION: Social Instance
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+#+BEGIN_EXPORT html
14
+<center>
15
+<h1>Social Instance</h1>
16
+</center>
17
+#+END_EXPORT
18
+
19
+A social instance image allows you to easily set up a fediverse server, which federates using the OStatus or ActivityPub protocol. You will need:
20
+
21
+ * An old laptop, capable of booting from USB
22
+ * A USB drive, preferably Sandisk and 16GB or larger
23
+ * An ethernet patch cable
24
+ * A domain name of your own
25
+ * A dynamic DNS account
26
+
27
+The installation process is the same as usual, with the only difference being that on initial setup it will go straight to the domain setup details for your instance. In summary:
28
+
29
+* Copy the image to the USB drive
30
+
31
+Substitute *sdX* with the device name for your USB drive.
32
+
33
+#+begin_src bash
34
+sudo apt-get install xz-utils wget
35
+wget https://freedombone.net/downloads/current/freedombone-pleroma-amd64.img.xz
36
+wget https://freedombone.net/downloads/current/freedombone-pleroma-amd64.img.xz.sig
37
+gpg --verify freedombone-pleroma-amd64.img.xz.sig
38
+unxz freedombone-pleroma-amd64.img.xz
39
+sudo dd if=/dev/zero of=/dev/sdX bs=1M count=8
40
+sudo dd bs=1M if=freedombone-pleroma-amd64.img of=/dev/sdX conv=fdatasync
41
+#+end_src
42
+
43
+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.
44
+
45
+* Connect the laptop to your internet router
46
+
47
+Plug the USB drive into the laptop and connect it to your internet router with the ethernet cable.
48
+
49
+#+BEGIN_CENTER
50
+[[file:images/laptop_router.jpg]]
51
+#+END_CENTER
52
+
53
+* Boot the laptop from the USB drive
54
+
55
+You may need to alter the BIOS settings to get this to work reliably.
56
+
57
+#+BEGIN_CENTER
58
+[[file:images/bios_boot_usb.jpg]]
59
+#+END_CENTER
60
+
61
+* Forward ports 80 (HTTP) and 443 (HTTPS) from your internet router to the laptop
62
+
63
+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.
64
+
65
+#+BEGIN_CENTER
66
+[[file:images/port_forwarding.png]]
67
+#+END_CENTER
68
+
69
+* From another machine ssh into the laptop
70
+
71
+#+begin_src bash
72
+ssh fbone@freedombone.local -p 2222
73
+#+END_SRC
74
+
75
+Or alternatively you can log in directly on the laptop. The initial username is *fbone* and the password is *freedombone*. You should make sure you write down or copy the new password when it is shown.
76
+
77
+* Follow the setup procedure
78
+
79
+Enter your user details, domain name and dynamic DNS settings.
80
+
81
+* When installation is complete
82
+
83
+Navigate to your domain and register a new user.
84
+
85
+#+BEGIN_CENTER
86
+[[file:images/pleroma_register.jpg]]
87
+#+END_CENTER
88
+
89
+More details about setting up and using Pleroma [[./app_pleroma.html][can be found here]].
90
+
91
+#+BEGIN_CENTER
92
+[[file:images/tusky.jpg]]
93
+#+END_CENTER

+ 7
- 251
doc/EN/usage_email.org View File

10
 [[file:images/logo.png]]
10
 [[file:images/logo.png]]
11
 #+END_CENTER
11
 #+END_CENTER
12
 
12
 
13
-#+BEGIN_EXPORT html
14
-<center>
15
-<h1>Email</h1>
16
-</center>
17
-#+END_EXPORT
18
-
19
 | [[Things to be aware of]]                           |
13
 | [[Things to be aware of]]                           |
20
 | [[A technical note about email transport security]] |
14
 | [[A technical note about email transport security]] |
21
 | [[Add a password to your GPG key]]                  |
15
 | [[Add a password to your GPG key]]                  |
22
 | [[Publishing your GPG public key]]                  |
16
 | [[Publishing your GPG public key]]                  |
23
 | [[Mutt email client]]                               |
17
 | [[Mutt email client]]                               |
24
 | [[Thunderbird/Icedove]]                             |
18
 | [[Thunderbird/Icedove]]                             |
25
-| [[K9 Android client]]                               |
19
+| [[Android apps]]                                    |
26
 | [[Subscribing to mailing lists]]                    |
20
 | [[Subscribing to mailing lists]]                    |
27
 | [[Adding email addresses to a group/folder]]        |
21
 | [[Adding email addresses to a group/folder]]        |
28
 | [[Ignoring incoming emails]]                        |
22
 | [[Ignoring incoming emails]]                        |
29
-| [[Your own mailing list]]                           |
23
+| [[Using I2P for email transport]]                   |
30
 
24
 
31
 * Things to be aware of
25
 * Things to be aware of
32
 Even though this system makes it easy to set up an email server, running your own email system is still not easy and this is mainly due to the huge amount of collatoral damage caused by spammers over a long period of time, which in turn is due to the inherent insecurity of email protocols which enabled spam to become a big problem. Email is still very popular though and most internet services require that you have an email address in order to register.
26
 Even though this system makes it easy to set up an email server, running your own email system is still not easy and this is mainly due to the huge amount of collatoral damage caused by spammers over a long period of time, which in turn is due to the inherent insecurity of email protocols which enabled spam to become a big problem. Email is still very popular though and most internet services require that you have an email address in order to register.
40
 From https://motherboard.vice.com/read/email-encryption-is-broken:
34
 From https://motherboard.vice.com/read/email-encryption-is-broken:
41
 
35
 
42
 #+BEGIN_QUOTE
36
 #+BEGIN_QUOTE
43
-The researchers also uncovered mass scale attacks of STARTTLS sessions being stripped of their encryption. That attack itself isn't new: internet service providers sometimes do it to monitor users; organizations may use it to keep an eye on employees; or it may come from a malicious actor
37
+/The researchers also uncovered mass scale attacks of STARTTLS sessions being stripped of their encryption. That attack itself isn't new: internet service providers sometimes do it to monitor users; organizations may use it to keep an eye on employees; or it may come from a malicious actor/
44
 #+END_QUOTE
38
 #+END_QUOTE
45
 * Add a password to your GPG key
39
 * Add a password to your GPG key
46
 If you didn't use existing GPG keys during the Freedombone installation then you'll need to add a password to your newly generated private key. This is highly recommended. Go through the following sequence of commands to ssh into the Freedombone and then change your GPG password.
40
 If you didn't use existing GPG keys during the Freedombone installation then you'll need to add a password to your newly generated private key. This is highly recommended. Go through the following sequence of commands to ssh into the Freedombone and then change your GPG password.
202
 
196
 
203
 Make sure that "*show only subscribed folders*" is not checked.  Then click the *ok* buttons.  Folders will be re-scanned, which may take some time depending upon how much email you have, but your folders will then appear.
197
 Make sure that "*show only subscribed folders*" is not checked.  Then click the *ok* buttons.  Folders will be re-scanned, which may take some time depending upon how much email you have, but your folders will then appear.
204
 
198
 
205
-* K9 Android client
206
-*** A point about GPG on Android
207
-Before trying to set up email on Android you may want to consider whether you really need to do this. Android (and its variants) is not a particularly secure operating system and whether or not you wish to store GPG keys on it depends on your threat model and in what situations you'll be using your device.
208
-
209
-If you are going to use email on an Android device then ensure that you have full encryption enabled via the security settings, so that if you subsequently lose it, or if it gets stolen, the chances of encryption keys being exposed are minimised.
210
-*** Compiling the development version
211
-To get K9 working with Freedombone you'll need to install development versions of OpenKeychain and K9. At the time of writing the versions available in F-Droid do not support PGP/MIME or the "hidden recipient" feature of GPG. It is hoped that at some stage the patches will be integrated into the mainline or functionally equivalent changes made. Admittedly, this is not at all user friendly, but currently it's the only way to read Freedombone email on Android systems.
212
-
213
-Build script for OpenKeychain:
214
-
215
-#+BEGIN_SRC bash
216
-mkdir ~/develop
217
-cd ~/develop
218
-git clone https://github.com/bashrc/open-keychain
219
-cd open-keychain
220
-git checkout origin/bashrc/hidden-recipient-minimal
221
-git checkout -b bashrc/hidden-recipient-minimal
222
-cd tools
223
-nano build.sh
224
-#+END_SRC
225
-
226
-Then add the following:
227
-
228
-#+BEGIN_SRC bash
229
-#!/bin/bash
230
-
231
-# This script is intended to be used on Debian systems for building
232
-# the project. It has been tested with Debian 8
233
-
234
-USERNAME=$USER
235
-SIGNING_NAME='openkeychain'
236
-SDK_VERSION='r23.3.4'
237
-SDK_DIR=$HOME/android-sdk
238
-
239
-cd ..
240
-
241
-PROJECT_HOME=$(pwd)
242
-
243
-sudo apt-get install build-essential default-jdk \
244
-     lib32stdc++6 lib32z1 lib32z1-dev
245
-
246
-if [ ! -d $SDK_DIR ]; then
247
-    mkdir -p $SDK_DIR
248
-fi
249
-cd $SDK_DIR
250
-
251
-# download the SDK
252
-if [[ ! -f $SDK_DIR/android-sdk_$SDK_VERSION-linux.tgz ]]; then
253
-    wget https://dl.google.com/android/android-sdk_$SDK_VERSION-linux.tgz
254
-fi
255
-tar -xzvf android-sdk_$SDK_VERSION-linux.tgz
256
-SDK_DIR=$SDK_DIR/android-sdk-linux
257
-
258
-echo 'Check that you have the SDK tools installed for Android 22, SDK 21.1.2'
259
-
260
-export ANDROID_HOME=$SDK_DIR
261
-echo "sdk.dir=$SDK_DIR" > $ANDROID_HOME/local.properties
262
-export PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
263
-
264
-cd $SDK_DIR/tools
265
-./android sdk
266
-
267
-if [ ! -f $SDK_DIR/tools/android ]; then
268
-    echo "$SDK_DIR/tools/android not found"
269
-    exit -1
270
-fi
271
-cd $SDK_DIR
272
-chmod -R 0755 $SDK_DIR
273
-chmod a+rx $SDK_DIR/tools
274
-
275
-# android sdk
276
-cd $PROJECT_HOME
277
-git submodule init && git submodule update
278
-
279
-if [ ! -f $SDK_DIR/tools/templates/gradle/wrapper/gradlew ]; then
280
-    echo "$SDK_DIR/tools/templates/gradle/wrapper/gradlew not found"
281
-    exit -2
282
-fi
283
-. $PROJECT_HOME/gradlew assembleDebug
284
-
285
-# cleaning up
286
-cd $PROJECT_HOME/OpenKeychain/build/outputs/apk
287
-if [ ! -f OpenKeychain-debug.apk ]; then
288
-    echo 'OpenKeychain-debug.apk was not found'
289
-    exit -3
290
-fi
291
-
292
-echo 'Build script ended successfully'
293
-echo -n 'apk is available at: '
294
-echo "$PROJECT_HOME/OpenKeychain/build/outputs/apk/OpenKeychain-debug.apk"
295
-exit 0
296
-#+END_SRC
297
-
298
-Save and exit with *CTRL-o*, *CTRL-x*.
299
-
300
-#+BEGIN_SRC bash
301
-chmod +x build.sh
302
-./build.sh
303
-#+END_SRC
304
-
305
-Build script for K9:
306
-
307
-#+BEGIN_SRC bash
308
-cd ~/develop
309
-git clone https://github.com/k9mail/k-9
310
-cd k-9
311
-cd tools
312
-nano build.sh
313
-#+END_SRC
314
-
315
-Then add the following:
316
-
317
-#+BEGIN_SRC bash
318
-#!/bin/bash
319
-
320
-# This script is intended to be used on Debian systems for building
321
-# the project. It has been tested with Debian 8
322
-
323
-USERNAME=$USER
324
-SIGNING_NAME='k-9'
325
-SDK_VERSION='r24.3.3'
326
-SDK_DIR=$HOME/android-sdk
327
-
328
-cd ..
329
-
330
-PROJECT_HOME=$(pwd)
331
-
332
-sudo apt-get install build-essential default-jdk \
333
-     lib32stdc++6 lib32z1 lib32z1-dev
334
-
335
-if [ ! -d $SDK_DIR ]; then
336
-    mkdir -p $SDK_DIR
337
-fi
338
-cd $SDK_DIR
339
-
340
-# download the SDK
341
-if [ ! -f $SDK_DIR/android-sdk_$SDK_VERSION-linux.tgz ]; then
342
-    wget https://dl.google.com/android/android-sdk_$SDK_VERSION-linux.tgz
343
-    tar -xzvf android-sdk_$SDK_VERSION-linux.tgz
344
-fi
345
-SDK_DIR=$SDK_DIR/android-sdk-linux
346
-
347
-echo 'Check that you have the SDK tools installed for Android 17, SDK 19.1'
348
-if [ ! -f $SDK_DIR/tools/android ]; then
349
-    echo "$SDK_DIR/tools/android not found"
350
-    exit -1
351
-fi
352
-cd $SDK_DIR
353
-chmod -R 0755 $SDK_DIR
354
-chmod a+rx $SDK_DIR/tools
355
-
356
-ANDROID_HOME=$SDK_DIR
357
-echo "sdk.dir=$SDK_DIR" > $ANDROID_HOME/local.properties
358
-PATH=${PATH}:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
359
-
360
-android sdk
361
-cd $PROJECT_HOME
362
-
363
-if [ ! -f $SDK_DIR/tools/templates/gradle/wrapper/gradlew ]; then
364
-    echo "$SDK_DIR/tools/templates/gradle/wrapper/gradlew not found"
365
-    exit -2
366
-fi
367
-. $PROJECT_HOME/gradlew assembleDebug
368
-
369
-# cleaning up
370
-cd $PROJECT_HOME/k9mail/build/outputs/apk
371
-if [ ! -f k9mail-debug.apk ]; then
372
-    echo 'k9mail-debug.apk was not found'
373
-    exit -3
374
-fi
375
-echo 'Build script ended successfully'
376
-echo -n 'apk is available at: '
377
-echo "$PROJECT_HOME/k9mail/build/outputs/apk/k9mail-debug.apk"
378
-exit 0
379
-#+END_SRC
380
-
381
-Save and exit with *CTRL-o*, *CTRL-x*.
382
-
383
-#+BEGIN_SRC bash
384
-chmod +x build.sh
385
-./build.sh
386
-#+END_SRC
387
-
388
-*** Import your GPG key into OpenKeychain
389
-With your device connected to a laptop via USB cable and with USB debugging enabled on it:
390
-
391
-#+BEGIN_SRC bash
392
-ssh username@domainname -p 2222
393
-gpg --list-keys username@domainname
394
-gpg --output ~/public_key.gpg --armor --export KEY_ID
395
-gpg --output ~/private_key.gpg --armor --export-secret-key KEY_ID
396
-cat ~/public_key.gpg ~/private_key.gpg > ~/mygpgkey.asc
397
-exit
398
-scp -P 2222 username@domainname:/home/username/mygpgkey.asc ~/
399
-sudo apt-get install android-tools-adb
400
-push ~/mygpgkey.asc /sdcard/
401
-shred -zu ~/mygpgkey.asc
402
-#+END_SRC
403
-
404
-Then on your device select OpenKeychain and import your key from file.
405
-*** Incoming server settings
406
- * Select settings/account settings
407
- * Select Fetching mail/incoming server
408
- * Enter your username and password
409
- * IMAP server should be your domain name
410
- * Security: SSL/TLS (always)
411
- * Authentication: Plain
412
- * Port: 993
413
-*** Outgoing (SMTP) server settings
414
- * Select settings/account settings
415
- * Select Sending mail/outgoing server
416
- * Set SMTP server to your domain name
417
- * Set Security to SSL/TLS (always)
418
- * Set port to 465
419
- * Set authentication to PLAIN
420
- * Enter your username and password
421
- * Accept the SSL certificate
422
-*** Crypto settings
423
-Select *settings*, *Account settings*, *OpenKeychain* and then select your key and press *Allow*. You should now be able to decrypt emails by entering your GPG passphrase.
424
-
425
-You may also want to change the amount of time for which passwords are remembered, so that you don't need to enter your passphrase very often.
426
-*** Folders
427
-To view any new folders which you may have created using the /mailinglistrule/ script from your inbox press the *K9 icon* at the top left to access folders, then press the *menu button* and select *refresh folder list*.
428
-
429
-If your folder still doesn't show up then press the *menu button*, select *show folders* and select *all folders*.
430
-
199
+* Android apps
200
+Mobile devices have a reputation for being quite insecure, so it's recommended that you don't store emails or GPG keys on your phone. Instead [[./app_mailpile.html][install Mailpile]] and access your email via the webmail interface.
431
 * Subscribing to mailing lists
201
 * Subscribing to mailing lists
432
 To subscribe to a mailing list log in as your user (i.e. not the root user).
202
 To subscribe to a mailing list log in as your user (i.e. not the root user).
433
 
203
 
452
 #+END_SRC
222
 #+END_SRC
453
 
223
 
454
 Select /Administrator controls/ then *Email filtering rules* then *Block/Unblock and email address* or *Block/Unblock email with subject line*. Also see the manpage for *freedombone-ignore*.
224
 Select /Administrator controls/ then *Email filtering rules* then *Block/Unblock and email address* or *Block/Unblock email with subject line*. Also see the manpage for *freedombone-ignore*.
455
-* Your own mailing list
456
-If you want to set up a public mailing list then when installing the system remember to set the *PUBLIC_MAILING_LIST* variable within *freedombone.cfg* to the name of your list. The name should have no spaces in it. Public mailing lists are unencrypted so anyone will be able to read the contents, including non subscribers.
457
-
458
-To subscribe to your list send a cleartext email to:
459
-
460
-#+BEGIN_SRC bash
461
-mymailinglistname+subscribe@domainname
462
-#+END_SRC
463
-
464
-Tip: When using the Mutt email client if you want to send an email in cleartext then press *p* (for PGP) on the sending screen and select *clear*. Unsecure email is treated as being the exception rather than the default.
465
-
466
-#+BEGIN_EXPORT html
467
-<center>
468
-Return to the <a href="index.html">home page</a>
469
-</center>
470
-#+END_EXPORT
225
+* Using I2P for email transport
226
+For the most paranoid use cases it is also possible to use I2P as an email transport mechanism. This will of course require the people you're communicating with to have a similar setup in place. For details see the [[./app_bdsmail.html][bdsmail app]]. An advantage of this is that it's very unlikely that your email will get blocked. The disadvantage is that few others will be capable of receiving email this way, and it's only really usable via the Mutt email client.

+ 21
- 0
doc/EN/users.org View File

1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, debian, beaglebone, users
5
+#+DESCRIPTION: Adding or removing users
6
+#+OPTIONS: ^:nil toc:nil
7
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="freedombone.css" />
8
+
9
+#+BEGIN_CENTER
10
+[[file:images/logo.png]]
11
+#+END_CENTER
12
+
13
+Log into the system with:
14
+
15
+#+BEGIN_SRC bash
16
+ssh username@domainname -p 2222
17
+#+END_SRC
18
+
19
+Select *Administrator controls* then *User Management*.
20
+
21
+[[file:images/controlpanel/control_panel_manage_users.jpg]]

BIN
img/bbb3.png View File


BIN
img/bios_boot_usb.jpg View File


BIN
img/laptop_router.jpg View File


BIN
img/pleroma_register.jpg View File


BIN
img/port_forwarding.png View File


BIN
img/tusky.jpg View File


BIN
man/freedombone-image.1.gz View File


+ 6
- 0
src/freedombone View File

77
     SOCIALINSTANCE='postactiv'
77
     SOCIALINSTANCE='postactiv'
78
 fi
78
 fi
79
 
79
 
80
+if [[ "$command_options" == "menuconfig-pleroma" ]]; then
81
+    MINIMAL_INSTALL="yes"
82
+    ONION_ONLY="no"
83
+    SOCIALINSTANCE='pleroma'
84
+fi
85
+
80
 if [ ! "$CONFIGURATION_FILE" ]; then
86
 if [ ! "$CONFIGURATION_FILE" ]; then
81
     CONFIGURATION_FILE="$HOME/${PROJECT_NAME}.cfg"
87
     CONFIGURATION_FILE="$HOME/${PROJECT_NAME}.cfg"
82
 fi
88
 fi

+ 11
- 0
src/freedombone-app-gnusocial View File

611
     if grep -q 'gnusocial-firewall' /etc/crontab; then
611
     if grep -q 'gnusocial-firewall' /etc/crontab; then
612
         sed -i '/gnusocial-firewall/d' /etc/crontab
612
         sed -i '/gnusocial-firewall/d' /etc/crontab
613
     fi
613
     fi
614
+    sed -i 's|mysqli.allow_persistent.*|mysqli.allow_persistent = On|g' /etc/php/7.0/cli/php.ini
615
+    sed -i 's|mysqli.reconnect.*|mysqli.reconnect = Off|g' /etc/php/7.0/cli/php.ini
614
 
616
 
615
     function_check remove_ddns_domain
617
     function_check remove_ddns_domain
616
     remove_ddns_domain "$GNUSOCIAL_DOMAIN_NAME"
618
     remove_ddns_domain "$GNUSOCIAL_DOMAIN_NAME"
888
     # This improves performance
890
     # This improves performance
889
     sed -i "s|//\$config\\['db'\\]\\['schemacheck'\\].*|\$config\\['db'\\]\\['schemacheck'\\] = 'script';|g" "$gnusocial_config_file"
891
     sed -i "s|//\$config\\['db'\\]\\['schemacheck'\\].*|\$config\\['db'\\]\\['schemacheck'\\] = 'script';|g" "$gnusocial_config_file"
890
 
892
 
893
+    # remove the install script
894
+    if [ -f "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/install.php" ]; then
895
+        rm "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/install.php"
896
+    fi
897
+
898
+    # php configuration
899
+    sed -i 's|mysqli.allow_persistent.*|mysqli.allow_persistent = On|g' /etc/php/7.0/cli/php.ini
900
+    sed -i 's|mysqli.reconnect.*|mysqli.reconnect = On|g' /etc/php/7.0/cli/php.ini
901
+
891
     systemctl restart mariadb
902
     systemctl restart mariadb
892
     systemctl restart php7.0-fpm
903
     systemctl restart php7.0-fpm
893
     systemctl restart nginx
904
     systemctl restart nginx

+ 4
- 26
src/freedombone-app-pleroma View File

47
 PLEROMA_PORT=4000
47
 PLEROMA_PORT=4000
48
 PLEROMA_ONION_PORT=8011
48
 PLEROMA_ONION_PORT=8011
49
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
49
 PLEROMA_REPO="https://git.pleroma.social/pleroma/pleroma.git"
50
-PLEROMA_COMMIT='b0d242cd9220c22c0af7c153182a51d8e40d34ba'
50
+PLEROMA_COMMIT='312a8783f8dbf563ea9d5af3cc7991ca553dc286'
51
 PLEROMA_ADMIN_PASSWORD=
51
 PLEROMA_ADMIN_PASSWORD=
52
 PLEROMA_DIR=/etc/pleroma
52
 PLEROMA_DIR=/etc/pleroma
53
 PLEROMA_SECRET_KEY=""
53
 PLEROMA_SECRET_KEY=""
769
     expire_pleroma_posts "$PLEROMA_DOMAIN_NAME" "$PLEROMA_EXPIRE_MONTHS"
769
     expire_pleroma_posts "$PLEROMA_DOMAIN_NAME" "$PLEROMA_EXPIRE_MONTHS"
770
     create_pleroma_blocklist
770
     create_pleroma_blocklist
771
 
771
 
772
+    chown -R pleroma:pleroma $PLEROMA_DIR
773
+
772
     systemctl restart pleroma
774
     systemctl restart pleroma
773
 }
775
 }
774
 
776
 
902
     rm /etc/systemd/system/pleroma.service
904
     rm /etc/systemd/system/pleroma.service
903
 
905
 
904
     userdel pleroma
906
     userdel pleroma
905
-    #apt-get -yq remove esl-erlang elixir erlang-xmerl erlang-dev erlang-parsetools
907
+    #remove_elixir
906
 
908
 
907
     function_check remove_nodejs
909
     function_check remove_nodejs
908
     remove_nodejs pleroma-backend
910
     remove_nodejs pleroma-backend
936
     remove_ddns_domain "$PLEROMA_DOMAIN_NAME"
938
     remove_ddns_domain "$PLEROMA_DOMAIN_NAME"
937
 }
939
 }
938
 
940
 
939
-function install_elixir {
940
-    apt-get -yq install wget build-essential
941
-
942
-    if [ ! -d "$INSTALL_DIR" ]; then
943
-        mkdir -p "$INSTALL_DIR"
944
-    fi
945
-
946
-    cd "$INSTALL_DIR" || exit 768345274
947
-    erlang_package=erlang-solutions_1.0_all.deb
948
-    wget https://packages.erlang-solutions.com/$erlang_package
949
-    if [ ! -f "$INSTALL_DIR/$erlang_package" ]; then
950
-        exit 72853
951
-    fi
952
-    dpkg -i $erlang_package
953
-    apt-get -yq update
954
-    apt-get -yq install esl-erlang
955
-    apt-get -yq install elixir erlang-xmerl erlang-dev erlang-parsetools
956
-
957
-    if [ ! -f /usr/local/bin/mix ]; then
958
-        echo $'/usr/local/bin/mix not found after elixir installation'
959
-        exit 629352
960
-    fi
961
-}
962
-
963
 function install_pleroma {
941
 function install_pleroma {
964
     if [ ! $ONION_ONLY ]; then
942
     if [ ! $ONION_ONLY ]; then
965
         ONION_ONLY='no'
943
         ONION_ONLY='no'

+ 9
- 0
src/freedombone-app-postactiv View File

624
     remove_backup_database_local postactiv
624
     remove_backup_database_local postactiv
625
 
625
 
626
     sed -i '/postactiv-firewall/d' /etc/crontab
626
     sed -i '/postactiv-firewall/d' /etc/crontab
627
+    sed -i 's|mysqli.allow_persistent.*|mysqli.allow_persistent = On|g' /etc/php/7.0/cli/php.ini
628
+    sed -i 's|mysqli.reconnect.*|mysqli.reconnect = Off|g' /etc/php/7.0/cli/php.ini
627
 
629
 
628
     function_check remove_ddns_domain
630
     function_check remove_ddns_domain
629
     remove_ddns_domain "$POSTACTIV_DOMAIN_NAME"
631
     remove_ddns_domain "$POSTACTIV_DOMAIN_NAME"
653
 
655
 
654
     apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
656
     apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
655
     apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
657
     apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
658
+    apt-get -yq install php7.0-bcmath php7.0-curl php7.0-exif php7.0-gd
659
+    apt-get -yq install php7.0-intl php7.0-mbstring php7.0-mysqlnd
660
+    apt-get -yq install php7.0-opcache php7.0-readline php7.0-xmlwriter
656
 
661
 
657
     if [ ! -d "/var/www/$POSTACTIV_DOMAIN_NAME" ]; then
662
     if [ ! -d "/var/www/$POSTACTIV_DOMAIN_NAME" ]; then
658
         mkdir "/var/www/$POSTACTIV_DOMAIN_NAME"
663
         mkdir "/var/www/$POSTACTIV_DOMAIN_NAME"
905
         rm "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs/install.php"
910
         rm "/var/www/$POSTACTIV_DOMAIN_NAME/htdocs/install.php"
906
     fi
911
     fi
907
 
912
 
913
+    # php configuration
914
+    sed -i 's|mysqli.allow_persistent.*|mysqli.allow_persistent = On|g' /etc/php/7.0/cli/php.ini
915
+    sed -i 's|mysqli.reconnect.*|mysqli.reconnect = On|g' /etc/php/7.0/cli/php.ini
916
+
908
     systemctl restart mariadb
917
     systemctl restart mariadb
909
     systemctl restart php7.0-fpm
918
     systemctl restart php7.0-fpm
910
     systemctl restart nginx
919
     systemctl restart nginx

+ 9
- 0
src/freedombone-config View File

1142
         install_postactiv
1142
         install_postactiv
1143
     fi
1143
     fi
1144
 
1144
 
1145
+    if [[ "$SOCIALINSTANCE" == 'pleroma' ]]; then
1146
+        PLEROMA_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
1147
+        PLEROMA_CODE=$DEFAULT_DOMAIN_CODE
1148
+        write_config_param "PLEROMA_DOMAIN_NAME" "$PLEROMA_DOMAIN_NAME"
1149
+        write_config_param "PLEROMA_CODE" "$PLEROMA_CODE"
1150
+        write_config_param "SOCIALINSTANCE" "$SOCIALINSTANCE"
1151
+        install_pleroma
1152
+    fi
1153
+
1145
     # delete the temporary configuration file
1154
     # delete the temporary configuration file
1146
     if [ -f temp.cfg ]; then
1155
     if [ -f temp.cfg ]; then
1147
         shred -zu temp.cfg
1156
         shred -zu temp.cfg

+ 1
- 1
src/freedombone-image View File

563
     IMAGE_NAME="${IMAGE_NAME}-amnesic"
563
     IMAGE_NAME="${IMAGE_NAME}-amnesic"
564
 fi
564
 fi
565
 
565
 
566
-if [[ "$SOCIALINSTANCE" == "gnusocial" || "$SOCIALINSTANCE" == "postactiv" ]]; then
566
+if [[ "$SOCIALINSTANCE" == "gnusocial" || "$SOCIALINSTANCE" == "postactiv" || "$SOCIALINSTANCE" == "pleroma" ]]; then
567
     IMAGE_NAME="${IMAGE_NAME}-${SOCIALINSTANCE}"
567
     IMAGE_NAME="${IMAGE_NAME}-${SOCIALINSTANCE}"
568
 fi
568
 fi
569
 
569
 

+ 11
- 9
src/freedombone-image-customise View File

395
             if [[ "$SOCIALINSTANCE" == "postactiv" ]]; then
395
             if [[ "$SOCIALINSTANCE" == "postactiv" ]]; then
396
                 echo "    ${PROJECT_NAME} menuconfig-postactiv" >> "$rootdir/root/.bashrc"
396
                 echo "    ${PROJECT_NAME} menuconfig-postactiv" >> "$rootdir/root/.bashrc"
397
             else
397
             else
398
-                if [[ "$ONION_ONLY" == "no" ]]; then
399
-                    if [[ "$MINIMAL_INSTALL" == "no" ]]; then
400
-                        echo "    ${PROJECT_NAME} menuconfig-full" >> "$rootdir/root/.bashrc"
398
+                if [[ "$SOCIALINSTANCE" == "pleroma" ]]; then
399
+                    echo "    ${PROJECT_NAME} menuconfig-pleroma" >> "$rootdir/root/.bashrc"
400
+                else
401
+                    if [[ "$ONION_ONLY" == "no" ]]; then
402
+                        if [[ "$MINIMAL_INSTALL" == "no" ]]; then
403
+                            echo "    ${PROJECT_NAME} menuconfig-full" >> "$rootdir/root/.bashrc"
404
+                        else
405
+                            echo "    ${PROJECT_NAME} menuconfig" >> "$rootdir/root/.bashrc"
406
+                        fi
401
                     else
407
                     else
402
-                        echo "    ${PROJECT_NAME} menuconfig" >> "$rootdir/root/.bashrc"
408
+                        echo "    ${PROJECT_NAME} menuconfig-onion" >> "$rootdir/root/.bashrc"
403
                     fi
409
                     fi
404
-                else
405
-                    echo "    ${PROJECT_NAME} menuconfig-onion" >> "$rootdir/root/.bashrc"
406
                 fi
410
                 fi
407
             fi
411
             fi
408
         fi
412
         fi
1917
 
1921
 
1918
     if [[ "$SOCIALINSTANCE" == "pleroma" ]]; then
1922
     if [[ "$SOCIALINSTANCE" == "pleroma" ]]; then
1919
         git clone "$PLEROMA_REPO" "$rootdir/repos/pleroma"
1923
         git clone "$PLEROMA_REPO" "$rootdir/repos/pleroma"
1920
-        git clone "$QVITTER_THEME_REPO" "$rootdir/repos/qvitter"
1921
-        git clone "$PLEROMA_FRONTEND_REPO" "$rootdir/repos/pleroma-fe"
1922
         return
1924
         return
1923
     fi
1925
     fi
1924
 
1926
 
1953
     git clone "$HUBZILLA_REPO" "$rootdir/repos/hubzilla"
1955
     git clone "$HUBZILLA_REPO" "$rootdir/repos/hubzilla"
1954
     git clone "$HUBZILLA_ADDONS_REPO" "$rootdir/repos/hubzilla-addons"
1956
     git clone "$HUBZILLA_ADDONS_REPO" "$rootdir/repos/hubzilla-addons"
1955
     git clone "$KOEL_REPO" "$rootdir/repos/koel"
1957
     git clone "$KOEL_REPO" "$rootdir/repos/koel"
1956
-    #git clone "$LIBREVAULT_REPO" "$rootdir/repos/librevault"
1957
     git clone "$LYCHEE_REPO" "$rootdir/repos/lychee"
1958
     git clone "$LYCHEE_REPO" "$rootdir/repos/lychee"
1958
     git clone "$MAILPILE_REPO" "$rootdir/repos/mailpile"
1959
     git clone "$MAILPILE_REPO" "$rootdir/repos/mailpile"
1959
     git clone "$MATRIX_REPO" "$rootdir/repos/matrix"
1960
     git clone "$MATRIX_REPO" "$rootdir/repos/matrix"
2161
 atheros_wifi
2162
 atheros_wifi
2162
 continue_installation
2163
 continue_installation
2163
 image_install_nodejs
2164
 image_install_nodejs
2165
+image_install_elixir
2164
 initialise_mesh
2166
 initialise_mesh
2165
 configure_wifi
2167
 configure_wifi
2166
 configure_user_interface
2168
 configure_user_interface

+ 100
- 0
src/freedombone-utils-elixir View File

1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Elixir functions
12
+#
13
+# There's a problem with installing this onto mesh images, which is
14
+# that qemu appears to run out of RAM when using yarn to add webpack.
15
+#
16
+# License
17
+# =======
18
+#
19
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
20
+#
21
+# This program is free software: you can redistribute it and/or modify
22
+# it under the terms of the GNU Affero General Public License as published by
23
+# the Free Software Foundation, either version 3 of the License, or
24
+# (at your option) any later version.
25
+#
26
+# This program is distributed in the hope that it will be useful,
27
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
28
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29
+# GNU Affero General Public License for more details.
30
+#
31
+# You should have received a copy of the GNU Affero General Public License
32
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
33
+
34
+erlang_package='erlang-solutions_1.0_all.deb'
35
+
36
+function remove_elixir {
37
+    apt-get -yq remove elixir erlang-xmerl erlang-dev erlang-parsetools
38
+    apt-get -yq remove esl-erlang
39
+}
40
+
41
+function install_elixir {
42
+    if [ -f /usr/local/bin/mix ]; then
43
+        return
44
+    fi
45
+
46
+    apt-get -yq install wget build-essential
47
+
48
+    if [ ! -d "$INSTALL_DIR" ]; then
49
+        mkdir -p "$INSTALL_DIR"
50
+    fi
51
+
52
+    cd "$INSTALL_DIR" || exit 768345274
53
+    wget https://packages.erlang-solutions.com/$erlang_package
54
+    if [ ! -f "$INSTALL_DIR/$erlang_package" ]; then
55
+        exit 72853
56
+    fi
57
+    dpkg -i $erlang_package
58
+    apt-get -yq update
59
+    apt-get -yq install esl-erlang
60
+    apt-get -yq install elixir erlang-xmerl erlang-dev erlang-parsetools
61
+
62
+    if [ ! -f /usr/local/bin/mix ]; then
63
+        echo $'/usr/local/bin/mix not found after elixir installation'
64
+        exit 629352
65
+    fi
66
+}
67
+
68
+function image_install_elixir {
69
+    if [[ $VARIANT == "mesh"* ]]; then
70
+        return
71
+    fi
72
+
73
+    # shellcheck disable=SC2154
74
+    chroot "$rootdir" apt-get -yq install wget build-essential
75
+
76
+    if [ ! -d "$rootdir$INSTALL_DIR" ]; then
77
+        mkdir -p "$rootdir$INSTALL_DIR"
78
+    fi
79
+
80
+    { echo '#!/bin/bash';
81
+      echo "cd $INSTALL_DIR || exit 1";
82
+      echo "erlang_package=$erlang_package";
83
+      echo "wget https://packages.erlang-solutions.com/\$erlang_package";
84
+      echo "if [ ! -f \"$INSTALL_DIR/\$erlang_package\" ]; then";
85
+      echo '    exit 2';
86
+      echo 'fi';
87
+      echo "dpkg -i \$erlang_package"; } > "$rootdir/usr/bin/install_elixir"
88
+    chmod +x "$rootdir/usr/bin/install_elixir"
89
+    chroot "$rootdir" /usr/bin/install_elixir
90
+    chroot "$rootdir" apt-get -yq update
91
+    chroot "$rootdir" apt-get -yq install esl-erlang
92
+    chroot "$rootdir" apt-get -yq install elixir erlang-xmerl erlang-dev erlang-parsetools
93
+
94
+    if [ ! -f "$rootdir/usr/local/bin/mix" ]; then
95
+        echo $'/usr/local/bin/mix not found after elixir installation'
96
+        exit 629352
97
+    fi
98
+}
99
+
100
+# NOTE: deliberately no exit 0

+ 29
- 13
website/EN/app_pleroma.html View File

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-02-21 Wed 16:16 -->
6
+<!-- 2018-03-13 Tue 12:58 -->
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>
274
 </div>
274
 </div>
275
 </div>
275
 </div>
276
 
276
 
277
-<div id="outline-container-orgb538b49" class="outline-2">
278
-<h2 id="orgb538b49">Installation</h2>
279
-<div class="outline-text-2" id="text-orgb538b49">
277
+<div id="outline-container-org0494ed4" class="outline-2">
278
+<h2 id="org0494ed4">Installation</h2>
279
+<div class="outline-text-2" id="text-org0494ed4">
280
 <p>
280
 <p>
281
 Log into your system with:
281
 Log into your system with:
282
 </p>
282
 </p>
296
 </div>
296
 </div>
297
 </div>
297
 </div>
298
 
298
 
299
-<div id="outline-container-org9e3d185" class="outline-2">
300
-<h2 id="org9e3d185">Initial setup</h2>
301
-<div class="outline-text-2" id="text-org9e3d185">
299
+<div id="outline-container-org264cd33" class="outline-2">
300
+<h2 id="org264cd33">Initial setup</h2>
301
+<div class="outline-text-2" id="text-org264cd33">
302
 <p>
302
 <p>
303
 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.
303
 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.
304
 </p>
304
 </p>
309
 </div>
309
 </div>
310
 </div>
310
 </div>
311
 
311
 
312
-<div id="outline-container-orgaceec12" class="outline-2">
313
-<h2 id="orgaceec12">Mastodon user interface</h2>
314
-<div class="outline-text-2" id="text-orgaceec12">
312
+<div id="outline-container-org3b7289f" class="outline-2">
313
+<h2 id="org3b7289f">Mastodon user interface</h2>
314
+<div class="outline-text-2" id="text-org3b7289f">
315
 <p>
315
 <p>
316
 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.
316
 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.
317
 </p>
317
 </p>
326
 </div>
326
 </div>
327
 </div>
327
 </div>
328
 
328
 
329
-<div id="outline-container-org9162549" class="outline-2">
330
-<h2 id="org9162549">Blocking controls</h2>
331
-<div class="outline-text-2" id="text-org9162549">
329
+<div id="outline-container-orgb42a82b" class="outline-2">
330
+<h2 id="orgb42a82b">Mobile apps</h2>
331
+<div class="outline-text-2" id="text-orgb42a82b">
332
+<p>
333
+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.
334
+</p>
335
+
336
+<div class="org-center">
337
+
338
+<div class="figure">
339
+<p><img src="images/tusky.jpg" alt="tusky.jpg" />
340
+</p>
341
+</div>
342
+</div>
343
+</div>
344
+</div>
345
+<div id="outline-container-orgf39f4e5" class="outline-2">
346
+<h2 id="orgf39f4e5">Blocking controls</h2>
347
+<div class="outline-text-2" id="text-orgf39f4e5">
332
 <div class="org-center">
348
 <div class="org-center">
333
 
349
 
334
 <div class="figure">
350
 <div class="figure">

+ 167
- 252
website/EN/apps.html View File

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-02-21 Wed 15:05 -->
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="List of apps available on freedombone"
6
+<title></title>
7
+<!-- 2018-03-10 Sat 21:13 -->
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="List of apps available on freedombone"
13
  />
12
  />
14
-<meta name="keywords" content="freedombone, apps" />
13
+<meta  name="keywords" content="freedombone, apps" />
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">
239
-<div class="org-center">
147
+<h1 class="title"></h1>
148
+<div class="center">
240
 
149
 
241
 <div class="figure">
150
 <div class="figure">
242
 <p><img src="images/logo.png" alt="logo.png" />
151
 <p><img src="images/logo.png" alt="logo.png" />
244
 </div>
153
 </div>
245
 </div>
154
 </div>
246
 
155
 
247
-<center><h1>Apps</h1></center>
248
-
249
 <blockquote>
156
 <blockquote>
250
 <p>
157
 <p>
251
 "<i>In times of aggressive corporatization, increasing enclosure of communication spaces, and blanket surveillance, emancipatory communication practices appear to be particularly well suited to offer concrete alternatives to activists and citizens alike</i>" &#x2013; Stefania Milan
158
 "<i>In times of aggressive corporatization, increasing enclosure of communication spaces, and blanket surveillance, emancipatory communication practices appear to be particularly well suited to offer concrete alternatives to activists and citizens alike</i>" &#x2013; Stefania Milan
256
 The base install of the system just contains an email server and Mutt client, but not much else. In addition from within the <b>Administrator control panel</b> under <b>Add/remove apps</b> the following are installable. This list only applies on the home server version, with the mesh network version having a different and smaller set of apps.
163
 The base install of the system just contains an email server and Mutt client, but not much else. In addition from within the <b>Administrator control panel</b> under <b>Add/remove apps</b> the following are installable. This list only applies on the home server version, with the mesh network version having a different and smaller set of apps.
257
 </p>
164
 </p>
258
 
165
 
259
-<div class="org-center">
166
+<div class="center">
260
 
167
 
261
 <div class="figure">
168
 <div class="figure">
262
 <p><img src="images/controlpanel/control_panel_apps.jpg" alt="control_panel_apps.jpg" />
169
 <p><img src="images/controlpanel/control_panel_apps.jpg" alt="control_panel_apps.jpg" />
265
 </div>
172
 </div>
266
 
173
 
267
 
174
 
268
-<div id="outline-container-orga565b08" class="outline-2">
269
-<h2 id="orga565b08">Akaunting</h2>
270
-<div class="outline-text-2" id="text-orga565b08">
175
+<div id="outline-container-sec-1" class="outline-2">
176
+<h2 id="sec-1">Akaunting</h2>
177
+<div class="outline-text-2" id="text-1">
271
 <p>
178
 <p>
272
 A web based accounts system for small businesses or freelancers.
179
 A web based accounts system for small businesses or freelancers.
273
 </p>
180
 </p>
277
 </p>
184
 </p>
278
 </div>
185
 </div>
279
 </div>
186
 </div>
280
-<div id="outline-container-orga6c3fd1" class="outline-2">
281
-<h2 id="orga6c3fd1">BDS Mail</h2>
282
-<div class="outline-text-2" id="text-orga6c3fd1">
187
+<div id="outline-container-sec-2" class="outline-2">
188
+<h2 id="sec-2">BDS Mail</h2>
189
+<div class="outline-text-2" id="text-2">
283
 <p>
190
 <p>
284
 It's like ordinary email, but with <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport mechanism.
191
 It's like ordinary email, but with <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport mechanism.
285
 </p>
192
 </p>
289
 </p>
196
 </p>
290
 </div>
197
 </div>
291
 </div>
198
 </div>
292
-<div id="outline-container-org38c41a8" class="outline-2">
293
-<h2 id="org38c41a8">CryptPad</h2>
294
-<div class="outline-text-2" id="text-org38c41a8">
199
+<div id="outline-container-sec-3" class="outline-2">
200
+<h2 id="sec-3">CryptPad</h2>
201
+<div class="outline-text-2" id="text-3">
295
 <p>
202
 <p>
296
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
203
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
297
 </p>
204
 </p>
301
 </p>
208
 </p>
302
 </div>
209
 </div>
303
 </div>
210
 </div>
304
-<div id="outline-container-org2b6d6ac" class="outline-2">
305
-<h2 id="org2b6d6ac">DLNA</h2>
306
-<div class="outline-text-2" id="text-org2b6d6ac">
211
+<div id="outline-container-sec-4" class="outline-2">
212
+<h2 id="sec-4">DLNA</h2>
213
+<div class="outline-text-2" id="text-4">
307
 <p>
214
 <p>
308
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
215
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
309
 </p>
216
 </p>
313
 </p>
220
 </p>
314
 </div>
221
 </div>
315
 </div>
222
 </div>
316
-<div id="outline-container-org6bd9e13" class="outline-2">
317
-<h2 id="org6bd9e13">Dokuwiki</h2>
318
-<div class="outline-text-2" id="text-org6bd9e13">
223
+<div id="outline-container-sec-5" class="outline-2">
224
+<h2 id="sec-5">Dokuwiki</h2>
225
+<div class="outline-text-2" id="text-5">
319
 <p>
226
 <p>
320
 A databaseless wiki system.
227
 A databaseless wiki system.
321
 </p>
228
 </p>
325
 </p>
232
 </p>
326
 </div>
233
 </div>
327
 </div>
234
 </div>
328
-<div id="outline-container-orgfb65777" class="outline-2">
329
-<h2 id="orgfb65777">Edith</h2>
330
-<div class="outline-text-2" id="text-orgfb65777">
235
+<div id="outline-container-sec-6" class="outline-2">
236
+<h2 id="sec-6">Edith</h2>
237
+<div class="outline-text-2" id="text-6">
331
 <p>
238
 <p>
332
 Extremely simple and distraction-free notes system.
239
 Extremely simple and distraction-free notes system.
333
 </p>
240
 </p>
337
 </p>
244
 </p>
338
 </div>
245
 </div>
339
 </div>
246
 </div>
340
-<div id="outline-container-orga976ffd" class="outline-2">
341
-<h2 id="orga976ffd">Emacs</h2>
342
-<div class="outline-text-2" id="text-orga976ffd">
247
+<div id="outline-container-sec-7" class="outline-2">
248
+<h2 id="sec-7">Emacs</h2>
249
+<div class="outline-text-2" id="text-7">
343
 <p>
250
 <p>
344
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
251
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
345
 </p>
252
 </p>
349
 </p>
256
 </p>
350
 </div>
257
 </div>
351
 </div>
258
 </div>
352
-<div id="outline-container-orgb91b541" class="outline-2">
353
-<h2 id="orgb91b541">Etherpad</h2>
354
-<div class="outline-text-2" id="text-orgb91b541">
259
+<div id="outline-container-sec-8" class="outline-2">
260
+<h2 id="sec-8">Email Server</h2>
261
+<div class="outline-text-2" id="text-8">
262
+<p>
263
+Since many apps require email registration an email server is installed by default. You can find advice on using the email system <a href="./usage_email.html">here</a>.
264
+</p>
265
+</div>
266
+</div>
267
+<div id="outline-container-sec-9" class="outline-2">
268
+<h2 id="sec-9">Etherpad</h2>
269
+<div class="outline-text-2" id="text-9">
355
 <p>
270
 <p>
356
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
271
 Collaborate on creating documents in real time. Maybe you're planning a holiday with other family members or creating documentation for a Free Software project along with other volunteers. Etherpad is hard to beat for simplicity and speed. Only users of the system will be able to access it.
357
 </p>
272
 </p>
361
 </p>
276
 </p>
362
 </div>
277
 </div>
363
 </div>
278
 </div>
364
-<div id="outline-container-org78a1e7a" class="outline-2">
365
-<h2 id="org78a1e7a">Federated wiki</h2>
366
-<div class="outline-text-2" id="text-org78a1e7a">
279
+<div id="outline-container-sec-10" class="outline-2">
280
+<h2 id="sec-10">Federated wiki</h2>
281
+<div class="outline-text-2" id="text-10">
367
 <p>
282
 <p>
368
 A new approach to creating wiki content.
283
 A new approach to creating wiki content.
369
 </p>
284
 </p>
373
 </p>
288
 </p>
374
 </div>
289
 </div>
375
 </div>
290
 </div>
376
-<div id="outline-container-org61b2eec" class="outline-2">
377
-<h2 id="org61b2eec">Friendica</h2>
378
-<div class="outline-text-2" id="text-org61b2eec">
291
+<div id="outline-container-sec-11" class="outline-2">
292
+<h2 id="sec-11">Friendica</h2>
293
+<div class="outline-text-2" id="text-11">
379
 <p>
294
 <p>
380
 Federated social network system.
295
 Federated social network system.
381
 </p>
296
 </p>
385
 </p>
300
 </p>
386
 </div>
301
 </div>
387
 </div>
302
 </div>
388
-<div id="outline-container-org6909894" class="outline-2">
389
-<h2 id="org6909894">Ghost</h2>
390
-<div class="outline-text-2" id="text-org6909894">
303
+<div id="outline-container-sec-12" class="outline-2">
304
+<h2 id="sec-12">Ghost</h2>
305
+<div class="outline-text-2" id="text-12">
391
 <p>
306
 <p>
392
 Modern looking blogging system.
307
 Modern looking blogging system.
393
 </p>
308
 </p>
397
 </p>
312
 </p>
398
 </div>
313
 </div>
399
 </div>
314
 </div>
400
-<div id="outline-container-orgd3295e2" class="outline-2">
401
-<h2 id="orgd3295e2">GNU Social</h2>
402
-<div class="outline-text-2" id="text-orgd3295e2">
315
+<div id="outline-container-sec-13" class="outline-2">
316
+<h2 id="sec-13">GNU Social</h2>
317
+<div class="outline-text-2" id="text-13">
403
 <p>
318
 <p>
404
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
319
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
405
 </p>
320
 </p>
409
 </p>
324
 </p>
410
 </div>
325
 </div>
411
 </div>
326
 </div>
412
-<div id="outline-container-orgf9c3325" class="outline-2">
413
-<h2 id="orgf9c3325">Gogs</h2>
414
-<div class="outline-text-2" id="text-orgf9c3325">
327
+<div id="outline-container-sec-14" class="outline-2">
328
+<h2 id="sec-14">Gogs</h2>
329
+<div class="outline-text-2" id="text-14">
415
 <p>
330
 <p>
416
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
331
 Lightweight git project hosting system. You can mirror projects from Github, or if Github turns evil then just host your own projects while retaining the familiar <i>fork-and-pull</i> workflow. If you can use Github then you can also use Gogs.
417
 </p>
332
 </p>
421
 </p>
336
 </p>
422
 </div>
337
 </div>
423
 </div>
338
 </div>
424
-<div id="outline-container-orgfde0d6d" class="outline-2">
425
-<h2 id="orgfde0d6d">HTMLy</h2>
426
-<div class="outline-text-2" id="text-orgfde0d6d">
339
+<div id="outline-container-sec-15" class="outline-2">
340
+<h2 id="sec-15">HTMLy</h2>
341
+<div class="outline-text-2" id="text-15">
427
 <p>
342
 <p>
428
 Databaseless blogging system. Quite simple and with a markdown-like format.
343
 Databaseless blogging system. Quite simple and with a markdown-like format.
429
 </p>
344
 </p>
433
 </p>
348
 </p>
434
 </div>
349
 </div>
435
 </div>
350
 </div>
436
-<div id="outline-container-org28717c9" class="outline-2">
437
-<h2 id="org28717c9">Hubzilla</h2>
438
-<div class="outline-text-2" id="text-org28717c9">
351
+<div id="outline-container-sec-16" class="outline-2">
352
+<h2 id="sec-16">Hubzilla</h2>
353
+<div class="outline-text-2" id="text-16">
439
 <p>
354
 <p>
440
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
355
 Web publishing platform with social network like features and good privacy controls so that it's possible to specify who can see which content. Includes photo albums, calendar, wiki and file storage.
441
 </p>
356
 </p>
445
 </p>
360
 </p>
446
 </div>
361
 </div>
447
 </div>
362
 </div>
448
-<div id="outline-container-org8b67211" class="outline-2">
449
-<h2 id="org8b67211">Icecast media stream</h2>
450
-<div class="outline-text-2" id="text-org8b67211">
363
+<div id="outline-container-sec-17" class="outline-2">
364
+<h2 id="sec-17">Icecast media stream</h2>
365
+<div class="outline-text-2" id="text-17">
451
 <p>
366
 <p>
452
 Make your own internet radio station.
367
 Make your own internet radio station.
453
 </p>
368
 </p>
457
 </p>
372
 </p>
458
 </div>
373
 </div>
459
 </div>
374
 </div>
460
-<div id="outline-container-org620e0a2" class="outline-2">
461
-<h2 id="org620e0a2">IRC Server (ngirc)</h2>
462
-<div class="outline-text-2" id="text-org620e0a2">
375
+<div id="outline-container-sec-18" class="outline-2">
376
+<h2 id="sec-18">IRC Server (ngirc)</h2>
377
+<div class="outline-text-2" id="text-18">
463
 <p>
378
 <p>
464
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
379
 Run your own IRC chat channel which can be secured with a password and accessible via an onion address. A bouncer is included so that you can receive messages sent while you were offline. Works with Hexchat and other popular clients.
465
 </p>
380
 </p>
469
 </p>
384
 </p>
470
 </div>
385
 </div>
471
 </div>
386
 </div>
472
-<div id="outline-container-orgaf23bf9" class="outline-2">
473
-<h2 id="orgaf23bf9">Jitsi Meet</h2>
474
-<div class="outline-text-2" id="text-orgaf23bf9">
387
+<div id="outline-container-sec-19" class="outline-2">
388
+<h2 id="sec-19">Jitsi Meet</h2>
389
+<div class="outline-text-2" id="text-19">
475
 <p>
390
 <p>
476
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
391
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
477
 </p>
392
 </p>
478
 </div>
393
 </div>
479
 </div>
394
 </div>
480
 
395
 
481
-<div id="outline-container-org24aec82" class="outline-2">
482
-<h2 id="org24aec82">KanBoard</h2>
483
-<div class="outline-text-2" id="text-org24aec82">
396
+<div id="outline-container-sec-20" class="outline-2">
397
+<h2 id="sec-20">KanBoard</h2>
398
+<div class="outline-text-2" id="text-20">
484
 <p>
399
 <p>
485
 A simple kanban system for managing projects or TODO lists.
400
 A simple kanban system for managing projects or TODO lists.
486
 </p>
401
 </p>
490
 </p>
405
 </p>
491
 </div>
406
 </div>
492
 </div>
407
 </div>
493
-<div id="outline-container-org45a3c93" class="outline-2">
494
-<h2 id="org45a3c93">Key Server</h2>
495
-<div class="outline-text-2" id="text-org45a3c93">
408
+<div id="outline-container-sec-21" class="outline-2">
409
+<h2 id="sec-21">Key Server</h2>
410
+<div class="outline-text-2" id="text-21">
496
 <p>
411
 <p>
497
 An OpenPGP key server for storing and retrieving GPG public keys.
412
 An OpenPGP key server for storing and retrieving GPG public keys.
498
 </p>
413
 </p>
502
 </p>
417
 </p>
503
 </div>
418
 </div>
504
 </div>
419
 </div>
505
-<div id="outline-container-org0a24944" class="outline-2">
506
-<h2 id="org0a24944">Koel</h2>
507
-<div class="outline-text-2" id="text-org0a24944">
420
+<div id="outline-container-sec-22" class="outline-2">
421
+<h2 id="sec-22">Koel</h2>
422
+<div class="outline-text-2" id="text-22">
508
 <p>
423
 <p>
509
 Access your music collection from any internet connected device.
424
 Access your music collection from any internet connected device.
510
 </p>
425
 </p>
514
 </p>
429
 </p>
515
 </div>
430
 </div>
516
 </div>
431
 </div>
517
-<div id="outline-container-org3a2e6f7" class="outline-2">
518
-<h2 id="org3a2e6f7">Lychee</h2>
519
-<div class="outline-text-2" id="text-org3a2e6f7">
432
+<div id="outline-container-sec-23" class="outline-2">
433
+<h2 id="sec-23">Lychee</h2>
434
+<div class="outline-text-2" id="text-23">
520
 <p>
435
 <p>
521
 Make your photo albums available on the web.
436
 Make your photo albums available on the web.
522
 </p>
437
 </p>
526
 </p>
441
 </p>
527
 </div>
442
 </div>
528
 </div>
443
 </div>
529
-<div id="outline-container-org2ce1251" class="outline-2">
530
-<h2 id="org2ce1251">Mailpile</h2>
531
-<div class="outline-text-2" id="text-org2ce1251">
444
+<div id="outline-container-sec-24" class="outline-2">
445
+<h2 id="sec-24">Mailpile</h2>
446
+<div class="outline-text-2" id="text-24">
532
 <p>
447
 <p>
533
 Modern email client which supports GPG encryption.
448
 Modern email client which supports GPG encryption.
534
 </p>
449
 </p>
538
 </p>
453
 </p>
539
 </div>
454
 </div>
540
 </div>
455
 </div>
541
-<div id="outline-container-orgc7cd13f" class="outline-2">
542
-<h2 id="orgc7cd13f">Matrix</h2>
543
-<div class="outline-text-2" id="text-orgc7cd13f">
456
+<div id="outline-container-sec-25" class="outline-2">
457
+<h2 id="sec-25">Matrix</h2>
458
+<div class="outline-text-2" id="text-25">
544
 <p>
459
 <p>
545
 Multi-user chat with some security and moderation controls.
460
 Multi-user chat with some security and moderation controls.
546
 </p>
461
 </p>
550
 </p>
465
 </p>
551
 </div>
466
 </div>
552
 </div>
467
 </div>
553
-<div id="outline-container-orgddb22c7" class="outline-2">
554
-<h2 id="orgddb22c7">Mediagoblin</h2>
555
-<div class="outline-text-2" id="text-orgddb22c7">
468
+<div id="outline-container-sec-26" class="outline-2">
469
+<h2 id="sec-26">Mediagoblin</h2>
470
+<div class="outline-text-2" id="text-26">
556
 <p>
471
 <p>
557
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
472
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
558
 </p>
473
 </p>
562
 </p>
477
 </p>
563
 </div>
478
 </div>
564
 </div>
479
 </div>
565
-<div id="outline-container-org3443452" class="outline-2">
566
-<h2 id="org3443452">Mumble</h2>
567
-<div class="outline-text-2" id="text-org3443452">
480
+<div id="outline-container-sec-27" class="outline-2">
481
+<h2 id="sec-27">Mumble</h2>
482
+<div class="outline-text-2" id="text-27">
568
 <p>
483
 <p>
569
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
484
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
570
 </p>
485
 </p>
574
 </p>
489
 </p>
575
 </div>
490
 </div>
576
 </div>
491
 </div>
577
-<div id="outline-container-org41c4d06" class="outline-2">
578
-<h2 id="org41c4d06">NextCloud</h2>
579
-<div class="outline-text-2" id="text-org41c4d06">
492
+<div id="outline-container-sec-28" class="outline-2">
493
+<h2 id="sec-28">NextCloud</h2>
494
+<div class="outline-text-2" id="text-28">
580
 <p>
495
 <p>
581
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
496
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
582
 </p>
497
 </p>
586
 </p>
501
 </p>
587
 </div>
502
 </div>
588
 </div>
503
 </div>
589
-<div id="outline-container-org0b5e2de" class="outline-2">
590
-<h2 id="org0b5e2de">PeerTube</h2>
591
-<div class="outline-text-2" id="text-org0b5e2de">
504
+<div id="outline-container-sec-29" class="outline-2">
505
+<h2 id="sec-29">PeerTube</h2>
506
+<div class="outline-text-2" id="text-29">
592
 <p>
507
 <p>
593
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
508
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
594
 </p>
509
 </p>
598
 </p>
513
 </p>
599
 </div>
514
 </div>
600
 </div>
515
 </div>
601
-<div id="outline-container-orgbc69da3" class="outline-2">
602
-<h2 id="orgbc69da3">PI-Hole</h2>
603
-<div class="outline-text-2" id="text-orgbc69da3">
516
+<div id="outline-container-sec-30" class="outline-2">
517
+<h2 id="sec-30">PI-Hole</h2>
518
+<div class="outline-text-2" id="text-30">
604
 <p>
519
 <p>
605
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
520
 The black hole for web adverts. Block adverts at the domain name level within your local network. It can significantly reduce bandwidth, speed up page load times and protect your systems from being tracked by spyware.
606
 </p>
521
 </p>
610
 </p>
525
 </p>
611
 </div>
526
 </div>
612
 </div>
527
 </div>
613
-<div id="outline-container-orgae7a92d" class="outline-2">
614
-<h2 id="orgae7a92d">Pleroma</h2>
615
-<div class="outline-text-2" id="text-orgae7a92d">
528
+<div id="outline-container-sec-31" class="outline-2">
529
+<h2 id="sec-31">Pleroma</h2>
530
+<div class="outline-text-2" id="text-31">
616
 <p>
531
 <p>
617
 Fediverse instance which is compatible with GNU Social and Mastodon, and suited for systems without much RAM or CPU resource.
532
 Fediverse instance which is compatible with GNU Social and Mastodon, and suited for systems without much RAM or CPU resource.
618
 </p>
533
 </p>
622
 </p>
537
 </p>
623
 </div>
538
 </div>
624
 </div>
539
 </div>
625
-<div id="outline-container-org94767b4" class="outline-2">
626
-<h2 id="org94767b4">PostActiv</h2>
627
-<div class="outline-text-2" id="text-org94767b4">
540
+<div id="outline-container-sec-32" class="outline-2">
541
+<h2 id="sec-32">PostActiv</h2>
542
+<div class="outline-text-2" id="text-32">
628
 <p>
543
 <p>
629
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
544
 An alternative federated social networking system compatible with GNU Social, Pleroma and Mastodon. It includes some optimisations and fixes currently not available within the main GNU Social project.
630
 </p>
545
 </p>
634
 </p>
549
 </p>
635
 </div>
550
 </div>
636
 </div>
551
 </div>
637
-<div id="outline-container-org0ba2849" class="outline-2">
638
-<h2 id="org0ba2849">PrivateBin</h2>
639
-<div class="outline-text-2" id="text-org0ba2849">
552
+<div id="outline-container-sec-33" class="outline-2">
553
+<h2 id="sec-33">PrivateBin</h2>
554
+<div class="outline-text-2" id="text-33">
640
 <p>
555
 <p>
641
 A pastebin where the server has zero knowledge of the content being pasted.
556
 A pastebin where the server has zero knowledge of the content being pasted.
642
 </p>
557
 </p>
646
 </p>
561
 </p>
647
 </div>
562
 </div>
648
 </div>
563
 </div>
649
-<div id="outline-container-orgcd96abb" class="outline-2">
650
-<h2 id="orgcd96abb">Profanity</h2>
651
-<div class="outline-text-2" id="text-orgcd96abb">
564
+<div id="outline-container-sec-34" class="outline-2">
565
+<h2 id="sec-34">Profanity</h2>
566
+<div class="outline-text-2" id="text-34">
652
 <p>
567
 <p>
653
 A shell based XMPP client which you can run on the Freedombone server via ssh.
568
 A shell based XMPP client which you can run on the Freedombone server via ssh.
654
 </p>
569
 </p>
658
 </p>
573
 </p>
659
 </div>
574
 </div>
660
 </div>
575
 </div>
661
-<div id="outline-container-orgb9c3c0b" class="outline-2">
662
-<h2 id="orgb9c3c0b">Riot Web</h2>
663
-<div class="outline-text-2" id="text-orgb9c3c0b">
576
+<div id="outline-container-sec-35" class="outline-2">
577
+<h2 id="sec-35">Riot Web</h2>
578
+<div class="outline-text-2" id="text-35">
664
 <p>
579
 <p>
665
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
580
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
666
 </p>
581
 </p>
670
 </p>
585
 </p>
671
 </div>
586
 </div>
672
 </div>
587
 </div>
673
-<div id="outline-container-orgd05631d" class="outline-2">
674
-<h2 id="orgd05631d">SearX</h2>
675
-<div class="outline-text-2" id="text-orgd05631d">
588
+<div id="outline-container-sec-36" class="outline-2">
589
+<h2 id="sec-36">SearX</h2>
590
+<div class="outline-text-2" id="text-36">
676
 <p>
591
 <p>
677
 A metasearch engine for customised and private web searches.
592
 A metasearch engine for customised and private web searches.
678
 </p>
593
 </p>
682
 </p>
597
 </p>
683
 </div>
598
 </div>
684
 </div>
599
 </div>
685
-<div id="outline-container-org2a1819a" class="outline-2">
686
-<h2 id="org2a1819a">tt-rss</h2>
687
-<div class="outline-text-2" id="text-org2a1819a">
600
+<div id="outline-container-sec-37" class="outline-2">
601
+<h2 id="sec-37">tt-rss</h2>
602
+<div class="outline-text-2" id="text-37">
688
 <p>
603
 <p>
689
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
604
 Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via an onion address. Have "<i>the right to read</i>" without the Surveillance State knowing what you're reading. Also available with a user interface suitable for viewing on mobile devices via a browser such as OrFox.
690
 </p>
605
 </p>
694
 </p>
609
 </p>
695
 </div>
610
 </div>
696
 </div>
611
 </div>
697
-<div id="outline-container-org7325a35" class="outline-2">
698
-<h2 id="org7325a35">Syncthing</h2>
699
-<div class="outline-text-2" id="text-org7325a35">
612
+<div id="outline-container-sec-38" class="outline-2">
613
+<h2 id="sec-38">Syncthing</h2>
614
+<div class="outline-text-2" id="text-38">
700
 <p>
615
 <p>
701
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
616
 Possibly the best way to synchronise files across all of your devices. Once it has been set up it "just works" with no user intervention needed.
702
 </p>
617
 </p>
706
 </p>
621
 </p>
707
 </div>
622
 </div>
708
 </div>
623
 </div>
709
-<div id="outline-container-orge582914" class="outline-2">
710
-<h2 id="orge582914">Tahoe-LAFS</h2>
711
-<div class="outline-text-2" id="text-orge582914">
624
+<div id="outline-container-sec-39" class="outline-2">
625
+<h2 id="sec-39">Tahoe-LAFS</h2>
626
+<div class="outline-text-2" id="text-39">
712
 <p>
627
 <p>
713
 Robust and encrypted storage of files on one or more server.
628
 Robust and encrypted storage of files on one or more server.
714
 </p>
629
 </p>
718
 </p>
633
 </p>
719
 </div>
634
 </div>
720
 </div>
635
 </div>
721
-<div id="outline-container-org0f44920" class="outline-2">
722
-<h2 id="org0f44920">Tox</h2>
723
-<div class="outline-text-2" id="text-org0f44920">
636
+<div id="outline-container-sec-40" class="outline-2">
637
+<h2 id="sec-40">Tox</h2>
638
+<div class="outline-text-2" id="text-40">
724
 <p>
639
 <p>
725
 Client and bootstrap node for the Tox chat/VoIP system.
640
 Client and bootstrap node for the Tox chat/VoIP system.
726
 </p>
641
 </p>
730
 </p>
645
 </p>
731
 </div>
646
 </div>
732
 </div>
647
 </div>
733
-<div id="outline-container-org9e5e0ed" class="outline-2">
734
-<h2 id="org9e5e0ed">Turtl</h2>
735
-<div class="outline-text-2" id="text-org9e5e0ed">
648
+<div id="outline-container-sec-41" class="outline-2">
649
+<h2 id="sec-41">Turtl</h2>
650
+<div class="outline-text-2" id="text-41">
736
 <p>
651
 <p>
737
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
652
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
738
 </p>
653
 </p>
742
 </p>
657
 </p>
743
 </div>
658
 </div>
744
 </div>
659
 </div>
745
-<div id="outline-container-org47df89a" class="outline-2">
746
-<h2 id="org47df89a">Vim</h2>
747
-<div class="outline-text-2" id="text-org47df89a">
660
+<div id="outline-container-sec-42" class="outline-2">
661
+<h2 id="sec-42">Vim</h2>
662
+<div class="outline-text-2" id="text-42">
748
 <p>
663
 <p>
749
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
664
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
750
 </p>
665
 </p>
751
 </div>
666
 </div>
752
 </div>
667
 </div>
753
 
668
 
754
-<div id="outline-container-org1ae77f6" class="outline-2">
755
-<h2 id="org1ae77f6">Virtual Private Network (VPN)</h2>
756
-<div class="outline-text-2" id="text-org1ae77f6">
669
+<div id="outline-container-sec-43" class="outline-2">
670
+<h2 id="sec-43">Virtual Private Network (VPN)</h2>
671
+<div class="outline-text-2" id="text-43">
757
 <p>
672
 <p>
758
 Set up a VPN on your server so that you can bypass local internet censorship.
673
 Set up a VPN on your server so that you can bypass local internet censorship.
759
 </p>
674
 </p>
763
 </p>
678
 </p>
764
 </div>
679
 </div>
765
 </div>
680
 </div>
766
-<div id="outline-container-org293b43b" class="outline-2">
767
-<h2 id="org293b43b">XMPP</h2>
768
-<div class="outline-text-2" id="text-org293b43b">
681
+<div id="outline-container-sec-44" class="outline-2">
682
+<h2 id="sec-44">XMPP</h2>
683
+<div class="outline-text-2" id="text-44">
769
 <p>
684
 <p>
770
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
685
 Chat server which can be used together with client such as Gajim or Conversations to provide end-to-end content security and also onion routed metadata security. Includes advanced features such as <i>client state notification</i> to save battery power on your mobile devices, support for seamless roaming between networks and <i>message carbons</i> so that you can receive the same messages while being simultaneously logged in to your account on more than one device.
771
 </p>
686
 </p>

+ 62
- 147
website/EN/fediverse.html View File

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-02-21 Wed 14:52 -->
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="Homesteading the Fediverse"
6
+<title></title>
7
+<!-- 2018-03-10 Sat 20:00 -->
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="Homesteading the Fediverse"
13
  />
12
  />
14
-<meta name="keywords" content="freedombone, homestead, fediverse" />
13
+<meta  name="keywords" content="freedombone, homestead, fediverse" />
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">
239
-<div class="org-center">
147
+<h1 class="title"></h1>
148
+<div class="center">
240
 
149
 
241
 <div class="figure">
150
 <div class="figure">
242
 <p><img src="images/logo.png" alt="logo.png" />
151
 <p><img src="images/logo.png" alt="logo.png" />
244
 </div>
153
 </div>
245
 </div>
154
 </div>
246
 
155
 
247
-<center>
248
-<h1>Homesteading the Fediverse</h1>
249
-</center>
156
+<div class="center">
157
+<p>
158
+<b>Homesteading the Fediverse</b>
159
+</p>
160
+</div>
250
 
161
 
251
 <p>
162
 <p>
252
 Some things you might want to know about the Fediverse:
163
 Some things you might want to know about the Fediverse:
253
 </p>
164
 </p>
254
 
165
 
255
-<div id="outline-container-org0e5c3f9" class="outline-2">
256
-<h2 id="org0e5c3f9">Federation as a concept</h2>
257
-<div class="outline-text-2" id="text-org0e5c3f9">
166
+<div id="outline-container-sec-1" class="outline-2">
167
+<h2 id="sec-1">Federation as a concept</h2>
168
+<div class="outline-text-2" id="text-1">
258
 <p>
169
 <p>
259
-The political definition of a federation is "<i>a union of partially self-governing states or regions under a central (federal) government</i>". The fediverse isn't exactly like that, in that there is no federal government. However there are protocols which govern the communication between instances and that might be analogized to being a sort of elemantary constitution or mutual agreement binding all participants together. The protocols are merely ways of moving data around though, and don't impose any sort of moral code.
170
+The political definition of a federation is "<i>a union of partially self-governing states or regions under a central (federal) government</i>". The fediverse isn't exactly like that, in that there is no federal government. However there are protocols which govern the communication between instances and that might be analogized to being a sort of elementary constitution or mutual agreement binding all participants together. The protocols are merely ways of moving data around though, and don't impose any sort of moral code.
260
 </p>
171
 </p>
261
 </div>
172
 </div>
262
 </div>
173
 </div>
263
-<div id="outline-container-org90385ba" class="outline-2">
264
-<h2 id="org90385ba">Keep the number of users on each server small</h2>
265
-<div class="outline-text-2" id="text-org90385ba">
174
+<div id="outline-container-sec-2" class="outline-2">
175
+<h2 id="sec-2">Keep the number of users on each server small</h2>
176
+<div class="outline-text-2" id="text-2">
266
 <p>
177
 <p>
267
 The importance of this can't be overstated. Servers with lots of users always eventually have problems where the interests of the users are not the same as the interests of the server administrator. If you are the server administrator, or if there are only a small squad-size group of people on the server, then it's a lot easier to resolve differences and everyone's interests are likely to be similar.
178
 The importance of this can't be overstated. Servers with lots of users always eventually have problems where the interests of the users are not the same as the interests of the server administrator. If you are the server administrator, or if there are only a small squad-size group of people on the server, then it's a lot easier to resolve differences and everyone's interests are likely to be similar.
268
 </p>
179
 </p>
269
 </div>
180
 </div>
270
 </div>
181
 </div>
271
 
182
 
272
-<div id="outline-container-org1f1a75f" class="outline-2">
273
-<h2 id="org1f1a75f">Drama will happen</h2>
274
-<div class="outline-text-2" id="text-org1f1a75f">
183
+<div id="outline-container-sec-3" class="outline-2">
184
+<h2 id="sec-3">Drama will happen</h2>
185
+<div class="outline-text-2" id="text-3">
275
 <p>
186
 <p>
276
 It's inevitable in any social network, but fortunately your options for dealing with it are better than they are in the giant proprietary monoliths. In the proprietary world Google or Facebook don't give a damn about the fate of individual users. On a server with a small number of users if you're getting griefed then the administrator is likely to care and be able to do something about it.
187
 It's inevitable in any social network, but fortunately your options for dealing with it are better than they are in the giant proprietary monoliths. In the proprietary world Google or Facebook don't give a damn about the fate of individual users. On a server with a small number of users if you're getting griefed then the administrator is likely to care and be able to do something about it.
277
 </p>
188
 </p>
278
 </div>
189
 </div>
279
 </div>
190
 </div>
280
 
191
 
281
-<div id="outline-container-org249f254" class="outline-2">
282
-<h2 id="org249f254">Don't be afraid to block</h2>
283
-<div class="outline-text-2" id="text-org249f254">
192
+<div id="outline-container-sec-4" class="outline-2">
193
+<h2 id="sec-4">Don't be afraid to block</h2>
194
+<div class="outline-text-2" id="text-4">
284
 <p>
195
 <p>
285
 Especially if other servers are publishing content which may not be legal in your jurisdiction then don't be afraid to use domain or user blocking from the <b>Administrator control panel</b>. The same applies if users on other servers are trying to harass you. Blocking creates politics and drama but <span class="underline">this is a feature not a bug</span>. It allows you to craft your own distinct community and user experience while also existing in the wider federation. It's hard to do this on sites like Twitter or Facebook. Try to keep blocking to a minimum though and avoid doing it for insubstantial reasons. If you have other users on your server then publish the blocked domains list somewhere they can see. That avoids disappointment and enables you to have a discussion about the validity of blocking decisions.
196
 Especially if other servers are publishing content which may not be legal in your jurisdiction then don't be afraid to use domain or user blocking from the <b>Administrator control panel</b>. The same applies if users on other servers are trying to harass you. Blocking creates politics and drama but <span class="underline">this is a feature not a bug</span>. It allows you to craft your own distinct community and user experience while also existing in the wider federation. It's hard to do this on sites like Twitter or Facebook. Try to keep blocking to a minimum though and avoid doing it for insubstantial reasons. If you have other users on your server then publish the blocked domains list somewhere they can see. That avoids disappointment and enables you to have a discussion about the validity of blocking decisions.
286
 </p>
197
 </p>
287
 </div>
198
 </div>
288
 </div>
199
 </div>
289
 
200
 
290
-<div id="outline-container-org16e1345" class="outline-2">
291
-<h2 id="org16e1345">Network structure maps on to social structure</h2>
292
-<div class="outline-text-2" id="text-org16e1345">
201
+<div id="outline-container-sec-5" class="outline-2">
202
+<h2 id="sec-5">Network structure maps on to social structure</h2>
203
+<div class="outline-text-2" id="text-5">
293
 <p>
204
 <p>
294
 Over time follows and blocking rules come to match the underlying social geography of affinity groups. Blocking will happen and users will move around or start new servers. Drama related to blocking will dissipate.
205
 Over time follows and blocking rules come to match the underlying social geography of affinity groups. Blocking will happen and users will move around or start new servers. Drama related to blocking will dissipate.
295
 </p>
206
 </p>
296
 </div>
207
 </div>
297
 </div>
208
 </div>
298
 
209
 
299
-<div id="outline-container-orga5968b2" class="outline-2">
300
-<h2 id="orga5968b2">Keep your follows under the Dunbar number</h2>
301
-<div class="outline-text-2" id="text-orga5968b2">
210
+<div id="outline-container-sec-6" class="outline-2">
211
+<h2 id="sec-6">Keep your follows under the Dunbar number</h2>
212
+<div class="outline-text-2" id="text-6">
213
+<p>
214
+Keep the number of other frequently active users you're following to under a couple of hundred. Your actual number of follows might be larger than this but could include users who rarely post anything.
215
+</p>
216
+
302
 <p>
217
 <p>
303
-Keep the number of other users you're following and who are also active to under a couple of hundred. Any more than that and you'll just be overwhelmed by irrelevant stuff and whatever community you may have been part of will dissolve in a sea of entropy. There are no algorithmic timelines, and even if they're introduced then they create their own problems as an opaque form of censorship. <span class="underline">Real community happens at tribal scale</span>. It's something which people often don't like to admit because they get fixated upon bigger and bigger numbers, but it definitely seems to be true.
218
+Once there are more than a couple of hundred highly active users in your timeline then you'll just be overwhelmed by irrelevant stuff and whatever community you may have been part of will be drowned in the entropy. There are no algorithmic timelines to hide posts, and even if they're introduced then they create their own problems as an opaque form of censorship. <span class="underline">Real community happens at tribal scale</span>. It's something which people often don't like to admit because they get fixated upon bigger and bigger numbers, but it definitely seems to be true.
304
 </p>
219
 </p>
305
 </div>
220
 </div>
306
 </div>
221
 </div>
307
 
222
 
308
-<div id="outline-container-orgc8c8b40" class="outline-2">
309
-<h2 id="orgc8c8b40">Avoid big public servers</h2>
310
-<div class="outline-text-2" id="text-orgc8c8b40">
223
+<div id="outline-container-sec-7" class="outline-2">
224
+<h2 id="sec-7">Avoid big public servers</h2>
225
+<div class="outline-text-2" id="text-7">
311
 <p>
226
 <p>
312
 It may seem like a good idea and it may seem like you're doing a service to the community by allowing random strangers to register, but servers with thousands of users only cause problems - social, administrative, financial and possibly also legal. The financial strain of running a powerful server with high reliability may be enough to encourage the administrator to begin pushing advertising onto the system, or sell user content, and then before you know it you have identical problems to Twitter. Instead try to encourage people to set up their own servers. Follow this principle and a lot of arguments and stress will be more easily avoided.
227
 It may seem like a good idea and it may seem like you're doing a service to the community by allowing random strangers to register, but servers with thousands of users only cause problems - social, administrative, financial and possibly also legal. The financial strain of running a powerful server with high reliability may be enough to encourage the administrator to begin pushing advertising onto the system, or sell user content, and then before you know it you have identical problems to Twitter. Instead try to encourage people to set up their own servers. Follow this principle and a lot of arguments and stress will be more easily avoided.
313
 </p>
228
 </p>
314
 
229
 
315
 
230
 
316
 
231
 
317
-<div class="org-center">
232
+<div class="center">
318
 <p>
233
 <p>
319
 This site can also be accessed via a Tor browser at <a href="http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion">http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion</a>. This documentation is under the <a href="https://www.gnu.org/licenses/fdl-1.3.txt">GNU Free Documentation License version 1.3</a>
234
 This site can also be accessed via a Tor browser at <a href="http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion">http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion</a>. This documentation is under the <a href="https://www.gnu.org/licenses/fdl-1.3.txt">GNU Free Documentation License version 1.3</a>
320
 </p>
235
 </p>

+ 13
- 18
website/EN/index.html View File

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-02-04 Sun 21:09 -->
6
+<!-- 2018-03-13 Tue 12:38 -->
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>
258
 </p>
258
 </p>
259
 
259
 
260
 <p>
260
 <p>
261
-<a href="./homeserver.html">Here's how</a>.
261
+A list of other supported ARM boards <a href="./boards.html">can be found here</a>, or you can install onto an old laptop or netbook. Some installation instructions for different use cases are:
262
 </p>
262
 </p>
263
 
263
 
264
-<p>
265
-And here's how <a href="./beaglebone.html">on a Beaglebone Black</a>. A list of other supported ARM boards <a href="./boards.html">can be found here</a>.
266
-</p>
267
-
268
-<p>
269
-Or you can install <a href="./debianinstall.html">onto an existing Debian system</a>.
270
-</p>
271
-
272
-<p>
273
-If you have a single board ARM computer which isn't one of the officially supported ones, such as Raspberry Pi, then you may still be able to install <a href="./armbian.html">Freedombone with Armbian</a>.
274
-</p>
275
-
276
-<p>
277
-Want to make a community mesh network which can either be fully autonomous or connected to the internet? The <a href="./mesh.html">Freedombone Mesh</a> is a wireless solution for networked communication that can be rapidly deployed in temporary, emergency or post-disaster situations where internet access is unavailable or compromised, or used as an infrastructural community service similar to <a href="https://en.wikipedia.org/wiki/Freifunk">Freifunk</a>.
278
-</p>
264
+<ul class="org-ul">
265
+<li><a href="./homeserver.html">Typical installation</a></li>
266
+<li>Installing <a href="./beaglebone.html">on a Beaglebone Black</a></li>
267
+<li>Installing on an <a href="./debianinstall.html">existing Debian system</a></li>
268
+<li>Installing <a href="./armbian.html">on Armbian</a>, for unsupported ARM boards such as Raspberry Pi</li>
269
+<li>Creating a dedicated <a href="./socialinstance.html">fediverse instance</a> for a single user or to host a community</li>
270
+<li>Deploying a <a href="./mesh.html">mesh network</a> which can operate with or without the internet</li>
271
+</ul>
279
 
272
 
280
 <p>
273
 <p>
281
 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.
274
 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.
283
 
276
 
284
 <ul class="org-ul">
277
 <ul class="org-ul">
285
 <li><a href="./domains.html">How to get a domain name</a></li>
278
 <li><a href="./domains.html">How to get a domain name</a></li>
279
+<li><a href="./security.html">Improving security</a></li>
280
+<li><a href="./users.html">Adding or removing users</a></li>
286
 <li><a href="./apps.html">Apps available on the system</a></li>
281
 <li><a href="./apps.html">Apps available on the system</a></li>
287
-<li><a href="./usage.html">General usage</a></li>
288
 <li><a href="./faq.html">Frequently Asked Questions</a></li>
282
 <li><a href="./faq.html">Frequently Asked Questions</a></li>
289
 <li><a href="./mobile.html">Advice on setting up a mobile phone</a></li>
283
 <li><a href="./mobile.html">Advice on setting up a mobile phone</a></li>
290
 <li><a href="./support.html">I like this project. How can I help to support it?</a></li>
284
 <li><a href="./support.html">I like this project. How can I help to support it?</a></li>
291
 </ul>
285
 </ul>
292
 
286
 
287
+
293
 <p>
288
 <p>
294
 If you find bugs, or want to add a new app to this system see the <a href="./devguide.html">Developers Guide</a> and <a href="./codeofconduct.html">Code of Conduct</a>. There is a Matrix chat room available at <b>#fbone:matrix.freedombone.net</b>.
289
 If you find bugs, or want to add a new app to this system see the <a href="./devguide.html">Developers Guide</a> and <a href="./codeofconduct.html">Code of Conduct</a>. There is a Matrix chat room available at <b>#fbone:matrix.freedombone.net</b>.
295
 </p>
290
 </p>

+ 250
- 0
website/EN/security.html View File

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
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">
5
+<head>
6
+<title></title>
7
+<!-- 2018-03-10 Sat 20:54 -->
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="Improving security"
12
+ />
13
+<meta  name="keywords" content="freedombone, security, ssh, debian, beaglebone" />
14
+<style type="text/css">
15
+ <!--/*--><![CDATA[/*><!--*/
16
+  .title  { text-align: center; }
17
+  .todo   { font-family: monospace; color: red; }
18
+  .done   { color: green; }
19
+  .tag    { background-color: #eee; font-family: monospace;
20
+            padding: 2px; font-size: 80%; font-weight: normal; }
21
+  .timestamp { color: #bebebe; }
22
+  .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; }
26
+  .underline { text-decoration: underline; }
27
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
+  p.verse { margin-left: 3%; }
29
+  pre {
30
+    border: 1px solid #ccc;
31
+    box-shadow: 3px 3px 3px #eee;
32
+    padding: 8pt;
33
+    font-family: monospace;
34
+    overflow: auto;
35
+    margin: 1.2em;
36
+  }
37
+  pre.src {
38
+    position: relative;
39
+    overflow: visible;
40
+    padding-top: 1.2em;
41
+  }
42
+  pre.src:before {
43
+    display: none;
44
+    position: absolute;
45
+    background-color: white;
46
+    top: -10px;
47
+    right: 10px;
48
+    padding: 3px;
49
+    border: 1px solid black;
50
+  }
51
+  pre.src:hover:before { display: inline;}
52
+  pre.src-sh:before    { content: 'sh'; }
53
+  pre.src-bash:before  { content: 'sh'; }
54
+  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'; }
59
+
60
+  table { border-collapse:collapse; }
61
+  caption.t-above { caption-side: top; }
62
+  caption.t-bottom { caption-side: bottom; }
63
+  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; }
70
+  dt { font-weight: bold; }
71
+  .footpara:nth-child(2) { display: inline; }
72
+  .footpara { display: block; }
73
+  .footdef  { margin-bottom: 1em; }
74
+  .figure { padding: 1em; }
75
+  .figure p { text-align: center; }
76
+  .inlinetask {
77
+    padding: 10px;
78
+    border: 2px solid gray;
79
+    margin: 10px;
80
+    background: #ffffcc;
81
+  }
82
+  #org-div-home-and-up
83
+   { text-align: right; font-size: 70%; white-space: nowrap; }
84
+  textarea { overflow-x: auto; }
85
+  .linenr { font-size: smaller }
86
+  .code-highlighted { background-color: #ffff00; }
87
+  .org-info-js_info-navigation { border-style: none; }
88
+  #org-info-js_console-label
89
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
+  .org-info-js_search-highlight
91
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
92
+  /*]]>*/-->
93
+</style>
94
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
95
+<script type="text/javascript">
96
+/*
97
+@licstart  The following is the entire license notice for the
98
+JavaScript code in this tag.
99
+
100
+Copyright (C) 2012-2013 Free Software Foundation, Inc.
101
+
102
+The JavaScript code in this tag is free software: you can
103
+redistribute it and/or modify it under the terms of the GNU
104
+General Public License (GNU GPL) as published by the Free Software
105
+Foundation, either version 3 of the License, or (at your option)
106
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
107
+without even the implied warranty of MERCHANTABILITY or FITNESS
108
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
109
+
110
+As additional permission under GNU GPL version 3 section 7, you
111
+may distribute non-source (e.g., minimized or compacted) forms of
112
+that code without the copy of the GNU GPL normally required by
113
+section 4, provided you include this license notice and a URL
114
+through which recipients can access the Corresponding Source.
115
+
116
+
117
+@licend  The above is the entire license notice
118
+for the JavaScript code in this tag.
119
+*/
120
+<!--/*--><![CDATA[/*><!--*/
121
+ function CodeHighlightOn(elem, id)
122
+ {
123
+   var target = document.getElementById(id);
124
+   if(null != target) {
125
+     elem.cacheClassElem = elem.className;
126
+     elem.cacheClassTarget = target.className;
127
+     target.className = "code-highlighted";
128
+     elem.className   = "code-highlighted";
129
+   }
130
+ }
131
+ function CodeHighlightOff(elem, id)
132
+ {
133
+   var target = document.getElementById(id);
134
+   if(elem.cacheClassElem)
135
+     elem.className = elem.cacheClassElem;
136
+   if(elem.cacheClassTarget)
137
+     target.className = elem.cacheClassTarget;
138
+ }
139
+/*]]>*///-->
140
+</script>
141
+</head>
142
+<body>
143
+<div id="preamble" class="status">
144
+<a name="top" id="top"></a>
145
+</div>
146
+<div id="content">
147
+<h1 class="title"></h1>
148
+<div class="center">
149
+
150
+<div class="figure">
151
+<p><img src="images/logo.png" alt="logo.png" />
152
+</p>
153
+</div>
154
+</div>
155
+
156
+<div id="outline-container-sec-1" class="outline-2">
157
+<h2 id="sec-1">Authentication with keys</h2>
158
+<div class="outline-text-2" id="text-1">
159
+<p>
160
+It's a lot more secure to log in to the Freedombone system using ssh keys rather than with a password. You can set that up by first running:
161
+</p>
162
+
163
+<div class="org-src-container">
164
+
165
+<pre class="src src-bash">freedombone-client
166
+</pre>
167
+</div>
168
+
169
+<p>
170
+On your local system (i.e. whatever you're logging in to the Freedombone system from, typically a laptop). Then:
171
+</p>
172
+
173
+<pre class="example">
174
+ssh myusername@freedombone.local -p 2222
175
+</pre>
176
+
177
+<p>
178
+Select <b>Administrator controls</b> and re-enter your password, then <b>Manage Users</b> and <b>Change user ssh public key</b>. Copy and paste the ssh public keys which appeared after the <b>freedombone-client</b> command was run. Then go to <b>Security settings</b> and select <b>Allow ssh login with passwords</b> followed by <b>no</b>.
179
+</p>
180
+
181
+<p>
182
+You'll need to make sure that you have a copy of the ~/.ssh directory on your local system. You could just copy that directory to a USB drive and then keep that somewhere safe so that you can restore the keys if you need to.
183
+</p>
184
+</div>
185
+</div>
186
+<div id="outline-container-sec-2" class="outline-2">
187
+<h2 id="sec-2">Administrating the system via an onion address (Tor)</h2>
188
+<div class="outline-text-2" id="text-2">
189
+<p>
190
+You can also access your system via the Tor system using an onion address. To find out what the onion address for ssh access is you can do the following:
191
+</p>
192
+
193
+<div class="org-src-container">
194
+
195
+<pre class="src src-bash">ssh username@freedombone.local -p 2222
196
+</pre>
197
+</div>
198
+
199
+<p>
200
+Select <i>Administrator controls</i> then select "About this system" and look for the onion address for ssh. You can then close the terminal and open another, then do the following on your local system:
201
+</p>
202
+
203
+<div class="org-src-container">
204
+
205
+<pre class="src src-bash">freedombone-client
206
+</pre>
207
+</div>
208
+
209
+<p>
210
+This will set up your ssh environment to be able to handle onion addresses. Then you can test ssh with:
211
+</p>
212
+
213
+<div class="org-src-container">
214
+
215
+<pre class="src src-bash">ssh username@address.onion -p 2222
216
+</pre>
217
+</div>
218
+
219
+<p>
220
+Subsequently even if dynamic DNS isn't working you may still be able to administer your system. Using the onion address also gives you some degree of protection against corporate or government metadata analysis, since it becomes more difficult to passively detect which systems are communicating.
221
+</p>
222
+</div>
223
+</div>
224
+</div>
225
+<div id="postamble" class="status">
226
+
227
+<style type="text/css">
228
+.back-to-top {
229
+    position: fixed;
230
+    bottom: 2em;
231
+    right: 0px;
232
+    text-decoration: none;
233
+    color: #000000;
234
+    background-color: rgba(235, 235, 235, 0.80);
235
+    font-size: 12px;
236
+    padding: 1em;
237
+    display: none;
238
+}
239
+
240
+.back-to-top:hover {
241
+    background-color: rgba(135, 135, 135, 0.50);
242
+}
243
+</style>
244
+
245
+<div class="back-to-top">
246
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
247
+</div>
248
+</div>
249
+</body>
250
+</html>

+ 419
- 0
website/EN/socialinstance.html View File

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
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">
5
+<head>
6
+<!-- 2018-03-13 Tue 12: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="Social Instance"
13
+ />
14
+<meta name="keywords" content="freedombone, debian, social, fediverse, instance, pleroma, gnusocial, postactiv" />
15
+<style type="text/css">
16
+ <!--/*--><![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; }
23
+  .todo   { font-family: monospace; color: red; }
24
+  .done   { font-family: monospace; color: green; }
25
+  .priority { font-family: monospace; color: orange; }
26
+  .tag    { background-color: #eee; font-family: monospace;
27
+            padding: 2px; font-size: 80%; font-weight: normal; }
28
+  .timestamp { color: #bebebe; }
29
+  .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; }
33
+  .underline { text-decoration: underline; }
34
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35
+  p.verse { margin-left: 3%; }
36
+  pre {
37
+    border: 1px solid #ccc;
38
+    box-shadow: 3px 3px 3px #eee;
39
+    padding: 8pt;
40
+    font-family: monospace;
41
+    overflow: auto;
42
+    margin: 1.2em;
43
+  }
44
+  pre.src {
45
+    position: relative;
46
+    overflow: visible;
47
+    padding-top: 1.2em;
48
+  }
49
+  pre.src:before {
50
+    display: none;
51
+    position: absolute;
52
+    background-color: white;
53
+    top: -10px;
54
+    right: 10px;
55
+    padding: 3px;
56
+    border: 1px solid black;
57
+  }
58
+  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'; }
70
+  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'; }
151
+
152
+  table { border-collapse:collapse; }
153
+  caption.t-above { caption-side: top; }
154
+  caption.t-bottom { caption-side: bottom; }
155
+  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; }
162
+  dt { font-weight: bold; }
163
+  .footpara { display: inline; }
164
+  .footdef  { margin-bottom: 1em; }
165
+  .figure { padding: 1em; }
166
+  .figure p { text-align: center; }
167
+  .inlinetask {
168
+    padding: 10px;
169
+    border: 2px solid gray;
170
+    margin: 10px;
171
+    background: #ffffcc;
172
+  }
173
+  #org-div-home-and-up
174
+   { text-align: right; font-size: 70%; white-space: nowrap; }
175
+  textarea { overflow-x: auto; }
176
+  .linenr { font-size: smaller }
177
+  .code-highlighted { background-color: #ffff00; }
178
+  .org-info-js_info-navigation { border-style: none; }
179
+  #org-info-js_console-label
180
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
181
+  .org-info-js_search-highlight
182
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
183
+  .org-svg { width: 90%; }
184
+  /*]]>*/-->
185
+</style>
186
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
187
+<script type="text/javascript">
188
+/*
189
+@licstart  The following is the entire license notice for the
190
+JavaScript code in this tag.
191
+
192
+Copyright (C) 2012-2017 Free Software Foundation, Inc.
193
+
194
+The JavaScript code in this tag is free software: you can
195
+redistribute it and/or modify it under the terms of the GNU
196
+General Public License (GNU GPL) as published by the Free Software
197
+Foundation, either version 3 of the License, or (at your option)
198
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
199
+without even the implied warranty of MERCHANTABILITY or FITNESS
200
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
201
+
202
+As additional permission under GNU GPL version 3 section 7, you
203
+may distribute non-source (e.g., minimized or compacted) forms of
204
+that code without the copy of the GNU GPL normally required by
205
+section 4, provided you include this license notice and a URL
206
+through which recipients can access the Corresponding Source.
207
+
208
+
209
+@licend  The above is the entire license notice
210
+for the JavaScript code in this tag.
211
+*/
212
+<!--/*--><![CDATA[/*><!--*/
213
+ function CodeHighlightOn(elem, id)
214
+ {
215
+   var target = document.getElementById(id);
216
+   if(null != target) {
217
+     elem.cacheClassElem = elem.className;
218
+     elem.cacheClassTarget = target.className;
219
+     target.className = "code-highlighted";
220
+     elem.className   = "code-highlighted";
221
+   }
222
+ }
223
+ function CodeHighlightOff(elem, id)
224
+ {
225
+   var target = document.getElementById(id);
226
+   if(elem.cacheClassElem)
227
+     elem.className = elem.cacheClassElem;
228
+   if(elem.cacheClassTarget)
229
+     target.className = elem.cacheClassTarget;
230
+ }
231
+/*]]>*///-->
232
+</script>
233
+</head>
234
+<body>
235
+<div id="preamble" class="status">
236
+<a name="top" id="top"></a>
237
+</div>
238
+<div id="content">
239
+<div class="org-center">
240
+
241
+<div class="figure">
242
+<p><img src="images/logo.png" alt="logo.png" />
243
+</p>
244
+</div>
245
+</div>
246
+
247
+<center>
248
+<h1>Social Instance</h1>
249
+</center>
250
+
251
+<p>
252
+A social instance image allows you to easily set up a fediverse server, which federates using the OStatus or ActivityPub protocol. You will need:
253
+</p>
254
+
255
+<ul class="org-ul">
256
+<li>An old laptop, capable of booting from USB</li>
257
+<li>A USB drive, preferably Sandisk and 16GB or larger</li>
258
+<li>An ethernet patch cable</li>
259
+<li>A domain name of your own</li>
260
+<li>A dynamic DNS account</li>
261
+</ul>
262
+
263
+<p>
264
+The installation process is the same as usual, with the only difference being that on initial setup it will go straight to the domain setup details for your instance. In summary:
265
+</p>
266
+
267
+<div id="outline-container-orga9aa61d" class="outline-2">
268
+<h2 id="orga9aa61d">Copy the image to the USB drive</h2>
269
+<div class="outline-text-2" id="text-orga9aa61d">
270
+<p>
271
+Substitute <b>sdX</b> with the device name for your USB drive.
272
+</p>
273
+
274
+<div class="org-src-container">
275
+<pre class="src src-bash">sudo apt-get install xz-utils wget
276
+wget https://freedombone.net/downloads/current/freedombone-pleroma-amd64.img.xz
277
+wget https://freedombone.net/downloads/current/freedombone-pleroma-amd64.img.xz.sig
278
+gpg --verify freedombone-pleroma-amd64.img.xz.sig
279
+unxz freedombone-pleroma-amd64.img.xz
280
+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
281
+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
282
+</pre>
283
+</div>
284
+
285
+<p>
286
+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.
287
+</p>
288
+</div>
289
+</div>
290
+
291
+<div id="outline-container-org4454ad3" class="outline-2">
292
+<h2 id="org4454ad3">Connect the laptop to your internet router</h2>
293
+<div class="outline-text-2" id="text-org4454ad3">
294
+<p>
295
+Plug the USB drive into the laptop and connect it to your internet router with the ethernet cable.
296
+</p>
297
+
298
+<div class="org-center">
299
+
300
+<div class="figure">
301
+<p><img src="images/laptop_router.jpg" alt="laptop_router.jpg" />
302
+</p>
303
+</div>
304
+</div>
305
+</div>
306
+</div>
307
+
308
+<div id="outline-container-orgd646ced" class="outline-2">
309
+<h2 id="orgd646ced">Boot the laptop from the USB drive</h2>
310
+<div class="outline-text-2" id="text-orgd646ced">
311
+<p>
312
+You may need to alter the BIOS settings to get this to work reliably.
313
+</p>
314
+
315
+<div class="org-center">
316
+
317
+<div class="figure">
318
+<p><img src="images/bios_boot_usb.jpg" alt="bios_boot_usb.jpg" />
319
+</p>
320
+</div>
321
+</div>
322
+</div>
323
+</div>
324
+
325
+<div id="outline-container-orgfc4d060" class="outline-2">
326
+<h2 id="orgfc4d060">Forward ports 80 (HTTP) and 443 (HTTPS) from your internet router to the laptop</h2>
327
+<div class="outline-text-2" id="text-orgfc4d060">
328
+<p>
329
+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.
330
+</p>
331
+
332
+<div class="org-center">
333
+
334
+<div class="figure">
335
+<p><img src="images/port_forwarding.png" alt="port_forwarding.png" />
336
+</p>
337
+</div>
338
+</div>
339
+</div>
340
+</div>
341
+
342
+<div id="outline-container-org1de31c9" class="outline-2">
343
+<h2 id="org1de31c9">From another machine ssh into the laptop</h2>
344
+<div class="outline-text-2" id="text-org1de31c9">
345
+<div class="org-src-container">
346
+<pre class="src src-bash">ssh fbone@freedombone.local -p 2222
347
+</pre>
348
+</div>
349
+
350
+<p>
351
+Or alternatively you can log in directly on the laptop. The initial username is <b>fbone</b> and the password is <b>freedombone</b>. You should make sure you write down or copy the new password when it is shown.
352
+</p>
353
+</div>
354
+</div>
355
+
356
+<div id="outline-container-org73f6c40" class="outline-2">
357
+<h2 id="org73f6c40">Follow the setup procedure</h2>
358
+<div class="outline-text-2" id="text-org73f6c40">
359
+<p>
360
+Enter your user details, domain name and dynamic DNS settings.
361
+</p>
362
+</div>
363
+</div>
364
+
365
+<div id="outline-container-org0c76d5c" class="outline-2">
366
+<h2 id="org0c76d5c">When installation is complete</h2>
367
+<div class="outline-text-2" id="text-org0c76d5c">
368
+<p>
369
+Navigate to your domain and register a new user.
370
+</p>
371
+
372
+<div class="org-center">
373
+
374
+<div class="figure">
375
+<p><img src="images/pleroma_register.jpg" alt="pleroma_register.jpg" />
376
+</p>
377
+</div>
378
+</div>
379
+
380
+<p>
381
+More details about setting up and using Pleroma <a href="./app_pleroma.html">can be found here</a>.
382
+</p>
383
+
384
+<div class="org-center">
385
+
386
+<div class="figure">
387
+<p><img src="images/tusky.jpg" alt="tusky.jpg" />
388
+</p>
389
+</div>
390
+</div>
391
+</div>
392
+</div>
393
+</div>
394
+<div id="postamble" class="status">
395
+
396
+<style type="text/css">
397
+.back-to-top {
398
+    position: fixed;
399
+    bottom: 2em;
400
+    right: 0px;
401
+    text-decoration: none;
402
+    color: #000000;
403
+    background-color: rgba(235, 235, 235, 0.80);
404
+    font-size: 12px;
405
+    padding: 1em;
406
+    display: none;
407
+}
408
+
409
+.back-to-top:hover {
410
+    background-color: rgba(135, 135, 135, 0.50);
411
+}
412
+</style>
413
+
414
+<div class="back-to-top">
415
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
416
+</div>
417
+</div>
418
+</body>
419
+</html>

+ 153
- 542
website/EN/usage_email.html
File diff suppressed because it is too large
View File


+ 201
- 0
website/EN/users.html View File

1
+<?xml version="1.0" encoding="utf-8"?>
2
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
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">
5
+<head>
6
+<title></title>
7
+<!-- 2018-03-10 Sat 20:58 -->
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="Adding or removing users"
12
+ />
13
+<meta  name="keywords" content="freedombone, debian, beaglebone, users" />
14
+<style type="text/css">
15
+ <!--/*--><![CDATA[/*><!--*/
16
+  .title  { text-align: center; }
17
+  .todo   { font-family: monospace; color: red; }
18
+  .done   { color: green; }
19
+  .tag    { background-color: #eee; font-family: monospace;
20
+            padding: 2px; font-size: 80%; font-weight: normal; }
21
+  .timestamp { color: #bebebe; }
22
+  .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; }
26
+  .underline { text-decoration: underline; }
27
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
28
+  p.verse { margin-left: 3%; }
29
+  pre {
30
+    border: 1px solid #ccc;
31
+    box-shadow: 3px 3px 3px #eee;
32
+    padding: 8pt;
33
+    font-family: monospace;
34
+    overflow: auto;
35
+    margin: 1.2em;
36
+  }
37
+  pre.src {
38
+    position: relative;
39
+    overflow: visible;
40
+    padding-top: 1.2em;
41
+  }
42
+  pre.src:before {
43
+    display: none;
44
+    position: absolute;
45
+    background-color: white;
46
+    top: -10px;
47
+    right: 10px;
48
+    padding: 3px;
49
+    border: 1px solid black;
50
+  }
51
+  pre.src:hover:before { display: inline;}
52
+  pre.src-sh:before    { content: 'sh'; }
53
+  pre.src-bash:before  { content: 'sh'; }
54
+  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'; }
59
+
60
+  table { border-collapse:collapse; }
61
+  caption.t-above { caption-side: top; }
62
+  caption.t-bottom { caption-side: bottom; }
63
+  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; }
70
+  dt { font-weight: bold; }
71
+  .footpara:nth-child(2) { display: inline; }
72
+  .footpara { display: block; }
73
+  .footdef  { margin-bottom: 1em; }
74
+  .figure { padding: 1em; }
75
+  .figure p { text-align: center; }
76
+  .inlinetask {
77
+    padding: 10px;
78
+    border: 2px solid gray;
79
+    margin: 10px;
80
+    background: #ffffcc;
81
+  }
82
+  #org-div-home-and-up
83
+   { text-align: right; font-size: 70%; white-space: nowrap; }
84
+  textarea { overflow-x: auto; }
85
+  .linenr { font-size: smaller }
86
+  .code-highlighted { background-color: #ffff00; }
87
+  .org-info-js_info-navigation { border-style: none; }
88
+  #org-info-js_console-label
89
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
90
+  .org-info-js_search-highlight
91
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
92
+  /*]]>*/-->
93
+</style>
94
+<link rel="stylesheet" type="text/css" href="freedombone.css" />
95
+<script type="text/javascript">
96
+/*
97
+@licstart  The following is the entire license notice for the
98
+JavaScript code in this tag.
99
+
100
+Copyright (C) 2012-2013 Free Software Foundation, Inc.
101
+
102
+The JavaScript code in this tag is free software: you can
103
+redistribute it and/or modify it under the terms of the GNU
104
+General Public License (GNU GPL) as published by the Free Software
105
+Foundation, either version 3 of the License, or (at your option)
106
+any later version.  The code is distributed WITHOUT ANY WARRANTY;
107
+without even the implied warranty of MERCHANTABILITY or FITNESS
108
+FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
109
+
110
+As additional permission under GNU GPL version 3 section 7, you
111
+may distribute non-source (e.g., minimized or compacted) forms of
112
+that code without the copy of the GNU GPL normally required by
113
+section 4, provided you include this license notice and a URL
114
+through which recipients can access the Corresponding Source.
115
+
116
+
117
+@licend  The above is the entire license notice
118
+for the JavaScript code in this tag.
119
+*/
120
+<!--/*--><![CDATA[/*><!--*/
121
+ function CodeHighlightOn(elem, id)
122
+ {
123
+   var target = document.getElementById(id);
124
+   if(null != target) {
125
+     elem.cacheClassElem = elem.className;
126
+     elem.cacheClassTarget = target.className;
127
+     target.className = "code-highlighted";
128
+     elem.className   = "code-highlighted";
129
+   }
130
+ }
131
+ function CodeHighlightOff(elem, id)
132
+ {
133
+   var target = document.getElementById(id);
134
+   if(elem.cacheClassElem)
135
+     elem.className = elem.cacheClassElem;
136
+   if(elem.cacheClassTarget)
137
+     target.className = elem.cacheClassTarget;
138
+ }
139
+/*]]>*///-->
140
+</script>
141
+</head>
142
+<body>
143
+<div id="preamble" class="status">
144
+<a name="top" id="top"></a>
145
+</div>
146
+<div id="content">
147
+<h1 class="title"></h1>
148
+<div class="center">
149
+
150
+<div class="figure">
151
+<p><img src="images/logo.png" alt="logo.png" />
152
+</p>
153
+</div>
154
+</div>
155
+
156
+<p>
157
+Log into the system with:
158
+</p>
159
+
160
+<div class="org-src-container">
161
+
162
+<pre class="src src-bash">ssh username@domainname -p 2222
163
+</pre>
164
+</div>
165
+
166
+<p>
167
+Select <b>Administrator controls</b> then <b>User Management</b>.
168
+</p>
169
+
170
+
171
+<div class="figure">
172
+<p><img src="images/controlpanel/control_panel_manage_users.jpg" alt="control_panel_manage_users.jpg" />
173
+</p>
174
+</div>
175
+</div>
176
+<div id="postamble" class="status">
177
+
178
+<style type="text/css">
179
+.back-to-top {
180
+    position: fixed;
181
+    bottom: 2em;
182
+    right: 0px;
183
+    text-decoration: none;
184
+    color: #000000;
185
+    background-color: rgba(235, 235, 235, 0.80);
186
+    font-size: 12px;
187
+    padding: 1em;
188
+    display: none;
189
+}
190
+
191
+.back-to-top:hover {
192
+    background-color: rgba(135, 135, 135, 0.50);
193
+}
194
+</style>
195
+
196
+<div class="back-to-top">
197
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
198
+</div>
199
+</div>
200
+</body>
201
+</html>