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

问题描述

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

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

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

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

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

我探索的几个想法:

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

在追求的道路上寻找方向。

解决方法

我在这个问题上花了大约三天的时间。事实证明,Amazon Linux 操作系统本质上是 CentOS7,看起来 0.26.5(2014 年 9 月)是适用于 CentOS7、0.66.0(2018 年 6 月)适用于 CentOS8 的最后一个版本,以及适用于 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,这样您就有了一个起点,而不必等待所有内容下载并再次构建。

,

基于评论。

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

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

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

,

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

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

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

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

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

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

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

忠告

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...