From b2acaff7831275ac75327bcf86d105883ec9096f Mon Sep 17 00:00:00 2001 From: Zuckerberg Date: Mon, 17 Feb 2025 12:09:20 -0800 Subject: [PATCH] Fix pykms by downgrading to python 3.11 --- overlays/default.nix | 4 ++ overlays/pykms.nix | 103 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 overlays/pykms.nix diff --git a/overlays/default.nix b/overlays/default.nix index 1822b55..5a391f2 100644 --- a/overlays/default.nix +++ b/overlays/default.nix @@ -6,4 +6,8 @@ let in { actual-server = prev.callPackage ./actualbudget { }; + + # Copied entire package from nixpkgs to downgrade to python 3.11 since 3.12 is broken. + # See: https://github.com/Py-KMS-Organization/py-kms/issues/117 + pykms = prev.callPackage ./pykms.nix { }; } diff --git a/overlays/pykms.nix b/overlays/pykms.nix new file mode 100644 index 0000000..b58f1b4 --- /dev/null +++ b/overlays/pykms.nix @@ -0,0 +1,103 @@ +{ lib +, fetchFromGitHub +, python311 +, writeText +, writeShellScript +, sqlite +, nixosTests +}: +let + pypkgs = python311.pkgs; + + dbSql = writeText "create_pykms_db.sql" '' + CREATE TABLE clients( + clientMachineId TEXT, + machineName TEXT, + applicationId TEXT, + skuId TEXT, + licenseStatus TEXT, + lastRequestTime INTEGER, + kmsEpid TEXT, + requestCount INTEGER + ); + ''; + + dbScript = writeShellScript "create_pykms_db.sh" '' + set -eEuo pipefail + + db=''${1:-/var/lib/pykms/clients.db} + + if [ ! -e $db ] ; then + ${lib.getBin sqlite}/bin/sqlite3 $db < ${dbSql} + fi + ''; + +in +pypkgs.buildPythonApplication rec { + pname = "pykms"; + version = "unstable-2024-05-28"; + + src = fetchFromGitHub { + owner = "Py-KMS-Organization"; + repo = "py-kms"; + rev = "646f4766f4195dbea0695700a7ddaac70a3294f9"; + hash = "sha256-YCqPo7WkCfXyuTjL4IYapdcUN/Vj465Jz6XhQessyz0="; + }; + + sourceRoot = "${src.name}/py-kms"; + + propagatedBuildInputs = with pypkgs; [ + systemd + pytz + tzlocal + dnspython + ]; + + postPatch = '' + siteDir=$out/${python311.sitePackages} + + substituteInPlace pykms_DB2Dict.py \ + --replace "'KmsDataBase.xml'" "'$siteDir/KmsDataBase.xml'" + ''; + + format = "other"; + + # there are no tests + doCheck = false; + + installPhase = '' + runHook preInstall + + mkdir -p $siteDir + + PYTHONPATH="$PYTHONPATH:$siteDir" + + mv * $siteDir + for b in Client Server ; do + makeWrapper ${python311.interpreter} $out/bin/''${b,,} \ + --argv0 pykms-''${b,,} \ + --add-flags $siteDir/pykms_$b.py \ + --set PYTHONPATH $PYTHONPATH + done + + install -Dm755 ${dbScript} $out/libexec/create_pykms_db.sh + + install -Dm644 ../README.md -t $out/share/doc/pykms + + ${python311.interpreter} -m compileall $siteDir + + runHook postInstall + ''; + + passthru.tests = { inherit (nixosTests) pykms; }; + + meta = with lib; { + description = "Windows KMS (Key Management Service) server written in Python"; + homepage = "https://github.com/Py-KMS-Organization/py-kms"; + license = licenses.unlicense; + maintainers = with maintainers; [ + peterhoeg + zopieux + ]; + }; +}