From fd2d83bd2bf20fafc63daf5041db0151a4b4d17d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Tue, 7 May 2019 15:19:24 +0200 Subject: [PATCH] Move wallabag to pkgs --- .../modules/websites/tools/tools/default.nix | 5 +- .../modules/websites/tools/tools/wallabag.nix | 338 ++++++++---------- pkgs/default.nix | 4 +- pkgs/webapps/default.nix | 3 +- pkgs/webapps/wallabag/default.nix | 54 +++ .../webapps/wallabag/ldap.patch | 0 6 files changed, 205 insertions(+), 199 deletions(-) create mode 100644 pkgs/webapps/wallabag/default.nix rename nixops/modules/websites/tools/tools/wallabag_ldap.patch => pkgs/webapps/wallabag/ldap.patch (100%) diff --git a/nixops/modules/websites/tools/tools/default.nix b/nixops/modules/websites/tools/tools/default.nix index 22588fb..addb2c3 100644 --- a/nixops/modules/websites/tools/tools/default.nix +++ b/nixops/modules/websites/tools/tools/default.nix @@ -16,7 +16,10 @@ let kanboard = pkgs.callPackage ./kanboard.nix { env = myconfig.env.tools.kanboard; }; - wallabag = pkgs.callPackage ./wallabag.nix { env = myconfig.env.tools.wallabag; }; + wallabag = pkgs.callPackage ./wallabag.nix { + inherit (pkgs.webapps) wallabag; + env = myconfig.env.tools.wallabag; + }; yourls = pkgs.callPackage ./yourls.nix { inherit (pkgs.webapps) yourls yourls-plugins; env = myconfig.env.tools.yourls; diff --git a/nixops/modules/websites/tools/tools/wallabag.nix b/nixops/modules/websites/tools/tools/wallabag.nix index 596b9bc..d6e5882 100644 --- a/nixops/modules/websites/tools/tools/wallabag.nix +++ b/nixops/modules/websites/tools/tools/wallabag.nix @@ -1,200 +1,148 @@ -{ stdenv, fetchurl, writeText, env, composerEnv, phpPackages, php, which }: -let - wallabag = rec { - varDir = "/var/lib/wallabag"; - keys = [{ - dest = "webapps/tools-wallabag"; - user = apache.user; - group = apache.group; - permissions = "0400"; - text = '' - # This file is auto-generated during the composer install - parameters: - database_driver: pdo_pgsql - database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver - database_host: ${env.postgresql.socket} - database_port: ${env.postgresql.port} - database_name: ${env.postgresql.database} - database_user: ${env.postgresql.user} - database_password: ${env.postgresql.password} - database_path: null - database_table_prefix: wallabag_ - database_socket: null - database_charset: utf8 - domain_name: https://tools.immae.eu/wallabag - mailer_transport: sendmail - mailer_host: 127.0.0.1 - mailer_user: null - mailer_password: null - locale: fr - secret: ${env.secret} - twofactor_auth: true - twofactor_sender: wallabag@tools.immae.eu - fosuser_registration: false - fosuser_confirmation: true - from_email: wallabag@tools.immae.eu - rss_limit: 50 - rabbitmq_host: localhost - rabbitmq_port: 5672 - rabbitmq_user: guest - rabbitmq_password: guest - rabbitmq_prefetch_count: 10 - redis_scheme: unix - redis_host: null - redis_port: null - redis_path: ${env.redis.socket} - redis_password: null - sites_credentials: { } - ldap_enabled: true - ldap_host: ldap.immae.eu - ldap_port: 636 - ldap_tls: false - ldap_ssl: true - ldap_bind_requires_dn: true - ldap_base: 'dc=immae,dc=eu' - ldap_manager_dn: 'cn=wallabag,ou=services,dc=immae,dc=eu' - ldap_manager_pw: ${env.ldap.password} - ldap_filter: '(&(memberOf=cn=users,cn=wallabag,ou=services,dc=immae,dc=eu))' - ldap_admin_filter: '(&(memberOf=cn=admins,cn=wallabag,ou=services,dc=immae,dc=eu)(uid=%s))' - ldap_username_attribute: uid - ldap_email_attribute: mail - ldap_name_attribute: cn - ldap_enabled_attribute: null - services: - swiftmailer.mailer.default.transport: - class: Swift_SendmailTransport - arguments: ['/run/wrappers/bin/sendmail -bs'] - ''; - }]; - webappDir = composerEnv.buildPackage rec { - packages = { - "fr3d/ldap-bundle" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475"; - src = fetchurl { - url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475; - sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc"; - }; - }; - }; - "zendframework/zend-ldap" = { - targetDir = ""; - src = composerEnv.buildZipPackage { - name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"; - src = fetchurl { - url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49; - sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9"; - }; - }; - }; - }; - noDev = true; - doRemoveVendor = false; - # Beware when upgrading, I probably messed up with the migrations table - # (due to a psql bug in wallabag) - version = "2.3.6"; - name = "wallabag-${version}"; - src = fetchurl { - url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz"; - sha256 = "0m0dy3r94ks5pfxyb9vbgrsm0vrwdl3jd5wqwg4f5vd107lq90q1"; - }; - unpackPhase = '' - unpackFile "$src" - sourceRoot=${version} - src=$PWD/${version} - ''; - patches = [ ./wallabag_ldap.patch ]; - preInstall = '' - export SYMFONY_ENV="prod" +{ env, wallabag }: +rec { + varDir = "/var/lib/wallabag"; + keys = [{ + dest = "webapps/tools-wallabag"; + user = apache.user; + group = apache.group; + permissions = "0400"; + text = '' + # This file is auto-generated during the composer install + parameters: + database_driver: pdo_pgsql + database_driver_class: Wallabag\CoreBundle\Doctrine\DBAL\Driver\CustomPostgreSQLDriver + database_host: ${env.postgresql.socket} + database_port: ${env.postgresql.port} + database_name: ${env.postgresql.database} + database_user: ${env.postgresql.user} + database_password: ${env.postgresql.password} + database_path: null + database_table_prefix: wallabag_ + database_socket: null + database_charset: utf8 + domain_name: https://tools.immae.eu/wallabag + mailer_transport: sendmail + mailer_host: 127.0.0.1 + mailer_user: null + mailer_password: null + locale: fr + secret: ${env.secret} + twofactor_auth: true + twofactor_sender: wallabag@tools.immae.eu + fosuser_registration: false + fosuser_confirmation: true + from_email: wallabag@tools.immae.eu + rss_limit: 50 + rabbitmq_host: localhost + rabbitmq_port: 5672 + rabbitmq_user: guest + rabbitmq_password: guest + rabbitmq_prefetch_count: 10 + redis_scheme: unix + redis_host: null + redis_port: null + redis_path: ${env.redis.socket} + redis_password: null + sites_credentials: { } + ldap_enabled: true + ldap_host: ldap.immae.eu + ldap_port: 636 + ldap_tls: false + ldap_ssl: true + ldap_bind_requires_dn: true + ldap_base: 'dc=immae,dc=eu' + ldap_manager_dn: 'cn=wallabag,ou=services,dc=immae,dc=eu' + ldap_manager_pw: ${env.ldap.password} + ldap_filter: '(&(memberOf=cn=users,cn=wallabag,ou=services,dc=immae,dc=eu))' + ldap_admin_filter: '(&(memberOf=cn=admins,cn=wallabag,ou=services,dc=immae,dc=eu)(uid=%s))' + ldap_username_attribute: uid + ldap_email_attribute: mail + ldap_name_attribute: cn + ldap_enabled_attribute: null + services: + swiftmailer.mailer.default.transport: + class: Swift_SendmailTransport + arguments: ['/run/wrappers/bin/sendmail -bs'] ''; - postInstall = '' - rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data - ln -sf /var/secrets/webapps/tools-wallabag app/config/parameters.yml - ln -sf ${varDir}/var/{cache,logs,sessions} var - ln -sf ${varDir}/data data - ln -sf ${varDir}/assets web/assets - ''; - }; - activationScript = '' - install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ - ${varDir}/var ${varDir}/data/db ${varDir}/assets/images - ''; - webRoot = "${webappDir}/web"; - # Domain migration: Table wallabag_entry contains whole - # https://tools.immae.eu/wallabag domain name in preview_picture - apache = rec { - user = "wwwrun"; - group = "wwwrun"; - modules = [ "proxy_fcgi" ]; - webappName = "tools_wallabag"; - root = "/run/current-system/webapps/${webappName}"; - vhostConf = '' - Alias /wallabag "${root}" - - AllowOverride None - Require all granted - # For OAuth (apps) - CGIPassAuth On + }]; + webappDir = wallabag.override { ldap = true; wallabag_config = "/var/secrets/webapps/tools-wallabag"; }; + activationScript = '' + install -m 0755 -o ${apache.user} -g ${apache.group} -d ${varDir} \ + ${varDir}/var ${varDir}/data/db ${varDir}/assets/images + ''; + webRoot = "${webappDir}/web"; + # Domain migration: Table wallabag_entry contains whole + # https://tools.immae.eu/wallabag domain name in preview_picture + apache = rec { + user = "wwwrun"; + group = "wwwrun"; + modules = [ "proxy_fcgi" ]; + webappName = "tools_wallabag"; + root = "/run/current-system/webapps/${webappName}"; + vhostConf = '' + Alias /wallabag "${root}" + + AllowOverride None + Require all granted + # For OAuth (apps) + CGIPassAuth On - - SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" - + + SetHandler "proxy:unix:${phpFpm.socket}|fcgi://localhost" + - - Options -MultiViews - RewriteEngine On - RewriteCond %{REQUEST_FILENAME} !-f - RewriteRule ^(.*)$ app.php [QSA,L] - - - - - RewriteEngine Off - - - - AllowOverride None - Require all granted - - ''; - }; - phpFpm = rec { - preStart = '' - if [ ! -f "${varDir}/currentWebappDir" -o \ - ! -f "${varDir}/currentKey" -o \ - "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ - || ! sha512sum -c --status ${varDir}/currentKey; then - pushd ${webappDir} > /dev/null - /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear - rm -rf /var/lib/wallabag/var/cache/pro_ - /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction - popd > /dev/null - echo -n "${webappDir}" > ${varDir}/currentWebappDir - sha512sum /var/secrets/webapps/tools-wallabag > ${varDir}/currentKey - fi - ''; - serviceDeps = [ "postgresql.service" "openldap.service" ]; - basedir = builtins.concatStringsSep ":" [ webappDir "/var/secrets/webapps/tools-wallabag" varDir ]; - socket = "/var/run/phpfpm/wallabag.sock"; - pool = '' - listen = ${socket} - user = ${apache.user} - group = ${apache.group} - listen.owner = ${apache.user} - listen.group = ${apache.group} - pm = dynamic - pm.max_children = 60 - pm.start_servers = 2 - pm.min_spare_servers = 1 - pm.max_spare_servers = 10 + + Options -MultiViews + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ app.php [QSA,L] + + + + + RewriteEngine Off + + + + AllowOverride None + Require all granted + + ''; + }; + phpFpm = rec { + preStart = '' + if [ ! -f "${varDir}/currentWebappDir" -o \ + ! -f "${varDir}/currentKey" -o \ + "${webappDir}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] \ + || ! sha512sum -c --status ${varDir}/currentKey; then + pushd ${webappDir} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear + rm -rf /var/lib/wallabag/var/cache/pro_ + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate --no-interaction + popd > /dev/null + echo -n "${webappDir}" > ${varDir}/currentWebappDir + sha512sum /var/secrets/webapps/tools-wallabag > ${varDir}/currentKey + fi + ''; + serviceDeps = [ "postgresql.service" "openldap.service" ]; + basedir = builtins.concatStringsSep ":" [ webappDir "/var/secrets/webapps/tools-wallabag" varDir ]; + socket = "/var/run/phpfpm/wallabag.sock"; + pool = '' + listen = ${socket} + user = ${apache.user} + group = ${apache.group} + listen.owner = ${apache.user} + listen.group = ${apache.group} + pm = dynamic + pm.max_children = 60 + pm.start_servers = 2 + pm.min_spare_servers = 1 + pm.max_spare_servers = 10 - ; Needed to avoid clashes in browser cookies (same domain) - php_value[session.name] = WallabagPHPSESSID - php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:${basedir}:/tmp" - php_value[max_execution_time] = 300 - ''; - }; + ; Needed to avoid clashes in browser cookies (same domain) + php_value[session.name] = WallabagPHPSESSID + php_admin_value[open_basedir] = "/run/wrappers/bin/sendmail:${basedir}:/tmp" + php_value[max_execution_time] = 300 + ''; }; -in - wallabag +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 8a991eb..b97b267 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -2,7 +2,7 @@ with pkgs; let mylibs = import ../libs.nix { inherit pkgs; }; in -{ +rec { boinctui = callPackage ../pkgs/boinctui {}; cnagios = callPackage ../pkgs/cnagios { inherit mylibs; }; duply = callPackage ../pkgs/duply {}; @@ -37,5 +37,5 @@ in bitlbee-mastodon = callPackage ./bitlbee-mastodon {}; composerEnv = callPackage ./composer-env {}; - webapps = callPackage ./webapps { inherit mylibs; }; + webapps = callPackage ./webapps { inherit mylibs composerEnv; }; } diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix index a4e4f87..8fbb20f 100644 --- a/pkgs/webapps/default.nix +++ b/pkgs/webapps/default.nix @@ -1,4 +1,4 @@ -{ callPackage, mylibs, lib }: +{ callPackage, mylibs, composerEnv, lib }: rec { adminer = callPackage ./adminer {}; awl = callPackage ./awl {}; @@ -80,6 +80,7 @@ rec { ) ); + wallabag = callPackage ./wallabag { inherit composerEnv; }; yourls = callPackage ./yourls { inherit mylibs; }; yourls-with-plugins = yourls.withPlugins (builtins.attrValues yourls-plugins); yourls-plugins = let diff --git a/pkgs/webapps/wallabag/default.nix b/pkgs/webapps/wallabag/default.nix new file mode 100644 index 0000000..a437a31 --- /dev/null +++ b/pkgs/webapps/wallabag/default.nix @@ -0,0 +1,54 @@ +{ varDir ? "/var/lib/wallabag" +, wallabag_config ? "/etc/wallabag/parameters.yml" +, ldap ? false +, composerEnv, fetchurl, lib }: +composerEnv.buildPackage rec { + packages = { + "fr3d/ldap-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "fr3d-ldap-bundle-5a8927c11af45fa06331b97221c6da1a4a237475"; + src = fetchurl { + url = https://api.github.com/repos/Maks3w/FR3DLdapBundle/zipball/5a8927c11af45fa06331b97221c6da1a4a237475; + sha256 = "168zkd82j200wd6h0a3lq81g5s2pifg889rv27q2g429nppsbfxc"; + }; + }; + }; + "zendframework/zend-ldap" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-ldap-b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49"; + src = fetchurl { + url = https://api.github.com/repos/zendframework/zend-ldap/zipball/b63c7884a08d3a6bda60ebcf7d6238cf8ad89f49; + sha256 = "0mn4yqnb5prqhrbbybmw1i2rx7xf4s4wagbdq9qi55fa0vk3jgw9"; + }; + }; + }; + }; + noDev = true; + doRemoveVendor = false; + # Beware when upgrading, I probably messed up with the migrations table + # (due to a psql bug in wallabag) + version = "2.3.6"; + name = "wallabag-${version}"; + src = fetchurl { + url = "https://static.wallabag.org/releases/wallabag-release-${version}.tar.gz"; + sha256 = "0m0dy3r94ks5pfxyb9vbgrsm0vrwdl3jd5wqwg4f5vd107lq90q1"; + }; + unpackPhase = '' + unpackFile "$src" + sourceRoot=${version} + src=$PWD/${version} + ''; + patches = lib.optionals ldap [ ./ldap.patch ]; + preInstall = '' + export SYMFONY_ENV="prod" + ''; + postInstall = '' + rm -rf web/assets var/{cache,logs,sessions} app/config/parameters.yml data + ln -sf ${wallabag_config} app/config/parameters.yml + ln -sf ${varDir}/var/{cache,logs,sessions} var + ln -sf ${varDir}/data data + ln -sf ${varDir}/assets web/assets + ''; +} diff --git a/nixops/modules/websites/tools/tools/wallabag_ldap.patch b/pkgs/webapps/wallabag/ldap.patch similarity index 100% rename from nixops/modules/websites/tools/tools/wallabag_ldap.patch rename to pkgs/webapps/wallabag/ldap.patch -- 2.41.0