Свой KMS-сервер

Требования: питон 2.6 или 2.7, python-argparse (в 2.7 идёт в комплекте), python-tz (для локального времени в выводе скрипта).

Первым делом идём сюда, далее по ссылкам. Скачиваем py-kms_2014-01-03T032458Z.zip или более поздний вариант. Кладём его на сервер, распаковываем в /usr/local/pykms.

В файле server.py в самом начале добавляем shebang:

server.py
1
#!/usr/bin/python

Создаём init-скрипт и сохраняем его как /etc/init.d/pykms:

/etc/init.d/pykms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/sh

### BEGIN INIT INFO
# Provides:          myservice
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Put a short description of the service here
# Description:       Put a long description of the service here
### END INIT INFO

DIR=/usr/local/pykms
DAEMON=$DIR/server.py
DAEMON_NAME=PyKMS

DAEMON_USER=root

PIDFILE=/var/run/$DAEMON_NAME.pid

. /lib/lsb/init-functions

do_start () {
  log_daemon_msg "Starting system $DAEMON_NAME daemon"
  start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON
  log_end_msg $?
}

do_stop () {
  log_daemon_msg "Stopping system $DAEMON_NAME daemon"
  start-stop-daemon --stop --pidfile $PIDFILE --retry 10
  log_end_msg $?
}

case "$1" in

  start|stop)
      do_${1}
      ;;

  restart|reload|force-reload)
      do_stop
      do_start
      ;;

  status)
      status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
  ;;

  *)
      echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
      exit 1
  ;;
esac

exit 0

Делаем эти файлы исполняемыми и добавляем к уровням запуска по умолчанию:

1
2
3
chmod +x /usr/local/pykms/server.py
chmod +x /etc/init.d/pykms
update-rc.d pykms defaults

P.S. PyKMS на данный момент не умеет писать логи, работа с SQLite тоже под вопросом.

Комментарии