我在网络连接较慢的 ubuntu 16.04 服务器(桌面)上运行 apt-cacher-ng (acng)。我有一台 18.04 笔记本电脑,使用快速连接下载所有已安装的软件包,并将它们 rsync 到 acng 的 _import。然后我让笔记本电脑 apt 使用服务器端口 3142 作为代理(并验证它确实被使用)。这应该会填充 acng 索引文件。但是,当我从服务器触发导入时(http://本地主机:3142/acng-report.html), 没有导入任何 bionic 文件。此外,索引文件(Package.xz)似乎从未存储在 acng 目录中(它们出现在较旧的发行版中,但不出现在 bionic 中)
在 16.04 acng 上导入 18.04 包需要做什么?如何在笔记本电脑上重新创建索引文件而不显示在 acng 缓存中?
# on laptop
echo 'Acquire::http { Proxy "http://desktop:3142"; };' | sudo tee /etc/apt/apt.conf.d/01proxy
sudo rm /var/cache/apt/*.bin
sudo rm /var/lib/apt/lists/*
sudo apt-get update
导入期间未发现任何匹配,底部显示:
剩余 4908 个文件(2.1 GiB)
答案1
我最终弄清楚了如何做到这一点。apt-cacher-ng 理论上可以导入 _import 中的包,但现代 apt 似乎无法以 acng(至少是 ubuntu 16.04 中的 0.9.1 版本)识别的方式下载索引文件,因此 acng 无法识别导入,因此不执行任何操作
解决方法是明确请求索引文件,然后使用 webapp 触发导入
# for bionic, with myhost as the acng host:
base="http://us.archive.ubuntu.com/ubuntu/dists"
for kk in bionic{,-updates,-backports}; do
for jj in amd64 i386; do
for ii in main multiverse restricted universe; do
url="$base/$kk/$ii/binary-$jj/Packages.xz";
echo $url;
curl -x myhost:3142 $url > /dev/null;
done;
done;
done
# then trigger the import
此时,所有内容均已成功导入。我使用各种工具来追踪此问题,如果您尝试从其他存储库导入,这些工具可能会很有用:
sudo strace -s 222 -v -y -yy -o ~/apt.log apt-get update
sudo ngrep -d any -vv -w byline outbound and not dst myhost or dst port 3142 > ~/apt2.log 2>&1
# strace output at the point of printing the package file
read(7<pipe:[341008]>, "200 URI Start...\nURI: http://us.archive.ubuntu.com/ubuntu/dists/bionic/universe/binary-amd64/by-hash/SHA256/39ec12bac1f788ae649d32c138898d49fdec15eee020a9c72ae92a622fb662a0\nSize:"..., 64000) = 232
write(1</dev/pts/4>, "Get:8 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [8,570 kB]\n", 84) = 84
stat("/var/lib/apt/lists/partial/us.archive.ubuntu.com_ubuntu_dists_bionic_universe_binary-amd64_Packages.xz", ...) = 0
# the ngrep output showed the same hash
因此,它不是Package.xz
直接下载文件,而是apt
使用哈希值(显然acng
现在还不知道)。grepping 这个哈希值:
sudo grep -r 39ec12ba... /var/cache/apt* /var/lib/apt*
/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_bionic_InRelease
39ec12ba... 8569560 universe/binary-amd64/Packages.xz
这就是apt
知道使用哈希而不是 URL 的Packages.xz
方式