|
6 | 6 | curl,
|
7 | 7 | postgresql,
|
8 | 8 | libuv,
|
9 |
| - writeShellApplication, |
10 | 9 | makeWrapper,
|
| 10 | + switch-ext-version, |
11 | 11 | }:
|
12 | 12 |
|
13 | 13 | let
|
14 |
| - enableOverlayOnPackage = writeShellApplication { |
15 |
| - name = "enable_overlay_on_package"; |
16 |
| - runtimeInputs = [ pkgs.coreutils ]; |
17 |
| - text = '' |
18 |
| - # This script enable overlayfs on a specific nix store path |
19 |
| - set -euo pipefail |
20 |
| -
|
21 |
| - if [ $# -ne 1 ]; then |
22 |
| - echo "Usage: $0 <path>" |
23 |
| - exit 1 |
24 |
| - fi |
25 |
| -
|
26 |
| - PACKAGE_PATH="$1" |
27 |
| - PACKAGE_NAME=$(basename "$1"|cut -c 34-) |
28 |
| -
|
29 |
| - # Nixos compatibility: use systemd mount unit |
30 |
| - #shellcheck disable=SC1091 |
31 |
| - source /etc/os-release || true |
32 |
| - if [[ "$ID" == "nixos" ]]; then |
33 |
| - # This script is used in NixOS test only for the moment |
34 |
| - SYSTEMD_DIR="/run/systemd/system" |
35 |
| - else |
36 |
| - SYSTEMD_DIR="/etc/systemd/system" |
37 |
| - fi |
38 |
| -
|
39 |
| - # Create required directories for overlay |
40 |
| - echo "$PACKAGE_NAME" |
41 |
| - mkdir -p "/var/lib/overlay/$PACKAGE_NAME/"{upper,work} |
42 |
| -
|
43 |
| - PACKAGE_MOUNT_PATH=$(systemd-escape -p --suffix=mount "$PACKAGE_PATH") |
44 |
| -
|
45 |
| - cat > "$SYSTEMD_DIR/$PACKAGE_MOUNT_PATH" <<EOF |
46 |
| - [Unit] |
47 |
| - Description=Overlay mount for PostgreSQL extension $PACKAGE_NAME |
48 |
| -
|
49 |
| - [Mount] |
50 |
| - What=overlay |
51 |
| - Type=overlay |
52 |
| - Options=lowerdir=$PACKAGE_PATH,upperdir=/var/lib/overlay/$PACKAGE_NAME/upper,workdir=/var/lib/overlay/$PACKAGE_NAME/work |
53 |
| -
|
54 |
| - [Install] |
55 |
| - WantedBy=multi-user.target |
56 |
| - EOF |
57 |
| -
|
58 |
| - systemctl daemon-reload |
59 |
| - systemctl start "$PACKAGE_MOUNT_PATH" |
60 |
| - ''; |
61 |
| - }; |
62 |
| - switchPgNetVersion = writeShellApplication { |
63 |
| - name = "switch_pg_net_version"; |
64 |
| - runtimeInputs = [ pkgs.coreutils ]; |
65 |
| - text = '' |
66 |
| - # Create version switcher script |
67 |
| - set -euo pipefail |
68 |
| -
|
69 |
| - # Check if the required environment variables are set |
70 |
| - if [ -z "''${EXT_WRAPPER:-}" ]; then |
71 |
| - echo "Error: EXT_WRAPPER environment variable is not set." |
72 |
| - exit 1 |
73 |
| - fi |
74 |
| -
|
75 |
| - if [ $# -ne 1 ]; then |
76 |
| - echo "Usage: $0 <version>" |
77 |
| - echo "Example: $0 0.10.0" |
78 |
| - echo "" |
79 |
| - echo "Optional environment variables:" |
80 |
| - echo " NIX_PROFILE - Path to nix profile (default: /var/lib/postgresql/.nix-profile)" |
81 |
| - echo " LIB_DIR - Override library directory" |
82 |
| - echo " EXTENSION_DIR - Override extension directory" |
83 |
| - exit 1 |
84 |
| - fi |
85 |
| -
|
86 |
| - VERSION="$1" |
87 |
| - echo "$VERSION" |
88 |
| -
|
89 |
| - # Enable overlay on the wrapper package to be able to switch version |
90 |
| - ${lib.getExe enableOverlayOnPackage} "$EXT_WRAPPER" |
91 |
| -
|
92 |
| - # Check if version exists |
93 |
| - EXT_WRAPPER_LIB="$EXT_WRAPPER/lib" |
94 |
| - PG_NET_LIB_TO_USE="$EXT_WRAPPER_LIB/pg_net-$VERSION${postgresql.dlSuffix}" |
95 |
| - if [ ! -f "$PG_NET_LIB_TO_USE" ]; then |
96 |
| - echo "Error: Version $VERSION not found in $EXT_WRAPPER_LIB" |
97 |
| - echo "Available versions:" |
98 |
| - #shellcheck disable=SC2012 |
99 |
| - ls "$EXT_WRAPPER_LIB"/pg_net-*${postgresql.dlSuffix} 2>/dev/null | sed 's/.*pg_net-/ /' | sed 's/${postgresql.dlSuffix}$//' || echo " No versions found" |
100 |
| - exit 1 |
101 |
| - fi |
102 |
| -
|
103 |
| - # Update library symlink |
104 |
| - ln -sfnv "$PG_NET_LIB_TO_USE" "$EXT_WRAPPER_LIB/pg_net${postgresql.dlSuffix}" |
105 |
| -
|
106 |
| - # Update control file |
107 |
| - EXT_WRAPPER_SHARE="$EXT_WRAPPER/share/postgresql/extension" |
108 |
| - echo "default_version = '$VERSION'" > "$EXT_WRAPPER_SHARE/pg_net.control" |
109 |
| - cat "$EXT_WRAPPER_SHARE/pg_net--$VERSION.control" >> "$EXT_WRAPPER_SHARE/pg_net.control" |
110 |
| -
|
111 |
| - echo "Successfully switched pg_net to version $VERSION" |
112 |
| - ''; |
113 |
| - }; |
114 | 14 | pname = "pg_net";
|
115 | 15 | build =
|
116 | 16 | version: hash:
|
@@ -211,13 +111,17 @@ pkgs.buildEnv {
|
211 | 111 | }"
|
212 | 112 | )
|
213 | 113 |
|
214 |
| - makeWrapper ${lib.getExe switchPgNetVersion} $out/bin/switch_pg_net_version \ |
215 |
| - --prefix EXT_WRAPPER : "$out" |
| 114 | + makeWrapper ${lib.getExe switch-ext-version} $out/bin/switch_pg_net_version \ |
| 115 | + --prefix EXT_WRAPPER : "$out" --prefix EXT_NAME : "${pname}" |
216 | 116 | '';
|
217 | 117 |
|
218 | 118 | passthru = {
|
219 |
| - inherit versions numberOfVersions switchPgNetVersion; |
| 119 | + inherit versions numberOfVersions; |
220 | 120 | pname = "${pname}-all";
|
| 121 | + hasBackgroundWorker = true; |
| 122 | + defaultSettings = { |
| 123 | + shared_preload_libraries = [ "pg_net" ]; |
| 124 | + }; |
221 | 125 | version =
|
222 | 126 | "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);
|
223 | 127 | };
|
|
0 commit comments