Message ID | 20200818120037.30722-2-levenson@mmer.org |
---|---|
State | New |
Headers | show |
Series | [bug#42899,v2,01/10] gnu: dovecot: Add lucene library to support fts indexing. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
How are all the XXX_MODULE_DIR variables set? Would it be possible to just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? They seem to just use a file/folder under MODULE_DIR. On Tue, Aug 18, 2020 at 02:00:30PM +0200, Alexey Abramov wrote: > * gnu/local.mk (dist_patch_DATA): Add it. > * gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch: New file. > * gnu/packages/mail.scm (dovecot)[source]: Use it. > > Signed-off-by: Alexey Abramov <levenson@mmer.org> > --- > gnu/local.mk | 1 + > gnu/packages/mail.scm | 3 +- > ...ovecot-use-static-path-for-moduledir.patch | 146 ++++++++++++++++++ > 3 files changed, 149 insertions(+), 1 deletion(-) > create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 87bd7094bf..2817deb01f 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -900,6 +900,7 @@ dist_patch_DATA = \ > %D%/packages/patches/doc++-include-directives.patch \ > %D%/packages/patches/doc++-segfault-fix.patch \ > %D%/packages/patches/docker-fix-tests.patch \ > + %D%/packages/patches/dovecot-use-static-path-for-moduledir.patch \ > %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ > %D%/packages/patches/doxygen-test.patch \ > %D%/packages/patches/doxygen-1.8.17-runtests.patch \ > diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm > index 98e75fa90f..8e7d5b2fc1 100644 > --- a/gnu/packages/mail.scm > +++ b/gnu/packages/mail.scm > @@ -1411,7 +1411,8 @@ facilities for checking incoming mail.") > (version-major+minor version) "/" > "dovecot-" version ".tar.gz")) > (sha256 > - (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")))) > + (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")) > + (patches (search-patches "dovecot-use-static-path-for-moduledir.patch")))) > (build-system gnu-build-system) > (native-inputs > `(("pkg-config" ,pkg-config))) > diff --git a/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > new file mode 100644 > index 0000000000..da9f4034f4 > --- /dev/null > +++ b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > @@ -0,0 +1,146 @@ > +Subject: [PATCH] Use static path for moduledir. > + > +Patch was taken from NixOS repo. Make dovecot look for plugins in > +/etc/dovecot/modules so we can symlink plugins from several packages > +there. > + > +The rational behind the patch can be found here: > +https://dovecot.org/pipermail/dovecot/2013-April/089931.html > + > +--- > + src/auth/main.c | 4 ++-- > + src/config/config-parser.c | 2 +- > + src/config/config-parser.h | 2 +- > + src/dict/main.c | 2 +- > + src/doveadm/doveadm-util.c | 4 ++-- > + src/lib-fs/fs-api.c | 2 +- > + src/lib-ssl-iostream/iostream-ssl.c | 4 ++-- > + src/lib-storage/mail-storage-settings.c | 2 +- > + 9 files changed, 12 insertions(+), 12 deletions(-) > + > +diff --git a/src/auth/main.c b/src/auth/main.c > +index 2dbf9e176..b1e778ab7 100644 > +--- a/src/auth/main.c > ++++ b/src/auth/main.c > +@@ -192,7 +192,7 @@ static void main_preinit(void) > + mod_set.debug = global_auth_settings->debug; > + mod_set.filter_callback = auth_module_filter; > + > +- modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set); > + module_dir_init(modules); > + > + if (!worker) > +@@ -223,7 +223,7 @@ void auth_module_load(const char *names) > + mod_set.debug = global_auth_settings->debug; > + mod_set.ignore_missing = TRUE; > + > +- modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, > ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names, > + &mod_set); > + module_dir_init(modules); > + } > +diff --git a/src/config/config-parser.c b/src/config/config-parser.c > +index 6894123ea..07e9fecb4 100644 > +--- a/src/config/config-parser.c > ++++ b/src/config/config-parser.c > +@@ -1077,7 +1077,7 @@ void config_parse_load_modules(void) > + > + i_zero(&mod_set); > + mod_set.abi_version = DOVECOT_ABI_VERSION; > +- modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set); > + module_dir_init(modules); > + > + i_array_init(&new_roots, 64); > +diff --git a/src/config/config-parser.h b/src/config/config-parser.h > +index e0a0a5bea..32bd76804 100644 > +--- a/src/config/config-parser.h > ++++ b/src/config/config-parser.h > +@@ -1,7 +1,7 @@ > + #ifndef CONFIG_PARSER_H > + #define CONFIG_PARSER_H > + > +-#define CONFIG_MODULE_DIR MODULEDIR"/settings" > ++#define CONFIG_MODULE_DIR "/etc/dovecot/modules/settings" > + > + #define IS_WHITE(c) ((c) == ' ' || (c) == '\t') > + > +diff --git a/src/dict/main.c b/src/dict/main.c > +index 722ed025f..4ed12ae5e 100644 > +--- a/src/dict/main.c > ++++ b/src/dict/main.c > +@@ -104,7 +104,7 @@ static void main_init(void) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.require_init_funcs = TRUE; > + > +- modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set); > + module_dir_init(modules); > + > + /* Register only after loading modules. They may contain SQL drivers, > +diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c > +index a65ef7f72..c19eba06c 100644 > +--- a/src/doveadm/doveadm-util.c > ++++ b/src/doveadm/doveadm-util.c > +@@ -33,7 +33,7 @@ void doveadm_load_modules(void) > + mod_set.debug = doveadm_debug; > + mod_set.ignore_dlopen_errors = TRUE; > + > +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, > ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", > + NULL, &mod_set); > + module_dir_init(modules); > + } > +@@ -58,7 +58,7 @@ bool doveadm_has_unloaded_plugin(const char *name) > + return FALSE; > + } > + > +- dir = opendir(DOVEADM_MODULEDIR); > ++ dir = opendir("/etc/dovecot/modules/doveadm"); > + if (dir == NULL) > + return FALSE; > + > +diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c > +index a939f612d..846cf86e6 100644 > +--- a/src/lib-fs/fs-api.c > ++++ b/src/lib-fs/fs-api.c > +@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.ignore_missing = TRUE; > + > +- fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, > ++ fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules", > + module_name, &mod_set); > + module_dir_init(fs_modules); > + > +diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c > +index f62c80d37..900ab46c4 100644 > +--- a/src/lib-ssl-iostream/iostream-ssl.c > ++++ b/src/lib-ssl-iostream/iostream-ssl.c > +@@ -54,8 +54,8 @@ int ssl_module_load(const char **error_r) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; > + mod_set.require_init_funcs = TRUE; > +- ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); > +- if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, > ++ ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set); > ++ if (module_dir_try_load_missing(&ssl_module, "/etc/dovecot/modules", plugin_name, > + &mod_set, error_r) < 0) > + return -1; > + module_dir_init(ssl_module); > +diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c > +index b314b529c..705509456 100644 > +--- a/src/lib-storage/mail-storage-settings.c > ++++ b/src/lib-storage/mail-storage-settings.c > +@@ -337,7 +337,7 @@ static const struct mail_user_settings mail_user_default_settings = { > + .last_valid_gid = 0, > + > + .mail_plugins = "", > +- .mail_plugin_dir = MODULEDIR, > ++ .mail_plugin_dir = "/etc/dovecot/modules", > + > + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", > + > +-- > +2.27.0 > -- > 2.27.0 > > > >
Hi, Efraim Flashner <efraim@flashner.co.il> writes: > How are all the XXX_MODULE_DIR variables set? Would it be possible to > just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? > They seem to just use a file/folder under MODULE_DIR. They set during compilation time. If I pass it as a configuration option, dovecot will try to install libraries there which won't work. For example: --8<---------------cut here---------------start------------->8--- -*- mode: rg; default-directory: "~/factory/dovecot/" -*- rg started at Wed Aug 19 10:35:00 /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e AUTH_MODULE_DIR src/auth/Makefile.am:42: -DAUTH_MODULE_DIR=\""$(auth_moduledir)"\" \ src/auth/main.c:195: modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); src/auth/main.c:226: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, src/doveadm/doveadm-pw.c:40: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set); src/doveadm/Makefile.am:28: -DAUTH_MODULE_DIR=\""$(moduledir)/auth"\" \ rg finished (5 matches found) at Wed Aug 19 10:35:00 --8<---------------cut here---------------end--------------->8--- --8<---------------cut here---------------start------------->8--- -*- mode: rg; default-directory: "~/factory/dovecot/" -*- rg started at Wed Aug 19 11:33:25 /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e DOVEADM_MODULEDIR src/doveadm/doveadm-util.c:36: modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, src/doveadm/doveadm-util.c:61: dir = opendir(DOVEADM_MODULEDIR); src/doveadm/Makefile.am:29: -DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \ rg finished (3 matches found) at Wed Aug 19 11:33:25 --8<---------------cut here---------------end--------------->8--- -- Alexey
diff --git a/gnu/local.mk b/gnu/local.mk index 87bd7094bf..2817deb01f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -900,6 +900,7 @@ dist_patch_DATA = \ %D%/packages/patches/doc++-include-directives.patch \ %D%/packages/patches/doc++-segfault-fix.patch \ %D%/packages/patches/docker-fix-tests.patch \ + %D%/packages/patches/dovecot-use-static-path-for-moduledir.patch \ %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ %D%/packages/patches/doxygen-test.patch \ %D%/packages/patches/doxygen-1.8.17-runtests.patch \ diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 98e75fa90f..8e7d5b2fc1 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1411,7 +1411,8 @@ facilities for checking incoming mail.") (version-major+minor version) "/" "dovecot-" version ".tar.gz")) (sha256 - (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")))) + (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")) + (patches (search-patches "dovecot-use-static-path-for-moduledir.patch")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch new file mode 100644 index 0000000000..da9f4034f4 --- /dev/null +++ b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch @@ -0,0 +1,146 @@ +Subject: [PATCH] Use static path for moduledir. + +Patch was taken from NixOS repo. Make dovecot look for plugins in +/etc/dovecot/modules so we can symlink plugins from several packages +there. + +The rational behind the patch can be found here: +https://dovecot.org/pipermail/dovecot/2013-April/089931.html + +--- + src/auth/main.c | 4 ++-- + src/config/config-parser.c | 2 +- + src/config/config-parser.h | 2 +- + src/dict/main.c | 2 +- + src/doveadm/doveadm-util.c | 4 ++-- + src/lib-fs/fs-api.c | 2 +- + src/lib-ssl-iostream/iostream-ssl.c | 4 ++-- + src/lib-storage/mail-storage-settings.c | 2 +- + 9 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/src/auth/main.c b/src/auth/main.c +index 2dbf9e176..b1e778ab7 100644 +--- a/src/auth/main.c ++++ b/src/auth/main.c +@@ -192,7 +192,7 @@ static void main_preinit(void) + mod_set.debug = global_auth_settings->debug; + mod_set.filter_callback = auth_module_filter; + +- modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set); + module_dir_init(modules); + + if (!worker) +@@ -223,7 +223,7 @@ void auth_module_load(const char *names) + mod_set.debug = global_auth_settings->debug; + mod_set.ignore_missing = TRUE; + +- modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names, + &mod_set); + module_dir_init(modules); + } +diff --git a/src/config/config-parser.c b/src/config/config-parser.c +index 6894123ea..07e9fecb4 100644 +--- a/src/config/config-parser.c ++++ b/src/config/config-parser.c +@@ -1077,7 +1077,7 @@ void config_parse_load_modules(void) + + i_zero(&mod_set); + mod_set.abi_version = DOVECOT_ABI_VERSION; +- modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set); + module_dir_init(modules); + + i_array_init(&new_roots, 64); +diff --git a/src/config/config-parser.h b/src/config/config-parser.h +index e0a0a5bea..32bd76804 100644 +--- a/src/config/config-parser.h ++++ b/src/config/config-parser.h +@@ -1,7 +1,7 @@ + #ifndef CONFIG_PARSER_H + #define CONFIG_PARSER_H + +-#define CONFIG_MODULE_DIR MODULEDIR"/settings" ++#define CONFIG_MODULE_DIR "/etc/dovecot/modules/settings" + + #define IS_WHITE(c) ((c) == ' ' || (c) == '\t') + +diff --git a/src/dict/main.c b/src/dict/main.c +index 722ed025f..4ed12ae5e 100644 +--- a/src/dict/main.c ++++ b/src/dict/main.c +@@ -104,7 +104,7 @@ static void main_init(void) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.require_init_funcs = TRUE; + +- modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set); + module_dir_init(modules); + + /* Register only after loading modules. They may contain SQL drivers, +diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c +index a65ef7f72..c19eba06c 100644 +--- a/src/doveadm/doveadm-util.c ++++ b/src/doveadm/doveadm-util.c +@@ -33,7 +33,7 @@ void doveadm_load_modules(void) + mod_set.debug = doveadm_debug; + mod_set.ignore_dlopen_errors = TRUE; + +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", + NULL, &mod_set); + module_dir_init(modules); + } +@@ -58,7 +58,7 @@ bool doveadm_has_unloaded_plugin(const char *name) + return FALSE; + } + +- dir = opendir(DOVEADM_MODULEDIR); ++ dir = opendir("/etc/dovecot/modules/doveadm"); + if (dir == NULL) + return FALSE; + +diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c +index a939f612d..846cf86e6 100644 +--- a/src/lib-fs/fs-api.c ++++ b/src/lib-fs/fs-api.c +@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.ignore_missing = TRUE; + +- fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, ++ fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules", + module_name, &mod_set); + module_dir_init(fs_modules); + +diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c +index f62c80d37..900ab46c4 100644 +--- a/src/lib-ssl-iostream/iostream-ssl.c ++++ b/src/lib-ssl-iostream/iostream-ssl.c +@@ -54,8 +54,8 @@ int ssl_module_load(const char **error_r) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; + mod_set.require_init_funcs = TRUE; +- ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); +- if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, ++ ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set); ++ if (module_dir_try_load_missing(&ssl_module, "/etc/dovecot/modules", plugin_name, + &mod_set, error_r) < 0) + return -1; + module_dir_init(ssl_module); +diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c +index b314b529c..705509456 100644 +--- a/src/lib-storage/mail-storage-settings.c ++++ b/src/lib-storage/mail-storage-settings.c +@@ -337,7 +337,7 @@ static const struct mail_user_settings mail_user_default_settings = { + .last_valid_gid = 0, + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", + +-- +2.27.0
* gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch: New file. * gnu/packages/mail.scm (dovecot)[source]: Use it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/local.mk | 1 + gnu/packages/mail.scm | 3 +- ...ovecot-use-static-path-for-moduledir.patch | 146 ++++++++++++++++++ 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch