如何打包 Chromium 和所有依赖项进行部署

How to package Chromium and all dependencies for deployment

提问人:Chris 提问时间:9/15/2023 更新时间:9/16/2023 访问量:175

问:

从 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 及其依赖项打包在一起,以便只需将它们解压缩到相关存储库中即可部署它们?

google-chrome 依赖项 chromium

评论

0赞 Chris 9/16/2023
更新:添加库确实允许 Chrome 运行,前提是我传入 LD_LIBRARY_PATY=<CHROME_DIRECTORY>:$LD_LIBRARY_PATH 现在我只需要将 Chrome 设置为始终使用该值,而无需在系统范围内设置它

答:

0赞 Chris 9/16/2023 #1

解决方案如下:

通过提取要在与 JasperServer 主机具有相同操作系统的第二台计算机上使用的版本,并正常安装任何依赖项,生成一个好的 Chrome 版本。

通过将 Chrome 解压缩到 JasperServer 主机上,将LD_LIBRARY_PATH设置为 chrome 目录,然后运行 .将它们添加到 chrome 归档文件。重复上述步骤,直到没有发现缺少依赖项的进一步依赖项。ldd <chrome_path> | grep not

最后,将 jasperserver 重新配置为从提供的 chrome-wrapper 可执行文件运行 Chrome,或者将其设置为使用自定义包装器,该包装器仅设置LD_LIBRARY_PATH然后将所有参数传递给 chrome。