以前构建出来的 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 工具的构建过程:
1 | # apk add alpine-sdk |
其实主要是记录一下依赖包的名字:)
注意在容器内运行 gdb 需要加上相应的权限选项:
1 | $ 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
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.