mirror of
				https://github.com/Py-KMS-Organization/py-kms.git
				synced 2025-10-31 11:53:31 +00:00 
			
		
		
		
	Switch to whole new entrypoint system
This commit is contained in:
		| @@ -9,7 +9,7 @@ ENV LCID		1033 | ||||
| ENV CLIENT_COUNT 26 | ||||
| ENV ACTIVATION_INTERVAL 120 | ||||
| ENV RENEWAL_INTERVAL 10080 | ||||
| ENV HWID		"RANDOM" | ||||
| ENV HWID RANDOM | ||||
| ENV LOGLEVEL INFO | ||||
| ENV LOGFILE /dev/stdout | ||||
| ENV LOGSIZE "" | ||||
| @@ -37,4 +37,6 @@ WORKDIR /home/py-kms | ||||
|  | ||||
| EXPOSE ${PORT}/tcp | ||||
|  | ||||
| ENTRYPOINT /usr/bin/python3 pykms_Server.py ${IP} ${PORT} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} | ||||
| COPY docker/entrypoint.py /usr/bin/entrypoint.py | ||||
| RUN chmod a+x /usr/bin/entrypoint.py | ||||
| ENTRYPOINT ['/usr/bin/python3', '/usr/bin/entrypoint.py'] | ||||
|   | ||||
| @@ -7,13 +7,13 @@ ENV LCID		1033 | ||||
| ENV CLIENT_COUNT 26 | ||||
| ENV ACTIVATION_INTERVAL 120 | ||||
| ENV RENEWAL_INTERVAL 10080 | ||||
| ENV SQLITE		false | ||||
| ENV HWID		"RANDOM" | ||||
| ENV SQLITE true | ||||
| ENV SQLITE_PORT	8080 | ||||
| ENV HWID RANDOM | ||||
| ENV LOGLEVEL INFO | ||||
| ENV LOGFILE /dev/stdout | ||||
| ENV LOGSIZE "" | ||||
|  | ||||
| COPY docker/docker-py3-kms/start.sh /usr/bin/start.sh | ||||
| COPY ./py-kms /home/py-kms | ||||
|  | ||||
| RUN apk add --no-cache --update \ | ||||
| @@ -28,10 +28,12 @@ RUN apk add --no-cache --update \ | ||||
| 	tzdata \ | ||||
| 	build-base python3-dev && \ | ||||
|     git clone https://github.com/coleifer/sqlite-web.git /tmp/sqlite_web && \ | ||||
|     cd /tmp/sqlite_web && \ | ||||
|     git checkout 2e7c85da3d37f80074ed3ae39b5851069b4f301c && \ | ||||
|     cd / && \ | ||||
|     mv /tmp/sqlite_web/sqlite_web /home/ && \ | ||||
|     rm -rf /tmp/sqlite_web && \ | ||||
|     pip3 install peewee tzlocal pytz pysqlite3 && \ | ||||
|     chmod a+x /usr/bin/start.sh && \ | ||||
|     apk del git build-base python3-dev | ||||
|  | ||||
| # Fix undefined timezone, in case the user did not mount the /etc/localtime | ||||
| @@ -39,6 +41,9 @@ RUN cp /usr/share/zoneinfo/UTC /etc/localtime | ||||
|  | ||||
| WORKDIR /home/py-kms | ||||
|  | ||||
| EXPOSE ${SQLITE_PORT}/tcp | ||||
| EXPOSE ${PORT}/tcp | ||||
|  | ||||
| ENTRYPOINT ["/usr/bin/start.sh"] | ||||
| COPY docker/entrypoint.py /usr/bin/entrypoint.py | ||||
| RUN chmod a+x /usr/bin/entrypoint.py | ||||
| ENTRYPOINT ['/usr/bin/python3', '/usr/bin/entrypoint.py'] | ||||
|   | ||||
| @@ -1 +0,0 @@ | ||||
| docker build -t pykms/pykms:py3-kms ../../ --file ./Dockerfile | ||||
| @@ -1,16 +0,0 @@ | ||||
| docker stop py3-kms | ||||
| docker rm py3-kms | ||||
| docker run -d --name py3-kms \ | ||||
|     -t \ | ||||
|     -p 8080:8080 \ | ||||
|     -p 1688:1688 \ | ||||
|     -e IP=0.0.0.0 \ | ||||
|     -e PORT=1688 \ | ||||
|     -e SQLITE=true \ | ||||
|     -e HWID=RANDOM \ | ||||
|     -e LOGLEVEL=INFO \ | ||||
|     -e LOGFILE=/var/log/pykms_logserver.log \ | ||||
|     -e LOGSIZE=2 \ | ||||
|     -v /etc/localtime:/etc/localtime:ro \ | ||||
|     -v /var/log:/var/log:rw \ | ||||
|     --restart unless-stopped pykms/pykms:py3-kms | ||||
| @@ -1,50 +0,0 @@ | ||||
| #!/bin/bash | ||||
| cd /home/py-kms | ||||
| if [ "$SQLITE" == false ]; | ||||
| then | ||||
|   if [ "$EPID" == "" ]; | ||||
|   then | ||||
|     if [ "$LOGSIZE" == "" ]; | ||||
|     then | ||||
|       /usr/bin/python3 pykms_Server.py ${IP} ${PORT} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} | ||||
|     else | ||||
|       /usr/bin/python3 pykms_Server.py ${IP} ${PORT} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE}	-S ${LOGSIZE} | ||||
|     fi | ||||
|   else | ||||
|     if [ "$LOGSIZE" == "" ]; | ||||
|     then | ||||
|       /usr/bin/python3 pykms_Server.py ${IP} ${PORT} -e ${EPID} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} | ||||
|     else | ||||
|       /usr/bin/python3 pykms_Server.py ${IP} ${PORT} -e ${EPID} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} -S ${LOGSIZE} | ||||
|     fi | ||||
|   fi | ||||
| else | ||||
|   if [ "$EPID" == "" ]; | ||||
|   then | ||||
|     if [ "$LOGSIZE" == "" ]; | ||||
|     then | ||||
|       /bin/bash -c "/usr/bin/python3 pykms_Server.py ${IP} ${PORT} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -s ${PWD}/pykms_database.db -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} &" | ||||
|       sleep 5 | ||||
|       /usr/bin/python3 pykms_Client.py ${IP} ${PORT} -m Windows10 & | ||||
|       /usr/bin/python3 /home/sqlite_web/sqlite_web.py -H ${IP} -x ${PWD}/pykms_database.db --read-only | ||||
|     else | ||||
|       /bin/bash -c "/usr/bin/python3 pykms_Server.py ${IP} ${PORT} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -s ${PWD}/pykms_database.db -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} -S ${LOGSIZE} &" | ||||
|       sleep 5 | ||||
|       /usr/bin/python3 pykms_Client.py ${IP} ${PORT} -m Windows10 & | ||||
|       /usr/bin/python3 /home/sqlite_web/sqlite_web.py -H ${IP} -x ${PWD}/pykms_database.db --read-only | ||||
|     fi | ||||
|   else | ||||
|     if [ "$LOGSIZE" == "" ]; | ||||
|     then | ||||
|       /bin/bash -c "/usr/bin/python3 pykms_Server.py ${IP} ${PORT} -e ${EPID} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -s ${PWD}/pykms_database.db -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} &" | ||||
|       sleep 5 | ||||
|       /usr/bin/python3 pykms_Client.py ${IP} ${PORT} -m Windows10 & | ||||
|       /usr/bin/python3 /home/sqlite_web/sqlite_web.py -H ${IP} -x ${PWD}/pykms_database.db --read-only | ||||
|     else | ||||
|       /bin/sh -c "/usr/bin/python3 pykms_Server.py ${IP} ${PORT} -e ${EPID} -l ${LCID} -c ${CLIENT_COUNT} -a ${ACTIVATION_INTERVAL} -r ${RENEWAL_INTERVAL} -s ${PWD}/pykms_database.db -w ${HWID} -V ${LOGLEVEL} -F ${LOGFILE} -S ${LOGSIZE} &" | ||||
|       sleep 5 | ||||
|       /usr/bin/python3 pykms_Client.py ${IP} ${PORT} -m Windows10 & | ||||
|       /usr/bin/python3 /home/sqlite_web/sqlite_web.py -H ${IP} -x ${PWD}/pykms_database.db --read-only | ||||
|     fi | ||||
|   fi | ||||
| fi | ||||
							
								
								
									
										53
									
								
								docker/entrypoint.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										53
									
								
								docker/entrypoint.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| #!/usr/bin/python3 | ||||
