瀏覽代碼

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

Bob Mottram 6 年之前
父節點
當前提交
253c85d0a7
共有 78 個檔案被更改,包括 510 行新增198 行删除
  1. 2
    0
      Makefile
  2. 0
    2
      doc/EN/app_dlna.org
  3. 二進制
      img/android-app/akaunting.png
  4. 二進制
      img/android-app/bludit.png
  5. 二進制
      img/android-app/dlna.png
  6. 二進制
      img/android-app/dokuwiki.png
  7. 二進制
      img/android-app/edith.png
  8. 二進制
      img/android-app/etherpad.png
  9. 二進制
      img/android-app/fedwiki.png
  10. 二進制
      img/android-app/friendica.png
  11. 二進制
      img/android-app/gnusocial.png
  12. 二進制
      img/android-app/gogs.png
  13. 二進制
      img/android-app/htmly.png
  14. 二進制
      img/android-app/hubzilla.png
  15. 二進制
      img/android-app/irc.png
  16. 二進制
      img/android-app/kanboard.png
  17. 二進制
      img/android-app/koel.png
  18. 二進制
      img/android-app/lychee.png
  19. 二進制
      img/android-app/mailpile.png
  20. 二進制
      img/android-app/matrix.png
  21. 二進制
      img/android-app/mediagoblin.png
  22. 二進制
      img/android-app/movim.png
  23. 二進制
      img/android-app/mumble.png
  24. 二進制
      img/android-app/nextcloud.png
  25. 二進制
      img/android-app/peertube.png
  26. 二進制
      img/android-app/pleroma.png
  27. 二進制
      img/android-app/postactiv.png
  28. 二進制
      img/android-app/privatebin.png
  29. 二進制
      img/android-app/rocketchat.png
  30. 二進制
      img/android-app/searx.png
  31. 二進制
      img/android-app/syncthing.png
  32. 二進制
      img/android-app/tahoelafs.png
  33. 二進制
      img/android-app/turtl.png
  34. 二進制
      img/android-app/xmpp.png
  35. 1
    0
      src/freedombone-addremove
  36. 4
    0
      src/freedombone-app-akaunting
  37. 4
    0
      src/freedombone-app-bludit
  38. 4
    0
      src/freedombone-app-dlna
  39. 4
    0
      src/freedombone-app-dokuwiki
  40. 4
    0
      src/freedombone-app-edith
  41. 4
    0
      src/freedombone-app-etherpad
  42. 4
    0
      src/freedombone-app-fedwiki
  43. 4
    0
      src/freedombone-app-friendica
  44. 4
    0
      src/freedombone-app-gnusocial
  45. 58
    55
      src/freedombone-app-gogs
  46. 4
    0
      src/freedombone-app-htmly
  47. 4
    0
      src/freedombone-app-hubzilla
  48. 4
    0
      src/freedombone-app-icecast
  49. 4
    0
      src/freedombone-app-irc
  50. 4
    0
      src/freedombone-app-jitsi
  51. 3
    0
      src/freedombone-app-kanboard
  52. 4
    0
      src/freedombone-app-koel
  53. 4
    0
      src/freedombone-app-lychee
  54. 4
    0
      src/freedombone-app-mailpile
  55. 4
    0
      src/freedombone-app-matrix
  56. 5
    1
      src/freedombone-app-mediagoblin
  57. 4
    0
      src/freedombone-app-movim
  58. 4
    0
      src/freedombone-app-mumble
  59. 4
    0
      src/freedombone-app-nextcloud
  60. 4
    0
      src/freedombone-app-peertube
  61. 4
    0
      src/freedombone-app-pleroma
  62. 4
    0
      src/freedombone-app-postactiv
  63. 4
    0
      src/freedombone-app-privatebin
  64. 4
    0
      src/freedombone-app-rocketchat
  65. 4
    0
      src/freedombone-app-syncthing
  66. 4
    0
      src/freedombone-app-turtl
  67. 4
    0
      src/freedombone-app-xmpp
  68. 2
    2
      src/freedombone-config
  69. 4
    0
      src/freedombone-syncthing
  70. 5
    0
      src/freedombone-template
  71. 8
    0
      src/freedombone-upgrade
  72. 167
    0
      src/freedombone-utils-android
  73. 28
    1
      src/freedombone-utils-avahi
  74. 2
    2
      src/freedombone-utils-onion
  75. 1
    1
      src/freedombone-utils-selector
  76. 3
    0
      src/freedombone-utils-setup
  77. 72
    7
      src/freedombone-utils-web
  78. 33
    127
      website/EN/app_dlna.html

+ 2
- 0
Makefile 查看文件

@@ -20,6 +20,7 @@ install:
20 20
 	mkdir -p ${DESTDIR}${PREFIX}/bin
21 21
 	mkdir -p ${DESTDIR}/usr/share/${APP}/base
22 22
 	mkdir -p ${DESTDIR}/usr/share/${APP}/apps
23
+	mkdir -p ${DESTDIR}/usr/share/${APP}/android-app
23 24
 	mkdir -p ${DESTDIR}/usr/share/${APP}/utils
24 25
 	mkdir -p ${DESTDIR}/usr/share/${APP}/avatars
25 26
 	mkdir -p ${DESTDIR}/etc/${APP}
