我试图通过镜像Ubuntu软件存储库来保持离线计算机(16.04 amd64膝上型计算机)的更新。不幸的是,我有一些我无法控制的制约因素:
apt-mirror、debmirror或管理权限。我有wget,rsync,和编译了lftprsync,但rsyncd.service没有运行。$ systemctl列表-单元-文件\ grep rsync .rsyncd.service禁用..。因此,我甚至不能确定我是否可以使用Rsync镜像文档的指令使用rsync,根据这个答案的说法。我试过的是:
rsync -a --bwlimit=128 rsync://archive.ubuntu.com/ubuntu /media/mirror/ubuntu失败,其错误与这个答案中所示的错误相同。我不能在没有管理员的情况下启动rsynd.service,所以我认为这是不成功的。wget --recursive http://se.archive.ubuntu.com/ubuntu/。这牵扯了太多的东西,而且速度相当慢。不确定有什么方法过滤掉我不需要的文件,或者做任何并行下载。lftp。我认为这是目前最有希望的。例如:$ lftp http://mirror.math.princeton.edu/pub/ubuntu/ cd ok,cwd=/pub/ubuntulftpmirror.math.princeton.edu:/pub/ubuntu>镜像-n -parallel=10工作得很好,但当然也会带来所有东西。我可以用--exclude-globs排除任何我想要的东西(例如,--exclude-glob "*trusty*/" --exclude-glob "*artful*/" --exclude-glob "*bionic*/" --exclude-glob "*precise*/" --exclude-glob "*.tar.gz"),但是我应该排除什么来减少大小,同时仍然获得内容来构建一个工作的存储库。我知道,在我完成了所有的包之后,我将不得不通过使用dpkg-scanpackages或其他类似的东西来使它成为一个有效的回购。我可以在离线笔记本电脑上使用Ubuntu/Debian工具来实现这一点,所以我不太关心这个问题。我只是想得到一些关于如何只下载与我的机器相关的软件包的建议。
发布于 2018-10-12 21:23:08
我意识到,采用加法而不是减法可能更有意义;也就是说,获取我需要的所有文件/包的列表,然后只下载这些文件/包(而不是尝试过滤所有我不想要的文件/包)。
包清单存储在Packages.gz中,所以我编写了一个脚本来下载我想要的所有压缩包清单,从清单中提取包名,将这个列表组合成一个lftp脚本,然后启动lftp。
我认为这至少是足够的,但我也同步了一些其他文件夹与一些似乎很重要的元数据。
#!/bin/sh
remote="http://mirror.math.princeton.edu"
dists=( xenial xenial-security xenial-updates)
repos=( main restricted universe multiverse)
package_lists=()
printf "open %s \ncd /pub/ubuntu/\n" "$remote" > sync-mirror.lftp
echo "mirror -n -v -O ubuntu/indices -f indices/md5sums.gz" >> sync-mirror.lftp
for dist in "${dists[@]}"; do
for repo in "${repos[@]}"; do
pkg_lists+=("$remote/pub/ubuntu/dists/$dist/$repo")
echo "mirror -n -v --parallel=10 -O ubuntu/indices -f indices/override.$dist.$repo" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/binary-amd64" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/dep11" >> sync-mirror.lftp
echo "mirror -n -v --parallel=10 -O ubuntu/dists/$dist/$repo -F dists/$dist/$repo/i18n" >> sync-mirror.lftp
done
done
for pkg_list in "${pkg_lists[@]}"; do
curl "$pkg_list/binary-amd64/Packages.gz" | \
gunzip | \
grep Filename | \
sed 's|Filename: \(.*\)|mirror -n -v --parallel=10 -O ubuntu/\1 -f \1 |g' >> sync-mirror.lftp
done
printf "\n exit\n" >> sync-mirror.lftp
lftp -f sync-mirror.lftp我只想给mirror提供一个文件列表,并告诉它并行下载,但我还没有找到这样的方法。我认为,由于所有对mirror的单独调用,当前的方法花费的时间比应该的要长。此外,我不确定--parallel标志是否与-f一起执行任何操作,因为它只得到一个文件。
周末运行脚本,等我回来后再测试。将更新答案和结果。
https://askubuntu.com/questions/1082624
复制相似问题