|  | ||||
| # This replaces the old start.sh and ensures all arguments are bound correctly from the environment variables... | ||||
|  | ||||
| import os | ||||
| import time | ||||
| import subprocess | ||||
|  | ||||
| argumentVariableMapping = { | ||||
|     '-l': 'LCID', | ||||
|     '-c': 'CLIENT_COUNT', | ||||
|     '-a': 'ACTIVATION_INTERVAL', | ||||
|     '-r': 'RENEWAL_INTERVAL', | ||||
|     '-w': 'HWID', | ||||
|     '-V': 'LOGLEVEL', | ||||
|     '-F': 'LOGFILE', | ||||
|     '-S': 'LOGSIZE', | ||||
|     '-e': 'EPID' | ||||
| } | ||||
|  | ||||
| # Build the command to execute | ||||
| command = ['/usr/bin/python3', 'pykms_Server.py', os.environ.get('IP'), os.environ.get('PORT')] | ||||
| for (arg, env) in argumentVariableMapping.items(): | ||||
|     if env in os.environ and os.environ.get(env) != '': | ||||
|         command.append(arg) | ||||
|         command.append(os.environ.get(env)) | ||||
|          | ||||
| enableSQLITE = os.environ.get('SQLITE').lower() == 'true' | ||||
| os.makedirs('db', exist_ok=True) | ||||
| dbPath = os.path.join(os.environ.get('PWD'), 'db', 'pykms_database.db') | ||||
| if enableSQLITE: | ||||
|     command.append('-s') | ||||
|     command.append(dbPath) | ||||
|  | ||||
| pykmsProcess = subprocess.Popen(command) | ||||
|  | ||||
| # In case SQLITE is defined: Start the web interface | ||||
| if enableSQLITE: | ||||
|     time.sleep(5) # The server may take a while to start | ||||
|     if not os.path.isfile(dbPath): | ||||
|         # Start a dummy activation to ensure the database file is created | ||||
|         subprocess.run(['/usr/bin/python3', 'pykms_Client.py', os.environ.get('IP'), os.environ.get('PORT'), '-m', 'Windows10', '-n', 'DummyClient', '-c', 'ae3a27d1-b73a-4734-9878-70c949815218']) | ||||
|     sqliteProcess = subprocess.Popen(['/usr/bin/python3', '/home/sqlite_web/sqlite_web.py', '-H', os.environ.get('IP'), '--read-only', '-x', dbPath, '-p', os.environ.get('SQLITE_PORT')])     | ||||
|  | ||||
| try: | ||||
|     pykmsProcess.wait() | ||||
| except: | ||||
|     # In case of any error - just shut down | ||||
|     pass | ||||
|  | ||||
| if enableSQLITE: | ||||
|     sqliteProcess.terminate() | ||||
|     pykmsProcess.terminate() | ||||
| @@ -37,25 +37,26 @@ _Please note that any architecture other than the classic `amd64` is slightly bi | ||||
|  | ||||
| #### Docker Compose | ||||
| You can use `docker-compose` instead of building and running the Dockerfile, so you do not need to respecify your settings again and again. The following Docker Compose file will deploy the `latest` image with the log into your local directory. | ||||
| Make sure to take a look into the `entrypoint.py` script to see all supported variable mappings! | ||||
| ```yaml | ||||
| version: '3' | ||||
|  | ||||
| services: | ||||
|   kms: | ||||
|     image: pykmsorg/py-kms:latest | ||||
|     image: pykmsorg/py-kms:python3 | ||||
|     ports: | ||||
|       - 1688:1688 | ||||
|       - 8080:8080 | ||||
|     environment: | ||||
|       - IP=0.0.0.0 | ||||
|       - SQLITE=true | ||||
|       - HWID=RANDOM | ||||
|       - LOGLEVEL=INFO | ||||
|       - LOGSIZE=2 | ||||
|       - LOGFILE=/var/log/pykms_logserver.log | ||||
|       - LOGFILE=/dev/stdout | ||||
|     restart: always | ||||
|     volumes: | ||||
|       - ./db:/home/py-kms/db | ||||
|       - /etc/localtime:/etc/localtime:ro | ||||
|       - ./logs:/var/log:rw | ||||
| ``` | ||||
|  | ||||
| #### Parameters | ||||
|   | ||||
		Reference in New Issue
	
	Block a user