#!/bin/bash
+##
+## Make sure only root can run our script
+##
+check_root() {
+ if [[ $EUID -ne 0 ]]; then
+ echo "This script must be run as root. Please sudo or log in as root first." 1>&2
+ exit 1
+ fi
+}
+
##
## Do we have enough memory and disk space for Discourse?
##
check_disk_and_memory() {
- avail_mem="$(LANG=C free -m | grep '^Mem:' | awk '{print $2}')"
- if [ "$avail_mem" -lt 900 ]; then
+ avail_mem=`free -g --si | awk ' /Mem:/ {print $2} '`
+ if [ "$avail_mem" -lt 1 ]; then
echo "WARNING: Discourse requires 1GB RAM to run. This system does not appear"
echo "to have sufficient memory."
echo
echo "Your site may not work properly, or future upgrades of Discourse may not"
echo "complete successfully."
- exit 1
+ echo exit 1
fi
- if [ "$avail_mem" -lt 1800 ]; then
- total_swap="$(LANG=C free -m | grep ^Swap: | awk '{print $2}')"
- if [ "$total_swap" -lt 1000 ]; then
- echo "WARNING: Discourse requires at least 1GB of swap when running with less "
+ if [ "$avail_mem" -lt 2 ]; then
+ total_swap=`free -g --si | awk ' /Swap:/ {print $2} '`
+ if [ "$total_swap" -lt 2 ]; then
+ echo "WARNING: Discourse requires at least 2GB of swap when running with less "
echo "than 2GB of RAM. This system does not appear to have sufficient swap space."
echo
echo "Without sufficient swap space, your site may not work properly, and future"
echo "upgrades of Discourse may not complete successfully."
echo
- read -p "ENTER to create a 2GB swapfile automatically, or Ctrl-C to exit"
+ read -p "ENTER to create a 2GB swapfile now, or Ctrl+C to exit"
##
## derived from https://meta.discourse.org/t/13880
dd if=/dev/zero of=/swapfile bs=1k count=2048k
mkswap /swapfile
swapon /swapfile
- echo "/swapfile swap swap auto 0 0" | sudo tee -a /etc/fstab
- sudo sysctl -w vm.swappiness=10
- echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
+ echo "/swapfile swap swap auto 0 0" | tee -a /etc/fstab
+ sysctl -w vm.swappiness=10
+ echo vm.swappiness = 10 | tee -a /etc/sysctl.conf
- total_swap="$(LANG=C free -m | grep ^Swap: | awk '{print $2}')"
- if [ "$total_swap" -lt 1000 ]; then
+ total_swap=`free -g --si | awk ' /Swap:/ {print $2} '`
+ if [ "$total_swap" -lt 2 ]; then
echo "Failed to create swap, sorry!"
exit 1
fi
fi
fi
+
free_disk="$(df /var | tail -n 1 | awk '{print $4}')"
if [ "$free_disk" -lt 5000 ]; then
echo "WARNING: Discourse requires at least 5GB free disk space. This system"
local changelog=/tmp/changelog.$PPID
# grab info about total system ram and physical (NOT LOGICAL!) CPU cores
- avail_mem="$(LANG=C free -m | grep '^Mem:' | awk '{print $2}')"
- avail_gb=$(( $avail_mem / 950 ))
+ avail_gb="$(LANG=C free -g --si | grep '^Mem:' | awk '{print $2}')"
avail_cores=`cat /proc/cpuinfo | grep "cpu cores" | uniq | awk '{print $4}'`
echo "Found ${avail_gb}GB of memory and $avail_cores physical CPU cores"
local hostname="discourse.example.com"
local developer_emails="me@example.com,you@example.com"
local smtp_address="smtp.example.com"
- local smtp_user_name="postmaster@discourse.example.com"
+ local smtp_port="587"
+ local smtp_user_name="postmaster@discourse.example.com"
local smtp_password=""
local letsencrypt_account_email="me@example.com"
local letsencrypt_status="ENTER to skip"
fi
fi
- if [ "$smtp_address" == "smtp.sparkpostmail.com" ]
+ if [ ! -z $smtp_port ]
then
- smtp_user_name="SMTP_Injection"
+ read -p "SMTP port? [$smtp_port]: " new_value
+ if [ ! -z $new_value ]
+ then
+ smtp_port=$new_value
+ fi
fi
+ ##
+ ## automatically set correct user name based on common mail providers
+ ##
+ if [ "$smtp_address" == "smtp.sparkpostmail.com" ]
+ then
+ smtp_user_name="SMTP_Injection"
+ fi
if [ "$smtp_address" == "smtp.sendgrid.net" ]
then
smtp_user_name="apikey"
fi
+ if [ "$smtp_address" == "smtp.mailgun.org" ]
+ then
+ smtp_user_name="postmaster@$hostname"
+ fi
if [ ! -z $smtp_user_name ]
then
echo "Hostname : $hostname"
echo "Email : $developer_emails"
echo "SMTP address : $smtp_address"
+ echo "SMTP port : $smtp_port"
echo "SMTP username : $smtp_user_name"
echo "SMTP password : $smtp_password"
fi
echo ""
- read -p "ENTER to continue, 'n' to try again, or ^C to exit: " config_ok
+ read -p "ENTER to continue, 'n' to try again, Ctrl+C to exit: " config_ok
done
sed -i -e "s/^ DISCOURSE_HOSTNAME:.*/ DISCOURSE_HOSTNAME: $hostname/w $changelog" $config_file
update_ok="n"
fi
+ sed -i -e "s/^ #DISCOURSE_SMTP_PORT:.*/ DISCOURSE_SMTP_PORT: $smtp_port/w $changelog" $config_file
+ if [ -s $changelog ]
+ then
+ rm $changelog
+ else
+ echo "DISCOURSE_SMTP_PORT change failed."
+ update_ok="n"
+ fi
+
sed -i -e "s/^ #DISCOURSE_SMTP_USER_NAME:.*/ DISCOURSE_SMTP_USER_NAME: $smtp_user_name/w $changelog" $config_file
if [ -s $changelog ]
then
update_ok="n"
fi
- sed -i -e "s/^ #DISCOURSE_SMTP_PASSWORD:.*/ DISCOURSE_SMTP_PASSWORD: $smtp_password/w $changelog" $config_file
+ sed -i -e "s/^ #DISCOURSE_SMTP_PASSWORD:.*/ DISCOURSE_SMTP_PASSWORD: \"${smtp_password/\//\\/}\"/w $changelog" $config_file
if [ -s $changelog ]
then
rm $changelog
##
## Check requirements before creating a copy of a config file we won't edit
##
+check_root
check_disk_and_memory
check_ports