如何防止 apt-mirror 下载所有软件包

如何防止 apt-mirror 下载所有软件包

我正在尝试配置 apt-mirror,它对于 ubuntu 上游来说运行良好,但是当我将它用于 GitLab 之类的东西时,它会下载所有软件包版本。

例如,gitlab-ce 有 72GB,每个版本都在 300MB 以下。我怎样才能只保留最新的,甚至是最后的 1 或 2 个软件包,而不是 459 个?

答案1

APT Mirror 旨在镜像整个存储库仅来自mirror.list条目。

简而言之,apt-mirror如下所示:

  1. 从存储库获取索引文件并处理它们(与 相同的过程apt update)。

  2. 如果本地不存在文件,则从收集的索引文件中下载文件。此过程中会保留文件夹结构(类似于wget -c -x <url_file_array>)。

有关如何apt-mirror运作的详细信息以及确认无法部分镜像存储库以获取最新版本,你可以参考apt-mirror 的源代码(用 Perl 编写)。

那么,如何从大型存储库获取最新版本?

gitlab-ce针对您的情况,我临时采用了以下解决方法(以Ubuntu 18.04 - Bionic 的存储库为例):

  1. 输入镜像的路径:

    cd /path/to/mirroring
    
  2. 备份sources.list

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
  3. 打开并注释掉以下每一行sources.list

    sudo nano /etc/apt/sources.list
    
  4. 添加所需的镜像存储库:

    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 -
    
  5. 更新索引文件:

    sudo apt update
    
  6. 从添加的存储库中获取最新的包 URL 并将其写入文件:

    sudo apt-get install '*' --allow-unauthenticated -y --print-uris | grep -o '\'http.*\' | tr "\'" " " > download-list
    
  7. 下载具有文件夹结构的 URL,由于-c选项的原因,它不会下载存在的文件:

    wget -i download-list -c -x
    

    享受!!!

    要恢复所有内容,只需sources.list用旧文件替换文件sources.list.bak并执行以下操作:

    sudo apt update
    

相关内容