问题
apt-get
命令(在 Debian 上)无法通过apt-cacher-ng
代理(安装在 Centos 上)访问存储库。
环境
# /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
$ yum -q info apt-cacher-ng.x86_64
Installed Packages
Name : apt-cacher-ng
Arch : x86_64
Version : 3.1
Release : 4.el7
...
From repo : epel
...
Debian 是 7.11
细节
tcpdump
apt-cacher-ng
在 Centos 上显示to (single)apt-get
的请求没有任何答复:
# tcpdump -i eno1 -nn port 3142
...
15:05:17.528378 IP 10.XX.XX.XX.38562 > 10.YY.YY.YY.3142: Flags [S], seq 2752129391, win 29200, options [mss 1460,sackOK,TS val 85570664 ecr 0,nop,wscale 4], length 0
strace
在 Centows 上显示apt-cacher-ng
挂在select()
系统调用上:
...
open("/dev/null", O_RDWR) = 6
fstat(6, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
dup2(6, 0) = 0
dup2(6, 1) = 1
dup2(6, 2) = 2
close(6) = 0
select(6, [5], [], NULL, NULL
粘贴的完整痕迹:https://paste.ee/p/lLtS8#s=0
strace 对侦听 3142 端口上的传入数据包没有反应。
编辑
日志文件中有单个字符串:
Tue Oct 2 14:18:15 2018|Not creating Unix Domain Socket, fifo_path not specified
但我不知道它什么时候出现(发射次数远不止一次)。
编辑2
客户端配置/etc/apt/apt.conf.d/00aptproxy
文件:
Acquire::http::Proxy "http://10.XX.XX.XX:3142";
SELinux 处于宽容模式。
防火墙有一个规则:
-A INPUT -p udp -m udp --dport 3142 -m conntrack --ctstate NEW -j ACCEPT
编辑3
当前acng的配置:
# grep -Ev "^$|^#" /etc/apt-cacher-ng/acng.conf
CacheDir: /var/cache/apt-cacher-ng
LogDir: /var/log/apt-cacher-ng
SupportDir: @LIBDIR@
Port:3142
BindAddress:0.0.0.0
ReportPage: acng-report.html
VerboseLog: 1
ForeGround: 1
ExThreshold: 4
Debug: 7
LocalDirs: acng-doc @DOCDIR@
UseWrap: 0
Sic(!) 内部 WebUI 可用于curl 127.0.0.1:3142
,但不能从客户端 ( curl 10.XX.XX.XX:3142
)
编辑4
# cat /sys/class/net/eno1/statistics/rx_dropped
0
dropwatch -l kas
也没有显示任何掉落(当我在客户端上运行时apt-cacher-ng
)apt-get update
。
如何正确跟踪 TCP/IP 堆栈?谷歌说这两种方法就足够了..(ifconfig
并且netstat
在存储库中不可用并且ethtool
不支持-S
标志)
现在我不知道下一步该从哪里挖来解决这个问题。
我不明白fd6
( /dev/null
) 的监视是否是真正的问题以及为什么进程需要克隆这个 fd..
有人建议我还可以检查哪些内容来找到根本原因或提示解决方法吗?