使用yaourt和> makepkg-4.2.0在Docker中自动构建和安装来自AUR for Arch Linux的软件包

时间:2015-06-05 13:21:11

标签: docker archlinux

我在Docker-Container中使用Docker和Arch Linux。 介绍 makepkg-4.2.0 我的安装命令与yaourt一样被破坏,如下所述:https://github.com/archlinuxfr/yaourt/issues/67

问题是,yaourt应该以非root用户身份运行。但是,由于yaourt还希望在每个Case中安装Package,在构建它之后,需要root用户或具有Permission来安装Packages的用户。

所以我的问题是如何解决这个问题?我想在Docker中安装AUR中的Package,因为还没有正式的Package。

到目前为止,我使用的是Arch Linux,pacman和yaourt。

所以命令,

RUN yaourt -S --noconfirm aur/taskd

安装taskd,在makepkg-4.2.0之前工作:

使用新的makepkg版本构建,Docker失败并出现以下来自yaourt的错误:

makepkg: invalid option '--asroot'

如果我将用户更改为非root用户并尝试安装软件包,我会在自动构建中获取一个命令提示符,要求提供实际安装软件包的Root密码。

Password: su: Authentication information cannot be recovered
Password: su: Authentication information cannot be recovered
Password: su: Authentication information cannot be recovered
The command [/bin/sh -c yaourt -S --noconfirm aur/taskd] returned a non-zero code: 1

对于遍布两个Dockerfiles的许多offtopic Lines没有污染,Dockerfile的有趣部分看起来像:

FROM kaot/arch_linux_base:latest
MAINTAINER Kaot
RUN useradd --no-create-home --shell=/bin/false yaourt && usermod -L yaourt
RUN yaourt -S --noconfirm aur/taskd
ENTRYPOINT ["/controlcenter/controlcenter.sh"]
CMD ["cc:start"]

1 个答案:

答案 0 :(得分:2)

如果找到一个让yaourt只下载Info如何构建Package的解决方案,那么使用非root用户调用makepkg本身,然后使用root用户和pacman安装build Package。 Dockerfile的部分看起来像这样

RUN mkdir -p /tmp/Package/ && chown yaourt /tmp/Package
USER yaourt
RUN cd /tmp/Package && pwd && ls -al && yaourt --getpkgbuild aur/taskd && cd taskd && makepkg --pkg taskd 
USER root
RUN pacman -U --noconfirm /tmp/Package/taskd/taskd-1.1.0-1-x86_64.pkg.tar.xz

使用一些变量,可以实现进一步的增强,但在原理上这是有效的。