浏览代码

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

Bob Mottram 7 年前
父节点
当前提交
abfd8de1e4

+ 46
- 0
doc/EN/app_akaunting.org 查看文件

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

24
 [[file:images/controlpanel/control_panel_apps.jpg]]
24
 [[file:images/controlpanel/control_panel_apps.jpg]]
25
 #+END_CENTER
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
 * CryptPad
32
 * CryptPad
28
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
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 查看文件

37
  * [[./faq.html][Frequently Asked Questions]]
37
  * [[./faq.html][Frequently Asked Questions]]
38
  * [[./mobile.html][Advice on setting up a mobile phone]]
38
  * [[./mobile.html][Advice on setting up a mobile phone]]
39
 
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
 Ready made disk images which can be copied onto USB or microSD drives are [[./downloads/current][available here]].
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 查看文件

23
  <table style="width:80%; border:0">
23
  <table style="width:80%; border:0">
24
   <tr>
24
   <tr>
25
     <td><center><b><h3>Open</h3></b><br>Use a free and open source operating system. Open means more trustworthy</center></td>
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
   </tr>
27
   </tr>
28
   <tr>
28
   <tr>
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>
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>

二进制
img/akaunting_setup.jpg 查看文件


二进制
img/akaunting_setup_company.jpg 查看文件


+ 470
- 0
src/freedombone-app-akaunting 查看文件

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

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

+ 15
- 0
src/freedombone-app-xmpp 查看文件

375
     fi
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
 function upgrade_xmpp {
389
 function upgrade_xmpp {
379
     if [ -d /etc/letsencrypt ]; then
390
     if [ -d /etc/letsencrypt ]; then
380
         prosody_groups=$(groups prosody)
391
         prosody_groups=$(groups prosody)
382
             usermod -a -G ssl-cert prosody
393
             usermod -a -G ssl-cert prosody
383
         fi
394
         fi
384
     fi
395
     fi
396
+    prosody_daemon_restart_script
385
     function_check update_prosody_modules
397
     function_check update_prosody_modules
386
     update_prosody_modules
398
     update_prosody_modules
387
     xmpp_onion_addresses /etc/prosody/prosody.cfg.lua
399
     xmpp_onion_addresses /etc/prosody/prosody.cfg.lua
544
     remove_onion_service xmpp 5222 5223 5269
556
     remove_onion_service xmpp 5222 5223 5269
545
 
557
 
546
     apt-get -yq remove --purge prosody
558
     apt-get -yq remove --purge prosody
559
+    rm /etc/cron.daily/prosody
547
     if [ -f $INSTALL_DIR/$prosody_modules_filename ]; then
560
     if [ -f $INSTALL_DIR/$prosody_modules_filename ]; then
548
         rm $INSTALL_DIR/$prosody_modules_filename
561
         rm $INSTALL_DIR/$prosody_modules_filename
549
     fi
562
     fi
1059
         exit 347682
1072
         exit 347682
1060
     fi
1073
     fi
1061
 
1074
 
1075
+    prosody_daemon_restart_script
1076
+
1062
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a xmpp -p "$XMPP_PASSWORD"
1077
     ${PROJECT_NAME}-pass -u $MY_USERNAME -a xmpp -p "$XMPP_PASSWORD"
1063
 
1078
 
1064
     APP_INSTALLED=1
1079
     APP_INSTALLED=1

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

160
 
160
 
161
     case $setup_type in
161
     case $setup_type in
162
         debian|ubuntu|trisquel|mint)
162
         debian|ubuntu|trisquel|mint)
163
+            sudo apt-get -yq remove vmdebootstrap
163
             sudo apt-get -yq install build-essential libc6-dev-i386 gcc-multilib g++-multilib
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
             sudo apt-get -yq install dosfstools btrfs-tools extlinux python-distro-info mbr
166
             sudo apt-get -yq install dosfstools btrfs-tools extlinux python-distro-info mbr
166
             sudo apt-get -yq install qemu-user-static binfmt-support u-boot-tools qemu
