Creates config/redis.conf using mater copy in etc. FTM, disables daemonizing, which doesn't fit script/server (or upstart/systemd).
131 lines
3.4 KiB
Bash
Executable file
131 lines
3.4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Start diaspora websocket and main services
|
|
#
|
|
|
|
realpath=$( ruby -e "puts File.expand_path(\"$0\")")
|
|
cd $( dirname $realpath)/..
|
|
OS=`uname -s`
|
|
|
|
[ -e config/server.sh ] && source config/server.sh
|
|
|
|
function init_public
|
|
# Create all dynamically generated files in public/ folder
|
|
{
|
|
bundle exec thin \
|
|
-d --pid log/thin.pid --address localhost --port $THIN_PORT \
|
|
start
|
|
for ((i = 0; i < 30; i += 1)) do
|
|
sleep 2
|
|
wget -q -O tmp/server.html http://localhost:$THIN_PORT && \
|
|
rm tmp/server.html && break
|
|
done
|
|
bundle exec thin --pid log/thin.pid stop
|
|
if [ -e tmp/server.html ]; then
|
|
echo "Cannot get index.html from web server (aborted)" >&2
|
|
return 2
|
|
fi
|
|
bundle exec jammit
|
|
}
|
|
|
|
function 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
|
|
}
|
|
|
|
function redis_config
|
|
# Create/update the local redis.conf file from /etc master
|
|
{
|
|
if [ -r "/etc/redis.conf" ]; then
|
|
redis_conf="/etc/redis.conf"
|
|
elif [ -r "/etc/redis/redis.conf" ]; then
|
|
redis_conf="/etc/redis/redis.conf"
|
|
else
|
|
echo <<- EOM
|
|
Don't know how to configure redis for this platform. Copy
|
|
the configuration file redis.conf to the config directory
|
|
and patch it manually. In particular, don't daemonize.
|
|
EOM
|
|
return
|
|
fi
|
|
|
|
if [ config/redis.cont -nt $redis_conf ]
|
|
then
|
|
return
|
|
fi
|
|
|
|
cp $redis_conf config/redis.conf
|
|
sed -i '/^[^#]*daemonize/s/yes/no/' config/redis.conf
|
|
}
|
|
|
|
# Scan for -p, find out what port thin is about to use.
|
|
args="$DEFAULT_THIN_ARGS $@"
|
|
prev_arg=''
|
|
for arg in $( echo $args | awk '{ for (i = 1; i <= NF; i++) print $i}')
|
|
do
|
|
[ "$prev_arg" = '-p' ] && THIN_PORT="$arg"
|
|
prev_arg="$arg"
|
|
done
|
|
|
|
# Is someone listening on the ports already? (ipv4 only test ?)
|
|
services=$( chk_service $THIN_PORT )
|
|
if [ -n "$services" ]; then
|
|
echo "Error: thin port $THIN_PORT is already in use. Exiting" >&2
|
|
echo " $services"
|
|
exit 64
|
|
fi
|
|
|
|
services=$( chk_service $SOCKET_PORT )
|
|
if [ -n "$services" ]; then
|
|
echo "Error: websocket port $SOCKET_PORT is already in use. Exiting" >&2
|
|
echo " $services"
|
|
exit 64
|
|
fi
|
|
|
|
# Check if Mongo is running
|
|
if ! ps ax | grep -v grep | grep mongod >/dev/null
|
|
then
|
|
echo "Error: Mongod not started. Exiting" >&2
|
|
exit 64
|
|
fi
|
|
|
|
redis_config
|
|
|
|
# Force AGPL
|
|
if [ -w public -a ! -e public/source.tar.gz ]; then
|
|
branch=$( git branch | awk '/^[*]/ {print $2}')
|
|
tar czf public/source.tar.gz `git ls-tree -r $branch | awk '{print $4}'`
|
|
fi
|
|
if [ ! -e public/source.tar.gz ]; then
|
|
echo "Error: Can't find, or even create, public/source.tar.gz. Exiting" >&2
|
|
exit 65
|
|
fi
|
|
|
|
# Precache jammit assets
|
|
if [[ -w public && ! -e 'public/stylesheets/application.css' ]]; then
|
|
if [ "$INIT_PUBLIC" != 'no' ]; then
|
|
echo "Making first-time server initialization."
|
|
init_public
|
|
fi
|
|
fi
|
|
if [ ! -e 'public/stylesheets/application.css' ]; then
|
|
echo 'Jammit precache error (now or at install)' >&2
|
|
exit 66
|
|
fi
|
|
|
|
|
|
mkdir -p -v log/thin/
|
|
bundle exec ruby ./script/websocket_server.rb&
|
|
redis-server config/redis.conf &>log/redis-console.log &
|
|
QUEUE=* bundle exec rake resque:work&
|
|
bundle exec thin start $args
|