# Pastebin W9ldUP8s { network.description = "MusicBrainz::Server virtual machine"; musicbrainz-server = { pkgs, config, ... }: let perlDependencies = pkgs.buildEnv { name = "musicbrainz-server-dependencies"; paths = with pkgs.perlPackages; [ libintlperl (buildPerlPackage { name = "XML-Parser-Lite-0.721"; src = pkgs.fetchurl { url = mirror://cpan/authors/id/P/PH/PHRED/XML-Parser-Lite-0.721.tar.gz; sha256 = "5862a36ecab9db9aad021839c847e8d2f4ab5a7796c61d0fb069bb69cf7908ba"; }; buildInputs = [ TestRequires ]; meta = { description = "Lightweight pure-perl XML Parser (based on regexps)"; license = "perl"; }; }) AlgorithmDiff AlgorithmMerge AuthenPassphrase CGIExpand CacheMemcached CacheMemcachedFast CacheMemory CaptchaReCAPTCHA CatalystActionRenderView CatalystAuthenticationCredentialHTTP CatalystPluginAuthentication CatalystPluginCache CatalystPluginCacheHTTP CatalystPluginSessionStateCookie CatalystPluginStackTrace CatalystRuntime CatalystViewTT ClassLoad ClassMOP Clone DBDPg DBI DBIxConnector DataCompare DataDumperConcise DataOptList DataPage DataUUIDMT DateCalc DateTimeFormatISO8601 DateTimeFormatNatural DateTimeFormatPg DateTimeTimeZone DigestHMAC_SHA1 DigestMD5File DigestSHA EmailAddress EmailMIME EmailSender EmailValid ExceptionClass FileSlurp GnuPG HTMLFormHandler HTMLTiny HTMLTreeBuilderXPath HTTPDate HashMerge IOAll JSON JSONAny JSONXS LWPProtocolhttps ListAllUtils ListMoreUtils ListUtilsBy LogDispatch MIMEBase64 MROCompat MathRandomSecure MethodSignaturesSimple ModulePluggable Moose MooseXABC MooseXClone MooseXGetopt MooseXMethodAttributes MooseXRoleParameterized MooseXRunnable MooseXSingleton MooseXTypes MooseXTypesStructured MooseXTypesURI NetAmazonAWSSign NetAmazonS3Policy Plack RESTUtils RSSParserLite Readonly Redis SetScalar StatisticsBasic StringCamelCase StringShellQuote StringTT TemplatePluginClass TemplatePluginJSONEscape TemplatePluginJavaScript TextMarkdown TextTrim TextUnaccent TextWikiFormat Throwable URI UnicodeICUCollator XMLSemanticDiff XMLSimple XMLXPath ]; }; musicbrainz-server-src = pkgs.stdenv.mkDerivation { name = "musicbrainz-server"; phases = [ "unpackPhase" "installPhase" ]; src = pkgs.fetchurl { url = https://github.com/metabrainz/musicbrainz-server/archive/v-2015-06-15.tar.gz; sha256 = "04awas7s29i4n9bb6l3wwwy58w5bshz3wq8cr5jd4ryfd8n7nchp"; }; installPhase = '' mkdir $out cp -R * $out ''; }; dbdefs = pkgs.writeTextDir "DBDefs.pm" '' package DBDefs; use strict; use warnings; use base 'DBDefs::Default'; use MusicBrainz::Server::DatabaseConnectionFactory; MusicBrainz::Server::DatabaseConnectionFactory->register_databases( READWRITE => { database => 'musicbrainz', host => 'localhost' } ); sub DATASTORE_REDIS_ARGS { my $self = shift; return { prefix => $self->MEMCACHED_NAMESPACE(), database => 0, test_database => 1, redis_new_args => { server => 'localhost:6379', reconnect => 60, encoding => undef, } }; }; sub CATALYST_DEBUG { 0 } sub DB_SCHEMA_SEQUENCE { 22 } 1; ''; in { deployment.targetEnv = "virtualbox"; deployment.virtualbox.memorySize = 2048; networking.firewall.allowedTCPPorts = [ 5000 ]; services.postgresql = { enable = true; package = pkgs.postgresql92; }; systemd.services.musicbrainz-server = { environment.PERL5LIB = "${musicbrainz-server-src}/lib:${perlDependencies}/lib/perl5/site_perl:${dbdefs}"; path = [ pkgs.perl pkgs.perlPackages.Plack ]; serviceConfig.WorkingDirectory = musicbrainz-server-src; script = "plackup"; }; }; }