pdftk_将PDFtk装回容器中,重获新生

pdftk

一位同事最近告诉我他最喜欢的实用工具之一PDFtk 。 除其他事项外,它使您可以合并,拆分和合并具有或不具有加密功能的PDF文档。 您可以在此Opensource.com文章中了解有关它的更多信息。

不幸的是,由于构建要求,PDFtk上次打包在Fedora 20中。 尽管有各种替代方法可用,但您可能仍想使用PDFtk。 幸运的是,有一个简单的解决方案:只需将其包装在容器中,然后在更新的Fedora版本上运行即可。

我没有进行彻底的研究,而是进行了一些快速的研究,发现了一个带有README和Dockerfile的GitHub存储库来构建这样的容器。

首先,通过安装,启用和启动Docker服务,确保已配置Docker环境:


   
   
$ sudo dnf install -y docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ sudo systemctl status docker

README文件显示了如何定义别名来运行容器:

 # alias pdftk='docker run -it --privileged -v $PWD:/workdir -w /workdir/ /pdftk' 

请注意,-- --privileged选项以根用户--privileged运行容器。 尽管这将允许容器访问我们正在使用的文件(使用-v选项),但也会导致新文件归root拥有。 但是,以根用户身份运行容器不是最佳的安全实践。 在开始之前,请按如下所示修改Docker构建配置:


   
   
$ cat Dockerfile
# Container build for pdftk (last packaged in Fedora 20)

FROM       fedora:20
MAINTAINER crempel@redhat.com

# Update and install pdftk

RUN yum update -y &&            \
    yum install -y pdftk &&     \
    yum clean all

# Working directory

WORKDIR /workdir

# Set pdftk as our entry point

ENTRYPOINT ["/usr/bin/pdftk"]

CMD ["--help"]

首先从拉下Fedora 20官方图像开始。 如果需要,可以将MAINTAINER电子邮件地址更改为您自己的电子邮件地址。 接下来,它将更新所有软件包,安装PDFtk,并删除缓存的文件。 将这三个单独的命令放在单个RUN命令上,只会在容器中创建一个附加层,而不是三个。

WORKDIR关键字定义将在其中创建新文件的临时工作目录。

最后,它将PDFtk二进制文件设置为容器的入口点,如果没有参数传递给容器,则CMD提供--help选项。

您现在可以使用修改后的Dockerfile构建容器,如下所示:

 $ sudo docker build -t fedora/pdftk . 

并检查新图像:


   
   
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
fedora/pdftk        latest              f2eaa35d31c8        3 seconds ago       595 MB
docker.io/fedora    20                  ba74bddb630e        20 months ago       291 MB

要以与独立二进制文件相同的方式运行PDFtk容器,请使用以下包装器脚本:


   
   
$ cat ~/bin/pdftk
#!/bin/bash

# Run the pdftk container and pass all arguments to this script to the container:
#
#       --rm remove instantiated container after execution
#        -u  run with current UID/GID to give new files correct ownership
#        -v  attach current working directory to /workdir inside the container
#            and modify SELinux security context ("z") to allow container access to files

sudo docker run                 \
        --rm                    \
         -u $(id -u):$(id -g)   \
         -v $PWD:/workdir:z     \
        fedora/pdftk "$@"

# Files will now have SELinux type container_file_t so we need to restore context:

restorecon $PWD/*.pdf

exit

该脚本不使用--privileged选项以根用户身份运行容器,而是传递您的唯一标识符(UID)和组标识符(GID),从而使新文件具有正确的所有者和组。 您当前的工作目录映射到容器内的/workdir ,并且在内部目录后附加:z可以更改SELinux上下文,以便容器可以访问您的当前工​​作目录。 当然,这假定您已启用SELinux。 如果禁用SELinux, 将使Dan Walsh伤心 ; 丹是个好人,请不要这样做。

容器终止后,将SELinux上下文从container_file_t恢复到user_home_t (假设您位于主文件夹结构中)。 虽然您仍然可以使用新的上下文访问文件,但是使用restorecon可以使事情整洁。

建立容器并安装包装脚本后,您现在可以像以前一样运行PDFtk。

例如:

 $ pdftk A=pdf1.pdf B=pdf2.pdf cat A B output pdf12.pdf 

使较旧的应用程序恢复活力是容器的一个很好的用例。 使用容器还解决了哪些其他问题? 在下面的评论部分让我知道。

翻译自: https://opensource.com/article/18/6/pdf-merge-tool

pdftk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值