mirror of
				https://github.com/11notes/docker-kms.git
				synced 2025-10-31 12:03:48 +00:00 
			
		
		
		
	Compare commits
	
		
			38 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | bad5f50548 | ||
|  | e6bf310706 | ||
|  | 46dab8b24f | ||
|  | b154c116cc | ||
|  | 66090fdadb | ||
|  | 58910eb75d | ||
|  | 06e8f2a63e | ||
|  | 6ec2821901 | ||
|  | a3a755b54e | ||
|  | dd0025df2d | ||
|  | 23231c4cbb | ||
|  | 28586cccec | ||
|  | ce51cbe448 | ||
|  | c5b9d8f1fa | ||
|  | bd566a8900 | ||
|  | 58a28d8852 | ||
|  | 44e604d964 | ||
|  | c055cc3fb2 | ||
|  | 74661d19d9 | ||
|  | ad35b06dc0 | ||
|  | efccd9cdb3 | ||
|  | 5c6e416ce4 | ||
|  | 48a5ba320c | ||
|  | 78d0173da0 | ||
|  | c157fc1094 | ||
|  | b48eeb675e | ||
|  | 18c70eb586 | ||
|  | b1ff4dc249 | ||
|  | 39c409583f | ||
|  | 7b2d310a77 | ||
|  | 33a59cfaa8 | ||
|  | fdfa93cda8 | ||
|  | 8a2410c6dd | ||
|  | 976e5908d6 | ||
|  | bbc70f4e85 | ||
|  | 5e99a47212 | ||
|  | 2bc18274b2 | ||
|  | 496ef93b83 | 
| @@ -1,5 +1,6 @@ | ||||
| .git* | ||||
| *.md | ||||
| LICENSE | ||||
| img/ | ||||
| maintain/ | ||||
| project* | ||||
							
								
								
									
										185
									
								
								.github/workflows/docker.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										185
									
								
								.github/workflows/docker.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,18 +1,43 @@ | ||||
