

在使用 OpenAtom openEuler(简称:“openEuler”或“开源欧拉”)的过程中,你是否遇到过系统配置、版本升级、软件适配、技术实践等问题?
社区每周整理开发者关注的技术问题,邀请社区技术专家进行解答,分享真实场景下的解决经验。
以下为第二期开发者精选提问
看看是否也有你关心的问题

Q:在麒麟 V10 操作系统上安装 openGauss 6.0.5 LTS,使用的安装包为 openGauss-All-6.0.5-openEuler22.03-aarch64.tar.gz,在安装时执行 gs_preinstall 脚本时报错:
cp: cannot stat 'script/base_utils/os/./../../../lib/psutil/_psutil_linux.so_3.7': No such file or directory
A:
(1)问题定位
gs_preinstall 运行过程中会导入 psutil。在 base_utils/os/net_util.py (base_utils/os/net_util.py) 和 gspylib/common/Common.py 中,代码会根据当前 Python 版本拼接 psutil 动态库文件名:
pythonVer = str(sys.version_info[0]) + '.' + str(sys.version_info[1])
psutilLinuxBak = "_psutil_linux.so_" + pythonVer
根据报错现象,推测系统使用的 Python 版本为 3.7,因为使用 Python 3.7 运行时,脚本会查找:
_psutil_linux.so_3.7
_psutil_posix.so_3.7
而当前使用的 openEuler 22.03 安装包中,psutil 动态库是按 Python 3.9 提供的,即:
_psutil_linux.so_3.9
_psutil_posix.so_3.9
所以执行时找不到 .so_3.7 文件,导致报错。
(2)解决方案
① 首先验证 Python 版本,如果显示 Python 3.7,说明当前环境应使用 Python 3.7 对应的安装包。
② 选择 openGauss 版本,经验证:
openEuler 22.03 安装包带的是 Python 3.9 版本依赖;
openEuler 20.03 安装包带的是 Python 3.7 版本依赖。
因此,麒麟 V10 若为 Python 3.7 环境建议测试使用:
openGauss-All-6.0.5-openEuler20.03-aarch64.tar.gz
Q:使用systemctl和systemd-cgtop命令查询libvirtd服务占用内存超1.5G,而使用top命令查询libvirtd服务占用内存仅70M左右。
A:
systemd管理的服务(包括systemctl和systemd-cgtop)中显示的内存通过查询CGroup对应的memory.usage_in_bytes得到。top是直接统计/proc下内存相关信息计算得出。两者的统计方法不同,不能直接比较。
一般来说,业务进程使用的内存主要有以下几种情况:
anon_rss:用户空间的匿名映射页(Anonymous pages in User Mode address spaces),比如调用malloc分配的内存,以及使用MAP_ANONYMOUS的mmap。当系统内存不够时,内核可以将这部分内存交换出去。
file_rss:用户空间的文件映射页(Mapped pages in User Mode address spaces),包含map file和map tmpfs,前者比如指定文件的mmap,后者比如IPC共享内存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。
file_cache:文件缓存(page in page cache of disk file),普通读写(read/write)文件时产生的文件缓存。当系统内存不够时,内核可以回收这些页,但回收之前可能需要与文件同步数据。
buffer pages:属于page cache,比如读取块设备文件时的相关缓存。
其中anon_rss和file_rss属于进程的RSS,file_cache和buffer pages属于page cache。简单来说:
top里的RSS = anon_rss + file_rss,SHR = file_rss。
CGroup里的memory.usage_in_bytes = cache + RSS + swap。
由上可知,systemd相关命令和top命令的内存占用率含义不同,所以查询结果不同。
Q:使用root帐号登录系统,并在该帐号下使用rpmbuild命令编译mariadb源代码,会出现编译失败现象,提示:
echo 'mysql can'\''t run test as root'mysql can't run test as rootexit 1
A:
(1)原因分析
mariadb数据库不允许使用root权限的帐号进行测试用例执行,所以会阻止编译过程(编译过程中会自动执行测试用例)。
(2)解决方案
使用vi等文本编辑工具,修改mariadb.spec文件中runtest变量的值。
修改前:
%global runtest 1修改后:
%global runtest 0该修改关闭了编译阶段执行测试用例的功能,但不会影响编译和编译后的RPM包内容。
Q:默认配置情况下SNTP服务启动失败。
A:
(1)原因分析
默认配置中未添加授时服务器域名。
(2)解决方案
修改/etc/sysconfig/sntp文件 ,在文件中添加中国NTP快速授时服务器域名:0.generic.pool.ntp.org。
Q:reboot系统,重启后,执行rpm相关命令(yum/dnf)提示:

A:
(1)原因分析
执行安装升级动作过程中,会对/var/lib/rpm/__db.00*文件进行读写操作,如果在运行中出现强制下电、磁盘空间满或者 ‘kill -9’ 等异常中断操作,会导致对应_db文件损坏,后续执行rpm相关命令(dnf/yum)会发生报错。
(2)解决方案
步骤1:执行kill -9停止所有正在运行的rpm命令。
步骤2:执行rm -rf /var/lib/rpm/__db.00*删除所有db.00的文件。
步骤3:执行rpmdb --rebuilddb命令,重建rpm db后即可。

无论是新手入门
还是技术实践中的疑难问题
都欢迎向社区提出!
你的一个问题
可能也是众多开发者正在寻找的答案
欢迎大家关注【有问必答】
一起交流、共同成长,共建 openEuler 开源社区!
可添加下方openEuler小助手
邀请你进技术交流群


-END-
关注我们,了解更多
▼
