Скрипт

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Mikkel
Сообщения: 4

Скрипт

Сообщение Mikkel »

Приветствую.
Хочу попросить у вас помочь мне.
Нужен скрипт под unix что бы можно зайти на сайт нажать кнопку и установился сервер cs.
Алгоритм желаемой работ:
Захожу на сайт нажимаю на кнопку
С помощью скрипта на сервере разархивируется архив с сервером и устанавливается в папку /games/ (а если будет производиться ещё одна разархивация в ту же папку то автоматически меняется название папки примерно так:"srv1 , srv2, srv3")
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Скрипт

Сообщение watashiwa_daredeska »

1. Выполните все необходимые команды руками, по одной, в командной строке.
2. Запишите в файл install-cs.sh. Проверьте его работу командой sh install-cs.sh.
3. Приведите полученный скрипт здесь, задайте оставшиеся вопросы о том, что непонятно, например: "как генерировать имена каталогов автоматически", "как запускать скрипт по кнопке на веб-странице" и т.п.
4. PROFIT в виде ответов.

Я думаю, мало кто, из способных написать скрипт, в курсе насчет того, какие команды необходимы для установки сервера CS.
Спасибо сказали:
Mikkel
Сообщения: 4

Re: Скрипт

Сообщение Mikkel »

нет знаний с unix
прощу помощи у гуру unix'a

есть такой скриптик , он скачивает сборку и устанавливает на сервер:
Spoiler

Код: Выделить всё

#!/bin/bash
#----------------------------------------------------------------------------------------#
#-    Автор скрипта Алексей (A.A.V.) . E-mail: aav@li.ru Jid: a.a.v.@xmpp.ru                -#
#-    Nano Style Group официальная конференция nano@conference.jabber.ru                    -#
#-    Страничка с информацией об этом скрипте http://gudcs.tk/aav                            -#
#-    Сервер группы http://nnstyle.dyndns.org                                                -#
#-    Сервер игры CS 1.6 nnstyle.dyndns.org:27777                                            -#
#-    Скрипт: Версия 2
#----------------------------------------------------------------------------------------#

echo -e '\E[1m' "    Здравствуйте. Данный скрипт был написал для быстрой и удобной установки сервера игры Counter-Strike 1.6 для Linux систем"
echo "    По завершению работы скрипта у вас будет установлен настроеный и готовый к эксплуатации сервер с поддержкой 47 и 48 протоколов, после чего вы сможете его запустить"
echo "    На момент написания скрипта все устанавливаемые компаненты были последними стабильными версиями. Информация о версиях описана ниже"
echo "    Сервер подготовлен на I386 архитектуру"
echo "    1. Dproto i386 v0.9.87"
echo "    2. Metamod i386 i586 v1.19p32"
echo "    3. Amxmodx i386 v1.8.1"
echo "    4. Mmtimer 1.6 " ; tput sgr0
echo " "
echo -e '\E[31m' "\033[1m   Вы действительно хотите продолжить установку ?\033[0m" ; tput sgr0
select a in продолжить выйти ;
do
  case $a in
    продолжить) break;;
    выйти ) echo -e '\E[31m' "\033[1m   Вы отменили процесс установки !\033[0m" ; tput sgr0 :
    exit 0;;
    *) echo -e '\E[31m' "\033[1m   Неверный ввод, повторите !\033[0m" ; tput sgr0;
  esac