@@ -46,6 +47,7 @@ install:
46 47
 	cp man/*.1.gz ${DESTDIR}${PREFIX}/share/man/man1
47 48
 	cp man/${APP}-backup-local.1.gz ${DESTDIR}${PREFIX}/share/man/man1/backup.1.gz
48 49
 	cp man/${APP}-restore-local.1.gz ${DESTDIR}${PREFIX}/share/man/man1/restore.1.gz
50
+	cp img/android-app/*.png ${DESTDIR}/usr/share/${APP}/android-app
49 51
 	chown -R root: /usr/share/${APP}
50 52
 	chmod -R +r /usr/share/${APP}
51 53
 #	bash -c "./translate install"

+ 0
- 2
doc/EN/app_dlna.org 查看文件

@@ -23,6 +23,4 @@ Select *Administrator controls* then *App Settings* then *dlna*. From there you
23 23
 
24 24
 The system will scan the /Music/ directory, which could take a while if there are thousands of files, but you don't need to do anything further other than perhaps to log out by selecting *Exit* a couple of times.
25 25
 
26
-If you have an Android device then go to F-Droid (if you don't already have it installed then it can be [[https://f-droid.org/][downloaded here]]) and search for *ControlDLNA*. On running the app you should see a red Debian icon which you can press on, then you may need to select "local". After a few seconds the list of albums or tracks should then appear and you can browse and play them.
27
-
28 26
 The DLNA service will only work within your local home network, and isn't remotely accessible from other locations via the internet. That can be both a good and a bad thing. Another consideration is that there are /no access controls/ on DLNA services, so any music or videos on the USB drive will be playable by anyone within your home network.

二進制
img/android-app/akaunting.png 查看文件


二進制
img/android-app/bludit.png 查看文件


二進制
img/android-app/dlna.png 查看文件


二進制
img/android-app/dokuwiki.png 查看文件


二進制
img/android-app/edith.png 查看文件


二進制
img/android-app/etherpad.png 查看文件


二進制
img/android-app/fedwiki.png 查看文件


二進制
img/android-app/friendica.png 查看文件


二進制
img/android-app/gnusocial.png 查看文件


二進制
img/android-app/gogs.png 查看文件


二進制
img/android-app/htmly.png 查看文件


二進制
img/android-app/hubzilla.png 查看文件


二進制
img/android-app/irc.png 查看文件


二進制
img/android-app/kanboard.png 查看文件


二進制
img/android-app/koel.png 查看文件


二進制
img/android-app/lychee.png 查看文件


二進制
img/android-app/mailpile.png 查看文件


二進制
img/android-app/matrix.png 查看文件


二進制
img/android-app/mediagoblin.png 查看文件


二進制
img/android-app/movim.png 查看文件


二進制
img/android-app/mumble.png 查看文件


二進制
img/android-app/nextcloud.png 查看文件


二進制
img/android-app/peertube.png 查看文件


二進制
img/android-app/pleroma.png 查看文件


二進制
img/android-app/postactiv.png 查看文件


二進制
img/android-app/privatebin.png 查看文件


二進制
img/android-app/rocketchat.png 查看文件


二進制
img/android-app/searx.png 查看文件


二進制
img/android-app/syncthing.png 查看文件


二進制
img/android-app/tahoelafs.png 查看文件


二進制
img/android-app/turtl.png 查看文件


二進制
img/android-app/xmpp.png 查看文件


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

@@ -267,5 +267,6 @@ if [[ "$1" == "add-all" ]]; then
267 267
 else
268 268
     install_apps_selected
269 269
 fi
270
+android_update_apps
270 271
 
271 272
 exit 0

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

@@ -40,6 +40,10 @@ AKAUNTING_ADMIN_PASSWORD=
40 40
 
41 41
 AKAUNTING_BACKGROUND_IMAGE_URL=
42 42
 
43
+AKAUNTING_SHORT_DESCRIPTION=$'Personal accounting'
44
+AKAUNTING_DESCRIPTION=$'Personal or small business accounting'
45
+AKAUNTING_MOBILE_APP_URL=
46
+
43 47
 akaunting_variables=(ONION_ONLY
44 48
                      AKAUNTING_DOMAIN_NAME
45 49
                      AKAUNTING_CODE

+ 4
- 0
src/freedombone-app-bludit 查看文件

@@ -35,6 +35,10 @@ BLUDIT_ONION_PORT=9844
35 35
 BLUDIT_REPO="https://github.com/bludit/bludit"
36 36
 BLUDIT_COMMIT='0e27e31a84421b3e6bd000a77bc89c2dff3c446a'
37 37
 
38
+BLUDIT_SHORT_DESCRIPTION=$'Bludit Blog'
39
+BLUDIT_DESCRIPTION=$'Simple Markdown blogging'
40
+BLUDIT_MOBILE_APP_URL=
41
+
38 42
 bludit_variables=(ONION_ONLY
39 43
                   BLUDIT_DOMAIN_NAME
40 44
                   BLUDIT_CODE

+ 4
- 0
src/freedombone-app-dlna 查看文件

@@ -31,6 +31,10 @@ VARIANTS='full full-vim media'
31 31
 IN_DEFAULT_INSTALL=0
32 32
 SHOW_ON_ABOUT=0
33 33
 
34
+DLNA_SHORT_DESCRIPTION=$'DLNA media'
35
+DLNA_DESCRIPTION=$'DLNA media'
36
+DLNA_MOBILE_APP_URL=
37
+
34 38
 dlna_variables=(SYSTEM_TYPE
35 39
                 USB_MOUNT_DLNA
36 40
                 INSTALLED_WITHIN_DOCKER

+ 4
- 0
src/freedombone-app-dokuwiki 查看文件

@@ -40,6 +40,10 @@ DOKUWIKI_TITLE="${PROJECT_NAME} Dokuwiki"
40 40
 DOKUWIKI_REPO="https://github.com/splitbrain/dokuwiki"
41 41
 DOKUWIKI_COMMIT='be15c01c0b982cf1a75b5af031bf077143c63f39'
42 42
 
43
+DOKUWIKI_SHORT_DESCRIPTION=$'Dokuwiki'
44
+DOKUWIKI_DESCRIPTION=$'Dokuwiki databaseless wiki'
45
+DOKUWIKI_MOBILE_APP_URL=
46
+
43 47
 dokuwiki_variables=(ONION_ONLY
44 48
                     MY_USERNAME
45 49
                     DOKUWIKI_TITLE

+ 4
- 0
src/freedombone-app-edith 查看文件

@@ -38,6 +38,10 @@ EDITH_CODE=
38 38
 EDITH_ONION_PORT=8278
39 39
 EDITH_LOGIN_TEXT=$"Edith login"
40 40
 
41
+EDITH_SHORT_DESCRIPTION=$'Edith Notes'
42
+EDITH_DESCRIPTION=$'Extremely simple note taking'
43
+EDITH_MOBILE_APP_URL=
44
+
41 45
 edith_variables=(MY_USERNAME
42 46
                  MY_EMAIL_ADDRESS
43 47
                  ONION_ONLY

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

@@ -42,6 +42,10 @@ ETHERPAD_ADMIN_PASSWORD=
42 42
 ETHERPAD_TITLE=$'Freedombone Docs'
43 43
 ETHERPAD_WELCOME_MESSAGE=$"Welcome to ${ETHERPAD_TITLE}!\\n\\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!"
44 44
 
45
+ETHERPAD_SHORT_DESCRIPTION=$'Etherpad'
46
+ETHERPAD_DESCRIPTION=$'Etherpad'
47
+ETHERPAD_MOBILE_APP_URL=
48
+
45 49
 etherpad_variables=(ONION_ONLY
46 50
                     DEFAULT_DOMAIN_NAME
47 51
                     ETHERPAD_DOMAIN_NAME

+ 4
- 0
src/freedombone-app-fedwiki 查看文件

@@ -42,6 +42,10 @@ FEDWIKI_PORT=3053
42 42
 FEDWIKI_DATA=/var/lib/fedwiki
43 43
 FEDWIKI_COOKIE=
44 44
 
45
+FEDWIKI_SHORT_DESCRIPTION=$'FedWiki'
46
+FEDWIKI_DESCRIPTION=$'Federated Wiki'
47
+FEDWIKI_MOBILE_APP_URL=
48
+
45 49
 fedwiki_variables=(FEDWIKI_DOMAIN_NAME
46 50
                    FEDWIKI_CODE
47 51
                    FEDWIKI_COOKIE

+ 4
- 0
src/freedombone-app-friendica 查看文件

@@ -40,6 +40,10 @@ FRIENDICA_ADMIN_PASSWORD=
40 40
 FRIENDICA_COMMIT='b5a42c5b31fae5315bacd37769eba20ab2345aaa'
41 41
 FRIENDICA_ADDONS_COMMIT='7cb9dbdda7f227462895c07be3c968405561d40e'
42 42
 
43
+FRIENDICA_SHORT_DESCRIPTION=$'Friendica'
44
+FRIENDICA_DESCRIPTION=$'Friendica federated social network'
45
+FRIENDICA_MOBILE_APP_URL=
46
+
43 47
 friendica_variables=(ONION_ONLY
44 48
                      FRIENDICA_DOMAIN_NAME
45 49
                      FRIENDICA_CODE

+ 4
- 0
src/freedombone-app-gnusocial 查看文件

@@ -46,6 +46,10 @@ GNUSOCIAL_TITLE='Pleroma FE'
46 46
 # Number of months after which posts expire
47 47
 GNUSOCIAL_EXPIRE_MONTHS=3
48 48
 
49
+GNUSOCIAL_SHORT_DESCRIPTION=$'GNU Social'
50
+GNUSOCIAL_DESCRIPTION=$'GNU Social federated microblogging'
51
+GNUSOCIAL_MOBILE_APP_URL='https://f-droid.org/packages/org.mariotaku.twidere/'
52
+
49 53
 gnusocial_variables=(ONION_ONLY
50 54
                      GNUSOCIAL_DOMAIN_NAME
51 55
                      GNUSOCIAL_CODE

+ 58
- 55
src/freedombone-app-gogs 查看文件

@@ -34,18 +34,21 @@ SHOW_ON_ABOUT=1
34 34
 GOGS_USERNAME='gogs'
35 35
 GOGS_VERSION='0.11.29'
36 36
 
37
-GIT_DOMAIN_NAME=
38
-GIT_CODE=
37
+GOGS_DOMAIN_NAME=
38
+GOGS_CODE=
39 39
 GIT_ONION_PORT=8090
40 40
 GIT_ADMIN_PASSWORD=
41 41
 GOGS_BIN=
42 42
 GOGS_PORT=3145
43 43
 
44
+GOGS_SHORT_DESCRIPTION=$'Gogs'
45
+GOGS_DESCRIPTION=$'Gogs git repo management'
46
+GOGS_MOBILE_APP_URL=
47
+
44 48
 gogs_variables=(ONION_ONLY
45 49
                 GIT_ADMIN_PASSWORD
46
-                GIT_DOMAIN_NAME
47
-                GIT_CODE
48
-                GIT_ONION_PORT
50
+                GOGS_DOMAIN_NAME
51
+                GOGS_CODE
49 52
                 MY_USERNAME
50 53
                 DDNS_PROVIDER
51 54
                 ARCHITECTURE)
@@ -65,8 +68,8 @@ function change_password_gogs {
65 68
 
66 69
 function install_interactive_gogs {
67 70
     if [[ $ONION_ONLY != "no" ]]; then
68
-        GIT_DOMAIN_NAME='gogs.local'
69
-        write_config_param "GIT_DOMAIN_NAME" "$GIT_DOMAIN_NAME"
71
+        GOGS_DOMAIN_NAME='gogs.local'
72
+        write_config_param "GOGS_DOMAIN_NAME" "$GOGS_DOMAIN_NAME"
70 73
     else
71 74
         function_check interactive_site_details
72 75
         interactive_site_details git
@@ -156,8 +159,8 @@ function upgrade_gogs {
156 159
     # Change port number if necessary
157 160
     if ! grep -q "HTTP_PORT = ${GOGS_PORT}" "${GOGS_CONFIG_FILE}"; then
158 161
         sed -i "s|HTTP_PORT =.*|HTTP_PORT = ${GOGS_PORT}|g" "${GOGS_CONFIG_FILE}"
159
-        read_config_param GIT_DOMAIN_NAME
160
-        sed -i "s|proxy_pass .*|proxy_pass http://localhost:${GOGS_PORT};|g" "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
162
+        read_config_param GOGS_DOMAIN_NAME
163
+        sed -i "s|proxy_pass .*|proxy_pass http://localhost:${GOGS_PORT};|g" "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
161 164
         systemctl restart gogs
162 165
         systemctl restart nginx
163 166
     fi
@@ -268,7 +271,7 @@ function restore_local_gogs {
268 271
         return
269 272
     fi
270 273
 
271
-    if [ ${#GIT_DOMAIN_NAME} -gt 2 ]; then
274
+    if [ ${#GOGS_DOMAIN_NAME} -gt 2 ]; then
272 275
         function_check gogs_create_database
273 276
         gogs_create_database
274 277
 
@@ -276,7 +279,7 @@ function restore_local_gogs {
276 279
         GOGS_CONFIG_FILE="${GOGS_CONFIG_PATH}/app.ini"
277 280
 
278 281
         function_check restore_database
279
-        restore_database gogs "${GIT_DOMAIN_NAME}"
282
+        restore_database gogs "${GOGS_DOMAIN_NAME}"
280 283
         temp_restore_dir=/root/tempgogs
281 284
         if [ -d "${USB_MOUNT}/backup/gogs" ]; then
282 285
             echo $"Restoring Gogs settings"
@@ -350,7 +353,7 @@ function restore_local_gogs {
350 353
 function backup_remote_gogs {
351 354
     if [ -d /home/$GOGS_USERNAME ]; then
352 355
         function_check suspend_site
353
-        suspend_site ${GIT_DOMAIN_NAME}
356
+        suspend_site ${GOGS_DOMAIN_NAME}
354 357
 
355 358
         function_check backup_database_to_friend
356 359
         backup_database_to_friend gogs
@@ -379,7 +382,7 @@ function backup_remote_gogs {
379 382
 
380 383
 function restore_remote_gogs {
381 384
     if grep -q "gogs domain" "$COMPLETION_FILE"; then
382
-        GIT_DOMAIN_NAME=$(get_completion_param "gogs domain")
385
+        GOGS_DOMAIN_NAME=$(get_completion_param "gogs domain")
383 386
 
384 387
         function_check gogs_create_database
385 388
         gogs_create_database
@@ -388,7 +391,7 @@ function restore_remote_gogs {
388 391
         GOGS_CONFIG_FILE=${GOGS_CONFIG_PATH}/app.ini
389 392
 
390 393
         function_check restore_database_from_friend
391
-        restore_database_from_friend gogs "${GIT_DOMAIN_NAME}"
394
+        restore_database_from_friend gogs "${GOGS_DOMAIN_NAME}"
392 395
         if [ -d "${SERVER_DIRECTORY}/backup/gogs" ]; then
393 396
             if [ ! -d $GOGS_CONFIG_PATH ]; then
394 397
                 mkdir -p $GOGS_CONFIG_PATH
@@ -445,19 +448,19 @@ function restore_remote_gogs {
445 448
 }
446 449
 
447 450
 function remove_gogs {
448
-    if [ ${#GIT_DOMAIN_NAME} -eq 0 ]; then
451
+    if [ ${#GOGS_DOMAIN_NAME} -eq 0 ]; then
449 452
         return
450 453
     fi
451 454
     systemctl stop gogs
452 455
     systemctl disable gogs
453 456
 
454
-    nginx_dissite "${GIT_DOMAIN_NAME}"
455
-    remove_certs "${GIT_DOMAIN_NAME}"
456
-    if [ -d "/var/www/${GIT_DOMAIN_NAME}" ]; then
457
-        rm -rf "/var/www/${GIT_DOMAIN_NAME}"
457
+    nginx_dissite "${GOGS_DOMAIN_NAME}"
458
+    remove_certs "${GOGS_DOMAIN_NAME}"
459
+    if [ -d "/var/www/${GOGS_DOMAIN_NAME}" ]; then
460
+        rm -rf "/var/www/${GOGS_DOMAIN_NAME}"
458 461
     fi
459
-    if [ -f "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" ]; then
460
-        rm "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
462
+    if [ -f "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" ]; then
463
+        rm "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
461 464
     fi
462 465
     function_check drop_database
463 466
     drop_database gogs
@@ -473,11 +476,11 @@ function remove_gogs {
473 476
     userdel -r gogs
474 477
 
475 478
     function_check remove_ddns_domain
476
-    remove_ddns_domain "$GIT_DOMAIN_NAME"
479
+    remove_ddns_domain "$GOGS_DOMAIN_NAME"
477 480
 }
478 481
 
479 482
 function install_gogs {
480
-    if [ ! "$GIT_DOMAIN_NAME" ]; then
483
+    if [ ! "$GOGS_DOMAIN_NAME" ]; then
481 484
         return
482 485
     fi
483 486
 
@@ -580,33 +583,33 @@ function install_gogs {
580 583
     systemctl daemon-reload
581 584
     systemctl start gogs
582 585
 
583
-    if [ ! -d "/var/www/${GIT_DOMAIN_NAME}" ]; then
584
-        mkdir "/var/www/${GIT_DOMAIN_NAME}"
586
+    if [ ! -d "/var/www/${GOGS_DOMAIN_NAME}" ]; then
587
+        mkdir "/var/www/${GOGS_DOMAIN_NAME}"
585 588
     fi
586
-    if [ -d "/var/www/${GIT_DOMAIN_NAME}/htdocs" ]; then
587
-        rm -rf "/var/www/${GIT_DOMAIN_NAME}/htdocs"
589
+    if [ -d "/var/www/${GOGS_DOMAIN_NAME}/htdocs" ]; then
590
+        rm -rf "/var/www/${GOGS_DOMAIN_NAME}/htdocs"
588 591
     fi
589 592
 
590 593
     if [[ "${ONION_ONLY}" == "no" ]]; then
591 594
         function_check nginx_http_redirect
592
-        nginx_http_redirect "${GIT_DOMAIN_NAME}"
595
+        nginx_http_redirect "${GOGS_DOMAIN_NAME}"
593 596
         { echo 'server {';
594 597
           echo '    listen 443 ssl;';
595 598
           echo '    #listen [::]:443 ssl;';
596
-          echo "    root /var/www/${GIT_DOMAIN_NAME}/htdocs;";
597
-          echo "    server_name ${GIT_DOMAIN_NAME};";
599
+          echo "    root /var/www/${GOGS_DOMAIN_NAME}/htdocs;";
600
+          echo "    server_name ${GOGS_DOMAIN_NAME};";
598 601
           echo '    access_log /dev/null;';
599 602
           echo "    error_log /dev/null;";
600
-          echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
603
+          echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
601 604
         function_check nginx_ssl
602
-        nginx_ssl "${GIT_DOMAIN_NAME}"
605
+        nginx_ssl "${GOGS_DOMAIN_NAME}"
603 606
         function_check nginx_security_options
604
-        nginx_security_options "${GIT_DOMAIN_NAME}"
607
+        nginx_security_options "${GOGS_DOMAIN_NAME}"
605 608
         { echo '    add_header Strict-Transport-Security max-age=0;';
606 609
           echo '';
607
-          echo '    location / {'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
610
+          echo '    location / {'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
608 611
         function_check nginx_limits
609
-        nginx_limits "${GIT_DOMAIN_NAME}" '10G'
612
+        nginx_limits "${GOGS_DOMAIN_NAME}" '10G'
610 613
         { echo "        proxy_pass http://localhost:${GOGS_PORT};";
611 614
           echo '    }';
612 615
           echo '';
@@ -621,24 +624,24 @@ function install_gogs {
621 624
           echo '        access_log /dev/null;';
622 625
           echo '    }';
623 626
           echo '}';
624
-          echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
627
+          echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
625 628
     else
626
-        echo -n '' > "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
629
+        echo -n '' > "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
627 630
     fi
628 631
     { echo 'server {';
629 632
       echo "    listen 127.0.0.1:${GIT_ONION_PORT} default_server;";
630
-      echo "    root /var/www/$GIT_DOMAIN_NAME/htdocs;";
631
-      echo "    server_name $GIT_DOMAIN_NAME;";
633
+      echo "    root /var/www/$GOGS_DOMAIN_NAME/htdocs;";
634
+      echo "    server_name $GOGS_DOMAIN_NAME;";
632 635
       echo '    access_log /dev/null;';
633 636
       echo "    error_log /dev/null;";
634
-      echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
637
+      echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
635 638
     function_check nginx_security_options
636
-    nginx_security_options "${GIT_DOMAIN_NAME}"
639
+    nginx_security_options "${GOGS_DOMAIN_NAME}"
637 640
     { echo '    add_header Strict-Transport-Security max-age=0;';
638 641
       echo '';
639
-      echo '    location / {'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
642
+      echo '    location / {'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
640 643
     function_check nginx_limits
641
-    nginx_limits "${GIT_DOMAIN_NAME}" '10G'
644
+    nginx_limits "${GOGS_DOMAIN_NAME}" '10G'
642 645
     { echo "        proxy_pass http://localhost:${GOGS_PORT};";
643 646
       echo '    }';
644 647
       echo '';
@@ -652,15 +655,15 @@ function install_gogs {
652 655
       echo '        log_not_found off;';
653 656
       echo '        access_log /dev/null;';
654 657
       echo '    }';
655
-      echo '}'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}"
658
+      echo '}'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}"
656 659
 
657 660
     function_check configure_php
658 661
     configure_php
659 662
 
660 663
     function_check create_site_certificate
661
-    create_site_certificate "${GIT_DOMAIN_NAME}" 'yes'
664
+    create_site_certificate "${GOGS_DOMAIN_NAME}" 'yes'
662 665
 
663
-    nginx_ensite "${GIT_DOMAIN_NAME}"
666
+    nginx_ensite "${GOGS_DOMAIN_NAME}"
664 667
 
665 668
     if [ ! -d /var/lib/tor ]; then
666 669
         echo $'No Tor installation found. Gogs onion site cannot be configured.'
@@ -685,11 +688,11 @@ function install_gogs {
685 688
     systemctl restart php7.0-fpm
686 689
     systemctl restart nginx
687 690
 
688
-    set_completion_param "gogs domain" "$GIT_DOMAIN_NAME"
691
+    set_completion_param "gogs domain" "$GOGS_DOMAIN_NAME"
689 692
     set_completion_param "gogs onion domain" "$GIT_ONION_HOSTNAME"
690 693
 
691 694
     function_check add_ddns_domain
692
-    add_ddns_domain "${GIT_DOMAIN_NAME}"
695
+    add_ddns_domain "${GOGS_DOMAIN_NAME}"
693 696
 
694 697
     # obtain the secret key
695 698
     GOGS_SECRET_KEY="$(create_password "${MINIMUM_PASSWORD_LENGTH}")"
@@ -718,17 +721,17 @@ function install_gogs {
718 721
       echo '';
719 722
       echo '[server]'; } >> ${GOGS_CONFIG_FILE}
720 723
     if [[ ${ONION_ONLY} == 'no' ]]; then
721
-        echo "DOMAIN = ${GIT_DOMAIN_NAME}" >> ${GOGS_CONFIG_FILE}
722
-        echo "ROOT_URL = https://$GIT_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE}
724
+        echo "DOMAIN = ${GOGS_DOMAIN_NAME}" >> ${GOGS_CONFIG_FILE}
725
+        echo "ROOT_URL = https://$GOGS_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE}
723 726
     else
724 727
         echo "DOMAIN = ${GIT_ONION_HOSTNAME}" >> ${GOGS_CONFIG_FILE}
725
-        echo "ROOT_URL = http://$GIT_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE}
728
+        echo "ROOT_URL = http://$GOGS_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE}
726 729
     fi
727 730
     { echo "HTTP_PORT = ${GOGS_PORT}";
728 731
       echo "SSH_PORT = $SSH_PORT";
729 732
       echo 'SSH_DOMAIN = %(DOMAIN)s';
730
-      echo "CERT_FILE = /etc/ssl/certs/${GIT_DOMAIN_NAME}.pem";
731
-      echo "KEY_FILE = /etc/ssl/private/${GIT_DOMAIN_NAME}.key";
733
+      echo "CERT_FILE = /etc/ssl/certs/${GOGS_DOMAIN_NAME}.pem";
734
+      echo "KEY_FILE = /etc/ssl/private/${GOGS_DOMAIN_NAME}.key";
732 735
       echo 'DISABLE_ROUTER_LOG = true';
733 736
       echo '';
734 737
       echo '[session]';
@@ -758,9 +761,9 @@ function install_gogs {
758 761
     systemctl restart gogs
759 762
 
760 763
     if ! grep -q "gogs domain:" "${COMPLETION_FILE}"; then
761
-        echo "gogs domain:${GIT_DOMAIN_NAME}" >> "${COMPLETION_FILE}"
764
+        echo "gogs domain:${GOGS_DOMAIN_NAME}" >> "${COMPLETION_FILE}"
762 765
     else
763
-        sed -i "s|gogs domain.*|gogs domain:${GIT_DOMAIN_NAME}|g" "${COMPLETION_FILE}"
766
+        sed -i "s|gogs domain.*|gogs domain:${GOGS_DOMAIN_NAME}|g" "${COMPLETION_FILE}"
764 767
     fi
765 768
 
766 769
     function_check configure_firewall_for_git

+ 4
- 0
src/freedombone-app-htmly 查看文件

@@ -39,6 +39,10 @@ HTMLY_COMMIT='bf5fe9486160be4da86d8987d3e5c977e1dc6d32'
39 39
 HTMLY_TITLE="My Blog"
40 40
 HTMLY_SUBTITLE="Another ${PROJECT_NAME} blog"
41 41
 
42
+HTMLY_SHORT_DESCRIPTION=$'HTMLy'
43
+HTMLY_DESCRIPTION=$'HTMLy databaseless blogging'
44
+HTMLY_MOBILE_APP_URL=
45
+
42 46
 htmly_variables=(HTMLY_REPO
43 47
                  HTMLY_DOMAIN_NAME
44 48
                  HTMLY_CODE

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

@@ -41,6 +41,10 @@ HUBZILLA_ADDONS_REPO="https://github.com/redmatrix/hubzilla-addons.git"
41 41
 HUBZILLA_ADDONS_COMMIT='be9dcd044b9326c3bd9301d7c4b375a2c2f54663'
42 42
 HUBZILLA_ADMIN_PASSWORD=
43 43
 
44
+HUBZILLA_SHORT_DESCRIPTION=$'Hubzilla'
45
+HUBZILLA_DESCRIPTION=$'Hubzilla'
46
+HUBZILLA_MOBILE_APP_URL=
47
+
44 48
 hubzilla_variables=(ONION_ONLY
45 49
                     HUBZILLA_DOMAIN_NAME
46 50
                     HUBZILLA_CODE

+ 4
- 0
src/freedombone-app-icecast 查看文件

@@ -44,6 +44,10 @@ ICECAST_DIR=/icestream
44 44
 ICECAST_PLAYLIST_FILE=/etc/ices2/playlist.txt
45 45
 ICECAST_LOGIN_TEXT=$"Icecast login"
46 46
 
47
+ICECAST_SHORT_DESCRIPTION=$'Icecast'
48
+ICECAST_DESCRIPTION=$'Icecast'
49
+ICECAST_MOBILE_APP_URL=
50
+
47 51
 icecast_variables=(MY_USERNAME
48 52
                    MY_EMAIL_ADDRESS
49 53
                    ONION_ONLY

+ 4
- 0
src/freedombone-app-irc 查看文件

@@ -41,6 +41,10 @@ IRC_PASSWORD=
41 41
 # Number of entries for the bouncer to buffer
42 42
 IRC_BUFFER_LENGTH=300
43 43
 
44
+IRC_SHORT_DESCRIPTION=$'IRC'
45
+IRC_DESCRIPTION=$'IRC'
46
+IRC_MOBILE_APP_URL='https://f-droid.org/packages/org.yaaic'
47
+
44 48
 irc_variables=(MY_USERNAME
45 49
                MY_NAME
46 50
                IRC_PORT

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

@@ -44,6 +44,10 @@ JITSI_DOMAIN_NAME=
44 44
 JITSI_CODE=
45 45
 JITSI_ONION_HOSTNAME=
46 46
 
47
+JITSI_SHORT_DESCRIPTION=$'Jitsi'
48
+JITSI_DESCRIPTION=$'Jitsi'
49
+JITSI_MOBILE_APP_URL=
50
+
47 51
 jitsi_variables=(ONION_ONLY
48 52
                  JITSI_DOMAIN_NAME
49 53
                  JITSI_ONION_HOSTNAME

+ 3
- 0
src/freedombone-app-kanboard 查看文件

@@ -38,6 +38,9 @@ KANBOARD_REPO="https://github.com/kanboard/kanboard"
38 38
 KANBOARD_COMMIT='7a6b1bc3da0af442e02b5a2dc430a4ded8e7c4ee'
39 39
 KANBOARD_ADMIN_PASSWORD=
40 40
 
41
+KANBOARD_SHORT_DESCRIPTION=$'Kanboard'
42
+KANBOARD_DESCRIPTION=$'Kanboard kanban'
43
+KANBOARD_MOBILE_APP_URL=
41 44
 
42 45
 kanboard_variables=(ONION_ONLY
43 46
                     KANBOARD_DOMAIN_NAME

+ 4
- 0
src/freedombone-app-koel 查看文件

@@ -40,6 +40,10 @@ KOEL_REPO="https://github.com/phanan/koel"
40 40
 KOEL_COMMIT='8e9b021aa09f2b1460977bdd52fff14ea2bc1607'
41 41
 KOEL_ADMIN_PASSWORD=
42 42
 
43
+KOEL_SHORT_DESCRIPTION=$'Koel music'
44
+KOEL_DESCRIPTION=$'Koel music player'
45
+KOEL_MOBILE_APP_URL=
46
+
43 47
 koel_variables=(ONION_ONLY
44 48
                 KOEL_DOMAIN_NAME
45 49
                 KOEL_CODE

+ 4
- 0
src/freedombone-app-lychee 查看文件

@@ -37,6 +37,10 @@ LYCHEE_ONION_PORT=8105
37 37
 LYCHEE_REPO="https://github.com/electerious/Lychee"
38 38
 LYCHEE_COMMIT='27f207dcbac8488629ffc3b5a9cac78ae123bee9'
39 39
 
40
+LYCHEE_SHORT_DESCRIPTION=$'Lychee photos'
41
+LYCHEE_DESCRIPTION=$'Lychee photos'
42
+LYCHEE_MOBILE_APP_URL=
43
+
40 44
 lychee_variables=(LYCHEE_REPO
41 45
                   LYCHEE_DOMAIN_NAME
42 46
                   LYCHEE_CODE

+ 4
- 0
src/freedombone-app-mailpile 查看文件

@@ -38,6 +38,10 @@ MAILPILE_REPO="https://github.com/mailpile/Mailpile"
38 38
 MAILPILE_COMMIT='4f28f1bb55b3b9985f22ab6372d539b1087482dd'
39 39
 MAILPILE_PORT=33411
40 40
 
41
+MAILPILE_SHORT_DESCRIPTION=$'Mailpile'
42
+MAILPILE_DESCRIPTION=$'Mailpile email client'
43
+MAILPILE_MOBILE_APP_URL=
44
+
41 45
 mailpile_variables=(MAILPILE_REPO
42 46
                     MAILPILE_DOMAIN_NAME
43 47
                     MAILPILE_CODE

+ 4
- 0
src/freedombone-app-matrix 查看文件

@@ -53,6 +53,10 @@ REPORT_STATS="no"
53 53
 MATRIX_SECRET=
54 54
 MATRIX_EXPIRE_MONTHS=1
55 55
 
56
+MATRIX_SHORT_DESCRIPTION=$'Matrix chat'
57
+MATRIX_DESCRIPTION=$'Matrix chat'
58
+MATRIX_MOBILE_APP_URL='https://f-droid.org/packages/im.vector.alpha'
59
+
56 60
 matrix_variables=(ONION_ONLY
57 61
                   MY_USERNAME
58 62
                   MATRIX_SECRET

+ 5
- 1
src/freedombone-app-mediagoblin 查看文件

@@ -35,11 +35,15 @@ MEDIAGOBLIN_DOMAIN_NAME=
35 35
 MEDIAGOBLIN_ADMIN_PASSWORD=
36 36
 MEDIAGOBLIN_CODE=
37 37
 MEDIAGOBLIN_ONION_PORT=8108
38
-MEDIAGOBLIN_REPO="http://git.savannah.gnu.org/r/mediagoblin.git"
38
+MEDIAGOBLIN_REPO="https://git.savannah.gnu.org/git/mediagoblin.git"
39 39
 MEDIAGOBLIN_COMMIT='c4d3293dfa4076719e60fe9e052add07426f9a9a'
40 40
 MEDIAGOBLIN_BASE_DIR=/var/www/mediagoblin.local/htdocs
41 41
 MEDIAGOBLIN_PORT=6543
42 42
 
43
+MEDIAGOBLIN_SHORT_DESCRIPTION=$'Mediagoblin'
44
+MEDIAGOBLIN_DESCRIPTION=$'Mediagoblin'
45
+MEDIAGOBLIN_MOBILE_APP_URL=
46
+
43 47
 mediagoblin_variables=(ONION_ONLY
44 48
                        MY_USERNAME
45 49
                        MEDIAGOBLIN_DOMAIN_NAME

+ 4
- 0
src/freedombone-app-movim 查看文件

@@ -39,6 +39,10 @@ MOVIM_COMMIT='6142c2033b7695448516a67690324a3bde048260'
39 39
 MOVIM_ADMIN_PASSWORD=
40 40
 MOVIM_DAEMON_PORT=8880
41 41
 
42
+MOVIM_SHORT_DESCRIPTION=$'Movim'
43
+MOVIM_DESCRIPTION=$'Movim'
44
+MOVIM_MOBILE_APP_URL='https://f-droid.org/packages/com.movim.movim'
45
+
42 46
 movim_variables=(ONION_ONLY
43 47
                  MOVIM_DOMAIN_NAME
44 48
                  MOVIM_CODE

+ 4
- 0
src/freedombone-app-mumble 查看文件

@@ -40,6 +40,10 @@ MUMBLE_PORT=64738
40 40
 MUMBLE_DATABASE="mumble-server.sqlite"
41 41
 MUMBLE_CONFIG_FILE="mumble-server.ini"
42 42
 
43
+MUMBLE_SHORT_DESCRIPTION=$'Mumble'
44
+MUMBLE_DESCRIPTION=$'Mumble'
45
+MUMBLE_MOBILE_APP_URL='https://f-droid.org/packages/com.morlunk.mumbleclient'
46
+
43 47
 mumble_variables=(MY_USERNAME
44 48
                   DEFAULT_DOMAIN_NAME
45 49
                   MUMBLE_PORT

+ 4
- 0
src/freedombone-app-nextcloud 查看文件

@@ -42,6 +42,10 @@ NEXTCLOUD_COMMIT='edd5712c6ead5b09fa4f996cfda66fc4e18ba597'
42 42
 NEXTCLOUD_ADMIN_PASSWORD=
43 43
 NEXTCLOUD_SERVER_SIDE_ENCRYPTION=1
44 44
 
45
+NEXTCLOUD_SHORT_DESCRIPTION=$'NextCloud'
46
+NEXTCLOUD_DESCRIPTION=$'NextCloud'
47
+NEXTCLOUD_MOBILE_APP_URL='https://f-droid.org/packages/com.nextcloud.client'
48
+
45 49
 nextcloud_variables=(ONION_ONLY
46 50
                      NEXTCLOUD_DOMAIN_NAME
47 51
                      NEXTCLOUD_CODE

+ 4
- 0
src/freedombone-app-peertube 查看文件

@@ -44,6 +44,10 @@ PEERTUBE_PORT=9004
44 44
 MESH_PEERTUBE_PORT=8500
45 45
 PEERTUBE_DIR=/etc/peertube
46 46
 
47
+PEERTUBE_SHORT_DESCRIPTION=$'PeerTube'
48
+PEERTUBE_DESCRIPTION=$'PeerTube'
49
+PEERTUBE_MOBILE_APP_URL=
50
+
47 51
 peertube_variables=(PEERTUBE_DOMAIN_NAME
48 52
                     PEERTUBE_CODE
49 53
                     PEERTUBE_ADMIN_PASSWORD

+ 4
- 0
src/freedombone-app-pleroma 查看文件

@@ -51,6 +51,10 @@ PLEROMA_EXPIRE_MONTHS=3
51 51
 pleroma_expire_posts_script=/usr/bin/pleroma-expire-posts
52 52
 blocking_script_file=/usr/bin/pleroma-blocking
53 53
 
54
+PLEROMA_SHORT_DESCRIPTION=$'Pleroma'
55
+PLEROMA_DESCRIPTION=$'Pleroma federated microblogging'
56
+PLEROMA_MOBILE_APP_URL='https://f-droid.org/packages/com.keylesspalace.tusky'
57
+
54 58
 pleroma_variables=(ONION_ONLY
55 59
                    PLEROMA_DOMAIN_NAME
56 60
                    PLEROMA_CODE

+ 4
- 0
src/freedombone-app-postactiv 查看文件

@@ -45,6 +45,10 @@ POSTACTIV_TITLE='PostActiv'
45 45
 # Number of months after which posts expire
46 46
 POSTACTIV_EXPIRE_MONTHS=3
47 47
 
48
+POSTACTIV_SHORT_DESCRIPTION=$'PostActiv'
49
+POSTACTIV_DESCRIPTION=$'PostActiv federated microblogging'
50
+POSTACTIV_MOBILE_APP_URL='https://f-droid.org/packages/org.mariotaku.twidere/'
51
+
48 52
 postactiv_variables=(ONION_ONLY
49 53
                      POSTACTIV_DOMAIN_NAME
50 54
                      POSTACTIV_CODE

+ 4
- 0
src/freedombone-app-privatebin 查看文件

@@ -38,6 +38,10 @@ PRIVATEBIN_REPO="https://github.com/PrivateBin/PrivateBin"
38 38
 PRIVATEBIN_COMMIT='9c132cd839fd5e91da18e4a1e8ebef64fce605fb'
39 39
 PRIVATEBIN_ADMIN_PASSWORD=
40 40
 
41
+PRIVATEBIN_SHORT_DESCRIPTION=$'PrivateBin'
42
+PRIVATEBIN_DESCRIPTION=$'PrivateBin zero knowledge pastebin'
43
+PRIVATEBIN_MOBILE_APP_URL=
44
+
41 45
 privatebin_variables=(ONION_ONLY
42 46
                       PRIVATEBIN_DOMAIN_NAME
43 47
                       PRIVATEBIN_CODE

+ 4
- 0
src/freedombone-app-rocketchat 查看文件

@@ -36,6 +36,10 @@ ROCKETCHAT_CODE=
36 36
 ROCKETCHAT_ONION_PORT=9722
37 37
 ROCKETCHAT_PORT_INTERNAL=3000
38 38
 
39
+ROCKETCHAT_SHORT_DESCRIPTION=$'Rocketchat'
40
+ROCKETCHAT_DESCRIPTION=$'Rocketchat'
41
+ROCKETCHAT_MOBILE_APP_URL=
42
+
39 43
 rocketchat_variables=(ONION_ONLY
40 44
                       ROCKETCHAT_DOMAIN_NAME
41 45
                       ROCKETCHAT_CODE

+ 4
- 0
src/freedombone-app-syncthing 查看文件

@@ -40,6 +40,10 @@ SYNCTHING_PORT=22000
40 40
 SYNCTHING_SHARED_DATA=/var/lib/syncthing/SyncShared
41 41
 SYNCTHING_USER_IDS_FILE='.syncthingids'
42 42
 
43
+SYNCTHING_SHORT_DESCRIPTION=$'Syncthing'
44
+SYNCTHING_DESCRIPTION=$'Syncthing file synchronization'
45
+SYNCTHING_MOBILE_APP_URL='https://f-droid.org/packages/com.nutomic.syncthingandroid'
46
+
43 47
 syncthing_variables=(SYNCTHING_ID
44 48
                      SYNCTHING_CONFIG_PATH
45 49
                      SYNCTHING_CONFIG_FILE

+ 4
- 0
src/freedombone-app-turtl 查看文件

@@ -48,6 +48,10 @@ TURTL_BASE_DIR=/etc/turtl
48 48
 TURTL_SIGNUP_STRING='Signup a new user'
49 49
 turtl_users_file=$TURTL_BASE_DIR/api/controllers/users.lisp
50 50
 
51
+TURTL_SHORT_DESCRIPTION=$'Turtl'
52
+TURTL_DESCRIPTION=$'Turtl notes'
53
+TURTL_MOBILE_APP_URL=
54
+
51 55
 turtl_variables=(ONION_ONLY
52 56
                  DEFAULT_DOMAIN_NAME
53 57
                  TURTL_DOMAIN_NAME

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

@@ -53,6 +53,10 @@ prosody_modules_filename='prosody-modules-20180322.tar.gz'
53 53
 prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072'
54 54
 xmpp_encryption_warning=$"For security reasons, OMEMO or PGP encryption is required for conversations on this server."
55 55
 
56
+XMPP_SHORT_DESCRIPTION=$'XMPP chat'
57
+XMPP_DESCRIPTION=$'XMPP chat'
58
+XMPP_MOBILE_APP_URL='https://f-droid.org/packages/eu.siacs.conversations'
59
+
56 60
 xmpp_variables=(ONION_ONLY
57 61
                 INSTALLED_WITHIN_DOCKER
58 62
                 XMPP_CIPHERS

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

@@ -74,8 +74,8 @@ GNUSOCIAL_DOMAIN_NAME=
74 74
 GNUSOCIAL_CODE=
75 75
 GNUSOCIAL_WELCOME_MESSAGE=$"<h1>Welcome to \$GNUSOCIAL_DOMAIN_NAME  a federated social network</h1><p>Another $PROJECT_NAME site</p>"
76 76
 GNUSOCIAL_BACKGROUND_IMAGE_URL=
77
-GIT_DOMAIN_NAME=
78
-GIT_CODE=
77
+GOGS_DOMAIN_NAME=
78
+GOGS_CODE=
79 79
 USB_DRIVE=/dev/sdb1
80 80
 HWRNG_TYPE=
81 81
 ENABLE_SOCIAL_KEY_MANAGEMENT=

+ 4
- 0
src/freedombone-syncthing 查看文件

@@ -55,6 +55,10 @@ SYNCTHING_UPDATE_FILE='.syncthing-update'
55 55
 CHANGED=
56 56
 TEMP_IDS_FILE=/root/.synthingids
57 57
 
58
+SYNCTHING_SHORT_DESCRIPTION=$'File Synchronization'
59
+SYNCTHING_DESCRIPTION=$'File Synchronization'
60
+SYNCTHING_MOBILE_APP_URL='https://f-droid.org/packages/com.nutomic.syncthingandroid'
61
+
58 62
 function remove_user_syncthing {
59 63
     remove_username="$1"
60 64
 

+ 5
- 0
src/freedombone-template 查看文件

@@ -280,6 +280,11 @@ if [ $app_daemon ]; then
280 280
     fi
281 281
 fi
282 282
 echo ''
283
+echo $'# These parameters are used by the FreedomBox mobile app'
284
+echo "${app_name_upper}_SHORT_DESCRIPTION="
285
+echo "${app_name_upper}_DESCRIPTION="
286
+echo "${app_name_upper}_MOBILE_APP_URL="
287
+echo ''
283 288
 echo "${app_name}_variables=(ONION_ONLY"
284 289
 echo "                       ${app_name_upper}_DOMAIN_NAME"
285 290
 echo "                       ${app_name_upper}_CODE"

+ 8
- 0
src/freedombone-upgrade 查看文件

@@ -111,6 +111,7 @@ if [ -d "$PROJECT_DIR" ]; then
111 111
         rm /etc/exim4/exim4.conf.template.bak*
112 112
         email_update_onion_domain
113 113
         prevent_mail_process_overrun
114
+        android_update_apps yes
114 115
         #defrag_filesystem
115 116
 
116 117
         # reinstall tor from backports
@@ -125,6 +126,13 @@ fi
125 126
 # If logging was left on then turn it off
126 127
 ${PROJECT_NAME}-logging off
127 128
 
129
+# This is a hack to fix nginx failures which happen sometimes
130
+# when matrix is installed
131
+if [ -d /etc/matrix ]; then
132
+    systemctl restart matrix
133
+    systemctl restart nginx
134
+fi
135
+
128 136
 # upgrading file prevents USB canary from activating
129 137
 if [ -f /tmp/.upgrading ]; then
130 138
     rm /tmp/.upgrading

+ 167
- 0
src/freedombone-utils-android 查看文件

@@ -0,0 +1,167 @@
1
+#!/bin/bash
2
+#  _____               _           _
3
+# |   __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
4
+# |   __|  _| -_| -_| . | . |     | . | . |   | -_|
5
+# |__|  |_| |___|___|___|___|_|_|_|___|___|_|_|___|
6
+#
7
+#                              Freedom in the Cloud
8
+#
9
+# Integration with the FreedomBox android app
10
+#
11
+# License
12
+# =======
13
+#
14
+# Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
15
+#
16
+# This program is free software: you can redistribute it and/or modify
17
+# it under the terms of the GNU Affero General Public License as published by
18
+# the Free Software Foundation, either version 3 of the License, or
19
+# (at your option) any later version.
20
+#
21
+# This program is distributed in the hope that it will be useful,
22
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
23
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
+# GNU Affero General Public License for more details.
25
+#
26
+# You should have received a copy of the GNU Affero General Public License
27
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
28
+
29
+function android_update_apps {
30
+    if [ "$1" ]; then
31
+        detect_installable_apps
32
+    fi
33
+
34
+    local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local
35
+    plinth_api="/var/www/${local_hostname}/htdocs/plinth/api.json"
36
+
37
+    # Create a self-signed cert if needed
38
+    # The FreedomBox app assumes a self-signed cert
39
+    if [ ! -f "/etc/ssl/certs/${local_hostname}.crt" ]; then
40
+        install_web_local_user_interface
41
+        systemctl restart nginx
42
+    fi
43
+
44
+    if [ ! -d "/var/www/${local_hostname}/htdocs/plinth" ]; then
45
+        mkdir -p "/var/www/${local_hostname}/htdocs/plinth"
46
+    fi
47
+    if [ ! -d "/var/www/${local_hostname}/htdocs/icons" ]; then
48
+        mkdir -p "/var/www/${local_hostname}/htdocs/icons"
49
+    fi
50
+
51
+    echo '{' > "$plinth_api"
52
+    echo '  "shortcuts": [' >> "$plinth_api"
53
+
54
+    android_ctr=0
55
+    app_index=0
56
+    # shellcheck disable=SC2068,SC2034
57
+    for a in ${APPS_INSTALLED[@]}
58
+    do
59
+        app_name=${APPS_INSTALLED_NAMES[$app_index]}
60
+        if [ "$app_name" ]; then
61
+            app_filename="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"
62
+            if [ -f "$app_filename" ]; then
63
+                # get the icon for the app
64
+                icon_filename="/usr/share/${PROJECT_NAME}/android-app/${app_name}.png"
65
+                if [ -f "$icon_filename" ]; then
66
+                    cp "$icon_filename" "/var/www/${local_hostname}/htdocs/icons/${app_name}.png"
67
+                else
68
+                    icon_filename=
69
+                fi
70
+
71
+                app_name_upper=$(echo "$app_name" | awk '{print toupper($0)}')
72
+                SHORT_DESCRIPTION=
73
+                DESCRIPTION=
74
+                MOBILE_APP_URL=
75
+
76
+                if ! grep -q "${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then
77
+                    app_index=$((app_index+1))
78
+                    continue
79
+                fi
80
+                if grep -q "#${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then
81
+                    app_index=$((app_index+1))
82
+                    continue
83
+                fi
84
+                SHORT_DESCRIPTION="$(grep "${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
85
+
86
+                if grep -q "${app_name_upper}_DESCRIPTION=" "$app_filename"; then
87
+                    DESCRIPTION="$(grep "${app_name_upper}_DESCRIPTION=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
88
+                fi
89
+                if grep -q "${app_name_upper}_MOBILE_APP_URL=" "$app_filename"; then
90
+                    MOBILE_APP_URL="$(grep "${app_name_upper}_MOBILE_APP_URL=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')"
91
+                fi
92
+
93
+                if [ $android_ctr -gt 0 ]; then
94
+                    echo ',' >> "$plinth_api"
95
+                fi
96
+
97
+                { echo '    {';
98
+                  echo "      \"name\": \"${app_name}\",";
99
+                  echo "      \"short_description\": \"$SHORT_DESCRIPTION\",";
100
+                  echo "      \"description\": [";
101
+                  echo "        \"$DESCRIPTION\"";
102
+                  echo '      ],';
103
+                  echo "      \"icon_url\": \"/icons/${app_name}.png\",";
104
+                  echo "      \"clients\": ["; } >> "$plinth_api"
105
+
106
+                read_config_param "${app_name_upper}_DOMAIN_NAME"
107
+                test_domain_name="${app_name_upper}_DOMAIN_NAME"
108
+                domain_name=${!test_domain_name}
109
+                if [ "$domain_name" ]; then
110
+                    if [[ "$domain_name" != *'.onion' ]]; then
111
+                        domain_name="https://${!test_domain_name}"
112
+                    else
113
+                        domain_name="http://${!test_domain_name}"
114
+                    fi
115
+                fi
116
+                if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then
117
+                    { echo '        {';
118
+                      echo "          \"name\": \"${app_name}\",";
119
+                      echo "          \"platforms\": [";
120
+                      echo '            {';
121
+                      echo '              "type": "web",';
122
+                      echo "              \"url\": \"$domain_name\"";
123
+                      echo -n '            }'; } >> "$plinth_api"
124
+                fi
125
+
126
+                if [ "$MOBILE_APP_URL" ]; then
127
+                    if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then
128
+                        echo ',' >> "$plinth_api"
129
+                    else
130
+                        { echo '        {';
131
+                          echo "          \"name\": \"${app_name}\",";
132
+                          echo "          \"platforms\": ["; } >> "$plinth_api"
133
+                    fi
134
+                    store_name='f-droid'
135
+                    if [[ "$MOBILE_APP_URL" == *'google'* ]]; then
136
+                        store_name='google-play'
137
+                    fi
138
+                    { echo '            {';
139
+                      echo '              "type": "store",';
140
+                      echo '              "os": "android",';
141
+                      echo "              \"store_name\": \"$store_name\",";
142
+                      echo "              \"url\": \"$MOBILE_APP_URL\"";
143
+                      echo '            }'; } >> "$plinth_api"
144
+                else
145
+                    echo '' >> "$plinth_api"
146
+                fi
147
+
148
+                { echo '          ]';
149
+                  echo '        }';
150
+                  echo '      ]';
151
+                  echo -n '    }'; } >> "$plinth_api"
152
+
153
+                android_ctr=$((android_ctr+1))
154
+            fi
155
+        fi
156
+        app_index=$((app_index+1))
157
+    done
158
+
159
+    { echo '';
160
+      echo '  ]';
161
+      echo '}'; } >> "$plinth_api"
162
+
163
+    chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/plinth"
164
+    chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/icons"
165
+}
166
+
167
+# NOTE: deliberately no exit 0

+ 28
- 1
src/freedombone-utils-avahi 查看文件

@@ -111,7 +111,7 @@ function mesh_avahi {
111 111
     WATCHDOG_SCRIPT_NAME="keepon"
112 112
     { echo '';
113 113
       echo '# keep avahi daemon running';
114
-      echo "AVAHI_RUNNING=\$(pgrep avahi-daemon > /dev/null && echo Running)";
114
+      echo "AVAHI_RUNNING=\$(systemctl is-active avahi-daemon >/dev/null 2>&1 && echo Running)";
115 115
       echo "if [ ! \$AVAHI_RUNNING ]; then";
116 116
       echo '  systemctl start avahi-daemon';
117 117
       echo "  echo -n \$CURRENT_DATE >> \$LOGFILE";
@@ -120,6 +120,33 @@ function mesh_avahi {
120 120
     chmod +x "$rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME"
121 121
 }
122 122
 
123
+function keep_avahi_running {
124
+    WATCHDOG_SCRIPT_NAME="keepon"
125
+
126
+    if grep -q "avahi daemon" "/usr/bin/$WATCHDOG_SCRIPT_NAME"; then
127
+        return
128
+    fi
129
+
130
+    { echo '';
131
+      echo '# keep avahi daemon running';
132
+      echo "AVAHI_RUNNING=\$(systemctl is-active avahi-daemon >/dev/null 2>&1 && echo Running)";
133
+      echo "if [ ! \$AVAHI_RUNNING ]; then";
134
+      echo '  systemctl start avahi-daemon';
135
+      echo "  echo -n \$CURRENT_DATE >> \$LOGFILE";
136
+      echo "  echo \" Avahi daemon restarted\" >> \$LOGFILE";
137
+      echo 'fi';
138
+      echo '# End of avahi'; } >> "/usr/bin/$WATCHDOG_SCRIPT_NAME"
139
+    chmod +x "/usr/bin/$WATCHDOG_SCRIPT_NAME"
140
+
141
+    # This is a bit of a hack to ensure that avahi services get broadcast
142
+    # Without this some other systems may not be able to see the server
143
+    { echo '#!/bin/bash';
144
+      echo 'systemctl restart avahi-daemon'; } > /usr/bin/restartavahi
145
+    chmod +x /usr/bin/restartavahi
146
+
147
+    cron_add_mins 10 /usr/bin/restartavahi
148
+}
149
+
123 150
 function install_avahi {
124 151
     if [ "$INSTALLING_MESH" ]; then
125 152
         mesh_avahi

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

@@ -211,7 +211,7 @@ function set_default_onion_domains {
211 211
     BLUDIT_DOMAIN_NAME='bludit.local'
212 212
     DOKUWIKI_DOMAIN_NAME='dokuwiki.local'
213 213
     DEFAULT_DOMAIN_NAME="${LOCAL_NAME}.local"
214
-    GIT_DOMAIN_NAME='gogs.local'
214
+    GOGS_DOMAIN_NAME='gogs.local'
215 215
 }
216 216
 
217 217
 function create_avahi_onion_domains {
@@ -229,7 +229,7 @@ function create_avahi_onion_domains {
229 229
         function_check create_avahi_service
230 230
         create_avahi_service blog http tcp "$HTMLY_ONION_PORT"
231 231
     fi
232
-    if [ $GIT_DOMAIN_NAME ]; then
232
+    if [ $GOGS_DOMAIN_NAME ]; then
233 233
         function_check create_avahi_service
234 234
         create_avahi_service git http tcp "$GIT_ONION_PORT"
235 235
     fi

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

@@ -584,7 +584,7 @@ function add_users_after_install {
584 584
         if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
585 585
             if [[ "$USERNAME" != "$ADMIN_USERNAME" ]]; then
586 586
                 if [[ $(user_added_to_app "${USERNAME}" "${app_name}") == "0" ]]; then
587
-                    valstr=$"Login for user ${USERNAME}="
587
+                    #valstr=$"Login for user ${USERNAME}="
588 588
                     app_password="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
589 589
                     "add_user_${app_name}" "${USERNAME}" "${app_password}"
590 590
                     echo "${app_name}_${USERNAME}" >> "$APP_USERS_FILE"

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

@@ -1055,6 +1055,9 @@ function setup_utils {
1055 1055
     function_check install_avahi
1056 1056
     install_avahi
1057 1057
 
1058
+    function_check keep_avahi_running
1059
+    keep_avahi_running
1060
+
1058 1061
     function_check create_avahi_onion_domains
1059 1062
     create_avahi_onion_domains
1060 1063
 

+ 72
- 7
src/freedombone-utils-web 查看文件

@@ -1143,23 +1143,88 @@ function install_web_local_user_interface {
1143 1143
     # similar to Plinth or the yunohost admin interface
1144 1144
     local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local
1145 1145
 
1146
-    mkdir -p "/var/www/${local_hostname}/htdocs"
1146
+    if [ ! -d "/var/www/${local_hostname}/htdocs" ]; then
1147
+        mkdir -p "/var/www/${local_hostname}/htdocs"
1148
+    fi
1149
+
1147 1150
     { echo '<html>';
1148 1151
       echo '  <body>';
1149
-      echo "  This is a test on $local_hostname";
1152
+      echo "  This is a test on ${local_hostname}";
1150 1153
       echo '  </body>';
1151 1154
       echo '</html>'; } > "/var/www/${local_hostname}/htdocs/index.html"
1152
-    chown -R www-data:www-data "/var/www/${local_hostname}/htdocs"
1153 1155
 
1154 1156
     nginx_file=/etc/nginx/sites-available/$local_hostname
1155 1157
     { echo 'server {';
1156
-      echo '  listen 80;';
1157
-      echo '  listen [::]:80;';
1158
+      echo '  listen 80 default_server;';
1159
+      echo '  #listen [::]:80;';
1158 1160
       echo "  server_name ${local_hostname};";
1159 1161
       echo "  root /var/www/${local_hostname}/htdocs;";
1160 1162
       echo '  index index.html;';
1161
-      echo '}'; } > "$nginx_file"
1162
-    nginx_ensite "$local_hostname"
1163
+      echo '';
1164
+      echo '  access_log /dev/null;';
1165
+      echo '  error_log /dev/null;';
1166
+      echo '';
1167
+      echo '  location /icons {';
1168
+      echo '    autoindex on;';
1169
+      echo '    break;';
1170
+      echo '  }';
1171
+      echo '';
1172
+      echo '  rewrite ^/plinth/(.*)$ /api.json last;';
1173
+      echo '';
1174
+      echo '  location / {';
1175
+      echo "    root /var/www/${local_hostname}/htdocs/plinth;";
1176
+      echo '    index api.json /api.json;';
1177
+      echo "    error_page 405 = \$uri;";
1178
+      echo '  }';
1179
+      echo '}';
1180
+      echo '';
1181
+      echo 'server {';
1182
+      echo '  listen 443 default_server ssl;';
1183
+      echo '  #listen [::]:443 ssl;';
1184
+      echo "  server_name ${local_hostname};";
1185
+      echo "  root /var/www/${local_hostname}/htdocs;";
1186
+      echo '  index index.html;';
1187
+      echo '';
1188
+      echo '  access_log /dev/null;';
1189
+      echo '  error_log /dev/null;';
1190
+      echo ''; } > "$nginx_file"
1191
+
1192
+    nginx_ssl "${local_hostname}"
1193
+    nginx_security_options "${local_hostname}"
1194
+
1195
+    { echo '  add_header Strict-Transport-Security max-age=0;';
1196
+      echo '';
1197
+      echo '  location /icons {';
1198
+      echo '    autoindex on;';
1199
+      echo '    break;';
1200
+      echo '  }';
1201
+      echo '';
1202
+      echo '  rewrite ^/plinth/(.*)$ /api.json last;';
1203
+      echo '';
1204
+      echo '  location / {';
1205
+      echo "    root /var/www/${local_hostname}/htdocs/plinth;";
1206
+      echo '    index api.json /api.json;';
1207
+      echo "    error_page 405 = \$uri;";
1208
+      echo '  }';
1209
+      echo '}'; } >> "$nginx_file"
1210
+
1211
+    if [ ! -f "/etc/ssl/certs/${local_hostname}.crt" ]; then
1212
+        "${PROJECT_NAME}-addcert" -h "${local_hostname}" --dhkey "${DH_KEYLENGTH}"
1213
+    fi
1214
+
1215
+    sed -i "s|ssl_certificate .*|ssl_certificate /etc/ssl/certs/${local_hostname}.crt;|g" "$nginx_file"
1216
+    sed -i "s|ssl_certificate_key .*|ssl_certificate_key /etc/ssl/private/${local_hostname}.key;|g" "$nginx_file"
1217
+
1218
+    nginx_ensite "${local_hostname}"
1219
+
1220
+    # Compatibility with FreedomBox android app
1221
+    # The installed apps get published to a json file called api.json
1222
+    # in this directory
1223
+    if [ ! -d "/var/www/${local_hostname}/htdocs/plinth" ]; then
1224
+        mkdir -p "/var/www/${local_hostname}/htdocs/plinth"
1225
+    fi
1226
+
1227
+    chown -R www-data:www-data "/var/www/${local_hostname}/htdocs"
1163 1228
 }
1164 1229
 
1165 1230
 # NOTE: deliberately no exit 0

+ 33
- 127
website/EN/app_dlna.html 查看文件

@@ -3,33 +3,26 @@
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
-<!-- 2016-11-12 Sat 20:17 -->
7
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
8
-<meta name="viewport" content="width=device-width, initial-scale=1" />
9 6
 <title></title>
10
-<meta name="generator" content="Org mode" />
11
-<meta name="author" content="Bob Mottram" />
12
-<meta name="description" content="How to use DLNA"
7
+<!-- 2018-05-25 Fri 23:15 -->
8
+<meta  http-equiv="Content-Type" content="text/html;charset=utf-8" />
9
+<meta  name="generator" content="Org-mode" />
10
+<meta  name="author" content="Bob Mottram" />
11
+<meta  name="description" content="How to use DLNA"
13 12
  />
14
-<meta name="keywords" content="freedombone, dlna" />
13
+<meta  name="keywords" content="freedombone, dlna" />
15 14
 <style type="text/css">
16 15
  <!--/*--><![CDATA[/*><!--*/
