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

Jac*_*ans 2 package-management mirrors apt-mirror

我正在尝试配置 apt-mirror,它在 ubuntu 上游工作正常,但是当我将它用于 GitLab 之类的东西时,它会下载所有软件包版本。

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

Oli*_*jon 5

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

几句话就apt-mirror可以实现这样的效果:

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

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

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

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

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

  1. 输入镜像路径:

    cd /path/to/mirroring
    
    Run Code Online (Sandbox Code Playgroud)
  2. 备份sources.list

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
    Run Code Online (Sandbox Code Playgroud)
  3. 打开并注释其中的每一行sources.list

    sudo nano /etc/apt/sources.list
    
    Run Code Online (Sandbox Code Playgroud)
  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 -
    
    Run Code Online (Sandbox Code Playgroud)
  5. 更新索引文件:

    sudo apt update
    
    Run Code Online (Sandbox Code Playgroud)
  6. 从添加的存储库中获取最新的包 url 并将其写入文件:

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

    wget -i download-list -c -x
    
    Run Code Online (Sandbox Code Playgroud)

    享受!!!

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

    sudo apt update
    
    Run Code Online (Sandbox Code Playgroud)