Import postgresql

This patch imports the postgresql server so that we can migrate our
scouting server to it. Right now the scouting server uses sqlite3, but
our visualization tool Tableau has no support for importing an sqlite
database (or even scraping JSON from a web page).

A future patch will migrate the scouting server code to use
postgresql.

Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: I3c2496298ee598858b1f31d564fb0c853b91dbe9
diff --git a/WORKSPACE b/WORKSPACE
index 58fb14f..f574965 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -12,6 +12,10 @@
     apache2_debs = "files",
 )
 load(
+    "//debian:postgresql_amd64.bzl",
+    postgresql_amd64_debs = "files",
+)
+load(
     "//debian:patch.bzl",
     patch_debs = "files",
 )
@@ -93,6 +97,8 @@
 
 generate_repositories_for_debs(apache2_debs)
 
+generate_repositories_for_debs(postgresql_amd64_debs)
+
 generate_repositories_for_debs(patch_debs)
 
 generate_repositories_for_debs(pandoc_debs)
@@ -525,6 +531,13 @@
 )
 
 http_archive(
+    name = "postgresql_amd64",
+    build_file = "@//debian:postgresql_amd64.BUILD",
+    sha256 = "2b8bb77deaf58f798c296ce31ee7a32781395d55e05dcddc8a7da7e827f38d7f",
+    url = "https://www.frc971.org/Build-Dependencies/postgresql_amd64.tar.gz",
+)
+
+http_archive(
     name = "patch",
     build_file = "@//debian:patch.BUILD",
     sha256 = "b5ce139648a2e04f5585948ddad2fdae24dd4ee7976ac5a22d6ae7bd5674631e",
diff --git a/debian/BUILD b/debian/BUILD
index 2aeabf2..3f13244 100644
--- a/debian/BUILD
+++ b/debian/BUILD
@@ -7,6 +7,10 @@
     apache2_debs = "files",
 )
 load(
+    ":postgresql_amd64.bzl",
+    postgresql_amd64_debs = "files",
+)
+load(
     ":patch.bzl",
     patch_debs = "files",
 )