17
-  .title  { text-align: center;
18
-             margin-bottom: .2em; }
19
-  .subtitle { text-align: center;
20
-              font-size: medium;
21
-              font-weight: bold;
22
-              margin-top:0; }
16
+  .title  { text-align: center; }
23 17
   .todo   { font-family: monospace; color: red; }
24
-  .done   { font-family: monospace; color: green; }
25
-  .priority { font-family: monospace; color: orange; }
18
+  .done   { color: green; }
26 19
   .tag    { background-color: #eee; font-family: monospace;
27 20
             padding: 2px; font-size: 80%; font-weight: normal; }
28 21
   .timestamp { color: #bebebe; }
29 22
   .timestamp-kwd { color: #5f9ea0; }
30
-  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
31
-  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
32
-  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
23
+  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
24
+  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
25
+  .center { margin-left: auto; margin-right: auto; text-align: center; }
33 26
   .underline { text-decoration: underline; }
34 27
   #postamble p, #preamble p { font-size: 90%; margin: .2em; }
35 28
   p.verse { margin-left: 3%; }
@@ -56,110 +49,27 @@
56 49
     border: 1px solid black;
57 50
   }
58 51
   pre.src:hover:before { display: inline;}
59
-  /* Languages per Org manual */
60
-  pre.src-asymptote:before { content: 'Asymptote'; }
61
-  pre.src-awk:before { content: 'Awk'; }
62
-  pre.src-C:before { content: 'C'; }
63
-  /* pre.src-C++ doesn't work in CSS */
64
-  pre.src-clojure:before { content: 'Clojure'; }
65
-  pre.src-css:before { content: 'CSS'; }
66
-  pre.src-D:before { content: 'D'; }
67
-  pre.src-ditaa:before { content: 'ditaa'; }
68
-  pre.src-dot:before { content: 'Graphviz'; }
69
-  pre.src-calc:before { content: 'Emacs Calc'; }
52
+  pre.src-sh:before    { content: 'sh'; }
53
+  pre.src-bash:before  { content: 'sh'; }
70 54
   pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
71
-  pre.src-fortran:before { content: 'Fortran'; }
72
-  pre.src-gnuplot:before { content: 'gnuplot'; }
73
-  pre.src-haskell:before { content: 'Haskell'; }
74
-  pre.src-java:before { content: 'Java'; }
75
-  pre.src-js:before { content: 'Javascript'; }
76
-  pre.src-latex:before { content: 'LaTeX'; }
77
-  pre.src-ledger:before { content: 'Ledger'; }
78
-  pre.src-lisp:before { content: 'Lisp'; }
79
-  pre.src-lilypond:before { content: 'Lilypond'; }
80
-  pre.src-lua:before { content: 'Lua'; }
81
-  pre.src-matlab:before { content: 'MATLAB'; }
82
-  pre.src-mscgen:before { content: 'Mscgen'; }
83
-  pre.src-ocaml:before { content: 'Objective Caml'; }
84
-  pre.src-octave:before { content: 'Octave'; }
85
-  pre.src-org:before { content: 'Org mode'; }
86
-  pre.src-oz:before { content: 'OZ'; }
87
-  pre.src-plantuml:before { content: 'Plantuml'; }
88
-  pre.src-processing:before { content: 'Processing.js'; }
89
-  pre.src-python:before { content: 'Python'; }
90
-  pre.src-R:before { content: 'R'; }
91
-  pre.src-ruby:before { content: 'Ruby'; }
92
-  pre.src-sass:before { content: 'Sass'; }
93
-  pre.src-scheme:before { content: 'Scheme'; }
94
-  pre.src-screen:before { content: 'Gnu Screen'; }
95
-  pre.src-sed:before { content: 'Sed'; }
96
-  pre.src-sh:before { content: 'shell'; }
97
-  pre.src-sql:before { content: 'SQL'; }
98
-  pre.src-sqlite:before { content: 'SQLite'; }
99
-  /* additional languages in org.el's org-babel-load-languages alist */
100
-  pre.src-forth:before { content: 'Forth'; }
101
-  pre.src-io:before { content: 'IO'; }
102
-  pre.src-J:before { content: 'J'; }
103
-  pre.src-makefile:before { content: 'Makefile'; }
104
-  pre.src-maxima:before { content: 'Maxima'; }
105
-  pre.src-perl:before { content: 'Perl'; }
106
-  pre.src-picolisp:before { content: 'Pico Lisp'; }
107
-  pre.src-scala:before { content: 'Scala'; }
108
-  pre.src-shell:before { content: 'Shell Script'; }
109
-  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
110
-  /* additional language identifiers per "defun org-babel-execute"
111
-       in ob-*.el */
112
-  pre.src-cpp:before  { content: 'C++'; }
113
-  pre.src-abc:before  { content: 'ABC'; }
114
-  pre.src-coq:before  { content: 'Coq'; }
115
-  pre.src-groovy:before  { content: 'Groovy'; }
116
-  /* additional language identifiers from org-babel-shell-names in
117
-     ob-shell.el: ob-shell is the only babel language using a lambda to put
118
-     the execution function name together. */
119
-  pre.src-bash:before  { content: 'bash'; }
120
-  pre.src-csh:before  { content: 'csh'; }
121
-  pre.src-ash:before  { content: 'ash'; }
122
-  pre.src-dash:before  { content: 'dash'; }
123
-  pre.src-ksh:before  { content: 'ksh'; }
124
-  pre.src-mksh:before  { content: 'mksh'; }
125
-  pre.src-posh:before  { content: 'posh'; }
126
-  /* Additional Emacs modes also supported by the LaTeX listings package */
127
-  pre.src-ada:before { content: 'Ada'; }
128
-  pre.src-asm:before { content: 'Assembler'; }
129
-  pre.src-caml:before { content: 'Caml'; }
130
-  pre.src-delphi:before { content: 'Delphi'; }
131
-  pre.src-html:before { content: 'HTML'; }
132
-  pre.src-idl:before { content: 'IDL'; }
133
-  pre.src-mercury:before { content: 'Mercury'; }
134
-  pre.src-metapost:before { content: 'MetaPost'; }
135
-  pre.src-modula-2:before { content: 'Modula-2'; }
136
-  pre.src-pascal:before { content: 'Pascal'; }
137
-  pre.src-ps:before { content: 'PostScript'; }
138
-  pre.src-prolog:before { content: 'Prolog'; }
139
-  pre.src-simula:before { content: 'Simula'; }
140
-  pre.src-tcl:before { content: 'tcl'; }
141
-  pre.src-tex:before { content: 'TeX'; }
142
-  pre.src-plain-tex:before { content: 'Plain TeX'; }
143
-  pre.src-verilog:before { content: 'Verilog'; }
144
-  pre.src-vhdl:before { content: 'VHDL'; }
145
-  pre.src-xml:before { content: 'XML'; }
146
-  pre.src-nxml:before { content: 'XML'; }
147
-  /* add a generic configuration mode; LaTeX export needs an additional
148
-     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
149
-  pre.src-conf:before { content: 'Configuration File'; }
55
+  pre.src-R:before     { content: 'R'; }
56
+  pre.src-perl:before  { content: 'Perl'; }
57
+  pre.src-java:before  { content: 'Java'; }
58
+  pre.src-sql:before   { content: 'SQL'; }
150 59
 
151 60
   table { border-collapse:collapse; }
152 61
   caption.t-above { caption-side: top; }
153 62
   caption.t-bottom { caption-side: bottom; }
154 63
   td, th { vertical-align:top;  }
155
-  th.org-right  { text-align: center;  }
156
-  th.org-left   { text-align: center;   }
157
-  th.org-center { text-align: center; }
158
-  td.org-right  { text-align: right;  }
159
-  td.org-left   { text-align: left;   }
160
-  td.org-center { text-align: center; }
64
+  th.right  { text-align: center;  }
65
+  th.left   { text-align: center;   }
66
+  th.center { text-align: center; }
67
+  td.right  { text-align: right;  }
68
+  td.left   { text-align: left;   }
69
+  td.center { text-align: center; }
161 70
   dt { font-weight: bold; }
162
-  .footpara { display: inline; }
71
+  .footpara:nth-child(2) { display: inline; }
72
+  .footpara { display: block; }
163 73
   .footdef  { margin-bottom: 1em; }
164 74
   .figure { padding: 1em; }
165 75
   .figure p { text-align: center; }
@@ -179,7 +89,6 @@
179 89
     { font-size: 10px; font-weight: bold; white-space: nowrap; }
180 90
   .org-info-js_search-highlight
181 91
     { background-color: #ffff00; color: #000000; font-weight: bold; }
182
-  .org-svg { width: 90%; }
183 92
   /*]]>*/-->
184 93
 </style>
185 94
 <link rel="stylesheet" type="text/css" href="freedombone.css" />
@@ -235,18 +144,16 @@ for the JavaScript code in this tag.
235 144
 <a name="top" id="top"></a>
236 145
 </div>
237 146
 <div id="content">
238
-<div class="org-center">
147
+<h1 class="title"></h1>
239 148
 
240 149
 <div class="figure">
241
-<p><img src="images/logo.png" alt="logo.png" />
150
+<p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
242 151
 </p>
243 152
 </div>
244
-</div>
245
-
246
-<center>
247
-<h1>DLNA</h1>
248
-</center>
249 153
 
154
+<div id="outline-container-sec-1" class="outline-2">
155
+<h2 id="sec-1">DLNA</h2>
156
+<div class="outline-text-2" id="text-1">
250 157
 <p>
251 158
 An easy way to play music on any mobile device in your home is to use the DLNA service. Copy your music into a directory called "<i>Music</i>" on an unencrypted USB thumb drive and then insert it into a USB socket on the Freedombone system.
252 159
 </p>
@@ -256,6 +163,7 @@ ssh into the system with:
256 163
 </p>
257 164
 
258 165
 <div class="org-src-container">
166
+
259 167
 <pre class="src src-bash">ssh myusername@mydomain.com -p 2222
260 168
 </pre>
261 169
 </div>
@@ -269,13 +177,11 @@ The system will scan the <i>Music</i> directory, which could take a while if the
269 177
 </p>
270 178
 
271 179
 <p>
272
-If you have an Android device then go to F-Droid (if you don't already have it installed then it can be <a href="https://f-droid.org/">downloaded here</a>) and search for <b>ControlDLNA</b>. On running the app you should see a red Debian icon which you can press on, then you may need to select "local". After a few seconds the list of albums or tracks should then appear and you can browse and play them.
273
-</p>
274
-
275
-<p>
276 180
 The DLNA service will only work within your local home network, and isn't remotely accessible from other locations via the internet. That can be both a good and a bad thing. Another consideration is that there are <i>no access controls</i> on DLNA services, so any music or videos on the USB drive will be playable by anyone within your home network.
277 181
 </p>
278 182
 </div>
183
+</div>
184
+</div>
279 185
 <div id="postamble" class="status">
280 186
 
281 187
 <style type="text/css">