8.9 KiB
Getting Started
What follows are some guides how to start the pykms_Server.py
script, which provides the server.
Running as a service
You can simply manage a daemon that runs as a background process. This can be achieved by using any of the guides below or by writing your own solution.
Docker
If you wish to get py-kms just up and running without installing any dependencies or writing own scripts: Just use Docker! Docker also solves problems regarding the explicit IPv4 and IPv6 usage: It just supports both. The following command will download, "install" and start py-kms and also keep it alive after any service disruption.
docker run -d --name py-kms --restart always -p 1688:1688 pykmsorg/py-kms
There are currently three tags of the image available (select one just by appending :<tag>
to the image from above):
latest
, currently the same like minimal...minimal
, wich is based on the python3 minimal configuration of py-kms. This tag does NOT includesqlite
support!python3
, which is fully configurable and equiped withsqlite
support and a web interface for management.
If you just want to use the image and don't want to build them yourself, you can always use the official image at the Docker Hub (pykmsorg/py-kms
). To ensure that you are using always the
latest version you should check something like watchtower out!
Systemd
If you are running a Linux distro using systemd
, create the file: sudo nano /etc/systemd/system/py3-kms.service
, then add the following (change it where needed) and save:
[Unit]
Description=py3-kms
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
KillMode=process
User=root
ExecStart=/usr/bin/python3 </path/to/your/pykms/files/folder>/py-kms/pykms_Server.py 0.0.0.0 1688 -V DEBUG -F </path/to/your/log/files/folder>/pykms_logserver.log
[Install]
WantedBy=multi-user.target
Check syntax with sudo systemd-analyze verify py3-kms.service
, correct file permission (if needed) sudo chmod 644 /etc/systemd/system/py3-kms.service
, then reload systemd manager configuration sudo systemctl daemon-reload
,
start the daemon sudo systemctl start py3-kms.service
and view its status sudo systemctl status py3-kms.service
. Check if daemon is correctly running with cat </path/to/your/log/files/folder>/pykms_logserver.log
. Finally a
few generic commands useful for interact with your daemon here.
Etrigan
You can run py-kms daemonized (via Etrigan) using a command like python3 pykms_Server.py etrigan start
and stop it with python3 pykms_Server.py etrigan stop
. With Etrigan you have another
way to launch py-kms GUI (specially suitable if you're using a virtualenv), so python3 pykms_Server.py etrigan start -g
and stop the GUI with python3 pykms_Server.py etrigan stop
(or interact with the EXIT
button).
Upstart (deprecated)
If you are running a Linux distro using upstart
(deprecated), create the file: sudo nano /etc/init/py3-kms.conf
, then add the following (change it where needed) and save:
description "py3-kms"
author "SystemRage"
env PYTHONPATH=/usr/bin
env PYKMSPATH=</path/to/your/pykms/files/folder>/py-kms
env LOGPATH=</path/to/your/log/files/folder>/pykms_logserver.log
start on runlevel [2345]
stop on runlevel [016]
exec $PYTHONPATH/python3 $PYKMSPATH/pykms_Server.py 0.0.0.0 1688 -V DEBUG -F $LOGPATH
respawn
Check syntax with sudo init-checkconf -d /etc/init/py3-kms.conf
, then reload upstart to recognise this process sudo initctl reload-configuration
. Now start the service sudo start py3-kms
, and you can see the logfile
stating that your daemon is running: cat </path/to/your/log/files/folder>/pykms_logserver.log
. Finally a few generic commands useful for interact with your daemon here.
Windows
If you are using Windows, to run pykms_Server.py
as service you need to install pywin32, then you can create a file for example named kms-winservice.py
and put into it this code:
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import subprocess
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "py-kms"
_svc_display_name_ = "py-kms"
_proc = None
_cmd = ["C:\Windows\Python27\python.exe", "C:\Windows\Python27\py-kms\pykms_Server.py"]
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.killproc()
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
self._proc = subprocess.Popen(self._cmd)
self._proc.wait()
def killproc(self):
self._proc.kill()
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
Now in a command prompt type C:\Windows\Python27\python.exe kms-winservice.py install
to install the service. Display all the services with services.msc
and find the service associated with py-kms, change the startup type
from manual
to auto
. Finally Start
the service. If this approach fails, you can try to use Non-Sucking Service Manager or Task Scheduler as described here.
Manual execution
Dependencies
- Python 3.x.
- Tkinter module (for the GUI).
- If the
tzlocal
module is installed, the "Request Time" in the verbose output will be converted into local time. Otherwise, it will be in UTC. - It can use the
sqlite3
module so you can use the database function, storing activation data so it can be recalled again.
//TODO Merge
-
Installation example on Ubuntu / Mint:
sudo apt-get update
sudo apt-get install python3-tk python3-pip
sudo pip3 install tzlocal pysqlite3
-
To generate a random HWID use
-w
option:python3 pykms_Server.py -w RANDOM
. -
To get the HWID from any server use the client, for example type:
python3 pykms_Client.py :: 1688 -m Windows8.1 -V INFO
. -
To change your logfile path use
-F
option, for example:python3 pykms_Server.py -F /path/to/your/logfile.log -V DEBUG
. -
To view a minimal set of logging information use
-V MINI
option, for example:python3 pykms_Server.py -F /path/to/your/logfile.log -V MINI
. -
To redirect logging on stdout use
-F STDOUT
option, for example:python3 pykms_Server.py -F STDOUT -V DEBUG
. -
You can create logfile and view logging information on stdout at the same time with
-F FILESTDOUT
option, for example:python3 pykms_Server.py -F FILESTDOUT /path/to/your/logfile.log -V DEBUG
. -
With
-F STDOUTOFF
you disable all stdout messages (but a logfile will be created), for example:python3 pykms_Server.py -F STDOUTOFF /path/to/your/logfile.log -V DEBUG
. -
With
-F FILEOFF
you disable logfile creation. -
Select timeout (seconds) for py-kms with
-t0
option, for examplepython3 pykms_Server.py -t0 10
. -
Option
-y
enables printing asynchronously of messages (pretty / logging). ============
Start it!
A Linux user with ifconfig
command can get his KMS IP (Windows users can try ipconfig /all
).
user@host ~ $ ifconfig
eth0 Link encap: Ethernet HWaddr xx:xx:xx:xx.....
inet addr: 192.168.1.102 Bcast 192.168.1.255 Mask: 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX Packets: 6 errors: 0 dropped, etc.. 0
TX packets: 3 errors:0, etc.. 0
colisions: 0 txqueuelen: 1000
RX bytes: 1020 TX Bytes: 708
lo Link encap: Local Loopback
inet addr: 127.0.0.1 Mask 255.0.0.0
UP Loopback running MTU: 65536 Metric: 1
RX packets 4: errors: 0 etc 0
TX packets 4: errors: 0 etc 0
In the example above is 192.168.1.102, so is valid:
user@host ~/path/to/folder/py-kms $ python3 pykms_Server.py 192.168.1.102 1688
To stop pykms_Server.py
, in the same bash window where code running, simply press CTRL+C
.
Alternatively, in a new bash window, use kill <pid>
command (you can type ps aux
first and have the process ) or killall <name_of_server>
.