一、麒麟操作系统概况
麒麟V10是一款商业版本服务器操作系统,其作为承载业务系统的基础底座,能满足大部分企业的产品需求,各类软硬件适配也都较好。麒麟V10的SP1/SP2/SP3版本内核都是基于OpenEuler 20.03 LTS研发的,其支持X86、ARM、Alpha、MPIS等CPU架构,支持Intel、AMD、鲲鹏、海光、飞腾、龙芯、兆芯、申威8种国内外主流CPU品牌,已适配1400多款国内外服务器整机,适配1500多款主板和板卡,适配200多款数据库和200多款中间件产品,适配6600多款服务器基础软件,适配250000多款服务器商业软件和开源软件。
二、常用软件选型适配
2.1 常用软件适配情况
本文罗列了29款常用软件的适配情况,如下表所示,供参考:
x更多兼容适配情况,可登录麒麟生态官网进行查询:
https://eco.kylinos.cn/zoology/commercial.html?system_class=1
2.2 常用软件适配案例
下面选取几个典型的数据库(MongoDB、Redis)和中间件(Nginx、Tomcat)的例子作为适配案例,详细说明相关软件适配测试的过程。
2.2.1 MongoDB
2.2.1.1 MongoDB测试环境
麒麟V10镜像:
Kylin-Server-10-SP1-Release-Build10-2500-20201202-arm64.iso
硬件环境:cpu数量(4),可用内存(8G),磁盘(300G)
软件版本:MongoDB 4.0.12
2.2.1.2 MongoDB适配步骤
(1)软件安装
创建安装目录
# mkdir -p /usr/local/mongodb/bin
将软件安装包mongodb-linux-arm64-4.0.12.tgz解压并安装至/usr/local/mongodb/bin目录下
# tar -zxvf mongodb-linux-arm64-4.0.12.tgz -C /usr/local/mongodb/bin
(2)配置系统环境参数
# vim /etc/profile
export PATH=$PATH:/usr/local/mongodb/bin/mongodb-linux-arm64-4.0.12/bin
# source /etc/profile
(3)创建MongoDB数据文件存放目录和日志文件存放目录
# mkdir -p /data/db /logs
(4)创建MongoDB运行时使用的配置文件
# mkdir -p /usr/local/mongodb/conf
# vim /usr/local/mongodb/conf/mongodb.conf
编辑以下启动参数到/usr/local/mongodb/conf/mongodb.conf文件中:
dbpath = /data/db # 数据文件存放目录
logpath = /logs/mongodb.log # 日志文件存放目录
port = 27017 # 端口
fork = true # 以守护程序的方式启用,即在后台运行
#auth=true # 需要认证。如果放开注释,就必须创建 MongoDB 的账号,使用账号与密码才可远程访问,第一次安装建议注释
bind_ip=0.0.0.0 # 允许远程访问,或者直接注释,127.0.0.1是只允许本地访问。
(5)启动MongoDB
执行以下命令,启动MongoDB
# mongod -f /usr/local/mongodb/conf/mongodb.conf
(6)验证
使用mongo交互工具,操作MongoDB数据库,如下所示:
验证帮助、退出等功能“help”、“show dbs”、“quit”进行交互。
(7)查看日志
# cat mongodb.log
完成兼容性适配测试。
2.2.2 Redis
2.2.2.1 Redis测试环境
麒麟V10镜像:
Kylin-Server-10-SP1-Release-Build10-2500-20201202-arm64.iso
硬件环境:cpu数量(128),可用内存(510G),磁盘(2T)
软件版本:redis-5.0.7
2.2.2.2 Redis适配步骤
(1)软件安装
# rpm -ivh redis-5.0.7-1.ky10.aarch64.rpm
(2)检查版本
a.查看Redis版本。
# redis-server -v
系统会显示如下类似信息,表示redis的版本是5.0.7。
b.查看Redis的CLI版本。
# redis-cli -v
系统会显示如下类似信息,表示redis的CLI版本是5.0.7。
(3)启动服务
c.执行如下命令,启动redis-server。
# systemctl start redis.service
# systemctl status redis.service
(4)功能测试
# redis-cli
127.0.0.1:6379> set aa 1
OK
127.0.0.1:6379> get aa
"1"
完成兼容性适配测试。
2.2.3 Nginx
2.2.3.1 Nginx测试环境
麒麟V10镜像:
Kylin-Server-10-SP1-Release-Build10-2500-20201202-arm64.iso
硬件环境:cpu数量(128),可用内存(510G),磁盘(2T)
软件版本:nginx1.16组件
2.2.3.2 Nginx适配步骤
(1)配置软件源
a.编辑/etc/yum.repos.d/kylin_aarch64.repo文件,添加软件仓库源地址如下:
[ks10-adv-appstore]
name = Kylin Linux Advanced Server 10 - AppStore
baseurl=http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/appstore/$basearch/
gpgcheck = 0
enabled = 1
b.清除之前的缓存
# yum clean all
c.建立缓存
# yum makecache
(2)软件安装
a.执行如下命令安装
# dnf install -y nginx
b.查看软件版本
# nginx -v
c.查看nginx运行情况
执行命令开启nginx服务
# systemctl start nginx.service
(3)运行测试
从浏览器访问本机ip显示“Welcome to nginx!”
完成兼容性适配测试。
2.2.4 Tomcat
2.2.4.1 Tomcat测试环境
麒麟V10镜像:
Kylin-Server-10-SP1-Release-Build10-2500-20201202-arm64.iso
硬件环境:cpu数量(4),可用内存(8G),磁盘(300G)
软件版本:tomcat-8.5.0
2.2.4.2 Tomcat适配步骤
(1)配置软件源
a.编辑/etc/yum.repos.d/kylin_aarch64.repo文件,添加软件仓库源地址如下:
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1/os/adv/lic/base/$basearch/
gpgcheck = 0
enabled = 1
b.清除之前的缓存
# yum clean all
c.建立缓存
# yum makecache
(2)软件安装
将软件安装包apache-tomcat-8.5.0.tar.gz上传到系统中,解压:
# tar -zxvf apache-tomcat-8.5.0.tar.gz
(3)启动tomcat
# cd apache-tomcat-8.5.0
# cd bin
# ./startup.sh
tomcat已启动。
(4)设置防火墙
a.需要设置防火墙开放8080端口,命令为
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
命令解析:
--zone #作用域
--add-port=8080/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数设置,重启后会失效。
b.重启防火墙
# firewall-cmd -reload
(5)功能验证
在浏览器中访问该系统ip的8080端口即可访问tomcat8.5.0。
a.查看系统ip
# ifconfig
b.打开浏览器输入:172.17.30.109:8080
完成兼容性适配测试。
三、运维实施过程中的难点及应对方案
本文梳理了我们近几年使用麒麟V10系统碰到的一些问题和解决方案,下面将从操作系统兼容问题、漏洞、特性和激活四方面进行展开。
3.1 系统兼容问题
3.1.1 国产服务器安装麒麟V10系统异常
3.1.1.1 场景说明
联想SR860服务器(raid卡型号为940-8i),采用镜像(Kylin-Server-10-SP1-Release-Build20-20210518-x86_64.iso)安装麒麟V10系统,服务器有2块600G的本地盘(做了RAID1),同时映射了存储(OceanStor5510 V5)4个5T的卷,在安装过程中报错(An unknown error has occurred)。
3.1.1.2 分析及处置过程
安装过程中出现报错,大概率是磁盘有问题,一般初始化磁盘后重做磁盘阵列可恢复。于是第一步初始化本地盘,重启仍出现该报错;第二步将存储卷映射关系取消,重启再进入安装界面,不再出现该报错。但在点击“下一步”后进入新的界面,发现“安装位置(D)”下出现新的报错“未选择任何磁盘”,即识别不到磁盘。
点进去确实没有发现磁盘。
识别不到盘一般和阵列卡驱动有关,需要安装对应驱动,下面开始安装阵列卡驱动:
a.将对应驱动做进系统镜像里,挂载镜像开始安装。
b.到安装界面,通过Ctrl+Alt+F2切换至命令行模式
c.挂载镜像:mount /dev/sr0 /mnt
d.安装驱动:rpm -ivh kmod-megaraid_sas-07.720.04.00-1.ky10.x86_64.rpm -nodeps
e.加载驱动:insmod /lib/modules/4.19.90-23.8.v2101.ky10.x86_64/extra/megaraid_sas/megaraid_sas.ko
f.重新扫描下磁盘,则识别到了磁盘。
选中该磁盘,开始正常安装。
3.1.2 红帽7与麒麟V10的SSH会话会超时中断
3.1.2.1 场景说明
红帽7.1系统通过SSH方式远程连接麒麟V10SP1,会话在超过2小时10分后出现中断。
3.1.2.2 分析及解决方案
经测试,红帽7与红帽7的SSH会话正常,麒麟V10到麒麟V10的SSH会话也正常,而红帽7到麒麟V10或麒麟V10到红帽7的会话都存在此问题,初步判断为操作系统SSH的兼容性问题。
查看两者SSH默认配置:
(1)麒麟V10SP1默认配置参数ClientAliveCountMax值为0;
(2)红帽7.1默认未配置参数ClientAliveCountMax和ClientAliveInterval。
解决方案有以下三种,选其一即可:
(1)当作为客户端远程连接服务器时每60秒从服务端接KeepAlive请求,保证客户端不会因为超时空闲而断开连接。
a.在红帽系统配置文件/etc/ssh/ssh_config(注意区别)中添加参数ServerAliveInterval 60
b.重启ssh服务
# systemctl restart sshd
(2)在红帽系统上发起ssh远程连接时添加参数,如ssh -o ServerAliveInterval 60 <用户>@<IP地址> “脚本或执行命令”。
(3)当作为服务端被远程连接时每60秒向客户端发送KeepAlive请求,保证客户端不会因为超时空闲而断开连接,累计3次如遇客户端网络问题导致失败才会中断SSH会话。
a.在麒麟V10上的配置文件/etc/ssh/sshd_config(注意区别)中添加参数 ClientAliveCountMax 3 和ClientAliveInterval 60
b.重启SSH服务
# systemctl restart sshd
3.2 操作系统漏洞
操作系统不可避免会有漏洞,需要迭代更新,国产服务器操作系统也不例外。
麒麟V10较为典型的漏洞类型为内存泄露,如mate-indicators进程内存泄漏、audit审计进程内存泄漏、kylin-kms-daemo进程内存泄漏、gvfs-udisks2-volume-monitor进程内存泄漏等,而处理内存泄漏问题的常规思路有两种:
(1)缓释措施:一般可通过禁用服务或kill进程来应急处理,但有些服务存在依赖,当其他服务重启或其他场景下会随着带起该服务,未彻底解决,如gvfs-udisks2-volume-monitor进程依赖gdm服务,此方法不适用。
(2)解决措施:升级补丁,彻底修复。
3.2.1 mate-indicators进程内存泄漏
3.2.1.1 问题描述
现象:mate-indicators进程为图形化界面相关进程,程序运行过程会触发内存泄露,申请的内存未得到释放。如下图,top命令显示mate-indicators进程内存使用率较高(超过80%)。
影响范围:mate-indicators软件包版本低于20150918kord0ukui58-10.p07
3.2.1.2 解决方案
(1)检查软件包版本
# rpm -qa | grep mate-indicators
mate-indicators-20150918kord0ukui58-10.p03.ky10.aarch64
该版本存在内存泄露问题,一般建议升级至最新稳定版本。
(2)升级补丁
通过yum源或rpm包方式进行软件包升级,如
# rpm -Uvh mate-indicators*
升级后检查版本信息
# rpm -qa | grep mate-indicators
mate-indicators-20150918kord0ukui58-10.p07.ky10.aarch64
(3)重新加载配置
# systemctl restart lightdm
mate-indicators补丁升级完成,其他内存泄露补丁修复操作大同小异,以实际为准。
3.2.2 rpm进程出现CPU冲高
3.2.2.1 问题描述
现象:rpm进程持续运行不退出且cpu占用接近100%。
影响范围:libdb软件包版本低于5.3.28-37.p01.ky10
3.2.2.2 解决方案
通过yum源或rpm包方式进行软件包升级,如:
# rpm -Uvh libdb*
涉及3个软件包:libdb-help -5.3.28-37.p01.ky10.noarch.rpm、libdb-devel-5.3.28-37.p01.ky10.x86_64.rpm、libdb-5.3.28-37.p01.ky10.x86_64.rpm。
3.2.3 rpmdb出现损坏
3.2.3.1 问题描述
现象:rpm定时机制会每天自动刷新软件包清单,刷新过程会引入异常中断风险,造成rpmdb损坏。
影响范围:查看当前版本,rpm版本非p01,需要修复
# rpm -qa|grep -E '^rpm'
3.2.3.2 解决方案
(1)将软件包(rpm-4.15.1-23.p01.ky10.aarch64.rpm、python3-rpm-4.15.1-23.p01.ky10.aarch64.rpm)统一放在指定目录下,进入该目录后,进行软件包升级:
# yum localinstall ./*.rpm
(2)禁用dnf-makecache.timer定时器
# systemctl stop dnf-makecache.timer
# systemctl disable dnf-makecache.timer
3.2.4 其他漏洞问题
如想了解其他漏洞问题可前往麒麟软件知识库查阅,目前知识库包含浙江公开知识库(https://www.yuque.com/kylinos/zj)和麒麟软件公开知识库(http://wx.kylinos.cn/zsk)。
3.3 操作系统特性
除去兼容性等问题,麒麟V10系统与红帽系统在日常使用上差异不大,但麒麟V10也存在一些特性,这些特性可能会影响系统运行,建议在运维实施前及早规划,提前做好应对。
3.3.1 9090端口被占用
3.3.1.1 现象
查看端口使用情况,发现9090端口被占用。
# netstat -antp |grep 9090
3.3.1.2 原因
9090端口被Cockpit服务占用,Cockpit是一个按照Web界面进行管理Linux系统的开源工具。它提供了许多管理Linux系统所需的功能,如文件管理、系统日志查看、用户管理、系统服务管理、网络配置、安全审计等功能。
3.3.1.3 解决方案
禁用服务,释放端口。
(1)查看Cockpit服务:# systemctl status cockpit.socket
(2)关闭Cockpit服务:# systemctl stop cockpit.socket
(3)禁用Cockpit服务:# systemctl disable cockpit.socket
(4)查看端口占用情况:# netstat -antp |grep 9090
3.3.2 系统重启后/tmp目录被清空
3.3.2.1 现象
/tmp目录下存放临时文件,当系统重启后,文件丢失。查看/tmp目录文件系统类型,发现为tmpfs类型。
# df -Th|grep /tmp
3.3.2.2 原因
/tmp目录是tmpfs文件系统类型,而tmpfs是一种基于内存的文件系统,也叫临时文件系统。/tmp目录存放文件会占用内存空间,消耗内存资源,即在内存中存储数据,所以系统重启后会导致数据丢失。
注意:tmp.mount是一个systemd单元,它是用来挂载临时文件系统的。tmp.mount服务会在系统引导时自动运行,并将tmpfs文件系统挂载到/tmp目录下,以便在使用临时文件时提供快速的读写访问。
3.3.2.3 优化建议(二选一)
(1)禁用tmp.mount服务,将/tmp恢复至/目录下
# systemctl mask tmp.mount
重启后生效:
(2)不禁用tmp.mount服务,给操作系统加盘,创建一个独立逻辑卷,挂载在/tmp目录下,设置成挂载独立文件系统,并加入/etc/fstab配置中。(使用LVM技术,此处不细说)
3.3.3 普通用户无法执行crontab命令
3.3.3.1 现象
普通用户执行crontab报错,显示没有权限执行。
# crontab -e
3.3.3.2 原因
crontab命令允许用户定期执行时间命令,如果该命令被恶意使用,可能会导致严重的安全问题,所以麒麟V10默认设置了安全策略,只允许root用户和添加到/etc/cron.allow文件中的非root用户执行该命令。
3.3.3.3 解决方案(二选一)
(1)临时添加白名单
/etc/cron.allow文件中添加需要执行crontab的用户,如monitor用户,没有此文件则创建。
不再报错:
(2)删除白名单,创建黑名单(放开所有用户)
# rm -f /etc/cron.allow
# touch /etc/cron.deny
3.3.4 root用户不能直接su到普通用户
3.3.4.1 现象
root用户su到普通用户提示需要输入密码。
3.3.4.2 原因
麒麟V10引入了安全管理工具kysec,uid(600)和uid(700)作为kysec特性,为三权分立用户预留,故root用户su到该uid用户时提示输入密码。
注:三权分立角色包含secadm安全管理员、auditadm审计管理员、root系统管理员。
3.3.4.3 解决方案
调整su操作的用户密码验证策略。
(1)编辑配置文件/etc/pam.d/su
# vi /etc/pam.d/su
将/etc/pam.d/su文件的第一行注释掉,即第一行内容调整如下:
(2)测试是否生效
# su - test
3.3.5 开启内核参数tcp_tw_recycle报错
3.3.5.1 现象
将参数“net.ipv4.tcp_tw_recycle=1”添加到配置文件/etc/sysctl.conf,并执行命令开启:
# sysctl -p
报错如下:
3.3.5.2 原因
内核版本4.10开始,针对每个数据包的时间戳的生成机制发生了变化(每个TCP连接的时间戳偏移被随机化),可能会与tcp_tw_recycle参数相互影响,导致TCP连接异常,因此在内核版本4.12中,tcp_tw_recycle参数被彻底去除。
注:麒麟V10SP1采用4.19内核版本,无需处理。
3.4 操作系统激活
麒麟V10的激活方式分为微信扫码激活、KMS批量激活和场地授权。其中场地授权方式不涉及激活操作,这里仅讨论微信扫码激活和KMS批量激活的流程差异。
3.4.1 激活流程
微信扫码激活:指定微信账号绑定授权二维码获取激活权限——系统导入授权文件——系统执行命令输出二维码——扫码二维码开始激活——完成激活。
KMS批量激活:搭建KMS批量授权服务器——系统导入授权文件——系统执行命令激活——完成激活。
3.4.2 差异及建议
微信扫码激活和KMS批量激活的流程步骤差别不大,但实际使用差别较大,主要体现在许可管理和激活耗时上。
许可管理:微信方式激活许可后,如需回收许可,联系原厂释放原授权许可重新使用;KMS方式激活许可后,可通过KMS一键回收。
激活耗时:微信方式纯手工,激活量大则耗时太久;KMS方式待搭建完成KMS服务器,则大大减轻工作量,但自动化程度有待提高,建议在kms批量激活服务器搭建完成后,再通过脚本或平台实现自动化批量激活。
麒麟V10不激活不影响系统运行,但商业版软件建议根据正版化要求进行激活使用。
四、总结
构建国产化操作系统的上下游生态是推进信创操作系统的“必经之路”,而完善的软硬件生态链更是企业引进一款成熟的操作系统所需要考虑的重点之一。麒麟V10已经构建了自己的生态链,其与常用软件兼容性适配上已较为靠前,但依然存在不少问题,而生态链的不断成熟完善离不开企业实际运维及业务场景的问题反馈和方案优化。在这场信创浪潮中,我们从业人员要做的是积累技术,做好准备,尽可能做到遇事不慌,心里有底。