@@ -173,6 +177,28 @@
 )
 
 download_packages(
+    name = "download_postgresql_deps",
+    excludes = [
+        "adduser",
+        "debconf",
+        "debconf-2.0",
+        "libsystemd0",
+        "lsb-base",
+        "libstdc++6",
+        "libc-bin",
+        "libc-l10n",
+        "netbase",
+        "ucf",
+        "locales",
+        "locales-all",
+    ],
+    packages = [
+        "postgresql",
+    ],
+    target_compatible_with = ["@platforms//os:linux"],
+)
+
+download_packages(
     name = "download_patch_deps",
     packages = [
         "patch",
@@ -287,6 +313,12 @@
 )
 
 generate_deb_tarball(
+    name = "postgresql_amd64",
+    files = postgresql_amd64_debs,
+    target_compatible_with = ["@platforms//os:linux"],
+)
+
+generate_deb_tarball(
     name = "patch",
     files = patch_debs,
     target_compatible_with = ["@platforms//os:linux"],
diff --git a/debian/postgresql_amd64.BUILD b/debian/postgresql_amd64.BUILD
new file mode 100644
index 0000000..c2f8331
--- /dev/null
+++ b/debian/postgresql_amd64.BUILD
@@ -0,0 +1,56 @@
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+
+TEMPLATE = """\
+#!/bin/bash
+
+# --- begin runfiles.bash initialization v2 ---
+# Copy-pasted from the Bazel Bash runfiles library v2.
+set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash
+source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \
+  source "$0.runfiles/$f" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+  source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \
+  { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e
+# --- end runfiles.bash initialization v2 ---
+
+add_ld_library_path_for() {
+  local file="$1"
+  local dir
+  local resolved_file
+  if ! resolved_file="$(rlocation "postgresql_amd64/$file")"; then
+    echo "Couldn't find file postgresql_amd64/${file}" >&2
+    exit 1
+  fi
+  dir="$(dirname "${resolved_file}")"
+  export LD_LIBRARY_PATH="${dir}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+}
+
+add_ld_library_path_for usr/lib/x86_64-linux-gnu/libbsd.so.0.11.3
+add_ld_library_path_for lib/x86_64-linux-gnu/libreadline.so.8.1
+
+exec $(rlocation postgresql_amd64/usr/lib/postgresql/13/bin/%s) "$@"
+"""
+
+[(
+    write_file(
+        name = "generate_%s_wrapper" % binary,
+        out = "%s.sh" % binary,
+        content = [TEMPLATE % binary],
+    ),
+    sh_binary(
+        name = binary,
+        srcs = ["%s.sh" % binary],
+        data = glob([
+            "usr/lib/**/*",
+            "lib/**/*",
+        ]),
+        visibility = ["//visibility:public"],
+        deps = [
+            "@bazel_tools//tools/bash/runfiles",
+        ],
+    ),
+) for binary in (
+    "postgres",
+    "initdb",
+)]
diff --git a/debian/postgresql_amd64.bzl b/debian/postgresql_amd64.bzl
new file mode 100644
index 0000000..6fc9ba5
--- /dev/null
+++ b/debian/postgresql_amd64.bzl
@@ -0,0 +1,39 @@
+files = {
+    "libbsd0_0.11.3-1_amd64.deb": "284a7b8dcfcad74770f57360721365317448b38ab773db542bf630e94e60c13e",
+    "libedit2_3.1-20191231-2+b1_amd64.deb": "ac545f6ad10ba791aca24b09255ad1d6d943e6bc7c5511d5998e104aee51c943",
+    "libffi7_3.3-6_amd64.deb": "30ca89bfddae5fa6e0a2a044f22b6e50cd17c4bc6bc850c579819aeab7101f0f",
+    "libgdbm-compat4_1.19-2_amd64.deb": "e62caed68b0ffaa03b5fa539d6fdc08c4151f66236d5878949bead0b71b7bb09",
+    "libgdbm6_1.19-2_amd64.deb": "e54cfe4d8b8f209bb7df31a404ce040f7c2f9b1045114a927a7e1061cdf90727",
+    "libgnutls30_3.7.1-5_amd64.deb": "20b0189b72ad4c791cf5b280c111d41ce071a04dab0e9a9d7daa9504a7a7b543",
+    "libhogweed6_3.7.3-1_amd64.deb": "6aab2e892cdb2dfba45707601bc6c3b19aa228f70ae5841017f14c3b0ca3d22f",
+    "libicu67_67.1-7_amd64.deb": "2bf5c46254f527865bfd6368e1120908755fa57d83634bd7d316c9b3cfd57303",
+    "libidn2-0_2.3.0-5_amd64.deb": "cb80cd769171537bafbb4a16c12ec427065795946b3415781bc9792e92d60b59",
+    "libldap-2.4-2_2.4.57+dfsg-3_amd64.deb": "4186d0d3f086202d391da49d1bb5ced6dde5eafba1dbcffef9a8e1238a7ef7c3",
+    "libllvm11_11.0.1-2_amd64.deb": "eaff3c8dd6039af90b8b6bdbf33433e35d8c808a7aa195d0e3800ef5e61affff",
+    "libmd0_1.0.3-3_amd64.deb": "9e425b3c128b69126d95e61998e1b5ef74e862dd1fc953d91eebcc315aea62ea",
+    "libnettle8_3.7.3-1_amd64.deb": "e4f8ec31ed14518b241eb7b423ad5ed3f4a4e8ac50aae72c9fd475c569582764",
+    "libp11-kit0_0.23.22-1_amd64.deb": "bfef5f31ee1c730e56e16bb62cc5ff8372185106c75bf1ed1756c96703019457",
+    "libperl5.32_5.32.1-4+deb11u2_amd64.deb": "224cafe65968deb83168113b74dff2d2f13b115a41d99eb209ed3b8f981df0b3",
+    "libpq5_13.5-0+deb11u1_amd64.deb": "0bfa1dc24e1275963961efdcc6d2ff4d2eec390d7acd5a6aee3162569ae1886c",
+    "libreadline8_8.1-1_amd64.deb": "162ba9fdcde81b5502953ed4d84b24e8ad4e380bbd02990ab1a0e3edffca3c22",
+    "libsasl2-2_2.1.27+dfsg-2.1+deb11u1_amd64.deb": "2e86ab7a3329aad4b7350a9b067fe8f80b680302f2f82d94f73f9bf075404460",
+    "libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_amd64.deb": "122bf3de4ca0ec873bc35bdde1f21ec9d91ace4f5245c3b1240e077f866e1ae9",
+    "libtasn1-6_4.16.0-2_amd64.deb": "fd7a200100298c2556e67bdc1a5faf5cf21c3136fa47f381d7e9769233ee88a1",
+    "libtinfo6_6.2+20201114-2_amd64.deb": "aeaf942c71ecc0ed081efdead1a1de304dcd513a9fc06791f26992e76986597b",
+    "libunistring2_0.9.10-4_amd64.deb": "654433ad02d3a8b05c1683c6c29a224500bf343039c34dcec4e5e9515345e3d4",
+    "libuuid1_2.36.1-8+deb11u1_amd64.deb": "31250af4dd3b7d1519326a9a6764d1466a93d8f498cf6545058761ebc38b2823",
+    "libxml2_2.9.10+dfsg-6.7_amd64.deb": "023296a15e1a28607609cb15c7ca0dd8a25160f3e89a0da58368319c7e17d4e0",
+    "libxslt1.1_1.1.34-4_amd64.deb": "17eb62d8973867b61e7f8b21b5c16ed33e151799656e49caf670081707853fb8",
+    "libz3-4_4.8.10-1_amd64.deb": "7a38c2dd985eb9315857588ee06ff297e2b16de159dec85bd2777a43ebe9f458",
+    "openssl_1.1.1k-1+deb11u1_amd64.deb": "ed998755dabb96ffe107c2d41ce685ecbb4fa200f7825ff82c1092f8334bf3cb",
+    "perl-modules-5.32_5.32.1-4+deb11u2_all.deb": "6fa15be322c3c89ec4a07d704ad58d4a2d1aabf866135a859f6d8d58c59e9df4",
+    "perl_5.32.1-4+deb11u2_amd64.deb": "1cebc4516ed7c240b812c7bdd7e6ea0810f513152717ca17ce139ee0dfbc7b0d",
+    "postgresql-13_13.5-0+deb11u1_amd64.deb": "e475540f43756dc1c64de0a8a3b33f2c0e45b39610f091afbfe3b6ef72573c7b",
+    "postgresql-client-13_13.5-0+deb11u1_amd64.deb": "cd1779abafdee712d9ea4ebae62d873b61540fd76beab1cc86e604c12813d005",
+    "postgresql-client-common_225_all.deb": "a867f301751692f9ad127c1dd921c3bce7f3969bdf58c6bf38c57303d1b51d2c",
+    "postgresql-common_225_all.deb": "90216c317fd9f247d8fb1597fb4677cbdf2bbb83811213ce4344a44820449e66",
+    "postgresql_13+225_all.deb": "c8791bd0fd7cce76341cbd2c6ba98991a206441fe948534394239e95d102b4b8",
+    "readline-common_8.1-1_all.deb": "3f947176ef949f93e4ad5d76c067d33fa97cf90b62ee0748acb4f5f64790edc8",
+    "ssl-cert_1.1.0+nmu1_all.deb": "6f3b0c20b0a37b2b196d832910a754cf784f96854daa02a16f4ac46d366cdcb8",
+    "tzdata_2021a-1+deb11u2_all.deb": "4a34cbe17d391e6351386f3530b7ffd096c2cc8582e970f745addc636fa7c397",
+}