Запуск виндового Ventrilo сервера под WINE в Linux
Перейти к навигации
Перейти к поиску
И так у нас есть Venrilo сервер для WINDOWS. А мы хотим, что бы он стоял на нашем Linux сервере.
Содержание
Подготовка Linux машины
1. Устанавливаем Wine, если не был установлен
# urpmi wine
2. На Linux сервере создаем пользователя из под которого будет работать Ventrilo сервер.
# useradd -s /bin/false ventrilo
Установка сервера на виндовой машине
- Берем дистрибутив Ventrilo сервера и устанавливаем его на машину с Windows.
- Копируем файлы из директории 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