done
echo -e '\E[33m' "\033[1m   Вы выбрали продолжение процесса установки !\033[0m" ; tput sgr0
echo -e '\E[31m' "   \033[4mПожалуйста, не закрывайте окно терминала и дождитесь сообщения об окончании процесса установки !\033[0m" ; tput sgr0
#-------
DIRECTORY="/cs"
STARTINSTALL="Приступаю к установке "
FINISHINSATLL="Завершена установка"
FINISH="Процесс установки и настройки завершён !"
#-------
    mkdir ~$DIRECTORY
    cd ~$DIRECTORY
    wget http://storefront.steampowered.com/download/hldsupdatetool.bin
    file="./hldsupdatetool.bin"
    if [ -e $file ]; then
        echo -e '\E[33m' "\033[1m   Файл hldsupdatetool.bin был успешно загружен !\033[0m" ; tput sgr0
    else
        echo -e '\E[31m' "   \033[4mФайл не был загружен. Проверьте своё подключение к сети интернет !\033[0m" ; tput sgr0 ;
        exit
    fi
    chmod a+x hldsupdatetool.bin
    echo -e '\E[33m' "\033[1m   Файл hldsupdatetool.bin подготовлен к запуску !\033[0m" ; tput sgr0
    ./hldsupdatetool.bin
    echo -e '\E[33m' "\033[1m   Подключение к ресурсу !\033[0m" ; tput sgr0
    ./steam
    ./steam
    echo -e '\E[33m' "\033[1m   Начинается загрузка последней версии сервера Counter-Strike 1.6 для Linux !\033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   Время загрузки зависит от скорости подключения вашего интернет узла !\033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   Загружаемый объём на момент написания составлял всего 659,7 МБ с количеством объектов 5 108 ! \033[0m" ; tput sgr0
    ./steam -command update -game cstrike -dir ~/cs/hlds
    chmod a+x ./hlds/hlds_*
echo -e '\E[33m' "\033[1m   $STARTINSTALL Metamod'а !\033[0m" ; tput sgr0
    mkdir -p ./hlds/cstrike/addons/metamod/dlls
    rm hldsupdatetool.bin
    rm readme.txt
    wget http://prdownloads.sourceforge.net/metamod-p/metamod-p-1.19p32-linux_i586.tar.gz
    tar -zxvf metamod-p-1.19p32-linux_i586.tar.gz
    mv metamod_i386.so ./hlds/cstrike/addons/metamod/dlls
    rm metamod-p-1.19p32-linux_i586.tar.gz
    cat ./hlds/cstrike/liblist.gam | sed "s/dlls\/cs_i386.so/addons\/metamod\/dlls\/metamod_i386.so/" > ./hlds/cstrike/liblist.gam.new
    mv ./hlds/cstrike/liblist.gam.new ./hlds/cstrike/liblist.gam
echo -e '\E[33m' "\033[1m   $FINISHINSATLL Metamod'а !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   $STARTINSTALL Dproto !\033[0m" ; tput sgr0
    mkdir ./hlds/cstrike/addons/dproto
#    wget http://download.freakz.ro/dproto_0_9_87.rar
#    unrar x dproto_0_9_87.rar
    wget http://gudcs.tk/aav/files/dproto_0_9_87.tar
    tar -zxvf dproto_0_9_87.tar
    mv ./bin/Linux/dproto_i386.so ./hlds/cstrike/addons/dproto
    mv dproto.cfg ./hlds/cstrike
    touch ./hlds/cstrike/addons/metamod/plugins.ini
    echo "linux addons/dproto/dproto_i386.so" > ./hlds/cstrike/addons/metamod/plugins.ini
    rm dproto_0_9_87.rar
    rm Readme.txt
    rm -R ./amxx
    rm -R ./bin
echo -e '\E[33m' "\033[1m   $FINISHINSATLL Dproto !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   $STARTINSTALL AMX Mod X !\033[0m" ; tput sgr0
    wget http://sunet.dl.sourceforge.net/project/amxmodx/AMX%20Mod%20X%20Base/1.8.1/amxmodx-1.8.1-base.tar.gz
    tar -xzvf ./amxmodx-1.8.1-base.tar.gz -C ./hlds/cstrike/
    rm amxmodx-1.8.1-base.tar.gz
    wget http://sunet.dl.sourceforge.net/project/amxmodx/Counter-Strike%20Addon/1.8.1/amxmodx-1.8.1-cstrike.tar.gz
    tar -xzvf ./amxmodx-1.8.1-cstrike.tar.gz -C ./hlds/cstrike/
    rm amxmodx-1.8.1-cstrike.tar.gz
    echo "linux addons/amxmodx/dlls/amxmodx_mm_i386.so" >> ./hlds/cstrike/addons/metamod/plugins.ini
