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


108

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

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


1
いから始めて、あなただけを使用することができますadd-apt-repository -u
トレヴィーノ

-u私が知る限り、Ubuntu(15.x)Vividにはありません。
ケノーブ

@TreviñoWilyのマンページには記載されていません:manpages.ubuntu.com/manpages/wily/en/man1/…他の場所で文書化されていますか?
ムル

@muruこれは修正する必要があると思いますadd-apt-repository --help。マンページの修正を求めるバグを開いてください。
トレヴィーニョ

@Treviño@muru FYI、-u機能は18.04から削除されました。askubuntu.com/questions/65245/を
wisbucky

回答:


82

はい、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リポジトリを更新できます。


14
これをパッケージ化する必要があります。
PyRulez 14

3
オートコンプリートスクリプトは機能していますか?
14年

1
私がヒットするとタブをそれが示しupdate-repo _init_completion: command not found
kevy

2
参考までに、この投稿から得た知識を使用して、add-apt-repositoryを自動的に実行するオプションを提案しました。code.launchpad.net/~evarlast/software-properties/support-update/...
ジェイ_silly_evarlast_レン

2
@CiprianTomoiagaマージされましたが、ソースは次のとおり です。
ジェイ_silly_evarlast_レン

41

リポジトリは、ディレクトリ内の特定のファイルで構成されている場合は/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

私は再びこれをチェックしましたが、あなたは(またメインアーカイブに)別のリポジトリにいくつかの未解決の依存関係を持つパッケージをインストールしたい場合は、その後、それは動作しません
トレビノ

1
sourceparts configで「-」の意味を説明できますか?
Sajuuk

「-」は単なるダミーの方法sourcepartsで使用すべきではないと思います。github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313を参照してください。私は間違っているかもしれませんが、「-」を説明する適切なドキュメントを見つけることができませんでした。
ランダム性

12

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

例えば:

sudo update-ppa ppa:nilarimogard/webupd8

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

Y PPA Managerの詳細については、こちらをご覧ください。


5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerそしてsudo apt-get update、最後にsudo apt-get install y-ppa-manager
mchid

8

特定のリポジトリを更新するには-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プロビジョニング中に、すべてのリポジトリを更新するよりもはるかに高速です。


3
これは、次の場所にあるすべてを更新すると思います/path/to
ジョンバチャー

@JohnBachirまさに。
ローマ

1

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

add-apt-repository -u my-ppa

愚かなことは、このオプションがman18.04まで追加されなかったことです(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以降、単一のレポを更新することはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.