- 目录 -
Runsisi's Blog
不念过去 不畏将来
Alpine 上构建 apk 工具

以前构建出来的 Ceph apk 包都是直接拷贝到 Alpine 容器里进行安装测试,突然想到要放 web 服务器上进行一下测试,才发现完全不可行。

容器里 Ceph 使用的是放在本地局域网 web 服务器上的源,而其它依赖都是使用的是 Alpine 官方的 apk 源,下载 Ceph 时需要从本地局域网进行下载,而相关的依赖需要从 Alpine 官方下载,因此这里涉及到 HTTP 代理的设置,本来我以为设置上 http/https_proxy 以及 no_proxy 就万事大吉了,但不论怎么设置 no_proxy,apk update 获取 Ceph 源索引总是返回 403 错误,但是我从服务端日志里根本就没有看到有相应的 HTTP 请求,折腾一圈,最后通过 tcpdump 确认请求都转发到代理服务器了,看来问题出在 apk 本身。

通过阅读 apk 源代码,确实发现这是 apk 工具包含的 libfetch 源代码的问题,非常简单的一个修改(libfetch: fix no_proxy match),而上游也早就修改了该问题。

这里简单记录一下 apk 工具的构建过程:

# apk add alpine-sdk
# apk add openssl-dev
# apk add linux-headers
# apk add zlib-dev
# apk add lua5.3-dev
# apk add zlib-static
# apk add openssl-libs-static

# git clone https://github.com/alpinelinux/apk-tools.git
# cd apk-tools/
# make static

# ldd src/apk.static
        /lib/ld-musl-x86_64.so.1 (0x7f63e012e000)
# ldd src/apk
        /lib/ld-musl-x86_64.so.1 (0x7f3ada8f4000)
        libssl.so.1.1 => /lib/libssl.so.1.1 (0x7f3ada837000)
        libcrypto.so.1.1 => /lib/libcrypto.so.1.1 (0x7f3ada5bb000)
        libz.so.1 => /lib/libz.so.1 (0x7f3ada5a1000)
        libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f3ada8f4000)

其实主要是记录一下依赖包的名字:)

注意在容器内运行 gdb 需要加上相应的权限选项:

$ docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it centos:8

参考资料

How to use GDB within Docker Container

https://github.com/tonyOreglia/argument-counter/wiki/How-to-use-GDB-within-Docker-Container


最后修改于 2020-12-21