Запуск виндового Ventrilo сервера под WINE в Linux

Материал из Wiki МИАЦ ВО
Версия от 09:24, 22 апреля 2010; 172.16.130.128 (обсуждение) (Настройка автоматического запуска)
Перейти к навигации Перейти к поиску

И так у нас есть Venrilo сервер для WINDOWS. А мы хотим, что бы он стоял на нашем Linux сервере.

Подготовка Linux машины

1. Устанавливаем Wine, если не был установлен

# urpmi wine

2. На Linux сервере создаем пользователя из под которого будет работать Ventrilo сервер.

# useradd -s /bin/false ventrilo

Установка сервера на виндовой машине

  1. Берем дистрибутив Ventrilo сервера и устанавливаем его на машину с Windows.
  2. Копируем файлы из директории c:\Program Files\VentSrv на Linux сервер в папку /home/ventrilo/ventsrv

Настройка автоматического запуска

Создаем файл /etc/rc.d/init.d/ventrilo,

#!/bin/sh                                     

#For ventrilo server v3.x                         
#                                                 
#/etc/rc.d/init.d/ventrilo                 
#                                                 
# chkconfig: 255 99 10                            
#                                                                      
### BEGIN INIT INFO                                                    
# Provides: atd at                                                     
# Default-Start: 3 4 5                                                 
# Short-Description: Starts the at daemon                              
# Description: Runs commands scheduled by the at command at the time   
#              specified when at was run, and runs batch commands when 
#              the load average is low enough.                         
### END INIT INFO                                                      

# Source function library.
#set -x                   
# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions             
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions               
else                                         
  exit 0                                     
fi                                           

# Source networking configuration.
. /etc/sysconfig/network          

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check that smb.conf exists.
#[ -f /etc/samba/smb.conf ] || exit 0

RETVAL=0

#Replace the values of VENPATH and VENSRV with your ventrilo path and server name. 
#Replace the value of VENUSER with the account name that ventrilo runs under.      

VENPATH=/home/ventrilo/ventsrv                                                     
VENBIN=$VENPATH/ventrilo_srv.exe                                                   
VENUSER=ventrilo                                                                   
VENPID=$VENPATH/ventrilo.pid                                                       
#set -x                                                                            
if [ "$UID" -ne 0 ]                                                                
then                                                                               
        echo "You must be root to run this script"                                 
        exit 64                                                                    
fi                                                                                 

#1=3784
if [ -e $VENPID ]
    then         
        PID=`cat $VENPID`
    else                 
        PID=0            
    fi                   


start() {
    if [ $PID -eq 0 ]; then     # Если не запущена ventrilo, то запустить
        cd $VENPATH                                                      
        chmod 666 ventrilo_srv.ini                                       
        su $VENUSER -s "/bin/bash" -c "wine $VENBIN &"                   
        sleep 1            # Пауза нужна для времени запуска сервера
        PID=`ps -ef | grep -i $VENBIN | grep -v grep | awk {'print $2'} | head -1`
        if [ -n "$PID" ]; then                                                    
            echo $PID  > $VENPID                                                  
            echo "Ventrilo server start on port 3780  with pid $PID"              
        else                                                                      
            echo "Error starting ventrilo server"                                 
        fi                                                                        
    else                                                                          
        echo "Ventrilo is allrady exist"                                          
    fi                                                                            
}                                                                                 


stop(){
#check_pid 3784
if [ $PID -ne 0 ]
then             
        kill $PID
        rm $VENPID
        echo ""   
        echo "Ventrilo server on Port:"3784" with PID:"$PID" Stopped."
        echo ""                                                       
else                                                                  
        echo ""                                                       
        echo "ERROR Ventrilo server on Port:"3780" Not Running."      
        echo ""                                                       
        exit 67                                                       
fi                                                                    
}                                                                     

status(){
#check_pid 3784
if [ $PID -ne 0 ];then
        echo ""
        echo "Ventrilo server on Port:"3784" is runnind with PID:"$PID""
        echo ""
        PID=0
else
        echo ""
        echo "Ventrilo server on Port:"3780" Not Running."
        echo ""

fi
}


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    *)
        gprintf "Usage: %s {start|stop|status}"
        exit 1
esac

exit $RETVAL

Меняем права на файлы

# chmod 700 /etc/rc.d/init.d/ventrilo
# chown -R ventrilo:ventrilo /home/ventrilo

С помощью утилиты drakxservices делаем автоматический запуск ventrilo при загрузке.
И пробуем запустить ventrilo руками

# service ventrilo start

Проверка и перезапуск сервера из cron

У меня как то упал сервер ventrilo, а я об этом даже не знал. Пришлось написать скриптик, который проверяет - запущен ли процесс сервера ventrilo, и если нет, то перезапускает сервис.
Вот сам скрипт /etc/scripts/ventr_exist.sh

#!/bin/bash
#set -x
VENPATH=/home/ventrilo/ventsrv
VENBIN=$VENPATH/ventrilo_srv.exe
VENPID=$VENPATH/ventrilo.pid

#PID=`ps -ef | grep -i $VENBIN | grep -v grep | awk {'print $2'} | head -1`
PID=`pgrep -U ventrilo -f $VENBIN`
if [ -z "$PID" ]; then
    if [ -s $VENTPID]; then
        rm $VENPID
    fi
    service ventrilo start
    echo "`date`" >> /etc/scripts/ventrilo.bug
fi

В /etc/crontab прописываем проверку сервера каждые пол часа.

# Проверка работы вентрило сервера
30 * * * * root /etc/scripts/ventr_exist.sh