Hello,
I experienced problem when using Slurm Lua plugins and their dependency
to liblua5.1 on a Debian based distribution.
Debian provides a package with liblua5.1 with the following so files,
according to their policy[1] about shared libs:
$ dpkg -L liblua5.1-0 | grep so
/usr/lib/liblua5.1.so.0.0.0
/usr/lib/liblua5.1.so.0
liblua5.1.so.0' is a symbolic link to 'liblua5.1.so.0.0.0'. Please note
that there is no file 'liblua5.1.so' which only provided by the
complementary liblua5.1-dev package.
When built, Lua submit plugin is well linked to 'liblua5.1.so.0' shared
lib:
$ ldd /usr/lib/slurm/job_submit_lua.so
linux-vdso.so.1 => (0x00007fff86d37000)
liblua5.1.so.0 => /usr/lib/liblua5.1.so.0 (0x00007fa147050000)
[...]
However, slurmctld fails with the following error when launched:
Feb 28 11:14:33 ccnhpc-rp-pdts slurmctld[3281]: slurmctld version 2.3.2
started on cluster ivanoe
Feb 28 11:14:33 ccnhpc-rp-pdts slurmctld[3281]: error: Failed to open
liblua.so: liblua5.1.so: cannot open shared object file: No such file or
directory
Feb 28 11:14:33 ccnhpc-rp-pdts slurmctld[3281]: error: job_submit:
Couldn't load specified plugin name for job_submit/lua: Plugin init()
callback failed
Feb 28 11:14:33 ccnhpc-rp-pdts slurmctld[3281]: fatal: failed to
initialize job_submit plugin
Attached is a small simplistic patch to try one more library name to
load with dlopen(). It works for me but I'm not sure if it's an
acceptable solution for you? Maybe you'd like see a more global fix like
in commit 8841474 for libslurm?
I've also attached another patch which adds default_time field in
partition records of the Lua job submit plugin. We need to have this
field for our own purpose, can you please add it upstream as well?
Thanks in advance!
[1] http://www.debian.org/doc/debian-policy/ch-sharedlibs.html
--
Rémi Palancher
http://rezib.org
From 83e082a9afba658a6fb2d30f0842e45641ee17c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Palancher?= <[email protected]>
Date: Tue, 28 Feb 2012 14:25:33 +0100
Subject: [PATCH 1/2] Added a new Lua library name to try in plugins
Added a new Lua library name to try loading with dlopen() in Lua
based plugins.
---
src/plugins/job_submit/lua/job_submit_lua.c | 6 ++++--
src/plugins/proctrack/lua/proctrack_lua.c | 9 ++++++---
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/plugins/job_submit/lua/job_submit_lua.c b/src/plugins/job_submit/lua/job_submit_lua.c
index 224eb04..a9bbc54 100644
--- a/src/plugins/job_submit/lua/job_submit_lua.c
+++ b/src/plugins/job_submit/lua/job_submit_lua.c
@@ -697,8 +697,10 @@ int init (void)
*/
if (!dlopen("liblua.so", RTLD_NOW | RTLD_GLOBAL)) {
if (!dlopen ("liblua5.1.so", RTLD_NOW | RTLD_GLOBAL)) {
- return (error("Failed to open liblua.so: %s",
- dlerror()));
+ if (!dlopen ("liblua5.1.so.0", RTLD_NOW | RTLD_GLOBAL)) {
+ return (error("Failed to open liblua.so: %s",
+ dlerror()));
+ }
}
}
diff --git a/src/plugins/proctrack/lua/proctrack_lua.c b/src/plugins/proctrack/lua/proctrack_lua.c
index 85c4c8f..46b4009 100644
--- a/src/plugins/proctrack/lua/proctrack_lua.c
+++ b/src/plugins/proctrack/lua/proctrack_lua.c
@@ -231,9 +231,12 @@ int init (void)
* by any lua scripts.
*/
if (!dlopen ("liblua.so", RTLD_NOW | RTLD_GLOBAL)) {
- if (!dlopen ("liblua5.1.so", RTLD_NOW | RTLD_GLOBAL))
- return (error("Failed to open liblua.so: %s",
- dlerror()));
+ if (!dlopen ("liblua5.1.so", RTLD_NOW | RTLD_GLOBAL)) {
+ if (!dlopen ("liblua5.1.so.0", RTLD_NOW | RTLD_GLOBAL)) {
+ return (error("Failed to open liblua.so: %s",
+ dlerror()));
+ }
+ }
}
/*
--
1.7.2.5
From e94ed9f558eda12395c762ad4b5a58b71bcefa5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Palancher?= <[email protected]>
Date: Tue, 28 Feb 2012 14:32:14 +0100
Subject: [PATCH 2/2] Added a partition field in Lua job submit plugin
Added default_time field in partition records in Lua job submit
plugin.
---
src/plugins/job_submit/lua/job_submit_lua.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/src/plugins/job_submit/lua/job_submit_lua.c
b/src/plugins/job_submit/lua/job_submit_lua.c
index a9bbc54..4373796 100644
--- a/src/plugins/job_submit/lua/job_submit_lua.c
+++ b/src/plugins/job_submit/lua/job_submit_lua.c
@@ -536,6 +536,8 @@ static int _get_part_rec_field (lua_State *L)
if (part_ptr == NULL) {
error("_get_part_field: part_ptr is NULL");
lua_pushnil (L);
+ } else if (!strcmp(name, "default_time")) {
+ lua_pushnumber (L, part_ptr->default_time);
} else if (!strcmp(name, "flag_default")) {
int is_default = 0;
if (part_ptr->flags & PART_FLAG_DEFAULT)
--
1.7.2.5