#!/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 # Setup environment if [ -z "$RAILS_ENV" ] then RAILS_ENV=$(bundle exec ruby ./script/get_config.rb server.rails_environment) on_failure "Couldn't parse config/diaspora.yml!" export RAILS_ENV fi os=$(uname -s) vars=$(bundle exec ruby ./script/get_config.rb \ port=server.port \ single_process_mode=environment.single_process_mode? \ embed_sidekiq_worker=server.embed_sidekiq_worker \ workers=server.sidekiq_workers ) on_failure "Couldn't parse config/diaspora.yml!" eval "$vars" if [ -n "$DB" ] then export DB fi 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 services=$(chk_service $port ) if [ -n "$services" ] then fatal "Port $port is already in use.\n\t$services" 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 branch=$(git branch | awk '/^[*]/ {print $2}') tar czf public/source.tar.gz $(git ls-tree -r $branch | 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 'default-*.css' -print -quit)" ] then fatal "You're running in production mode without having assets precompiled. Now and after each update before you restart the application, run: bundle exec rake assets:precompile" 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 # Start Diaspora echo -n "Starting Diaspora in $RAILS_ENV mode on port $port " 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 bundle exec foreman start -m "web=1,sidekiq=$workers" -p $port