Bläddra i källkod

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

Bob Mottram 7 år sedan
förälder
incheckning
abfd8de1e4

+ 46
- 0
doc/EN/app_akaunting.org Visa fil

@@ -0,0 +1,46 @@
1
+#+TITLE:
2
+#+AUTHOR: Bob Mottram
3
+#+EMAIL: bob@freedombone.net
4
+#+KEYWORDS: freedombone, akaunting
5
+#+DESCRIPTION: How to use Akaunting
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>Akaunting</h1>
16
+</center>
17
+#+END_EXPORT
18
+
19
+The Freedombone system isn't primarily aimed at companies or institutions, but if you're a one person company or freelancer then having the ability to run your own accounting system and keep the data private and also backed up is useful. Akaunting provides a nice web based system for small business accounts, and is also quite usable within a mobile web browser.
20
+
21
+* Installation
22
+Log into your system with:
23
+
24
+#+begin_src bash
25
+ssh myusername@mydomain -p 2222
26
+#+end_src
27
+
28
+Using cursor keys, space bar and Enter key select *Administrator controls* and type in your password.
29
+
30
+Select *Add/Remove Apps* then *akaunting*. Enter the subdomain that you which to use, such as *accounts.mydomain.net*, and optionally a FreeDNS code.
31
+
32
+From the *Administrator control panel* select *Passwords* and look up the password for *mariadb*.
33
+
34
+Now in a browser navigate to your subdomain. You will need to enter some details for the database. The password should be the mariadb one.
35
+
36
+#+BEGIN_CENTER
37
+[[file:images/akaunting_setup.jpg]]
38
+#+END_CENTER
39
+
40
+After that you'll need to enter a company name and an email address. You can make the administrator password anything you prefer, and a suggestion can be found within the *Passwords* section of the *Administrator control panel* under *akaunting*.
41
+
42
+#+BEGIN_CENTER
43
+[[file:images/akaunting_setup_company.jpg]]
44
+#+END_CENTER
45
+
46
+From then on the system should be usable. Accounts software can often be quite complex, and so you'll probably want to refer to the [[https://akaunting.com/docs][official documentation]] for details.

+ 5
- 0
doc/EN/apps.org Visa fil

@@ -24,6 +24,11 @@ The base install of the system just contains an email server and Mutt client, bu
24 24
 [[file:images/controlpanel/control_panel_apps.jpg]]
25 25
 #+END_CENTER
26 26
 
27
+
28
+* Akaunting
29
+A web based accounts system for small businesses or freelancers.
30
+
31
+[[./app_akaunting.html][How to use it]]
27 32
 * CryptPad
28 33
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
29 34
 

+ 1
- 1
doc/EN/index.org Visa fil

@@ -37,7 +37,7 @@ After installation it's possible that you might want some advice on how to run y
37 37
  * [[./faq.html][Frequently Asked Questions]]
38 38
  * [[./mobile.html][Advice on setting up a mobile phone]]
39 39
 
40
-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]].
40
+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*.
41 41
 
42 42
 Ready made disk images which can be copied onto USB or microSD drives are [[./downloads/current][available here]].
43 43
 

+ 1
- 1
doc/EN/mobile.org Visa fil

@@ -23,7 +23,7 @@ Mobile phones are insecure devices, but they're regarded as being so essential t
23 23
  <table style="width:80%; border:0">
24 24
   <tr>
25 25
     <td><center><b><h3>Open</h3></b><br>Use a free and open source operating system. Open means more trustworthy</center></td>
26
-    <td><center><b><h3>Remove</h3></b><br>If there are any proprietary apps then remove or deactivete them</center></td>
26
+    <td><center><b><h3>Remove</h3></b><br>If there are any proprietary apps then remove or deactivate them</center></td>
27 27
   </tr>
28 28
   <tr>
29 29
     <td><center><b><h3>Encrypt</h3></b><br>Make sure your phone is encrypted with a password which isn't easy to guess</center></td>

Binär
img/akaunting_setup.jpg Visa fil


Binär
img/akaunting_setup_company.jpg Visa fil


+ 470
- 0
src/freedombone-app-akaunting Visa fil

