如果您想镜像 kernel.org 的全部或部分 git 仓库,请使用我们为此目的编写的工具,名为 grokmirror。Grokmirror 是一个 git 感知的工具,它将创建 kernel.org 仓库的完整镜像,并使其自动保持更新,无需您进一步的参与。
Grokmirror 的工作原理是跟踪通过下载和比较主清单文件来更新的仓库。只有当服务器上的文件更新时才会下载此文件,并且只有更改过的仓库才会通过 "git remote update" 进行更新。
您可以通过阅读 README 文件来了解更多关于 grokmirror 的信息。
获取 grokmirror
如果您的发行版尚未打包 grokmirror,您可以从 git 仓库获取它
git clone git://git.kernel.org/pub/scm/utils/grokmirror/grokmirror.git
除了 git 之外,您还需要在您的镜像服务器上安装以下 python 依赖项
设置 kernel.org 镜像
建议您创建一个专用的 "mirror" 用户,该用户将拥有所有内容并运行所有 cron 作业。通常不建议以用户 "root" 的身份运行此操作。
默认的 repos.conf 已经为 kernel.org 预先配置好了。我们在这里重现最小配置
[kernel.org] site = git://git.kernel.org manifest = http://git.kernel.org/manifest.js.gz default_owner = Grokmirror User # # Where are we going to put the mirror on our disk? toplevel = /var/lib/git/mirror # # Where do we store our own manifest? Usually in the toplevel. mymanifest = /var/lib/git/mirror/manifest.js.gz # # Where do we put the logs? log = /var/log/mirror/kernelorg.log # # Log level can be "info" or "debug" loglevel = info # # To prevent multiple grok-pull instances from running at the same # time, we first obtain an exclusive lock. lock = /var/lock/mirror/kernelorg.lock # # Use shell-globbing to list the repositories you would like to mirror. # If you want to mirror everything, just say "*". Separate multiple entries # with newline plus tab. Examples: # # mirror everything: #include = * # # mirror just the main kernel sources: #include = /pub/scm/linux/kernel/git/torvalds/linux.git # /pub/scm/linux/kernel/git/stable/linux-stable.git # /pub/scm/linux/kernel/git/next/linux-next.git # # mirror just git: #include = /pub/scm/git/* include = * # # This is processed after the include. If you want to exclude some specific # entries from an all-inclusive globbing above. E.g., to exclude all # linux-2.4 git sources: #exclude = */linux-2.4* exclude =
将此配置文件安装到您的环境中合理的任何位置。您需要确保以下目录(或您将其更改为的任何目录)可由 "mirror" 用户写入
- /var/lib/git/mirror
- /var/log/mirror
- /var/lock/mirror
镜像 kernel.org git 仓库
现在您需要做的就是添加一个 cronjob,它将检查 kernel.org 镜像是否有更新。以下条目在/etc/cron.d/grokmirror.cron将每 5 分钟检查一次镜像
# Run grok-pull every 5 minutes as "mirror" user */5 * * * * mirror /usr/bin/grok-pull -p -c /etc/grokmirror/repos.conf
(您需要相应地调整 grok-pull 命令和 repos.conf 的路径以反映您的环境。)
初始运行将需要几个小时才能完成,因为它需要下载大约 50 GB 的数据。
镜像仓库的子集
如果您只对携带一部分 git 仓库而不是全部感兴趣,欢迎您调整include和exclude参数。