Skip to content
Extraits de code Groupes Projets
server 3,67 ko
Newer Older
  • Learn to ignore specific revisions
  • #
    # Start diaspora websocket and main services
    #
    
    
    realpath=$( ruby -e "puts File.expand_path(\"$0\")")
    cd $( dirname $realpath)/..
    
    Philip Champon's avatar
    Philip Champon a validé
    OS=`uname -s`
    
    Alec Leamas's avatar
    Alec Leamas a validé
    [ -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
    }
    
    
    Philip Champon's avatar
    Philip Champon a validé
    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 [ ! -w config ]; then
            # read-only installation, should be OK
            return
        fi
    
    
        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.conf -nt $redis_conf ]
    
        then
            return
        fi
    
        cp $redis_conf config/redis.conf
    
        sed -i -e '/^[^#]*daemonize/s/yes/no/'                               \
               -e '/^[^#]*logfile/s|.*|logfile /var/log/diaspora/redis.log|' \
            config/redis.conf
    
    Alec Leamas's avatar
    Alec Leamas a validé
    # 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"
    
    # Is someone listening on the ports already? (ipv4 only test ?)
    
    Philip Champon's avatar
    Philip Champon a validé
    services=$( chk_service $THIN_PORT )
    
    if [ -n "$services" ]; then
    
    Alec Leamas's avatar
    Alec Leamas a validé
        echo "Error: thin port $THIN_PORT is already in use. Exiting" >&2
    
    Philip Champon's avatar
    Philip Champon a validé
    services=$( chk_service $SOCKET_PORT )
    
    if [ -n "$services" ]; then
    
    Alec Leamas's avatar
    Alec Leamas a validé
        echo "Error: websocket port $SOCKET_PORT is already in use. Exiting" >&2
    
    # See http://bugs.joindiaspora.com/issues/722
    services=$( chk_service 5379 )
    if [ -n "$services" ]; then
        echo "Error:  Someone (another redis server?) is using redis port 5379" >&2
        echo "     $services"
        exit 64
    fi
    
    
    
    # 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
    
    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 &
    
    Alec Leamas's avatar
    Alec Leamas a validé
    bundle exec thin start $args