在 Alpine 上构建 .deb

在 Alpine 上构建 .deb

总体而言,我对 Linux 非常陌生,我正在尝试找到一种在 Alpine docker 镜像上构建 Debian 软件包的方法。这是迄今为止我可以让管道运行的最快速度,但不幸的是,当我尝试运行时,dpkg-deb --build出现以下错误:

03:22:44 dpkg-deb: building package 'x-sync' in 'x-sync_1.0.2.deb'.
03:22:44 tar: unrecognized option: format=gnu
03:22:44 BusyBox v1.27.2 (2018-01-29 15:48:57 GMT) multi-call binary.
03:22:44 
03:22:44 Usage: tar -[cxtZzJjahmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR] [FILE]...
03:22:44 
03:22:44 Create, extract, or list files from a tar file
03:22:44 
03:22:44 Operation:
03:22:44    c   Create
03:22:44    x   Extract
03:22:44    t   List
03:22:44    f   Name of TARFILE ('-' for stdin/out)
03:22:44    C   Change to DIR before operation
03:22:44    v   Verbose
03:22:44    Z   (De)compress using compress
03:22:44    z   (De)compress using gzip
03:22:44    J   (De)compress using xz
03:22:44    j   (De)compress using bzip2
03:22:44    a   (De)compress using lzma
03:22:44    O   Extract to stdout
03:22:44    h   Follow symlinks
03:22:44    m   Don't restore mtime
03:22:44    exclude File to exclude
03:22:44    X   File with names to exclude
03:22:44    T   File with names to include
03:22:44 dpkg-deb: error: subprocess tar -cf returned error exit status 1

我尝试对以下 Dockerfile 进行打包:

FROM alpine
RUN apk add --no-cache dpkg openjdk8

有什么方法可以在这个发行版上构建一个与其他发行版(例如我的 Ubuntu 开发环境)交叉兼容的 Debian 软件包吗?

答案1

构建 Debian 软件包的最佳环境始终是基于 Debian 的环境。虽然基于 Alpine 的容器因其体积小且设置时间快而很不错,但它们也带来了许多问题,其中两个特别麻烦:

  • 他们使用 Busybox,其中 Debian 软件包依赖于大多数工具的 GNU 变体(例如 tar正如您发现的那样);
  • 最重要的是,他们使用 musl,而 Debian 默认使用 glibc。

这两个可以解决,但当你这样做时,与最小的 Debian 容器(例如bitnami/minideb你提到的)相比,你已经失去了小型 Alpine 容器的优势。

请注意,如果您在开发和/或构建系统上运行 Debian 衍生版本,则可以完全跳过容器阶段,同时仍然使用包含的构建环境,方法是使用pbuilder。为了获得最大速度,请在 上安装 tmpfs /var/cache/pbuilder/build,然后使用以下命令运行构建eatmydatasbuildcowbuilder也值得研究,特别是如果您定期构建类似的软件包。

顺便说一句,dpkg-deb -b我不是使用 构建二进制包,而是高度推荐学习如何构建源码包;从文森特·伯纳特开始实用的 Debian 包装,这既美好又简单。

相关内容