| name: create and publish docker image | ||||
| name: docker | ||||
|  | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     tags: | ||||
|       - 'v*' | ||||
|     inputs: | ||||
|       release: | ||||
|         description: 'set WORKFLOW_GITHUB_RELEASE' | ||||
|         required: false | ||||
|         default: 'false' | ||||
|  | ||||
| env: | ||||
|   DOCKER_USERNAME: 11notes | ||||
|       readme: | ||||
|         description: 'set WORKFLOW_GITHUB_README' | ||||
|         required: false | ||||
|         default: 'false' | ||||
|  | ||||
|       image: | ||||
|         description: 'set IMAGE' | ||||
|         required: false | ||||
|  | ||||
|       uid: | ||||
|         description: 'set IMAGE_UID' | ||||
|         required: false | ||||
|  | ||||
|       gid: | ||||
|         description: 'set IMAGE_GID' | ||||
|         required: false | ||||
|  | ||||
|       semverprefix: | ||||
|         description: 'prefix for semver tags' | ||||
|         required: false | ||||
|  | ||||
|       semversuffix: | ||||
|         description: 'suffix for semver tags' | ||||
|         required: false | ||||
|  | ||||
| jobs: | ||||
|   build-and-push-image: | ||||
|     runs-on: ubuntu-latest | ||||
|   docker: | ||||
|     runs-on: ubuntu-22.04 | ||||
|     permissions: | ||||
|       actions: read | ||||
|       contents: write | ||||
|       packages: write | ||||
|       security-events: write | ||||
| @@ -20,6 +45,16 @@ jobs: | ||||
|     steps:    | ||||
|       - name: init / checkout | ||||
|         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 | ||||
|         with: | ||||
|           ref: master | ||||
|  | ||||
|       - name: init / inputs to env | ||||
|         if: github.event_name == 'workflow_dispatch' | ||||
|         run: | | ||||
|           cat << 'EOF' > .inputs | ||||
|           ${{ toJSON(github.event.inputs) }} | ||||
|           EOF | ||||
|           for KEY in $(cat .inputs | jq --raw-output 'keys[]' | tr '\n' ' '); do echo "input_$(echo ${KEY} | tr '[:upper:]' '[:lower:]')=$(cat .inputs | jq --raw-output '.'${KEY}'')" >> $GITHUB_ENV; done | ||||
|  | ||||
|       - name: init / .json to env | ||||
|         uses: rgarcia-phi/json-to-variables@9835d537368468c4e4de5254dc3efeadda183793 | ||||
| @@ -28,31 +63,51 @@ jobs: | ||||
|  | ||||
|       - name: init / setup environment | ||||
|         run: | | ||||
|           : # set default arch if not set | ||||
|           : # set image | ||||
|           LOCAL_IMAGE=${json_image} | ||||
|           if [ ! -z ${input_image} ]; then LOCAL_IMAGE=${input_image}; fi | ||||
|           echo "IMAGE=${LOCAL_IMAGE}" >> $GITHUB_ENV | ||||
|  | ||||
|           : # set defaults | ||||
|           echo "IMAGE_ARCH=${json_arch:-linux/amd64,linux/arm64}" >> $GITHUB_ENV | ||||
|           echo "WORKFLOW_GITHUB_RELEASE=${input_release:-true}" >> $GITHUB_ENV; | ||||
|           echo "WORKFLOW_GITHUB_README=${input_readme:-true}" >> $GITHUB_ENV; | ||||
|           echo "WORKFLOW_GRYPE_SCAN=${json_grype_scan:-true}" >> $GITHUB_ENV; | ||||
|           echo "WORKFLOW_GRYPE_SEVERITY_CUTOFF=${json_grype_severity:-high}" >> $GITHUB_ENV; | ||||
|  | ||||
|           : # create tags for semver, stable and other shenanigans | ||||
|           export LOCAL_SHA=$(git rev-parse --short HEAD) | ||||
|           export LOCAL_SEMVER_MAJOR=$(awk -F. '{ print $1 }' <<< ${json_version}) | ||||
|           export LOCAL_SEMVER_MINOR=$(awk -F. '{ print $2 }' <<< ${json_version}) | ||||
|           export LOCAL_SEMVER_PATCH=$(awk -F. '{ print $3 }' <<< ${json_version}) | ||||
|           export LOCAL_TAGS="${json_image}:latest" | ||||
|           if [ ! -z ${LOCAL_SEMVER_MAJOR} ]; then LOCAL_TAGS="${LOCAL_TAGS},${json_image}:${LOCAL_SEMVER_MAJOR}"; fi | ||||
|           if [ ! -z ${LOCAL_SEMVER_MINOR} ]; then LOCAL_TAGS="${LOCAL_TAGS},${json_image}:${LOCAL_SEMVER_MAJOR}.${LOCAL_SEMVER_MINOR}"; fi | ||||
|           if [ ! -z ${LOCAL_SEMVER_PATCH} ]; then LOCAL_TAGS="${LOCAL_TAGS},${json_image}:${LOCAL_SEMVER_MAJOR}.${LOCAL_SEMVER_MINOR}.${LOCAL_SEMVER_PATCH}"; fi | ||||
|           if echo "${LOCAL_TAGS}" | grep -q "${json_stable}" ; then LOCAL_TAGS="${LOCAL_TAGS},${json_image}:stable"; fi | ||||
|           if [ ! -z ${json_tags} ]; then SPECIAL_LOCAL_TAGS=$(echo ${json_tags} | sed 's/,/ /g'); for LOCAL_TAG in ${json_tags}; do LOCAL_TAGS="${LOCAL_TAGS},${json_image}:${LOCAL_TAG}"; done; fi | ||||
|           LOCAL_TAGS="${LOCAL_TAGS},${json_image}:${LOCAL_SHA}" | ||||
|           LOCAL_SHA=$(git rev-parse --short HEAD) | ||||
|           LOCAL_SEMVER_MAJOR=$(awk -F. '{ print $1 }' <<< ${json_semver_version}) | ||||
|           LOCAL_SEMVER_MINOR=$(awk -F. '{ print $2 }' <<< ${json_semver_version}) | ||||
|           LOCAL_SEMVER_PATCH=$(awk -F. '{ print $3 }' <<< ${json_semver_version}) | ||||
|           LOCAL_SEMVER_PREFIX="" | ||||
|           LOCAL_SEMVER_SUFFIX="" | ||||
|           LOCAL_SEMVER_RC="" | ||||
|           LOCAL_TAGS="${LOCAL_IMAGE}:${LOCAL_SHA}" | ||||
|           if [ ! -z ${input_semverprefix} ]; then LOCAL_SEMVER_PREFIX="${input_semverprefix}-"; fi | ||||
|           if [ ! -z ${input_semversuffix} ]; then LOCAL_SEMVER_SUFFIX="-${input_semversuffix}"; fi | ||||
|           if [ ! -z ${json_semver_rc} ]; then LOCAL_SEMVER_RC="${json_semver_rc}"; fi | ||||
|           if [ ! -z ${LOCAL_SEMVER_MAJOR} ]; then LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}${LOCAL_SEMVER_MAJOR}${LOCAL_SEMVER_SUFFIX}"; fi | ||||
|           if [ ! -z ${LOCAL_SEMVER_MINOR} ]; then LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}${LOCAL_SEMVER_MAJOR}.${LOCAL_SEMVER_MINOR}${LOCAL_SEMVER_SUFFIX}"; fi | ||||
|           if [ ! -z ${LOCAL_SEMVER_PATCH} ]; then LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}${LOCAL_SEMVER_MAJOR}.${LOCAL_SEMVER_MINOR}.${LOCAL_SEMVER_PATCH}${LOCAL_SEMVER_SUFFIX}"; fi | ||||
|           if echo "${LOCAL_TAGS}" | grep -q "${json_semver_stable}" ; then LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}stable${LOCAL_SEMVER_SUFFIX}"; fi | ||||
|           if echo "${LOCAL_TAGS}" | grep -q "${json_semver_latest}" ; then LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}latest${LOCAL_SEMVER_SUFFIX}"; fi | ||||
|           if [ ! -z ${json_semver_tags} ]; then SPECIAL_LOCAL_TAGS=$(echo ${json_semver_tags} | sed 's/,/ /g'); for LOCAL_TAG in ${json_semver_tags}; do LOCAL_TAGS="${LOCAL_TAGS},${LOCAL_IMAGE}:${LOCAL_SEMVER_PREFIX}${LOCAL_TAG}${LOCAL_SEMVER_SUFFIX}"; done; fi | ||||
|           echo "IMAGE_TAGS=${LOCAL_TAGS}" >> $GITHUB_ENV | ||||
|  | ||||
|           : # if for whatever reason UID/GID must be changed at build time | ||||
|           echo "IMAGE_UID=${json_uid:-1000}" >> $GITHUB_ENV | ||||
|           echo "IMAGE_GID=${json_gid:-1000}" >> $GITHUB_ENV | ||||
|           if [ ! -z ${input_uid} ]; then echo "IMAGE_UID=${input_uid}" >> $GITHUB_ENV; else echo "IMAGE_UID=${json_uid:-1000}" >> $GITHUB_ENV; fi | ||||
|           if [ ! -z ${input_gid} ]; then echo "IMAGE_GID=${input_gid}" >> $GITHUB_ENV; else echo "IMAGE_GID=${json_gid:-1000}" >> $GITHUB_ENV; fi | ||||
|  | ||||
|           : # set rc, prefix or suffix globally for semver and version | ||||
|           echo "IMAGE_SEMVER_PREFIX=${LOCAL_SEMVER_PREFIX}" >> $GITHUB_ENV | ||||
|           echo "IMAGE_SEMVER_SUFFIX=${LOCAL_SEMVER_SUFFIX}" >> $GITHUB_ENV | ||||
|           echo "IMAGE_VERSION_RC=${LOCAL_SEMVER_RC}" >> $GITHUB_ENV | ||||
|  | ||||
|       - name: docker / login to hub | ||||
|         uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 | ||||
|         with: | ||||
|           username: ${{ env.DOCKER_USERNAME }} | ||||
|           username: 11notes | ||||
|           password: ${{ secrets.DOCKER_TOKEN }} | ||||
|  | ||||
|       - name: docker / setup qemu | ||||
| @@ -61,49 +116,57 @@ jobs: | ||||
|       - name: docker / setup buildx | ||||
|         uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 | ||||
|  | ||||
|       - name: grype / build & push | ||||
|       - name: grype / build & push & tag | ||||
|         id: grype-tag | ||||
|         uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d | ||||
|         with: | ||||
|           context: . | ||||
|           file: arch.dockerfile | ||||
|           push: true | ||||
|           platforms: ${{ env.IMAGE_ARCH }} | ||||
|           cache-from: type=registry,ref=${{ env.json_image }}:buildcache | ||||
|           cache-to: type=registry,ref=${{ env.json_image }}:buildcache,mode=max,compression=zstd,force-compression=true | ||||
|           cache-from: type=registry,ref=${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}buildcache${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|           cache-to: type=registry,ref=${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}buildcache${{ env.IMAGE_SEMVER_SUFFIX }},mode=max,compression=zstd,force-compression=true | ||||
|           build-args: | | ||||
|             APP_IMAGE=${{ env.json_image }} | ||||
|             APP_IMAGE=${{ env.IMAGE }} | ||||
|             APP_NAME=${{ env.json_name }} | ||||
|             APP_VERSION=${{ env.json_version }} | ||||
|             APP_VERSION=${{ env.json_semver_version }} | ||||
|             APP_ROOT=${{ env.json_root }} | ||||
|             APP_UID=${{ env.IMAGE_UID }} | ||||
|             APP_GID=${{ env.IMAGE_GID }} | ||||
|             NO_CACHE=$(date +%s) | ||||
|             APP_VERSION_PREFIX=${{ env.IMAGE_SEMVER_PREFIX }} | ||||
|             APP_VERSION_SUFFIX=${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|             APP_VERSION_RC=${{ env.IMAGE_VERSION_RC }} | ||||
|             APP_NO_CACHE=$(date +%s) | ||||
|           tags: | | ||||
|             ${{ env.json_image }}:grype | ||||
|             ${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}grype${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|  | ||||
|       - name: grype / scan | ||||
|         id: scan | ||||
|         if: env.WORKFLOW_GRYPE_SCAN == 'true' | ||||
|         id: grype-scan | ||||
|         uses: anchore/scan-action@abae793926ec39a78ab18002bc7fc45bbbd94342 | ||||
|         with: | ||||
|           image: ${{ env.json_image }}:grype | ||||
|           severity-cutoff: high | ||||
|           image: ${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}grype${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|           severity-cutoff: ${{ env.WORKFLOW_GRYPE_SEVERITY_CUTOFF }} | ||||
|           by-cve: true | ||||
|           output-format: 'sarif' | ||||
|  | ||||
|       - name: grype / delete tag | ||||
|         if: success() || failure() | ||||
|         if: steps.grype-tag.outcome == 'success' | ||||
|         run: | | ||||
|           curl --request DELETE \ | ||||
|             --url https://hub.docker.com/v2/repositories/${{ env.json_image }}/tags/grype/ \ | ||||
|             --url https://hub.docker.com/v2/repositories/${{ env.IMAGE }}/tags/${{ env.IMAGE_SEMVER_PREFIX }}grype${{ env.IMAGE_SEMVER_SUFFIX }}/ \ | ||||
|             --header 'authorization: jwt ${{ secrets.DOCKER_TOKEN }}' \ | ||||
|             --header 'content-type: application/json' \ | ||||
|             --fail | ||||
|  | ||||
|       - name: grype / report / upload | ||||
|       - name: codeql / upload | ||||
|         id: codeql-upload | ||||
|         if: steps.grype-scan.outcome == 'success' | ||||
|         uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 | ||||
|         with: | ||||
|           sarif_file: ${{ steps.scan.outputs.sarif }} | ||||
|  | ||||
|       - name: grype / report / print | ||||
|         run: cat ${{ steps.scan.outputs.sarif }} | ||||
|           sarif_file: ${{ steps.grype-scan.outputs.sarif }} | ||||
|           wait-for-processing: false | ||||
|           category: grype | ||||
|  | ||||
|       - name: docker / build & push | ||||
|         uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d | ||||
| @@ -114,23 +177,28 @@ jobs: | ||||
|           sbom: true | ||||
|           provenance: mode=max | ||||
|           platforms: ${{ env.IMAGE_ARCH }} | ||||
|           cache-from: type=registry,ref=${{ env.json_image }}:buildcache | ||||
|           cache-to: type=registry,ref=${{ env.json_image }}:buildcache,mode=max,compression=zstd,force-compression=true | ||||
|           cache-from: type=registry,ref=${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}buildcache${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|           cache-to: type=registry,ref=${{ env.IMAGE }}:${{ env.IMAGE_SEMVER_PREFIX }}buildcache${{ env.IMAGE_SEMVER_SUFFIX }},mode=max,compression=zstd,force-compression=true | ||||
|           build-args: | | ||||
|             APP_IMAGE=${{ env.json_image }} | ||||
|             APP_IMAGE=${{ env.IMAGE }} | ||||
|             APP_NAME=${{ env.json_name }} | ||||
|             APP_VERSION=${{ env.json_version }} | ||||
|             APP_VERSION=${{ env.json_semver_version }} | ||||
|             APP_ROOT=${{ env.json_root }} | ||||
|             APP_UID=${{ env.IMAGE_UID }} | ||||
|             APP_GID=${{ env.IMAGE_GID }} | ||||
|             NO_CACHE=$(date +%s) | ||||
|             APP_VERSION_PREFIX=${{ env.IMAGE_SEMVER_PREFIX }} | ||||
|             APP_VERSION_SUFFIX=${{ env.IMAGE_SEMVER_SUFFIX }} | ||||
|             APP_VERSION_RC=${{ env.IMAGE_VERSION_RC }} | ||||
|             APP_NO_CACHE=$(date +%s) | ||||
|           tags: | | ||||
|             ${{ env.IMAGE_TAGS }} | ||||
|  | ||||
|       - name: github / create release notes | ||||
|         if: env.WORKFLOW_GITHUB_RELEASE == 'true' && hashFiles('RELEASE.md') != '' | ||||
|         env: | ||||
|           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|         run: gh release create ${{ github.ref_name }} -F RELEASE.md | ||||
|         run: | | ||||
|           gh release create ${{ github.ref_name }} -F RELEASE.md | ||||
|  | ||||
|       - name: github / update description and set repo defaults | ||||
|         run: | | ||||
| @@ -139,7 +207,7 @@ jobs: | ||||
|             --header 'authorization: Bearer ${{ secrets.REPOSITORY_TOKEN }}' \ | ||||
|             --header 'content-type: application/json' \ | ||||
|             --data '{ | ||||
|               "description":"${{ env.json_description }}", | ||||
|               "description":"${{ env.json_readme_description }}", | ||||
|               "homepage":"", | ||||
|               "has_issues":true, | ||||
|               "has_discussions":true, | ||||
| @@ -148,13 +216,30 @@ jobs: | ||||
|             }' \ | ||||
|             --fail | ||||
|  | ||||
|       - name: github / create README.md | ||||
|         if: env.WORKFLOW_GITHUB_README == 'true' | ||||
|         id: github-readme | ||||
|         uses: 11notes/action-docker-readme@v1.1.2 | ||||
|         with: | ||||
|           sarif_file: ${{ steps.grype-scan.outputs.sarif }} | ||||
|  | ||||
|       - name: github / commit & push | ||||
|         if: steps.github-readme.outcome == 'success' | ||||
|         run: | | ||||
|           git config user.name "github-actions[bot]" | ||||
|           git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | ||||
|           git add . | ||||
|           git commit -m "update README.md" | ||||
|           git push | ||||
|  | ||||
|       - name: docker / push README.md to docker hub | ||||
|         if: hashFiles('README.md') != '' | ||||
|         uses: christian-korneck/update-container-description-action@d36005551adeaba9698d8d67a296bd16fa91f8e8 | ||||
|         env: | ||||
|           DOCKER_USER: ${{ env.DOCKER_USERNAME }} | ||||
|           DOCKER_USER: 11notes | ||||
|           DOCKER_PASS: ${{ secrets.DOCKER_TOKEN }} | ||||
|         with: | ||||
|           destination_container_repo: ${{ env.json_image }} | ||||
|           destination_container_repo: ${{ env.IMAGE }} | ||||
|           provider: dockerhub | ||||
|           short_description: ${{ env.json_description }} | ||||
|           short_description: ${{ env.json_readme_description }} | ||||
|           readme_file: 'README.md' | ||||
							
								
								
									
										51
									
								
								.github/workflows/tags.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/tags.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| name: tags | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - 'v*' | ||||
| jobs: | ||||
|   docker: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps:    | ||||
|       - name: build docker image | ||||
|         uses: the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7 | ||||
|         with: | ||||
|           workflow: docker.yml | ||||
|           token: "${{ secrets.REPOSITORY_TOKEN }}" | ||||
|           inputs: '{ "release":"true", "readme":"true" }' | ||||
|  | ||||
|   docker-unraid: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps:    | ||||
|       - name: build docker image for unraid community | ||||
|         uses: the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7 | ||||
|         with: | ||||
|           workflow: docker.yml | ||||
|           token: "${{ secrets.REPOSITORY_TOKEN }}" | ||||
|           inputs: '{ "release":"false", "readme":"false", "uid":"99", "gid":"100", "semversuffix":"unraid" }' | ||||
|  | ||||
|   kms-gui: | ||||
|     runs-on: ubuntu-latest | ||||
|     needs: docker | ||||
|     steps:    | ||||
|       - name: build downstream kms gui | ||||
|         uses: the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7 | ||||
|         with: | ||||
|           workflow: docker.yml | ||||
|           token: "${{ secrets.REPOSITORY_TOKEN }}" | ||||
|           repo: 11notes/docker-kms-gui | ||||
|           ref: master | ||||
|           inputs: '{ "release":"false", "readme":"true" }' | ||||
|  | ||||
|   kms-gui-unraid: | ||||
|     runs-on: ubuntu-latest | ||||
|     needs: docker-unraid | ||||
|     steps:    | ||||
|       - name: build downstream kms gui for unraid community | ||||
|         uses: the-actions-org/workflow-dispatch@3133c5d135c7dbe4be4f9793872b6ef331b53bc7 | ||||
|         with: | ||||
|           workflow: docker.yml | ||||
|           token: "${{ secrets.REPOSITORY_TOKEN }}" | ||||
|           repo: 11notes/docker-kms-gui | ||||
|           ref: master | ||||
|           inputs: '{ "release":"false", "readme":"false", "uid":"99", "gid":"100", "semversuffix":"unraid" }' | ||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1 @@ | ||||
| maintain/ | ||||
| project* | ||||
| maintain/ | ||||
							
								
								
									
										19
									
								
								.json
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								.json
									
									
									
									
									
								
							| @@ -1,10 +1,21 @@ | ||||
| { | ||||
|   "image":"11notes/kms", | ||||
|   "description":"Activate any version of Windows and Office, forever", | ||||
|   "name":"kms", | ||||
|   "version":"646f476", | ||||
|   "root":"/kms", | ||||
|    | ||||
|   "stable":"646f476", | ||||
|   "parent":"11notes/alpine:stable" | ||||
|   "semver":{ | ||||
|     "version":"465f4d1", | ||||
|     "stable":"465f4d1", | ||||
|     "latest":"465f4d1" | ||||
|   }, | ||||
|  | ||||
|   "readme":{ | ||||
|     "description":"Activate any version of Windows and Office, forever", | ||||
|     "parent":{ | ||||
|       "image":"11notes/alpine:stable" | ||||
|     }, | ||||
|     "built":{ | ||||
|       "py-kms":"https://github.com/Py-KMS-Organization/py-kms" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										121
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										121
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,121 +0,0 @@ | ||||
|  | ||||
|  | ||||
| # 🏔️ kms on Alpine | ||||
| [<img src="https://img.shields.io/badge/github-source-blue?logo=github&color=040308">](https://github.com/11notes/docker-kms)[<img src="https://img.shields.io/github/issues/11notes/docker-kms?color=7842f5">](https://github.com/11notes/docker-kms/issues) | ||||
|  | ||||
| **Activate any version of Windows and Office, forever** | ||||
|  | ||||
|  | ||||
|  | ||||
| # SYNOPSIS 📖 | ||||
| **What can I do with this?** This image will run a KMS server you can use to activate any version of Windows and Office, forever. If you need a GUI, simply add [11notes/kms-gui](https://github.com/11notes/docker-kms-gui) to your compose. | ||||
|  | ||||
| Works with: | ||||
| - Windows Vista  | ||||
| - Windows 7  | ||||
| - Windows 8 | ||||
| - Windows 8.1 | ||||
| - Windows 10 | ||||
| - Windows 11 | ||||
| - Windows Server 2008 | ||||
| - Windows Server 2008 R2 | ||||
| - Windows Server 2012 | ||||
| - Windows Server 2012 R2 | ||||
| - Windows Server 2016 | ||||
| - Windows Server 2019 | ||||
| - Windows Server 2022 | ||||
| - Windows Server 2025 | ||||
| - Microsoft Office 2010 ( Volume License ) | ||||
| - Microsoft Office 2013 ( Volume License ) | ||||
| - Microsoft Office 2016 ( Volume License ) | ||||
| - Microsoft Office 2019 ( Volume License ) | ||||
| - Microsoft Office 2021 ( Volume License ) | ||||
| - Microsoft Office 2024 ( Volume License ) | ||||
|  | ||||
| # VOLUMES 📁 | ||||
| * **/kms/var** - Directory of the activation database | ||||
|  | ||||
| # COMPOSE ✂️ | ||||
| ```yaml | ||||
| name: "kms" | ||||
| services: | ||||
|   kms: | ||||
|     image: "11notes/kms:646f476" | ||||
|     container_name: "kms" | ||||
|     environment: | ||||
|       TZ: "Europe/Zurich" | ||||
|     volumes: | ||||
|       - "var:/kms/var" | ||||
|     ports: | ||||
|       - "1688:1688/tcp" | ||||
|     restart: always | ||||
|   kms-gui: | ||||
|     image: "11notes/kms-gui:latest" | ||||
|     container_name: "kms-gui" | ||||
|     environment: | ||||
|       TZ: "Europe/Zurich" | ||||
|     volumes: | ||||
|       - "var:/kms/var" | ||||
|     ports: | ||||
|       - "8080:8080/tcp" | ||||
|     restart: always | ||||
| volumes: | ||||
|   var: | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ## Windows Server 2025 Datacenter. List of [GVLK](https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys) | ||||
| ```cmd | ||||
| slmgr /ipk D764K-2NDRG-47T6Q-P8T8W-YP6DF | ||||
| ``` | ||||
| Add your KMS server information to server | ||||
| ```powershell | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -Name "KeyManagementServiceName" -Value "KMS_IP" | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -Name "KeyManagementServicePort" -Value "KMS_PORT" | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -Name "KeyManagementServiceName" -Value "KMS_IP" | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -Name "KeyManagementServicePort" -Value "KMS_PORT" | ||||
| ``` | ||||
| Activate server | ||||
| ```cmd | ||||
| slmgr /ato | ||||
| ``` | ||||
|  | ||||
| # DEFAULT SETTINGS 🗃️ | ||||
| | Parameter | Value | Description | | ||||
| | --- | --- | --- | | ||||
| | `user` | docker | user name | | ||||
| | `uid` | 1000 | [user identifier](https://en.wikipedia.org/wiki/User_identifier) | | ||||
| | `gid` | 1000 | [group identifier](https://en.wikipedia.org/wiki/Group_identifier) | | ||||
| | `home` | /kms | home directory of user docker | | ||||
| | `database` | /kms/var/kms.db | SQlite database holding all client data | | ||||
|  | ||||
| # ENVIRONMENT 📝 | ||||
| | Parameter | Value | Default | | ||||
| | --- | --- | --- | | ||||
| | `TZ` | [Time Zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) | | | ||||
| | `DEBUG` | Show debug messages from image **not** app | | | ||||
| | `KMS_IP` | localhost or 127.0.0.1 or a dedicated IP | 0.0.0.0 | | ||||
| | `KMS_PORT` | any port > 1024 | 1688 | | ||||
| | `KMS_LOCALE` | see Microsoft LICD specification | 1033 (en-US) | | ||||
| | `KMS_CLIENTCOUNT` | client count >= 25 | 25 | | ||||
| | `KMS_ACTIVATIONINTERVAL` | Retry unsuccessful after N minutes | 120 (2 hours) | | ||||
| | `KMS_RENEWALINTERVAL` | re-activation after N minutes | 259200 (180 days) | | ||||
| | `KMS_LOGLEVEL` | CRITICAL, ERROR, WARNING, INFO, DEBUG, MININFO | INFO | | ||||
|  | ||||
| # SOURCE 💾 | ||||
| * [11notes/kms](https://github.com/11notes/docker-kms) | ||||
|  | ||||
| # PARENT IMAGE 🏛️ | ||||
| * [11notes/alpine:stable](https://hub.docker.com/r/11notes/alpine) | ||||
|  | ||||
| # BUILT WITH 🧰 | ||||
| * [py-kms](https://github.com/Py-KMS-Organization/py-kms) | ||||
| * [alpine](https://alpinelinux.org) | ||||
|  | ||||
| # TIPS 📌 | ||||
| * Use a reverse proxy like Traefik, Nginx, HAproxy to terminate TLS with a valid certificate | ||||
| * Use Let’s Encrypt certificates to protect your SSL endpoints | ||||
| * [Microsoft LICD](https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a) | ||||
|    | ||||
| # ElevenNotes™️ | ||||
| This image is provided to you at your own risk. Always make backups before updating an image to a different version. Check the [releases](https://github.com/11notes/docker-kms/releases) for breaking changes. If you have any problems with using this image simply raise an [issue](https://github.com/11notes/docker-kms/issues), thanks . You can find all my repositories on [github](https://github.com/11notes?tab=repositories). | ||||
| @@ -1,2 +1,4 @@ | ||||
| ### 🪄 Features | ||||
| * switch to new github workflow and build process | ||||
| * add healthcheck directly to build (no script) | ||||
| * add Office activation screenshot | ||||
| * add custom 11notes/action-sarif-to-markdown@v1.1.0 for sarif to markdown (future use) to workflow | ||||
| @@ -1,29 +1,15 @@ | ||||
| # :: Util | ||||
|   FROM alpine AS util | ||||
|   FROM 11notes/util AS util | ||||
|  | ||||
|   ARG NO_CACHE | ||||
|  | ||||
|   RUN set -ex; \ | ||||
|     apk --no-cache --update add \ | ||||
|       git; \ | ||||
|     git clone https://github.com/11notes/docker-util.git; | ||||
|  | ||||
| # :: Build / redis | ||||
|   FROM python:3.12-alpine AS build | ||||
|  | ||||
|   ARG TARGETARCH | ||||
| # :: Build / py-kms | ||||
|   FROM alpine/git AS build | ||||
|   ARG APP_VERSION | ||||
|  | ||||
|   USER root | ||||
|  | ||||
|   RUN set -ex; \ | ||||
|     apk --update --no-cache add \ | ||||
|       git; \ | ||||
|     mkdir -p /opt/py-kms; \ | ||||
|     git clone https://github.com/Py-KMS-Organization/py-kms.git; \ | ||||
|     cd /py-kms/py-kms; \ | ||||
|     git clone https://github.com/Py-KMS-Organization/py-kms.git -b next; \ | ||||
|     cd /git/py-kms; \ | ||||
|     git checkout ${APP_VERSION}; \ | ||||
|     cp -R /py-kms/py-kms/* /opt/py-kms; | ||||
|     cp -R /git/py-kms/docker/docker-py3-kms-minimal/requirements.txt /git/py-kms/py-kms/requirements.txt; \ | ||||
|     cp -R /git/py-kms/docker/docker-py3-kms/requirements.txt /git/py-kms/py-kms/requirements.gui.txt; | ||||
|  | ||||
| # :: Header | ||||
|   FROM 11notes/alpine:stable | ||||
| @@ -34,6 +20,8 @@ | ||||
|     ARG APP_NAME | ||||
|     ARG APP_VERSION | ||||
|     ARG APP_ROOT | ||||
|     ARG APP_UID | ||||
|     ARG APP_GID | ||||
|  | ||||
|   # :: environment | ||||
|     ENV APP_IMAGE=${APP_IMAGE} | ||||
| @@ -41,35 +29,31 @@ | ||||
|     ENV APP_VERSION=${APP_VERSION} | ||||
|     ENV APP_ROOT=${APP_ROOT} | ||||
|  | ||||
|     ENV KMS_IP=0.0.0.0 | ||||
|     ENV KMS_PORT=1688 | ||||
|     ENV KMS_LOCALE=1033 | ||||
|     ENV KMS_CLIENTCOUNT=26 | ||||
|     ENV KMS_ACTIVATIONINTERVAL=120 | ||||
|     ENV KMS_RENEWALINTERVAL=10080 | ||||
|     ENV KMS_RENEWALINTERVAL=259200 | ||||
|     ENV KMS_LOGLEVEL="INFO" | ||||
|  | ||||
|   # :: multi-stage | ||||
|     COPY --from=util /docker-util/src/ /usr/local/bin | ||||
|     COPY --from=build /opt/py-kms/ /opt/py-kms | ||||
|     COPY --from=util /usr/local/bin/ /usr/local/bin | ||||
|     COPY --from=build /git/py-kms/py-kms/ /opt/py-kms | ||||
|  | ||||
|   # :: Run | ||||
| # :: Run | ||||
|   USER root | ||||
|   RUN eleven printenv; | ||||
|  | ||||
|   # :: install application | ||||
|     RUN set -ex; \ | ||||
|       apk --no-cache --update add \ | ||||
|         python3=3.12.8-r1; \ | ||||
|         python3; \ | ||||
|       apk --no-cache --update --virtual .build add \ | ||||
|         py3-pip; | ||||
|  | ||||
|     RUN set -ex; \ | ||||
|       mkdir -p ${APP_ROOT}/var; \ | ||||
|       touch /var/log/kms.log; \ | ||||
|       ln -sf /dev/stdout /var/log/kms.log; \ | ||||
|       pip3 install --no-cache-dir --break-system-packages \ | ||||
|         tzlocal \ | ||||
|         pytz; \ | ||||
|       pip3 install --no-cache-dir -r /opt/py-kms/requirements.txt --break-system-packages; \ | ||||
|       pip3 install --no-cache-dir pytz --break-system-packages; \ | ||||
|       apk del --no-network .build; | ||||
|  | ||||
|   # :: copy filesystem changes and set correct permissions | ||||
| @@ -77,13 +61,18 @@ | ||||
|     RUN set -ex; \ | ||||
|       chmod +x -R /usr/local/bin; \ | ||||
|       chown -R 1000:1000 \ | ||||
|         ${APP_ROOT}; | ||||
|         ${APP_ROOT} \ | ||||
|         /opt/py-kms; | ||||
|  | ||||
|   # :: support unraid | ||||
|     RUN set -ex; \ | ||||
|       eleven unraid | ||||
|  | ||||
| # :: Volumes | ||||
|   VOLUME ["${APP_ROOT}/var"] | ||||
|  | ||||
| # :: Monitor | ||||
|   HEALTHCHECK --interval=5s --timeout=2s CMD /usr/local/bin/healthcheck.sh || exit 1 | ||||
|   HEALTHCHECK --interval=5s --timeout=2s CMD netstat -an | grep -q 1688 || exit 1 | ||||
|  | ||||
| # :: Start | ||||
|   USER docker | ||||
| @@ -1,7 +1,7 @@ | ||||
| name: "kms" | ||||
| services: | ||||
|   kms: | ||||
|     image: "11notes/kms:646f476" | ||||
|     image: "11notes/kms:465f4d1" | ||||
|     container_name: "kms" | ||||
|     environment: | ||||
|       TZ: "Europe/Zurich" | ||||
| @@ -9,9 +9,9 @@ services: | ||||
|       - "var:/kms/var" | ||||
|     ports: | ||||
|       - "1688:1688/tcp" | ||||
|     restart: always | ||||
|     restart: "always" | ||||
|   kms-gui: | ||||
|     image: "11notes/kms-gui:latest" | ||||
|     image: "11notes/kms-gui:stable" | ||||
|     container_name: "kms-gui" | ||||
|     environment: | ||||
|       TZ: "Europe/Zurich" | ||||
| @@ -19,6 +19,6 @@ services: | ||||
|       - "var:/kms/var" | ||||
|     ports: | ||||
|       - "8080:8080/tcp" | ||||
|     restart: always | ||||
|     restart: "always" | ||||
| volumes: | ||||
|   var: | ||||
							
								
								
									
										
											BIN
										
									
								
								img/Office.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/Office.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 12 KiB | 
							
								
								
									
										
											BIN
										
									
								
								img/Windows11ENTLTSC.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/Windows11ENTLTSC.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 62 KiB | 
							
								
								
									
										
											BIN
										
									
								
								img/WindowsSRV2025.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/WindowsSRV2025.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 49 KiB | 
							
								
								
									
										
											BIN
										
									
								
								img/webGUICustomIcon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/webGUICustomIcon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 38 KiB | 
							
								
								
									
										71
									
								
								project.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								project.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| ${{ content_synopsis }} This image will run a KMS server you can use to activate any version of Windows and Office, forever. | ||||
|  | ||||
| Works with: | ||||
| - Windows Vista  | ||||
| - Windows 7  | ||||
| - Windows 8 | ||||
| - Windows 8.1 | ||||
| - Windows 10 | ||||
| - Windows 11 | ||||
| - Windows Server 2008 | ||||
| - Windows Server 2008 R2 | ||||
| - Windows Server 2012 | ||||
| - Windows Server 2012 R2 | ||||
| - Windows Server 2016 | ||||
| - Windows Server 2019 | ||||
| - Windows Server 2022 | ||||
| - Windows Server 2025 | ||||
| - Microsoft Office 2010 ( Volume License ) | ||||
| - Microsoft Office 2013 ( Volume License ) | ||||
| - Microsoft Office 2016 ( Volume License ) | ||||
| - Microsoft Office 2019 ( Volume License ) | ||||
| - Microsoft Office 2021 ( Volume License ) | ||||
| - Microsoft Office 2024 ( Volume License ) | ||||
|  | ||||
| ${{ title_volumes }} | ||||
| * **${{ json_root }}/var** - Directory of the activation database | ||||
|  | ||||
| ${{ content_compose }} | ||||
|  | ||||
| # EXAMPLE | ||||
| ## Windows Server 2025 Datacenter. List of [GVLK](https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys) | ||||
| ```cmd | ||||
| slmgr /ipk D764K-2NDRG-47T6Q-P8T8W-YP6DF | ||||
| ``` | ||||
| Add your KMS server information to server via registry | ||||
| ```powershell | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -Name "KeyManagementServiceName" -Value "KMS_IP" | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" -Name "KeyManagementServicePort" -Value "KMS_PORT" | ||||
|  | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -Name "KeyManagementServiceName" -Value "KMS_IP" | ||||
| Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform" -Name "KeyManagementServicePort" -Value "KMS_PORT" | ||||
| ``` | ||||
| Activate server | ||||
| ```cmd | ||||
| slmgr /ato | ||||
| ``` | ||||
|  | ||||
| ${{ content_defaults }} | ||||
| | `database` | /kms/var/kms.db | SQlite database holding all client data | | ||||
|  | ||||
| ${{ content_environment }} | ||||
| | `KMS_LOCALE` | see Microsoft LICD specification | 1033 (en-US) | | ||||
| | `KMS_CLIENTCOUNT` | client count > 25 | 26 | | ||||
| | `KMS_ACTIVATIONINTERVAL` | Retry unsuccessful after N minutes | 120 (2 hours) | | ||||
| | `KMS_RENEWALINTERVAL` | re-activation after N minutes | 259200 (180 days) | | ||||
| | `KMS_LOGLEVEL` | CRITICAL, ERROR, WARNING, INFO, DEBUG, MININFO | INFO | | ||||
|  | ||||
| ${{ content_source }} | ||||
|  | ||||
| ${{ content_parent }} | ||||
|  | ||||
| ${{ content_built }} | ||||
|  | ||||
| ${{ content_tips }} | ||||
| * Do not expose this image to WAN! You will get notified from Microsoft via your ISP to terminate the service if you do so | ||||
| * [Microsoft LICD](https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a) | ||||
| * Use [11notes/kms-gui](https://github.com/11notes/docker-kms-gui) if you want to see the clients you activated in a nice web GUI | ||||
| @@ -546,6 +546,10 @@ | ||||
| 			<Activate KmsItem="02000000-0000-0000-0000-000000000000" /> | ||||
| 		</CsvlkItem> | ||||
|  | ||||
|     <CsvlkItem DisplayName="Office 2024" VlmcsdIndex="6" GroupId="206" MinKeyId="571000000" MaxKeyId="590999999" IniFileName="Office2024" EPid="05426-00206-456-03-1033-9100.0000-2602024" Id="f3d89bbf-c0ec-47ce-a8fa-e5a5f97e447f" InvalidWinBuild="[0,1]"> | ||||
|       <Activate KmsItem="1b4db7eb-4057-5ddf-91e0-36dec72071f5" /> | ||||
|     </CsvlkItem> | ||||
|  | ||||
| 		<CsvlkItem DisplayName="Office 2021" VlmcsdIndex="6" GroupId="206" MinKeyId="571000000" MaxKeyId="590999999" IniFileName="Office2021" EPid="05426-00206-586-025264-03-1033-9200.0000-2602021" Id="47f3b983-7c53-4d45-abc6-bcd91e2dd90a" InvalidWinBuild="[0,1]"> | ||||
| 			<Activate KmsItem="86d50b16-4808-41af-b83b-b338274318b2" /> | ||||
| 		</CsvlkItem> | ||||
| @@ -609,12 +613,12 @@ | ||||
| 			</KmsItem> | ||||
|  | ||||
| 			<KmsItem DisplayName="Windows 10 2019 (Volume)" Id="11b15659-e603-4cf1-9c1f-f0ec01b81888" DefaultKmsProtocol="6.0" NCountPolicy="25"> | ||||
| 				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019/2021" Id="32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee" Gvlk="M7XTQ-FN8P6-TTKYV-9D4CC-J462D" /> | ||||
| 				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019/2021 N" Id="7103a333-b8c8-49cc-93ce-d37c09687f92" Gvlk="92NFX-8DJQP-P6BBQ-THF9C-7CG2H" /> | ||||
| 				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019/2021/2024" Id="32d2fab3-e4a8-42c2-923b-4bf4fd13e6ee" Gvlk="M7XTQ-FN8P6-TTKYV-9D4CC-J462D" /> | ||||
| 				<SkuItem DisplayName="Windows 10 Enterprise LTSC 2019/2021/2024 N" Id="7103a333-b8c8-49cc-93ce-d37c09687f92" Gvlk="92NFX-8DJQP-P6BBQ-THF9C-7CG2H" /> | ||||
| 			</KmsItem> | ||||
|  | ||||
| 			<KmsItem DisplayName="Windows 10 Unknown (Volume)" Id="d27cd636-1962-44e9-8b4f-27b6c23efb85" DefaultKmsProtocol="6.0" NCountPolicy="25"> | ||||
|             </KmsItem> | ||||
|       </KmsItem> | ||||
|  | ||||
| 			<KmsItem DisplayName="Windows 10/11 China Government" Id="7ba0bf23-d0f5-4072-91d9-d55af5a481b6" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="25"> | ||||
| 				<SkuItem DisplayName="Windows 10/11 Enterprise G" Id="e0b2d383-d112-413f-8a80-97f373a5820c" Gvlk="YYVX9-NTFWV-6MDM3-9PT4T-4M68B" /> | ||||
| @@ -934,7 +938,7 @@ | ||||
|  | ||||
| 		</AppItem> | ||||
|  | ||||
| 		<AppItem DisplayName="Office 15 (2013) / 16 (2016) / 17 (2019)" VlmcsdIndex="5" MinActiveClients="10" Id="0ff1ce15-a989-479d-af46-f275c6370663"> | ||||
| 		<AppItem DisplayName="Office 2013 / 2016 / 2019 / LTSC 2021 / LTSC 2024" VlmcsdIndex="5" MinActiveClients="10" Id="0ff1ce15-a989-479d-af46-f275c6370663"> | ||||
|  | ||||
| 			<KmsItem DisplayName="Office 2013" Id="e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="5.0" NCountPolicy="5"> | ||||
| 				<SkuItem DisplayName="Office Access 2013" Id="6ee7622c-18d8-4005-9fb7-92db644a279b" Gvlk="NG2JY-H4JBT-HQXYP-78QH9-4JM2D" /> | ||||
| @@ -1020,21 +1024,35 @@ | ||||
| 				<SkuItem DisplayName="Office Word 2019" Id="059834fe-a8ea-4bff-b67b-4d006b5447d3" Gvlk="PBX3G-NWMT6-Q7XBW-PYJGG-WXD33" /> | ||||
| 			</KmsItem> | ||||
|  | ||||
|             <KmsItem DisplayName="Office 2021" Id="86d50b16-4808-41af-b83b-b338274318b2" IsPreview="false" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5"> | ||||
|                 <SkuItem DisplayName="Office Access LTSC 2021" Id="1fe429d8-3fa7-4a39-b6f0-03dded42fe14" Gvlk="WM8YG-YNGDD-4JHDC-PG3F4-FC4T4" /> | ||||
|                 <SkuItem DisplayName="Office Excel LTSC 2021" Id="ea71effc-69f1-4925-9991-2f5e319bbc24" Gvlk="NWG3X-87C9K-TC7YY-BC2G7-G6RVC" /> | ||||
|                 <SkuItem DisplayName="Office Outlook LTSC 2021" Id="a5799e4c-f83c-4c6e-9516-dfe9b696150b" Gvlk="C9FM6-3N72F-HFJXB-TM3V9-T86R9" /> | ||||
|                 <SkuItem DisplayName="Office Powerpoint LTSC 2021" Id="6e166cc3-495d-438a-89e7-d7c9e6fd4dea" Gvlk="TY7XF-NFRBR-KJ44C-G83KF-GX27K" /> | ||||
|                 <SkuItem DisplayName="Office LTSC Professional Plus 2021" Id="fbdb3e18-a8ef-4fb3-9183-dffd60bd0984" Gvlk="FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH" /> | ||||
|                 <SkuItem DisplayName="Office Project Pro 2021" Id="76881159-155c-43e0-9db7-2d70a9a3a4ca" Gvlk="FTNWT-C6WBT-8HMGF-K9PRX-QV9H8" /> | ||||
|                 <SkuItem DisplayName="Office Project Standard 2021" Id="6dd72704-f752-4b71-94c7-11cec6bfc355" Gvlk="J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T" /> | ||||
|                 <SkuItem DisplayName="Office Publisher LTSC 2021" Id="aa66521f-2370-4ad8-a2bb-c095e3e4338f" Gvlk="2MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ" /> | ||||
|                 <SkuItem DisplayName="Office Skype for Business LTSC 2021" Id="1f32a9af-1274-48bd-ba1e-1ab7508a23e8" Gvlk="HWCXN-K3WBT-WJBKY-R8BD9-XK29P" /> | ||||
|                 <SkuItem DisplayName="Office LTSC Standard 2021" Id="080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3" Gvlk="KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3" /> | ||||
|                 <SkuItem DisplayName="Office Visio LTSC Pro 2021" Id="fb61ac9a-1688-45d2-8f6b-0674dbffa33c" Gvlk="KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4" /> | ||||
|                 <SkuItem DisplayName="Office Visio LTSC Standard 2021" Id="72fce797-1884-48dd-a860-b2f6a5efd3ca" Gvlk="MJVNY-BYWPY-CWV6J-2RKRT-4M8QG" /> | ||||
|                 <SkuItem DisplayName="Office Word LTSC 2021" Id="abe28aea-625a-43b1-8e30-225eb8fbd9e5" Gvlk="TN8H9-M34D3-Y64V9-TR72V-X79KV" /> | ||||
|             </KmsItem> | ||||
|       <KmsItem DisplayName="Office 2021" Id="86d50b16-4808-41af-b83b-b338274318b2" IsPreview="false" CanMapToDefaultCsvlk="false" DefaultKmsProtocol="6.0" NCountPolicy="5"> | ||||
|           <SkuItem DisplayName="Office Access LTSC 2021" Id="1fe429d8-3fa7-4a39-b6f0-03dded42fe14" Gvlk="WM8YG-YNGDD-4JHDC-PG3F4-FC4T4" /> | ||||
|           <SkuItem DisplayName="Office Excel LTSC 2021" Id="ea71effc-69f1-4925-9991-2f5e319bbc24" Gvlk="NWG3X-87C9K-TC7YY-BC2G7-G6RVC" /> | ||||
|           <SkuItem DisplayName="Office Outlook LTSC 2021" Id="a5799e4c-f83c-4c6e-9516-dfe9b696150b" Gvlk="C9FM6-3N72F-HFJXB-TM3V9-T86R9" /> | ||||
|           <SkuItem DisplayName="Office Powerpoint LTSC 2021" Id="6e166cc3-495d-438a-89e7-d7c9e6fd4dea" Gvlk="TY7XF-NFRBR-KJ44C-G83KF-GX27K" /> | ||||
|           <SkuItem DisplayName="Office LTSC Professional Plus 2021" Id="fbdb3e18-a8ef-4fb3-9183-dffd60bd0984" Gvlk="FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH" /> | ||||
|           <SkuItem DisplayName="Office Project Pro 2021" Id="76881159-155c-43e0-9db7-2d70a9a3a4ca" Gvlk="FTNWT-C6WBT-8HMGF-K9PRX-QV9H8" /> | ||||
|           <SkuItem DisplayName="Office Project Standard 2021" Id="6dd72704-f752-4b71-94c7-11cec6bfc355" Gvlk="J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T" /> | ||||
|           <SkuItem DisplayName="Office Publisher LTSC 2021" Id="aa66521f-2370-4ad8-a2bb-c095e3e4338f" Gvlk="2MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ" /> | ||||
|           <SkuItem DisplayName="Office Skype for Business LTSC 2021" Id="1f32a9af-1274-48bd-ba1e-1ab7508a23e8" Gvlk="HWCXN-K3WBT-WJBKY-R8BD9-XK29P" /> | ||||
|           <SkuItem DisplayName="Office LTSC Standard 2021" Id="080a45c5-9f9f-49eb-b4b0-c3c610a5ebd3" Gvlk="KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3" /> | ||||
|           <SkuItem DisplayName="Office Visio LTSC Pro 2021" Id="fb61ac9a-1688-45d2-8f6b-0674dbffa33c" Gvlk="KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4" /> | ||||
|           <SkuItem DisplayName="Office Visio LTSC Standard 2021" Id="72fce797-1884-48dd-a860-b2f6a5efd3ca" Gvlk="MJVNY-BYWPY-CWV6J-2RKRT-4M8QG" /> | ||||
|           <SkuItem DisplayName="Office Word LTSC 2021" Id="abe28aea-625a-43b1-8e30-225eb8fbd9e5" Gvlk="TN8H9-M34D3-Y64V9-TR72V-X79KV" /> | ||||
|       </KmsItem> | ||||
|  | ||||
|       <KmsItem DisplayName="Office 2024" Id="1b4db7eb-4057-5ddf-91e0-36dec72071f5" IsPreview="false" CanMapToDefaultCsvlk="false" DefaultKmsprotocol="6.0" NCountPolicy="5"> | ||||
|           <SkuItem DisplayName="Office LTSC Professional Plus 2024" Id="8d368fc1-9470-4be2-8d66-90e836cbb051" Gvlk="XJ2XN-FW8RK-P4HMP-DKDBV-GCVGB" /> | ||||
|           <SkuItem DisplayName="Office LTSC Standard 2024" Id="bbac904f-6a7e-418a-bb4b-24c85da06187" Gvlk="V28N4-JG22K-W66P8-VTMGK-H6HGR" /> | ||||
|           <SkuItem DisplayName="Office Access LTSC 2024" Id="72e9faa7-ead1-4f3d-9f6e-3abc090a81d7" Gvlk="82FTR-NCHR7-W3944-MGRHM-JMCWD" /> | ||||
|           <SkuItem DisplayName="Office Excel LTSC 2024" Id="cbbba2c3-0ff5-4558-846a-043ef9d78559" Gvlk="F4DYN-89BP2-WQTWJ-GR8YC-CKGJG" /> | ||||
|           <SkuItem DisplayName="Office Outlook LTSC 2024" Id="bef3152a-8a04-40f2-a065-340c3f23516d" Gvlk="D2F8D-N3Q3B-J28PV-X27HD-RJWB9" /> | ||||
|           <SkuItem DisplayName="Office PowerPoint LTSC 2024" Id="b63626a4-5f05-4ced-9639-31ba730a127e" Gvlk="CW94N-K6GJH-9CTXY-MG2VC-FYCWP" /> | ||||
|           <SkuItem DisplayName="Office Project Professional 2024" Id="f510af75-8ab7-4426-a236-1bfb95c34ff8" Gvlk="FQQ23-N4YCY-73HQ3-FM9WC-76HF4" /> | ||||
|           <SkuItem DisplayName="Office Project Standard 2024" Id="9f144f27-2ac5-40b9-899d-898c2b8b4f81" Gvlk="PD3TT-NTHQQ-VC7CY-MFXK3-G87F8" /> | ||||
|           <SkuItem DisplayName="Office Skype for Business LSTC 2024" Id="0002290a-2091-4324-9e53-3cfe28884cde" Gvlk="4NKHF-9HBQF-Q3B6C-7YV34-F64P3" /> | ||||
|           <SkuItem DisplayName="Office Visio LTSC Professional 2024" Id="fa187091-8246-47b1-964f-80a0b1e5d69a" Gvlk="B7TN8-FJ8V3-7QYCP-HQPMV-YY89G" /> | ||||
|           <SkuItem DisplayName="Office Visio LTSC Standard 2024" Id="923fa470-aa71-4b8b-b35c-36b79bf9f44b" Gvlk="JMMVY-XFNQC-KK4HK-9H7R3-WQQTV" /> | ||||
|         </KmsItem> | ||||
| 		</AppItem> | ||||
|  | ||||
| 	</AppItems> | ||||
|   | ||||
| @@ -1,10 +1,16 @@ | ||||
| #!/bin/ash | ||||
|   if [ -z "${1}" ]; then | ||||
|  | ||||
|     if [ ! -z "${DEBUG}" ]; then | ||||
|       KMS_LOGLEVEL="DEBUG" | ||||
|       eleven log debug "setting kms log level to DEBUG" | ||||
|     fi | ||||
|  | ||||
|     cd /opt/py-kms | ||||
|     set -- "python3" \ | ||||
|       pykms_Server.py \ | ||||
|       ${KMS_IP} \ | ||||
|       ${KMS_PORT} \ | ||||
|       0.0.0.0 \ | ||||
|       1688 \ | ||||
|       -l ${KMS_LOCALE} \ | ||||
|       -c ${KMS_CLIENTCOUNT} \ | ||||
|       -a ${KMS_ACTIVATIONINTERVAL} \ | ||||
| @@ -12,7 +18,7 @@ | ||||
|       -s /kms/var/kms.db \ | ||||
|       -w RANDOM \ | ||||
|       -V ${KMS_LOGLEVEL} \ | ||||
|       -F /var/log/kms.log \ | ||||
|       -F STDOUT \ | ||||
|       -y | ||||
|      | ||||
|     eleven log start | ||||
|   | ||||
| @@ -1,2 +0,0 @@ | ||||
| #!/bin/ash | ||||
|   netstat -an | grep -q ${KMS_PORT} | ||||
		Reference in New Issue
	
	Block a user