Phantomjs 2.1.1开源软件适配鲲鹏服务器的指导
发表于 2025/09/10
0
作者 | 张久同
一、介绍
在鲲鹏环境中开展Phantomjs 2.1.1的适配。
二、基础软硬件信息
硬件要求
鲲鹏硬件 | 配置信息 | 备注 |
---|---|---|
服务器型号 | Taishan 2280 | 1台 |
CPU型号 | Kunpeng 7260 处理器 | - |
内存 | 16G*16 @2933 | - |
网卡 | TM210 1*4GE | - |
硬盘 | 7*600GB SAS HDD | - |
Raid卡 | 1*SAS3408 | - |
GPU卡 | NA | - |
操作系统及硬件
操作系统及项目名称 | 版本 | 说明 |
---|---|---|
Kylin | V10 SP2 | 测试环境OS |
Phantomjs | 2.1.1 | - |
三、移植适配项目
编译环境准备
类别 | 版本 |
---|---|
openssl | 1.0.1u |
Phantomjs | 2.1.1 |
编译环境准备
Phantomjs开源组件是基于webkit的JavaScript API,依赖openssl 1.0.1,因此需要先编译安装openssl 1.0.1。
1、下载源码。
yum install -y make flex bison gperf ruby openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel git wget cmake libtool python-devel nodejs git clone https://github.com/ariya/phantomjs.git cd phantomjs git checkout 2.1.1 git submodule init git submodule update
2、合入补丁至“phantomjs/src/qt/qtwebkit/Source/WTF/wtf”目录下。
3、由于源码中JSStack.h文件中关于地址偏移量的定义为16k,在4K页表大小的内核中可以正常运行,但在64k页表大小的内核中,会导致后续调用mprotect函数时传入地址是非页表起始地址,而且分配大小也不是页表大小的整数倍,因此修改地址偏移地址大小为64k。
vim /your phantomjs/src/qt/qtwebkit/Source/JavaScriptCore/interpreter/JSStack.h
4、编译安装。
python build.py --qmake-args "QMAKE_CXXFLAGS += -fsigned-char -g" --webkit-qmake-args "QMAKE_CXXFLAGS += -fsigned-char -g" --phantomjs-qmake-args "QMAKE_CXXFLAGS += -fsigned-char -g" --qt-config="-L/your openssl/lib" --qt-config="-I/your openssl/include" --qt-config="-no-pch"
测试验证
在Phantomjs目录下的bin目录下测试程序。
四、总结思考
FAQ
问:经过修改的组件是否会影响业务执行逻辑?
答:经过对源码的业务逻辑进行分析,出现问题的业务代码负责将起始地址到结束地址的内存空间保护属性修改为指定的值,通过将这段地址按照页表大小进行分段,多次执行commit函数。经过修改后的源码改变了每次执行commit的地址范围,不会影响业务逻辑。
总结
在编译过程中需要加入“-g”参数,使得编译后的程序可调试,方便问题定位。在修改源码过程中要考虑是否改变业务逻辑,影响业务运行的准确度。