@@ -0,0 +1,470 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Personal or small business accounts
12
+#
13
+# License
14
+# =======
15
+#
16
+# Copyright (C) 2017 Bob Mottram <bob@freedombone.net>
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+VARIANTS='full full-vim media'
32
+
33
+IN_DEFAULT_INSTALL=0
34
+SHOW_ON_ABOUT=1
35
+
36
+AKAUNTING_DOMAIN_NAME=
37
+AKAUNTING_CODE=
38
+AKAUNTING_ONION_PORT=8341
39
+AKAUNTING_REPO="https://github.com/akaunting/akaunting"
40
+AKAUNTING_COMMIT='b68c840cded60d92b86e98fcbc26ce338cf93fef'
41
+AKAUNTING_ADMIN_PASSWORD=
42
+
43
+AKAUNTING_BACKGROUND_IMAGE_URL=
44
+
45
+akaunting_variables=(ONION_ONLY
46
+                     AKAUNTING_DOMAIN_NAME
47
+                     AKAUNTING_CODE
48
+                     DDNS_PROVIDER
49
+                     MY_USERNAME)
50
+
51
+function akaunting_remove_bad_links {
52
+    cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
53
+
54
+    # copy jquery locally
55
+    jquery_version='1.12.4'
56
+    if [ ! -f jquery-${jquery_version}.js ]; then
57
+        cd /var/www/$GHOST_DOMAIN_NAME/htdocs
58
+        wget https://code.jquery.com/jquery-${jquery_version}.js
59
+        jquery_hash=$(sha256sum jquery-${jquery_version}.js | awk -F ' ' '{print $1}')
60
+        if [[ "$jquery_hash" != '430f36f9b5f21aae8cc9dca6a81c4d3d84da5175eaedcf2fdc2c226302cb3575' ]]; then
61
+            echo $'Unexpected jquery hash value'
62
+            exit 78363527
63
+        fi
64
+    fi
65
+
66
+    sed -i '/googleapi/d' resources/assets/sass/app.scss
67
+    sed -i "s|ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js|$AKAUNTING_DOMAIN_NAME/jquery-${jquery_version}.js|g" vendor/league/flysystem/docs/_layouts/default.html
68
+    sed -i '/googleapi/d' vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/503.blade.php
69
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/build/less/AdminLTE-without-plugins.less
70
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/build/less/AdminLTE.less
71
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/dist/css/AdminLTE.css
72
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/dist/css/AdminLTE.min.css
73
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/dist/css/alt/AdminLTE-without-plugins.css
74
+    sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/dist/css/alt/AdminLTE-without-plugins.min.css
75
+    sed -i "s|ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js|$AKAUNTING_DOMAIN_NAME/jquery-${jquery_version}.js|g" vendor/almasaeed2010/adminlte/plugins/ckeditor/samples/old/jquery.html
76
+
77
+    chown -R www-data:www-data /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
78
+}
79
+
80
+function logging_on_akaunting {
81
+    echo -n ''
82
+}
83
+
84
+function logging_off_akaunting {
85
+    echo -n ''
86
+}
87
+
88
+function remove_user_akaunting {
89
+    remove_username="$1"
90
+
91
+    ${PROJECT_NAME}-pass -u $remove_username --rmapp akaunting
92
+}
93
+
94
+function add_user_akaunting {
95
+    new_username="$1"
96
+    new_user_password="$2"
97
+
98
+    ${PROJECT_NAME}-pass -u $new_username -a akaunting -p "$new_user_password"
99
+
100
+    echo '0'
101
+}
102
+
103
+function install_interactive_akaunting {
104
+    if [ ! $ONION_ONLY ]; then
105
+        ONION_ONLY='no'
106
+    fi
107
+
108
+    if [[ $ONION_ONLY != "no" ]]; then
109
+        AKAUNTING_DOMAIN_NAME='akaunting.local'
110
+    else
111
+        AKAUNTING_DETAILS_COMPLETE=
112
+        while [ ! $AKAUNTING_DETAILS_COMPLETE ]
113
+        do
114
+            data=$(tempfile 2>/dev/null)
115
+            trap "rm -f $data" 0 1 2 5 15
116
+            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
117
+                dialog --backtitle $"Freedombone Configuration" \
118
+                       --title $"Akaunting Configuration" \
119
+                       --form $"\nPlease enter your Akaunting details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
120
+                       $"Domain:" 1 1 "$(grep 'AKAUNTING_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
121
+                       $"Code:" 2 1 "$(grep 'AKAUNTING_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 25 33 255 \
122
+                       2> $data
123
+            else
124
+                dialog --backtitle $"Freedombone Configuration" \
125
+                       --title $"Akaunting Configuration" \
126
+                       --form $"\nPlease enter your Akaunting details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \
127
+                       $"Domain:" 1 1 "$(grep 'AKAUNTING_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
128
+                       2> $data
129
+            fi
130
+            sel=$?
131
+            case $sel in
132
+                1) exit 1;;
133
+                255) exit 1;;
134
+            esac
135
+            AKAUNTING_DOMAIN_NAME=$(cat $data | sed -n 1p)
136
+            if [ $AKAUNTING_DOMAIN_NAME ]; then
137
+                if [[ $AKAUNTING_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
138
+                    AKAUNTING_DOMAIN_NAME=""
139
+                fi
140
+                TEST_DOMAIN_NAME=$AKAUNTING_DOMAIN_NAME
141
+                validate_domain_name
142
+                if [[ $TEST_DOMAIN_NAME != $AKAUNTING_DOMAIN_NAME ]]; then
143
+                    AKAUNTING_DOMAIN_NAME=
144
+                    dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
145
+                else
146
+                    if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
147
+                        AKAUNTING_CODE=$(cat $data | sed -n 2p)
148
+                        validate_freedns_code "$AKAUNTING_CODE"
149
+                        if [ ! $VALID_CODE ]; then
150
+                            AKAUNTING_DOMAIN_NAME=
151
+                        fi
152
+                    fi
153
+                fi
154
+            fi
155
+            if [ $AKAUNTING_DOMAIN_NAME ]; then
156
+                AKAUNTING_DETAILS_COMPLETE="yes"
157
+            fi
158
+        done
159
+
160
+        write_config_param "AKAUNTING_CODE" "$AKAUNTING_CODE"
161
+    fi
162
+    write_config_param "AKAUNTING_DOMAIN_NAME" "$AKAUNTING_DOMAIN_NAME"
163
+    APP_INSTALLED=1
164
+}
165
+
166
+function change_password_akaunting {
167
+    curr_username="$1"
168
+    new_user_password="$2"
169
+
170
+    read_config_param 'AKAUNTING_DOMAIN_NAME'
171
+
172
+    ${PROJECT_NAME}-pass -u "$curr_username" -a akaunting -p "$new_user_password"
173
+}
174
+
175
+function akaunting_create_database {
176
+    if [ -f $IMAGE_PASSWORD_FILE ]; then
177
+        AKAUNTING_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
178
+    else
179
+        if [ ! $AKAUNTING_ADMIN_PASSWORD ]; then
180
+            AKAUNTING_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
181
+        fi
182
+    fi
183
+    if [ ! $AKAUNTING_ADMIN_PASSWORD ]; then
184
+        return
185
+    fi
186
+
187
+    function_check create_database
188
+    create_database akaunting "$AKAUNTING_ADMIN_PASSWORD" $MY_USERNAME
189
+}
190
+
191
+function reconfigure_akaunting {
192
+    echo -n ''
193
+}
194
+
195
+function upgrade_akaunting {
196
+    CURR_AKAUNTING_COMMIT=$(get_completion_param "akaunting commit")
197
+    if [[ "$CURR_AKAUNTING_COMMIT" == "$AKAUNTING_COMMIT" ]]; then
198
+        return
199
+    fi
200
+
201
+    if grep -q "akaunting domain" $COMPLETION_FILE; then
202
+        AKAUNTING_DOMAIN_NAME=$(get_completion_param "akaunting domain")
203
+    fi
204
+
205
+    # update to the next commit
206
+    function_check set_repo_commit
207
+    set_repo_commit /var/www/$AKAUNTING_DOMAIN_NAME/htdocs "akaunting commit" "$AKAUNTING_COMMIT" $AKAUNTING_REPO
208
+
209
+    cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
210
+    install_composer
211
+    akaunting_remove_bad_links
212
+
213
+    chown -R www-data:www-data /var/www/${AKAUNTING_DOMAIN_NAME}/htdocs
214
+}
215
+
216
+
217
+function backup_local_akaunting {
218
+    akaunting_path=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs
219
+    if [ -d $akaunting_path ]; then
220
+        suspend_site ${AKAUNTING_DOMAIN_NAME}
221
+        function_check backup_database_to_usb
222
+        backup_database_to_usb akaunting
223
+        backup_directory_to_usb $akaunting_path akaunting
224
+        restart_site
225
+    fi
226
+}
227
+
228
+function restore_local_akaunting {
229
+    temp_restore_dir=/root/tempakaunting
230
+    akaunting_dir=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs
231
+
232
+    suspend_site ${AKAUNTING_DOMAIN_NAME}
233
+
234
+    function_check akaunting_create_database
235
+    akaunting_create_database
236
+
237
+    restore_database akaunting ${AKAUNTING_DOMAIN_NAME}
238
+    chown www-data:www-data $akaunting_dir
239
+
240
+    restart_site
241
+}
242
+
243
+function backup_remote_akaunting {
244
+    akaunting_path=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs
245
+    if [ -d $akaunting_path ]; then
246
+        suspend_site ${AKAUNTING_DOMAIN_NAME}
247
+        function_check backup_database_to_friend
248
+        backup_database_to_friend akaunting
249
+        backup_directory_to_friend $akaunting_path akaunting
250
+        restart_site
251
+    fi
252
+}
253
+
254
+function restore_remote_akaunting {
255
+    temp_restore_dir=/root/tempakaunting
256
+    akaunting_dir=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs
257
+
258
+    suspend_site ${AKAUNTING_DOMAIN_NAME}
259
+
260
+    function_check akaunting_create_database
261
+    akaunting_create_database
262
+
263
+    restore_database_from_friend akaunting ${AKAUNTING_DOMAIN_NAME}
264
+    chown www-data:www-data $akaunting_dir
265
+
266
+    restart_site
267
+}
268
+
269
+function remove_akaunting {
270
+    if [ ${#AKAUNTING_DOMAIN_NAME} -eq 0 ]; then
271
+        return
272
+    fi
273
+
274
+    read_config_param "AKAUNTING_DOMAIN_NAME"
275
+    read_config_param "MY_USERNAME"
276
+    echo "Removing $AKAUNTING_DOMAIN_NAME"
277
+    nginx_dissite $AKAUNTING_DOMAIN_NAME
278
+    remove_certs $AKAUNTING_DOMAIN_NAME
279
+
280
+    if [ -d /var/www/$AKAUNTING_DOMAIN_NAME ]; then
281
+        rm -rf /var/www/$AKAUNTING_DOMAIN_NAME
282
+    fi
283
+    if [ -f /etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME ]; then
284
+        rm /etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME
285
+    fi
286
+    function_check drop_database
287
+    drop_database akaunting
288
+    function_check remove_onion_service
289
+    remove_onion_service akaunting ${AKAUNTING_ONION_PORT}
290
+    if grep -q "akaunting" /etc/crontab; then
291
+        sed -i "/akaunting/d" /etc/crontab
292
+    fi
293
+    remove_app akaunting
294
+    remove_completion_param install_akaunting
295
+    sed -i '/akaunting/d' $COMPLETION_FILE
296
+
297
+    function_check remove_ddns_domain
298
+    remove_ddns_domain $AKAUNTING_DOMAIN_NAME
299
+}
300
+
301
+function install_akaunting {
302
+    if [ ! $ONION_ONLY ]; then
303
+        ONION_ONLY='no'
304
+    fi
305
+
306
+    if [ ! $AKAUNTING_DOMAIN_NAME ]; then
307
+        echo $'No domain name was given for akaunting'
308
+        exit 89353
309
+    fi
310
+
311
+    function_check install_mariadb
312
+    install_mariadb
313
+
314
+    function_check get_mariadb_password
315
+    get_mariadb_password
316
+
317
+    apt-get -yq install php-gettext php-curl php-gd php-mysql git curl
318
+    apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl
319
+
320
+    if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME ]; then
321
+        mkdir /var/www/$AKAUNTING_DOMAIN_NAME
322
+    fi
323
+    if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME/htdocs ]; then
324
+        if [ -d /repos/akaunting ]; then
325
+            mkdir /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
326
+            cp -r -p /repos/akaunting/. /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
327
+            cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
328
+            git pull
329
+        else
330
+            function_check git_clone
331
+            git_clone $AKAUNTING_REPO /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
332
+        fi
333
+
334
+        if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME/htdocs ]; then
335
+            echo $'Unable to clone akaunting repo'
336
+            exit 2589389
337
+        fi
338
+    fi
339
+
340
+    cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
341
+    git checkout $AKAUNTING_COMMIT -b $AKAUNTING_COMMIT
342
+    set_completion_param "akaunting commit" "$AKAUNTING_COMMIT"
343
+
344
+    chmod g+w /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
345
+    chown -R www-data:www-data /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
346
+
347
+    cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs
348
+    install_composer
349
+
350
+    function_check akaunting_create_database
351
+    akaunting_create_database
352
+
353
+    function_check add_ddns_domain
354
+    add_ddns_domain $AKAUNTING_DOMAIN_NAME
355
+
356
+    AKAUNTING_ONION_HOSTNAME=$(add_onion_service akaunting 80 ${AKAUNTING_ONION_PORT})
357
+
358
+    akaunting_nginx_site=/etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME
359
+    if [[ $ONION_ONLY == "no" ]]; then
360
+        function_check nginx_http_redirect
361
+        nginx_http_redirect $AKAUNTING_DOMAIN_NAME "index index.php"
362
+        echo 'server {' >> $akaunting_nginx_site
363
+        echo '  listen 443 ssl;' >> $akaunting_nginx_site
364
+        echo '  listen [::]:443 ssl;' >> $akaunting_nginx_site
365
+        echo "  server_name $AKAUNTING_DOMAIN_NAME;" >> $akaunting_nginx_site
366
+        echo '' >> $akaunting_nginx_site
367
+        function_check nginx_compress
368
+        nginx_compress $AKAUNTING_DOMAIN_NAME
369
+        echo '' >> $akaunting_nginx_site
370
+        echo '  # Security' >> $akaunting_nginx_site
371
+        function_check nginx_ssl
372
+        nginx_ssl $AKAUNTING_DOMAIN_NAME
373
+
374
+        function_check nginx_disable_sniffing
375
+        nginx_disable_sniffing $AKAUNTING_DOMAIN_NAME
376
+
377
+        echo '  add_header Strict-Transport-Security max-age=15768000;' >> $akaunting_nginx_site
378
+        echo '' >> $akaunting_nginx_site
379
+        echo '  access_log /dev/null;' >> $akaunting_nginx_site
380
+        echo '  error_log /dev/null;' >> $akaunting_nginx_site
381
+        echo '' >> $akaunting_nginx_site
382
+        echo "  root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;" >> $akaunting_nginx_site
383
+        echo '' >> $akaunting_nginx_site
384
+        echo '  index index.php;' >> $akaunting_nginx_site
385
+        echo '' >> $akaunting_nginx_site
386
+        echo '  location ~ \.php {' >> $akaunting_nginx_site
387
+        echo '    include snippets/fastcgi-php.conf;' >> $akaunting_nginx_site
388
+        echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $akaunting_nginx_site
389
+        echo '    fastcgi_read_timeout 30;' >> $akaunting_nginx_site
390
+        echo '  }' >> $akaunting_nginx_site
391
+        echo '' >> $akaunting_nginx_site
392
+        echo '  location / {' >> $akaunting_nginx_site
393
+        function_check nginx_limits
394
+        nginx_limits $AKAUNTING_DOMAIN_NAME '15m'
395
+        echo '    try_files $uri $uri/ @akaunting;' >> $akaunting_nginx_site
396
+        echo '  }' >> $akaunting_nginx_site
397
+        echo '' >> $akaunting_nginx_site
398
+        echo '  location @akaunting {' >> $akaunting_nginx_site
399
+        echo '    rewrite ^(.*)$ /index.php?p=$1 last;' >> $akaunting_nginx_site
400
+        echo '  }' >> $akaunting_nginx_site
401
+        echo '' >> $akaunting_nginx_site
402
+        echo '  location ~ /\.(ht|git) {' >> $akaunting_nginx_site
403
+        echo '    deny all;' >> $akaunting_nginx_site
404
+        echo '  }' >> $akaunting_nginx_site
405
+        echo '' >> $akaunting_nginx_site
406
+        echo '}' >> $akaunting_nginx_site
407
+    else
408
+        echo -n '' > $akaunting_nginx_site
409
+    fi
410
+    echo 'server {' >> $akaunting_nginx_site
411
+    echo "    listen 127.0.0.1:$AKAUNTING_ONION_PORT default_server;" >> $akaunting_nginx_site
412
+    echo "    server_name $AKAUNTING_ONION_HOSTNAME;" >> $akaunting_nginx_site
413
+    echo '' >> $akaunting_nginx_site
414
+    function_check nginx_compress
415
+    nginx_compress $AKAUNTING_DOMAIN_NAME
416
+    echo '' >> $akaunting_nginx_site
417
+    function_check nginx_disable_sniffing
418
+    nginx_disable_sniffing $AKAUNTING_DOMAIN_NAME
419
+    echo '' >> $akaunting_nginx_site
420
+    echo '  access_log /dev/null;' >> $akaunting_nginx_site
421
+    echo '  error_log /dev/null;' >> $akaunting_nginx_site
422
+    echo '' >> $akaunting_nginx_site
423
+    echo "  root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;" >> $akaunting_nginx_site
424
+    echo '' >> $akaunting_nginx_site
425
+    echo '  index index.php;' >> $akaunting_nginx_site
426
+    echo '' >> $akaunting_nginx_site
427
+    echo '  location ~ \.php {' >> $akaunting_nginx_site
428
+    echo '    include snippets/fastcgi-php.conf;' >> $akaunting_nginx_site
429
+    echo '    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $akaunting_nginx_site
430
+    echo '    fastcgi_read_timeout 30;' >> $akaunting_nginx_site
431
+    echo '  }' >> $akaunting_nginx_site
432
+    echo '' >> $akaunting_nginx_site
433
+    echo '  location / {' >> $akaunting_nginx_site
434
+    function_check nginx_limits
435
+    nginx_limits $AKAUNTING_DOMAIN_NAME '15m'
436
+    echo '    try_files $uri $uri/ @akaunting;' >> $akaunting_nginx_site
437
+    echo '  }' >> $akaunting_nginx_site
438
+    echo '' >> $akaunting_nginx_site
439
+    echo '  location @akaunting {' >> $akaunting_nginx_site
440
+    echo '    rewrite ^(.*)$ /index.php?p=$1 last;' >> $akaunting_nginx_site
441
+    echo '  }' >> $akaunting_nginx_site
442
+    echo '' >> $akaunting_nginx_site
443
+    echo '  location ~ /\.(ht|git) {' >> $akaunting_nginx_site
444
+    echo '    deny all;' >> $akaunting_nginx_site
445
+    echo '  }' >> $akaunting_nginx_site
446
+    echo '}' >> $akaunting_nginx_site
447
+
448
+    function_check configure_php
449
+    configure_php
450
+
451
+    function_check create_site_certificate
452
+    create_site_certificate $AKAUNTING_DOMAIN_NAME 'yes'
453
+
454
+    function_check nginx_ensite
455
+    nginx_ensite $AKAUNTING_DOMAIN_NAME
456
+
457
+    akaunting_remove_bad_links
458
+
459
+    systemctl restart mariadb
460
+    systemctl restart php7.0-fpm
461
+    systemctl restart nginx
462
+
463
+    ${PROJECT_NAME}-pass -u $MY_USERNAME -a akaunting -p "$AKAUNTING_ADMIN_PASSWORD"
464
+
465
+    set_completion_param "akaunting domain" "$AKAUNTING_DOMAIN_NAME"
466
+
467
+    APP_INSTALLED=1
468
+}
469
+
470
+# NOTE: deliberately there is no "exit 0"

