目前,在国家的支持下,国产操作系统蓬勃发展。KingbaseES共享集群在开发过程中,已经考虑了诸多跨平台问题,但是在和各个厂商的操作系统适配中,仍然有一些意想不到的问题。
在aarch64平台和loongarch64平台上,由于底层汇编指令的变更,需要修改一些自旋锁、原子操作等相关操作的实现,这些已经在代码中解决。在一些操作系统上,默认SHELL为dash,需要将/bin/sh由dash重定向为bash。除此之外,最为常见的适配问题是crm_mon无法显示的问题。这个问题在多个国产系统中均存在,且目前只能通过配置进行有效的解决。
命令crm_mon,是clusterware实时展示集群状态的工具。静态的查看集群状态,可以通过crm_mon -1或者crm status,这两个命令仅能输出此刻的状态,不能持续刷新终端界面。而crm_mon这个命令,是可以的。因此在观察clusterware集群状态时,crm_mon是一个非常好用的工具。
工具crm_mon在展示集群状态时,需要根据操作系统配置,通过libncurses打开终端,然后向终端实时刷新式输出集群状态信息。但是在某些操作系统中,执行crm_mon,报出如下错误:
crm_mon
Error opening terminal: xterm这是什么情况?
报错信息提示,打开名为xterm终端出现错误。
首先会有第一个疑问,为什么是xterm?这是因为系统配置了默认TERM,TERM是常见的系统环境变量,一般为xterm,可以通过如下命令查看默认terminal
echo $TERM
xterm那么xterm正常存在吗?
find / -name xterm
/lib/terminfo/x/xterm显然xterm是正常存在的。那么xterm的位置对不对呢?
查看编译机的xterm位置,发现其位置为
/usr/share/terminfo/x/xterm于是,问题得到定位,显然是xterm的位置不对,导致crm_mon工具找不到xterm,从而报错。
那么位置是crm_mon是去什么位置查找xterm呢?
由于crm_mon是调用libncureses实现终端输出的,那么显然是libncurses指定了xterm的位置,查看libncurses的configure信息,发现term的路径是是通过configure时指定的。由此得出结论,操作系统变更xterm的位置,导致应用程序查找不到默认term。
那么问题怎么解决呢?
第一种解决方案,也是最容易想到的,就是在正确位置放置xterm,一般采用软连接的方式
ln -s /lib/terminfo/x/xterm /usr/share/terminfo/x/xterm第二种解决方案,是更改环境变量terminfo。terminfo是替代/etc/termcap文件,实现的终端外观和交互行为定制的全新方案,一般terminfo数据文件在/usr/share/terminfo下。terminfo的路径,通过环境变量TERMINFO指定。
export TERMINFO=/lib/terminfo/但是这种方案,会更改所有的应用程序的terminfo,而此操作系统的一些term依然在/usr/share/terminfo路径下,那么第一种方案更为推荐。
【更多人大金仓数据库信息, 详见 金仓文档管理系统 】