5.1 开发编译集成方式
5.1.1 开发环境准备
软件名称 | 版本要求 |
---|---|
g++/gcc | 7.3.0 |
libstdc++6 | >= 8.3.0 |
信创CSSDK提供了静态库以及动态库以及node插件。
.
├── shared
│ |── libaTrustSDK.so # 动态库
└── atrust.node # node插件
└── static
├── libaTrustSDK.a # 静态库
shared为动态库目录,static为静态库目录。请根据你的项目需求,选择一种集成方式。
5.1.2 集成aTrust客户端安装包
静默安装aTrust客户端
aTrust客户端集成:可将aTrust客户端安装包打包到第三方应用程序安装包中一起安装,aTrust客户端提供静默安装 方式,静默安装方法可以通过dpkg安装
deb包在安装的时候会有四个钩子脚本,可以将aTrust安装包放到第三方应用程序安装包的某个位置,然后在postinst内执行安装 但是由于dpkg进程在运行的时候会上锁,保证同时只能有一个dpkg进程运行安装,所以需要在postinst内执行一个脚本 ,脚本内一直检测当前安装第三方应用程序的dpkg进程是否结束,结束之后可以执行安装aTrust安装包。
下面是一个简易的postinst的示例,需要在脚本内执行install_atrust.sh这个后台脚本 ,在执行的时候一定要加上&,这样才是异步,否则会导致aTrust安装失败
#!/bin/bash
function main() {
/xxx/xxx/install_atrust.sh 1>/dev/null 2>&1 &
}
main $@
下面是install_atrust.sh的一个示例
#!/bin/bash
function check_dpkg_running()
{
local dpkg_status
local wait_times
wait_times=0
dpkg_status=$( pgrep -c dpkg)
while [ "$dpkg_status" -ne 0 ]
do
wait_times=$((wait_times+1))
sleep 1
dpkg_status=$( pgrep -c dpkg)
#避免dpkg出现问题,脚本长时间阻塞。
if [ "${wait_times}" -gt 80 ]
then
log "Error" "wait dpkg runnig too long,please check the dpkg status and reinstall"
exit 1
fi
done
}
function handle_atrust()
{
#检查是否有dpkg程序正在安装。如果没有运行了,该func会返回,此时处理atrust安装包
check_dpkg_running
echo "begin handle atrust opr:$1"
if [ "$1" == "install" ]; then
# 执行安装
if ! dpkg -i ${SHELL_PATH}/vdi-linux-client-*.deb;then
log "Error" "install vdi deb file failed,check the instll file"
exit 1
fi
else #purge
# 执行卸载
dpkg -P cn.com.sangfor.atrust
fi
echo "end handle atrust opr:$1"
}
静默卸载aTurst客户端
静默卸载aTrust客户端方式:
sudo dpkg -P cn.com.sangfor.atrust