167
             sudo apt-get -yq install qemu-user-static binfmt-support u-boot-tools qemu
168
+            freedombone-image-vmdebootstrap
167
             ;;
169
             ;;
168
         parabola|arch)
170
         parabola|arch)
169
             sudo pacman -S --noconfirm libc++ git gcc gcc-libs python-docutils mktorrent patch
171
             sudo pacman -S --noconfirm libc++ git gcc gcc-libs python-docutils mktorrent patch

+ 3
- 0
src/freedombone-utils-web 查看文件

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

+ 334
- 0
website/EN/app_akaunting.html 查看文件

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

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-12-01 Fri 10:19 -->
6
+<!-- 2017-12-20 Wed 23:36 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
264
 </div>
264
 </div>
265
 </div>
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
 <p>
283
 <p>
271
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
284
 Collaborate on editing documents, presentations and source code, or vote on things. All with a good level of security.
272
 </p>
285
 </p>
276
 </p>
289
 </p>
277
 </div>
290
 </div>
278
 </div>
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
 <p>
295
 <p>
283
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
296
 Enables you to use the system as a music server which any DLNA compatible devices can connect to within your home network.
284
 </p>
297
 </p>
288
 </p>
301
 </p>
289
 </div>
302
 </div>
290
 </div>
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
 <p>
307
 <p>
295
 A databaseless wiki system.
308
 A databaseless wiki system.
296
 </p>
309
 </p>
300
 </p>
313
 </p>
301
 </div>
314
 </div>
302
 </div>
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
 <p>
319
 <p>
307
 If you use the Mutt client to read your email then this will set it up to use emacs for composing new mail.
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
 </p>
321
 </p>
312
 </p>
325
 </p>
313
 </div>
326
 </div>
314
 </div>
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
 <p>
331
 <p>
319
 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.
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
 </p>
333
 </p>
324
 </p>
337
 </p>
325
 </div>
338
 </div>
326
 </div>
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
 <p>
343
 <p>
331
 Federated social network system.
344
 Federated social network system.
332
 </p>
345
 </p>
336
 </p>
349
 </p>
337
 </div>
350
 </div>
338
 </div>
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
 <p>
355
 <p>
343
 Modern looking blogging system.
356
 Modern looking blogging system.
344
 </p>
357
 </p>
348
 </p>
361
 </p>
349
 </div>
362
 </div>
350
 </div>
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
 <p>
367
 <p>
355
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
368
 Federated social network based on the OStatus protocol. You can "<i>remote follow</i>" other users within the GNU Social federation.
356
 </p>
369
 </p>
360
 </p>
373
 </p>
361
 </div>
374
 </div>
362
 </div>
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
 <p>
379
 <p>
367
 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.
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
 </p>
381
 </p>
372
 </p>
385
 </p>
373
 </div>
386
 </div>
374
 </div>
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
 <p>
391
 <p>
379
 Databaseless blogging system. Quite simple and with a markdown-like format.
392
 Databaseless blogging system. Quite simple and with a markdown-like format.
380
 </p>
393
 </p>
384
 </p>
397
 </p>
385
 </div>
398
 </div>
386
 </div>
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
 <p>
403
 <p>
391
 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.
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
 </p>
405
 </p>
396
 </p>
409
 </p>
397
 </div>
410
 </div>
398
 </div>
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
 <p>
415
 <p>
403
 Make your own internet radio station.
416
 Make your own internet radio station.
404
 </p>
417
 </p>
408
 </p>
421
 </p>
409
 </div>
422
 </div>
410
 </div>
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
 <p>
427
 <p>
415
 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.
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
 </p>
429
 </p>
420
 </p>
433
 </p>
421
 </div>
434
 </div>
422
 </div>
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
 <p>
439
 <p>
427
 Experimental WebRTC video conferencing system, similar to Google Hangouts. This may not be fully functional, but is hoped to be in the near future.
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
 </p>
441
 </p>
429
 </div>
442
 </div>
430
 </div>
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
 <p>
448
 <p>
436
 A simple kanban system for managing projects or TODO lists.
