diff options
author | Akshay <[email protected]> | 2024-03-02 11:47:30 +0000 |
---|---|---|
committer | Akshay <[email protected]> | 2024-03-02 11:47:30 +0000 |
commit | 6798a20e5482b574c8e02e5ff260d72ea6431a29 (patch) | |
tree | 070feaaa7088119a5bd8109f1b49ce29c61687ea |
init
-rw-r--r-- | flake.lock | 59 | ||||
-rw-r--r-- | flake.nix | 143 |
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 | |||