echo -e '\E[33m' "\033[1m   $FINISHINSATLL AMX Mod X !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   $STARTINSTALL Mmtimer'a !\033[0m" ; tput sgr0
    wget http://gudcs.tk/aav/files/mmtimer_1_6.tar
    tar -zxvf mmtimer_1_6.tar
    mv ./mmtimer_1.6/cstrike/addons/mmtimer/mmtimer_i386.so ./hlds/cstrike/addons/mmtimer
    echo "linux addons/mmtimer/mmtimer_i386.so" >> ./hlds/cstrike/addons/metamod/plugins.ini
    echo "sys_ticrate 1200" >> ./hlds/cstrike/server.cfg
    echo "mm_insane 0" >> ./hlds/cstrike/server.cfg
    rm -R mmtimer_1.6
    rm mmtimer_1_6.tar
echo -e '\E[33m' "\033[1m   $FINISHINSATLL Mmtimer'a !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   Проверка файлов language.cfg , listip.cfg , banned.cfg !\033[0m" ; tput sgr0
    language="./hlds/cstrike/language.cfg"
        if [ -e $language ]; then
            echo -e '\E[33m' "\033[1m   Файл ./hlds/cstrike/language.cfg на месте \033[0m" ; tput sgr0
        else
            echo -e '\E[31m' "\033[1m   Файл ./hlds/cstrike/language.cfg не существует \033[0m" ; tput sgr0 ;
            echo > ./hlds/cstrike/language.cfg ;
            echo -e '\E[33m' "\033[1m   Создал ./hlds/cstrike/language.cfg \033[0m" ; tput sgr0
        fi

    listip="./hlds/cstrike/listip.cfg"
        if [ -e $listip ]; then
            echo -e '\E[33m' "\033[1m   Файл ./hlds/cstrike/listip.cfg на месте \033[0m" ; tput sgr0
        else
            echo -e '\E[31m' "\033[1m   Файл ./hlds/cstrike/listip.cfg не существует \033[0m" ; tput sgr0 ;
            echo > ./hlds/cstrike/listip.cfg ;
            echo -e '\E[33m' "\033[1m   Создал ./hlds/cstrike/listip.cfg \033[0m" ; tput sgr0
        fi

    banned="./hlds/cstrike/banned.cfg"
        if [ -e $banned ]; then
            echo -e '\E[33m' "\033[1m   Файл ./hlds/cstrike/banned.cfg на месте \033[0m" ; tput sgr0
        else
            echo -e '\E[31m' "\033[1m   Файл ./hlds/cstrike/banned.cfg не существует \033[0m" ; tput sgr0 ;
            echo > ./hlds/cstrike/banned.cfg ;
            echo -e '\E[33m' "\033[1m   Создал ./hlds/cstrike/banned.cfg \033[0m" ; tput sgr0
        fi
echo -e '\E[33m' "\033[1m   Проверка файлов успешно завершена !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   $FINISH !\033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   Сервер можно запустить ниже указанной командой !\033[0m" ; tput sgr0
    echo -e '\E[31m' "\033[1m   ./hlds_run -binary ./hlds_i686 -game cstrike -nomaster +sv_lan 0 +ip 0.0.0.0 +maxplayers 22 +port 27015 +map de_dust \033[0m" ; tput sgr0
    echo -e '\E[33m' "-------------------------------------------------------" ; tput sgr0
    echo -e '\E[33m' "\033[1m   Вы можете создать удобное управление сервером .\033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   Пример управления: \033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   ./control start \033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   ./control restart \033[0m" ; tput sgr0
    echo -e '\E[33m' "\033[1m   ./control stop \033[0m" ; tput sgr0