449
 A simple kanban system for managing projects or TODO lists.
437
 </p>
450
 </p>
441
 </p>
454
 </p>
442
 </div>
455
 </div>
443
 </div>
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
 <p>
460
 <p>
448
 An OpenPGP key server for storing and retrieving GPG public keys.
461
 An OpenPGP key server for storing and retrieving GPG public keys.
449
 </p>
462
 </p>
453
 </p>
466
 </p>
454
 </div>
467
 </div>
455
 </div>
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
 <p>
472
 <p>
460
 Access your music collection from any internet connected device.
473
 Access your music collection from any internet connected device.
461
 </p>
474
 </p>
465
 </p>
478
 </p>
466
 </div>
479
 </div>
467
 </div>
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
 <p>
484
 <p>
472
 Make your photo albums available on the web.
485
 Make your photo albums available on the web.
473
 </p>
486
 </p>
477
 </p>
490
 </p>
478
 </div>
491
 </div>
479
 </div>
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
 <p>
496
 <p>
484
 Modern email client which supports GPG encryption.
497
 Modern email client which supports GPG encryption.
485
 </p>
498
 </p>
489
 </p>
502
 </p>
490
 </div>
503
 </div>
491
 </div>
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
 <p>
508
 <p>
496
 Multi-user chat with some security and moderation controls.
509
 Multi-user chat with some security and moderation controls.
497
 </p>
510
 </p>
501
 </p>
514
 </p>
502
 </div>
515
 </div>
503
 </div>
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
 <p>
520
 <p>
508
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
521
 Publicly host video and audio files so that you don't need to use YouTube/Vimeo/etc.
509
 </p>
522
 </p>
513
 </p>
526
 </p>
514
 </div>
527
 </div>
515
 </div>
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
 <p>
532
 <p>
520
 The popular VoIP and text chat system. Say goodbye to old-fashioned telephony conferences with silly dial codes. Also works well on mobile.
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
 </p>
534
 </p>
525
 </p>
538
 </p>
526
 </div>
539
 </div>
527
 </div>
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
 <p>
544
 <p>
532
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
545
 Store files on your server and sync them with laptops or mobile devices. Includes many plugins including videoconferencing and collaborative document editing.
533
 </p>
546
 </p>
537
 </p>
550
 </p>
538
 </div>
551
 </div>
539
 </div>
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
 <p>
556
 <p>
544
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
557
 Peer-to-peer video hosting. Similar to Mediagoblin, but the P2P aspect better enables the streaming load to be shared across servers.
545
 </p>
558
 </p>
549
 </p>
562
 </p>
550
 </div>
563
 </div>
551
 </div>
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
 <p>
568
 <p>
556
 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.
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
 </p>
570
 </p>
561
 </p>
574
 </p>
562
 </div>
575
 </div>
563
 </div>
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
 <p>
580
 <p>
568
 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.
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
 </p>
582
 </p>
573
 </p>
586
 </p>
574
 </div>
587
 </div>
575
 </div>
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
 <p>
592
 <p>
580
 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.
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
 </p>
594
 </p>
585
 </p>
598
 </p>
586
 </div>
599
 </div>
587
 </div>
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
 <p>
604
 <p>
592
 A shell based XMPP client which you can run on the Freedombone server via ssh.
605
 A shell based XMPP client which you can run on the Freedombone server via ssh.
593
 </p>
606
 </p>
597
 </p>
610
 </p>
598
 </div>
611
 </div>
599
 </div>
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
 <p>
616
 <p>
604
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
617
 A browser based user interface for the Matrix federated communications system, including WebRTC audio and video chat.
605
 </p>
618
 </p>
609
 </p>
622
 </p>
610
 </div>
623
 </div>
611
 </div>
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
 <p>
628
 <p>
616
 A metasearch engine for customised and private web searches.
629
 A metasearch engine for customised and private web searches.
617
 </p>
630
 </p>
621
 </p>
634
 </p>
622
 </div>
635
 </div>
623
 </div>
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
 <p>
640
 <p>
628
 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.
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
 </p>
642
 </p>
633
 </p>
646
 </p>
634
 </div>
647
 </div>
635
 </div>
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
 <p>
652
 <p>
640
 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.
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
 </p>
654
 </p>
645
 </p>
658
 </p>
646
 </div>
659
 </div>
647
 </div>
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
 <p>
664
 <p>
652
 Robust and encrypted storage of files on one or more server.
665
 Robust and encrypted storage of files on one or more server.
653
 </p>
666
 </p>
657
 </p>
670
 </p>
658
 </div>
671
 </div>
659
 </div>
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
 <p>
676
 <p>
664
 Client and bootstrap node for the Tox chat/VoIP system.
677
 Client and bootstrap node for the Tox chat/VoIP system.
665
 </p>
678
 </p>
669
 </p>
682
 </p>
670
 </div>
683
 </div>
671
 </div>
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
 <p>
688
 <p>
676
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
689
 A system for privately creating and sharing notes and images, similar to Evernote but without the spying.
677
 </p>
690
 </p>
681
 </p>
694
 </p>
682
 </div>
695
 </div>
683
 </div>
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
 <p>
700
 <p>
688
 If you use the Mutt client to read your email then this will set it up to use vim for composing new mail.
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
 </p>
702
 </p>
690
 </div>
703
 </div>
691
 </div>
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
 <p>
709
 <p>
697
 Set up a VPN on your server so that you can bypass local internet censorship.
710
 Set up a VPN on your server so that you can bypass local internet censorship.
698
 </p>
711
 </p>
702
 </p>
715
 </p>
703
 </div>
716
 </div>
704
 </div>
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
 <p>
721
 <p>
709
 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.
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
 </p>
723
 </p>

+ 2
- 2
website/EN/index.html 查看文件

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-12-20 Wed 12:40 -->
6
+<!-- 2017-12-20 Wed 13:53 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
290
 </ul>
290
 </ul>
291
 
291
 
292
 <p>
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
 </p>
294
 </p>
295
 
295
 
296
 <p>
296
 <p>

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

3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
5
 <head>
5
 <head>
6
-<!-- 2017-11-19 Sun 23:19 -->
6
+<!-- 2017-12-20 Wed 14:32 -->
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
8
 <meta name="viewport" content="width=device-width, initial-scale=1" />
9
 <title>&lrm;</title>
9
 <title>&lrm;</title>
256
  <table style="width:80%; border:0">
256
  <table style="width:80%; border:0">
257
   <tr>
257
   <tr>
258
     <td><center><b><h3>Open</h3></b><br>Use a free and open source operating system. Open means more trustworthy</center></td>
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
   </tr>
260
   </tr>
261
   <tr>
261
   <tr>
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>
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
 </table>
277
 </table>
278
 </center>
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
 <p>
283
 <p>
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.
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
 </p>
285
 </p>
290
 </div>
290
 </div>
291
 </div>
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
 <p>
296
 <p>
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.
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
 </p>
298
 </p>
299
 </div>
299
 </div>
300
 </div>
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
 <p>
305
 <p>
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.
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
 </p>
307
 </p>
308
 </div>
308
 </div>
309
 </div>
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
 <p>
314
 <p>
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.
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
 </p>
316
 </p>
317
 </div>
317
 </div>
318
 </div>
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
 <p>
323
 <p>
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.
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
 </p>
325
 </p>
326
 </div>
326
 </div>
327
 </div>
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
 <p>
332
 <p>
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.
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
 </p>
334
 </p>
339
 </div>
339
 </div>
340
 </div>
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
 <p>
345
 <p>
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.
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
 </p>
347
 </p>
348
 </div>
348
 </div>
349
 </div>
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
 <p>
353
 <p>
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>.
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
 </p>
355
 </p>
356
 </div>
356
 </div>
357
 </div>
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
 <p>
362
 <p>
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.
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
 </p>
364
 </p>
373
 </div>
373
 </div>
374
 </div>
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
 <p>
379
 <p>
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.
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
 </p>
381
 </p>