首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amd64 Xenial 16.04存储库的镜像子集*没有* Ubuntu主机

amd64 Xenial 16.04存储库的镜像子集*没有* Ubuntu主机
EN

Ask Ubuntu用户
提问于 2018-10-10 14:05:47
回答 1查看 686关注 0票数 1

我试图通过镜像Ubuntu软件存储库来保持离线计算机(16.04 amd64膝上型计算机)的更新。不幸的是,我有一些我无法控制的制约因素:

  1. 主机(连接到互联网)是CentOS 7,我没有apt-mirrordebmirror或管理权限。我有wgetrsync,和编译了lftp
  2. 虽然我有rsync,但rsyncd.service没有运行。$ systemctl列表-单元-文件\ grep rsync .rsyncd.service禁用..。因此,我甚至不能确定我是否可以使用Rsync镜像文档的指令使用rsync,根据这个答案的说法。
  3. 便携式驱动器只有1TB的~850 1TB免费。我不需要来自repos的任何源代码,只需要二进制文件,但即使是这样,我甚至有足够的空间吗?
  4. 缓慢的网络。不是一种约束,而是一种烦恼。我有能力让这个下载在一个周末或它需要的时间,但更喜欢支持并行下载。

我试过的是:

  1. rsync -a --bwlimit=128 rsync://archive.ubuntu.com/ubuntu /media/mirror/ubuntu失败,其错误与这个答案中所示的错误相同。我不能在没有管理员的情况下启动rsynd.service,所以我认为这是不成功的。
  2. 天真的wget --recursive http://se.archive.ubuntu.com/ubuntu/。这牵扯了太多的东西,而且速度相当慢。不确定有什么方法过滤掉我不需要的文件,或者做任何并行下载。
  3. 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工具来实现这一点,所以我不太关心这个问题。我只是想得到一些关于如何只下载与我的机器相关的软件包的建议。

EN

回答 1

Ask Ubuntu用户

发布于 2018-10-12 21:23:08

我意识到,采用加法而不是减法可能更有意义;也就是说,获取我需要的所有文件/包的列表,然后只下载这些文件/包(而不是尝试过滤所有我不想要的文件/包)。

包清单存储在Packages.gz中,所以我编写了一个脚本来下载我想要的所有压缩包清单,从清单中提取包名,将这个列表组合成一个lftp脚本,然后启动lftp

我认为这至少是足够的,但我也同步了一些其他文件夹与一些似乎很重要的元数据。

代码语言:javascript
复制
#!/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一起执行任何操作,因为它只得到一个文件。

周末运行脚本,等我回来后再测试。将更新答案和结果。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1082624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档