1

我有一台在 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 的 repo(非 amazon linux)安装。
  2. 自己构建一个 rpm 文件。从来没有自己建造过,所以这项任务看起来很艰巨。

寻找某个方向,走哪条路。

4

3 回答 3

1

我在这个问题上花了大约三天时间。事实证明,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 安装的版本是,所以有一堆我一直试图解决的版本依赖关系没有被使用认可。我不想惹百胜而搞砸其他一切。

所以我已经走上了 Docker 的道路……我知道我应该学习但从来没有学过的东西之一。这是完美的解决方案。我通过在 docker 中安装 0.82 版的 Poppler utils 构建了我的 docker,并将版本更新到了最新版本。

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

于 2021-03-23T01:03:59.793 回答
1

根据评论。

提出的解决方案是构建自定义 AMI

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

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

于 2021-03-23T09:23:08.617 回答
0

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

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

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

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

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

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

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

忠告

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

于 2021-03-23T09:40:10.870 回答