+ 2
- 0
src/freedombone-app-scuttlebot Visa fil

@@ -369,6 +369,7 @@ function mesh_install_scuttlebot {
369 369
     cat <<EOF > $rootdir/usr/bin/install_scuttlebot
370 370
 #!/bin/bash
371 371
 npm install --arch=$NPM_ARCH -g scuttlebot@${SCUTTLEBOT_VERSION}
372
+npm install --arch=$NPM_ARCH -g dat
372 373
 npm install --arch=$NPM_ARCH -g git-ssb
373 374
 npm install --arch=$NPM_ARCH -g git-remote-ssb
374 375
 EOF
@@ -419,6 +420,7 @@ function install_scuttlebot {
419 420
         exit 528253
420 421
     fi
421 422
 
423
+    npm install -g dat
422 424
     npm install -g git-ssb
423 425
     npm install -g git-remote-ssb
424 426
 

+ 15
- 0
src/freedombone-app-xmpp Visa fil

@@ -375,6 +375,17 @@ function update_prosody_modules {
375 375
     fi
376 376
 }
377 377
 
378
+function prosody_daemon_restart_script {
379
+    # On rare occasions the daemon appears to get stuck
380
+    # i.e. still active, but not accepting connections
381
+    # This ensures that it will unstick itself at least once per day
382
+    if [ ! -f /etc/cron.daily/prosody ]; then
383
+        echo '#!/bin/bash' > /etc/cron.daily/prosody
384
+        echo 'systemctl restart prosody' >> /etc/cron.daily/prosody
385
+        chmod +x /etc/cron.daily/prosody
386
+    fi
387
+}
388
+
378 389
 function upgrade_xmpp {
379 390
     if [ -d /etc/letsencrypt ]; then
380 391
         prosody_groups=$(groups prosody)
@@ -382,6 +393,7 @@ function upgrade_xmpp {
382 393
             usermod -a -G ssl-cert prosody
383 394
         fi
384 395
     fi
396
+    prosody_daemon_restart_script
385 397
     function_check update_prosody_modules
386 398
     update_prosody_modules
387 399
     xmpp_onion_addresses /etc/prosody/prosody.cfg.lua
@@ -544,6 +556,7 @@ function remove_xmpp {
544 556
     remove_onion_service xmpp 5222 5223 5269
545 557
 
546 558
     apt-get -yq remove --purge prosody
559
+    rm /etc/cron.daily/prosody
547 560
     if [ -f $INSTALL_DIR/$prosody_modules_filename ]; then
548 561
         rm $INSTALL_DIR/$prosody_modules_filename
549 562
     fi
@@ -1059,6 +1072,8 @@ function install_xmpp {
1059 1072
         exit 347682
1060 1073
     fi
1061 1074
 
1075
+    prosody_daemon_restart_script
1076
+
1062 1077
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a xmpp -p "$XMPP_PASSWORD"
1063 1078
 
1064 1079
     APP_INSTALLED=1

+ 3
- 1
src/freedombone-image Visa fil

@@ -160,10 +160,12 @@ function image_setup {
160 160
 
161 161
     case $setup_type in
162 162
         debian|ubuntu|trisquel|mint)
163
+            sudo apt-get -yq remove vmdebootstrap
163 164
             sudo apt-get -yq install build-essential libc6-dev-i386 gcc-multilib g++-multilib
164
-            sudo apt-get -yq install git python-docutils mktorrent vmdebootstrap xz-utils
165
+            sudo apt-get -yq install git python-docutils mktorrent xz-utils debootstrap
165 166
             sudo apt-get -yq install dosfstools btrfs-tools extlinux python-distro-info mbr
166 167
             sudo apt-get -yq install qemu-user-static binfmt-support u-boot-tools qemu
168
+            freedombone-image-vmdebootstrap
167 169
             ;;
168 170
         parabola|arch)
169 171
             sudo pacman -S --noconfirm libc++ git gcc gcc-libs python-docutils mktorrent patch

+ 3
- 0
src/freedombone-utils-web Visa fil

@@ -976,6 +976,9 @@ function install_composer {
976 976
             cat /home/$MY_USERNAME/${PROJECT_NAME}/image_build/composer_install | php
977 977
         fi
978 978
     fi
979
+    if [ -f composer.phar ]; then
980
+        cp composer.phar composer
981
+    fi
979 982
     php composer.phar install
980 983
     if [ ! "$?" = "0" ]; then
981 984
         echo $'Unable to run composer install'

+ 334
- 0
website/EN/app_akaunting.html Visa fil

@@ -0,0 +1,334 @@
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
+<!-- 2017-12-20 Wed 23:39 -->
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 Akaunting"
13
+ />
14
+<meta name="keywords" content="freedombone, akaunting" />
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>Akaunting</h1>
249
+</center>
250
+
251
+<p>
252
+The Freedombone system isn't primarily aimed at companies or institutions, but if you're a one person company or freelancer then having the ability to run your own accounting system and keep the data private and also backed up is useful. Akaunting provides a nice web based system for small business accounts, and is also quite usable within a mobile web browser.
253
+</p>
254
+
255
+<div id="outline-container-orgaea21b7" class="outline-2">
256
+<h2 id="orgaea21b7">Installation</h2>
257
+<div class="outline-text-2" id="text-orgaea21b7">
258
+<p>
259
+Log into your system with:
260
+</p>
261
+
262
+<div class="org-src-container">
263
+<pre class="src src-bash">ssh myusername@mydomain -p 2222
264
+</pre>
265
+</div>
266
+
267
+<p>
268
+Using cursor keys, space bar and Enter key select <b>Administrator controls</b> and type in your password.
269
+</p>
270
+
271
+<p>
272
+Select <b>Add/Remove Apps</b> then <b>akaunting</b>. Enter the subdomain that you which to use, such as <b>accounts.mydomain.net</b>, and optionally a FreeDNS code.
273
+</p>
274
+
275
+<p>
276
+From the <b>Administrator control panel</b> select <b>Passwords</b> and look up the password for <b>mariadb</b>.
277
+</p>
278
+
279
+<p>
280
+Now in a browser navigate to your subdomain. You will need to enter some details for the database. The password should be the mariadb one.
281
+</p>
282
+
283
+<div class="org-center">
284
+
285
+<div class="figure">
286
+<p><img src="images/akaunting_setup.jpg" alt="akaunting_setup.jpg" />
287
+</p>
288
+</div>
289
+</div>
290
+
291
+<p>
292
+After that you'll need to enter a company name and an email address. You can make the administrator password anything you prefer, and a suggestion can be found within the <b>Passwords</b> section of the <b>Administrator control panel</b> under <b>akaunting</b>.
293
+</p>
294
+
295
+<div class="org-center">
296
+
297
+<div class="figure">
298
+<p><img src="images/akaunting_setup_company.jpg" alt="akaunting_setup_company.jpg" />
299
+</p>
300
+</div>
301
+</div>
302
+
303
+<p>
304
+From then on the system should be usable. Accounts software can often be quite complex, and so you'll probably want to refer to the <a href="https://akaunting.com/docs">official documentation</a> for details.
305
+</p>
306
+</div>
307
+</div>
308
+</div>
309
+<div id="postamble" class="status">
310
+
311
+<style type="text/css">
312
+.back-to-top {
313
+    position: fixed;
314
+    bottom: 2em;
315
+    right: 0px;
316
+    text-decoration: none;
317
+    color: #000000;
318
+    background-color: rgba(235, 235, 235, 0.80);
319
+    font-size: 12px;
320
+    padding: 1em;
321
+    display: none;
322
+}
323
+
324
+.back-to-top:hover {
325
+    background-color: rgba(135, 135, 135, 0.50);
326
+}
327
+</style>
328
+
329
+<div class="back-to-top">
330
+<a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
331
+</div>
332
+</div>
333
+</body>
334
+</html>

+ 128
- 115
website/EN/apps.html Visa fil

@@ -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
-<!-- 2017-12-01 Fri 10:19 -->
6
+<!-- 2017-12-20 Wed 23:36 -->
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>
@@ -264,9 +264,22 @@ The base install of the system just contains an email server and Mutt client, bu
264 264
 </div>
265 265
 </div>
266 266
 
267
-<div id="outline-container-orgf8331ba" class="outline-2">
268
-<h2 id="orgf8331ba">CryptPad</h2>
269
-<div class="outline-text-2" id="text-orgf8331ba">
267
+
268
+<div id="outline-container-org351bae6" class="outline-2">
269
+<h2 id="org351bae6">Akaunting</h2>
270
+<div class="outline-text-2" id="text-org351bae6">
271
+<p>
272
+A web based accounts system for small businesses or freelancers.
273
+</p>
274
+
275
+<p>
276
+<a href="./app_akaunting.html">How to use it</a>
277
+</p>
278
+</div>
279
+</div>
280
+<div id="outline-container-orge2d6b13" class="outline-2">
281
+<h2 id="orge2d6b13">CryptPad</h2>
282
+<div class="outline-text-2" id="text-orge2d6b13">
270 283
 <p>
271 284
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
272 285
 </p>
@@ -276,9 +289,9 @@ Collaborate on editing documents, presentations and source code, or vote on thin
276 289
 </p>
277 290
 </div>
278 291
 </div>
279
-<div id="outline-container-orgca21c4d" class="outline-2">
280
-<h2 id="orgca21c4d">DLNA</h2>
281
-<div class="outline-text-2" id="text-orgca21c4d">
292
+<div id="outline-container-org8762555" class="outline-2">
293
+<h2 id="org8762555">DLNA</h2>
294
+<div class="outline-text-2" id="text-org8762555">
282 295
 <p>
283 296
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
284 297
 </p>
@@ -288,9 +301,9 @@ Enables you to use the system as a music server which any DLNA compatible device
288 301
 </p>
289 302
 </div>
290 303
 </div>
291
-<div id="outline-container-org6f48ecb" class="outline-2">
292
-<h2 id="org6f48ecb">Dokuwiki</h2>
293
-<div class="outline-text-2" id="text-org6f48ecb">
304
+<div id="outline-container-orgeb82d0e" class="outline-2">
305
+<h2 id="orgeb82d0e">Dokuwiki</h2>
306
+<div class="outline-text-2" id="text-orgeb82d0e">
294 307
 <p>
295 308
 A databaseless wiki system.
296 309
 </p>
@@ -300,9 +313,9 @@ A databaseless wiki system.
300 313
 </p>
301 314
 </div>
302 315
 </div>
303
-<div id="outline-container-org312cd59" class="outline-2">
304
-<h2 id="org312cd59">Emacs</h2>
305
-<div class="outline-text-2" id="text-org312cd59">
316
+<div id="outline-container-orgd08f244" class="outline-2">
317
+<h2 id="orgd08f244">Emacs</h2>
318
+<div class="outline-text-2" id="text-orgd08f244">
306 319
 <p>
307 320
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
308 321
 </p>
@@ -312,9 +325,9 @@ If you use the Mutt client to read your email then this will set it up to use em
312 325
 </p>
313 326
 </div>
314 327
 </div>
315
-<div id="outline-container-org631741c" class="outline-2">
316
-<h2 id="org631741c">Etherpad</h2>
317
-<div class="outline-text-2" id="text-org631741c">
328
+<div id="outline-container-orgae371e7" class="outline-2">
329
+<h2 id="orgae371e7">Etherpad</h2>
330
+<div class="outline-text-2" id="text-orgae371e7">
318 331
 <p>
319 332
 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.
320 333
 </p>
@@ -324,9 +337,9 @@ Collaborate on creating documents in real time. Maybe you're planning a holiday
324 337
 </p>
325 338
 </div>
326 339
 </div>
327
-<div id="outline-container-orgdeda776" class="outline-2">
328
-<h2 id="orgdeda776">Friendica</h2>
329
-<div class="outline-text-2" id="text-orgdeda776">
340
+<div id="outline-container-org4300e45" class="outline-2">
341
+<h2 id="org4300e45">Friendica</h2>
342
+<div class="outline-text-2" id="text-org4300e45">
330 343
 <p>
331 344
 Federated social network system.
332 345
 </p>
@@ -336,9 +349,9 @@ Federated social network system.
336 349
 </p>
337 350
 </div>
338 351
 </div>
339
-<div id="outline-container-orgbedc668" class="outline-2">
340
-<h2 id="orgbedc668">Ghost</h2>
341
-<div class="outline-text-2" id="text-orgbedc668">
352
+<div id="outline-container-org8cae058" class="outline-2">
353
+<h2 id="org8cae058">Ghost</h2>
354
+<div class="outline-text-2" id="text-org8cae058">
342 355
 <p>
343 356
 Modern looking blogging system.
344 357
 </p>
@@ -348,9 +361,9 @@ Modern looking blogging system.
348 361
 </p>
349 362
 </div>
350 363
 </div>
351
-<div id="outline-container-org43b36ad" class="outline-2">
352
-<h2 id="org43b36ad">GNU Social</h2>
353
-<div class="outline-text-2" id="text-org43b36ad">
364
+<div id="outline-container-org52c14c7" class="outline-2">
365
+<h2 id="org52c14c7">GNU Social</h2>
366
+<div class="outline-text-2" id="text-org52c14c7">
354 367
 <p>
355 368
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
356 369
 </p>
@@ -360,9 +373,9 @@ Federated social network based on the OStatus protocol. You can "<i>remote follo
360 373
 </p>
361 374
 </div>
362 375
 </div>
363
-<div id="outline-container-orgd452cf4" class="outline-2">
364
-<h2 id="orgd452cf4">Gogs</h2>
365
-<div class="outline-text-2" id="text-orgd452cf4">
376
+<div id="outline-container-org1bb5d47" class="outline-2">
377
+<h2 id="org1bb5d47">Gogs</h2>
378
+<div class="outline-text-2" id="text-org1bb5d47">
366 379
 <p>
367 380
 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.
368 381
 </p>
@@ -372,9 +385,9 @@ Lightweight git project hosting system. You can mirror projects from Github, or
372 385
 </p>
373 386
 </div>
374 387
 </div>
375
-<div id="outline-container-orgb5de05c" class="outline-2">
376
-<h2 id="orgb5de05c">HTMLy</h2>
377
-<div class="outline-text-2" id="text-orgb5de05c">
388
+<div id="outline-container-orgff3e945" class="outline-2">
389
+<h2 id="orgff3e945">HTMLy</h2>
390
+<div class="outline-text-2" id="text-orgff3e945">
378 391
 <p>
379 392
 Databaseless blogging system. Quite simple and with a markdown-like format.
380 393
 </p>
@@ -384,9 +397,9 @@ Databaseless blogging system. Quite simple and with a markdown-like format.
384 397
 </p>
385 398
 </div>
386 399
 </div>
387
-<div id="outline-container-org3a9c19a" class="outline-2">
388
-<h2 id="org3a9c19a">Hubzilla</h2>
389
-<div class="outline-text-2" id="text-org3a9c19a">
400
+<div id="outline-container-orgdc01553" class="outline-2">
401
+<h2 id="orgdc01553">Hubzilla</h2>
402
+<div class="outline-text-2" id="text-orgdc01553">
390 403
 <p>
391 404
 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.
392 405
 </p>
@@ -396,9 +409,9 @@ Web publishing platform with social network like features and good privacy contr
396 409
 </p>
397 410
 </div>
398 411
 </div>
399
-<div id="outline-container-org8953dcb" class="outline-2">
400
-<h2 id="org8953dcb">Icecast media stream</h2>
401
-<div class="outline-text-2" id="text-org8953dcb">
412
+<div id="outline-container-orgea26aa5" class="outline-2">
413
+<h2 id="orgea26aa5">Icecast media stream</h2>
414
+<div class="outline-text-2" id="text-orgea26aa5">
402 415
 <p>
403 416
 Make your own internet radio station.
404 417
 </p>
@@ -408,9 +421,9 @@ Make your own internet radio station.
408 421
 </p>
409 422
 </div>
410 423
 </div>
411
-<div id="outline-container-org26745fc" class="outline-2">
412
-<h2 id="org26745fc">IRC Server (ngirc)</h2>
413
-<div class="outline-text-2" id="text-org26745fc">
424
+<div id="outline-container-orgd35f348" class="outline-2">
425
+<h2 id="orgd35f348">IRC Server (ngirc)</h2>
426
+<div class="outline-text-2" id="text-orgd35f348">
414 427
 <p>
415 428
 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.
416 429
 </p>
@@ -420,18 +433,18 @@ Run your own IRC chat channel which can be secured with a password and accessibl
420 433
 </p>
421 434
 </div>
422 435
 </div>
423
-<div id="outline-container-orgb904691" class="outline-2">
424
-<h2 id="orgb904691">Jitsi Meet</h2>
425
-<div class="outline-text-2" id="text-orgb904691">
436
+<div id="outline-container-org6a1a594" class="outline-2">
437
+<h2 id="org6a1a594">Jitsi Meet</h2>
438
+<div class="outline-text-2" id="text-org6a1a594">
426 439
 <p>
427 440
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
428 441
 </p>
429 442
 </div>
430 443
 </div>
431 444
 
432
-<div id="outline-container-org7b034bc" class="outline-2">
433
-<h2 id="org7b034bc">KanBoard</h2>
434
-<div class="outline-text-2" id="text-org7b034bc">
445
+<div id="outline-container-org1ee358e" class="outline-2">
446
+<h2 id="org1ee358e">KanBoard</h2>
447
+<div class="outline-text-2" id="text-org1ee358e">
435 448
 <p>
436 449
 A simple kanban system for managing projects or TODO lists.
437 450
 </p>
@@ -441,9 +454,9 @@ A simple kanban system for managing projects or TODO lists.
441 454
 </p>
442 455
 </div>
443 456
 </div>
444
-<div id="outline-container-org1c65b4a" class="outline-2">
445
-<h2 id="org1c65b4a">Key Server</h2>
446
-<div class="outline-text-2" id="text-org1c65b4a">
457
+<div id="outline-container-orge30d805" class="outline-2">
458
+<h2 id="orge30d805">Key Server</h2>
459
+<div class="outline-text-2" id="text-orge30d805">
447 460
 <p>
448 461
 An OpenPGP key server for storing and retrieving GPG public keys.
449 462
 </p>
@@ -453,9 +466,9 @@ An OpenPGP key server for storing and retrieving GPG public keys.
453 466
 </p>
454 467
 </div>
455 468
 </div>
456
-<div id="outline-container-org0cbbb3a" class="outline-2">
457
-<h2 id="org0cbbb3a">Koel</h2>
458
-<div class="outline-text-2" id="text-org0cbbb3a">
469
+<div id="outline-container-org240e85f" class="outline-2">
470
+<h2 id="org240e85f">Koel</h2>
471
+<div class="outline-text-2" id="text-org240e85f">
459 472
 <p>
460 473
 Access your music collection from any internet connected device.
461 474
 </p>
@@ -465,9 +478,9 @@ Access your music collection from any internet connected device.
465 478
 </p>
466 479
 </div>
467 480
 </div>
468
-<div id="outline-container-orgd9ad54f" class="outline-2">
469
-<h2 id="orgd9ad54f">Lychee</h2>
470
-<div class="outline-text-2" id="text-orgd9ad54f">
481
+<div id="outline-container-orgb81a1c2" class="outline-2">
482
+<h2 id="orgb81a1c2">Lychee</h2>
483
+<div class="outline-text-2" id="text-orgb81a1c2">
471 484
 <p>
472 485
 Make your photo albums available on the web.
473 486
 </p>
@@ -477,9 +490,9 @@ Make your photo albums available on the web.
477 490
 </p>
478 491
 </div>
479 492
 </div>
480
-<div id="outline-container-orge6a1bee" class="outline-2">
481
-<h2 id="orge6a1bee">Mailpile</h2>
482
-<div class="outline-text-2" id="text-orge6a1bee">
493
+<div id="outline-container-org1ad9b1b" class="outline-2">
494
+<h2 id="org1ad9b1b">Mailpile</h2>
495
+<div class="outline-text-2" id="text-org1ad9b1b">
483 496
 <p>
484 497
 Modern email client which supports GPG encryption.
485 498
 </p>
@@ -489,9 +502,9 @@ Modern email client which supports GPG encryption.
489 502
 </p>
490 503
 </div>
491 504
 </div>
492
-<div id="outline-container-org88a3c1b" class="outline-2">
493
-<h2 id="org88a3c1b">Matrix</h2>
494
-<div class="outline-text-2" id="text-org88a3c1b">
505
+<div id="outline-container-orgbb8fed1" class="outline-2">
506
+<h2 id="orgbb8fed1">Matrix</h2>
507
+<div class="outline-text-2" id="text-orgbb8fed1">
495 508
 <p>
496 509
 Multi-user chat with some security and moderation controls.
497 510
 </p>
@@ -501,9 +514,9 @@ Multi-user chat with some security and moderation controls.
501 514
 </p>
502 515
 </div>
503 516
 </div>
504
-<div id="outline-container-orgca43d7f" class="outline-2">
505
-<h2 id="orgca43d7f">Mediagoblin</h2>
506
-<div class="outline-text-2" id="text-orgca43d7f">
517
+<div id="outline-container-org264a933" class="outline-2">
518
+<h2 id="org264a933">Mediagoblin</h2>
519
+<div class="outline-text-2" id="text-org264a933">
507 520
 <p>
508 521
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
509 522
 </p>
@@ -513,9 +526,9 @@ Publicly host video and audio files so that you don't need to use YouTube/Vimeo/
513 526
 </p>
514 527
 </div>
515 528
 </div>
516
-<div id="outline-container-org8c5a11e" class="outline-2">
517
-<h2 id="org8c5a11e">Mumble</h2>
518
-<div class="outline-text-2" id="text-org8c5a11e">
529
+<div id="outline-container-org5f27565" class="outline-2">
530
+<h2 id="org5f27565">Mumble</h2>
531
+<div class="outline-text-2" id="text-org5f27565">
519 532
 <p>
520 533
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
521 534
 </p>
@@ -525,9 +538,9 @@ The popular VoIP and text chat system. Say goodbye to old-fashioned telephony co
525 538
 </p>
526 539
 </div>
527 540
 </div>
528
-<div id="outline-container-org4a26fd8" class="outline-2">
529
-<h2 id="org4a26fd8">NextCloud</h2>
530
-<div class="outline-text-2" id="text-org4a26fd8">
541
+<div id="outline-container-org532c52b" class="outline-2">
542
+<h2 id="org532c52b">NextCloud</h2>
543
+<div class="outline-text-2" id="text-org532c52b">
531 544
 <p>
532 545
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
533 546
 </p>
@@ -537,9 +550,9 @@ Store files on your server and sync them with laptops or mobile devices. Include
537 550
 </p>
538 551
 </div>
539 552
 </div>
540
-<div id="outline-container-orgda0e181" class="outline-2">
541
-<h2 id="orgda0e181">PeerTube</h2>
542
-<div class="outline-text-2" id="text-orgda0e181">
553
+<div id="outline-container-org9067728" class="outline-2">
554
+<h2 id="org9067728">PeerTube</h2>
555
+<div class="outline-text-2" id="text-org9067728">
543 556
 <p>
544 557
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
545 558
 </p>
@@ -549,9 +562,9 @@ Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better en
549 562
 </p>
550 563
 </div>
551 564
 </div>
552
-<div id="outline-container-orgfdd0292" class="outline-2">
553
-<h2 id="orgfdd0292">PI-Hole</h2>
554
-<div class="outline-text-2" id="text-orgfdd0292">
565
+<div id="outline-container-orgf62f97e" class="outline-2">
566
+<h2 id="orgf62f97e">PI-Hole</h2>
567
+<div class="outline-text-2" id="text-orgf62f97e">
555 568
 <p>
556 569
 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.
557 570
 </p>
@@ -561,9 +574,9 @@ The black hole for web adverts. Block adverts at the domain name level within yo
561 574
 </p>
562 575
 </div>
563 576
 </div>
564
-<div id="outline-container-orga14f200" class="outline-2">
565
-<h2 id="orga14f200">Pleroma</h2>
566
-<div class="outline-text-2" id="text-orga14f200">
577
+<div id="outline-container-orgdb42e0c" class="outline-2">
578
+<h2 id="orgdb42e0c">Pleroma</h2>
579
+<div class="outline-text-2" id="text-orgdb42e0c">
567 580
 <p>
568 581
 Pleroma is an OStatus-compatible social networking server, compatible with GNU Social, PostActiv and Mastodon. It is high-performance and so is especially well suited for running on low power single board computers without much RAM.
569 582
 </p>
@@ -573,9 +586,9 @@ Pleroma is an OStatus-compatible social networking server, compatible with GNU S
573 586
 </p>
574 587
 </div>
575 588
 </div>
576
-<div id="outline-container-org5e17da3" class="outline-2">
577
-<h2 id="org5e17da3">PostActiv</h2>
578
-<div class="outline-text-2" id="text-org5e17da3">
589
+<div id="outline-container-org13c41ff" class="outline-2">
590
+<h2 id="org13c41ff">PostActiv</h2>
591
+<div class="outline-text-2" id="text-org13c41ff">
579 592
 <p>
580 593
 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.
581 594
 </p>
@@ -585,9 +598,9 @@ An alternative federated social networking system compatible with GNU Social, Pl
585 598
 </p>
586 599
 </div>
587 600
 </div>
588
-<div id="outline-container-org517a50e" class="outline-2">
589
-<h2 id="org517a50e">Profanity</h2>
590
-<div class="outline-text-2" id="text-org517a50e">
601
+<div id="outline-container-org2eaba6a" class="outline-2">
602
+<h2 id="org2eaba6a">Profanity</h2>
603
+<div class="outline-text-2" id="text-org2eaba6a">
591 604
 <p>
592 605
 A shell based XMPP client which you can run on the Freedombone server via ssh.
593 606
 </p>
@@ -597,9 +610,9 @@ A shell based XMPP client which you can run on the Freedombone server via ssh.
597 610
 </p>
598 611
 </div>
599 612
 </div>
600
-<div id="outline-container-org0c8c8d9" class="outline-2">
601
-<h2 id="org0c8c8d9">Riot Web</h2>
602
-<div class="outline-text-2" id="text-org0c8c8d9">
613
+<div id="outline-container-org201d591" class="outline-2">
614
+<h2 id="org201d591">Riot Web</h2>
615
+<div class="outline-text-2" id="text-org201d591">
603 616
 <p>
604 617
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
605 618
 </p>
@@ -609,9 +622,9 @@ A browser based user interface for the Matrix federated communications system, i
609 622
 </p>
610 623
 </div>
611 624
 </div>
612
-<div id="outline-container-org0901ef0" class="outline-2">
613
-<h2 id="org0901ef0">SearX</h2>
614
-<div class="outline-text-2" id="text-org0901ef0">
625
+<div id="outline-container-org46bc137" class="outline-2">
626
+<h2 id="org46bc137">SearX</h2>
627
+<div class="outline-text-2" id="text-org46bc137">
615 628
 <p>
616 629
 A metasearch engine for customised and private web searches.
617 630
 </p>
@@ -621,9 +634,9 @@ A metasearch engine for customised and private web searches.
621 634
 </p>
622 635
 </div>
623 636
 </div>
624
-<div id="outline-container-org6403f0a" class="outline-2">
625
-<h2 id="org6403f0a">tt-rss</h2>
626
-<div class="outline-text-2" id="text-org6403f0a">
637
+<div id="outline-container-org8fff378" class="outline-2">
638
+<h2 id="org8fff378">tt-rss</h2>
639
+<div class="outline-text-2" id="text-org8fff378">
627 640
 <p>
628 641
 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.
629 642
 </p>
@@ -633,9 +646,9 @@ Private RSS reader. Pulls in RSS/Atom feeds via Tor and is only accessible via a
633 646
 </p>
634 647
 </div>
635 648
 </div>
636
-<div id="outline-container-orgdeec7a4" class="outline-2">
637
-<h2 id="orgdeec7a4">Syncthing</h2>
638
-<div class="outline-text-2" id="text-orgdeec7a4">
649
+<div id="outline-container-org932f267" class="outline-2">
650
+<h2 id="org932f267">Syncthing</h2>
651
+<div class="outline-text-2" id="text-org932f267">
639 652
 <p>
640 653
 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.
641 654
 </p>
@@ -645,9 +658,9 @@ Possibly the best way to synchronise files across all of your devices. Once it h
645 658
 </p>
646 659
 </div>
647 660
 </div>
648
-<div id="outline-container-org5a6843f" class="outline-2">
649
-<h2 id="org5a6843f">Tahoe-LAFS</h2>
650
-<div class="outline-text-2" id="text-org5a6843f">
661
+<div id="outline-container-orgba7f3d8" class="outline-2">
662
+<h2 id="orgba7f3d8">Tahoe-LAFS</h2>
663
+<div class="outline-text-2" id="text-orgba7f3d8">
651 664
 <p>
652 665
 Robust and encrypted storage of files on one or more server.
653 666
 </p>
@@ -657,9 +670,9 @@ Robust and encrypted storage of files on one or more server.
657 670
 </p>
658 671
 </div>
659 672
 </div>
660
-<div id="outline-container-org4e08973" class="outline-2">
661
-<h2 id="org4e08973">Tox</h2>
662
-<div class="outline-text-2" id="text-org4e08973">
673
+<div id="outline-container-org9a4f66a" class="outline-2">
674
+<h2 id="org9a4f66a">Tox</h2>
675
+<div class="outline-text-2" id="text-org9a4f66a">
663 676
 <p>
664 677
 Client and bootstrap node for the Tox chat/VoIP system.
665 678
 </p>
@@ -669,9 +682,9 @@ Client and bootstrap node for the Tox chat/VoIP system.
669 682
 </p>
670 683
 </div>
671 684
 </div>
672
-<div id="outline-container-orgd3b3f1e" class="outline-2">
673
-<h2 id="orgd3b3f1e">Turtl</h2>
674
-<div class="outline-text-2" id="text-orgd3b3f1e">
685
+<div id="outline-container-org94d43e3" class="outline-2">
686
+<h2 id="org94d43e3">Turtl</h2>
687
+<div class="outline-text-2" id="text-org94d43e3">
675 688
 <p>
676 689
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
677 690
 </p>
@@ -681,18 +694,18 @@ A system for privately creating and sharing notes and images, similar to Evernot
681 694
 </p>
682 695
 </div>
683 696
 </div>
684
-<div id="outline-container-org823c7ff" class="outline-2">
685
-<h2 id="org823c7ff">Vim</h2>
686
-<div class="outline-text-2" id="text-org823c7ff">
697
+<div id="outline-container-org46fcb91" class="outline-2">
698
+<h2 id="org46fcb91">Vim</h2>
699
+<div class="outline-text-2" id="text-org46fcb91">
687 700
 <p>
688 701
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
689 702
 </p>
690 703
 </div>
691 704
 </div>
692 705
 
693
-<div id="outline-container-org3535c47" class="outline-2">
694
-<h2 id="org3535c47">Virtual Private Network (VPN)</h2>
695
-<div class="outline-text-2" id="text-org3535c47">
706
+<div id="outline-container-org867a756" class="outline-2">
707
+<h2 id="org867a756">Virtual Private Network (VPN)</h2>
708
+<div class="outline-text-2" id="text-org867a756">
696 709
 <p>
697 710
 Set up a VPN on your server so that you can bypass local internet censorship.
698 711
 </p>
@@ -702,9 +715,9 @@ Set up a VPN on your server so that you can bypass local internet censorship.
702 715
 </p>
703 716
 </div>
704 717
 </div>
705
-<div id="outline-container-orgaadabb5" class="outline-2">
706
-<h2 id="orgaadabb5">XMPP</h2>
707
-<div class="outline-text-2" id="text-orgaadabb5">
718
+<div id="outline-container-orge4cd08a" class="outline-2">
719
+<h2 id="orge4cd08a">XMPP</h2>
720
+<div class="outline-text-2" id="text-orge4cd08a">
708 721
 <p>
709 722
 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.
710 723
 </p>

+ 2
- 2
website/EN/index.html Visa fil

@@ -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
-<!-- 2017-12-20 Wed 12:40 -->
6
+<!-- 2017-12-20 Wed 13:53 -->
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>
@@ -290,7 +290,7 @@ After installation it's possible that you might want some advice on how to run y
290 290
 </ul>
291 291
 
292 292
 <p>
293
-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>.
293
+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>.
294 294
 </p>
295 295
 
296 296
 <p>

+ 32
- 32
website/EN/mobile.html Visa fil

@@ -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
-<!-- 2017-11-19 Sun 23:19 -->
6
+<!-- 2017-12-20 Wed 14:32 -->
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>
@@ -256,7 +256,7 @@ Mobile phones are insecure devices, but they're regarded as being so essential t
256 256
  <table style="width:80%; border:0">
257 257
   <tr>
258 258
     <td><center><b><h3>Open</h3></b><br>Use a free and open source operating system. Open means more trustworthy</center></td>
259
-    <td><center><b><h3>Remove</h3></b><br>If there are any proprietary apps then remove or deactivete them</center></td>
259
+    <td><center><b><h3>Remove</h3></b><br>If there are any proprietary apps then remove or deactivate them</center></td>
260 260
   </tr>
261 261
   <tr>
262 262
     <td><center><b><h3>Encrypt</h3></b><br>Make sure your phone is encrypted with a password which isn't easy to guess</center></td>
@@ -277,9 +277,9 @@ Mobile phones are insecure devices, but they're regarded as being so essential t
277 277
 </table>
278 278
 </center>
279 279
 
280
-<div id="outline-container-org028bfb1" class="outline-2">
281
-<h2 id="org028bfb1">Open</h2>
282
-<div class="outline-text-2" id="text-org028bfb1">
280
+<div id="outline-container-orgd7b8f2c" class="outline-2">
281
+<h2 id="orgd7b8f2c">Open</h2>
282
+<div class="outline-text-2" id="text-orgd7b8f2c">
283 283
 <p>
284 284
 Use a Linux based phone operating system. Typically this will mean Android, but could also mean LineageOS or Replicant. LineageOS is the most preferable, because you can usually get an up to date image with a recent kernel which will give you better security against exploits. If you're buying a phone then look for a model which is supported by LineageOS. Replicant is the most free (as in freedom) but only runs on a small number of phone models. If you have a phone which runs a full GNU/Linux system then that's fantastic, and you can probably use it in much the same way as a desktop system and the rest of the advice on this page won't apply. If you don't have a phone capable of running a Linux based operating system then consider selling, giving away or bartering your existing one.
285 285
 </p>
@@ -290,45 +290,45 @@ Why is it so important to run Linux on a phone? Aren't <i>iThings</i> supposed t
290 290
 </div>
291 291
 </div>
292 292
 
293
-<div id="outline-container-orgf5a1356" class="outline-2">
294
-<h2 id="orgf5a1356">Remove</h2>
295
-<div class="outline-text-2" id="text-orgf5a1356">
293
+<div id="outline-container-org050f512" class="outline-2">
294
+<h2 id="org050f512">Remove</h2>
295
+<div class="outline-text-2" id="text-org050f512">
296 296
 <p>
297 297
 So maybe you're running Android and the phone came with some apps already installed. Almost certainly they'll be proprietary. Go to Settings/Apps and then uninstall or deactivate any apps which you really don't need. Mostly preinstalled apps are intended to send your data to companies who will then sell it to advertisers or governments under the business model of <i>surveillance capital</i>. It's not a good idea to get caught up in that, and to avoid becoming addicted to apps which are surveilling you without consent or installing spyware in the background without your knowledge.
298 298
 </p>
299 299
 </div>
300 300
 </div>
301 301
 
302
-<div id="outline-container-org8f0466d" class="outline-2">
303
-<h2 id="org8f0466d">Encrypt</h2>
304
-<div class="outline-text-2" id="text-org8f0466d">
302
+<div id="outline-container-org29f4fb3" class="outline-2">
303
+<h2 id="org29f4fb3">Encrypt</h2>
304
+<div class="outline-text-2" id="text-org29f4fb3">
305 305
 <p>
306 306
 Encrypt your phone. This can usually be done via <b>Settings/Security</b> and you may need to fully charge the phone first. Encryption means that if you lose your phone or it gets stolen then there is less chance that anyone who picks it up will get access to your data, photos and so on.
307 307
 </p>
308 308
 </div>
309 309
 </div>
310 310
 
311
-<div id="outline-container-orgfec183a" class="outline-2">
312
-<h2 id="orgfec183a">Apps</h2>
313
-<div class="outline-text-2" id="text-orgfec183a">
311
+<div id="outline-container-orgd8e9683" class="outline-2">
312
+<h2 id="orgd8e9683">Apps</h2>
313
+<div class="outline-text-2" id="text-orgd8e9683">
314 314
 <p>
315 315
 Installing <b>F-droid</b> and only adding any new apps via F-droid will ensure that you are always using free and open source software. Open source is not a panacea, since bugs can and do still occur, but it will help you to avoid the worst security and privacy pitfalls.
316 316
 </p>
317 317
 </div>
318 318
 </div>
319 319
 
320
-<div id="outline-container-org77de138" class="outline-2">
321
-<h2 id="org77de138">Lock</h2>
322
-<div class="outline-text-2" id="text-org77de138">
320
+<div id="outline-container-orgcf9fd9c" class="outline-2">
321
+<h2 id="orgcf9fd9c">Lock</h2>
322
+<div class="outline-text-2" id="text-orgcf9fd9c">
323 323
 <p>
324 324
 Add a lock screen, preferably with a password which is not easy for other people to guess or for quicker access with a PIN number. Install an app called <b>Locker</b>, activate it and set the maximum number of password guesses to ten (or whatever you feel comfortable with). If bad people get hold of your phone then they may try to brute force your lock screen password or PIN (i.e. automatically trying millions of common word and number combinations) and the locker app will prevent them from succeeding by resetting the phone back to its factory default condition and wiping the data.
325 325
 </p>
326 326
 </div>
327 327
 </div>
328 328
 
329
-<div id="outline-container-org4dc0e5b" class="outline-2">
330
-<h2 id="org4dc0e5b">Onion</h2>
331
-<div class="outline-text-2" id="text-org4dc0e5b">
329
+<div id="outline-container-orgae1898b" class="outline-2">
330
+<h2 id="orgae1898b">Onion</h2>
331
+<div class="outline-text-2" id="text-orgae1898b">
332 332
 <p>
333 333
 Both governments and corporations want to compile matadata dossiers about you. Who you communicated with, when and how often. They want this so that they can data mine, simulate, predict and then ultimately influence (sometimes also called "nudge") your actions and preferences in the directions they prefer. By routing your connections through a number of proxy servers (Tor routers) you can make it perhaps not <i>theoretically</i> impossible but at least <i>very hard</i> for them to have a complete and accurate list of who your friends are, your religion, politics, likely health issues, sexual orientation and what news sites or books you read.
334 334
 </p>
@@ -339,26 +339,26 @@ In F-droid under the <b>repositories</b> menu you can enable the <b>guardian pro
339 339
 </div>
340 340
 </div>
341 341
 
342
-<div id="outline-container-org466eb29" class="outline-2">
343
-<h2 id="org466eb29">Email</h2>
344
-<div class="outline-text-2" id="text-org466eb29">
342
+<div id="outline-container-org6b540e5" class="outline-2">
343
+<h2 id="org6b540e5">Email</h2>
344
+<div class="outline-text-2" id="text-org6b540e5">
345 345
 <p>
346 346
 The easiest way to access email is by installing the <a href="./app_mailpile.html">Mailpile</a> app. This keeps your GPG keys off of possibly insecure mobile devices but still enables encrypted email communications in an easy way. You can use K9 mail if you prefer, but that will require installing OpenKeychain and having your GPG keys on the device, which is a lot more risky.
347 347
 </p>
348 348
 </div>
349 349
 </div>
350
-<div id="outline-container-org978ea8b" class="outline-2">
351
-<h2 id="org978ea8b">Services</h2>
352
-<div class="outline-text-2" id="text-org978ea8b">
350
+<div id="outline-container-org62a2756" class="outline-2">
351
+<h2 id="org62a2756">Services</h2>
352
+<div class="outline-text-2" id="text-org62a2756">
353 353
 <p>
354 354
 For information on configuring various apps to work with Freedombone see the <a href="./usage.html">usage section</a>. Also see advice on chat apps in the <a href="./faq.html">FAQ</a>.
355 355
 </p>
356 356
 </div>
357 357
 </div>
358 358
 
359
-<div id="outline-container-org3546225" class="outline-2">
360
-<h2 id="org3546225">Battery preservation</h2>
361
-<div class="outline-text-2" id="text-org3546225">
359
+<div id="outline-container-org59a272b" class="outline-2">
360
+<h2 id="org59a272b">Battery preservation</h2>
361
+<div class="outline-text-2" id="text-org59a272b">
362 362
 <p>
363 363
 Even with free software apps it's not difficult to get into a situation where your battery doesn't last for long. To maximize battery life access RSS feeds via the onion-based mobile reader within a Tor-compatible browser and not from a locally installed RSS app.
364 364
 </p>
@@ -373,9 +373,9 @@ If you're using the Riot mobile app to access a Matrix homeserver then you can s
373 373
 </div>
374 374
 </div>
375 375
 
376
-<div id="outline-container-org6ebc6c4" class="outline-2">
377
-<h2 id="org6ebc6c4">Blocking bad domains</h2>
378
-<div class="outline-text-2" id="text-org6ebc6c4">
376
+<div id="outline-container-org56572e8" class="outline-2">
377
+<h2 id="org56572e8">Blocking bad domains</h2>
378
+<div class="outline-text-2" id="text-org56572e8">
379 379
 <p>
380 380
 You can block known bad domains by editing the <b>/system/etc/hosts</b> file on your device. It is possible to use extensive ad-blocking hosts files used by other ad-blocking systems such as pi-hole, but merely blocking Facebook and Google Analytics will protect you against much of the corporate surveillance which goes on. Even if you don't have a Facebook account this may still be useful since they will still try to create a "ghost profile" of you, so the less data they have the better.
381 381
 </p>