diff --git a/nixos/modules/overlays.nix b/nixos/modules/overlays.nix index ad41b406e3f7629f1e0765a9230a17c85fdba577..e510fbd7f6849d09fc52e0d3aff321c154e29cd4 100644 --- a/nixos/modules/overlays.nix +++ b/nixos/modules/overlays.nix @@ -1,11 +1,20 @@ +let + pythonTwistedOverride = python-self: python-super: { + twisted = python-super.callPackage ../pkgs/twisted.nix { inherit (python-super) twisted; }; + }; +in self: super: { - privatestorage = super.python27.buildEnv.override + privatestorage = self.python27.buildEnv.override { extraLibs = - [ super.python27Packages.tahoe-lafs - super.python27Packages.zkapauthorizer + [ self.python27Packages.tahoe-lafs + self.python27Packages.zkapauthorizer ]; # Twisted's dropin.cache always collides between different # plugin-providing packages. - ignoreCollisions = true; + # ignoreCollisions = true; }; + + python27 = super.python27.override (old: { + packageOverrides = super.lib.composeExtensions old.packageOverrides pythonTwistedOverride; + }); } diff --git a/nixos/pkgs/twisted.nix b/nixos/pkgs/twisted.nix new file mode 100644 index 0000000000000000000000000000000000000000..32fb34378dcb287c01f405ef1284921459aaf792 --- /dev/null +++ b/nixos/pkgs/twisted.nix @@ -0,0 +1,7 @@ +{ twisted }: +twisted.overrideAttrs (old: { + version = old.version + "-0"; + prePatch = old.patchPhase; + patchPhase = null; + patches = (if old ? "patches" then old.patches else []) ++ [ ./twisted.patch ]; +}) diff --git a/nixos/pkgs/twisted.patch b/nixos/pkgs/twisted.patch new file mode 100644 index 0000000000000000000000000000000000000000..9f50368c8cffe60a819306687b5f78df228d4b61 --- /dev/null +++ b/nixos/pkgs/twisted.patch @@ -0,0 +1,23 @@ +diff --git a/src/twisted/internet/_resolver.py b/src/twisted/internet/_resolver.py +index 1c16174a2..8c8249db4 100644 +--- a/src/twisted/internet/_resolver.py ++++ b/src/twisted/internet/_resolver.py +@@ -74,6 +74,8 @@ class GAIResolver(object): + L{getaddrinfo} in a thread. + """ + ++ _log = Logger() ++ + def __init__(self, reactor, getThreadPool=None, getaddrinfo=getaddrinfo): + """ + Create a L{GAIResolver}. +@@ -124,6 +126,9 @@ class GAIResolver(object): + socketType) + except gaierror: + return [] ++ except Exception as e: ++ self._log.failure("Problem resolving {hostName}", hostName=hostName) ++ return [] + d = deferToThreadPool(self._reactor, pool, get) + resolution = HostResolution(hostName) + resolutionReceiver.resolutionBegan(resolution)