apt-cacher-ng не может импортировать из нового дистрибутива, т.е. bionic 18.04
Я запускаю apt-cacher-ng (acng) на сервере ubuntu 16.04 (рабочий стол) с медленным сетевым подключением. У меня есть ноутбук 18.04 и я использовал быстрое соединение для загрузки всех установленных пакетов, и rsync'd их для _import для acng. Затем я указываю ноутбуку на использование порта 3142 сервера в качестве прокси (и проверяю, что он действительно используется). это должно заполнить файлы индекса acng. однако, когда я запускаю импорт с сервера ( http://localhost:3142/acng-report.html), ни один из бионических файлов не импортируется. далее, похоже, что индексные файлы (Package.xz) никогда не сохраняются в acng dir (они появляются для более старых дистрибутивов, но не для бионических)
Что нужно сделать, чтобы импортировать 18.04 пакетов на 16.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 ГиБ) осталось позади
1 ответ
Я понял, как это сделать. Теоретически apt-cacher-ng может импортировать пакеты, размещенные в _import, но современные apt не загружают индексные файлы так, как распознает acng (по крайней мере, версия 0.9.1 в ubuntu 16.04), поэтому acng не может определить импорт и ничего не делает
Обходной путь - явный запрос файлов индекса, а затем запуск импорта с помощью веб-приложения.
# 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
не сейчас об этом). поиск по этому хешу:
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
знает использовать хеш вместо Packages.xz
URL