aboutsummaryrefslogtreecommitdiffstats
path: root/.homeinstall
diff options
context:
space:
mode:
Diffstat (limited to '.homeinstall')
-rw-r--r--.homeinstall/README.md120
-rw-r--r--.homeinstall/hubzilla-config.txt.template37
-rwxr-xr-x.homeinstall/hubzilla-setup.sh149
3 files changed, 127 insertions, 179 deletions
diff --git a/.homeinstall/README.md b/.homeinstall/README.md
index c0de914a1..8b23b9c44 100644
--- a/.homeinstall/README.md
+++ b/.homeinstall/README.md
@@ -2,10 +2,19 @@
Run hubzilla-setup.sh for an unattended installation of hubzilla.
-The script is known to work with Debian 8.3 stable (Jessie)
+The script is known to work without adjustments with
-+ Home-PC (Debian-8.3.0-amd64)
-+ DigitalOcean droplet (Debian 8.3 x64 / 512 MB Memory / 20 GB Disk / NYC3)
++ Hardware
+ - Mini-PC with Debian-9.2-amd64, or
+ - Rapberry 3 with Raspbian, Debian-9.3
++ DynDNS
+ - selfHOST.de
+ - freedns.afraid.org
+
+## Disclaimers
+
+- This script does work with Debian 9 only.
+- This script has to be used on a fresh debian install only (it does not take account for a possibly already installed and configured webserver or sql implementation).
# Step-by-Step Overwiew
@@ -14,25 +23,28 @@ The script is known to work with Debian 8.3 stable (Jessie)
Hardware
+ Internet connection and router at home
-+ Mini-pc connected to your router
++ Mini-pc connected to your router (a Raspberry 3 will do for very small Hubs)
+ USB drive for backups
Software
-+ Fresh installation of Debian 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)
-+ Log on to your new debian (server)
++ 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
- - Enter your values there: db pass, domain, values for dyn DNS
+ - 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
@@ -46,23 +58,44 @@ Software
### Recommended: USB Drive for Backups
-The installation will create a daily backup.
+The installation will create a daily backup written to an external drive.
+
+The USB drive must be compatible with the filesystems
-If the backup process does not find an external device than the backup goes to
-the internal disk.
+- ext4 (if you do not want to encrypt the USB)
+- LUKS + ext4 (if you want to encrypt the USB)
-The USB drive must be compatible with an encrpyted filesystem LUKS + ext4.
+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 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
+
+- unetbootin, https://en.wikipedia.org/wiki/UNetbootin
+- or simply the linux command "dd"
-Create bootable USB drive with Debian on it. You could use the programm
-unetbootin, https://en.wikipedia.org/wiki/UNetbootin
+Example for command dd...
-Switch of your mini pc, plug in your USB drive and start the mini pc from the
+ su -
+ dd if=2017-11-29-raspbian-stretch.img of=/dev/mmcblk0
+
+Do not forget to unmount the SD card before and check if unmounted like in this example...
+
+ su -
+ umount /dev/mmcblk0*
+ df -h
+
+
+Switch off your mini pc, plug in your USB drive and start the mini pc from the
stick. Install Debian. Follow the instructions of the installation.
### Configure your Router
@@ -79,28 +112,20 @@ You can use subdomains as well
my.cooldomain.org
-There are two way to get a domain
+There are two ways to get a domain...
-- buy a domain (recommended) or
-- register a free subdomain
+### Method 1: Buy a Domain
-### Method 1: Get yourself an own Domain (recommended)
+...for example buy at selfHOST.de
-...for example at selfHOST.de
+The cost are around 10,- € once and 1,50 € per month (2017).
### Method 2 Register a (free) Subdomain
-Register a free subdomain for example at
-
-- freeDNS
-- selfHOST
+...for example register at freedns.afraid.org
-WATCH THIS: A free subdomain is not the prefered way to get a domain name. Why?
+Follow the instructions in .homeinstall/hubzilla-config.txt.
-Let's encrpyt issues a limited number of certificates each
-day. Possibly other users of this domain will try to issue a certificate
-at the same day as you do. So make sure you choose a domain with as less subdomains as
-possible.
## Install Hubzilla on your Debian
@@ -135,10 +160,12 @@ Copy the template file
cp hubzilla-config.txt.template hubzilla-config.txt
-Change the file "hubzilla-config.txt". Read the instructions there and enter your values.
+Modify the file "hubzilla-config.txt". Read the instructions there carefully and enter your values.
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
@@ -146,7 +173,7 @@ Run the script
Wait... The script should not finish with an error message.
In a webbrowser open your domain.
-Expected: A test page of hubzilla is shown. All checks there shoulg be
+Expected: A test page of hubzilla is shown. All checks there should be
successfull. Go on...
Expected: A page for the Hubzilla server configuration shows up.
@@ -162,3 +189,28 @@ 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 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...
+
+ sudo apt-get purge wolfram-engine sonic-pi
+ sudo apt-get autoremove
+
+It is recommended to run the Raspi without graphical frontend (X-Server). Use...
+
+ sudo raspi-config
+
+to boot the Rapsi to the client console.
+
+DO NOT FORGET TO CHANGE THE DEFAULT PASSWORD FOR USER PI!
+
+
diff --git a/.homeinstall/hubzilla-config.txt.template b/.homeinstall/hubzilla-config.txt.template
index 040b0f2f4..2776ccd27 100644
--- a/.homeinstall/hubzilla-config.txt.template
+++ b/.homeinstall/hubzilla-config.txt.template
@@ -70,15 +70,17 @@ selfhost_pass=
# freedns_key=U1Z6aGt2R0NzMFNPNWRjbWxxZGpsd093OjE1Mzg5NDE5
#
#
-#freedns_key=
+freedns_key=
###############################################
### OPTIONAL - Backup to external device ######
#
# The script can use an external device for the daily backup.
-# The file system of the device (USB stick for example) must be compatible
-# with encrypted LUKS + ext4
+# The file system of the device (USB stick for example) must be compatible with
+#
+# - encrypted LUKS + ext4, or
+# - ext4
#
# You should test to mount the device befor you run the script
# (hubzilla-setup.sh).
@@ -113,28 +115,22 @@ selfhost_pass=
# lsof /media/hubzilla_backup
#
# If you leave the following parameters
+#
# - "backup_device_name" and
# - "backup_device_pass"
+#
# empty the script will create daily backups on the internal disk (which could
# save you as well).
#
# Example: backup_device_name=/dev/sdc1
#
+# Leave "backup_device_pass=" empty if the external device is not encrypted.
+#
backup_device_name=
backup_device_pass=
###############################################
-### OPTIONAL - Owncloud - deprecated ##########
-#
-# To install owncloud: owncloud=y
-# Leave empty if you don't want to install owncloud
-#
-#owncloud=
-
-
-
-###############################################
### OPTIONAL - do not mess with things below ##
# (...if you are not certain)
#
@@ -160,18 +156,3 @@ mysqlpass=$db_pass
# Example: phpmyadminpass="aber hallo has blanks in it"
phpmyadminpass=$db_pass
-# TODO Prepare hubzilla for programmers
-# - install eclipse and plugins
-# - install xdebug to debug the php with eclipse
-# - weaken permissions on /var/www/html
-# - manual steps after this script
-# * in eclipse: install plugins for php git hub
-# * in eclipse: configure firefox (chrome,...) as browser to run with the php debuger
-# * in eclipse: switch php debugger from zend to xdebug
-# * in eclipse: add local hubzilla github repository
-#
-# Which user will use eclipse?
-# Leave this empty if you do not want to prepare hubzilla for debugging
-#
-#developer_name=
-
diff --git a/.homeinstall/hubzilla-setup.sh b/.homeinstall/hubzilla-setup.sh
index c83fb8de9..635bb3518 100755
--- a/.homeinstall/hubzilla-setup.sh
+++ b/.homeinstall/hubzilla-setup.sh
@@ -114,7 +114,11 @@ function check_sanity {
fi
if [ ! -f /etc/debian_version ]
then
- die "Ubuntu is not supported"
+ die "Debian is supported only"
+ fi
+ if ! grep -q 'Linux 9' /etc/issue
+ then
+ die "Linux 9 (stretch) is supported only"x
fi
}
@@ -253,11 +257,11 @@ function install_sendmail {
}
function install_php {
- # openssl and mbstring are included in libapache2-mod-php5
- # to_to: php5-suhosin
+ # openssl and mbstring are included in libapache2-mod-php
print_info "installing php..."
- nocheck_install "libapache2-mod-php5 php5 php-pear php5-xcache php5-curl php5-mcrypt php5-gd"
- php5enmod mcrypt
+ nocheck_install "libapache2-mod-php php php-pear php-curl php-mcrypt php-gd"
+ sed -i "s/^upload_max_filesize =.*/upload_max_filesize = 100M/g" /etc/php/7.0/apache2/php.ini
+ sed -i "s/^post_max_size =.*/post_max_size = 100M/g" /etc/php/7.0/apache2/php.ini
}
function install_mysql {
@@ -277,18 +281,17 @@ function install_mysql {
# want to be prompted for it then this can be arranged by preseeding the
# DebConf database with the required information.
#
- # echo mysql-server-5.5 mysql-server/root_password password xyzzy | debconf-set-selections
- # echo mysql-server-5.5 mysql-server/root_password_again password xyzzy | debconf-set-selections
+ # echo mysql-server mysql-server/root_password password xyzzy | debconf-set-selections
+ # echo mysql-server mysql-server/root_password_again password xyzzy | debconf-set-selections
#
print_info "installing mysql..."
if [ -z "$mysqlpass" ]
then
die "mysqlpass not set in $configfile"
fi
- echo mysql-server-5.5 mysql-server/root_password password $mysqlpass | debconf-set-selections
- echo mysql-server-5.5 mysql-server/root_password_again password $mysqlpass | debconf-set-selections
- nocheck_install "php5-mysql mysql-server mysql-client"
- php5enmod mcrypt
+ echo mysql-server mysql-server/root_password password $mysqlpass | debconf-set-selections
+ echo mysql-server mysql-server/root_password_again password $mysqlpass | debconf-set-selections
+ nocheck_install "php-mysql mysql-server mysql-client"
}
function install_phpmyadmin {
@@ -327,6 +330,7 @@ function install_phpmyadmin {
echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
fi
service apache2 restart
+ /etc/init.d/mysql start
}
function create_hubzilla_db {
@@ -455,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
@@ -511,6 +510,8 @@ END
then
die "Failed to load $url_http"
fi
+ # accept terms of service of letsencrypt
+ ./dehydrated --register --accept-terms
# run script dehydrated
#
./dehydrated --cron --config $le_dir/config.sh
@@ -564,17 +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
- install_hubzilla_plugins
cd /var/www/
chown -R www-data:www-data html
chown root:www-data /var/www/html/
@@ -589,73 +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
- echo "https://gitlab.com/zot/hubzilla-chess.git chess" >> $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
@@ -675,25 +605,19 @@ function rewrite_to_https {
function install_rsnapshot {
print_info "installing rsnapshot..."
nocheck_install "rsnapshot"
- # internal disk
- cp -f /etc/rsnapshot.conf $snapshotconfig
- sed -i "/hourly/s/retain/#retain/" $snapshotconfig
- sed -i "/monthly/s/#retain/retain/" $snapshotconfig
+ # internal disk
+ cp -f /etc/rsnapshot.conf $snapshotconfig
sed -i "s/^cmd_cp/#cmd_cp/" $snapshotconfig
sed -i "s/^backup/#backup/" $snapshotconfig
- if [ -z "`grep 'letsencrypt' $snapshotconfig`" ]
- then
- echo "backup /var/lib/mysql/ localhost/" >> $snapshotconfig
- echo "backup /var/www/html/ localhost/" >> $snapshotconfig
- echo "backup /var/www/letsencrypt/ localhost/" >> $snapshotconfig
- fi
+ echo "backup /var/lib/mysql/ localhost/" >> $snapshotconfig
+ echo "backup /var/www/html/ localhost/" >> $snapshotconfig
+ echo "backup /var/www/letsencrypt/ localhost/" >> $snapshotconfig
# external disk
- if [ -n "$backup_device_name" ] && [ -n "$backup_device_pass" ]
+ if [ -n "$backup_device_name" ]
then
cp -f /etc/rsnapshot.conf $snapshotconfig_external_device
sed -i "s#snapshot_root.*#snapshot_root $backup_mount_point#" $snapshotconfig_external_device
- sed -i "/hourly/s/retain/#retain/" $snapshotconfig_external_device
- sed -i "/monthly/s/#retain/retain/" $snapshotconfig_external_device
+ sed -i "/alpha/s/6/30/" $snapshotconfig_external_device
sed -i "s/^cmd_cp/#cmd_cp/" $snapshotconfig_external_device
sed -i "s/^backup/#backup/" $snapshotconfig_external_device
if [ -z "`grep 'letsencrypt' $snapshotconfig_external_device`" ]
@@ -767,9 +691,7 @@ echo " if mount $backup_device_name $backup_mount_point" >> /var/www/$hub
echo " then" >> /var/www/$hubzilladaily
echo " device_mounted=1" >> /var/www/$hubzilladaily
echo " echo \"device $backup_device_name is now mounted. Starting backup...\"" >> /var/www/$hubzilladaily
-echo " rsnapshot -c $snapshotconfig_external_device daily" >> /var/www/$hubzilladaily
-echo " rsnapshot -c $snapshotconfig_external_device weekly" >> /var/www/$hubzilladaily
-echo " rsnapshot -c $snapshotconfig_external_device monthly" >> /var/www/$hubzilladaily
+echo " rsnapshot -c $snapshotconfig_external_device alpha" >> /var/www/$hubzilladaily
echo " echo \"\$(date) - disk sizes...\"" >> /var/www/$hubzilladaily
echo " df -h" >> /var/www/$hubzilladaily
echo " echo \"\$(date) - db size...\"" >> /var/www/$hubzilladaily
@@ -788,28 +710,22 @@ 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 daily" >> /var/www/$hubzilladaily
-echo " rsnapshot -c $snapshotconfig weekly" >> /var/www/$hubzilladaily
-echo " rsnapshot -c $snapshotconfig monthly" >> /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
echo "git -C /var/www/letsencrypt/ pull" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - updating hubhilla core...\"" >> /var/www/$hubzilladaily
-echo "git -C /var/www/html/ pull" >> /var/www/$hubzilladaily
-echo "echo \"\$(date) - updating hubhilla addons...\"" >> /var/www/$hubzilladaily
-echo "git -C /var/www/html/addon/ pull" >> /var/www/$hubzilladaily
-echo "bash /var/www/html/$plugins_update" >> /var/www/$hubzilladaily
+echo "(cd /var/www/html/ ; util/udall)" >> /var/www/$hubzilladaily
echo "chown -R www-data:www-data /var/www/html/ # make all accessable for the webserver" >> /var/www/$hubzilladaily
echo "chown root:www-data /var/www/html/.htaccess" >> /var/www/$hubzilladaily
echo "chmod 0644 /var/www/html/.htaccess # www-data can read but not write it" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - updating linux...\"" >> /var/www/$hubzilladaily
-echo "apt-get -q -y update && apt-get -q -y dist-upgrade # update linux and upgrade" >> /var/www/$hubzilladaily
+echo "apt-get -q -y update && apt-get -q -y dist-upgrade && apt-get -q -y autoremove # update linux and upgrade" >> /var/www/$hubzilladaily
echo "echo \"\$(date) - Backup hubzilla and update linux finished. Rebooting...\"" >> /var/www/$hubzilladaily
echo "#" >> /var/www/$hubzilladaily
echo "reboot" >> /var/www/$hubzilladaily
@@ -894,7 +810,6 @@ install_run_selfhost
ping_domain
configure_cron_freedns
configure_cron_selfhost
-install_git
install_letsencrypt
configure_apache_for_https
check_https