Explorar el Código

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

Bob Mottram hace 7 años
padre
commit
2784c6bd45

+ 33
- 0
doc/EN/app_bdsmail.org Ver fichero

@@ -0,0 +1,33 @@
1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, dlna
5
+#+DESCRIPTION: How to use BDS Mail
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>BDS Mail</h1>
16
+</center>
17
+#+END_EXPORT
18
+
19
+BDS Mail (aka "Brain Dead Simple Mail") is an optional addition to the existing email server which comes installed as default. It creates an extra folder within the Mutt client which allows you to send and receive email using [[https://en.wikipedia.org/wiki/I2P][i2p]] as the transport layer. This solves the problem of being blocked by dubious systems and also the problem of user friendly email encryption. If you're behind a hostile firewall which you don't control and which blocks all ports, this system is still likely to work. You can use GPG as an additional encryption layer if you prefer, but it's not strictly necessary because you already have the i2p public key system to ensure end-to-end security.
20
+
21
+It's unlikely that many people will use this. If it's hard to persuade anyone to use GPG or Enigmail then it will be /next to impossible/ to persuade them to switch to BDS Mail unless they're already obsessive about technical security. However, this provides yet another option for reasonably secure communications if other methods fail or are untrustable.
22
+
23
+* Installation
24
+
25
+ssh into the system with:
26
+
27
+#+BEGIN_SRC bash
28
+ssh myusername@mydomain.com -p 2222
29
+#+END_SRC
30
+
31
+Select *Administrator controls* then *App Settings* then *bdsmail*. It may take a while to install, due to the creation of keys.
32
+
33
+After installation if you exit from *Administrator controls* back to the user control panel then select the option to show your email address. You will now have a new bdsmail address which ends with /.b32.i2p/. If you then select *Use Email* to run the Mutt email client you'll notice that you now have a folder called *i2p*. If you select that folder (move up and down with /CTRL+n/ or /CTRL+p/ and open with /CTRL+o/) you can then send email from your new address, or receive mail to it. Just like ordinary email, but with a more random-looking address.

+ 4
- 0
doc/EN/apps.org Ver fichero

@@ -29,6 +29,10 @@ The base install of the system just contains an email server and Mutt client, bu
29 29
 A web based accounts system for small businesses or freelancers.
30 30
 
31 31
 [[./app_akaunting.html][How to use it]]
32
+* BDS Mail
33
+It's like ordinary email, but with [[https://en.wikipedia.org/wiki/I2P][i2p]] as the transport mechanism.
34
+
35
+[[./app_bdsmail.html][How to use it]]
32 36
 * CryptPad
33 37
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
34 38
 

+ 31
- 9
src/freedombone-app-bdsmail Ver fichero

@@ -34,10 +34,12 @@ IN_DEFAULT_INSTALL=0
34 34
 SHOW_ON_ABOUT=1
35 35
 
36 36
 BDSMAIL_REPO="https://github.com/majestrate/bdsmail"
37
-BDSMAIL_COMMIT='8fb00a725edea59b31b8d23eb32e0c21972bb723'
37
+BDSMAIL_COMMIT='6fae61365306ad3c1966a107aa06310ea65fb239'
38 38
 BDSMAIL_DIR=/etc/bdsmail
39 39
 I2P_SAM_PORT=7656
40 40
 I2P_SMTP_PORT=2525
41
+I2P_WEB_PORT=8489
42
+I2P_POP3_PORT=1110
41 43
 
42 44
 bdsmail=(MY_USERNAME)
43 45
 
@@ -95,9 +97,13 @@ function add_user_bdsmail {
95 97
         mkdir /home/$new_username/.mutt
96 98
         cp /etc/skel/.mutt/bdsmail /home/$new_username/.mutt
97 99
     fi
100
+    read_config_param MY_USERNAME
101
+    BDSMAIL_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail)
98 102
     sed -i "s|username|$new_username|g" /home/$new_username/.mutt/bdsmail
103
+    sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$new_username/.mutt/bdsmail
99 104
     bdsmail_configure_users
100
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $new_username /home/$new_username/Maildir/i2p
105
+    cd $BDSMAIL_DIR
106
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $new_username /home/$new_username/Maildir/i2p "$BDSMAIL_PASSWORD"
101 107
     chown -R $new_username:$new_username /home/$new_username/.mutt
102 108
     echo '0'
103 109
 }
@@ -110,6 +116,19 @@ function install_interactive_bdsmail {
110 116
 function change_password_bdsmail {
111 117
     curr_username="$1"
112 118
     new_user_password="$2"
119
+
120
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$new_user_password"
121
+
122
+    for d in /home/*/ ; do
123
+        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
124
+        if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
125
+            sed -i "s|set smtp_url=.*|set smtp_url=smtp://${curr_username}:${new_user_password}@127.0.0.1:$I2P_SMTP_PORT/" /home/${USERNAME}/.mutt/bdsmail
126
+            sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" /home/${USERNAME}/.mutt/bdsmail
127
+            chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.mutt/bdsmail
128
+            cd $BDSMAIL_DIR
129
+            $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $curr_username /home/$curr_username/Maildir/i2p "$new_user_password"
130
+        fi
131
+    done
113 132
 }
114 133
 
115 134
 function bdsmail_update_domain {
@@ -333,8 +352,8 @@ function install_bdsmail {
333 352
     echo "i2paddr = 127.0.0.1:$I2P_SAM_PORT" >> $BDSMAIL_DIR/config.ini
334 353
     echo 'i2pkeyfile = bdsmail-privkey.dat' >> $BDSMAIL_DIR/config.ini
335 354
     echo "bindmail = 127.0.0.1:$I2P_SMTP_PORT" >> $BDSMAIL_DIR/config.ini
336
-    echo 'bindweb = 127.0.0.1:8489' >> $BDSMAIL_DIR/config.ini
337
-    echo 'bindpop3 = 127.0.0.1:1110' >> $BDSMAIL_DIR/config.ini
355
+    echo "bindweb = 127.0.0.1:$I2P_WEB_PORT" >> $BDSMAIL_DIR/config.ini
356
+    echo "bindpop3 = 127.0.0.1:$I2P_POP3_PORT" >> $BDSMAIL_DIR/config.ini
338 357
     echo 'domain = localhost' >> $BDSMAIL_DIR/config.ini
339 358
     echo 'maildir = Maildir/i2p' >> $BDSMAIL_DIR/config.ini
340 359
     echo 'database = localhost.sqlite' >> $BDSMAIL_DIR/config.ini
@@ -411,16 +430,17 @@ function install_bdsmail {
411 430
         exit 8934638
412 431
     fi
413 432
 
414
-    bdsmail_admin_password="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
415
-    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$bdsmail_admin_password"
416
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini admin $BDSMAIL_DIR/Maildir/i2p/admin "$bdsmail_admin_password"
433
+    BDSMAIL_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
434
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$BDSMAIL_PASSWORD"
435
+    cd $BDSMAIL_DIR
436
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini admin $BDSMAIL_DIR/Maildir/i2p/admin "$BDSMAIL_PASSWORD"
417 437
 
418 438
     # Create mutt configuration
419 439
     if [ ! -d /etc/skel/.mutt ]; then
420 440
         mkdir /etc/skel/.mutt
421 441
     fi
422 442
     echo 'set mbox_type=Maildir' > /etc/skel/.mutt/bdsmail
423
-    echo "set smtp_url=smtp://admin:${bdsmail_admin_password}@127.0.0.1:$I2P_SMTP_PORT/" >> /etc/skel/.mutt/bdsmail
443
+    echo "set smtp_url=smtp://username:password@127.0.0.1:$I2P_SMTP_PORT/" >> /etc/skel/.mutt/bdsmail
424 444
     echo 'set use_from=yes' >> /etc/skel/.mutt/bdsmail
425 445
     echo "set from=username@${bds_domain}" >> /etc/skel/.mutt/bdsmail
426 446
     echo "set spoolfile=~/Maildir/i2p" >> /etc/skel/.mutt/bdsmail
@@ -435,11 +455,13 @@ function install_bdsmail {
435 455
     fi
436 456
     cp /etc/skel/.mutt/bdsmail /home/$MY_USERNAME/.mutt
437 457
     sed -i "s|username|$MY_USERNAME|g" /home/$MY_USERNAME/.mutt/bdsmail
458
+    sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$MY_USERNAME/.mutt/bdsmail
438 459
     chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt
439 460
 
440 461
     bdsmail_configure_users
441 462
 
442
-    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $MY_USERNAME /home/$MY_USERNAME/Maildir/i2p
463
+    cd $BDSMAIL_DIR
464
+    $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $MY_USERNAME /home/$MY_USERNAME/Maildir/i2p "$BDSMAIL_PASSWORD"
443 465
 
444 466
     APP_INSTALLED=1
445 467
 }

+ 15
- 12
src/freedombone-app-pleroma Ver fichero

@@ -93,19 +93,22 @@ function create_pleroma_blocklist {
93 93
     echo 'while read blocked; do' >> $blocking_script_file
94 94
     echo '    if [[ "$blocked" == *"."* || "$blocked" == *"@"* ]]; then' >> $blocking_script_file
95 95
     echo '        if [ ${#blocked} -gt 4 ]; then' >> $blocking_script_file
96
-    echo '          if [ $objects_updated ]; then' >> $blocking_script_file
97
-    echo '              objects_query="${objects_query} or"' >> $blocking_script_file
98
-    echo '              users_query="${users_query} or"' >> $blocking_script_file
99
-    echo '          fi' >> $blocking_script_file
100
-    echo "          objects_query=\"\${objects_query} data->>'content' ilike '%\${blocked}%' or data->>'actor' ilike '%\${blocked}%' or data->>'to' ilike '%\${blocked}%' or data->>'id' ilike '%\${blocked}%' or data->>'external_url' ilike '%\${blocked}%'\"" >> $blocking_script_file
101
-    echo "          users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"" >> $blocking_script_file
102
-    echo '          objects_updated=1' >> $blocking_script_file
96
+    echo '            if [ $objects_updated ]; then' >> $blocking_script_file
97
+    echo '                objects_query="${objects_query} or"' >> $blocking_script_file
98
+    echo '                users_query="${users_query} or"' >> $blocking_script_file
99
+    echo '            fi' >> $blocking_script_file
100
+    echo "            objects_query=\"\${objects_query} data->>'content' ilike '%\${blocked}%' or data->>'actor' ilike '%\${blocked}%' or data->>'to' ilike '%\${blocked}%' or data->>'id' ilike '%\${blocked}%' or data->>'external_url' ilike '%\${blocked}%'\"" >> $blocking_script_file
101
+    echo "            users_query=\"\${users_query} nickname ilike '%\${blocked}%'\"" >> $blocking_script_file
102
+    echo '            objects_updated=1' >> $blocking_script_file
103 103
     echo '            if [[ "$blocked" != *"@"* ]]; then' >> $blocking_script_file
104
-    echo '              if [ $websub_server_subscriptions_updated ]; then' >> $blocking_script_file
105
-    echo '                  websub_server_subscriptions_query="${websub_server_subscriptions_query} or"' >> $blocking_script_file
106
-    echo '              fi' >> $blocking_script_file
107
-    echo "              websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} callback like '%\${blocked}%'\"" >> $blocking_script_file
108
-    echo '              websub_server_subscriptions_updated=1' >> $blocking_script_file
104
+    echo '                if ! grep -q "127.0.0.1  $blocked" /etc/hosts; then' >> $blocking_script_file
105
+    echo '                    echo "127.0.0.1  $blocked" >> /etc/hosts' >> $blocking_script_file
106
+    echo '                fi' >> $blocking_script_file
107
+    echo '                if [ $websub_server_subscriptions_updated ]; then' >> $blocking_script_file
108
+    echo '                    websub_server_subscriptions_query="${websub_server_subscriptions_query} or"' >> $blocking_script_file
109
+    echo '                fi' >> $blocking_script_file
110
+    echo "                websub_server_subscriptions_query=\"\${websub_server_subscriptions_query} callback like '%\${blocked}%'\"" >> $blocking_script_file
111
+    echo '                websub_server_subscriptions_updated=1' >> $blocking_script_file
109 112
     echo '            fi' >> $blocking_script_file
110 113
     echo '        fi' >> $blocking_script_file
111 114
     echo '    fi' >> $blocking_script_file

+ 3
- 2
src/freedombone-controlpanel-user Ver fichero

@@ -885,14 +885,15 @@ function menu_run_client_app {
885 885
 function show_your_email_address {
886 886
     GPG_FINGERPRINT=$(gpg --fingerprint $GPG_ID | sed -n '2p' | sed 's/^[ \t]*//')
887 887
     GPG_DATE=$(gpg --fingerprint $GPG_ID | grep -i "pub" | head -n 1 | awk -F ' ' '{print $3}')
888
-    if [ ! -d /etc/bdsmail ]; then
888
+    if [ ! -f ~/.mutt/bdsmail ]; then
889 889
         dialog --title $"Show your Email Address" \
890 890
                --backtitle $"Freedombone User Control Panel" \
891 891
                --msgbox $"Email Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE" 12 70
892 892
     else
893
+        bdsmail_address=$(cat ~/.mutt/bdsmail | grep 'set from=' | awk -F '=' '{print $2}')
893 894
         dialog --title $"Show your Email Address" \
894 895
                --backtitle $"Freedombone User Control Panel" \
895
-               --msgbox $"\nYou can press SHIFT and then drag the mouse and right click to copy.\n\nEmail Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE\n\nI2P Address: ${USER}@$(bdsmail_domain)" 17 90
896
+               --msgbox $"\nYou can press SHIFT and then drag the mouse and right click to copy.\n\nEmail Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE\n\nI2P Address: ${bdsmail_address}" 17 90
896 897
     fi
897 898
 }
898 899
 

+ 25
- 4
src/freedombone-utils-i2p Ver fichero

@@ -63,6 +63,7 @@ function install_i2p {
63 63
 }
64 64
 
65 65
 function remove_i2p {
66
+    service i2p stop
66 67
     apt-get -yq remove i2p-router --purge
67 68
     apt-get -yq remove i2p --purge
68 69
     apt-get -yq remove i2p-keyring --purge
@@ -82,15 +83,35 @@ function remove_i2p {
82 83
     if [ -d /usr/share/i2p ]; then
83 84
         rm -rf /usr/share/i2p
84 85
     fi
86
+    if [ -d /var/log/i2p ]; then
87
+        rm /var/log/i2p
88
+    fi
89
+    rm -rf /tmp/i2p*
85 90
 }
86 91
 
87 92
 function i2p_enable_sam {
88 93
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
89
-        apt-get -yq remove i2p --purge
94
+        service i2p stop
95
+
96
+        apt-get -yq remove i2p i2p-keyring --purge
90 97
         apt-get -yq remove i2p-router --purge
91
-        apt-get -yq install i2p
92
-        apt-get -yq install i2p-router
93
-        sleep 2
98
+        if [ -d /var/lib/i2p ]; then
99
+            rm -rf /var/lib/i2p
100
+        fi
101
+        if [ -d /etc/i2p ]; then
102
+            rm -rf /etc/i2p
103
+        fi
104
+        if [ -d /usr/share/i2p ]; then
105
+            rm -rf /usr/share/i2p
106
+        fi
107
+        if [ -d /var/log/i2p ]; then
108
+            rm /var/log/i2p
109
+        fi
110
+        rm -rf /tmp/i2p*
111
+        apt-get -yq install i2p i2p-keyring
112
+        apt-get -yq install i2p-router --reinstall
113
+        systemctl restart i2p
114
+        sleep 10
94 115
     fi
95 116
     if [ ! -f /var/lib/i2p/i2p-config/clients.config ]; then
96 117
         echo $'File not found /var/lib/i2p/i2p-config/clients.config'

+ 306
- 0
website/EN/app_bdsmail.html Ver fichero

@@ -0,0 +1,306 @@
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-02-16 Fri 10:42 -->
7
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
+<meta name="viewport" content="width=device-width, initial-scale=1" />
9
+<title>&lrm;</title>
10
+<meta name="generator" content="Org mode" />
11
+<meta name="author" content="Bob Mottram" />
12
+<meta name="description" content="How to use BDS Mail"
13
+ />
14
+<meta name="keywords" content="freedombone, dlna" />
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>BDS Mail</h1>
249
+</center>
250
+
251
+<p>
252
+BDS Mail (aka "Brain Dead Simple Mail") is an optional addition to the existing email server which comes installed as default. It creates an extra folder within the Mutt client which allows you to send and receive email using <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport layer. This solves the problem of being blocked by dubious systems and also the problem of user friendly email encryption. If you're behind a hostile firewall which you don't control and which blocks all ports, this system is still likely to work. You can use GPG as an additional encryption layer if you prefer, but it's not strictly necessary because you already have the i2p public key system to ensure end-to-end security.
253
+</p>
254
+
255
+<p>
256
+It's unlikely that many people will use this. If it's hard to persuade anyone to use GPG or Enigmail then it will be <i>next to impossible</i> to persuade them to switch to BDS Mail unless they're already obsessive about technical security. However, this provides yet another option for reasonably secure communications if other methods fail or are untrustable.
257
+</p>
258
+
259
+<div id="outline-container-org4d1584a" class="outline-2">
260
+<h2 id="org4d1584a">Installation</h2>
261
+<div class="outline-text-2" id="text-org4d1584a">
262
+<p>
263
+ssh into the system with:
264
+</p>
265
+
266
+<div class="org-src-container">
267
+<pre class="src src-bash">ssh myusername@mydomain.com -p 2222
268
+</pre>
269
+</div>
270
+
271
+<p>
272
+Select <b>Administrator controls</b> then <b>App Settings</b> then <b>bdsmail</b>. It may take a while to install, due to the creation of keys.
273
+</p>
274
+
275
+<p>
276
+After installation if you exit from <b>Administrator controls</b> back to the user control panel then select the option to show your email address. You will now have a new bdsmail address which ends with <i>.b32.i2p</i>. If you then select <b>Use Email</b> to run the Mutt email client you'll notice that you now have a folder called <b>i2p</b>. If you select that folder (move up and down with <i>CTRL+n</i> or <i>CTRL+p</i> and open with <i>CTRL+o</i>) you can then send email from your new address, or receive mail to it. Just like ordinary email, but with a more random-looking address.
277
+</p>
278
+</div>
279
+</div>
280
+</div>
281
+<div id="postamble" class="status">
282
+
283
+<style type="text/css">
284
+.back-to-top {
285
+    position: fixed;
286
+    bottom: 2em;
287
+    right: 0px;
288
+    text-decoration: none;
289
+    color: #000000;
290
+    background-color: rgba(235, 235, 235, 0.80);
291
+    font-size: 12px;
292
+    padding: 1em;
293
+    display: none;
294
+}
295
+
296
+.back-to-top:hover {
297
+    background-color: rgba(135, 135, 135, 0.50);
298
+}
299
+</style>
300
+
301
+<div class="back-to-top">
302
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
303
+</div>
304
+</div>
305
+</body>
306
+</html>

+ 136
- 124
website/EN/apps.html Ver fichero

@@ -3,7 +3,7 @@
3 3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5 5
 <head>
6
-<!-- 2018-02-02 Fri 14:51 -->
6
+<!-- 2018-02-16 Fri 10:42 -->
7 7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8 8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9 9
 <title>&lrm;</title>
@@ -265,9 +265,9 @@ The base install of the system just contains an email server and Mutt client, bu
265 265
 </div>
266 266
 
267 267
 
268
-<div id="outline-container-org6873154" class="outline-2">
269
-<h2 id="org6873154">Akaunting</h2>
270
-<div class="outline-text-2" id="text-org6873154">
268
+<div id="outline-container-org1bb8cc9" class="outline-2">
269
+<h2 id="org1bb8cc9">Akaunting</h2>
270
+<div class="outline-text-2" id="text-org1bb8cc9">
271 271
 <p>
272 272
 A web based accounts system for small businesses or freelancers.
273 273
 </p>
@@ -277,9 +277,21 @@ A web based accounts system for small businesses or freelancers.
277 277
 </p>
278 278
 </div>
279 279
 </div>
280
-<div id="outline-container-org7e6ef98" class="outline-2">
281
-<h2 id="org7e6ef98">CryptPad</h2>
282
-<div class="outline-text-2" id="text-org7e6ef98">
280
+<div id="outline-container-org1b15bc8" class="outline-2">
281
+<h2 id="org1b15bc8">BDS Mail</h2>
282
+<div class="outline-text-2" id="text-org1b15bc8">
283
+<p>
284
+It's like ordinary email, but with <a href="https://en.wikipedia.org/wiki/I2P">i2p</a> as the transport mechanism.
285
+</p>
286
+
287
+<p>
288
+<a href="./app_bdsmail.html">How to use it</a>
289
+</p>
290
+</div>
291
+</div>
292
+<div id="outline-container-org3782541" class="outline-2">
293
+<h2 id="org3782541">CryptPad</h2>
294
+<div class="outline-text-2" id="text-org3782541">
283 295
 <p>
284 296
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
285 297
 </p>
@@ -289,9 +301,9 @@ Collaborate on editing documents, presentations and source code, or vote on thin
289 301
 </p>
290 302
 </div>
291 303
 </div>
292
-<div id="outline-container-orgb6914dd" class="outline-2">
293
-<h2 id="orgb6914dd">DLNA</h2>
294
-<div class="outline-text-2" id="text-orgb6914dd">
304
+<div id="outline-container-org9361ad2" class="outline-2">
305
+<h2 id="org9361ad2">DLNA</h2>
306
+<div class="outline-text-2" id="text-org9361ad2">
295 307
 <p>
296 308
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
297 309
 </p>
@@ -301,9 +313,9 @@ Enables you to use the system as a music server which any DLNA compatible device
301 313
 </p>
302 314
 </div>
303 315
 </div>
304
-<div id="outline-container-orgc23c65e" class="outline-2">
305
-<h2 id="orgc23c65e">Dokuwiki</h2>
306
-<div class="outline-text-2" id="text-orgc23c65e">
316
+<div id="outline-container-orgc1b9f8d" class="outline-2">
317
+<h2 id="orgc1b9f8d">Dokuwiki</h2>
318
+<div class="outline-text-2" id="text-orgc1b9f8d">
307 319
 <p>
308 320
 A databaseless wiki system.
309 321
 </p>
@@ -313,9 +325,9 @@ A databaseless wiki system.
313 325
 </p>
314 326
 </div>
315 327
 </div>
316
-<div id="outline-container-orgf803ba9" class="outline-2">
317
-<h2 id="orgf803ba9">Edith</h2>
318
-<div class="outline-text-2" id="text-orgf803ba9">
328
+<div id="outline-container-org809c5af" class="outline-2">
329
+<h2 id="org809c5af">Edith</h2>
330
+<div class="outline-text-2" id="text-org809c5af">
319 331
 <p>
320 332
 Extremely simple and distraction-free notes system.
321 333
 </p>
@@ -325,9 +337,9 @@ Extremely simple and distraction-free notes system.
325 337
 </p>
326 338
 </div>
327 339
 </div>
328
-<div id="outline-container-orgfd2155a" class="outline-2">
329
-<h2 id="orgfd2155a">Emacs</h2>
330
-<div class="outline-text-2" id="text-orgfd2155a">
340
+<div id="outline-container-org2950e2c" class="outline-2">
341
+<h2 id="org2950e2c">Emacs</h2>
342
+<div class="outline-text-2" id="text-org2950e2c">
331 343
 <p>
332 344
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
333 345
 </p>
@@ -337,9 +349,9 @@ If you use the Mutt client to read your email then this will set it up to use em
337 349
 </p>
338 350
 </div>
339 351
 </div>
340
-<div id="outline-container-org5fcc9ff" class="outline-2">
341
-<h2 id="org5fcc9ff">Etherpad</h2>
342
-<div class="outline-text-2" id="text-org5fcc9ff">
352
+<div id="outline-container-org2349efd" class="outline-2">
353
+<h2 id="org2349efd">Etherpad</h2>
354
+<div class="outline-text-2" id="text-org2349efd">
343 355
 <p>
344 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.
345 357
 </p>
@@ -349,9 +361,9 @@ Collaborate on creating documents in real time. Maybe you're planning a holiday
349 361
 </p>
350 362
 </div>
351 363
 </div>
352
-<div id="outline-container-orgdc50344" class="outline-2">
353
-<h2 id="orgdc50344">Federated wiki</h2>
354
-<div class="outline-text-2" id="text-orgdc50344">
364
+<div id="outline-container-orgbc1e58a" class="outline-2">
365
+<h2 id="orgbc1e58a">Federated wiki</h2>
366
+<div class="outline-text-2" id="text-orgbc1e58a">
355 367
 <p>
356 368
 A new approach to creating wiki content.
357 369
 </p>
@@ -361,9 +373,9 @@ A new approach to creating wiki content.
361 373
 </p>
362 374
 </div>
363 375
 </div>
364
-<div id="outline-container-org30bda20" class="outline-2">
365
-<h2 id="org30bda20">Friendica</h2>
366
-<div class="outline-text-2" id="text-org30bda20">
376
+<div id="outline-container-org806878a" class="outline-2">
377
+<h2 id="org806878a">Friendica</h2>
378
+<div class="outline-text-2" id="text-org806878a">
367 379
 <p>
368 380
 Federated social network system.
369 381
 </p>
@@ -373,9 +385,9 @@ Federated social network system.
373 385
 </p>
374 386
 </div>
375 387
 </div>
376
-<div id="outline-container-org98e4708" class="outline-2">
377
-<h2 id="org98e4708">Ghost</h2>
378
-<div class="outline-text-2" id="text-org98e4708">
388
+<div id="outline-container-org13b6601" class="outline-2">
389
+<h2 id="org13b6601">Ghost</h2>
390
+<div class="outline-text-2" id="text-org13b6601">
379 391
 <p>
380 392
 Modern looking blogging system.
381 393
 </p>
@@ -385,9 +397,9 @@ Modern looking blogging system.
385 397
 </p>
386 398
 </div>
387 399
 </div>
388
-<div id="outline-container-orgcd73257" class="outline-2">
389
-<h2 id="orgcd73257">GNU Social</h2>
390
-<div class="outline-text-2" id="text-orgcd73257">
400
+<div id="outline-container-org18b5451" class="outline-2">
401
+<h2 id="org18b5451">GNU Social</h2>
402
+<div class="outline-text-2" id="text-org18b5451">
391 403
 <p>
392 404
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
393 405
 </p>
@@ -397,9 +409,9 @@ Federated social network based on the OStatus protocol. You can "<i>remote follo
397 409
 </p>
398 410
 </div>
399 411
 </div>
400
-<div id="outline-container-org5f6afde" class="outline-2">
401
-<h2 id="org5f6afde">Gogs</h2>
402
-<div class="outline-text-2" id="text-org5f6afde">
412
+<div id="outline-container-org877ac0a" class="outline-2">
413
+<h2 id="org877ac0a">Gogs</h2>
414
+<div class="outline-text-2" id="text-org877ac0a">
403 415
 <p>
404 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.
405 417
 </p>
@@ -409,9 +421,9 @@ Lightweight git project hosting system. You can mirror projects from Github, or
409 421
 </p>
410 422
 </div>
411 423
 </div>
412
-<div id="outline-container-org4d1d8ba" class="outline-2">
413
-<h2 id="org4d1d8ba">HTMLy</h2>
414
-<div class="outline-text-2" id="text-org4d1d8ba">
424
+<div id="outline-container-orga2ff624" class="outline-2">
425
+<h2 id="orga2ff624">HTMLy</h2>
426
+<div class="outline-text-2" id="text-orga2ff624">
415 427
 <p>
416 428
 Databaseless blogging system. Quite simple and with a markdown-like format.
417 429
 </p>
@@ -421,9 +433,9 @@ Databaseless blogging system. Quite simple and with a markdown-like format.
421 433
 </p>
422 434
 </div>
423 435
 </div>
424
-<div id="outline-container-org4039820" class="outline-2">
425
-<h2 id="org4039820">Hubzilla</h2>
426
-<div class="outline-text-2" id="text-org4039820">
436
+<div id="outline-container-org807c97c" class="outline-2">
437
+<h2 id="org807c97c">Hubzilla</h2>
438
+<div class="outline-text-2" id="text-org807c97c">
427 439
 <p>
428 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.
429 441
 </p>
@@ -433,9 +445,9 @@ Web publishing platform with social network like features and good privacy contr
433 445
 </p>
434 446
 </div>
435 447
 </div>
436
-<div id="outline-container-orgd7ea9f5" class="outline-2">
437
-<h2 id="orgd7ea9f5">Icecast media stream</h2>
438
-<div class="outline-text-2" id="text-orgd7ea9f5">
448
+<div id="outline-container-org95e3282" class="outline-2">
449
+<h2 id="org95e3282">Icecast media stream</h2>
450
+<div class="outline-text-2" id="text-org95e3282">
439 451
 <p>
440 452
 Make your own internet radio station.
441 453
 </p>
@@ -445,9 +457,9 @@ Make your own internet radio station.
445 457
 </p>
446 458
 </div>
447 459
 </div>
448
-<div id="outline-container-org4b18262" class="outline-2">
449
-<h2 id="org4b18262">IRC Server (ngirc)</h2>
450
-<div class="outline-text-2" id="text-org4b18262">
460
+<div id="outline-container-orgd272c05" class="outline-2">
461
+<h2 id="orgd272c05">IRC Server (ngirc)</h2>
462
+<div class="outline-text-2" id="text-orgd272c05">
451 463
 <p>
452 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.
453 465
 </p>
@@ -457,18 +469,18 @@ Run your own IRC chat channel which can be secured with a password and accessibl
457 469
 </p>
458 470
 </div>
459 471
 </div>
460
-<div id="outline-container-org3244c52" class="outline-2">
461
-<h2 id="org3244c52">Jitsi Meet</h2>
462
-<div class="outline-text-2" id="text-org3244c52">
472
+<div id="outline-container-org6b54bf7" class="outline-2">
473
+<h2 id="org6b54bf7">Jitsi Meet</h2>
474
+<div class="outline-text-2" id="text-org6b54bf7">
463 475
 <p>
464 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.
465 477
 </p>
466 478
 </div>
467 479
 </div>
468 480
 
469
-<div id="outline-container-org7f54f3b" class="outline-2">
470
-<h2 id="org7f54f3b">KanBoard</h2>
471
-<div class="outline-text-2" id="text-org7f54f3b">
481
+<div id="outline-container-org0604538" class="outline-2">
482
+<h2 id="org0604538">KanBoard</h2>
483
+<div class="outline-text-2" id="text-org0604538">
472 484
 <p>
473 485
 A simple kanban system for managing projects or TODO lists.
474 486
 </p>
@@ -478,9 +490,9 @@ A simple kanban system for managing projects or TODO lists.
478 490
 </p>
479 491
 </div>
480 492
 </div>
481
-<div id="outline-container-org511a639" class="outline-2">
482
-<h2 id="org511a639">Key Server</h2>
483
-<div class="outline-text-2" id="text-org511a639">
493
+<div id="outline-container-orgcd31aa0" class="outline-2">
494
+<h2 id="orgcd31aa0">Key Server</h2>
495
+<div class="outline-text-2" id="text-orgcd31aa0">
484 496
 <p>
485 497
 An OpenPGP key server for storing and retrieving GPG public keys.
486 498
 </p>
@@ -490,9 +502,9 @@ An OpenPGP key server for storing and retrieving GPG public keys.
490 502
 </p>
491 503
 </div>
492 504
 </div>
493
-<div id="outline-container-org058add3" class="outline-2">
494
-<h2 id="org058add3">Koel</h2>
495
-<div class="outline-text-2" id="text-org058add3">
505
+<div id="outline-container-org18f0038" class="outline-2">
506
+<h2 id="org18f0038">Koel</h2>
507
+<div class="outline-text-2" id="text-org18f0038">
496 508
 <p>
497 509
 Access your music collection from any internet connected device.
498 510
 </p>
@@ -502,9 +514,9 @@ Access your music collection from any internet connected device.
502 514
 </p>
503 515
 </div>
504 516
 </div>
505
-<div id="outline-container-org611fc47" class="outline-2">
506
-<h2 id="org611fc47">Lychee</h2>
507
-<div class="outline-text-2" id="text-org611fc47">
517
+<div id="outline-container-orgdac8618" class="outline-2">
518
+<h2 id="orgdac8618">Lychee</h2>
519
+<div class="outline-text-2" id="text-orgdac8618">
508 520
 <p>
509 521
 Make your photo albums available on the web.
510 522
 </p>
@@ -514,9 +526,9 @@ Make your photo albums available on the web.
514 526
 </p>
515 527
 </div>
516 528
 </div>
517
-<div id="outline-container-org3a59d15" class="outline-2">
518
-<h2 id="org3a59d15">Mailpile</h2>
519
-<div class="outline-text-2" id="text-org3a59d15">
529
+<div id="outline-container-org2f65f95" class="outline-2">
530
+<h2 id="org2f65f95">Mailpile</h2>
531
+<div class="outline-text-2" id="text-org2f65f95">
520 532
 <p>
521 533
 Modern email client which supports GPG encryption.
522 534
 </p>
@@ -526,9 +538,9 @@ Modern email client which supports GPG encryption.
526 538
 </p>
527 539
 </div>
528 540
 </div>
529
-<div id="outline-container-org36c7c61" class="outline-2">
530
-<h2 id="org36c7c61">Matrix</h2>
531
-<div class="outline-text-2" id="text-org36c7c61">
541
+<div id="outline-container-org35b7261" class="outline-2">
542
+<h2 id="org35b7261">Matrix</h2>
543
+<div class="outline-text-2" id="text-org35b7261">
532 544
 <p>
533 545
 Multi-user chat with some security and moderation controls.
534 546
 </p>
@@ -538,9 +550,9 @@ Multi-user chat with some security and moderation controls.
538 550
 </p>
539 551
 </div>
540 552
 </div>
541
-<div id="outline-container-org69bd95e" class="outline-2">
542
-<h2 id="org69bd95e">Mediagoblin</h2>
543
-<div class="outline-text-2" id="text-org69bd95e">
553
+<div id="outline-container-orgf522d1b" class="outline-2">
554
+<h2 id="orgf522d1b">Mediagoblin</h2>
555
+<div class="outline-text-2" id="text-orgf522d1b">
544 556
 <p>
545 557
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
546 558
 </p>
@@ -550,9 +562,9 @@ Publicly host video and audio files so that you don't need to use YouTube/Vimeo/
550 562
 </p>
551 563
 </div>
552 564
 </div>
553
-<div id="outline-container-org083b086" class="outline-2">
554
-<h2 id="org083b086">Mumble</h2>
555
-<div class="outline-text-2" id="text-org083b086">
565
+<div id="outline-container-orgdd0c788" class="outline-2">
566
+<h2 id="orgdd0c788">Mumble</h2>
567
+<div class="outline-text-2" id="text-orgdd0c788">
556 568
 <p>
557 569
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
558 570
 </p>
@@ -562,9 +574,9 @@ The popular VoIP and text chat system. Say goodbye to old-fashioned telephony co
562 574
 </p>
563 575
 </div>
564 576
 </div>
565
-<div id="outline-container-orga89941d" class="outline-2">
566
-<h2 id="orga89941d">NextCloud</h2>
567
-<div class="outline-text-2" id="text-orga89941d">
577
+<div id="outline-container-org29456cf" class="outline-2">
578
+<h2 id="org29456cf">NextCloud</h2>
579
+<div class="outline-text-2" id="text-org29456cf">
568 580
 <p>
569 581
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
570 582
 </p>
@@ -574,9 +586,9 @@ Store files on your server and sync them with laptops or mobile devices. Include
574 586
 </p>
575 587
 </div>
576 588
 </div>
577
-<div id="outline-container-org1855642" class="outline-2">
578
-<h2 id="org1855642">PeerTube</h2>
579
-<div class="outline-text-2" id="text-org1855642">
589
+<div id="outline-container-orgbcb8568" class="outline-2">
590
+<h2 id="orgbcb8568">PeerTube</h2>
591
+<div class="outline-text-2" id="text-orgbcb8568">
580 592
 <p>
581 593
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
582 594
 </p>
@@ -586,9 +598,9 @@ Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better en
586 598
 </p>
587 599
 </div>
588 600
 </div>
589
-<div id="outline-container-org75f549b" class="outline-2">
590
-<h2 id="org75f549b">PI-Hole</h2>
591
-<div class="outline-text-2" id="text-org75f549b">
601
+<div id="outline-container-org46e7bef" class="outline-2">
602
+<h2 id="org46e7bef">PI-Hole</h2>
603
+<div class="outline-text-2" id="text-org46e7bef">
592 604
 <p>
593 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.
594 606
 </p>
@@ -598,9 +610,9 @@ The black hole for web adverts. Block adverts at the domain name level within yo
598 610
 </p>
599 611
 </div>
600 612
 </div>
601
-<div id="outline-container-orga1fbb11" class="outline-2">
602
-<h2 id="orga1fbb11">PostActiv</h2>
603
-<div class="outline-text-2" id="text-orga1fbb11">
613
+<div id="outline-container-orgf349fcf" class="outline-2">
614
+<h2 id="orgf349fcf">PostActiv</h2>
615
+<div class="outline-text-2" id="text-orgf349fcf">
604 616
 <p>
605 617
 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.
606 618
 </p>
@@ -610,9 +622,9 @@ An alternative federated social networking system compatible with GNU Social, Pl
610 622
 </p>
611 623
 </div>
612 624
 </div>
613
-<div id="outline-container-org1448160" class="outline-2">
614
-<h2 id="org1448160">PrivateBin</h2>
615
-<div class="outline-text-2" id="text-org1448160">
625
+<div id="outline-container-org842b0ba" class="outline-2">
626
+<h2 id="org842b0ba">PrivateBin</h2>
627
+<div class="outline-text-2" id="text-org842b0ba">
616 628
 <p>
617 629
 A pastebin where the server has zero knowledge of the content being pasted.
618 630
 </p>
@@ -622,9 +634,9 @@ A pastebin where the server has zero knowledge of the content being pasted.
622 634
 </p>
623 635
 </div>
624 636
 </div>
625
-<div id="outline-container-org9d310cf" class="outline-2">
626
-<h2 id="org9d310cf">Profanity</h2>
627
-<div class="outline-text-2" id="text-org9d310cf">
637
+<div id="outline-container-org75de424" class="outline-2">
638
+<h2 id="org75de424">Profanity</h2>
639
+<div class="outline-text-2" id="text-org75de424">
628 640
 <p>
629 641
 A shell based XMPP client which you can run on the Freedombone server via ssh.
630 642
 </p>
@@ -634,9 +646,9 @@ A shell based XMPP client which you can run on the Freedombone server via ssh.
634 646
 </p>
635 647
 </div>
636 648
 </div>
637
-<div id="outline-container-orge6aa619" class="outline-2">
638
-<h2 id="orge6aa619">Riot Web</h2>
639
-<div class="outline-text-2" id="text-orge6aa619">
649
+<div id="outline-container-org127dc3f" class="outline-2">
650
+<h2 id="org127dc3f">Riot Web</h2>
651
+<div class="outline-text-2" id="text-org127dc3f">
640 652
 <p>
641 653
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
642 654
 </p>
@@ -646,9 +658,9 @@ A browser based user interface for the Matrix federated communications system, i
646 658
 </p>
647 659
 </div>
648 660
 </div>
649
-<div id="outline-container-org50e63cb" class="outline-2">
650
-<h2 id="org50e63cb">SearX</h2>
651
-<div class="outline-text-2" id="text-org50e63cb">
661
+<div id="outline-container-org179bd91" class="outline-2">
662
+<h2 id="org179bd91">SearX</h2>
663
+<div class="outline-text-2" id="text-org179bd91">
652 664
 <p>
653 665
 A metasearch engine for customised and private web searches.
654 666
 </p>
@@ -658,9 +670,9 @@ A metasearch engine for customised and private web searches.
658 670
 </p>
659 671
 </div>
660 672
 </div>
661
-<div id="outline-container-orgec6ad33" class="outline-2">
662
-<h2 id="orgec6ad33">tt-rss</h2>
663
-<div class="outline-text-2" id="text-orgec6ad33">
673
+<div id="outline-container-orgffb086f" class="outline-2">
674
+<h2 id="orgffb086f">tt-rss</h2>
675
+<div class="outline-text-2" id="text-orgffb086f">
664 676
 <p>
665 677
 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.
666 678
 </p>
@@ -670,9 +682,9 @@ Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via a
670 682
 </p>
671 683
 </div>
672 684
 </div>
673
-<div id="outline-container-org4de6eec" class="outline-2">
674
-<h2 id="org4de6eec">Syncthing</h2>
675
-<div class="outline-text-2" id="text-org4de6eec">
685
+<div id="outline-container-org69b4a9f" class="outline-2">
686
+<h2 id="org69b4a9f">Syncthing</h2>
687
+<div class="outline-text-2" id="text-org69b4a9f">
676 688
 <p>
677 689
 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.
678 690
 </p>
@@ -682,9 +694,9 @@ Possibly the best way to synchronise files across all of your devices. Once it h
682 694
 </p>
683 695
 </div>
684 696
 </div>
685
-<div id="outline-container-orgebbf48a" class="outline-2">
686
-<h2 id="orgebbf48a">Tahoe-LAFS</h2>
687
-<div class="outline-text-2" id="text-orgebbf48a">
697
+<div id="outline-container-org289e2f4" class="outline-2">
698
+<h2 id="org289e2f4">Tahoe-LAFS</h2>
699
+<div class="outline-text-2" id="text-org289e2f4">
688 700
 <p>
689 701
 Robust and encrypted storage of files on one or more server.
690 702
 </p>
@@ -694,9 +706,9 @@ Robust and encrypted storage of files on one or more server.
694 706
 </p>
695 707
 </div>
696 708
 </div>
697
-<div id="outline-container-org3275ee7" class="outline-2">
698
-<h2 id="org3275ee7">Tox</h2>
699
-<div class="outline-text-2" id="text-org3275ee7">
709
+<div id="outline-container-org9660e8b" class="outline-2">
710
+<h2 id="org9660e8b">Tox</h2>
711
+<div class="outline-text-2" id="text-org9660e8b">
700 712
 <p>
701 713
 Client and bootstrap node for the Tox chat/VoIP system.
702 714
 </p>
@@ -706,9 +718,9 @@ Client and bootstrap node for the Tox chat/VoIP system.
706 718
 </p>
707 719
 </div>
708 720
 </div>
709
-<div id="outline-container-orgceb6c24" class="outline-2">
710
-<h2 id="orgceb6c24">Turtl</h2>
711
-<div class="outline-text-2" id="text-orgceb6c24">
721
+<div id="outline-container-org98827e8" class="outline-2">
722
+<h2 id="org98827e8">Turtl</h2>
723
+<div class="outline-text-2" id="text-org98827e8">
712 724
 <p>
713 725
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
714 726
 </p>
@@ -718,18 +730,18 @@ A system for privately creating and sharing notes and images, similar to Evernot
718 730
 </p>
719 731
 </div>
720 732
 </div>
721
-<div id="outline-container-org1216de4" class="outline-2">
722
-<h2 id="org1216de4">Vim</h2>
723
-<div class="outline-text-2" id="text-org1216de4">
733
+<div id="outline-container-orgb94b916" class="outline-2">
734
+<h2 id="orgb94b916">Vim</h2>
735
+<div class="outline-text-2" id="text-orgb94b916">
724 736
 <p>
725 737
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
726 738
 </p>
727 739
 </div>
728 740
 </div>
729 741
 
730
-<div id="outline-container-org057b184" class="outline-2">
731
-<h2 id="org057b184">Virtual Private Network (VPN)</h2>
732
-<div class="outline-text-2" id="text-org057b184">
742
+<div id="outline-container-org78963d2" class="outline-2">
743
+<h2 id="org78963d2">Virtual Private Network (VPN)</h2>
744
+<div class="outline-text-2" id="text-org78963d2">
733 745
 <p>
734 746
 Set up a VPN on your server so that you can bypass local internet censorship.
735 747
 </p>
@@ -739,9 +751,9 @@ Set up a VPN on your server so that you can bypass local internet censorship.
739 751
 </p>
740 752
 </div>
741 753
 </div>
742
-<div id="outline-container-org93a66a0" class="outline-2">
743
-<h2 id="org93a66a0">XMPP</h2>
744
-<div class="outline-text-2" id="text-org93a66a0">
754
+<div id="outline-container-orgd631bb2" class="outline-2">
755
+<h2 id="orgd631bb2">XMPP</h2>
756
+<div class="outline-text-2" id="text-orgd631bb2">
745 757
 <p>
746 758
 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.
747 759
 </p>