【问题标题】:How to install perl Kafka::Connection on alpine image如何在高山映像上安装 perl Kafka::Connection
【发布时间】:2020-03-26 08:53:16
【问题描述】:

我有一个使用这个 Dockerfile 的 UBUNTU 映像:

FROM perl:5.14

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install -y libgd-dev

RUN perl -MCPAN -e 'install (Try::Tiny)'
RUN perl -MCPAN -e 'install (Kafka::Connection)'
RUN perl -MCPAN -e 'install (YAML)'
RUN perl -MCPAN -e 'install (GD::Simple)'
RUN perl -MCPAN -e 'install (GD::Graph)'
RUN perl -MCPAN -e 'install (JSON)'
RUN perl -MCPAN -e 'install (JSON::MaybeXS)'
RUN perl -MCPAN -e 'install (HTTP::Request)'
RUN perl -MCPAN -e 'install (HTTP::Response)'
RUN perl -MCPAN -e 'install (HTTP::Daemon)'

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

我正在尝试获得像这样更纤薄的高山版本:

FROM alpine:3.10.3

## alpine curl and wget aren't fully compatible, so we install them
## here. gnupg is needed for Module::Signature.
RUN apk update && apk upgrade
RUN apk add curl tar make gcc build-base wget gnupg

RUN mkdir -p /usr/src/perl

WORKDIR /usr/src/perl

## from perl; `true make test_harness` because 3 tests fail
## some flags from http://git.alpinelinux.org/cgit/aports/tree/main/perl/APKBUILD?id=19b23f225d6e4f25330e13144c7bf6c01e624656
RUN curl -SLO https://www.cpan.org/src/5.0/perl-5.30.0.tar.gz \
    && echo 'aa5620fb5a4ca125257ae3f8a7e5d05269388856 *perl-5.30.0.tar.gz' | sha1sum -c - \
    && tar --strip-components=1 -xzf perl-5.30.0.tar.gz -C /usr/src/perl \
    && rm perl-5.30.0.tar.gz \
    && ./Configure -des \
    -Duse64bitall \
    -Dcccdlflags='-fPIC' \
    -Dcccdlflags='-fPIC' \
    -Dccdlflags='-rdynamic' \
    -Dlocincpth=' ' \
    -Duselargefiles \
    -Dusethreads \
    -Duseshrplib \
    -Dd_semctl_semun \
    -Dusenm \
    && make libperl.so \
    && make -j$(nproc) \
    && true TEST_JOBS=$(nproc) make test_harness \
    && make install \
    && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \
    && chmod +x cpanm \
    && ./cpanm App::cpanminus \
    && rm -fr ./cpanm /root/.cpanm /usr/src/perl




## from tianon/perl
ENV PERL_CPANM_OPT --verbose --mirror https://cpan.metacpan.org --mirror-only
RUN cpanm Digest::SHA Module::Signature && rm -rf ~/.cpanm
ENV PERL_CPANM_OPT $PERL_CPANM_OPT --verify

RUN perl -MCPAN -e 'install (Try::Tiny)'
RUN perl -MCPAN -e 'install (Kafka::Connection)'
RUN perl -MCPAN -e 'install (YAML)'
RUN perl -MCPAN -e 'install (GD::Simple)'
RUN perl -MCPAN -e 'install (GD::Graph)'
RUN perl -MCPAN -e 'install (JSON)'
RUN perl -MCPAN -e 'install (JSON::MaybeXS)'
RUN perl -MCPAN -e 'install (HTTP::Request)'
RUN perl -MCPAN -e 'install (HTTP::Response)'
RUN perl -MCPAN -e 'install (HTTP::Daemon)'

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

我不断收到此错误

OS.c:18:10: fatal error: obstack.h: No such file or directory
 #include <obstack.h>    /* glibc's handy obstacks */

如何获取图像上 Kafka 的所有依赖项?

【问题讨论】:

  • 我撤消了对问题的最后更改,因为它现在是一个完全不同的问题,现有答案不再适合该问题。测试块问题请open a new question。您的文本仍然可用:revision 2 / source
  • @daxim 问题是关于在 alpine 上安装 perl Kafka。你的回答最终对我帮助很大!谢谢!

标签: perl apache-kafka alpine cpanm


【解决方案1】:

Alpine 不提供 glibc,obstack.h 不是 musl-dev 的一部分。

试试alpine-pkg-glibc

【讨论】:

  • 我尝试了你的建议,错误消失了,但我无法安装 Kafka 的依赖项。该错误与 cpan install Test::Block 失败有关
【解决方案2】:

您可以尝试通过安装edge/testing 存储库的新可用musl-obstack-dev 包来在Alpine 上获取obstack.h

apk add musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

请注意,edge/testing 包是最先进的,被认为是实验性的(与主要稳定包相反)。

虽然 Alpine (musl libc) 通常不兼容 glibc,但它确实在方便的头文件和库方面提供了轻量级的 glibc 兼容性,特别是通过 libc6-compat 包和上述包。

提示:使用 Alpine 出色的包搜索功能来查找丢失的文件。 Alpine 活泼好动,经常看到新的包裹。大多数情况下,您会发现丢失的文件在 apk 包中可用。 obstack.h 包内容搜索结果:
https://pkgs.alpinelinux.org/contents?file=obstack.h&path=&name=&branch=edge

【讨论】:

  • 我尝试了你的建议,错误消失了,但我无法安装 Kafka 的依赖项。该错误与 cpan install Test::Block 失败有关
  • 混合 Alpine stable(OP 使用 3.10)和测试是个好主意吗?在我知道的其他三个发行版中,这可能会破坏系统。
  • @daxim 在这种特殊情况下,这样做没有害处,因为标题是“新的”并且不会干扰其他任何内容。就像其他包管理器一样,apk 在存在依赖冲突时会拒绝安装包,所以它可以是简单的试错。
【解决方案3】:

我最终在 Github 上搜索了一个 newer alpine perl image,并在得到这个 Dockerfile 时得到了 valino's answer 的极大帮助:

FROM alpine:3.10.3

## alpine curl and wget aren't fully compatible, so we install them
## here. gnupg is needed for Module::Signature.
RUN apk update && apk upgrade
RUN apk add --no-cache curl tar make gcc build-base wget gnupg ca-certificates g++ git gd-dev
RUN apk add --no-cache zlib zlib-dev
RUN apk add --no-cache perl perl-dev

RUN curl -L <check the link above "newer alpine perl image" for this line it was rejected> > /bin/cpanm && chmod +x /bin/cpanm
RUN cpanm App::cpm

WORKDIR /usr

RUN cpm install Try::Tiny
RUN cpm install YAML
RUN cpm install JSON
RUN cpm install JSON::MaybeXS
RUN cpm install HTTP::Request
RUN cpm install HTTP::Response
RUN cpm install HTTP::Daemon

RUN cpm install GD::Simple
RUN cpm install GD::Graph
RUN cpm install Data::HexDump::Range
RUN cpm install Proc::Daemon
RUN cpm install Test::Block
RUN cpm install Text::Colorizer
RUN cpm install Gzip::Faster

ENV PERL5LIB=/usr/local/lib/perl5
ENV PATH=/usr/local/bin:$PATH

RUN apk add --no-cache musl-obstack-dev --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing

RUN cpm install Proc::ProcessTable
RUN cpm install Kafka::Connection

COPY run.sh /run.sh

RUN chmod +x "/run.sh"

RUN mkdir -p /code_path

WORKDIR /code_path

CMD ["/run.sh"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2020-08-03
    • 2019-10-02
    • 2022-01-07
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多