如何为亚马逊编译准备部署最新版本的 `poppler-utils` Linux

How to compile ready to deploy latest version of `poppler-utils` for Amazon Linux

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

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

直到现在我一直在使用 $ yum install poppler-utils 安装它。最近我意识到亚马逊 Linux 仓库上的版本已经很久没有更新了(0.26.5 与 ubuntu 上的最新版本是 20.08 - 6 年的版本差异)。

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

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

我探索过的几个想法:

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

正在寻找要走的方向。

我在这个问题上花了大约三天时间。事实证明,Amazon Linux OS 本质上是 CentOS7,看起来 0.26.5(2014 年 9 月)是 CentOS7 可用的最后一个版本,0.66 CentOS8 为 .0(2018 年 6 月),CentOS8 为 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,并将版本更新到最新。

构建 Docker 文件后,创建一个 AMI,这样您就有一个起点,而不必等待所有内容下载并再次构建。

根据评论。

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

You can launch an instance from an existing AMI, customize the instance (for example, install software on the instance), and then save this updated configuration as a custom AMI. Instances launched from this new custom AMI include the customizations that you made when you created the AMI.

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

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

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

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

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

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

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

  • 获取最新版本的 cmake 作为最新版本的 poppler 需要最新的 cmake。您需要构建它,因为 yum 的亚马逊存储库没有最新版本。
  • 在构建 poppler 时,cmake 命令会提示您缺少库。这可能因亚马逊 Linux 1 到 2 和您的设置而异。
  • 不要忘记确保 poppler utils(例如 pdftopm)在路径的末尾。

忠告

我想说 @zethw 的回答从长远来看更可持续。或者,如果你有钱,可以考虑搬出亚马逊 Linux。