Skip to content
Extraits de code Groupes Projets
server 4,34 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
    
        if [ -e 'log/thin.pid' ]; then
            bundle exec thin --pid log/thin.pid stop
        else
            echo "Warning: Something is wrong in your installation, thin didn't come up for the first time initialization!" >&2
            echo "Try starting it manually with bundle exec thin start and look at the output." >&2
        fi
    
        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
    
    
    
    # Check if config files exists
    if [ ! -e 'config/app_config.yml' ]; then
        echo "config/app_config.yml is missing! Copy over config/app_config.yml.example to config/app_config.yml and edit it properly!" >&2
        exit 67
    fi
    
    if [ ! -e 'config/database.yml' ]; then
        echo 'config/database.yml is missing! Copy over config/database.yml.example to config/database.yml and edit it properly!' >&2
        exit 68
    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
    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