summary refs log tree commit diff
diff options
context:
space:
mode:
authorOkina Matara <okinan@chiru.no>2018-05-17 18:56:58 -0500
committerOkina Matara <okinan@chiru.no>2018-05-26 07:03:49 -0500
commit14a26f0153c4284ccb8ac9abf01ea57421156be1 (patch)
tree172db323d06303ff138c840f76d11d08efdae6e0
parent934db656b1821d4c6a1598bfec76e8ca0a3b7f27 (diff)
downloadnixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar.gz
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar.bz2
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar.lz
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar.xz
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.tar.zst
nixpkgs-14a26f0153c4284ccb8ac9abf01ea57421156be1.zip
meguca: init at git-2018-05-17
-rw-r--r--nixos/modules/misc/ids.nix2
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/web-servers/meguca.nix123
-rw-r--r--pkgs/servers/meguca/default.nix47
-rw-r--r--pkgs/servers/meguca/server_deps.nix219
-rw-r--r--pkgs/top-level/all-packages.nix2
6 files changed, 394 insertions, 0 deletions
diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix
index a34e9c50c4c..73231edf077 100644
--- a/nixos/modules/misc/ids.nix
+++ b/nixos/modules/misc/ids.nix
@@ -316,6 +316,7 @@
       monetdb = 290;
       restic = 291;
       openvpn = 292;
+      meguca = 293;
 
       # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
 
@@ -592,6 +593,7 @@
       monetdb = 290;
       restic = 291;
       openvpn = 292;
+      meguca = 293;
 
       # When adding a gid, make sure it doesn't match an existing
       # uid. Users and groups with the same name should have equal
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 65b4cfd7e0b..12d9e1adf23 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -667,6 +667,7 @@
   ./services/web-servers/lighttpd/default.nix
   ./services/web-servers/lighttpd/gitweb.nix
   ./services/web-servers/lighttpd/inginious.nix
+  ./services/web-servers/meguca.nix
   ./services/web-servers/mighttpd2.nix
   ./services/web-servers/minio.nix
   ./services/web-servers/nginx/default.nix
