diff --git a/Makefile b/Makefile index e99ffc08..075d283a 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ install: mkdir -p ${DESTDIR}${PREFIX}/bin mkdir -p ${DESTDIR}/usr/share/${APP}/base mkdir -p ${DESTDIR}/usr/share/${APP}/apps + mkdir -p ${DESTDIR}/usr/share/${APP}/android-app mkdir -p ${DESTDIR}/usr/share/${APP}/utils mkdir -p ${DESTDIR}/usr/share/${APP}/avatars mkdir -p ${DESTDIR}/etc/${APP} @@ -46,6 +47,7 @@ install: cp man/*.1.gz ${DESTDIR}${PREFIX}/share/man/man1 cp man/${APP}-backup-local.1.gz ${DESTDIR}${PREFIX}/share/man/man1/backup.1.gz cp man/${APP}-restore-local.1.gz ${DESTDIR}${PREFIX}/share/man/man1/restore.1.gz + cp img/android-app/*.png ${DESTDIR}/usr/share/${APP}/android-app chown -R root: /usr/share/${APP} chmod -R +r /usr/share/${APP} # bash -c "./translate install" diff --git a/doc/EN/app_dlna.org b/doc/EN/app_dlna.org index d7825e88..8de472dc 100644 --- a/doc/EN/app_dlna.org +++ b/doc/EN/app_dlna.org @@ -23,6 +23,4 @@ Select *Administrator controls* then *App Settings* then *dlna*. From there you 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. -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. - 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. diff --git a/img/android-app/akaunting.png b/img/android-app/akaunting.png new file mode 100644 index 00000000..80d07db6 Binary files /dev/null and b/img/android-app/akaunting.png differ diff --git a/img/android-app/bludit.png b/img/android-app/bludit.png new file mode 100644 index 00000000..67ad8203 Binary files /dev/null and b/img/android-app/bludit.png differ diff --git a/img/android-app/dlna.png b/img/android-app/dlna.png new file mode 100644 index 00000000..7637d483 Binary files /dev/null and b/img/android-app/dlna.png differ diff --git a/img/android-app/dokuwiki.png b/img/android-app/dokuwiki.png new file mode 100644 index 00000000..365d7d0a Binary files /dev/null and b/img/android-app/dokuwiki.png differ diff --git a/img/android-app/edith.png b/img/android-app/edith.png new file mode 100644 index 00000000..a36334bb Binary files /dev/null and b/img/android-app/edith.png differ diff --git a/img/android-app/etherpad.png b/img/android-app/etherpad.png new file mode 100644 index 00000000..a742d999 Binary files /dev/null and b/img/android-app/etherpad.png differ diff --git a/img/android-app/fedwiki.png b/img/android-app/fedwiki.png new file mode 100644 index 00000000..3eccbe2b Binary files /dev/null and b/img/android-app/fedwiki.png differ diff --git a/img/android-app/friendica.png b/img/android-app/friendica.png new file mode 100644 index 00000000..51e06f70 Binary files /dev/null and b/img/android-app/friendica.png differ diff --git a/img/android-app/gnusocial.png b/img/android-app/gnusocial.png new file mode 100644 index 00000000..6c03bc6d Binary files /dev/null and b/img/android-app/gnusocial.png differ diff --git a/img/android-app/gogs.png b/img/android-app/gogs.png new file mode 100644 index 00000000..34385535 Binary files /dev/null and b/img/android-app/gogs.png differ diff --git a/img/android-app/htmly.png b/img/android-app/htmly.png new file mode 100644 index 00000000..c0f43c77 Binary files /dev/null and b/img/android-app/htmly.png differ diff --git a/img/android-app/hubzilla.png b/img/android-app/hubzilla.png new file mode 100644 index 00000000..844d3588 Binary files /dev/null and b/img/android-app/hubzilla.png differ diff --git a/img/android-app/irc.png b/img/android-app/irc.png new file mode 100644 index 00000000..d2d5d9a8 Binary files /dev/null and b/img/android-app/irc.png differ diff --git a/img/android-app/kanboard.png b/img/android-app/kanboard.png new file mode 100644 index 00000000..0c9e998d Binary files /dev/null and b/img/android-app/kanboard.png differ diff --git a/img/android-app/koel.png b/img/android-app/koel.png new file mode 100644 index 00000000..90aa4174 Binary files /dev/null and b/img/android-app/koel.png differ diff --git a/img/android-app/lychee.png b/img/android-app/lychee.png new file mode 100644 index 00000000..ca1ae754 Binary files /dev/null and b/img/android-app/lychee.png differ diff --git a/img/android-app/mailpile.png b/img/android-app/mailpile.png new file mode 100644 index 00000000..57a4078c Binary files /dev/null and b/img/android-app/mailpile.png differ diff --git a/img/android-app/matrix.png b/img/android-app/matrix.png new file mode 100644 index 00000000..0e9dc02b Binary files /dev/null and b/img/android-app/matrix.png differ diff --git a/img/android-app/mediagoblin.png b/img/android-app/mediagoblin.png new file mode 100644 index 00000000..eb4f4b35 Binary files /dev/null and b/img/android-app/mediagoblin.png differ diff --git a/img/android-app/movim.png b/img/android-app/movim.png new file mode 100644 index 00000000..a6a7e668 Binary files /dev/null and b/img/android-app/movim.png differ diff --git a/img/android-app/mumble.png b/img/android-app/mumble.png new file mode 100644 index 00000000..aa62a09e Binary files /dev/null and b/img/android-app/mumble.png differ diff --git a/img/android-app/nextcloud.png b/img/android-app/nextcloud.png new file mode 100644 index 00000000..9d9dc1b8 Binary files /dev/null and b/img/android-app/nextcloud.png differ diff --git a/img/android-app/peertube.png b/img/android-app/peertube.png new file mode 100644 index 00000000..abb88565 Binary files /dev/null and b/img/android-app/peertube.png differ diff --git a/img/android-app/pleroma.png b/img/android-app/pleroma.png new file mode 100644 index 00000000..eb44df90 Binary files /dev/null and b/img/android-app/pleroma.png differ diff --git a/img/android-app/postactiv.png b/img/android-app/postactiv.png new file mode 100644 index 00000000..de90571f Binary files /dev/null and b/img/android-app/postactiv.png differ diff --git a/img/android-app/privatebin.png b/img/android-app/privatebin.png new file mode 100644 index 00000000..a594f481 Binary files /dev/null and b/img/android-app/privatebin.png differ diff --git a/img/android-app/rocketchat.png b/img/android-app/rocketchat.png new file mode 100644 index 00000000..a0e340b0 Binary files /dev/null and b/img/android-app/rocketchat.png differ diff --git a/img/android-app/searx.png b/img/android-app/searx.png new file mode 100644 index 00000000..e9f54f64 Binary files /dev/null and b/img/android-app/searx.png differ diff --git a/img/android-app/syncthing.png b/img/android-app/syncthing.png new file mode 100644 index 00000000..786423f2 Binary files /dev/null and b/img/android-app/syncthing.png differ diff --git a/img/android-app/tahoelafs.png b/img/android-app/tahoelafs.png new file mode 100644 index 00000000..f13e8049 Binary files /dev/null and b/img/android-app/tahoelafs.png differ diff --git a/img/android-app/turtl.png b/img/android-app/turtl.png new file mode 100644 index 00000000..b9b7640a Binary files /dev/null and b/img/android-app/turtl.png differ diff --git a/img/android-app/xmpp.png b/img/android-app/xmpp.png new file mode 100644 index 00000000..ebed60ef Binary files /dev/null and b/img/android-app/xmpp.png differ diff --git a/src/freedombone-addremove b/src/freedombone-addremove index af5c9a60..f93b3eb7 100755 --- a/src/freedombone-addremove +++ b/src/freedombone-addremove @@ -267,5 +267,6 @@ if [[ "$1" == "add-all" ]]; then else install_apps_selected fi +android_update_apps exit 0 diff --git a/src/freedombone-app-akaunting b/src/freedombone-app-akaunting index 9963023c..a0f697f9 100755 --- a/src/freedombone-app-akaunting +++ b/src/freedombone-app-akaunting @@ -40,6 +40,10 @@ AKAUNTING_ADMIN_PASSWORD= AKAUNTING_BACKGROUND_IMAGE_URL= +AKAUNTING_SHORT_DESCRIPTION=$'Personal accounting' +AKAUNTING_DESCRIPTION=$'Personal or small business accounting' +AKAUNTING_MOBILE_APP_URL= + akaunting_variables=(ONION_ONLY AKAUNTING_DOMAIN_NAME AKAUNTING_CODE diff --git a/src/freedombone-app-bludit b/src/freedombone-app-bludit index ccbd50bf..52c7ca1f 100755 --- a/src/freedombone-app-bludit +++ b/src/freedombone-app-bludit @@ -35,6 +35,10 @@ BLUDIT_ONION_PORT=9844 BLUDIT_REPO="https://github.com/bludit/bludit" BLUDIT_COMMIT='0e27e31a84421b3e6bd000a77bc89c2dff3c446a' +BLUDIT_SHORT_DESCRIPTION=$'Bludit Blog' +BLUDIT_DESCRIPTION=$'Simple Markdown blogging' +BLUDIT_MOBILE_APP_URL= + bludit_variables=(ONION_ONLY BLUDIT_DOMAIN_NAME BLUDIT_CODE diff --git a/src/freedombone-app-dlna b/src/freedombone-app-dlna index a2366390..f77aef45 100755 --- a/src/freedombone-app-dlna +++ b/src/freedombone-app-dlna @@ -31,6 +31,10 @@ VARIANTS='full full-vim media' IN_DEFAULT_INSTALL=0 SHOW_ON_ABOUT=0 +DLNA_SHORT_DESCRIPTION=$'DLNA media' +DLNA_DESCRIPTION=$'DLNA media' +DLNA_MOBILE_APP_URL= + dlna_variables=(SYSTEM_TYPE USB_MOUNT_DLNA INSTALLED_WITHIN_DOCKER diff --git a/src/freedombone-app-dokuwiki b/src/freedombone-app-dokuwiki index b92ef3bb..4b5905fb 100755 --- a/src/freedombone-app-dokuwiki +++ b/src/freedombone-app-dokuwiki @@ -40,6 +40,10 @@ DOKUWIKI_TITLE="${PROJECT_NAME} Dokuwiki" DOKUWIKI_REPO="https://github.com/splitbrain/dokuwiki" DOKUWIKI_COMMIT='be15c01c0b982cf1a75b5af031bf077143c63f39' +DOKUWIKI_SHORT_DESCRIPTION=$'Dokuwiki' +DOKUWIKI_DESCRIPTION=$'Dokuwiki databaseless wiki' +DOKUWIKI_MOBILE_APP_URL= + dokuwiki_variables=(ONION_ONLY MY_USERNAME DOKUWIKI_TITLE diff --git a/src/freedombone-app-edith b/src/freedombone-app-edith index a399d660..9627f4d1 100755 --- a/src/freedombone-app-edith +++ b/src/freedombone-app-edith @@ -38,6 +38,10 @@ EDITH_CODE= EDITH_ONION_PORT=8278 EDITH_LOGIN_TEXT=$"Edith login" +EDITH_SHORT_DESCRIPTION=$'Edith Notes' +EDITH_DESCRIPTION=$'Extremely simple note taking' +EDITH_MOBILE_APP_URL= + edith_variables=(MY_USERNAME MY_EMAIL_ADDRESS ONION_ONLY diff --git a/src/freedombone-app-etherpad b/src/freedombone-app-etherpad index 2ae82191..b0a007c6 100755 --- a/src/freedombone-app-etherpad +++ b/src/freedombone-app-etherpad @@ -42,6 +42,10 @@ ETHERPAD_ADMIN_PASSWORD= ETHERPAD_TITLE=$'Freedombone Docs' 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!" +ETHERPAD_SHORT_DESCRIPTION=$'Etherpad' +ETHERPAD_DESCRIPTION=$'Etherpad' +ETHERPAD_MOBILE_APP_URL= + etherpad_variables=(ONION_ONLY DEFAULT_DOMAIN_NAME ETHERPAD_DOMAIN_NAME diff --git a/src/freedombone-app-fedwiki b/src/freedombone-app-fedwiki index da0f5fbb..5299cc67 100755 --- a/src/freedombone-app-fedwiki +++ b/src/freedombone-app-fedwiki @@ -42,6 +42,10 @@ FEDWIKI_PORT=3053 FEDWIKI_DATA=/var/lib/fedwiki FEDWIKI_COOKIE= +FEDWIKI_SHORT_DESCRIPTION=$'FedWiki' +FEDWIKI_DESCRIPTION=$'Federated Wiki' +FEDWIKI_MOBILE_APP_URL= + fedwiki_variables=(FEDWIKI_DOMAIN_NAME FEDWIKI_CODE FEDWIKI_COOKIE diff --git a/src/freedombone-app-friendica b/src/freedombone-app-friendica index b03a1eeb..9b095326 100755 --- a/src/freedombone-app-friendica +++ b/src/freedombone-app-friendica @@ -40,6 +40,10 @@ FRIENDICA_ADMIN_PASSWORD= FRIENDICA_COMMIT='b5a42c5b31fae5315bacd37769eba20ab2345aaa' FRIENDICA_ADDONS_COMMIT='7cb9dbdda7f227462895c07be3c968405561d40e' +FRIENDICA_SHORT_DESCRIPTION=$'Friendica' +FRIENDICA_DESCRIPTION=$'Friendica federated social network' +FRIENDICA_MOBILE_APP_URL= + friendica_variables=(ONION_ONLY FRIENDICA_DOMAIN_NAME FRIENDICA_CODE diff --git a/src/freedombone-app-gnusocial b/src/freedombone-app-gnusocial index c6071544..f22e7f8c 100755 --- a/src/freedombone-app-gnusocial +++ b/src/freedombone-app-gnusocial @@ -46,6 +46,10 @@ GNUSOCIAL_TITLE='Pleroma FE' # Number of months after which posts expire GNUSOCIAL_EXPIRE_MONTHS=3 +GNUSOCIAL_SHORT_DESCRIPTION=$'GNU Social' +GNUSOCIAL_DESCRIPTION=$'GNU Social federated microblogging' +GNUSOCIAL_MOBILE_APP_URL='https://f-droid.org/packages/org.mariotaku.twidere/' + gnusocial_variables=(ONION_ONLY GNUSOCIAL_DOMAIN_NAME GNUSOCIAL_CODE diff --git a/src/freedombone-app-gogs b/src/freedombone-app-gogs index 5e0ca0a9..4599cc0b 100755 --- a/src/freedombone-app-gogs +++ b/src/freedombone-app-gogs @@ -34,18 +34,21 @@ SHOW_ON_ABOUT=1 GOGS_USERNAME='gogs' GOGS_VERSION='0.11.29' -GIT_DOMAIN_NAME= -GIT_CODE= +GOGS_DOMAIN_NAME= +GOGS_CODE= GIT_ONION_PORT=8090 GIT_ADMIN_PASSWORD= GOGS_BIN= GOGS_PORT=3145 +GOGS_SHORT_DESCRIPTION=$'Gogs' +GOGS_DESCRIPTION=$'Gogs git repo management' +GOGS_MOBILE_APP_URL= + gogs_variables=(ONION_ONLY GIT_ADMIN_PASSWORD - GIT_DOMAIN_NAME - GIT_CODE - GIT_ONION_PORT + GOGS_DOMAIN_NAME + GOGS_CODE MY_USERNAME DDNS_PROVIDER ARCHITECTURE) @@ -65,8 +68,8 @@ function change_password_gogs { function install_interactive_gogs { if [[ $ONION_ONLY != "no" ]]; then - GIT_DOMAIN_NAME='gogs.local' - write_config_param "GIT_DOMAIN_NAME" "$GIT_DOMAIN_NAME" + GOGS_DOMAIN_NAME='gogs.local' + write_config_param "GOGS_DOMAIN_NAME" "$GOGS_DOMAIN_NAME" else function_check interactive_site_details interactive_site_details git @@ -156,8 +159,8 @@ function upgrade_gogs { # Change port number if necessary if ! grep -q "HTTP_PORT = ${GOGS_PORT}" "${GOGS_CONFIG_FILE}"; then sed -i "s|HTTP_PORT =.*|HTTP_PORT = ${GOGS_PORT}|g" "${GOGS_CONFIG_FILE}" - read_config_param GIT_DOMAIN_NAME - sed -i "s|proxy_pass .*|proxy_pass http://localhost:${GOGS_PORT};|g" "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + read_config_param GOGS_DOMAIN_NAME + sed -i "s|proxy_pass .*|proxy_pass http://localhost:${GOGS_PORT};|g" "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" systemctl restart gogs systemctl restart nginx fi @@ -268,7 +271,7 @@ function restore_local_gogs { return fi - if [ ${#GIT_DOMAIN_NAME} -gt 2 ]; then + if [ ${#GOGS_DOMAIN_NAME} -gt 2 ]; then function_check gogs_create_database gogs_create_database @@ -276,7 +279,7 @@ function restore_local_gogs { GOGS_CONFIG_FILE="${GOGS_CONFIG_PATH}/app.ini" function_check restore_database - restore_database gogs "${GIT_DOMAIN_NAME}" + restore_database gogs "${GOGS_DOMAIN_NAME}" temp_restore_dir=/root/tempgogs if [ -d "${USB_MOUNT}/backup/gogs" ]; then echo $"Restoring Gogs settings" @@ -350,7 +353,7 @@ function restore_local_gogs { function backup_remote_gogs { if [ -d /home/$GOGS_USERNAME ]; then function_check suspend_site - suspend_site ${GIT_DOMAIN_NAME} + suspend_site ${GOGS_DOMAIN_NAME} function_check backup_database_to_friend backup_database_to_friend gogs @@ -379,7 +382,7 @@ function backup_remote_gogs { function restore_remote_gogs { if grep -q "gogs domain" "$COMPLETION_FILE"; then - GIT_DOMAIN_NAME=$(get_completion_param "gogs domain") + GOGS_DOMAIN_NAME=$(get_completion_param "gogs domain") function_check gogs_create_database gogs_create_database @@ -388,7 +391,7 @@ function restore_remote_gogs { GOGS_CONFIG_FILE=${GOGS_CONFIG_PATH}/app.ini function_check restore_database_from_friend - restore_database_from_friend gogs "${GIT_DOMAIN_NAME}" + restore_database_from_friend gogs "${GOGS_DOMAIN_NAME}" if [ -d "${SERVER_DIRECTORY}/backup/gogs" ]; then if [ ! -d $GOGS_CONFIG_PATH ]; then mkdir -p $GOGS_CONFIG_PATH @@ -445,19 +448,19 @@ function restore_remote_gogs { } function remove_gogs { - if [ ${#GIT_DOMAIN_NAME} -eq 0 ]; then + if [ ${#GOGS_DOMAIN_NAME} -eq 0 ]; then return fi systemctl stop gogs systemctl disable gogs - nginx_dissite "${GIT_DOMAIN_NAME}" - remove_certs "${GIT_DOMAIN_NAME}" - if [ -d "/var/www/${GIT_DOMAIN_NAME}" ]; then - rm -rf "/var/www/${GIT_DOMAIN_NAME}" + nginx_dissite "${GOGS_DOMAIN_NAME}" + remove_certs "${GOGS_DOMAIN_NAME}" + if [ -d "/var/www/${GOGS_DOMAIN_NAME}" ]; then + rm -rf "/var/www/${GOGS_DOMAIN_NAME}" fi - if [ -f "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" ]; then - rm "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + if [ -f "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" ]; then + rm "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" fi function_check drop_database drop_database gogs @@ -473,11 +476,11 @@ function remove_gogs { userdel -r gogs function_check remove_ddns_domain - remove_ddns_domain "$GIT_DOMAIN_NAME" + remove_ddns_domain "$GOGS_DOMAIN_NAME" } function install_gogs { - if [ ! "$GIT_DOMAIN_NAME" ]; then + if [ ! "$GOGS_DOMAIN_NAME" ]; then return fi @@ -580,33 +583,33 @@ function install_gogs { systemctl daemon-reload systemctl start gogs - if [ ! -d "/var/www/${GIT_DOMAIN_NAME}" ]; then - mkdir "/var/www/${GIT_DOMAIN_NAME}" + if [ ! -d "/var/www/${GOGS_DOMAIN_NAME}" ]; then + mkdir "/var/www/${GOGS_DOMAIN_NAME}" fi - if [ -d "/var/www/${GIT_DOMAIN_NAME}/htdocs" ]; then - rm -rf "/var/www/${GIT_DOMAIN_NAME}/htdocs" + if [ -d "/var/www/${GOGS_DOMAIN_NAME}/htdocs" ]; then + rm -rf "/var/www/${GOGS_DOMAIN_NAME}/htdocs" fi if [[ "${ONION_ONLY}" == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect "${GIT_DOMAIN_NAME}" + nginx_http_redirect "${GOGS_DOMAIN_NAME}" { echo 'server {'; echo ' listen 443 ssl;'; echo ' #listen [::]:443 ssl;'; - echo " root /var/www/${GIT_DOMAIN_NAME}/htdocs;"; - echo " server_name ${GIT_DOMAIN_NAME};"; + echo " root /var/www/${GOGS_DOMAIN_NAME}/htdocs;"; + echo " server_name ${GOGS_DOMAIN_NAME};"; echo ' access_log /dev/null;'; echo " error_log /dev/null;"; - echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" function_check nginx_ssl - nginx_ssl "${GIT_DOMAIN_NAME}" + nginx_ssl "${GOGS_DOMAIN_NAME}" function_check nginx_security_options - nginx_security_options "${GIT_DOMAIN_NAME}" + nginx_security_options "${GOGS_DOMAIN_NAME}" { echo ' add_header Strict-Transport-Security max-age=0;'; echo ''; - echo ' location / {'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo ' location / {'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" function_check nginx_limits - nginx_limits "${GIT_DOMAIN_NAME}" '10G' + nginx_limits "${GOGS_DOMAIN_NAME}" '10G' { echo " proxy_pass http://localhost:${GOGS_PORT};"; echo ' }'; echo ''; @@ -621,24 +624,24 @@ function install_gogs { echo ' access_log /dev/null;'; echo ' }'; echo '}'; - echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" else - echo -n '' > "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo -n '' > "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" fi { echo 'server {'; echo " listen 127.0.0.1:${GIT_ONION_PORT} default_server;"; - echo " root /var/www/$GIT_DOMAIN_NAME/htdocs;"; - echo " server_name $GIT_DOMAIN_NAME;"; + echo " root /var/www/$GOGS_DOMAIN_NAME/htdocs;"; + echo " server_name $GOGS_DOMAIN_NAME;"; echo ' access_log /dev/null;'; echo " error_log /dev/null;"; - echo ''; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo ''; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" function_check nginx_security_options - nginx_security_options "${GIT_DOMAIN_NAME}" + nginx_security_options "${GOGS_DOMAIN_NAME}" { echo ' add_header Strict-Transport-Security max-age=0;'; echo ''; - echo ' location / {'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo ' location / {'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" function_check nginx_limits - nginx_limits "${GIT_DOMAIN_NAME}" '10G' + nginx_limits "${GOGS_DOMAIN_NAME}" '10G' { echo " proxy_pass http://localhost:${GOGS_PORT};"; echo ' }'; echo ''; @@ -652,15 +655,15 @@ function install_gogs { echo ' log_not_found off;'; echo ' access_log /dev/null;'; echo ' }'; - echo '}'; } >> "/etc/nginx/sites-available/${GIT_DOMAIN_NAME}" + echo '}'; } >> "/etc/nginx/sites-available/${GOGS_DOMAIN_NAME}" function_check configure_php configure_php function_check create_site_certificate - create_site_certificate "${GIT_DOMAIN_NAME}" 'yes' + create_site_certificate "${GOGS_DOMAIN_NAME}" 'yes' - nginx_ensite "${GIT_DOMAIN_NAME}" + nginx_ensite "${GOGS_DOMAIN_NAME}" if [ ! -d /var/lib/tor ]; then echo $'No Tor installation found. Gogs onion site cannot be configured.' @@ -685,11 +688,11 @@ function install_gogs { systemctl restart php7.0-fpm systemctl restart nginx - set_completion_param "gogs domain" "$GIT_DOMAIN_NAME" + set_completion_param "gogs domain" "$GOGS_DOMAIN_NAME" set_completion_param "gogs onion domain" "$GIT_ONION_HOSTNAME" function_check add_ddns_domain - add_ddns_domain "${GIT_DOMAIN_NAME}" + add_ddns_domain "${GOGS_DOMAIN_NAME}" # obtain the secret key GOGS_SECRET_KEY="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" @@ -718,17 +721,17 @@ function install_gogs { echo ''; echo '[server]'; } >> ${GOGS_CONFIG_FILE} if [[ ${ONION_ONLY} == 'no' ]]; then - echo "DOMAIN = ${GIT_DOMAIN_NAME}" >> ${GOGS_CONFIG_FILE} - echo "ROOT_URL = https://$GIT_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE} + echo "DOMAIN = ${GOGS_DOMAIN_NAME}" >> ${GOGS_CONFIG_FILE} + echo "ROOT_URL = https://$GOGS_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE} else echo "DOMAIN = ${GIT_ONION_HOSTNAME}" >> ${GOGS_CONFIG_FILE} - echo "ROOT_URL = http://$GIT_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE} + echo "ROOT_URL = http://$GOGS_DOMAIN_NAME/" >> ${GOGS_CONFIG_FILE} fi { echo "HTTP_PORT = ${GOGS_PORT}"; echo "SSH_PORT = $SSH_PORT"; echo 'SSH_DOMAIN = %(DOMAIN)s'; - echo "CERT_FILE = /etc/ssl/certs/${GIT_DOMAIN_NAME}.pem"; - echo "KEY_FILE = /etc/ssl/private/${GIT_DOMAIN_NAME}.key"; + echo "CERT_FILE = /etc/ssl/certs/${GOGS_DOMAIN_NAME}.pem"; + echo "KEY_FILE = /etc/ssl/private/${GOGS_DOMAIN_NAME}.key"; echo 'DISABLE_ROUTER_LOG = true'; echo ''; echo '[session]'; @@ -758,9 +761,9 @@ function install_gogs { systemctl restart gogs if ! grep -q "gogs domain:" "${COMPLETION_FILE}"; then - echo "gogs domain:${GIT_DOMAIN_NAME}" >> "${COMPLETION_FILE}" + echo "gogs domain:${GOGS_DOMAIN_NAME}" >> "${COMPLETION_FILE}" else - sed -i "s|gogs domain.*|gogs domain:${GIT_DOMAIN_NAME}|g" "${COMPLETION_FILE}" + sed -i "s|gogs domain.*|gogs domain:${GOGS_DOMAIN_NAME}|g" "${COMPLETION_FILE}" fi function_check configure_firewall_for_git diff --git a/src/freedombone-app-htmly b/src/freedombone-app-htmly index 11142f60..72baacbd 100755 --- a/src/freedombone-app-htmly +++ b/src/freedombone-app-htmly @@ -39,6 +39,10 @@ HTMLY_COMMIT='bf5fe9486160be4da86d8987d3e5c977e1dc6d32' HTMLY_TITLE="My Blog" HTMLY_SUBTITLE="Another ${PROJECT_NAME} blog" +HTMLY_SHORT_DESCRIPTION=$'HTMLy' +HTMLY_DESCRIPTION=$'HTMLy databaseless blogging' +HTMLY_MOBILE_APP_URL= + htmly_variables=(HTMLY_REPO HTMLY_DOMAIN_NAME HTMLY_CODE diff --git a/src/freedombone-app-hubzilla b/src/freedombone-app-hubzilla index 27d86461..e5a085d8 100755 --- a/src/freedombone-app-hubzilla +++ b/src/freedombone-app-hubzilla @@ -41,6 +41,10 @@ HUBZILLA_ADDONS_REPO="https://github.com/redmatrix/hubzilla-addons.git" HUBZILLA_ADDONS_COMMIT='be9dcd044b9326c3bd9301d7c4b375a2c2f54663' HUBZILLA_ADMIN_PASSWORD= +HUBZILLA_SHORT_DESCRIPTION=$'Hubzilla' +HUBZILLA_DESCRIPTION=$'Hubzilla' +HUBZILLA_MOBILE_APP_URL= + hubzilla_variables=(ONION_ONLY HUBZILLA_DOMAIN_NAME HUBZILLA_CODE diff --git a/src/freedombone-app-icecast b/src/freedombone-app-icecast index 47ed3d86..b0d848be 100755 --- a/src/freedombone-app-icecast +++ b/src/freedombone-app-icecast @@ -44,6 +44,10 @@ ICECAST_DIR=/icestream ICECAST_PLAYLIST_FILE=/etc/ices2/playlist.txt ICECAST_LOGIN_TEXT=$"Icecast login" +ICECAST_SHORT_DESCRIPTION=$'Icecast' +ICECAST_DESCRIPTION=$'Icecast' +ICECAST_MOBILE_APP_URL= + icecast_variables=(MY_USERNAME MY_EMAIL_ADDRESS ONION_ONLY diff --git a/src/freedombone-app-irc b/src/freedombone-app-irc index 0ae6d10d..feb635c8 100755 --- a/src/freedombone-app-irc +++ b/src/freedombone-app-irc @@ -41,6 +41,10 @@ IRC_PASSWORD= # Number of entries for the bouncer to buffer IRC_BUFFER_LENGTH=300 +IRC_SHORT_DESCRIPTION=$'IRC' +IRC_DESCRIPTION=$'IRC' +IRC_MOBILE_APP_URL='https://f-droid.org/packages/org.yaaic' + irc_variables=(MY_USERNAME MY_NAME IRC_PORT diff --git a/src/freedombone-app-jitsi b/src/freedombone-app-jitsi index dde625c7..948ba601 100755 --- a/src/freedombone-app-jitsi +++ b/src/freedombone-app-jitsi @@ -44,6 +44,10 @@ JITSI_DOMAIN_NAME= JITSI_CODE= JITSI_ONION_HOSTNAME= +JITSI_SHORT_DESCRIPTION=$'Jitsi' +JITSI_DESCRIPTION=$'Jitsi' +JITSI_MOBILE_APP_URL= + jitsi_variables=(ONION_ONLY JITSI_DOMAIN_NAME JITSI_ONION_HOSTNAME diff --git a/src/freedombone-app-kanboard b/src/freedombone-app-kanboard index 3f726626..c3db22c9 100755 --- a/src/freedombone-app-kanboard +++ b/src/freedombone-app-kanboard @@ -38,6 +38,9 @@ KANBOARD_REPO="https://github.com/kanboard/kanboard" KANBOARD_COMMIT='7a6b1bc3da0af442e02b5a2dc430a4ded8e7c4ee' KANBOARD_ADMIN_PASSWORD= +KANBOARD_SHORT_DESCRIPTION=$'Kanboard' +KANBOARD_DESCRIPTION=$'Kanboard kanban' +KANBOARD_MOBILE_APP_URL= kanboard_variables=(ONION_ONLY KANBOARD_DOMAIN_NAME diff --git a/src/freedombone-app-koel b/src/freedombone-app-koel index 4f9bd585..a02adfa3 100755 --- a/src/freedombone-app-koel +++ b/src/freedombone-app-koel @@ -40,6 +40,10 @@ KOEL_REPO="https://github.com/phanan/koel" KOEL_COMMIT='8e9b021aa09f2b1460977bdd52fff14ea2bc1607' KOEL_ADMIN_PASSWORD= +KOEL_SHORT_DESCRIPTION=$'Koel music' +KOEL_DESCRIPTION=$'Koel music player' +KOEL_MOBILE_APP_URL= + koel_variables=(ONION_ONLY KOEL_DOMAIN_NAME KOEL_CODE diff --git a/src/freedombone-app-lychee b/src/freedombone-app-lychee index 16bdd431..e8b9efc0 100755 --- a/src/freedombone-app-lychee +++ b/src/freedombone-app-lychee @@ -37,6 +37,10 @@ LYCHEE_ONION_PORT=8105 LYCHEE_REPO="https://github.com/electerious/Lychee" LYCHEE_COMMIT='27f207dcbac8488629ffc3b5a9cac78ae123bee9' +LYCHEE_SHORT_DESCRIPTION=$'Lychee photos' +LYCHEE_DESCRIPTION=$'Lychee photos' +LYCHEE_MOBILE_APP_URL= + lychee_variables=(LYCHEE_REPO LYCHEE_DOMAIN_NAME LYCHEE_CODE diff --git a/src/freedombone-app-mailpile b/src/freedombone-app-mailpile index c384eecd..8824bae6 100755 --- a/src/freedombone-app-mailpile +++ b/src/freedombone-app-mailpile @@ -38,6 +38,10 @@ MAILPILE_REPO="https://github.com/mailpile/Mailpile" MAILPILE_COMMIT='4f28f1bb55b3b9985f22ab6372d539b1087482dd' MAILPILE_PORT=33411 +MAILPILE_SHORT_DESCRIPTION=$'Mailpile' +MAILPILE_DESCRIPTION=$'Mailpile email client' +MAILPILE_MOBILE_APP_URL= + mailpile_variables=(MAILPILE_REPO MAILPILE_DOMAIN_NAME MAILPILE_CODE diff --git a/src/freedombone-app-matrix b/src/freedombone-app-matrix index de6bd581..8b5eed6f 100755 --- a/src/freedombone-app-matrix +++ b/src/freedombone-app-matrix @@ -53,6 +53,10 @@ REPORT_STATS="no" MATRIX_SECRET= MATRIX_EXPIRE_MONTHS=1 +MATRIX_SHORT_DESCRIPTION=$'Matrix chat' +MATRIX_DESCRIPTION=$'Matrix chat' +MATRIX_MOBILE_APP_URL='https://f-droid.org/packages/im.vector.alpha' + matrix_variables=(ONION_ONLY MY_USERNAME MATRIX_SECRET diff --git a/src/freedombone-app-mediagoblin b/src/freedombone-app-mediagoblin index 8f5232c6..117cc4d4 100755 --- a/src/freedombone-app-mediagoblin +++ b/src/freedombone-app-mediagoblin @@ -35,11 +35,15 @@ MEDIAGOBLIN_DOMAIN_NAME= MEDIAGOBLIN_ADMIN_PASSWORD= MEDIAGOBLIN_CODE= MEDIAGOBLIN_ONION_PORT=8108 -MEDIAGOBLIN_REPO="http://git.savannah.gnu.org/r/mediagoblin.git" +MEDIAGOBLIN_REPO="https://git.savannah.gnu.org/git/mediagoblin.git" MEDIAGOBLIN_COMMIT='c4d3293dfa4076719e60fe9e052add07426f9a9a' MEDIAGOBLIN_BASE_DIR=/var/www/mediagoblin.local/htdocs MEDIAGOBLIN_PORT=6543 +MEDIAGOBLIN_SHORT_DESCRIPTION=$'Mediagoblin' +MEDIAGOBLIN_DESCRIPTION=$'Mediagoblin' +MEDIAGOBLIN_MOBILE_APP_URL= + mediagoblin_variables=(ONION_ONLY MY_USERNAME MEDIAGOBLIN_DOMAIN_NAME diff --git a/src/freedombone-app-movim b/src/freedombone-app-movim index 5a3e1fe8..02d3bcd8 100755 --- a/src/freedombone-app-movim +++ b/src/freedombone-app-movim @@ -39,6 +39,10 @@ MOVIM_COMMIT='6142c2033b7695448516a67690324a3bde048260' MOVIM_ADMIN_PASSWORD= MOVIM_DAEMON_PORT=8880 +MOVIM_SHORT_DESCRIPTION=$'Movim' +MOVIM_DESCRIPTION=$'Movim' +MOVIM_MOBILE_APP_URL='https://f-droid.org/packages/com.movim.movim' + movim_variables=(ONION_ONLY MOVIM_DOMAIN_NAME MOVIM_CODE diff --git a/src/freedombone-app-mumble b/src/freedombone-app-mumble index 79d80d3b..51424f50 100755 --- a/src/freedombone-app-mumble +++ b/src/freedombone-app-mumble @@ -40,6 +40,10 @@ MUMBLE_PORT=64738 MUMBLE_DATABASE="mumble-server.sqlite" MUMBLE_CONFIG_FILE="mumble-server.ini" +MUMBLE_SHORT_DESCRIPTION=$'Mumble' +MUMBLE_DESCRIPTION=$'Mumble' +MUMBLE_MOBILE_APP_URL='https://f-droid.org/packages/com.morlunk.mumbleclient' + mumble_variables=(MY_USERNAME DEFAULT_DOMAIN_NAME MUMBLE_PORT diff --git a/src/freedombone-app-nextcloud b/src/freedombone-app-nextcloud index c17e2ef5..b626a62f 100755 --- a/src/freedombone-app-nextcloud +++ b/src/freedombone-app-nextcloud @@ -42,6 +42,10 @@ NEXTCLOUD_COMMIT='edd5712c6ead5b09fa4f996cfda66fc4e18ba597' NEXTCLOUD_ADMIN_PASSWORD= NEXTCLOUD_SERVER_SIDE_ENCRYPTION=1 +NEXTCLOUD_SHORT_DESCRIPTION=$'NextCloud' +NEXTCLOUD_DESCRIPTION=$'NextCloud' +NEXTCLOUD_MOBILE_APP_URL='https://f-droid.org/packages/com.nextcloud.client' + nextcloud_variables=(ONION_ONLY NEXTCLOUD_DOMAIN_NAME NEXTCLOUD_CODE diff --git a/src/freedombone-app-peertube b/src/freedombone-app-peertube index aed36c69..eaaed73b 100755 --- a/src/freedombone-app-peertube +++ b/src/freedombone-app-peertube @@ -44,6 +44,10 @@ PEERTUBE_PORT=9004 MESH_PEERTUBE_PORT=8500 PEERTUBE_DIR=/etc/peertube +PEERTUBE_SHORT_DESCRIPTION=$'PeerTube' +PEERTUBE_DESCRIPTION=$'PeerTube' +PEERTUBE_MOBILE_APP_URL= + peertube_variables=(PEERTUBE_DOMAIN_NAME PEERTUBE_CODE PEERTUBE_ADMIN_PASSWORD diff --git a/src/freedombone-app-pleroma b/src/freedombone-app-pleroma index b9a390de..848851a0 100755 --- a/src/freedombone-app-pleroma +++ b/src/freedombone-app-pleroma @@ -51,6 +51,10 @@ PLEROMA_EXPIRE_MONTHS=3 pleroma_expire_posts_script=/usr/bin/pleroma-expire-posts blocking_script_file=/usr/bin/pleroma-blocking +PLEROMA_SHORT_DESCRIPTION=$'Pleroma' +PLEROMA_DESCRIPTION=$'Pleroma federated microblogging' +PLEROMA_MOBILE_APP_URL='https://f-droid.org/packages/com.keylesspalace.tusky' + pleroma_variables=(ONION_ONLY PLEROMA_DOMAIN_NAME PLEROMA_CODE diff --git a/src/freedombone-app-postactiv b/src/freedombone-app-postactiv index d81c1f2b..d26de180 100755 --- a/src/freedombone-app-postactiv +++ b/src/freedombone-app-postactiv @@ -45,6 +45,10 @@ POSTACTIV_TITLE='PostActiv' # Number of months after which posts expire POSTACTIV_EXPIRE_MONTHS=3 +POSTACTIV_SHORT_DESCRIPTION=$'PostActiv' +POSTACTIV_DESCRIPTION=$'PostActiv federated microblogging' +POSTACTIV_MOBILE_APP_URL='https://f-droid.org/packages/org.mariotaku.twidere/' + postactiv_variables=(ONION_ONLY POSTACTIV_DOMAIN_NAME POSTACTIV_CODE diff --git a/src/freedombone-app-privatebin b/src/freedombone-app-privatebin index e081bf89..1ff4f856 100755 --- a/src/freedombone-app-privatebin +++ b/src/freedombone-app-privatebin @@ -38,6 +38,10 @@ PRIVATEBIN_REPO="https://github.com/PrivateBin/PrivateBin" PRIVATEBIN_COMMIT='9c132cd839fd5e91da18e4a1e8ebef64fce605fb' PRIVATEBIN_ADMIN_PASSWORD= +PRIVATEBIN_SHORT_DESCRIPTION=$'PrivateBin' +PRIVATEBIN_DESCRIPTION=$'PrivateBin zero knowledge pastebin' +PRIVATEBIN_MOBILE_APP_URL= + privatebin_variables=(ONION_ONLY PRIVATEBIN_DOMAIN_NAME PRIVATEBIN_CODE diff --git a/src/freedombone-app-rocketchat b/src/freedombone-app-rocketchat index ddd2fa14..e07d7619 100755 --- a/src/freedombone-app-rocketchat +++ b/src/freedombone-app-rocketchat @@ -36,6 +36,10 @@ ROCKETCHAT_CODE= ROCKETCHAT_ONION_PORT=9722 ROCKETCHAT_PORT_INTERNAL=3000 +ROCKETCHAT_SHORT_DESCRIPTION=$'Rocketchat' +ROCKETCHAT_DESCRIPTION=$'Rocketchat' +ROCKETCHAT_MOBILE_APP_URL= + rocketchat_variables=(ONION_ONLY ROCKETCHAT_DOMAIN_NAME ROCKETCHAT_CODE diff --git a/src/freedombone-app-syncthing b/src/freedombone-app-syncthing index 49fd18f0..41aba63e 100755 --- a/src/freedombone-app-syncthing +++ b/src/freedombone-app-syncthing @@ -40,6 +40,10 @@ SYNCTHING_PORT=22000 SYNCTHING_SHARED_DATA=/var/lib/syncthing/SyncShared SYNCTHING_USER_IDS_FILE='.syncthingids' +SYNCTHING_SHORT_DESCRIPTION=$'Syncthing' +SYNCTHING_DESCRIPTION=$'Syncthing file synchronization' +SYNCTHING_MOBILE_APP_URL='https://f-droid.org/packages/com.nutomic.syncthingandroid' + syncthing_variables=(SYNCTHING_ID SYNCTHING_CONFIG_PATH SYNCTHING_CONFIG_FILE diff --git a/src/freedombone-app-turtl b/src/freedombone-app-turtl index b4f62a2e..80c4f66a 100755 --- a/src/freedombone-app-turtl +++ b/src/freedombone-app-turtl @@ -48,6 +48,10 @@ TURTL_BASE_DIR=/etc/turtl TURTL_SIGNUP_STRING='Signup a new user' turtl_users_file=$TURTL_BASE_DIR/api/controllers/users.lisp +TURTL_SHORT_DESCRIPTION=$'Turtl' +TURTL_DESCRIPTION=$'Turtl notes' +TURTL_MOBILE_APP_URL= + turtl_variables=(ONION_ONLY DEFAULT_DOMAIN_NAME TURTL_DOMAIN_NAME diff --git a/src/freedombone-app-xmpp b/src/freedombone-app-xmpp index 7877f17e..213c75e1 100755 --- a/src/freedombone-app-xmpp +++ b/src/freedombone-app-xmpp @@ -53,6 +53,10 @@ prosody_modules_filename='prosody-modules-20180322.tar.gz' prosody_modules_hash='982d0dfcef98e9cb9cee4cc3801b8ce9a503a32e44c32b99df6fe94545b90072' xmpp_encryption_warning=$"For security reasons, OMEMO or PGP encryption is required for conversations on this server." +XMPP_SHORT_DESCRIPTION=$'XMPP chat' +XMPP_DESCRIPTION=$'XMPP chat' +XMPP_MOBILE_APP_URL='https://f-droid.org/packages/eu.siacs.conversations' + xmpp_variables=(ONION_ONLY INSTALLED_WITHIN_DOCKER XMPP_CIPHERS diff --git a/src/freedombone-config b/src/freedombone-config index e991bdd7..31084514 100755 --- a/src/freedombone-config +++ b/src/freedombone-config @@ -74,8 +74,8 @@ GNUSOCIAL_DOMAIN_NAME= GNUSOCIAL_CODE= GNUSOCIAL_WELCOME_MESSAGE=$"

Welcome to \$GNUSOCIAL_DOMAIN_NAME a federated social network

Another $PROJECT_NAME site

" GNUSOCIAL_BACKGROUND_IMAGE_URL= -GIT_DOMAIN_NAME= -GIT_CODE= +GOGS_DOMAIN_NAME= +GOGS_CODE= USB_DRIVE=/dev/sdb1 HWRNG_TYPE= ENABLE_SOCIAL_KEY_MANAGEMENT= diff --git a/src/freedombone-syncthing b/src/freedombone-syncthing index 1ca261fb..f4b240ea 100755 --- a/src/freedombone-syncthing +++ b/src/freedombone-syncthing @@ -55,6 +55,10 @@ SYNCTHING_UPDATE_FILE='.syncthing-update' CHANGED= TEMP_IDS_FILE=/root/.synthingids +SYNCTHING_SHORT_DESCRIPTION=$'File Synchronization' +SYNCTHING_DESCRIPTION=$'File Synchronization' +SYNCTHING_MOBILE_APP_URL='https://f-droid.org/packages/com.nutomic.syncthingandroid' + function remove_user_syncthing { remove_username="$1" diff --git a/src/freedombone-template b/src/freedombone-template index ce334fd4..305f54c6 100755 --- a/src/freedombone-template +++ b/src/freedombone-template @@ -280,6 +280,11 @@ if [ $app_daemon ]; then fi fi echo '' +echo $'# These parameters are used by the FreedomBox mobile app' +echo "${app_name_upper}_SHORT_DESCRIPTION=" +echo "${app_name_upper}_DESCRIPTION=" +echo "${app_name_upper}_MOBILE_APP_URL=" +echo '' echo "${app_name}_variables=(ONION_ONLY" echo " ${app_name_upper}_DOMAIN_NAME" echo " ${app_name_upper}_CODE" diff --git a/src/freedombone-upgrade b/src/freedombone-upgrade index e5891212..aa0acd17 100755 --- a/src/freedombone-upgrade +++ b/src/freedombone-upgrade @@ -111,6 +111,7 @@ if [ -d "$PROJECT_DIR" ]; then rm /etc/exim4/exim4.conf.template.bak* email_update_onion_domain prevent_mail_process_overrun + android_update_apps yes #defrag_filesystem # reinstall tor from backports @@ -125,6 +126,13 @@ fi # If logging was left on then turn it off ${PROJECT_NAME}-logging off +# This is a hack to fix nginx failures which happen sometimes +# when matrix is installed +if [ -d /etc/matrix ]; then + systemctl restart matrix + systemctl restart nginx +fi + # upgrading file prevents USB canary from activating if [ -f /tmp/.upgrading ]; then rm /tmp/.upgrading diff --git a/src/freedombone-utils-android b/src/freedombone-utils-android new file mode 100755 index 00000000..7c9b375c --- /dev/null +++ b/src/freedombone-utils-android @@ -0,0 +1,167 @@ +#!/bin/bash +# _____ _ _ +# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___ +# | __| _| -_| -_| . | . | | . | . | | -_| +# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___| +# +# Freedom in the Cloud +# +# Integration with the FreedomBox android app +# +# License +# ======= +# +# Copyright (C) 2018 Bob Mottram +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +function android_update_apps { + if [ "$1" ]; then + detect_installable_apps + fi + + local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local + plinth_api="/var/www/${local_hostname}/htdocs/plinth/api.json" + + # Create a self-signed cert if needed + # The FreedomBox app assumes a self-signed cert + if [ ! -f "/etc/ssl/certs/${local_hostname}.crt" ]; then + install_web_local_user_interface + systemctl restart nginx + fi + + if [ ! -d "/var/www/${local_hostname}/htdocs/plinth" ]; then + mkdir -p "/var/www/${local_hostname}/htdocs/plinth" + fi + if [ ! -d "/var/www/${local_hostname}/htdocs/icons" ]; then + mkdir -p "/var/www/${local_hostname}/htdocs/icons" + fi + + echo '{' > "$plinth_api" + echo ' "shortcuts": [' >> "$plinth_api" + + android_ctr=0 + app_index=0 + # shellcheck disable=SC2068,SC2034 + for a in ${APPS_INSTALLED[@]} + do + app_name=${APPS_INSTALLED_NAMES[$app_index]} + if [ "$app_name" ]; then + app_filename="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}" + if [ -f "$app_filename" ]; then + # get the icon for the app + icon_filename="/usr/share/${PROJECT_NAME}/android-app/${app_name}.png" + if [ -f "$icon_filename" ]; then + cp "$icon_filename" "/var/www/${local_hostname}/htdocs/icons/${app_name}.png" + else + icon_filename= + fi + + app_name_upper=$(echo "$app_name" | awk '{print toupper($0)}') + SHORT_DESCRIPTION= + DESCRIPTION= + MOBILE_APP_URL= + + if ! grep -q "${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then + app_index=$((app_index+1)) + continue + fi + if grep -q "#${app_name_upper}_SHORT_DESCRIPTION=" "$app_filename"; then + app_index=$((app_index+1)) + continue + fi + 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}')" + + if grep -q "${app_name_upper}_DESCRIPTION=" "$app_filename"; then + DESCRIPTION="$(grep "${app_name_upper}_DESCRIPTION=" "$app_filename" | head -n 1 | sed 's|\$||g' | sed "s|'||g" | sed 's|\"||g' | awk -F '=' '{print $2}')" + fi + if grep -q "${app_name_upper}_MOBILE_APP_URL=" "$app_filename"; then + 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}')" + fi + + if [ $android_ctr -gt 0 ]; then + echo ',' >> "$plinth_api" + fi + + { echo ' {'; + echo " \"name\": \"${app_name}\","; + echo " \"short_description\": \"$SHORT_DESCRIPTION\","; + echo " \"description\": ["; + echo " \"$DESCRIPTION\""; + echo ' ],'; + echo " \"icon_url\": \"/icons/${app_name}.png\","; + echo " \"clients\": ["; } >> "$plinth_api" + + read_config_param "${app_name_upper}_DOMAIN_NAME" + test_domain_name="${app_name_upper}_DOMAIN_NAME" + domain_name=${!test_domain_name} + if [ "$domain_name" ]; then + if [[ "$domain_name" != *'.onion' ]]; then + domain_name="https://${!test_domain_name}" + else + domain_name="http://${!test_domain_name}" + fi + fi + if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then + { echo ' {'; + echo " \"name\": \"${app_name}\","; + echo " \"platforms\": ["; + echo ' {'; + echo ' "type": "web",'; + echo " \"url\": \"$domain_name\""; + echo -n ' }'; } >> "$plinth_api" + fi + + if [ "$MOBILE_APP_URL" ]; then + if [[ "$domain_name" && "$app_name" != 'matrix' ]]; then + echo ',' >> "$plinth_api" + else + { echo ' {'; + echo " \"name\": \"${app_name}\","; + echo " \"platforms\": ["; } >> "$plinth_api" + fi + store_name='f-droid' + if [[ "$MOBILE_APP_URL" == *'google'* ]]; then + store_name='google-play' + fi + { echo ' {'; + echo ' "type": "store",'; + echo ' "os": "android",'; + echo " \"store_name\": \"$store_name\","; + echo " \"url\": \"$MOBILE_APP_URL\""; + echo ' }'; } >> "$plinth_api" + else + echo '' >> "$plinth_api" + fi + + { echo ' ]'; + echo ' }'; + echo ' ]'; + echo -n ' }'; } >> "$plinth_api" + + android_ctr=$((android_ctr+1)) + fi + fi + app_index=$((app_index+1)) + done + + { echo ''; + echo ' ]'; + echo '}'; } >> "$plinth_api" + + chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/plinth" + chown -R www-data:www-data "/var/www/${local_hostname}/htdocs/icons" +} + +# NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-avahi b/src/freedombone-utils-avahi index 86adcc7b..69660c93 100755 --- a/src/freedombone-utils-avahi +++ b/src/freedombone-utils-avahi @@ -111,7 +111,7 @@ function mesh_avahi { WATCHDOG_SCRIPT_NAME="keepon" { echo ''; echo '# keep avahi daemon running'; - echo "AVAHI_RUNNING=\$(pgrep avahi-daemon > /dev/null && echo Running)"; + echo "AVAHI_RUNNING=\$(systemctl is-active avahi-daemon >/dev/null 2>&1 && echo Running)"; echo "if [ ! \$AVAHI_RUNNING ]; then"; echo ' systemctl start avahi-daemon'; echo " echo -n \$CURRENT_DATE >> \$LOGFILE"; @@ -120,6 +120,33 @@ function mesh_avahi { chmod +x "$rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME" } +function keep_avahi_running { + WATCHDOG_SCRIPT_NAME="keepon" + + if grep -q "avahi daemon" "/usr/bin/$WATCHDOG_SCRIPT_NAME"; then + return + fi + + { echo ''; + echo '# keep avahi daemon running'; + echo "AVAHI_RUNNING=\$(systemctl is-active avahi-daemon >/dev/null 2>&1 && echo Running)"; + echo "if [ ! \$AVAHI_RUNNING ]; then"; + echo ' systemctl start avahi-daemon'; + echo " echo -n \$CURRENT_DATE >> \$LOGFILE"; + echo " echo \" Avahi daemon restarted\" >> \$LOGFILE"; + echo 'fi'; + echo '# End of avahi'; } >> "/usr/bin/$WATCHDOG_SCRIPT_NAME" + chmod +x "/usr/bin/$WATCHDOG_SCRIPT_NAME" + + # This is a bit of a hack to ensure that avahi services get broadcast + # Without this some other systems may not be able to see the server + { echo '#!/bin/bash'; + echo 'systemctl restart avahi-daemon'; } > /usr/bin/restartavahi + chmod +x /usr/bin/restartavahi + + cron_add_mins 10 /usr/bin/restartavahi +} + function install_avahi { if [ "$INSTALLING_MESH" ]; then mesh_avahi diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index 7d9b47e9..2fc9224e 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -211,7 +211,7 @@ function set_default_onion_domains { BLUDIT_DOMAIN_NAME='bludit.local' DOKUWIKI_DOMAIN_NAME='dokuwiki.local' DEFAULT_DOMAIN_NAME="${LOCAL_NAME}.local" - GIT_DOMAIN_NAME='gogs.local' + GOGS_DOMAIN_NAME='gogs.local' } function create_avahi_onion_domains { @@ -229,7 +229,7 @@ function create_avahi_onion_domains { function_check create_avahi_service create_avahi_service blog http tcp "$HTMLY_ONION_PORT" fi - if [ $GIT_DOMAIN_NAME ]; then + if [ $GOGS_DOMAIN_NAME ]; then function_check create_avahi_service create_avahi_service git http tcp "$GIT_ONION_PORT" fi diff --git a/src/freedombone-utils-selector b/src/freedombone-utils-selector index 99aaab1b..a03d3766 100755 --- a/src/freedombone-utils-selector +++ b/src/freedombone-utils-selector @@ -584,7 +584,7 @@ function add_users_after_install { if [[ $(is_valid_user "$USERNAME") == "1" ]]; then if [[ "$USERNAME" != "$ADMIN_USERNAME" ]]; then if [[ $(user_added_to_app "${USERNAME}" "${app_name}") == "0" ]]; then - valstr=$"Login for user ${USERNAME}=" + #valstr=$"Login for user ${USERNAME}=" app_password="$(create_password ${MINIMUM_PASSWORD_LENGTH})" "add_user_${app_name}" "${USERNAME}" "${app_password}" echo "${app_name}_${USERNAME}" >> "$APP_USERS_FILE" diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index cf892569..7a563b6f 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -1055,6 +1055,9 @@ function setup_utils { function_check install_avahi install_avahi + function_check keep_avahi_running + keep_avahi_running + function_check create_avahi_onion_domains create_avahi_onion_domains diff --git a/src/freedombone-utils-web b/src/freedombone-utils-web index 81a70e2a..20a4b875 100755 --- a/src/freedombone-utils-web +++ b/src/freedombone-utils-web @@ -1143,23 +1143,88 @@ function install_web_local_user_interface { # similar to Plinth or the yunohost admin interface local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local - mkdir -p "/var/www/${local_hostname}/htdocs" + if [ ! -d "/var/www/${local_hostname}/htdocs" ]; then + mkdir -p "/var/www/${local_hostname}/htdocs" + fi + { echo ''; echo ' '; - echo " This is a test on $local_hostname"; + echo " This is a test on ${local_hostname}"; echo ' '; echo ''; } > "/var/www/${local_hostname}/htdocs/index.html" - chown -R www-data:www-data "/var/www/${local_hostname}/htdocs" nginx_file=/etc/nginx/sites-available/$local_hostname { echo 'server {'; - echo ' listen 80;'; - echo ' listen [::]:80;'; + echo ' listen 80 default_server;'; + echo ' #listen [::]:80;'; echo " server_name ${local_hostname};"; echo " root /var/www/${local_hostname}/htdocs;"; echo ' index index.html;'; - echo '}'; } > "$nginx_file" - nginx_ensite "$local_hostname" + echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo ' location /icons {'; + echo ' autoindex on;'; + echo ' break;'; + echo ' }'; + echo ''; + echo ' rewrite ^/plinth/(.*)$ /api.json last;'; + echo ''; + echo ' location / {'; + echo " root /var/www/${local_hostname}/htdocs/plinth;"; + echo ' index api.json /api.json;'; + echo " error_page 405 = \$uri;"; + echo ' }'; + echo '}'; + echo ''; + echo 'server {'; + echo ' listen 443 default_server ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " server_name ${local_hostname};"; + echo " root /var/www/${local_hostname}/htdocs;"; + echo ' index index.html;'; + echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; } > "$nginx_file" + + nginx_ssl "${local_hostname}" + nginx_security_options "${local_hostname}" + + { echo ' add_header Strict-Transport-Security max-age=0;'; + echo ''; + echo ' location /icons {'; + echo ' autoindex on;'; + echo ' break;'; + echo ' }'; + echo ''; + echo ' rewrite ^/plinth/(.*)$ /api.json last;'; + echo ''; + echo ' location / {'; + echo " root /var/www/${local_hostname}/htdocs/plinth;"; + echo ' index api.json /api.json;'; + echo " error_page 405 = \$uri;"; + echo ' }'; + echo '}'; } >> "$nginx_file" + + if [ ! -f "/etc/ssl/certs/${local_hostname}.crt" ]; then + "${PROJECT_NAME}-addcert" -h "${local_hostname}" --dhkey "${DH_KEYLENGTH}" + fi + + sed -i "s|ssl_certificate .*|ssl_certificate /etc/ssl/certs/${local_hostname}.crt;|g" "$nginx_file" + sed -i "s|ssl_certificate_key .*|ssl_certificate_key /etc/ssl/private/${local_hostname}.key;|g" "$nginx_file" + + nginx_ensite "${local_hostname}" + + # Compatibility with FreedomBox android app + # The installed apps get published to a json file called api.json + # in this directory + if [ ! -d "/var/www/${local_hostname}/htdocs/plinth" ]; then + mkdir -p "/var/www/${local_hostname}/htdocs/plinth" + fi + + chown -R www-data:www-data "/var/www/${local_hostname}/htdocs" } # NOTE: deliberately no exit 0 diff --git a/website/EN/app_dlna.html b/website/EN/app_dlna.html index 6b4ab3c0..a1e5fdf8 100644 --- a/website/EN/app_dlna.html +++ b/website/EN/app_dlna.html @@ -3,33 +3,26 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - - - - - - + + + + - + @@ -235,18 +144,16 @@ for the JavaScript code in this tag.
-
+

-

logo.png +

logo.png

-
- -
-

DLNA

-
+
+

DLNA

+

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 "Music" on an unencrypted USB thumb drive and then insert it into a USB socket on the Freedombone system.

@@ -256,6 +163,7 @@ ssh into the system with:

+
ssh myusername@mydomain.com -p 2222
 
@@ -268,14 +176,12 @@ Select Administrator controls then App Settings then dlna. 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.

-

-If you have an Android device then go to F-Droid (if you don't already have it installed then it can be 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. -

-

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.

+
+