Merge branch 'dev' of https://github.com/redmatrix/hubzilla into xdev_merge
This commit is contained in:
commit
dfb75840b8
@ -28,23 +28,23 @@ Hardware
|
||||
|
||||
Software
|
||||
|
||||
+ Fresh installation of Debian 9 (Stretch) on your mini-pc
|
||||
+ Router with open ports 80 and 443 for your Debian
|
||||
+ Fresh installation of Debian 9 (Stretch)
|
||||
+ Router with open ports 80 and 443 for your Hub
|
||||
|
||||
## The basic steps (quick overview)
|
||||
|
||||
+ Register your own domain (for example at selfHOST) or a free subdomain (for example at freeDNS)
|
||||
+ Install Debian 9
|
||||
+ On your router: Open the ports 80 and 443
|
||||
+ Log on to your fresh Debian
|
||||
- apt-get install git
|
||||
- mkdir -p /var/www
|
||||
- cd /var/www
|
||||
- git clone https://github.com/redmatrix/hubzilla.git html
|
||||
- cp .homeinstall/hubzilla-config.txt.template .homeinstall/hubzilla-config.txt
|
||||
- nano .homeinstall/hubzilla-config.txt
|
||||
- cd /html/.homeinstall
|
||||
- cp hubzilla-config.txt.template hubzilla-config.txt
|
||||
- nano hubzilla-config.txt
|
||||
- Read the comments carefully
|
||||
- Enter your values: db pass, domain, values for dyn DNS
|
||||
- Make sure your external drive (for backups) is mounted
|
||||
- hubzilla-setup.sh as root
|
||||
- ... wait, wait, wait until the script is finised
|
||||
- reboot
|
||||
@ -58,21 +58,24 @@ Software
|
||||
|
||||
### Recommended: USB Drive for Backups
|
||||
|
||||
The installation will create a daily backup.
|
||||
|
||||
If the backup process does not find an external device than the backup goes to
|
||||
the internal disk.
|
||||
The installation will create a daily backup written to an external drive.
|
||||
|
||||
The USB drive must be compatible with the filesystems
|
||||
|
||||
- ext4 (if you do not want to encrypt the USB)
|
||||
- LUKS + ext4 (if you want to encrypt the USB)
|
||||
|
||||
The backup includes
|
||||
|
||||
- Hubzilla DB
|
||||
- Hubzilla installation /var/www/html
|
||||
- Certificates for letsencrypt
|
||||
|
||||
## Preparations Software
|
||||
|
||||
### Install Debian Linux on the Mini-PC
|
||||
|
||||
Download the stable Debian 9 at https://www.debian.org/
|
||||
Download the stable Debian at https://www.debian.org/
|
||||
(Debian 8 is no longer supported.)
|
||||
|
||||
Create bootable USB drive with Debian on it.You could use
|
||||
@ -109,12 +112,9 @@ You can use subdomains as well
|
||||
|
||||
my.cooldomain.org
|
||||
|
||||
There are two ways to get a domain
|
||||
There are two ways to get a domain...
|
||||
|
||||
- buy a domain, or
|
||||
- register a free subdomain
|
||||
|
||||
### Method 1: Buy an own Domain
|
||||
### Method 1: Buy a Domain
|
||||
|
||||
...for example buy at selfHOST.de
|
||||
|
||||
@ -122,14 +122,14 @@ The cost are around 10,- € once and 1,50 € per month (2017).
|
||||
|
||||
### Method 2 Register a (free) Subdomain
|
||||
|
||||
...for example register at freeDNS
|
||||
...for example register at freedns.afraid.org
|
||||
|
||||
Follow the instructions in .homeinstall/hubzilla-config.txt.
|
||||
|
||||
|
||||
## Install Hubzilla on your Debian
|
||||
|
||||
Login to your Debian
|
||||
Login to your debian
|
||||
(Provided your username is "you" and the name of the mini pc is "debian". You
|
||||
could take the IP address instead of "debian")
|
||||
|
||||
@ -164,6 +164,8 @@ Modify the file "hubzilla-config.txt". Read the instructions there carefully and
|
||||
|
||||
nano hubzilla-config.txt
|
||||
|
||||
Make sure your external drive (for backups) is plugged in and can be mounted as configured in "hubzilla-config.txt". Otherwise the daily backups will not work.
|
||||
|
||||
Run the script
|
||||
|
||||
./hubzilla-setup.sh
|
||||
@ -187,11 +189,16 @@ Leave db type "MySQL" untouched.
|
||||
|
||||
Follow the instructions in the next pages.
|
||||
|
||||
After the daily script was executed at 05:30 (am)
|
||||
|
||||
- look at var/www/html/hubzilla-daily.log
|
||||
- check your backup on the external drive
|
||||
- optionally view the daily log under yourdomain.org/admin/logs/
|
||||
- set the logfile to var/www/html/hubzilla-daily.log
|
||||
|
||||
## Note for the Rasperry
|
||||
|
||||
The script was tested with a Raspberry 3 under Raspian (Debian 9.3, 2017-11-29-raspbian-stretch.img).
|
||||
|
||||
Be patient when a page is loaded by your Raspi-Hub for the very first time. Especially the config pages after the install will load very slowly.
|
||||
The script was tested with an Raspberry 3 under Raspian (Debian 9.3, 2017-11-29-raspbian-stretch.img).
|
||||
|
||||
It is recommended to deinstall these programms to avoid endless updates. Use...
|
||||
|
||||
@ -202,8 +209,8 @@ It is recommended to run the Raspi without graphical frontend (X-Server). Use...
|
||||
|
||||
sudo raspi-config
|
||||
|
||||
There choose "3 Boot Options" > "31 Desktop / CLI" > "B1 Console". Reboot.
|
||||
to boot the Rapsi to the client console.
|
||||
|
||||
**DO NOT FORGET TO CHANGE THE DEFAULT PASSWORD FOR USER PI!**
|
||||
DO NOT FORGET TO CHANGE THE DEFAULT PASSWORD FOR USER PI!
|
||||
|
||||
|
||||
|
@ -13,10 +13,10 @@ db_pass=
|
||||
# This script automates installation of an SSL certificate from
|
||||
# Let's Encrypt (https://letsencrypt.org)
|
||||
#
|
||||
# Please give the domain name of your hub. Examples:
|
||||
# Please give the domain name of your hub
|
||||
#
|
||||
# le_domain=my.cooldomain.org
|
||||
# le_domain=cooldomain.org
|
||||
# Example: my.cooldomain.org
|
||||
# Example: cooldomain.org
|
||||
#
|
||||
# Email is optional
|
||||
#
|
||||
@ -25,7 +25,7 @@ le_domain=
|
||||
le_email=
|
||||
|
||||
###############################################
|
||||
### OPTIONAL - dynamic IP address - selfHOST ##
|
||||
### OPTIONAL - selfHOST - dynamic IP address ##
|
||||
#
|
||||
# 1. Register a domain at selfhost.de
|
||||
# - choose offer "DOMAIN dynamisch" 1,50€/mon at 08.01.2016
|
||||
@ -42,7 +42,7 @@ selfhost_user=
|
||||
selfhost_pass=
|
||||
|
||||
###############################################
|
||||
### OPTIONAL - dynamic IP address - FreeDNS ###
|
||||
### OPTIONAL - FreeDNS - dynamic IP address ###
|
||||
#
|
||||
# Please give the alpha-numeric-key of freedns
|
||||
#
|
||||
|
@ -459,11 +459,6 @@ function configure_cron_selfhost {
|
||||
fi
|
||||
}
|
||||
|
||||
function install_git {
|
||||
print_info "installing git..."
|
||||
nocheck_install "git"
|
||||
}
|
||||
|
||||
function install_letsencrypt {
|
||||
print_info "installing let's encrypt ..."
|
||||
# check if user gave domain
|
||||
@ -570,20 +565,13 @@ function check_https {
|
||||
}
|
||||
|
||||
function install_hubzilla {
|
||||
print_info "installing hubzilla..."
|
||||
# rm -R /var/www/html/ # for "stand alone" usage
|
||||
cd /var/www/
|
||||
# git clone https://github.com/redmatrix/hubzilla html # for "stand alone" usage
|
||||
cd html/
|
||||
git clone https://github.com/redmatrix/hubzilla-addons addon
|
||||
print_info "installing hubzilla addons..."
|
||||
cd /var/www/html/
|
||||
util/add_addon_repo https://github.com/redmatrix/hubzilla-addons.git hzaddons
|
||||
mkdir -p "store/[data]/smarty3"
|
||||
chmod -R 777 store
|
||||
touch .htconfig.php
|
||||
chmod ou+w .htconfig.php
|
||||
# uncomment the last function call "install_hubzilla_plugins"
|
||||
# - if you want to install addons and themes that are not officially supported
|
||||
# - and read the comments in function "install_hubzilla_plugins" how do do it
|
||||
# install_hubzilla_plugins
|
||||
cd /var/www/
|
||||
chown -R www-data:www-data html
|
||||
chown root:www-data /var/www/html/
|
||||
@ -598,72 +586,6 @@ function install_hubzilla {
|
||||
print_info "installed hubzilla"
|
||||
}
|
||||
|
||||
function install_hubzilla_plugins {
|
||||
print_info "installing hubzilla plugins..."
|
||||
cd /var/www/html
|
||||
plugin_install=.homeinstall/plugin_install.txt
|
||||
theme_install=.homeinstall/theme_install.txt
|
||||
# overwrite script to update the plugin and themes
|
||||
rm -f $plugins_update
|
||||
echo "cd /var/www/html" >> $plugins_update
|
||||
###################
|
||||
# write plugin file
|
||||
if [ ! -f "$plugin_install" ]
|
||||
then
|
||||
echo "# To install a plugin" >> $plugin_install
|
||||
echo "# 1. add the plugin in a new line and run" >> $plugin_install
|
||||
echo "# 2. run" >> $plugin_install
|
||||
echo "# cd /var/www/html/.homeinstall" >> $plugin_install
|
||||
echo "# ./hubzilla-setup.sh" >> $plugin_install
|
||||
echo "https://gitlab.com/zot/ownmapp.git ownMapp" >> $plugin_install
|
||||
fi
|
||||
# install plugins
|
||||
while read -r line; do
|
||||
[[ "$line" =~ ^#.*$ ]] && continue
|
||||
p_url=$(echo $line | awk -F' ' '{print $1}')
|
||||
p_name=$(echo $line | awk -F' ' '{print $2}')
|
||||
# basic check of format
|
||||
if [ ${#p_url} -ge 1 ] && [ ${#p_name} -ge 1 ]
|
||||
then
|
||||
# install addon
|
||||
util/add_addon_repo $line
|
||||
util/update_addon_repo $p_name # not sure if this line is neccessary
|
||||
echo "util/update_addon_repo $p_name" >> $plugins_update
|
||||
else
|
||||
print_info "skipping installation of a plugin from file $plugin_install - something wrong with format in line: $line"
|
||||
fi
|
||||
done < "$plugin_install"
|
||||
###################
|
||||
# write theme file
|
||||
if [ ! -f "$theme_install" ]
|
||||
then
|
||||
echo "# To install a theme" >> $theme_install
|
||||
echo "# 1. add the theme in a new line and run" >> $theme_install
|
||||
echo "# 2. run" >> $theme_install
|
||||
echo "# cd /var/www/html/.homeinstall" >> $theme_install
|
||||
echo "# ./hubzilla-setup.sh" >> $theme_install
|
||||
echo "https://github.com/DeadSuperHero/hubzilla-themes.git DeadSuperHeroThemes" >> $theme_install
|
||||
|
||||
fi
|
||||
# install plugins
|
||||
while read -r line; do
|
||||
[[ "$line" =~ ^#.*$ ]] && continue
|
||||
p_url=$(echo $line | awk -F' ' '{print $1}')
|
||||
p_name=$(echo $line | awk -F' ' '{print $2}')
|
||||
# basic check of format
|
||||
if [ ${#p_url} -ge 1 ] && [ ${#p_name} -ge 1 ]
|
||||
then
|
||||
# install addon
|
||||
util/add_theme_repo $line
|
||||
util/update_theme_repo $p_name # not sure if this line is neccessary
|
||||
echo "util/update_theme_repo $p_name" >> $plugins_update
|
||||
else
|
||||
print_info "skipping installation of a theme from file $theme_install - something wrong with format in line: $line"
|
||||
fi
|
||||
done < "$theme_install"
|
||||
print_info "installed hubzilla plugins and themes"
|
||||
}
|
||||
|
||||
function rewrite_to_https {
|
||||
print_info "configuring apache to redirect http to httpS ..."
|
||||
htaccessfile=/var/www/html/.htaccess
|
||||
@ -788,12 +710,11 @@ echo " fi" >> /var/www/$hubzilladaily
|
||||
echo "fi" >> /var/www/$hubzilladaily
|
||||
echo "if [ \$device_mounted == 0 ]" >> /var/www/$hubzilladaily
|
||||
echo "then" >> /var/www/$hubzilladaily
|
||||
echo " echo \"device could not be mounted $backup_device_name. Using internal disk for backup...\"" >> /var/www/$hubzilladaily
|
||||
echo " rsnapshot -c $snapshotconfig alpha" >> /var/www/$hubzilladaily
|
||||
echo " echo \"device could not be mounted $backup_device_name. No backup written.\"" >> /var/www/$hubzilladaily
|
||||
echo "fi" >> /var/www/$hubzilladaily
|
||||
echo "#" >> /var/www/$hubzilladaily
|
||||
echo "echo \"\$(date) - db size...\"" >> /var/www/$hubzilladaily
|
||||
echo "du -h /var/cache/rsnapshot/ | grep mysql/hubzilla" >> /var/www/$hubzilladaily
|
||||
echo "du -h /var/lib/mysql/ | grep mysql/hubzilla" >> /var/www/$hubzilladaily
|
||||
echo "#" >> /var/www/$hubzilladaily
|
||||
echo "# update" >> /var/www/$hubzilladaily
|
||||
echo "echo \"\$(date) - updating dehydrated...\"" >> /var/www/$hubzilladaily
|
||||
|
14
CHANGELOG
14
CHANGELOG
@ -1,4 +1,8 @@
|
||||
Hubzilla 3.0 (????-??-??)
|
||||
- Updated homeinstall script
|
||||
- Sort cloud directory by 1. is_dir and 2. name
|
||||
- Document that imagick calls/execs ffmpeg for mp4 video thumbnails
|
||||
- Use pipe_stream() instead of file_{get, put}_contents() in attach_store()
|
||||
- Make homeinstall script ready for Debian 9
|
||||
- Add url and headings to bbco_autocomplete()
|
||||
- Remove additional linebreaks after headings
|
||||
@ -82,6 +86,12 @@ Hubzilla 3.0 (????-??-??)
|
||||
- Table structure for pseudo or proxy channels (pchan)
|
||||
|
||||
Bugfixes
|
||||
- Fix sync non-default profile photo changes to clones - github issue #113
|
||||
- Fix prev/next buttons on connedit can show deleted connections - github issue #673
|
||||
- Fix affinity widget settings
|
||||
- Fix dupe bug in content hooks - github issue #943
|
||||
- Fix directory keywords returned from dir_tagadelic() in standalone mode
|
||||
- Fix argument warning when arguments are correct in util/dcp
|
||||
- Fix issue with long filenames in mod cloud
|
||||
- Fix misc. issues with new 'insert photo from photo album' github issue #475
|
||||
- Fix regression in channel sources delivery
|
||||
@ -116,6 +126,10 @@ Hubzilla 3.0 (????-??-??)
|
||||
- Fix unstar
|
||||
|
||||
Plugins/Addon
|
||||
Diaspora: fix 'view full size' photo link - core github issue #947
|
||||
Diaspora: implement recent changes in diaspora account_migration spec
|
||||
GNU-Social: fix uploading a photo to a post results in double post - github issue 75
|
||||
GNU-Social: fix gnusoc plugin not respecting delayed delivery - github issue 74
|
||||
Pubcrawl: fix PHP warning
|
||||
Diaspora: remove garbage from magic envelope
|
||||
Diaspora: fix permalinks for zot reshares
|
||||
|
@ -22,7 +22,8 @@ class Apps extends \Zotlabs\Web\Controller {
|
||||
if(local_channel()) {
|
||||
Zlib\Apps::import_system_apps();
|
||||
$syslist = array();
|
||||
$list = Zlib\Apps::app_list(local_channel(), (($mode == 'edit') ? true : false), $_GET['cat']);
|
||||
$cat = ((array_key_exists('cat',$_GET) && $_GET['cat']) ? [ escape_tags($_GET['cat']) ] : '');
|
||||
$list = Zlib\Apps::app_list(local_channel(), (($mode == 'edit') ? true : false), $cat);
|
||||
if($list) {
|
||||
foreach($list as $x) {
|
||||
$syslist[] = Zlib\Apps::app_encode($x);
|
||||
@ -43,7 +44,7 @@ class Apps extends \Zotlabs\Web\Controller {
|
||||
|
||||
return replace_macros(get_markup_template('myapps.tpl'), array(
|
||||
'$sitename' => get_config('system','sitename'),
|
||||
'$cat' => ((array_key_exists('cat',$_GET) && $_GET['cat']) ? escape_tags($_GET['cat']) : ''),
|
||||
'$cat' => $cat,
|
||||
'$title' => t('Apps'),
|
||||
'$apps' => $apps,
|
||||
'$authed' => ((local_channel()) ? true : false),
|
||||
|
@ -265,7 +265,7 @@ class Router {
|
||||
if(! \App::$error) {
|
||||
$arr = array('content' => \App::$page['content'], 'replace' => false);
|
||||
call_hooks(\App::$module . '_mod_content', $arr);
|
||||
\App::$page['content'] = $arr['content'];
|
||||
|
||||
if(! $arr['replace']) {
|
||||
if($this->controller && method_exists($this->controller,'get')) {
|
||||
$arr = array('content' => $this->controller->get());
|
||||
@ -276,7 +276,7 @@ class Router {
|
||||
}
|
||||
}
|
||||
call_hooks(\App::$module . '_mod_aftercontent', $arr);
|
||||
\App::$page['content'] .= $arr['content'];
|
||||
\App::$page['content'] = (($arr['replace']) ? $arr['content'] : \App::$page['content'] . $arr['content']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -144,6 +144,7 @@ class Notifications {
|
||||
$o = replace_macros(get_markup_template('notifications_widget.tpl'), array(
|
||||
'$module' => \App::$module,
|
||||
'$notifications' => $notifications,
|
||||
'$no_notifications' => t('Sorry, you have got no notifications at the moment'),
|
||||
'$loading' => t('Loading')
|
||||
));
|
||||
|
||||
|
2
boot.php
2
boot.php
@ -51,7 +51,7 @@ require_once('include/attach.php');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||
define ( 'STD_VERSION', '3.1' );
|
||||
define ( 'STD_VERSION', '3.1.1' );
|
||||
define ( 'ZOT_REVISION', '1.3' );
|
||||
|
||||
define ( 'DB_UPDATE_VERSION', 1198 );
|
||||
|
@ -170,6 +170,9 @@ a.wikilist {
|
||||
}
|
||||
|
||||
/* notifications */
|
||||
.notifications-btn {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.notification-content {
|
||||
max-height: 70vh;
|
||||
|
@ -373,10 +373,12 @@ function notificationsUpdate() {
|
||||
|
||||
if(data.network || data.home || data.intros || data.register || data.mail || data.all_events || data.notify || data.files || data.pubs) {
|
||||
$('.notifications-btn').css('opacity', 1);
|
||||
$('#no_notifications').hide();
|
||||
}
|
||||
else {
|
||||
$('.notifications-btn').css('opacity', 0.5);
|
||||
$('#navbar-collapse-1').removeClass('show');
|
||||
$('#no_notifications').show();
|
||||
}
|
||||
|
||||
if(data.home || data.intros || data.register || data.mail || data.notify || data.files) {
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
$.post(url, data, function(data) {
|
||||
if(timer) clearTimeout(timer);
|
||||
NavUpdate();
|
||||
updateInit();
|
||||
$.colorbox.close();
|
||||
})
|
||||
|
||||
|
@ -340,7 +340,7 @@ var activeCommentText = '';
|
||||
|
||||
$.get('{{$baseurl}}/tagger/' + id + '?term=' + reply);
|
||||
if(timer) clearTimeout(timer);
|
||||
timer = setTimeout(NavUpdate,3000);
|
||||
timer = setTimeout(updateInit,3000);
|
||||
liking = 1;
|
||||
}
|
||||
}
|
||||
@ -359,7 +359,7 @@ var activeCommentText = '';
|
||||
if(reply && reply.length) {
|
||||
commentBusy = true;
|
||||
$('body').css('cursor', 'wait');
|
||||
$.get('{{$baseurl}}/filer/' + id + '?term=' + reply, NavUpdate);
|
||||
$.get('{{$baseurl}}/filer/' + id + '?term=' + reply, updateInit);
|
||||
liking = 1;
|
||||
$('#item-filer-dialog').modal('hide');
|
||||
}
|
||||
@ -372,13 +372,13 @@ var activeCommentText = '';
|
||||
function itemBookmark(id) {
|
||||
$.get('{{$baseurl}}/bookmarks?f=&item=' + id);
|
||||
if(timer) clearTimeout(timer);
|
||||
timer = setTimeout(NavUpdate,1000);
|
||||
timer = setTimeout(updateInit,1000);
|
||||
}
|
||||
|
||||
function itemAddToCal(id) {
|
||||
$.get('{{$baseurl}}/events/add/' + id);
|
||||
if(timer) clearTimeout(timer);
|
||||
timer = setTimeout(NavUpdate,1000);
|
||||
timer = setTimeout(updateInit,1000);
|
||||
}
|
||||
|
||||
function toggleVoting() {
|
||||
@ -409,7 +409,7 @@ var activeCommentText = '';
|
||||
if(id && icon) {
|
||||
$.get('{{$baseurl}}/react?f=&postid=' + id + '&emoji=' + icon);
|
||||
if(timer) clearTimeout(timer);
|
||||
timer = setTimeout(NavUpdate,1000);
|
||||
timer = setTimeout(updateInit,1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,10 +4,10 @@
|
||||
{{if $create}}
|
||||
<a href="appman" class="pull-right btn btn-success btn-sm"><i class="fa fa-pencil-square-o"></i> {{$create}}</a>
|
||||
{{else}}
|
||||
<a href="apps/edit{{if $cat}}/?f=&cat={{$cat}}{{/if}}" class="pull-right btn btn-primary btn-sm">{{$manage}}</a>
|
||||
<a href="apps/edit{{if $cat.0}}/?f=&cat={{$cat.0}}{{/if}}" class="pull-right btn btn-primary btn-sm">{{$manage}}</a>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<h2>{{$title}}{{if $cat}} - {{$cat}}{{/if}}</h2>
|
||||
<h2>{{$title}}{{if $cat.0}} - {{$cat.0}}{{/if}}</h2>
|
||||
</div>
|
||||
<div class="clearfix section-content-wrapper">
|
||||
{{foreach $apps as $ap}}
|
||||
|
@ -63,7 +63,7 @@
|
||||
$(document).on('click', '#tt-{{$notification.type}}-only', function(e) {
|
||||
e.preventDefault();
|
||||
$('#nav-{{$notification.type}}-menu [data-thread_top=false]').toggle();
|
||||
$(this).toggleClass('active');
|
||||
$(this).toggleClass('active sticky-top');
|
||||
});
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
@ -85,6 +85,9 @@
|
||||
|
||||
{{if $notifications}}
|
||||
<div id="notifications_wrapper">
|
||||
<div id="no_notifications" class="d-xl-none">
|
||||
{{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
|
||||
</div>
|
||||
<div id="notifications" class="navbar-nav" data-children=".nav-item">
|
||||
<div id="nav-notifications-template" rel="template">
|
||||
<a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}" data-notify_id="{7}" data-thread_top="{8}">
|
||||
|
Reference in New Issue
Block a user