我正在按照 @freeradius.org 的步骤启用 python。在完成第一轮更改后,我启动了服务器并在启动聊天中得到了以下信息:
Failed loading libpython symbols into global symbol table: libpython2.7.so: cannot open shared object file: No such file or directory
然而,通过检查两台机器(我的参考机器和测试机器),我发现:
/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
有人遇到过或解决过这个问题吗?两台服务器都是 Ubuntu 16.04.2 LTS
答案1
注意:我鼓励大家给出比我的更好的答案!
查看 freeradius C 源代码模块 rlm_python.c 发现会调用系统调用 dlopen() 打开 libpython2.7.so,如果找不到则调用 dlerror()。
dlopen() 调用在程序运行时在 LD_LIBRARY_PATH 环境变量中的子目录中查找文件。我以前的系统管理员死对头!LD_LIBRARY_PATH 应该包含一个冒号分隔的目录列表,dlopen() 可以翻找这些目录以找到匹配的库文件。我查看的所有 Ubuntu 机器(包括有问题的那台)都没有设置这个变量!当一个想要访问各种库的应用程序运行时,一个定时炸弹就会爆炸,因为是此类文件的标准位置(因发行版而异)。
在启动服务器之前设置变量解决了这个问题。当需要在启动时加载 freeradius 时,您需要选择一个策略来执行此操作。在调试模式下启动服务器时,您只需执行以下操作:
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/python2.7/config-x86_64-linux-gnu
# freeradius -X
...如果不是上面显示的目录,请确保替换正确的目录。