nixos/pump.io: remove
This would probably be better maintained in a separate repo as an external NixOS module which gets imported into user's configuration.
This commit is contained in:
parent
4d7c21c35b
commit
21dcead5f0
|
@ -233,7 +233,7 @@
|
||||||
calibre-server = 213;
|
calibre-server = 213;
|
||||||
heapster = 214;
|
heapster = 214;
|
||||||
bepasty = 215;
|
bepasty = 215;
|
||||||
pumpio = 216;
|
# pumpio = 216; # unused, removed 2018-02-24
|
||||||
nm-openvpn = 217;
|
nm-openvpn = 217;
|
||||||
mathics = 218;
|
mathics = 218;
|
||||||
ejabberd = 219;
|
ejabberd = 219;
|
||||||
|
|
|
@ -639,7 +639,6 @@
|
||||||
./services/web-apps/nexus.nix
|
./services/web-apps/nexus.nix
|
||||||
./services/web-apps/pgpkeyserver-lite.nix
|
./services/web-apps/pgpkeyserver-lite.nix
|
||||||
./services/web-apps/matomo.nix
|
./services/web-apps/matomo.nix
|
||||||
./services/web-apps/pump.io.nix
|
|
||||||
./services/web-apps/restya-board.nix
|
./services/web-apps/restya-board.nix
|
||||||
./services/web-apps/tt-rss.nix
|
./services/web-apps/tt-rss.nix
|
||||||
./services/web-apps/selfoss.nix
|
./services/web-apps/selfoss.nix
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
var fs = require('fs');
|
|
||||||
|
|
||||||
var opts = JSON.parse(fs.readFileSync("/dev/stdin").toString());
|
|
||||||
var config = opts.config;
|
|
||||||
|
|
||||||
var readSecret = function(filename) {
|
|
||||||
return fs.readFileSync(filename).toString().trim();
|
|
||||||
};
|
|
||||||
|
|
||||||
if (opts.secretFile) {
|
|
||||||
config.secret = readSecret(opts.secretFile);
|
|
||||||
}
|
|
||||||
if (opts.dbPasswordFile) {
|
|
||||||
config.params.dbpass = readSecret(opts.dbPasswordFile);
|
|
||||||
}
|
|
||||||
if (opts.smtpPasswordFile) {
|
|
||||||
config.smtppass = readSecret(opts.smtpPasswordFile);
|
|
||||||
}
|
|
||||||
if (opts.spamClientSecretFile) {
|
|
||||||
config.spamclientsecret = readSecret(opts.opts.spamClientSecretFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync(opts.outputFile, JSON.stringify(config));
|
|
|
@ -1,438 +0,0 @@
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.pumpio;
|
|
||||||
dataDir = "/var/lib/pump.io";
|
|
||||||
runDir = "/run/pump.io";
|
|
||||||
user = "pumpio";
|
|
||||||
|
|
||||||
optionalSet = condition: value: if condition then value else {};
|
|
||||||
|
|
||||||
configScript = ./pump.io-configure.js;
|
|
||||||
configOptions = {
|
|
||||||
outputFile = "${runDir}/config.json";
|
|
||||||
config =
|
|
||||||
(optionalSet (cfg.driver != "disk") {
|
|
||||||
driver = cfg.driver;
|
|
||||||
}) //
|
|
||||||
{
|
|
||||||
params = (optionalSet (cfg.driver == "disk") { dir = dataDir; }) //
|
|
||||||
(optionalSet (cfg.driver == "mongodb" || cfg.driver == "redis") {
|
|
||||||
host = cfg.dbHost;
|
|
||||||
port = cfg.dbPort;
|
|
||||||
dbname = cfg.dbName;
|
|
||||||
dbuser = cfg.dbUser;
|
|
||||||
dbpass = cfg.dbPassword;
|
|
||||||
}) //
|
|
||||||
(optionalSet (cfg.driver == "memcached") {
|
|
||||||
host = cfg.dbHost;
|
|
||||||
port = cfg.dbPort;
|
|
||||||
}) // cfg.driverParams;
|
|
||||||
secret = cfg.secret;
|
|
||||||
|
|
||||||
address = cfg.address;
|
|
||||||
port = cfg.port;
|
|
||||||
|
|
||||||
noweb = false;
|
|
||||||
urlPort = cfg.urlPort;
|
|
||||||
hostname = cfg.hostname;
|
|
||||||
favicon = cfg.favicon;
|
|
||||||
|
|
||||||
site = cfg.site;
|
|
||||||
owner = cfg.owner;
|
|
||||||
ownerURL = cfg.ownerURL;
|
|
||||||
|
|
||||||
key = cfg.sslKey;
|
|
||||||
cert = cfg.sslCert;
|
|
||||||
bounce = false;
|
|
||||||
|
|
||||||
spamhost = cfg.spamHost;
|
|
||||||
spamclientid = cfg.spamClientId;
|
|
||||||
spamclientsecret = cfg.spamClientSecret;
|
|
||||||
|
|
||||||
requireEmail = cfg.requireEmail;
|
|
||||||
smtpserver = cfg.smtpHost;
|
|
||||||
smtpport = cfg.smtpPort;
|
|
||||||
smtpuser = cfg.smtpUser;
|
|
||||||
smtppass = cfg.smtpPassword;
|
|
||||||
smtpusessl = cfg.smtpUseSSL;
|
|
||||||
smtpfrom = cfg.smtpFrom;
|
|
||||||
|
|
||||||
nologger = false;
|
|
||||||
enableUploads = cfg.enableUploads;
|
|
||||||
datadir = dataDir;
|
|
||||||
debugClient = false;
|
|
||||||
firehose = cfg.firehose;
|
|
||||||
disableRegistration = cfg.disableRegistration;
|
|
||||||
|
|
||||||
inherit (cfg) secretFile dbPasswordFile smtpPasswordFile spamClientSecretFile;
|
|
||||||
} //
|
|
||||||
(optionalSet (cfg.port < 1024) {
|
|
||||||
serverUser = user; # have pump.io listen then drop privileges
|
|
||||||
}) // cfg.extraConfig;
|
|
||||||
}; in {
|
|
||||||
options = {
|
|
||||||
|
|
||||||
services.pumpio = {
|
|
||||||
|
|
||||||
enable = mkEnableOption "Pump.io social streams server";
|
|
||||||
|
|
||||||
secret = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
example = "my dog has fleas";
|
|
||||||
description = ''
|
|
||||||
A session-generating secret, server-wide password. Warning:
|
|
||||||
this is stored in cleartext in the Nix store!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
secretFile = mkOption {
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
default = null;
|
|
||||||
example = "/run/keys/pump.io-secret";
|
|
||||||
description = ''
|
|
||||||
A file containing the session-generating secret,
|
|
||||||
server-wide password.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
site = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
example = "Awesome Sauce";
|
|
||||||
description = "Name of the server";
|
|
||||||
};
|
|
||||||
|
|
||||||
owner = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
example = "Awesome Inc.";
|
|
||||||
description = "Name of owning entity, if you want to link to it.";
|
|
||||||
};
|
|
||||||
|
|
||||||
ownerURL = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "";
|
|
||||||
example = "https://pump.io";
|
|
||||||
description = "URL of owning entity, if you want to link to it.";
|
|
||||||
};
|
|
||||||
|
|
||||||
address = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "localhost";
|
|
||||||
description = ''
|
|
||||||
Web server listen address.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
port = mkOption {
|
|
||||||
type = types.int;
|
|
||||||
default = 31337;
|
|
||||||
description = ''
|
|
||||||
Port to listen on. Defaults to 31337, which is suitable for
|
|
||||||
running behind a reverse proxy. For a standalone server,
|
|
||||||
use 443.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
hostname = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = "localhost";
|
|
||||||
description = ''
|
|
||||||
The hostname of the server, used for generating
|
|
||||||
URLs. Defaults to "localhost" which doesn't do much for you.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
urlPort = mkOption {
|
|
||||||
type = types.int;
|
|
||||||
default = 443;
|
|
||||||
description = ''
|
|
||||||
Port to use for generating URLs. This basically has to be
|
|
||||||
either 80 or 443 because the host-meta and Webfinger
|
|
||||||
protocols don't make any provision for HTTP/HTTPS servers
|
|
||||||
running on other ports.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
favicon = mkOption {
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Local filesystem path to the favicon.ico file to use. This
|
|
||||||
will be served as "/favicon.ico" by the server.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
enableUploads = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
description = ''
|
|
||||||
If you want to disable file uploads, set this to false. Uploaded files will be stored
|
|
||||||
in ${dataDir}/uploads.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
sslKey = mkOption {
|
|
||||||
type = types.path;
|
|
||||||
example = "${dataDir}/myserver.key";
|
|
||||||
default = "";
|
|
||||||
description = ''
|
|
||||||
The path to the server certificate private key. The
|
|
||||||
certificate is required, but it can be self-signed.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
sslCert = mkOption {
|
|
||||||
type = types.path;
|
|
||||||
example = "${dataDir}/myserver.crt";
|
|
||||||
default = "";
|
|
||||||
description = ''
|
|
||||||
The path to the server certificate. The certificate is
|
|
||||||
required, but it can be self-signed.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
firehose = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "ofirehose.com";
|
|
||||||
description = ''
|
|
||||||
Firehose host running the ofirehose software. Defaults to
|
|
||||||
"ofirehose.com". Public notices will be ping this firehose
|
|
||||||
server and from there go out to search engines and the
|
|
||||||
world. If you want to disconnect from the public web, set
|
|
||||||
this to something falsy.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
disableRegistration = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Disables registering new users on the site through the Web
|
|
||||||
or the API.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
requireEmail = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Require an e-mail address to register.";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraConfig = mkOption {
|
|
||||||
default = { };
|
|
||||||
description = ''
|
|
||||||
Extra configuration options which are serialized to json and added
|
|
||||||
to the pump.io.json config file.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
driver = mkOption {
|
|
||||||
type = types.enum [ "mongodb" "disk" "lrucache" "memcached" "redis" ];
|
|
||||||
default = "mongodb";
|
|
||||||
description = "Type of database. Corresponds to a nodejs databank driver.";
|
|
||||||
};
|
|
||||||
|
|
||||||
driverParams = mkOption {
|
|
||||||
default = { };
|
|
||||||
description = "Extra parameters for the driver.";
|
|
||||||
};
|
|
||||||
|
|
||||||
dbHost = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "localhost";
|
|
||||||
description = "The database host to connect to.";
|
|
||||||
};
|
|
||||||
|
|
||||||
dbPort = mkOption {
|
|
||||||
type = types.int;
|
|
||||||
default = 27017;
|
|
||||||
description = "The port that the database is listening on.";
|
|
||||||
};
|
|
||||||
|
|
||||||
dbName = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "pumpio";
|
|
||||||
description = "The name of the database to use.";
|
|
||||||
};
|
|
||||||
|
|
||||||
dbUser = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
The username. Defaults to null, meaning no authentication.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
dbPassword = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
The password corresponding to dbUser. Warning: this is
|
|
||||||
stored in cleartext in the Nix store!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
dbPasswordFile = mkOption {
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
default = null;
|
|
||||||
example = "/run/keys/pump.io-dbpassword";
|
|
||||||
description = ''
|
|
||||||
A file containing the password corresponding to dbUser.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpHost = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
example = "localhost";
|
|
||||||
description = ''
|
|
||||||
Server to use for sending transactional email. If it's not
|
|
||||||
set up, no email is sent and features like password recovery
|
|
||||||
and email notification won't work.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpPort = mkOption {
|
|
||||||
type = types.int;
|
|
||||||
default = 25;
|
|
||||||
description = ''
|
|
||||||
Port to connect to on SMTP server.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpUser = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Username to use to connect to SMTP server. Might not be
|
|
||||||
necessary for some servers.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpPassword = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Password to use to connect to SMTP server. Might not be
|
|
||||||
necessary for some servers. Warning: this is stored in
|
|
||||||
cleartext in the Nix store!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpPasswordFile = mkOption {
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
default = null;
|
|
||||||
example = "/run/keys/pump.io-smtppassword";
|
|
||||||
description = ''
|
|
||||||
A file containing the password used to connect to SMTP
|
|
||||||
server. Might not be necessary for some servers.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
smtpUseSSL = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = false;
|
|
||||||
description = ''
|
|
||||||
Only use SSL with the SMTP server. By default, a SSL
|
|
||||||
connection is negotiated using TLS. You may need to change
|
|
||||||
the smtpPort value if you set this.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
smtpFrom = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Email address to use in the "From:" header of outgoing
|
|
||||||
notifications. Defaults to 'no-reply@' plus the site
|
|
||||||
hostname.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
spamHost = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
Host running activityspam software to use to test updates
|
|
||||||
for spam.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
spamClientId = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = "OAuth pair for spam server.";
|
|
||||||
};
|
|
||||||
spamClientSecret = mkOption {
|
|
||||||
type = types.nullOr types.str;
|
|
||||||
default = null;
|
|
||||||
description = ''
|
|
||||||
OAuth pair for spam server. Warning: this is
|
|
||||||
stored in cleartext in the Nix store!
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
spamClientSecretFile = mkOption {
|
|
||||||
type = types.nullOr types.path;
|
|
||||||
default = null;
|
|
||||||
example = "/run/keys/pump.io-spamclientsecret";
|
|
||||||
description = ''
|
|
||||||
A file containing the OAuth key for the spam server.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
warnings = let warn = k: optional (cfg.${k} != null)
|
|
||||||
"config.services.pumpio.${k} is insecure. Use ${k}File instead.";
|
|
||||||
in concatMap warn [ "secret" "dbPassword" "smtpPassword" "spamClientSecret" ];
|
|
||||||
|
|
||||||
assertions = [
|
|
||||||
{ assertion = !(isNull cfg.secret && isNull cfg.secretFile);
|
|
||||||
message = "pump.io needs a secretFile configured";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.services."pump.io" =
|
|
||||||
{ description = "Pump.io - stream server that does most of what people really want from a social network";
|
|
||||||
after = [ "network.target" ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
preStart = ''
|
|
||||||
mkdir -p ${dataDir}/uploads
|
|
||||||
mkdir -p ${runDir}
|
|
||||||
chown pumpio:pumpio ${dataDir}/uploads ${runDir}
|
|
||||||
chmod 770 ${dataDir}/uploads ${runDir}
|
|
||||||
|
|
||||||
${pkgs.nodejs}/bin/node ${configScript} <<EOF
|
|
||||||
${builtins.toJSON configOptions}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chgrp pumpio ${configOptions.outputFile}
|
|
||||||
chmod 640 ${configOptions.outputFile}
|
|
||||||
'';
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = "${pkgs.pumpio}/bin/pump -c ${configOptions.outputFile}";
|
|
||||||
PermissionsStartOnly = true;
|
|
||||||
User = if cfg.port < 1024 then "root" else user;
|
|
||||||
Group = user;
|
|
||||||
};
|
|
||||||
environment = { NODE_ENV = "production"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
users.extraGroups.pumpio.gid = config.ids.gids.pumpio;
|
|
||||||
users.extraUsers.pumpio = {
|
|
||||||
group = "pumpio";
|
|
||||||
uid = config.ids.uids.pumpio;
|
|
||||||
description = "Pump.io user";
|
|
||||||
home = dataDir;
|
|
||||||
createHome = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -337,7 +337,6 @@ in rec {
|
||||||
tests.printing = callTest tests/printing.nix {};
|
tests.printing = callTest tests/printing.nix {};
|
||||||
tests.prometheus = callTest tests/prometheus.nix {};
|
tests.prometheus = callTest tests/prometheus.nix {};
|
||||||
tests.proxy = callTest tests/proxy.nix {};
|
tests.proxy = callTest tests/proxy.nix {};
|
||||||
tests.pumpio = callTest tests/pump.io.nix {};
|
|
||||||
# tests.quagga = callTest tests/quagga.nix {};
|
# tests.quagga = callTest tests/quagga.nix {};
|
||||||
tests.quake3 = callTest tests/quake3.nix {};
|
tests.quake3 = callTest tests/quake3.nix {};
|
||||||
tests.rabbitmq = callTest tests/rabbitmq.nix {};
|
tests.rabbitmq = callTest tests/rabbitmq.nix {};
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
# This test runs pump.io with mongodb, listing on port 443.
|
|
||||||
|
|
||||||
import ./make-test.nix ({ pkgs, ...} : let
|
|
||||||
snakeOilKey = ''
|
|
||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqVemio78R41Tz
|
|
||||||
MnR2zFD/wFT0iScOpFkuytNmuPf28FLaa9wSBWmuAGbEi7wBIfw8/bUqFBTQp2G1
|
|
||||||
m1cmcCKxhmvvOkGs89eM131s1lW/bXU3zYso4e7724kHwU65jRlQs6cFWIlmW7V5
|
|
||||||
3HQobP05dy+zPpujPPSlOQ0qYViR1s+RgZI8r0wS2ZDsliNtQwBLJSIvX6XVnXLo
|
|
||||||
F/HmF4/ySJ9pL2AxQXCwZE8SfCzHpArs9COIqTaAuwB79kxWSFQJewmab74BXiM6
|
|
||||||
9FMCtHON24Pl7OR9sRJHH8rMEzUumppmUeCNEzABjzQQ7svR18cmbzRWetp0tT9Y
|
|
||||||
7rj6URHHAgMBAAECggEAGmbCldDnlrAzxJY3cwpsK5f2EwkHIr/aiuQpLCzTUlUh
|
|
||||||
onVBYRGxtaSeSSyXcV2BKTrxz5nZOBYZkPqI4Y5T8kwxgpz2/QW2jUABUtNN6yPe
|
|
||||||
HU4gma+bSTJX5PnTZ/M0z0tpQezdLx5b3I2M+48ZGMUegZvcp8qU6N8U6VK5VbFD
|
|
||||||
DMTGL4b+Kc9HScRkCJjU3FfQcqf9Ml5w9jzHSeHImYEDrG0nX8N8EImRCBXbgxCl
|
|
||||||
5XT1h6LFUGdr+N6n2w56+6l8OZZVmwj1NdF6NJybUQl4Y7b0niA+5czzjRt/YUjZ
|
|
||||||
HW0fXmx3XlbYGWYdMdS+VaIW6pkUpm8kZkqjngqLwQKBgQDfhbFQmg9lsJQ8/dQZ
|
|
||||||
WzRNsozHKWkQiZbW5sXBWygJbAB3Hc8gvQkuZe9TVyF99cznRj6ro6pGZjP0rTdY
|
|
||||||
3ACTL+ygRArcIR6VsJCIr6nPvBLpOoNb8TQeKPmHC2gnSP9zaT/K2lldYISKNaYQ
|
|
||||||
0seB2gvZhIgMgWtZtmb3jdgl9wKBgQDDFdknXgvFgB+y96//9wTu2WWuE5yQ5yB7
|
|
||||||
utAcHNO9rx5X1tJqxymYh+iE8HUN25By+96SpNMQFI+0wNGVB00YWNBKtyepimWN
|
|
||||||
EUCojTy+MIXIjrLcvviEePsI4TPWYf8XtZeiYtcczYrt/wPQUYaDb8LBRfpIfmhr
|
|
||||||
rCGW93s+sQKBgEDOKTeeQyKPjJsWWL01RTfVsZ04s155FcOeyu0heb0plAT1Ho12
|
|
||||||
YUgTg8zc8Tfs4QiYxCjNXdvlW+Dvq6FWv8/s0CUzNRbXf1+U/oKys4AoHi+CqH0q
|
|
||||||
tJqd9KKjuwHQ10dl13n/znMVPbg4j7pG8lMCnfblxvAhQbeT+8yAUo/HAoGBAL3t
|
|
||||||
/n4KXNGK3NHDvXEp0H6t3wWsiEi3DPQJO+Wy1x8caCFCv5c/kaqz3tfWt0+njSm1
|
|
||||||
N8tzdx13tzVWaHV8Jz3l8dxcFtxEJnxB6L5wy0urOAS7kT3DG3b1xgmuH2a//7fY
|
|
||||||
jumE60NahcER/2eIh7pdS7IZbAO6NfVmH0m4Zh/xAoGAbquh60sAfLC/1O2/4Xom
|
|
||||||
PHS7z2+TNpwu4ou3nspxfigNQcTWzzzTVFLnaTPg+HKbLRXSWysjssmmj5u3lCyc
|
|
||||||
S2M9xuhApa9CrN/udz4gEojRVsTla/gyLifIZ3CtTn2QEQiIJEMxM+59KAlkgUBo
|
|
||||||
9BeZ03xTaEZfhVZ9bEN30Ak=
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
'';
|
|
||||||
|
|
||||||
snakeOilCert = ''
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICvjCCAaagAwIBAgIJANhA6+PPhomZMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
|
|
||||||
BAMMDGIwOTM0YWMwYWZkNTAeFw0xNTExMzAxNzQ3MzVaFw0yNTExMjcxNzQ3MzVa
|
|
||||||
MBcxFTATBgNVBAMMDGIwOTM0YWMwYWZkNTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
|
||||||
ADCCAQoCggEBAKpV6aKjvxHjVPMydHbMUP/AVPSJJw6kWS7K02a49/bwUtpr3BIF
|
|
||||||
aa4AZsSLvAEh/Dz9tSoUFNCnYbWbVyZwIrGGa+86Qazz14zXfWzWVb9tdTfNiyjh
|
|
||||||
7vvbiQfBTrmNGVCzpwVYiWZbtXncdChs/Tl3L7M+m6M89KU5DSphWJHWz5GBkjyv
|
|
||||||
TBLZkOyWI21DAEslIi9fpdWdcugX8eYXj/JIn2kvYDFBcLBkTxJ8LMekCuz0I4ip
|
|
||||||
NoC7AHv2TFZIVAl7CZpvvgFeIzr0UwK0c43bg+Xs5H2xEkcfyswTNS6ammZR4I0T
|
|
||||||
MAGPNBDuy9HXxyZvNFZ62nS1P1juuPpREccCAwEAAaMNMAswCQYDVR0TBAIwADAN
|
|
||||||
BgkqhkiG9w0BAQsFAAOCAQEAd2w9rxi6qF9WV8L3rHnTE7uu0ldtdgJlCASx6ouj
|
|
||||||
TleOnjfEg+kH8r8UbmRV5vsTDn1Qp5JGDYxfytRUQwLb1zTLde0xotx37E3LY8Wr
|
|
||||||
sD6Al4t8sHywB/hc5dy29TgG0iyG8LKZrkwytLvDZ814W3OwpN2rpEz6pdizdHNn
|
|
||||||
jsoDEngZiDHvLjIyE0cDkFXkeYMGXOnBUeOcu4nfu4C5eKs3nXGGAcNDbDRIuLoE
|
|
||||||
BZExUBY+YSs6JBvh5tvRqLVW0Dz0akEcjb/jhwS2LmDip8Pdoxx4Q1jPKEu38zrr
|
|
||||||
Vd5WD2HJhLb9u0UxVp9vfWIUDgydopV5ZmWCQ5YvNepb1w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
name = "pumpio";
|
|
||||||
meta = with pkgs.stdenv.lib.maintainers; {
|
|
||||||
maintainers = [ rvl ];
|
|
||||||
};
|
|
||||||
|
|
||||||
nodes = {
|
|
||||||
one =
|
|
||||||
{ config, pkgs, ... }:
|
|
||||||
{
|
|
||||||
services = {
|
|
||||||
pumpio = {
|
|
||||||
port = 443;
|
|
||||||
enable = true;
|
|
||||||
sslCert = pkgs.writeText "snakeoil.cert" snakeOilCert;
|
|
||||||
sslKey = pkgs.writeText "snakeoil.pem" snakeOilKey;
|
|
||||||
secretFile = pkgs.writeText "secretFile" "test123";
|
|
||||||
site = "test";
|
|
||||||
};
|
|
||||||
mongodb.enable = true;
|
|
||||||
mongodb.extraConfig = ''
|
|
||||||
storage.journal.enabled: false
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
systemd.services.mongodb.unitConfig.Before = "pump.io.service";
|
|
||||||
systemd.services."pump.io".unitConfig.Requires = "mongodb.service";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
testScript = ''
|
|
||||||
startAll;
|
|
||||||
|
|
||||||
$one->waitForUnit("pump.io.service");
|
|
||||||
$one->waitUntilSucceeds("curl -k https://localhost");
|
|
||||||
'';
|
|
||||||
})
|
|
|
@ -1,16 +0,0 @@
|
||||||
# This file has been generated by node2nix 1.2.0. Do not edit!
|
|
||||||
|
|
||||||
{pkgs ? import <nixpkgs> {
|
|
||||||
inherit system;
|
|
||||||
}, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}:
|
|
||||||
|
|
||||||
let
|
|
||||||
nodeEnv = import ../../../development/node-packages/node-env.nix {
|
|
||||||
inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
|
|
||||||
inherit nodejs;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
import ./node-packages.nix {
|
|
||||||
inherit (pkgs) fetchurl fetchgit;
|
|
||||||
inherit nodeEnv;
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
{ pkgs, system, stdenv, fetchurl, makeWrapper, nodejs, graphicsmagick }:
|
|
||||||
|
|
||||||
with stdenv.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
# To regenerate composition.nix, run generate.sh.
|
|
||||||
nodePackages = import ./composition.nix {
|
|
||||||
inherit pkgs system nodejs;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
nodePackages.package.override (oldAttrs: {
|
|
||||||
buildInputs = oldAttrs.buildInputs ++ [ makeWrapper ];
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
for prog in pump pump-authorize pump-follow pump-post-note pump-register-app pump-register-user pump-stop-following; do
|
|
||||||
wrapProgram "$out/bin/$prog" \
|
|
||||||
--prefix PATH : ${graphicsmagick}/bin:$out/bin
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru.names = ["pump.io"];
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Social server with an ActivityStreams API";
|
|
||||||
homepage = http://pump.io/;
|
|
||||||
license = licenses.asl20;
|
|
||||||
platforms = platforms.unix;
|
|
||||||
maintainers = [ maintainers.rvl ];
|
|
||||||
longDescription = ''
|
|
||||||
This is pump.io. It's a stream server that does most of what
|
|
||||||
people really want from a social network.
|
|
||||||
|
|
||||||
What's it for?
|
|
||||||
|
|
||||||
I post something and my followers see it. That's the rough idea
|
|
||||||
behind the pump.
|
|
||||||
|
|
||||||
There's an API defined in the API.md file. It uses
|
|
||||||
activitystrea.ms JSON as the main data and command format.
|
|
||||||
|
|
||||||
You can post almost anything that can be represented with
|
|
||||||
activity streams -- short or long text, bookmarks, images,
|
|
||||||
video, audio, events, geo checkins. You can follow friends,
|
|
||||||
create lists of people, and so on.
|
|
||||||
|
|
||||||
The software is useful for at least these scenarios:
|
|
||||||
|
|
||||||
* Mobile-first social networking
|
|
||||||
* Activity stream functionality for an existing app
|
|
||||||
* Experimenting with social software
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
|
@ -1,37 +0,0 @@
|
||||||
#! /usr/bin/env nix-shell
|
|
||||||
#! nix-shell -i bash -p nodePackages.node2nix curl jshon
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Normally, this node2nix invocation would be sufficient:
|
|
||||||
# exec node2nix --input node-packages.json --composition composition.nix
|
|
||||||
#
|
|
||||||
# But pump.io soft-depends on extra modules, which have to be *inside*
|
|
||||||
# its own node_modules, not beside them.
|
|
||||||
#
|
|
||||||
# So we hack these extra deps into package.json and feed that into
|
|
||||||
# node2nix.
|
|
||||||
#
|
|
||||||
# Also jshon does funny things with slashes in strings, which can be
|
|
||||||
# fixed with sed.
|
|
||||||
|
|
||||||
VERSION="3.0.0"
|
|
||||||
URL="https://registry.npmjs.org/pump.io/-/pump.io-$VERSION.tgz"
|
|
||||||
SHA1="ycfm7ak83xi8mgafhp9q0n6n3kzmdz16"
|
|
||||||
|
|
||||||
curl https://raw.githubusercontent.com/e14n/pump.io/v$VERSION/package.json | \
|
|
||||||
jshon -e dependencies \
|
|
||||||
-s '*' -i databank-mongodb \
|
|
||||||
-s '*' -i databank-redis \
|
|
||||||
-s '*' -i databank-lrucache \
|
|
||||||
-p | sed 's=\\/=/=g' > full-package.json
|
|
||||||
|
|
||||||
node2nix --input full-package.json --composition composition.nix --node-env ../../../development/node-packages/node-env.nix
|
|
||||||
|
|
||||||
# overriding nodePackages src doesn't seem to work, so...
|
|
||||||
sed -i "s|src = ./.|src = fetchurl { url = \"$URL\"; sha1 = \"$SHA1\"; }|" node-packages.nix
|
|
||||||
|
|
||||||
# fetchgit or node2nix is having problems with submodules or something.
|
|
||||||
# This is the sha256 for connect-auth which is a npm dep hosted on
|
|
||||||
# github and containing submodules.
|
|
||||||
sed -i "s|d08fecbb72aff14ecb39dc310e8965ba92228f0c0def41fbde3db5ea7a1aac19|1b052xpj10hanx21286i5w0jrwxxkiwbdzpdngg9s2j1m7a9543b|" node-packages.nix
|
|
|
@ -1,7 +0,0 @@
|
||||||
[
|
|
||||||
"pump.io",
|
|
||||||
"databank-mongodb",
|
|
||||||
"databank-redis",
|
|
||||||
"databank-memcached",
|
|
||||||
"databank-lrucache"
|
|
||||||
]
|
|
File diff suppressed because it is too large
Load Diff
|
@ -12505,8 +12505,6 @@ with pkgs;
|
||||||
|
|
||||||
psqlodbc = callPackage ../servers/sql/postgresql/psqlodbc { };
|
psqlodbc = callPackage ../servers/sql/postgresql/psqlodbc { };
|
||||||
|
|
||||||
pumpio = callPackage ../servers/web-apps/pump.io { };
|
|
||||||
|
|
||||||
pure-ftpd = callPackage ../servers/ftp/pure-ftpd { };
|
pure-ftpd = callPackage ../servers/ftp/pure-ftpd { };
|
||||||
|
|
||||||
pyIRCt = callPackage ../servers/xmpp/pyIRCt {};
|
pyIRCt = callPackage ../servers/xmpp/pyIRCt {};
|
||||||
|
|
Loading…
Reference in New Issue