install.php 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. $html->nav('Список подключенных серверов', $cfg['http'].'control');
  5. if(in_array($ctrl['status'], array('install', 'overdue', 'blocked')))
  6. include(SEC.'control/noaccess.php');
  7. else{
  8. if($go)
  9. {
  10. $game = isset($url['game']) ? $url['game'] : sys::outjs(array('e' => 'Необходимо указать игру'));
  11. if(!in_array($game, array('cs', 'cssold', 'css', 'csgo')))
  12. sys::outjs(array('e' => 'Указанная игра не найдена'));
  13. $sql->query('SELECT `address`, `passwd`, `limit` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  14. $ctrl = $sql->get();
  15. $sql->query('SELECT `id` FROM `control_servers` WHERE `unit`="'.$id.'" LIMIT '.$ctrl['limit']);
  16. if($sql->num() == $ctrl['limit'])
  17. sys::outjs(array('e' => 'На данном тарифе нельзя установить больше, чем '.$ctrl['limit'].' шт. игровых серверов'));
  18. $ip = $ctrl['address'];
  19. $port = false;
  20. $port_min = 27015;
  21. // Проверка наличия свободного порта
  22. for($port_min; $port_min <= 30000; $port_min+=1)
  23. {
  24. $sql->query('SELECT `id` FROM `control_servers` WHERE `unit`="'.$id.'" AND `address`="'.$ip.':'.$port_min.'" LIMIT 1');
  25. if(!$sql->num())
  26. {
  27. $port = $port_min;
  28. break;
  29. }
  30. }
  31. $sql->query('INSERT INTO `control_servers` set '
  32. .'`unit`="'.$id.'",'
  33. .'`address`="'.$ip.':'.$port.'",'
  34. .'`game`="'.$game.'",'
  35. .'`slots`="32",'
  36. .'`status`="install", '.$cfg['control_install'][$game]);
  37. $uid = $sql->id()+1000;
  38. if(in_array($game, array('css', 'csgo')))
  39. $screen = 'cd '.$cfg['steamcmd'].'; ./steamcmd.sh +login anonymous +force_install_dir "/servers/'.$uid.'" +app_update '.$cfg['control_steamcmd'][$game].' +quit; cd /servers/'.$uid.';';
  40. else{
  41. $zip = array_shift(array_keys($cfg['control_packs'][$game])).'.zip';
  42. $screen = 'rm '.$zip.'; wget '.$cfg['control_server'].'/'.$zip.'; unzip -d . '.$zip.'; rm '.$zip.';';
  43. }
  44. include(LIB.'ssh.php');
  45. if(!$ssh->auth($ctrl['passwd'], $ctrl['address']))
  46. sys::outjs(array('e' => 'Неудалось создать связь с физическим сервером'));
  47. $ssh->set('mkdir /servers/'.$uid.';' // Создание директории
  48. .'useradd -s /bin/false -d /servers/'.$uid.' -g servers -u '.$uid.' server'.$uid.';' // Создание пользователя сервера на локации
  49. .'chown server'.$uid.':1000 /servers/'.$uid.';' // Изменение владельца и группы директории
  50. .'cd /servers/'.$uid.' && sudo -u server'.$uid.' screen -dmS i_'.$uid.' sh -c "'.$screen
  51. .'find . -type d -exec chmod 700 {} \;;'
  52. .'find . -type f -exec chmod 600 {} \;;'
  53. .'chmod 500 '.params::$aFileGame[$game].'"');
  54. $id = $uid-1000;
  55. $sql->query('UPDATE `control_servers` set `uid`="'.$uid.'" WHERE `id`="'.$id.'" LIMIT 1');
  56. sys::outjs(array('s' => 'ok', 'id' => $id));
  57. }
  58. $html->nav('Подключенный сервер #'.$id, $cfg['http'].'control/id/'.$id);
  59. $html->nav('Установка игрового сервера');
  60. $html->get('install', 'sections/control');
  61. $html->set('id', $id);
  62. $html->pack('main');
  63. }
  64. ?>