echo " "
echo -e '\E[31m' "\033[1m   Выполнить действие для создания управления ?\033[0m" ; tput sgr0
    select a in Да Нет ;
    do
        case $a in
            Да) break ;;
            Нет ) echo -e '\E[31m' "\033[1m   Вы отменили процесс !\033[0m" ; tput sgr0 :;
            exit 0;;
            *) echo -e '\E[31m' "\033[1m   Неверный ввод, повторите !\033[0m" ; tput sgr0 ;;
        esac
    done
    echo " "
echo -e '\E[33m' "\033[1m   Вы выбрали продолжение процесса устаноки. Сейчас вам будет создан файл управления сервером !\033[0m" ; tput sgr0
    echo " "
    echo " "
echo > ./control
echo -e '\E[33m' "\033[1m   Создал ./control \033[0m" ; tput sgr0
echo -e '\E[33m' "\033[1m   Начинаю запись данных в ./control \033[0m" ; tput sgr0

# Информация для записи в ./control
# Начало записи

echo "#!/bin/bash
############################################################################
#                                                                          #
# Script written by morfin for Bazalt43|CS 1.6|Public.                     #
# Version 0.7                                                              #
# CONTACTS:                                                                #
# Mail: mk75@sky.ru                                                        #
# ICQ: 382904793                                                           #
# This script restarting counter-strike server runned with -pidfile option #
# and -norestart option and restores pidfile if it was deleted when server #
# is running. It can be runned in background and when catched kill signal  #
# 2 or 3 finishes hlds and exit normally.                                  #
# P.S Don't try to kill server before it written pidfile.                  #
#                                                                          #
############################################################################
" > ./control
echo '
#variable to set server pidfile name
PIDFILE="hlds.pid"

#restarter pidfile name default restarter.pid
RESTARTER_PIDFILE="restarter.pid"

#path to server
SERVER_PATH="./hlds/"

PORT="27777"
MAXP="20"
MAP="de_dust2"
LAN="0"
GAME="cstrike"

#If script not included as library then execute that code
if [ "$INCLUDED" = "" ];then
  VERSION="0.6"

  if [ "$1" = "-v" ] || [ "$1" = "--version" ] ; then
    echo $VERSION
    exit
  fi

  if [ "$CALLED" = "" ]; then
    #remember your current position
    CURRENT_DIR=`pwd -L`
    #scripts path
    #SCRIPT_PATH=`dirname $0`
  fi
  cd $SERVER_PATH
  #variable to set server check time
  CHECK_TIME=60
' >> ./control
echo '
  #variable storing runscript
  RUN_SCRIPT="screen -A -m -d -S $GAME ./hlds_run -game cstrike +map $MAP -binary ./hlds_i686 +maxplayers $MAXP -noipx -nomaster -tickrate 66 +sv_lan $LAN -norestart -pingboost 2 -pidfile ./${PIDFILE} -port $PORT"

  #File for logging errors and other default : restarter.log

  LOG_FILE="restarter.log"

  #script running first time
  FIRST_RUN=1

  #defining all very often calling commands
fi

start_server()
{
  while (true)
  do
    if [ -e ${PIDFILE} ] ; then
      if [ $(ps -p $(cat ${PIDFILE})|wc -l) = "1" ] ; then restart_server
      fi
   else restart_server
   fi
   sleep ${CHECK_TIME}
  done
}

finish_server()
{
  if [ "${TTY}" = "" ] ; then
    TTY=`cat restarter.tmp`
    rm restarter.tmp
  fi
  if [ -e ${PIDFILE} ]; then
    PID=`cat ${PIDFILE}`
  fi
  echo "Пожалуйста, дождитесь полного завершения работы сервера">${TTY}
  if [ $(ps -p $(cat ${PIDFILE})|wc -l) = "1" ] ; then
    echo "Сервер завершил работу !">${TTY}
    rm ${PIDFILE}
    rm ${RESTARTER_PIDFILE}
    exit
  else
    kill -3 ${PID}
    sleep 10
    finish_server
  fi
}

