我有一台运行在AWS Linux上的服务器。该应用程序使用poppler utils。
服务器集成了CI。因此,在部署应用程序之前,所有必要的依赖项都已安装。其中一个依赖项是poppler-utils
。
到目前为止,我一直在使用$ yum install poppler-utils
安装它。最近我意识到亚马逊Linux repo上的版本已经很久没有更新了(0.26.5与ubuntu上的最新版本相差20.08-6年(。
我当然可以在一台机器上构建和安装(在源代码上使用make
和make install
(。出于CI/CD的目的,我需要一些快速安装和部署的东西(百胜软件包非常适合(。
如何准备部署最新版本的poppler utils?
我探索过的几个想法:
- 尝试从另一个具有最新版本poppler utils的repo(非amazon linux(进行安装
- 自己构建一个rpm文件。我自己从来没有建造过,所以任务看起来很艰巨
寻找前进的方向。
基于注释。
提出的解决方案是构建自定义AMI:
您可以从现有AMI启动实例,自定义实例(例如,在实例上安装软件(,然后将此更新的配置保存为自定义AMI。从这个新的自定义AMI启动的实例包括您在创建AMI时所做的自定义。
因此,AMI使用当前版本的poppler utils创建,这确保从AMI启动的任何实例都将具有最新的poppler。
我在这个问题上花了大约三天的时间。事实证明,亚马逊Linux操作系统本质上是CentOS7,看起来0.26.5(2014年9月(是CentOS 7可用的最后一个版本,0.66.0(2018年6月(适用于CentOS8,20.11.0(2020年11月(适用于CentOS8Streamhttps://pkgs.org/download/poppler-utils21.03是最新的(2021年3月(
我试图通过一堆http://www.linuxfromscratch.org文章和许多前提条件。我发现的最大问题是,我构建的版本没有被使用,而通过百胜安装的版本是,所以我一直在努力解决一些无法识别的版本依赖关系。我不想搞砸百胜,把其他一切都搞砸。
所以我走上了Docker的道路。。。其中一件事我知道我应该学会,但从来没有抽出时间去做。这是一个完美的解决方案。我在docker中安装了0.82版本的Poppler utils,并将其更新为最新版本。
构建Dockerfile后,创建一个AMI,这样您就有了一个起点,不必等待所有内容都下载并重新构建。
非常感谢@marcin和@zethw的回答。
我采用了AMI+从头开始构建poppler
的方法。高级步骤包括:
-
创建一个适合创建AMI的实例。在我的案例中,我的应用程序使用了弹性豆茎。因此,该实例必须由弹性柄AMI 创建
-
连接到那个AMI并构建
poppler
。你会注意到你需要在这首歌上跳很多图书馆舞。但最终,确保$ pdftoppm --help
返回正确的输出(作为一种测试方式(。 -
从步骤2中使用的实例创建一个AMI。
这听起来很简单,但你必须处理一些问题:
- 获取最新版本的cmake作为poppler的最新版本需要最新的cmake。您需要构建它,因为百胜的amazon repo没有最新版本
- 在构建
poppler
时,cmake命令会提示您缺少库。这可能因Amazon Linux 1到2以及您的设置而异 - 不要忘记确保poppler utils(例如pdftoppm(在最后处于路径中
忠告
从长远来看,@zethw的回答更具可持续性。或者,如果你有奢侈的话,可以考虑离开亚马逊Linux。