如何使用apt-mirror和mirrorkit创建本地软件源?

拥有一个本地存储库非常有用。我们可以使用rsync来创建一个存储库镜像,但这会下载所有的发布版本,包括旧版本,并且会包含可能不需要的架构文件。

apt-mirror允许选择性地选择存储库的部分内容。mirrorkit为apt-mirror提供了一个前端界面。

如何以最佳方式为Ubuntu存档的特定部分创建本地存储库镜像?

例如,我们可能希望包括以下内容:

  • Main,Restricted,Universe,Multiverse, 所有Ubuntu和Lubuntu,但排除其他衍生版本,如Kubuntu和Xubuntu。

  • 只包括AMD64和i386,但排除其他架构。

  • 只包括Trusty Tahr,但不包括Precise Penguin或Utopic Unicorn。

我们可能希望配置过程从本地镜像而不是主要存档中进行下载。

如何使用apt-mirrormirrorkit为所选的架构、版本或Ubuntu变体创建本地存储库?


排除Kubuntu?你是指排除Kubuntu的ISO镜像还是排除任何被Kubuntu使用的软件包? - muru
不包括Kubuntu和Xubuntu的ISO文件,例如。也许有很多(比如Precise Kubuntu ARM,Precise Kubuntu i386,Quantal Kubuntu ARM,Quantal Kubuntu i386...),如果没有这些ISO文件,初始镜像下载可能会更快完成。但是如果只是几个GB的大小,也许影响不大。 - user75798
1ISO镜像文件与软件包分开存放。因此,您可以像平常一样使用apt-mirror来镜像软件包仓库,并使用其他工具处理ISO镜像文件。这时候的问题在于找到适用于该工具(比如rsync)的合适排除过滤器。 - muru
你可以像平常一样使用apt-mirror。对不起,我不知道如何做到这一点。这正是我想要解释的内容。 - user75798
2个回答

软件仓库和 CD 仓库是两个独立的组成部分(它们甚至有单独的 Launchpad 页面:cdmirrorsarchivemirrors)。因此,镜像它们是两个不同的任务。另外,虽然各种版本在 CD 仓库中有不同的文件夹,但它们共享一个软件仓库。因此,您可以根据不同版本选择性地镜像图像,但无法镜像软件。对于软件仓库,您可以根据以下条件进行选择性镜像:
- 发行版(`trusty`、`precise` 等) - 架构(`amd64`、`i386` 等) - 软件包类型(二进制 [`deb`] 或源码 [`deb-src`]) - 渠道(`trusty`、`trusty-updates`、`trusty-backports` 等) - 部分(`main`、`multiverse` 等)

要镜像软件仓库,请使用apt-mirror

apt-mirror是使用/etc/apt/mirror.list进行配置的。它的格式与sources.list非常相似。该软件包安装的配置文件有一些注释掉的选项,列出了它们的默认值。如果您希望,可以取消注释并更改它们。

要镜像一个仓库,您需要像为sources.list添加一行到mirror.list中:

deb http://us.archive.ubuntu.com/ubuntu trusty main multiverse restricted universe

默认情况下,只会镜像主机的架构,所以如果你使用的是64位的Ubuntu系统,只会镜像amd64。你需要添加另一行代码,格式如下:
deb-i386 http://us.archive.ubuntu.com/ubuntu trusty main multiverse restricted universe

对于源代码包:
deb-src http://us.archive.ubuntu.com/ubuntu trusty main multiverse restricted universe

如果你正在寻找一个相对完整的镜像,以下是最低要求的配置(我还建议使用-updates频道):
deb http://us.archive.ubuntu.com/ubuntu trusty main multiverse restricted universe
deb http://us.archive.ubuntu.com/ubuntu trusty-security main multiverse restricted universe
deb-i386 http://us.archive.ubuntu.com/ubuntu trusty main multiverse restricted universe
deb-i386 http://us.archive.ubuntu.com/ubuntu trusty-security main multiverse restricted universe

最后,您需要添加一个clean line,以便过滤掉存储库中不再可用的软件包进行删除。
clean http://us.archive.ubuntu.com/ubuntu

假设你的变量是这样的(默认值):
set base_path    /var/spool/apt-mirror
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript $var_path/clean.sh

然后:
  • 存储库将被镜像到$mirror_path/parent-hostname/directory(例如/var/spool/apt-mirror/mirror/us.archive.ubuntu.com/ubuntu
  • clean.sh(这将是一组rm命令,用于删除过时的软件包和目录)将位于/var/spool/apt-mirror/var/clean.sh
  • 日志将保存在/var/spool/apt-mirror/var中。

apt-mirror软件包会安装一个cron作业(/etc/cron.d/apt-mirror),您应该编辑它以启用(取消注释包含/usr/bin/apt-mirror的行)。您还应该添加一个cron作业来运行clean.sh(我每周运行一次)。

当然,您应该将http://us.archive.ubuntu.com./ubuntu替换为您喜欢的镜像。


1真的是deb-amd64还是 deb arch=amd64?我只能在手册中找到后者 - Anwar
1@Anwar 前者是用于 sources.list 的,它具有类似但不完全相同的格式。请参阅 http://manpages.ubuntu.com/manpages/trusty/en/man1/apt-mirror.1.html,其中示例中包含了 deb-powerpc - muru
哦!我没有使用apt-mirror的经验。以为它是用于 sources.list 的。谢谢 - Anwar

我推荐apt-cacher给那些空间有限或者在自己国家面临过高互联网费用的人使用。
据说,apt-mirror需要至少15GB的空间来存储你想要的每个版本(32位/64位)的发行版。而apt-cacher只使用你已安装的软件包。
请阅读使用Apt-Mirror和Apt-Cacher创建本地Ubuntu仓库以获取更多详细信息和操作指南。