提问人:Chris 提问时间:9/15/2023 更新时间:9/16/2023 访问量:175
如何打包 Chromium 和所有依赖项进行部署
How to package Chromium and all dependencies for deployment
问:
从 JasperServer 7.1.0 更新到 7.9.1 后,仪表板的 PDF 导出不再起作用。研究一下,我发现由于 PhantomJS 的弃用,Chromium 是必要的,因此我需要为服务器提供 chrome 二进制文件。
我们无法在 JasperServer 主机上安装应用程序 - 即使是 jasperserver 部署也是通过复制构建的软件包而不是运行安装程序来完成的。因此,我不能只在主机上安装 Chrome。我也不能让主机在部署时从外部 URL 下载文件,只能访问本地项目存储中的文件。
我尝试的第一个解决方法是从 https://commondatastorage.googleapis.com/chromium-browser-snapshot 下载 chromium 并将 zip 文件存储在本地工件存储中,然后在部署时拉取它。这会将 Chrome 连接到服务器上,但它错过了 chrome 需要的几个依赖项。
我的下一个想法是使用 yum install ----install-root=<CHROME_DIRECTORY> <MISSING_REPO> 将缺少的依赖项下载到 Chrome 文件夹,然后压缩包含依赖项的文件夹。但是,尝试这样做仍然失败 - 它创建了指向 lib 和 lib64 目录的符号链接,但它实际上并没有将文件放在 chrome 目录中。此外,Chrome 仍然会为丢失的文件抛出错误,即使它需要的文件位于 lib64 文件夹或与 Chrome 可执行文件位于同一文件夹中。
我现在看到的错误是.error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory
在 chrome 上运行 ldd,我看到以下缺少库:
libatk-1.0.so.0 => not found
libatk-bridge-2.0.so.0 => not found
libcups.so.2 => not found
libxkbcommon.so.0 => not found
libatspi.so.0 => not found
libXcomposite.so.1 => not found
libXdamage.so.1 => not found
libgbm.so.1 => not found
libasound.so.2 => not found
如何将 Chrome 及其依赖项打包在一起,以便只需将它们解压缩到相关存储库中即可部署它们?
答:
解决方案如下:
通过提取要在与 JasperServer 主机具有相同操作系统的第二台计算机上使用的版本,并正常安装任何依赖项,生成一个好的 Chrome 版本。
通过将 Chrome 解压缩到 JasperServer 主机上,将LD_LIBRARY_PATH设置为 chrome 目录,然后运行 .将它们添加到 chrome 归档文件。重复上述步骤,直到没有发现缺少依赖项的进一步依赖项。ldd <chrome_path> | grep not
最后,将 jasperserver 重新配置为从提供的 chrome-wrapper 可执行文件运行 Chrome,或者将其设置为使用自定义包装器,该包装器仅设置LD_LIBRARY_PATH然后将所有参数传递给 chrome。
评论