专用机服务器系统不允许动态生成可执行文件,可执行文件包括:/usr/bin/ping这样的二进制 ELF 文件、动态库 so 文件、内核模块 ko 文件、shell 脚本、python 脚本等,此限制为内核(系统级)内置,无法去掉,且最终上线运行也需要满足此要求。
限制安装其他程序,限制修改系统文件(如环境变量、sh文件等),限制 yum 等外部安装命令,限制脚本运行。
用户一般知道自己的环境是否为专用机环境,一般关键字中有专用机、涉密机、可信软件、授权软件、用 rpm 安装、deb 安装等,都是严格的专用机环境。
帆软部署的时候,会从fine-core-10.0.jar中,com/fr/jvm/assist里解压出 FineAssist 和 FinePrivacy 文件,解压到中间件的 temp 文件夹中临时加载对应架构的 so 文件,而专用机检测到不安全的程序,会禁止其运行,导致部署失败。因此,我们需要将对应架构的 Assist 和 Privacy 文件,做成安装包,通过专用机的授权软件安装好,系统才允许运行。这时将部署时的解压运行的方式,改为指定路径运行的方式,方可部署成功。
FineAssist/FinePrivacy:部署 —— 部署失败,报错 tools.jar 不匹配,需要用到本文的方案。
sqlite:内置 FRDemo 数据 —— 无法预览 FRDemo 数据集的模板,后续考虑将国产化部署包中的 Demo 模板转为内置数据集模板。
j2v8:图表引擎 —— 暂无影响。
排查和确认是否因专用机的禁用而导致部署失败,客户不清楚系统的具体情况时,可以用下述方案自主排查。
注:如果客户确认有安全管理限制,可以跳过此步骤。
查看部署过程中(保证进程还在),中间件的 temp 目录下,是否有 FineAssist_xxx.so 文件(说明解压出了 so 仍在加载或试图加载中)。
下载:国产化排查工具.zip,放到客户任一目录下,解压后得到下列文件。
运行FinePrivacyTest.class文件,测试对应架构的FinePrivacy_xxx.so文件。
java FinePrivacyTest /opt/TongWeb/temp/国产化/FinePrivacy_x86_64.so
如果有无法加载so文件的报错,则可以确认该系统禁用了外来的so文件运行,如果没有允许执行,执行Test代码后正常返回命令行。
目前设计器只支持 ARM 和 x86 架构的:
uname -a //Linux架构查询
java -version
确认 JDK 版本,一般国产化环境都使用自带的 openJDK ,该 JDK 需要满足帆软部署的 JDK 1.8 限制。
确认客户 tools.jar ,如果客户的 openJDK 没有 tools.jar ,需要去 JDK 官网找到相同版本的 JDK 安装包,在本地安装后取用其 tools.jar 。
需要 2020 年 11 月份以后的 JAR 才支持专用机的部署,官网部署包有一个 persist 2020.10.30 的版本也是适配的。
我们提供包含 x86 和 arm 架构的 rpm 安装包,可联系技术支持获取。技术支持联系方式:QQ「800049425」、电话「400-811-8890」。
每家系统的安全管理软件画风不同,但原理一致,一般把安装包发给客户,客户可自行安装。附上一个安装实例图,以便大家理解。
1)打开软件,选中「可信软件管理」,如下图所示:
2)添加可信软件包-找到提供的 rpm 进行安装。如下图所示:
3)安装过程中可能报错没有自签信息,这个在安装时可以手动填写的,若没有特别要求,可填写任意值。如下图所示:
4)安装后可以看到该 rpm 已经在白名单中,重点关注其安装路径,后续要用。
注:信任文件安装后,不要移动位置,有些环境会根据路径检测是否信任,保证初始安装位置不变。
一般国产化环境都是自带安全中间件,客户会让中间件厂商提前安装好中间件,这样我们可以直接使用和修改配置。如果没有自带的中间件,还需要我们提供,中间件的 catalina.sh 和 startup.sh 都是不可执行文件,因此只能使用部署包部署,提前写好配置。
给中间件配置启动参数,参数的配置文件和中间件的 jvm 参数配置文件一致,参数的位置和xmx、xms等参数保持一致即可。
如 Tomcat 的catalina.sh,tongweb 的external.vmoption,apusic的vm.option。
-Dfineassist=/opt/assist/FineAssist.xxx#需要填入可信软件安装后的路径,和对应架构的完整名字FineAssist_x86_64.so-Dfineassist.copy=disable#无需修改-Dfineprivacy=/opt/assist/FinePrivacy.xxx#同上-Dfineprivacy.copy=disable#同上
注:参数中 D 为大写,其他全部小写,而 so 文件名称中的 F、A、P 均为大写;参数的设置位置有要求,需要将以上参数设置到 #jvm_options 以下然后 #server_options 以上的位置,如果写在#java_home后面就被当 java_home 给加载了,导致服务器虽然可以起来,但是访问系统地址出现 tools.jar 问题。
上述操作做完以后正常部署,启动中间件,在启动日志中能看到 jvm 参数是否生效。
或者ps -ef|grep apusic(或当前中间件)可以查看jvm参数情况。
注:参数生效是一个必要条件。
一般前台都是报错tools.jar不匹配,后台可以看到Fine assist start failed的报错。
则需要查看产品 JAR 包版本是否为 2020-11-02 及以后的,可能环境有缓存或者其他应用路径,实际运行的是其他路径下的webroot等。
如果看到copy fineassist has be disable,说明成功阻止了 fineassist 拷贝;如果看到 Fine assist start successfully ,说明成功地加载到了信任软件中的 so 文件。
后续的部署则转变为常规部署,如果报错则正常排查即可。
使用openJDK,所以可能会报错 fontconfig 相关问题,处理方案如下:
1)安装 fontconfig,百度查找 fontconfig 的 rpm 安装包,放到专用机安装软件里安装。
2)需要把java/jdk/jre/lib下的 font 字体包和 fontconfig 的依赖拷贝到/tomcat-linux使用的 jre 的对应目录下。
我们提供包含 x86 和 arm 架构的 rpm 安装包,可联系技术支持获取。技术支持联系方式:QQ「800049425」、电话「400-811-8890」。安装过程同 4.1 节步骤。
常规的 Linux 设计器安装文件也是 sh 文件,专用机需要打包成 rpm 来安装,常规 ARM 和 x86 设计器,可联系技术支持获取。技术支持联系方式:QQ「800049425」、电话「400-811-8890」。
注1:设计器中的地图 json 和模板文件,需要安装后手动拷贝进去(这些文件影响安装不影响使用)。
注2:AMD 的环境可以使用 FRDemo 库,其他的还没有适配。
安装好以后需要在FineBI/bin/designer.vmoptions里添加参数配置,如下:
注:参数中 D 为大写,其他全部小写,而 so 文件名称中的 F、A、P 均为大写。
安装好后只出现启动加载,随后闪退,原因是 fine 参数添加错误,可以根据 fanruan.log 启动日志,或者ps -ef|grep java来查看启动参数的应用情况。
服务器部署包部署时,因为部署包自带 tools.jar 和 JDK ,可以将部署包整个 Tomcat 打成 rpm 文件装入客户的专用机。
由于安装后不允许再次修改 catalina.sh(修改后会失去信任,无法执行),所以需要提前把各种配置参数写入 catalina.sh中。
注1:JAVA_HOME已经定义,如果客户希望引用自己的JDK,可以删掉两条 export 参数,并且将 CATALINA_HOME/lib 下的 tools.jar 更换为客户的 tools.jar。
注2:专用机部署需要的两个 so 文件已经放置到对应位置,并配置好了参数,部署前可自由调整文件在 Tomcat 里的位置,参数对应调整即可。