前言
本人在麒麟和统信UOS桌面系统下进行应用开发近3年,是面向国企的虚拟化方案产品项目(安装windows虚拟机,串口、并口、USB等硬件设备从物理机映射到虚拟机中使用,并延伸开发两个系统的融合功能,以C++开发实现图形化+后台服务),本篇涉及的内容较多,但整体精简,会提供以前分享过的相关内容传送门,方便接续阅读。
一、麒麟/统信UOS系统对比
麒麟和统信UOS桌面系统是最常用的两个国产操作系统,信创项目基本是用这两个系统进行搭建,统信UOS的授权要贵一些,(专业版)统信UOS授权通常是3个月,麒麟系统授权通常是1年,授权主要影响应用商店和apt仓库下载软件以及合法性,超过试用期不影响已经部署的应用的运行。
以下整理了一份两个系统的发展史,通过其挂靠过的开源linux系统,可以大致了解这两个系统的特性:类似Debian、Ubuntu。

在这两个系统上很多常用的linux开发库是通用的,开发的程序在这两个系统之间兼容性比较强,即开发一个程序,在两个系统上都可以运行,选择哪个系统看客户的需求。(通常客户要求送测的,都要求在这两个系统上进行测试)
另外需要提醒的是:麒麟和统信UOS是从各自的APT仓库下载的开源软件/依赖包,版本是有可能不同的,比如libopencv、openssl的开发库等。因为涉及国企/ZF的国产化项目,基本上这两个系统都要进行兼容性测试。
二、项目开发
1、开发环境搭建
(1)apt下载基础环境、开发库等
系统自带有gcc,g++、make等从APT仓库中获取即可,C/C++开发过程中,大部分的库都可以从APT仓库获取,获取不了的再找源码来编译。
sudo apt install g++,make
注意,桌面系统默认登录的是普通用户,下载的东西会安装到系统级的目录中(比如/usr/bin等),必须提供管理权限。
(2)安装qtcreator
可以下载官方的历史版本,或者到qt官网下载安装工具,自动在线下载(这种方式需要一个qt官网注册的账号密码),网上的资料比较多也比较全,我这里不占用篇幅来介绍。
以下提供创建第一个QT项目的链接传送门
(3)安装QT应用打包工具
做linux服务器端应用开发的,生产环境的服务器通常跟开发环境下载同样的依赖库及相关工具,在麒麟/统信UOS桌面系统上,这样安装也能执行QT编译好的应用,但是这样就需要维护人员耗费时间去安装qtcreator,维护成本增加,所有需要一个工具把QT编译好的应用依赖的库全部搜集到同级目录下,linux 版本的qtcreator是不带有这个打包工具的,但有开源项目,需要自己编译。
以下是linux qt打包工具linuxdeployqt的链接传送门
这个链接里面涉及了用cmake编译linuxdeployqt,项目中需要编译开源项目的源码时,可以参考。
另外如果打包后还有缺失依赖库,可以用ldd命令查看应用缺少哪些动态库,直接从开发环境中拷贝出来,一起打包到生产环境中。
(4)打应用发布deb包
相当于打包麒麟/统信UOS应用的一键安装的工具,客户是可以直接进行安装操作,比提供shell脚本的升级方式更好维护,最好是开发架构极少改动之后再安排打deb包。
以下是打deb包的链接传送门
成熟产品的交付,肯定是提供一个deb包,用户或者技术支持人员在任意的麒麟/统信环境下都可以安装是最好的交付方式。
2、国产化虚拟化方案项目分享
(1)国产化替代背景
国企/ZF项目的国产化替代都会经历以下3个阶段:

