web-dev-qa-db-ja.com

apt-mirrorがすべてのパッケージをダウンロードしないようにするにはどうすればよいですか

私はapt-mirrorを設定しようとしていますが、ubuntuアップストリームではうまく機能していますが、GitLabのようなものに使用すると、すべてのパッケージバージョンがダウンロードされます。

たとえば、gitlab-ceは72GBで、各バージョンは300MB未満です。 459ではなく、最新または最後の1つまたは2つのパッケージだけを保持するにはどうすればよいですか?

1
Jacob Evans

APTミラーは、[リポジトリ全体mirror.listエントリのみをミラーすることを目的としています。

apt-mirrorは次のように動作します:

  1. リポジトリからインデックスファイルを取得して処理します(apt updateと同じプロセス)。

  2. ローカルに存在しない場合は、収集されたインデックスファイルからファイルをダウンロードします。このプロセスでは、フォルダー構造が保持されます(wget -c -x <url_file_array>と同様)。

apt-mirrorの動作の詳細と最新バージョンのみを取得するためにリポジトリを部分的にミラーリングすることは不可能の詳細については、 The source code of apt -mirror (Perlで記述)。

だから、大規模なリポジトリから最新バージョンを取得するにはどうすればよいですか?

あなたの状況に対する私の一時的な回避策(たとえば、Ubuntu 18.04-Bionicのgitlab-ceリポジトリを使用):

  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. -cオプションのため、フォルダー構造でURLをダウンロードします。存在するファイルはダウンロードされません。

    wget -i download-list -c -x
    

    楽しい!!!

    すべてを元に戻すには、sources.listファイルを古いsources.list.bakに置き換えるだけです。

    Sudo apt update
    
2
Olimjon