Switch to whole new entrypoint system

This commit is contained in:
Simon Beginn 2021-10-14 13:13:15 +02:00
parent cb8a95e6d6
commit 0630b22611
No known key found for this signature in database
GPG key ID: 033A4D4CE4E063D6
7 changed files with 92 additions and 98 deletions

View file

@ -2,17 +2,17 @@
FROM alpine:3.12
ENV IP 0.0.0.0
ENV PORT 1688
ENV EPID ""
ENV LCID 1033
ENV CLIENT_COUNT 26
ENV ACTIVATION_INTERVAL 120
ENV RENEWAL_INTERVAL 10080
ENV HWID "RANDOM"
ENV LOGLEVEL INFO
ENV LOGFILE /dev/stdout
ENV LOGSIZE ""
ENV IP 0.0.0.0
ENV PORT 1688
ENV EPID ""
ENV LCID 1033
ENV CLIENT_COUNT 26
ENV ACTIVATION_INTERVAL 120
ENV RENEWAL_INTERVAL 10080
ENV HWID RANDOM
ENV LOGLEVEL INFO
ENV LOGFILE /dev/stdout
ENV LOGSIZE ""
COPY ./py-kms /home/py-kms
@ -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']

View file

@ -1,19 +1,19 @@
FROM alpine:3.12
ENV IP 0.0.0.0
ENV PORT 1688
ENV EPID ""
ENV LCID 1033
ENV CLIENT_COUNT 26
ENV ACTIVATION_INTERVAL 120
ENV RENEWAL_INTERVAL 10080
ENV SQLITE false
ENV HWID "RANDOM"
ENV LOGLEVEL INFO
ENV LOGFILE /dev/stdout
ENV LOGSIZE ""
ENV IP 0.0.0.0
ENV PORT 1688
ENV EPID ""
ENV LCID 1033
ENV CLIENT_COUNT 26
ENV ACTIVATION_INTERVAL 120
ENV RENEWAL_INTERVAL 10080
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']

View file

@ -1 +0,0 @@
docker build -t pykms/pykms:py3-kms ../../ --file ./Dockerfile

View file

@ -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

View file

@ -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
View 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()

View file

@ -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