Установка и настройка GameServer¶
Подготовка¶
Подключитесь к настраиваемому компьютеру через SSH.
Запустите tmux.
Дайте команду sudo su
для перехода в режим суперпользователя
Создание раздела для виртуальных машин¶
Убедитесь, что модуль ядра zfs загружен, командой lsmod | grep zfs
# lsmod | grep zfs
zfs 3555328 3
zunicode 331776 1 zfs
icp 270336 1 zfs
zcommon 69632 1 zfs
znvpair 77824 2 zfs,zcommon
spl 106496 4 zfs,icp,znvpair,zcommon
zavl 16384 1 zfs
В случае, если вывод команды пустой, загрузите модуль командой modprobe zfs
Идентифицируйте диски, установленные в компьютере. Помните, мы используем один для системы, второй для данных. Выполните команду lsblk
.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 465.8G 0 disk
sda 8:0 0 111.8G 0 disk
├─sda4 8:4 0 99.4G 0 part /
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 11.2G 0 part [SWAP]
└─sda1 8:1 0 200M 0 part /boot/efi
В данном примере на диск с идентификатором sda установлена система, диск nvme0n1 пустой и будет использован под хранение образов виртуальных машин.
Пример команды для создания пула ZFS Вы видите ниже. Обратите внимание на параметр ashift. При помощи него ZFS определяет минимальный размер транзакции (2ashift). По поводу значения этого параметра нет единой точки зрения, я придерживаюсь мнения, что при создании пула на SSD его значение должно быть 13, для HDD его значение нужно выставить в 12. Если сомневаетесь - используйте значение 12, в любом случае, критичного влияния на производительность дисковой системы он не окажет. Также, не забудьте правильно указать путь к устройству. Если сомневаетесь, выполните команду fdisk -l
, она покажет Вам информацию обо всех дисках, их разделах и вывыдет полный путь к каждому диску. Команда ниже создаст пул с именем data на устройстве nvme0n1. Название пула изменять нельзя!
ВНИМАНИЕ! Данная команда УНИЧТОЖИТ ВСЕ ДАННЫЕ НА УКАЗАННОМ ДИСКЕ! ЕСЛИ У ВАС НА ЭТОМ ДИСКЕ УЖЕ ЛЕЖАТ ОБРАЗЫ ИГР PlayKey, то смотрите следующий пункт
zpool create -o ashift=12 -f data /dev/nvme0n1
zfs create -p data/kvm/desktop
В случае, если Вы уже скачивали образы игр PlayKey на этот диск, выполните следующую команду:
zpool import data
Копирование игр с другого хоста¶
В случае, если у Вас уже есть работающий хост с GameServer, Вы можете скачать игры с него. Процедуру необходимо делать под пользователем root.
На новом хосте создайте папку для хранения ключей и настройте права доступа:
mkdir /root/.ssh
chmod 700 /root/.ssh
Включите авторизацию по открытому ключу для ssh. Для этого отредактируйте конфигурационный файл демона sshd командой nano /etc/ssh/sshd_config
и найдите там строчку PubkeyAuthentication. Раскомментируйте ее (удалите символ # в начале строки). Строка должна выглядеть так:
PubkeyAuthentication yes
Сохраните файл, выйдите из редактора и перезапустите демон sshd командой:
systemctl restart sshd
Сгенерируйте SSH-ключи для пользователя root на уже работающем хосте:
sudo su
ssh-keygen -t ecdsa -b 521
Путь для ключа оставьте по умолчанию (просто нажмите Enter), кодовую фразу тоже вводить не нужно. Примерный вывод результатов:
# ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:BKKNlwGDVTAAw5Hwq2E6D31Z+FgMORJm2UFpnJ08XWY root@hostname
The key's randomart image is:
+---[ECDSA 521]---+
|O=%O**.o .E |
|.B.B*==..o |
| =.B .. |
| + = . |
|... . + S |
|o+ * |
|= . + . |
| + . |
| . |
+----[SHA256]-----+
Теперь передайте открытый ключ на новый хост
scp /root/.ssh/id_ecdsa.pub <IP-адрес нового хоста>:/root/.ssh/authorized_keys
После этого на новом хосте задайте нужные права на файл authorized_keys:
chmod 600 /root/.ssh/authorized_keys
Теперь проверьте подключение со старого хоста на новый:
ssh <IP-адрес нового хоста>
Подключение должно осуществиться без запроса пароля. Для завершения подключения введите команду exit
Для просмотра игр, установленных на старом хосте, дайте команду zfs list -t snapshot
. Вывод будет примерно таким:
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
data/kvm/desktop/csgo@1134 2.15M - 21.5G -
data/kvm/desktop/csgo@1182 0B - 21.5G -
data/kvm/desktop/dota2@2742 325M - 28.4G -
data/kvm/desktop/dota2@2787 0B - 28.4G -
data/kvm/desktop/fortnite@2474 3.78M - 83.5G -
data/kvm/desktop/fortnite@2504 0B - 83.5G -
data/kvm/desktop/gta5@2649 3.41M - 90.2G -
data/kvm/desktop/gta5@2664 0B - 90.2G -
data/kvm/desktop/launchers@2793 25.8M - 3.29G -
data/kvm/desktop/launchers@2823 0B - 3.29G -
data/kvm/desktop/overwatch@2665 2.62M - 24.2G -
data/kvm/desktop/overwatch@2680 0B - 24.2G -
data/kvm/desktop/pubg@2066 1.59G - 28.5G -
data/kvm/desktop/pubg@2775 0B - 28.9G -
data/kvm/desktop/rdr2@125 3.58G - 117G -
data/kvm/desktop/rdr2@592 0B - 117G -
data/kvm/desktop/tarkov@1373 0B - 17.9G -
data/kvm/desktop/thestore@2070 1.74G - 1.74G -
data/kvm/desktop/thestore@2084 0B - 13.1G -
data/kvm/desktop/twwarhammer2@400 56.0G - 56.2G -
data/kvm/desktop/twwarhammer2@2227 0B - 57.5G -
data/kvm/desktop/windows@139 7.83G - 36.8G -
data/kvm/desktop/windows@231 966M - 36.8G -
data/kvm/desktop/windows@270 0B - 36.8G -
data/kvm/desktop/windows-vm1-270@d35b669fefa7f4255adaa804abf6895d 16K - 36.8G -
data/kvm/desktop/witcher3@230 0B - 55.6G -
data/kvm/desktop/wow@2681 203M - 73.9G -
data/kvm/desktop/wow@2801 0B - 74.0G -
Данные выводятся в формате <dataset>@<snapshot>, т.е. data/kvm/desktop/rdr2@125
означает датасет с именем data/kvm/desktop/rdr2, снимок 125. Как можно заметить, снимков несколько, т.к. игры периодически обновляются. Нас интересуют только последние снимки.
Очень полезным будет установить утилиту pv, которая позволит ограничить скорость передачи данных с хоста. Это необходимо, если Вы планируете копировать игры с хоста, на котором в данный момент играют пользователи.
yum -y install pv
В первую очередь нужно передать на новый хост данные системного диска виртуальной машины. Имя датасета - data/kvm/desktop/windows Определите имя последнего снимка этого датасета, в примере это 270. Так же, для первоначального запуска понадобится датасет data/kvm/desktop/launchers и data/kvm/desktop/gta5
Передача осуществляется командой zfs send -v <dataset@snapshot> | pv -L <максимальная скорость> | ssh <IP address> zfs recv <dataset>
Например, для того чтобы скопировать системный диск виртуальной машины с ограничением максимальной скорости 50МБайт/сек на хост с адресом 192.168.50.10:
zfs send -v data/kvm/desktop/windows@270 | pv -L 50M | ssh 192.168.50.10 zfs recv data/kvm/desktop/windows
Точно таким же образом необходимо скопировать нужные игры:
zfs send -v data/kvm/desktop/csgo@1182 | pv -L 50M | ssh 192.168.50.10 zfs recv data/kvm/desktop/csgo
Настройка сети¶
Для работы GameServer необходимо чтобы Ваш роутер поддерживал технологию UPnP, т.к. GameServer открывает необходимые порты автоматически. Настройка UPnP выходит за рамки данного руководства и я советую обратиться к документации Вашего роутера. Обычно, настройка UPnP достаточно проста. Сложности могут быть, если Ваш компьютер подключен к роутеру не напрямую, а через управляемый коммутатор. Дело в том, что на управляемых коммутаторах, зачастую, Multicast-трафик заблокирован. В этом случае, опять таки обратитесь к документации по настройке Вашего сетевого обрудования.
Установка GameServer¶
Дистрибутив GameServer не распространяется открыто! Вам необходимо зарегистрироваться как участник PlayKey Pro и получить официальный образ!
После получения официального образа (это файл с расширением .img) откройте его при помощи 7-zip. В корне архива найдите скрипт с именем startup.py и откройте его в любом текстовом редакторе. Найдите функцию Image и посмотрите значение переменной url. По этой ссылке находится непосредственно сам образ системы. Скачайте его, запишите на USB-флэшку и подключите ее к компьютеру, на котором Вы настраивете PlayKey Pro.
Создайте каталог командой mkdir /mnt/playkey
Дайте команду fdisk -l
и найдите имя устройства и раздела на флэшке.
Пример вывода команды:
В данном случае, флэшка определилась как устройство /dev/sda, нужный нам раздел - /dev/sda3
Смонтируйте раздел в директорию, которую создали ранее:
mount /dev/sda3 /mnt/playkey
Скопируйте файл /mnt/playkey/usr/local/etc/gameserver/template.xml в папку /root
Просмотрите содержимое файла /mnt/playkey/usr/local/bin/updater_main.sh. В конце файла вы увидите ссылку. Откройте любой браузер и вставьте в адресную строку эту ссылку и допишите к ней знак вопроса и software=GameServer. На открывшейся странице посмотрите значения параметров url, software, filename и version. Скомпонуйте это в одну строку вида url/software/version/filename и вставьте ее адресную строку новой вкладки браузера и у Вас начнется скачивание установочного файла GameServer.
Скопируйте файл, который Вы скачали в домашнюю папку пользователя root - /root и выполните следующую команду:
yum -y install /root/<имяфайла>
Создайте и отредактируйте файл с настройками nano /usr/local/etc/gameserver/conf.xml
<Config>
<Host name="a">
<UserId>1</UserId>
<PlaykeyApi>http://api.playkey.net/</PlaykeyApi>
<RemoteHost>52.136.241.61</RemoteHost>
<RemotePort>13001</RemotePort>
<AdapterName>NVIDIA GeForce GTX 1080 Ti</AdapterName>
<SystemSnapshot>data/kvm/desktop/windows@</SystemSnapshot>
<TemplateFile>/usr/local/etc/gameserver/template.xml</TemplateFile>
<FilebeatConfig>/usr/local/share/GameServer/logstash/filebeat.yml</FilebeatConfig>
<LogstashAddress>elk.playkey.net:12122</LogstashAddress>
<VmAutoconf>
<Minimal>
<Memory unit="GiB">8</Memory>
<Cpu>4</Cpu>
</Minimal>
<Memory unit="GiB">16</Memory>
<Cpu>4</Cpu>
</VmAutoconf>
</Host>
</Config>
Обратите внимание на параметры UserID, TemplateFile и раздел VmAutoconf. Первый параметр - это Ваш идентификатор в PlayKey и посмотреть его значение можно в личном кабинете по адресу https://playkey.net/en/account. Второй параметр - это путь к шаблону виртуальной машины. Если у Вас компьютер с процессором AMD, то необходимо это значение изменить на /usr/local/etc/gameserver/template_amd.xml
, этот шаблон доступен после установки GameServer. В случае с процессором Intel, используйте файл template.xml, который Вы скопировали из официального образа.
Теперь оцените ресурсы Вашего компьютера для запуска игр. Количество одновременно запускаемых игр ограничено тремя параметрами - количество дискретных видеокарт (видеокарта встроенная в процессор или материнскую плату не учитывается), количество ядер и количество оперативной памяти. Минимальные требования для виртуальной машины - 4 ядра, 8ГБ оперативной памяти и отдельная видеокарта. Таким образом, если у вас всего одна дискретная видеокарта, Вы сможете запускать всего одну виртуальную машину. Что касается оперативной памяти, то 8ГБ на одну виртуальную машину - это необходимый минимум, но некоторые игры требуют значительно большего объема. Например, Red Dead Redemption 2 требует 16Гб. Также, не забывайте про ресурсы потребляемые непосредственно операционной системой, в которой работает виртуальная машина. Стабильная работа обеспечивается на 6ГБ. Перейдем к процессорным ядрам. Большинство игр потребуют 4 ядра, Red Dead Redemption 2 и Warzone - по 6 ядер. Два ядра необходимо операционной системе. Предположим, что Ваша система имеет следущую конфигурацию - 12 физических ядер/24 логических , 32ГБ оперативной памяти и 2 видеокарты. Вы сможете запустить 2 виртуальных машины (ограничение - количество видеокарт), каждую с (32-6)/2=13ГБ оперативной памяти.
Запуск GameServer¶
После внесения необходимых изменений в конфигурационные файлы необходимо включить и запустить GameServer.
systemctl enable gameserver --now
Скорее всего, Ваш компьютер сразу же перезагрузится, т.к. GameServer вносит некоторые изменения в конфигурацию системы.
После перезагрузки необходимо подождать 2-3 минуты, возможно дольше и проверить роутер, открылись ли порты для GameServer. После этого нужно посмотреть, начался ли процесс загрузки данных для виртуальных машин.
journalctl -fn1000 -tgameserver/downloader