apt-cacher-ng 无法从新发行版(即 bionic 18.04)导入

apt-cacher-ng 无法从新发行版(即 bionic 18.04)导入

我在网络连接较慢的 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方式

相关内容