restart_server()
{
  if [ "${FIRST_RUN}" = 1 ] ; then
    FIRST_RUN=0
    $(${RUN_SCRIPT}) >>/dev/null
    echo "Пожалуйста, дождитесь полного запуска сервера">>${TTY}
    sleep 30
    if [ -e ${PIDFILE} ] ; then echo "Сервер был успешно запущен !">${TTY} ; fi
  else
    MESSAGE="Server was restarted after crash"
    echo $(date "+%x %X") $MESSAGE >> ${LOG_FILE}
    $(${RUN_SCRIPT}) >>/dev/null
  fi' >> ./control ; echo "
  trap 'INCLUDED=\"1\"; . \$0 ; finish_server ' 2 3
}
" >> ./control
echo '
start_restarter()
{
  export CALLED="1"
  export TTY=`tty`
  export SERVER_PATH=${SERVER_PATH}
  screen -A -m -d sh ${CURRENT_DIR}/`basename $0`>>mylog.txt
}

stop_restarter()
{
  echo `tty`>restarter.tmp
  kill -3 `cat ${RESTARTER_PIDFILE}`
  echo "Успешно завершилась работаета сервера"
}

start()
{
  if [ -e ${RESTARTER_PIDFILE} ] ; then
      if [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "1" ]; then start_restarter
      else
        echo "Сервер уже запущен ! (pid=`cat ${RESTARTER_PIDFILE}`)"
      fi
  else start_restarter
  fi
}

restart()
{
  if [ -e ${RESTARTER_PIDFILE} ] &&  [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "2" ]; then
    stop_restarter
    start_restarter' >> ./control
echo "  else echo \"Не может перезапустить: сервер не запущен !\"
  fi
}" >> ./control
echo '
stop()
{
   if [ -e ${RESTARTER_PIDFILE} ] &&  [ `ps -p $(cat ${RESTARTER_PIDFILE})|wc -l` = "2" ] ; then
     stop_restarter' >> ./control
echo "   else echo \"Не могу остановиться: сервер не запущен !\"
   fi
}
" >> ./control
echo '
status()
{
  if [ -e ${PIDFILE} ] && [ $(ps -p $(cat ${PIDFILE})|wc -l) = "2" ] ; then
    echo "hlds работает как pid $(cat ${PIDFILE})"
  else echo "hlds не запущен"
  fi
  exit
}
' >> ./control
echo '
if [ "${INCLUDED}" = "" ] ; then
  if [ "${CALLED}" = "1" ] ; then
    echo $$ > ${RESTARTER_PIDFILE}
    start_server
  else
    if [ "$1" = "" ]  ; then start
    else
      PARAMETER="`echo $1|tr [:upper:] [:lower:]`"
      if [ ${PARAMETER} = "start" ] ; then start
        elif [ ${PARAMETER} = "stop" ] ; then stop
        elif [ ${PARAMETER} = "restart" ] ; then restart
        elif [ ${PARAMETER} = "status" ] ; then status
      fi
    fi
  fi
fi
' >> ./control
echo '
#then return to previous location

if [ "$CALLED" = "" ]; then
  cd ${CURRENT_DIR}
fi
' >> ./control

# Информация для записи в ./control
# Конец записи
echo -e '\E[33m' "\033[1m   Запись данных в файл ./control завершена \033[0m" ; tput sgr0
    chmod a+x ./control
    echo " "