diff --git a/nixos/modules/services/web-servers/meguca.nix b/nixos/modules/services/web-servers/meguca.nix
new file mode 100644
index 00000000000..6f3f5329daf
--- /dev/null
+++ b/nixos/modules/services/web-servers/meguca.nix
@@ -0,0 +1,123 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+let
+  cfg = config.services.meguca;
+  postgres = config.services.postgresql;
+in
+{
+  options.services.meguca = {
+    enable = mkEnableOption "meguca";
+
+    baseDir = mkOption {
+      type = types.path;
+      default = "/var/lib/meguca";
+      description = "Location where meguca stores it's database and links.";
+    };
+
+    password = mkOption {
+      type = types.str;
+      default = "meguca";
+      description = "Password for the meguca database.";
+    };
+
+    reverseProxy = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = "Reverse proxy IP.";
+    };
+
+    sslCertificate = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = "Path to the SSL certificate.";
+    };
+
+    listenAddress = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = "Listen on a specific IP address and port.";
+    };
+
+    cacheSize = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = "Cache size in MB.";
+    };
+
+    postgresArgs = mkOption {
+      type = types.nullOr types.str;
+      default = null;
+      description = "Postgresql connection arguments.";
+    };
+
+    compressTraffic = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Compress all traffic with gzip.";
+    };
+
+    assumeReverseProxy = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Assume the server is behind a reverse proxy, when resolving client IPs.";
+    };
+
+    httpsOnly = mkOption {
+      type = types.bool;
+      default = false;
+      description = "Serve and listen only through HTTPS.";
+    };
+  };
+
+  config = mkIf cfg.enable {
+    security.sudo.enable = cfg.enable == true;
+    services.postgresql.enable = cfg.enable == true;
+
+    systemd.services.meguca = {
+      description = "meguca";
+      after = [ "network.target" "postgresql.service" ];
+      wantedBy = [ "multi-user.target" ];
+
+      preStart = ''
+        # Ensure folder exists and links are correct or create them
+        mkdir -p ${cfg.baseDir}
+        ln -sf ${pkgs.meguca}/share/meguca/www ${cfg.baseDir}
+        chown -R meguca:meguca ${cfg.baseDir}
+
+        # Ensure the database is correct or create it
+        ${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createuser -SDR meguca || true
+        ${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/psql -c "ALTER ROLE meguca WITH PASSWORD '${cfg.password}';" || true
+        ${pkgs.sudo}/bin/sudo -u ${postgres.superUser} ${postgres.package}/bin/createdb -T template0 -E UTF8 -O meguca meguca || true
+      '';
+
+      serviceConfig = {
+        PermissionsStartOnly = true;
+        Type = "forking";
+        User = "meguca";
+        Group = "meguca";
+        WorkingDirectory = "${cfg.baseDir}";
+        ExecStart = ''${pkgs.meguca}/bin/meguca${if cfg.reverseProxy != null then " -R ${cfg.reverseProxy}" else ""}${if cfg.sslCertificate != null then " -S ${cfg.sslCertificate}" else ""}${if cfg.listenAddress != null then " -a ${cfg.listenAddress}" else ""}${if cfg.cacheSize != null then " -c ${cfg.cacheSize}" else ""}${if cfg.postgresArgs != null then " -d  ${cfg.postgresArgs}" else ""}${if cfg.compressTraffic then " -g" else ""}${if cfg.assumeReverseProxy then " -r" else ""}${if cfg.httpsOnly then " -s" else ""} start'';
+        ExecStop = "${pkgs.meguca}/bin/meguca stop";
+        ExecRestart = "${pkgs.meguca}/bin/meguca restart";
+      };
+    };
+
+    users = {
+      extraUsers.meguca = {
+        description = "meguca server service user";
+        home = "${cfg.baseDir}";
+        createHome = true;
+        group = "meguca";
+        uid = config.ids.uids.meguca;
+      };
+
+      extraGroups.meguca = {
+        gid = config.ids.gids.meguca;
+        members = [ "meguca" ];
+      };
+    };
+  };
+
+  meta.maintainers = [ maintainers.chiiruno ];
+}
diff --git a/pkgs/servers/meguca/default.nix b/pkgs/servers/meguca/default.nix
new file mode 100644
index 00000000000..421a6b456a9
--- /dev/null
+++ b/pkgs/servers/meguca/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, buildGoPackage, fetchgit, pkgconfig, ffmpeg-full, graphicsmagick, ghostscript, quicktemplate, go-bindata, easyjson, nodePackages, cmake, emscripten }:
+
+buildGoPackage rec {
+  name = "meguca-unstable-${version}";
+  version = "2018-05-17";
+  rev = "3107c78d95de3b64556f761d3b6dcfd5c590e0ec";
+  goPackagePath = "github.com/bakape/meguca";
+  goDeps = ./server_deps.nix;
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ pkgconfig cmake ];
+  buildInputs = [ ffmpeg-full graphicsmagick ghostscript quicktemplate go-bindata easyjson emscripten ];
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/bakape/meguca";
+    sha256 = "1rvkr5af5d4rlyxylynnpn76hvxq9xd7j8q6mffn6qj6j5p4qg4p";
+    fetchSubmodules = true;
+  };
+
+  configurePhase = ''
+    export HOME=$PWD
+    export GOPATH=$GOPATH:$HOME/go
+    ln -sf ${nodePackages.meguca}/lib/node_modules/meguca/node_modules
+    sed -i "/npm install --progress false --depth 0/d" Makefile
+    make generate_clean
+    go generate meguca/...
+  '';
+
+  buildPhase = ''
+    go build -p $NIX_BUILD_CORES meguca
+    make -j $NIX_BUILD_CORES client wasm
+  '';
+
+  installPhase = ''
+    mkdir -p $bin/bin $bin/share/meguca
+    cp meguca $bin/bin
+    cp -r www $bin/share/meguca
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/bakape/meguca";
+    description = "Anonymous realtime imageboard focused on high performance, free speech and transparent moderation";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ chiiruno ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/servers/meguca/server_deps.nix b/pkgs/servers/meguca/server_deps.nix
new file mode 100644
index 00000000000..6501b7cabb4
--- /dev/null
+++ b/pkgs/servers/meguca/server_deps.nix
@@ -0,0 +1,219 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/Masterminds/squirrel";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/squirrel";
+      rev = "40ef4f86bf59a996c348a9f56ddb4c4d3d49a6df";
+      sha256 = "1zdv8hds2skqz9xrybf1pw5hfxzd27c35fsrfq11ryif1wxwbkyp";
+    };
+  }
+  {
+    goPackagePath = "github.com/Soreil/apngdetector";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Soreil/apngdetector";
+      rev = "e412c29dbc998dfcffe266b12587b29096ac4d46";
+      sha256 = "0ci71nk6jijspzbgcfrgi4in9lmd2c39f6xzcf9k3z9ixwv8c79j";
+    };
+  }
+  {
+    goPackagePath = "github.com/aquilax/tripcode";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aquilax/tripcode";
+      rev = "db58da84bb12e26032493b73eb3b58ba884590ef";
+      sha256 = "0maqk0rwp39kcc64w4mfkgcvn2q76hqwziwc3g7ckc1qpwxql5z3";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/mnemonics";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/mnemonics";
+      rev = "056d8d3259923b93bb0449a45b0c56ac20c77f1b";
+      sha256 = "137dl4bkpszj7pm4dyj222xdvy9lmwsgmm0l6bxni0msc3jdrqkl";
+    };
+  }
+  {
+    goPackagePath = "github.com/bakape/thumbnailer";
+    fetch = {
+      type = "git";
+      url = "https://github.com/bakape/thumbnailer";
+      rev = "5b92eb4c4500fd8e004e4cc9eeb2038961e2004f";
+      sha256 = "0z9myzp6rjyylh91ibd1nfpz7za1gxg4n3pnn7sw54i9zyws1l4x";
+    };
+  }
+  {
+    goPackagePath = "github.com/boltdb/bolt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/boltdb/bolt";
+      rev = "fd01fc79c553a8e99d512a07e8e0c63d4a3ccfc5";
+      sha256 = "12f5swiwzcamk87r9j73nn7rmyyday7jkgzfh7x5wdg9blzhrir2";
+    };
+  }
+  {
+    goPackagePath = "github.com/dchest/captcha";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dchest/captcha";
+      rev = "6a29415a8364ec2971fdc62d9e415ed53fc20410";
+      sha256 = "0j0yspx5rlyx7fdfcx74viqc8jlq3nwyd62bdx4gvbd56cppldcm";
+    };
+  }
+  {
+    goPackagePath = "github.com/dimfeld/httptreemux";
+    fetch = {
+      type = "git";
+      url = "https://github.com/dimfeld/httptreemux";
+      rev = "7f532489e7739b3d49df5c602bf63549881fe753";
+      sha256 = "0hkw04rsvljvx8ynqjgz9cb743x09fd2xiiycrgz5vbsa8q9iyyk";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/handlers";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/handlers";
+      rev = "13a38d26174b16d5b4bf6f1094c1389ec9879572";
+      sha256 = "0zg43blpyyy667y0kpiifk5a2w35jh8qkk4zwlabb365c0lzrv6v";
+    };
+  }
+  {
+    goPackagePath = "github.com/gorilla/websocket";
+    fetch = {
+      type = "git";
+      url = "https://github.com/gorilla/websocket";
+      rev = "21ab95fa12b9bdd8fecf5fa3586aad941cc98785";
+      sha256 = "1ygg6cr84461d6k3nzbja0dxhcgf5zvry2w10f6i7291ghrcwhyy";
+    };
+  }
+  {
+    goPackagePath = "github.com/kardianos/osext";
+    fetch = {
+      type = "git";
+      url = "https://github.com/kardianos/osext";
+      rev = "ae77be60afb1dcacde03767a8c37337fad28ac14";
+      sha256 = "056dkgxrqjj5r18bnc3knlpgdz5p3yvp12y4y978hnsfhwaqvbjz";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/builder";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/builder";
+      rev = "1b87b36280d04fe7882d1512bf038ea2967ad534";
+      sha256 = "015q46awbyp47vld07yi7d27i0lkd82r7qn5230bb9qxl4mcfiqc";
+    };
+  }
+  {
+    goPackagePath = "github.com/lann/ps";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lann/ps";
+      rev = "62de8c46ede02a7675c4c79c84883eb164cb71e3";
+      sha256 = "10yhcyymypvdiiipchsp80jbglk8c4r7lq7h54v9f4mxmvz6xgf7";
+    };
+  }
+  {
+    goPackagePath = "github.com/lib/pq";
+    fetch = {
+      type = "git";
+      url = "https://github.com/lib/pq";
+      rev = "d34b9ff171c21ad295489235aec8b6626023cd04";
+      sha256 = "1gmdpp7wxlkk0szgq96rf06dj2ifjl0zbvbmg2g4bgxandh552jv";
+    };
+  }
+  {
+    goPackagePath = "github.com/mailru/easyjson";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mailru/easyjson";
+      rev = "8b799c424f57fa123fc63a99d6383bc6e4c02578";
+      sha256 = "15ba6drfmw98lzw5qjh3ijcxh9iz9rcp3hid169yfd08l06z05w0";
+    };
+  }
+  {
+    goPackagePath = "github.com/nyarlabo/go-crypt";
+    fetch = {
+      type = "git";
+      url = "https://github.com/nyarlabo/go-crypt";
+      rev = "d9a5dc2b789bc330075d4b805d9b7c971f2865a1";
+      sha256 = "0249hbwvhy0xywi9b5k8964km27pvfkr3jvliy3azri6vnyvkkx1";
+    };
+  }
+  {
+    goPackagePath = "github.com/oschwald/maxminddb-golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oschwald/maxminddb-golang";
+      rev = "c5bec84d1963260297932a1b7a1753c8420717a7";
+      sha256 = "0n8vhinm2x0prbn0vhxw38c24iiaizwk1b76s4srg30gk3dfdd39";
+    };
+  }
+  {
+    goPackagePath = "github.com/sevlyar/go-daemon";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sevlyar/go-daemon";
+      rev = "45a2ba1b7c6710a044163fa109bf08d060bc3afa";
+      sha256 = "1fd8cwljgbxsm3w38pii0n02zg8s53x7j08w784csj3sfzq7rbv4";
+    };
+  }
+  {
+    goPackagePath = "github.com/ulikunitz/xz";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ulikunitz/xz";
+      rev = "0c6b41e72360850ca4f98dc341fd999726ea007f";
+      sha256 = "0a6l7sp67ipxim093qh6fvw8knbxj24l7bj5lykcddi5gwfi78n3";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/bytebufferpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/bytebufferpool";
+      rev = "e746df99fe4a3986f4d4f79e13c1e0117ce9c2f7";
+      sha256 = "01lqzjddq6kz9v41nkky7wbgk7f1cw036sa7ldz10d82g5klzl93";
+    };
+  }
+  {
+    goPackagePath = "github.com/valyala/quicktemplate";
+    fetch = {
+      type = "git";
+      url = "https://github.com/valyala/quicktemplate";
+      rev = "a91e0946457b6583004fbfc159339b8171423aed";
+      sha256 = "1z89ang5pkq5qs5b2nwhzyrw0zjlsas539l9kix374fhka49n8yc";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "21052ae46654ecf18dfdba0f7c12701a1e2b3164";
+      sha256 = "0wzi1knv181h6y8k3k7wlr7sw492pgxir4gyg2riavrk8c23y2s2";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "7db1c3b1a98089d0071c84f646ff5c96aad43682";
+      sha256 = "0z20mhdy3wiy53xch0fp49gv574qrs77fps5wxi12n57840s2jfr";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/text";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/text";
+      rev = "7922cc490dd5a7dbaa7fd5d6196b49db59ac042f";
+      sha256 = "06sicjc24hv7v9p1l6psaq87w4lycx3mjixd6gsd1wnd4jhqvlnr";
+    };
+  }
+]
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index a8a0e0f1d23..289b0a6617b 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -12607,6 +12607,8 @@ with pkgs;
 
   mediatomb = callPackage ../servers/mediatomb { };
 
+  meguca = callPackage ../servers/meguca/default.nix { };
+
   memcached = callPackage ../servers/memcached {};
 
   meteor = callPackage ../servers/meteor/default.nix { };