summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay <[email protected]>2024-03-02 11:47:30 +0000
committerAkshay <[email protected]>2024-03-02 11:47:30 +0000
commit6798a20e5482b574c8e02e5ff260d72ea6431a29 (patch)
tree070feaaa7088119a5bd8109f1b49ce29c61687ea
init
-rw-r--r--flake.lock59
-rw-r--r--flake.nix143
2 files changed, 202 insertions, 0 deletions
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..0fc6590
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,59 @@
1{
2 "nodes": {
3 "flaresolverr-src": {
4 "flake": false,
5 "locked": {
6 "lastModified": 1709156333,
7 "narHash": "sha256-pf5sibZ9Vjc98UOVTEUlKrBoXXKiykrt+szXLbNJB3k=",
8 "owner": "FlareSolverr",
9 "repo": "FlareSolverr",
10 "rev": "fd773e59097c1aca4e08edc07c1ed30164f88bd3",
11 "type": "github"
12 },
13 "original": {
14 "owner": "FlareSolverr",
15 "ref": "v3.3.16",
16 "repo": "FlareSolverr",
17 "type": "github"
18 }
19 },
20 "nixpkgs": {
21 "locked": {
22 "lastModified": 1707205916,
23 "narHash": "sha256-fmRJilYGlB7VCt3XsdYxrA0u8e/K84O5xYucerUY0iM=",
24 "path": "/nix/store/6gjnggwf6024m5yj8gz04g8pv3ilfz98-source",
25 "rev": "8cc79aa39bbc6eaedaf286ae655b224c71e02907",
26 "type": "path"
27 },
28 "original": {
29 "id": "nixpkgs",
30 "type": "indirect"
31 }
32 },
33 "root": {
34 "inputs": {
35 "flaresolverr-src": "flaresolverr-src",
36 "nixpkgs": "nixpkgs",
37 "undetected-chromedriver-src": "undetected-chromedriver-src"
38 }
39 },
40 "undetected-chromedriver-src": {
41 "flake": false,
42 "locked": {
43 "lastModified": 1708190030,
44 "narHash": "sha256-Qe+GrsUPnhjJMDgjdUCloapjj0ggFlm/Dr42WLcmb1o=",
45 "owner": "ultrafunkamsterdam",
46 "repo": "undetected-chromedriver",
47 "rev": "0aa5fbe252370b4cb2b95526add445392cad27ba",
48 "type": "github"
49 },
50 "original": {
51 "owner": "ultrafunkamsterdam",
52 "repo": "undetected-chromedriver",
53 "type": "github"
54 }
55 }
56 },
57 "root": "root",
58 "version": 7
59}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..742af2f
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,143 @@
1# mostly lifted from https://github.com/xddxdd/nur-packages, converted into a standalone flake
2{
3 description = "Proxy server to bypass CloudFlare protection";
4
5 inputs = {
6 flaresolverr-src = {
7 url = github:FlareSolverr/FlareSolverr/v3.3.16;
8 flake = false;
9 };
10 undetected-chromedriver-src = {
11 url = github:ultrafunkamsterdam/undetected-chromedriver;
12 flake = false;
13 };
14 };
15
16 outputs =
17 { self
18 , nixpkgs
19 , flaresolverr-src
20 , undetected-chromedriver-src
21 }:
22 let
23 supportedSystems = [ "x86_64-linux" ];
24 forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
25 nixpkgsFor = forAllSystems (system: import nixpkgs {
26 inherit system;
27 overlays = [ self.overlays.default ];
28 });
29 in
30 {
31 overlays.default = final: prev: {
32 flaresolverr =
33 let
34 python = final.python3.withPackages (p:
35 with p; [
36 bottle
37 waitress
38 selenium
39 func-timeout
40 prometheus-client
41 requests
42 websockets
43 xvfbwrapper
44 ]);
45
46 path = final.lib.makeBinPath [
47 final.chromium
48 final.undetected-chromedriver-bin
49 final.xorg.xorgserver
50 ];
51 in
52 final.stdenv.mkDerivation {
53 pname = "flaresolverr";
54 version = "v3.3.15";
55 src = flaresolverr-src;
56
57 nativeBuildInputs = [ final.makeWrapper ];
58
59 postPatch = ''
60 substituteInPlace src/utils.py \
61 --replace 'PATCHED_DRIVER_PATH = None' 'PATCHED_DRIVER_PATH = "${final.undetected-chromedriver-bin}/bin/undetected_chromedriver"'
62 '';
63
64 installPhase = ''
65 mkdir -p $out/bin $out/opt
66 cp -r * $out/opt/
67
68 makeWrapper ${python}/bin/python $out/bin/flaresolverr \
69 --add-flags "$out/opt/src/flaresolverr.py" \
70 --set PATH "${path}"
71 '';
72
73 meta = with final.lib; {
74 description = "Proxy server to bypass Cloudflare protection";
75 homepage = "https://github.com/FlareSolverr/FlareSolverr";
76 license = licenses.mit;
77 };
78 };
79
80 undetected_chromedriver = final.python3Packages.buildPythonPackage {
81 pname = "undetected-chromedriver";
82 version = "0aa5fbe252370b4cb2b95526add445392cad27ba";
83 src = undetected-chromedriver-src;
84
85 buildInputs = with final.python3Packages; [
86 selenium
87 requests
88 websockets
89 ];
90
91 preConfigure = ''
92 sed -i "s#selenium>=4.9.0#selenium#g" setup.py
93 '';
94
95 };
96
97 undetected-chromedriver-bin =
98 let
99 py = final.python3.withPackages (p:
100 with p; [
101 requests
102 selenium
103 websockets
104 final.undetected_chromedriver
105 ]);
106 specSystem = "linux64";
107 in
108 final.chromedriver.overrideAttrs (old: {
109 pname = "undetected-chromedriver-bin";
110 postPatch = ''
111 export HOME=$(pwd)
112 export CHROMEDRIVER=$(pwd)/chromedriver-${specSystem}/chromedriver
113
114 ls -alh
115
116 ${py}/bin/python <<EOF
117 from undetected_chromedriver.patcher import Patcher
118 exit(not Patcher(executable_path="''${CHROMEDRIVER}").patch())
119 EOF
120
121 # Make sure chromedriver is properly patched
122 grep "undetected chromedriver" "''${CHROMEDRIVER}"
123 '';
124 installPhase =
125 (builtins.replaceStrings
126 [ "$out/bin/chromedriver" ] [ "$out/bin/undetected_chromedriver" ]
127 old.installPhase)
128 # Trick undetected-chromedriver python library into thinking that chromedriver is patched
129 + ''
130 echo "# undetected chromedriver" >> $out/bin/undetected_chromedriver
131 '';
132 });
133 };
134
135 packages = forAllSystems (system: {
136 inherit (nixpkgsFor."${system}") flaresolverr;
137 });
138
139 defaultPackage = forAllSystems (system: self.packages."${system}".flaresolverr);
140
141 };
142}
143