【问题标题】:How to compile ready to deploy latest version of `poppler-utils` for Amazon Linux如何编译准备为 Amazon Linux 部署最新版本的“poppler-utils”
【发布时间】:2021-06-14 17:27:18
【问题描述】:

我有一台在 AWS Linux 上运行的服务器。该应用程序使用poppler-utils。

服务器是 CI 集成的。因此,在部署应用程序之前安装了所有必要的依赖项。其中一个依赖项是poppler-utils。

到目前为止,我一直在使用 $ yum install poppler-utils 安装它。最近我意识到 Amazon Linux repo 上的版本已经很久没有更新了(0.26.5 与 ubuntu 上的最新版本是 20.08 - 6 年的版本差异)。

我当然可以在单台机器上构建和安装(在源代码上使用 make 和 make install)。出于 CI/CD 的目的,我需要一些可以快速安装和部署的东西(yum 包非常适合)。

如何准备好部署最新版本的 poppler-utils?

我探索过的一些想法:

  1. 尝试从具有最新版本 poppler-utils 的另一个存储库(非 amazon linux)安装。
  2. 自己构建一个 rpm 文件。从来没有自己建造过,所以这项任务看起来很艰巨。

寻找一些方向去追求。

【问题讨论】:

  • 如何使用已编译和设置的新版本 poppler-utils 创建自定义 AMI?\
  • 嗨@Marcin,这是个好主意。让我试试这个!
  • 让我知道进展如何。如果可行,我可以提供额外信息的答案。
  • @Marcin 基于 AMI 的解决方案对我有用。请提供答案,以便我接受。此外,构建 poppler 并不简单,因为它需要先构建 cmake 并安装一些其他软件包。也许 zethw 可以通过步骤提供另一个答案。
  • 谢谢。提供答案。您可以为 poppler 构建提出新问题,甚至可以自己回答以供将来参考。

标签: amazon-web-services yum poppler amazon-linux poppler-utils


【解决方案1】:

非常感谢@marcin 和@zethw 的回答。

我采用 AMI + build poppler 从头开始​​的方法。高级步骤是:

  1. 创建一个适合创建 AMI 的实例。就我而言,我在我的应用程序中使用了弹性 beantalk。因此,必须从 elasticbeanstalk AMI 创建实例

  2. 连接到该 AMI 并构建 poppler。你会注意到你需要在这个上做很多图书馆舞。但最后,请确保 $ pdftoppm --help 返回正确的输出(作为一种测试方式)。

  3. 从您在第 2 步中使用的实例创建一个 AMI。

这听起来很简单,但您必须处理一些问题:

  • 获取最新版本的 cmake 作为最新版本的 poppler 需要最新的 cmake。您需要构建它,因为 yum 的亚马逊仓库没有最新版本。
  • 在构建 poppler 时,cmake 命令会提示您缺少库。这可能因 Amazon Linux 1 到 2 以及您的设置而异。
  • 不要忘记确保 poppler 实用程序(例如 pdftoppm)在最后的路径中。

忠告

我想说@zethw 的回答从长远来看更具可持续性。或者,如果您有条件,可以考虑退出 Amazon Linux。

【讨论】:

  • 您能否获得最新版本的 Poppler 以在 Amazon Linux 2 上构建?感人的!仅供参考:我更进一步,并与 pdf2image github.com/Belval/pdf2image 一起工作,以进一步利用 Docker 方法,通过提交 PR 以添加命令行方式来调用 convert_from_path。它是 pdftoppm 和 pdftocairo 的包装器,将运行多线程。然后,您需要做的就是从 repo 中提取最新(或特定版本)的 Poppler Docker 映像,启动容器,并使用此脚本调用 docker exec -it。很干净。
  • @zethw 那太好了。可能是最好的方法。
【解决方案2】:

基于 cmets。

建议的解决方案是构建custom AMI:

您可以从现有 AMI 启动实例,自定义实例(例如,在实例上安装软件),然后将此更新后的配置保存为自定义 AMI。从这个新的自定义 AMI 启动的实例包括您在创建 AMI 时所做的自定义。

因此,AMI 使用当前版本的poppler-utils 创建,这确保从 AMI 启动的任何实例都将具有最新的 poppler。

【讨论】:

    【解决方案3】:

    我在这个问题上花了大约三天时间。事实证明,Amazon Linux 操作系统本质上是 CentOS7,看起来 0.26.5(2014 年 9 月)是 CentOS7 的最后一个可用版本,CentOS8 是 0.66.0(2018 年 6 月),CentOS8 Stream 是 20.11.0(2020 年 11 月)根据https://pkgs.org/download/poppler-utils 21.03 是最新的(2021 年 3 月)

    我尝试通过一堆http://www.linuxfromscratch.org 文章和许多先决条件来构建我自己的库版本,但没有成功。我一直发现的最大问题是我构建的版本没有被使用,而通过 yum 安装的版本是,所以有一堆我一直在尝试解决的版本依赖关系没有被使用认可。我不想和 yum 混在一起,把其他事情搞砸。

    所以我走上了 Docker 的道路……这是我知道我应该学习但一直没有学过的东西之一。这是完美的解决方案。我在 Installing Poppler utils of version 0.82 in docker 上构建了我的 docker,并将版本更新到了最新版本。

    构建 Dockerfile 后,创建一个 AMI,这样您就有了一个起点,而不必等待所有内容都下载并重新构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2019-03-07
      相关资源
      最近更新 更多