我正在尝试配置 apt-mirror,它对于 ubuntu 上游来说运行良好,但是当我将它用于 GitLab 之类的东西时,它会下载所有软件包版本。
例如,gitlab-ce 有 72GB,每个版本都在 300MB 以下。我怎样才能只保留最新的,甚至是最后的 1 或 2 个软件包,而不是 459 个?
答案1
APT Mirror 旨在镜像整个存储库仅来自mirror.list
条目。
简而言之,apt-mirror
如下所示:
从存储库获取索引文件并处理它们(与 相同的过程
apt update
)。如果本地不存在文件,则从收集的索引文件中下载文件。此过程中会保留文件夹结构(类似于
wget -c -x <url_file_array>
)。
有关如何apt-mirror
运作的详细信息以及确认无法部分镜像存储库以获取最新版本,你可以参考apt-mirror 的源代码(用 Perl 编写)。
那么,如何从大型存储库获取最新版本?
gitlab-ce
针对您的情况,我临时采用了以下解决方法(以Ubuntu 18.04 - Bionic 的存储库为例):
输入镜像的路径:
cd /path/to/mirroring
备份
sources.list
:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
打开并注释掉以下每一行
sources.list
:sudo nano /etc/apt/sources.list
添加所需的镜像存储库:
4.1. 添加此内容
sources.list
并退出文件:deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ bionic main
4.2. 添加 GPG:
curl -L https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey | sudo apt-key add -
更新索引文件:
sudo apt update
从添加的存储库中获取最新的包 URL 并将其写入文件:
sudo apt-get install '*' --allow-unauthenticated -y --print-uris | grep -o '\'http.*\' | tr "\'" " " > download-list
下载具有文件夹结构的 URL,由于
-c
选项的原因,它不会下载存在的文件:wget -i download-list -c -x
享受!!!
要恢复所有内容,只需
sources.list
用旧文件替换文件sources.list.bak
并执行以下操作:sudo apt update