aktualizacja apt-get tylko dla określonego repozytorium

108

Kiedy dodam PPA i chcę zainstalować część jego zawartości, dość denerwująca jest aktualizacja wszystkich moich list apt za pomocą apt-get update.

Czy zamiast tego można synchronizować tylko zawartość danego repozytorium?

Treviño
źródło
1
Zaczynając od przebiegłego, możesz po prostu użyćadd-apt-repository -u
Treviño
-uO ile wiem, nie ma na Ubuntu (15.x) Vivid.
kenorb
@ Treviño Nie wspomniano na stronie Wily: manpages.ubuntu.com/manpages/wily/en/man1/... Czy jest to udokumentowane gdzie indziej?
muru
@muru Myślę, że to trzeba naprawić, to tylko wspomniane na add-apt-repository --help. Otwórz błąd z prośbą o naprawienie strony podręcznika.
Treviño,
@ Treviño @muru FYI, -ufunkcjonalność została usunięta od 18.04. Zobacz askubuntu.com/questions/65245/…
wisbucky

Odpowiedzi:

82

tak, apt-get może to zrobić i może to zrobić w przyjemny sposób.

  1. Dołącz następujące do ~/.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. Dołącz następujące do ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
  3. Dołącz następujące do ~/.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. Następnie źródło plików

    . ~/.bashrc
    . ~/.bash_completion
  5. Gotowe i zacznij strzelać

    update-repo <tab> <tab>

Możesz zaktualizować pojedyncze repozytorium ppa bez konieczności aktualizacji całego źródła apt, z implementacją bash-complete.

funicorn
źródło
14
Powinieneś to zapakować.
PyRulez
3
Czy na pewno działa skrypt autouzupełniania?
qed
1
Kiedy uderzę w Tab , pojawia sięupdate-repo _init_completion: command not found
kevy
2
FYI: Wykorzystałem wiedzę zdobytą w tym poście, aby zaproponować opcję dodania repozytorium, aby zrobić to automatycznie. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren
2
@CiprianTomoiaga Połączyło się, ale źródło jest tutaj: bazaar.launchpad.net/~evarlast/software-properties/… Mam nadzieję, że będzie przebiegły.
Jay _silly_evarlast_ Wren
41

Jeśli repozytorium jest skonfigurowane w określonym pliku w katalogu /etc/apt/sources.list.d/, powiedzmy myrepo.list, możesz zaktualizować to pojedyncze repozytorium za pomocą polecenia:

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

Niemniej jednak nie jest to zbyt wygodne.
Można to uprościć definiując funkcję 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"
}

abyś mógł po prostu biegać

update_repo myrepo
enzotib
źródło
Sprawdziłem to jeszcze raz, ale to nie działa, jeśli chcesz zainstalować pakiet, który ma pewną nierozstrzygniętą zależność od innego repozytorium (również w głównym archiwum)
Treviño
1
czy możesz wyjaśnić, co oznacza „-” w konfiguracji sourceparts?
Sajuuk
Myślę, że „…” sourcepartsnie powinien być używany tylko fałszywy sposób . Zobacz github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Mogłem się mylić, nie mogłem znaleźć odpowiedniego dokumentu wyjaśniającego „-”.
losowość
12

Y PPA Manager jest wyposażony w narzędzie wiersza poleceń o nazwie, update-ppaktóre pozwala zaktualizować pojedynczy PPA.

Na przykład:

sudo update-ppa ppa:nilarimogard/webupd8

Ponadto, gdy dodajesz PPA poprzez Y PPA Manager, źródło PPA jest automatycznie aktualizowane (tylko dla tego PPA). W przyszłej wersji będzie także GUI do ręcznej aktualizacji pojedynczych PPA.

Więcej informacji o Y PPA Manager, TUTAJ .

Alin Andrei
źródło
5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerpotem sudo apt-get updatei na koniecsudo apt-get install y-ppa-manager
mchid
8

Aby zaktualizować określone repozytorium, użyj -onp .:

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

Oto jedno-liniowy aktualizator tylko niedawno dodanego repozytorium apt

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

Jest to o wiele szybsze niż aktualizowanie wszystkich repozytoriów, szczególnie podczas udostępniania VM po dodaniu nowego.

kenorb
źródło
3
Myślę, że to aktualizuje wszystko, co znajduje się w/path/to
John Bachir
@JohnBachir Dokładnie.
Rzym.
1

-uOpcji dodano 15.10 . Od 15.10 do 17.10 możesz użyć -udo automatycznej aktualizacji tylko dodawanego repozytorium, które dodajesz:

add-apt-repository -u my-ppa

Głupie jest to, że ta opcja została dodana mandopiero do 18.04 (została jednak udokumentowana add-apt-repository --help). Ale w 18.04 ta funkcja została usunięta! (Znowu nie w man, ale widać w add-apt-repository --help).

W 18.04 funkcja aktualizacji została zmieniona, aby zawsze robić pełne apt-get updatepóźniej add-apt-repository. -uOpcja została skutecznie usunięta. Pozostaje tam dla starszej składni, ale zawsze jest ustawiona na options.update = False. W 18.04 masz opcję -n, --no-update, która przypomina stare zachowanie. Ale to wszystko albo nic, nie możesz zaktualizować pojedynczego repo od 18.04.

wisbucky
źródło