window上的业务应用改造决定所属阶段:
阶段一:所有业务应用都需要在windows进行,需要windows虚拟机进行支持;
阶段二:核心的业务系统应用已经完成国产化改造,但有部分功能模块无法改造,比如涉及IE浏览器访问的站点,系统太老,找不到原开发厂家,当用到这部分无法改造的业务应用时,需要windows虚拟机进行支持;
阶段三:核心业务系统已包含全部与业务有关的功能模块,此时可以删除掉虚拟机。
(2)做虚拟化方案的知名产品/厂商
分类两种类型的厂商:纯软件产品厂商,售卖信创终端并配套虚拟机方案产品的厂商。
纯软件产品厂商
统信UOS系统的彩虹平台,麒麟系统的信安云,其他知名的产品:铠大师,好办公等
终端配套虚拟机方案厂商
知名的厂商:升腾等,这里不做列举。像长城、国光等大牌厂商,实际是集成了铠大师之类的纯虚拟化产品之后再售卖给客户。
3、虚拟化方案产品详细介绍
虚拟机选型
KVM或者virtualBox,这两个作为第三方工具使用时,无版权纠纷。
在虚拟化方案中,这两种虚拟机各有特点:
KVM
优点:适合以后台服务器方式部署运行,性能稳定,需要配置的资源较少,不容易死机;
缺点:桌面全屏显示windows系统时,画质比较简陋;
以KVM为主的厂商,因为显示window桌面效果比较差,几乎都是面向阶段二。
技术特点:以远程桌面技术(RDP),在麒麟/统信UOS的桌面直接显示window的应用,只有需要维护时才会进行windows桌面(比如在windows中增加新的打印机)。
virtualBox
优点:桌面和服务器方式部署都支持,桌面模式显示的效果与直接安装window几乎一样;
缺点:桌面模式比较吃资源,长期运行会有死机现象,后台模式整体会比KVM差一些,包括资源、性能等指标;
以virtualbox为主的厂商,可以同时用于阶段一和阶段二。
技术特点:阶段一直接全屏显示windows桌面;阶段二可以使用远程桌面技术(RDP)来显示window的应用,也可以深度使用virtualbox的无缝模式(Seamless Mode)来显示window的应用。
以下是我整理的虚拟机功能及后台命令的链接传送门
通用的虚拟化产品功能
设备管理
主要是USB、串口和并口设备。串口和并口设备只能在虚拟机关闭的情况下配置是否映射到虚拟机中,而USB设备不受限制,并且很多虚拟化厂商会提供USB网络共享功能。
USB设备
可以使用虚拟机特性把USB设备透传进虚拟机(虚拟机对同时透传的设备数量有限制),也可以使用USB网络共享技术,在虚拟机中通过绑定共享USB设备进行使用。
kvm使用的是libusb-dev库实现透传功能,vbox是自有命令行进行透传,另外在国产系统侧还需要结合libudev-dev库来捕获更详细的USB详细和事件。
以下提供udev开发的案例链接传送门
串口设备
只能使用虚拟机的特性透传进虚拟机中,透传方式参见(【linux】KVM、vbox虚拟机重要的后台命令)。
如果有串口设备测试开发需求,可以参见以下串口工具的案例
【QT常用技术讲解】QSerialPort串口开发,包含文件发送功能
如果需要监听第三方业务应用的发送/接收数据是否正常,可以参见以下监听头制作的方法
并口设备
只能使用虚拟机的特性透传进虚拟机中,透传方式参见(【linux】KVM、vbox虚拟机重要的后台命令)
需要特别注意的是,麒麟和统信UOS下,如果要把并口透传到虚拟机,需要先卸载本地的lpt模块,再进行透传,如果设置了共享打印机,就不需要进行透传操作了。
Linux使用打印机是CUPS,是苹果贡献给UNIX的,Linux适配成systemV标准之后,Linux的各个发行版本都使用CUPS做为打印机管理软件,这是开源的软件,统信UOS和麒麟都预装有CUPS,在工具栏搜【打印机】即可界面操作。
关联知识可以参见链接传送门
网络管理
至少需要支持桥接模式和NAT模式。
桥接模式
虚拟机与物理机共用一个网口,且在同一个局域网内,相互之间可以访问。
这是最简单也是最原始的方式,但物理机和虚拟机都是配置业务网络的IP地址,严格要求IP资源的客户通常不允许使用这种模式。
NAT模式
虚拟机通过物理机的IP与其他终端通信,当业务应用开启网络访问端口时,必须在物理机上进行网络端口映射,其他终端才能正常访问虚拟机中的业务应用的网络访问端口。
只需要物理机设置业务网络的IP地址即可,但是以下业务场景需要额外开发IP映射功能:
①window虚拟机中的客户端获取本地IP地址,并通过网络把这个IP传输给服务器,然后开启指定端口访问(比如9099);
②客户端5分钟内未与服务器端有业务交互,则服务端通过之前客户端上传的本地IP地址,主动发送一个心跳确认包给客户端,如果客户端不响应就清空业务缓冲区;
以上场景中,客户端获取到的本地IP地址是NAT网络地址(比如10.0.0.5),这个肯定与物理机(比如192.168.1.202)不在同一个网络,当服务器(比如192.168.1.2)向客户端(10.0.0.5)发送信息时,必然会被丢弃,而服务器(比如192.168.1.2)应该向物理机(192.168.1.202)发送信息,再由物理机通过端口映射转发到虚拟机的客户端,才能完成网络传输。
所有NAT模式下需要提供针对指定的业务应用进行IP映射的功能,成熟的虚拟化方案产品基本都包含这个IP映射功能。
应用发布
主体是实现把window虚拟机中的业务应用发布到麒麟/统信UOS系统的桌面,然后用户点击麒麟/统信UOS系统的业务应用桌面图标即可打开window中的应用。
不少虚拟化产品厂商会收集window桌面的lnk链接,提取exe的图标及exe路径信息,自动发布到麒麟/统信UOS系统的桌面上,感官上觉得物理机和实体机的桌面融合在一起。
另外也通过smb等目录共享功能,实现麒麟/统信UOS系统的桌面与window虚拟机的桌面进行文件共享(屏蔽.lnk文件),用户在使用window的业务应用,涉及文件保存时,文件能直接同步到麒麟/统信UOS系统的桌面上。
这里我只简单的分享主流用RDP方式实现应用发布功能的关键技术点:
window端需要进行破解,取消并行打开及数量限制,同时也可以改变RDP的端口;
Linux端,如果只是简单的用,从统信UOS的商店中下载xfreerdp,用命令行可以直接实现打开window端的应用。
如果需要深度使用,单个xfreerdp显示出业务应用需要耗时几十秒才能完成window用户登录及打开业务应用的操作,这是很影响产品体验的。可以下载xfreerdp源码进行编译,把代码拆分成两个模块:负责常驻登录及接收交互信息的服务端,以及申请打开业务应用的客户端,这种方案只需要登录一次window用户,业务应用显示在3秒内。
这部分是产品的核心模式,只提供以上技术思路。
EXE应用一键安装
为了体现物理机与虚拟机的融合(产品亮点),当用户把.exe文件放到麒麟/统信UOS桌面上(因为桌面同步功能的原因,在window的桌面中已经存在这个文件),然后点击桌面的.exe文件时,即可调用RDP打开window桌面上的改.exe应用,用户感观上即是国产操作系统可以直接运行.exe文件。
文件夹共享
可以把麒麟/统信UOS系统上的文件夹共享到window虚拟机中,USB插入主机设备后,在麒麟/统信UOS系统中也是一个文件夹,也可以进行共享,这也是用户喜欢的功能之一。
篇尾
国产化虚拟化方案只是一个过渡阶段,最终会被遗弃,但对国产化的平滑过渡起到关键的作用。