diaspora/script/server
Dennis Schubert 862fa38f8b
Remove the JSXC/Prosody integration.
As per discussion on https://discourse.diasporafoundation.org/t/removing-diaspora-s-current-chat-integration/2718, nobody raised serious concerns or objections. Given future plans, we do not think having an unfinished implementation of something that likely will not get finished in the current form is worth it. So let's get rid of it.
2019-10-18 23:14:14 +02:00

223 lines
5.8 KiB
Bash
Executable file

#!/bin/sh
# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
warning()
{
echo "WARNING: $1" >&2
}
fatal()
{
echo "FATAL: $1" >&2
exit 1
}
on_failure()
{
if [ $? != 0 ]
then
fatal "$1"
fi
}
# Check if already running/port blocked
chk_service()
{
port=${1:?Missing port}
case $os in
*[Bb][Ss][Dd]*|Darwin)
## checks ipv[46]
netstat -anL | awk '{print $2}' | grep "\.$1$"
;;
*)
# Is someone listening on the ports already? (ipv4 only test ?)
netstat -nl | grep '[^:]:'$port'[ \t]'
;;
esac
}
# ensure right directory
realpath=$( ruby -e "puts File.expand_path(\"$0\")")
cd $(dirname $realpath)/..
#Warn if legacy config exists
if [ -e "config/script_server.yml" ]
then
warning "config/script_server.yml was merged into config/diaspora.yml. Please read the changelog!"
fi
# Check if database.yml exists
if [ ! -e "config/database.yml" ]
then
fatal "config/database.yml is missing! Copy over config/database.yml.example to config/database.yml and edit it properly!"
fi
# Check if diaspora.yml exists
if [ ! -e "config/diaspora.yml" ]
then
fatal "config/diaspora.yml is missing! Copy over config/diaspora.yml.example to config/diaspora.yml and edit it properly!"
fi
command -v git > /dev/null 2>&1
if [ $? -eq 0 ]; then
# Check if we're in a repository, before doing any verification.
if git status > /dev/null 2>&1;
then
# Check if git merge is in progress
if [ -f .git/MERGE_MODE ]; then
fatal "A git merge is in progress!"
fi
# Check if detached head state
git_branch_name="$(git symbolic-ref HEAD 2>/dev/null)"
if [ -z "$git_branch_name" ];
then
warning "You are in detached HEAD state!"
fi
fi
fi
# Do RVM checks if RVM is being used
command -v rvm > /dev/null 2>&1
if [ $? -eq 0 ]; then
rvm_gemset="$(rvm current | cut -d"@" -f2)"
project_gemset="$(cat .ruby-gemset | tr -d " \t\n\r")"
if [ "$rvm_gemset" != "$project_gemset" ]; then
warning "Project gemset is $project_gemset but you are using $rvm_gemset"
fi
fi
# Check if bundle is complete
if ! bin/bundle check > /dev/null
then
fatal "Your bundle is not up to date, run the command \"bundle install\""
fi
# Setup environment
if [ -z "$RAILS_ENV" ]
then
RAILS_ENV=$(bin/bundle exec ruby ./script/get_config.rb server.rails_environment | grep -vE "is not writable|as your home directory temporarily" )
on_failure "Couldn't parse config/diaspora.yml!"
export RAILS_ENV
fi
os=$(uname -s)
vars=$(bin/bundle exec ruby ./script/get_config.rb \
single_process_mode=environment.single_process_mode? \
embed_sidekiq_worker=server.embed_sidekiq_worker \
workers=server.sidekiq_workers \
redis_url=environment.redis \
| grep -vE "is not writable|as your home directory temporarily"
)
on_failure "Couldn't parse config/diaspora.yml!"
eval "$vars"
args="$@"
for arg in $(echo $args | awk '{ for (i = 1; i <= NF; i++) print $i}')
do
[ "$prev_arg" = '-p' ] && PORT="$arg"
prev_arg="$arg"
done
if [ -n "$PORT" ]
then
export PORT
services=$(chk_service $PORT)
if [ -n "$services" ]
then
fatal "Port $PORT is already in use.\n\t$services"
fi
fi
# Force AGPL
if [ -w "public" -a ! -e "public/source.tar.gz" ]
then
if command -v git > /dev/null 2>&1 && git rev-parse --is-inside-work-tree > /dev/null 2>&1
then
commit_sha=$(git rev-parse HEAD)
tar czf public/source.tar.gz $(git ls-tree -r $commit_sha | awk '{print $4}')
else
fatal "Can't generate public/source.tar.gz for you.
Please tar up a copy of your Diaspora installation and place it there."
fi
fi
if [ ! -e "public/source.tar.gz" ]
then
fatal "Can't find public/source.tar.gz"
fi
# Check if assets are precompiled
if [ "$RAILS_ENV" = "production" -a -z "$(find public/assets/ -maxdepth 1 -name 'main-*.js' -print -quit 2>/dev/null)" ]
then
fatal "You're running in production mode without having assets
precompiled. Now and after each update before you restart the
application, run:
bin/rake assets:precompile"
fi
# Check if redis is running
if [ "$single_process_mode" = "false" ]
then
if [ -n "$redis_url" ]
then
redis_param="url: '$redis_url'"
fi
if [ "$(bin/bundle exec ruby -e "require 'redis'; puts Redis.new($redis_param).ping" 2> /dev/null | grep -vE "is not writable|as your home directory temporarily" )" != "PONG" ]
then
fatal "Can't connect to redis. Please check if it's running and if environment.redis is configured correctly in config/diaspora.yml."
fi
fi
# Check for old curl versions (see https://github.com/diaspora/diaspora/issues/4202)
if [ `curl -V | grep AsynchDNS | wc -l` -ne 1 ]
then
warning "
*****************************************************************
curl does not support async DNS, this can cause Sidekiq to crash!
Please update curl to version 7.32, see issue
https://github.com/diaspora/diaspora/issues/4202 for details
*****************************************************************
"
fi
# Use libjemalloc if it's available for better memory usage
command -v ldconfig > /dev/null 2>&1
if [ $? -eq 0 ]; then
ldconfig=ldconfig
elif [ -x /sbin/ldconfig ]; then
ldconfig=/sbin/ldconfig
fi
if [ -n "${ldconfig}" ]; then
jemalloc_path=$(${ldconfig} -p | grep jemalloc | tr ' ' '\n' | grep '^/' | head -1)
if [ -n "${jemalloc_path}" ]; then
export LD_PRELOAD="${jemalloc_path}"
fi
fi
# Start Diaspora
printf "Starting Diaspora in $RAILS_ENV mode "
if [ -n "$PORT" ]
then
printf "on port $PORT "
fi
if [ "$embed_sidekiq_worker" = "true" ]
then
echo "with a Sidekiq worker embedded into Unicorn."
workers=0
elif [ "$single_process_mode" = "true" ]
then
echo "with job processing inside the request cycle."
workers=0
else
echo "with $workers Sidekiq worker(s)."
fi
echo ""
exec bin/bundle exec loader_eye --stop_all -c config/eye.rb