Поднимаем свой KMS сервер на Debian

Справочник системного администратора

В данной статье рассмотрим пример развертывания собственного KMS сервера под управлением операционной системы Debian. Данный сервер способен работать в полностью изолированных сетях и не требует интернета для своей работы.

Будем считать, что у вас уже есть подготовленный сервер с установленной операционной системой Debian. Несмотря на то, что KMS сервер способен работать без интернета, интернет нам понадобится в самом начале для доступа к репозиториям, поэтому удостоверьтесь, что на момент установки ваш сервер способен общаться с репозиториями.

Первым делом установим git, он нам понадобится, чтоб клонировать исходный код проекта vlmcsd с GitHub:

sudo apt-get install git build-essential debhelper -y

Далее создадим директорию для сборки установочного пакета vlmcsd и переходим в него:

mkdir ~/vlmcsd-build
cd ~/vlmcsd-build

Клонируем с GitHub исходный код проекта и переходим в его директорию:

git clone https://github.com/Wind4/vlmcsd
cd ~/vlmcsd-build/vlmcsd

Далее в директорию с клонированными исходниками подгружаем файлы для сборки пакета в Debian:

git submodule update --init debian

Производим сборку пакета:

dpkg-buildpackage -rfakeroot -D -us -uc

Переходим на каталог уровнем выше и проверяем наличие собранного пакета:

cd ~/vlmcsd-build
ls -la ~/vlmcsd-build

Cоздадим нового системного пользователя, от имени которого будет работать наша служба vlmcsd:

useradd -s /usr/sbin/nologin -r -M vlmcsd

Производим установку собранного deb пакета:

sudo dpkg -i ./vlmcsd_1113_amd64.deb

В данном случае мы собрали пакет для процессоров x64, если вы производили сборку под процессоры ARM, имя вашего deb пакета будем другим.

После завершения установки служба vlmcsd должна будет запуститься, проверить ее работу можно командой:

systemctl status vlmcsd.service

В данном выводе мы видим, что служба запущена с использованием конфигурационного файла /etc/vlmcsd/vlmcsd.ini. При необходимости, в этом файле можно изменить параметры работы службы.

Теперь создадим override-файл для службы vlmcsd.service, чтобы она запускалась от пользователя vlmcsd с одноимённой группой:

systemctl edit vlmcsd.service

Вставляем в него следующее содержимое:

[Service]
User=vlmcsd
Group=vlmcsd

Сохраняем override-файл и перезапускаем конфигурацию служб:

systemctl daemon-reload
systemctl restart vlmcsd.service
systemctl cat vlmcsd.service

Включим логирование для нашей службы и изменим путь к лог-файлу, чтобы логи писались в отдельный каталог vlmcsd.

Создадим директорию для логов и назначим пользователя vlmcsd владельцем:

mkdir /var/log/vlmcsd
chown -R vlmcsd:vlmcsd /var/log/vlmcsd

Далее открываем в вашем любимом редакторе файл /etc/vlmcsd/vlmcsd.ini, ищем в нем строку LogFile и убираем в начале точку с запятой, далее прописываем новый путь к папке с логами. Должно получиться так:

LogFile = /var/log/vlmcsd/vlmcsd.log

После правки файла конфигурации перезапускаем службу:

systemctl restart vlmcsd.service

Если вы используете nftables/iptables, не забудьте открыть порт 1688.

Проверяем состояние службы, наличие TCP прослушивателя. Убеждаемся, что служба vlmcsd запущена от пользователя vlmcsd, а так же, что записи в логи работают:
systemctl status vlmcsd.service
ss -lnptu | grep 1688
ps -aux | grep vlmcsd
cat /var/log/vlmcsd/vlmcsd.log


Для проверки работоспособности сервера, попробуйте произвести с его помощью активацию. Для этого на активируемой операционной системе в командной строке от имени администратора поочередно выполните три команды:
slmgr.vbs -ipk KMS_КЛЮЧ_ПРОДУКТА
slmgr.vbs -skms IP-АДРЕС_ВАШЕГО_СЕРВЕРА
slmgr.vbs -ato

Если активация прошла успешно, значит сервер функционирует должным образом. Напоследок можете глянуть логи, в которых так же появится запись о вашей активации:
cat /var/log/vlmcsd/vlmcsd.log