web-dev-qa-db-ja.com

特定のリポジトリのみのapt-get更新

PPAを追加し、そのコンテンツの一部をインストールする場合、apt-get updateを使用してすべてのaptリストを再更新するのは非常に面倒です。

代わりに、特定のリポジトリのコンテンツのみを同期することは可能ですか?

108
Treviño

はい、apt-getはそれを行うことができ、素敵な方法で行うことができます。

  1. 次を~/.bash_funcsに追加します

    update-repo() {
        for source in "$@"; do
            Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \
            -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"    
        done
    }
    
  2. 次を~/.bashrcに追加します

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. 次を~/.bash_completionに追加します

    # Debian user-defined completion                             -*- Shell-script -*-
    
    _ppa_lists(){
        local cur
        _init_completion || return
    
        COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \
    -exec basename {} \; 2> /dev/null ) )
        return 0
    } &&
    complete -F _ppa_lists update-repo
    
  4. 次に、ファイルを入手します

    . ~/.bashrc
    . ~/.bash_completion
    
  5. 完了して発射します

    update-repo <tab> <tab>
    

Bash-completionの実装により、aptソース全体を更新することなく、単一のppaリポジトリを更新できます。

82
funicorn

リポジトリがディレクトリ/etc/apt/sources.list.d/、たとえばmyrepo.listの特定のファイルで設定されている場合、次のコマンドを使用してその単一のリポジトリを更新できます。

Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

それにもかかわらず、これはあまり便利ではありません。
これは、bash関数の定義を簡素化できます

update_repo() {
    Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
        -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}

単純に実行できるように

update_repo myrepo
41
enzotib

Y PPA Managerには、単一のPPAを更新できるupdate-ppaというコマンドラインツールが付属しています。

例えば:

Sudo update-ppa ppa:nilarimogard/webupd8

また、Y PPA Managerを介してPPAを追加すると、PPAソースが自動的に更新されます(そのPPAのみ)。将来のバージョンでは、単一のPPAを手動で更新するためのGUIも予定されています。

Y PPA Managerの詳細については、 HERE

12
Alin Andrei

特定のリポジトリを更新するには、-oを使用します。例:

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list

ここに、最近追加されたaptリポジトリのみを更新するワンライナーがあります

find /etc/apt/sources.list.d -type f -name '*.list' -exec Sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'

特に、新規追加後のVMプロビジョニング中に、すべてのリポジトリを更新するよりもはるかに高速です。

8
kenorb

-uオプションは15.10で追加されました 。 15.10から17.10では、-uを使用して、追加する特定のレポのみを自動的に更新できます。

add-apt-repository -u my-ppa

愚かなことは、このオプションが18.04までmanに追加されなかったことです(ただし、add-apt-repository --helpで文書化されました)。しかし18.04では、この機能は削除されました! (繰り返しますが、manではなく、add-apt-repository --helpで確認できます)。

18.04では、 更新機能が変更されました は、apt-get updateの後に常に完全なadd-apt-repositoryを実行します。 -uオプションは事実上削除されました。レガシー構文の場合はそのままですが、常にoptions.update = Falseに設定されます。 18.04では、-n, --no-updateのオプションがありますが、これは古い動作に似ています。しかし、それはすべてか、または何でもありません。18.04以降、単一のレポを更新することはできません。

1
wisbucky