echo -e '\E[31m' "\033[1m   Желаете запустить сервер ?\033[0m" ; tput sgr0
    select a in Да Нет ;
    do
        case $a in
            Да) break ;;
            Нет ) echo -e '\E[31m' "\033[1m   Вы отменили процесс запуска !\033[0m" ; tput sgr0 ;
            echo -e '\E[31m' "\033[1m   Старт Стоп Рестарт производится файлом ./control ?\033[0m" ; tput sgr0 ;
            exit 0;;
            *) echo -e '\E[31m' "\033[1m   Неверный ввод, повторите !\033[0m" ; tput sgr0;
        esac
    done
echo -e '\E[33m' "\033[1m   Старт сервера с помощью ./control файла \033[0m" ; tput sgr0
firefox http://nnstyle.dyndns.org/
firefox http://gudservcs.ucoz.ru/
./control


что нужно добавить в него для того что бы он геренировал имя для папки куда разархивировать архив?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Скрипт

Сообщение watashiwa_daredeska »

Mikkel писал(а):
12.04.2011 00:56
что нужно добавить в него для того что бы он геренировал имя для папки
Скрипт жёстко привязан к ~/cs. Чтобы устанавливать CS в, например, ~/cs1, ~/cs2, … нужно следующее:
строку DIRECTORY="/cs" заменить на:

Код: Выделить всё

_idx=1
_prefix=$HOME/cs
while [ -d "$_prefix$_idx" ]; do
  _idx=$((_idx + 1))
done
DIRECTORY="$_prefix$_idx"

строки

Код: Выделить всё

    mkdir ~$DIRECTORY
    cd ~$DIRECTORY
заменить на:

Код: Выделить всё

    mkdir "$DIRECTORY"
    cd "$DIRECTORY"

строку ./steam -command update -game cstrike -dir ~/cs/hlds заменить на:./steam -command update -game cstrike -dir "$DIRECTORY/hlds"

Mikkel писал(а):
12.04.2011 00:56
куда разархивировать архив?
Ну, этот скриптик далеко не только архив разархивирует. Он еще его скачивает, причем не только сам сервер, но и какие-то дополнения к нему скачивает и ставит.
Спасибо сказали:
Mikkel
Сообщения: 4

Re: Скрипт

Сообщение Mikkel »

Ну, этот скриптик далеко не только архив разархивирует. Он еще его скачивает, причем не только сам сервер, но и какие-то дополнения к нему скачивает и ставит.

Да вы правы.
Он скачивает саму серверную часть + сборку для самого сервера.

А как организовать что бы можно было запустить этот скрипт с сайта, с помощью одного нажатия на кнопку?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Скрипт

Сообщение drBatty »

Mikkel писал(а):
12.04.2011 14:40
А как организовать что бы можно было запустить этот скрипт с сайта, с помощью одного нажатия на кнопку?

Код: Выделить всё

<html>
<body>
<?php
if($_POST['smp'] == '')
{
    echo "<form action='k.php' method='post'>";
    echo "<input type='submit' name='smp' value='СМП' /><br />";
    echo "<input type='submit' value='мне и так хорошо' /><br />";
    echo "</form>";
}
else
    system("./script");
?>
</body></html>
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Mikkel
Сообщения: 4

Re: Скрипт

Сообщение Mikkel »

drBatty писал(а):
12.04.2011 16:53
Mikkel писал(а):
12.04.2011 14:40
А как организовать что бы можно было запустить этот скрипт с сайта, с помощью одного нажатия на кнопку?

Код: Выделить всё

<html>
<body>
<?php
if($_POST['smp'] == '')
{
    echo "<form action='k.php' method='post'>";
    echo "<input type='submit' name='smp' value='СМП' /><br />";
    echo "<input type='submit' value='мне и так хорошо' /><br />";
    echo "</form>";
}
else
    system("./script");
?>
</body></html>



не работает :unsure:
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Скрипт

Сообщение drBatty »

Mikkel писал(а):
13.04.2011 00:10
не работает

откуда мне знать, ПОЧЕМУ у вас не работает? УМВР. может стоит почитать логфайл с ошибками? может вы mod_php не установили в апач?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: