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

Reply via email to