apt-get update solo per un repository specifico


108

Quando aggiungo un PPA e voglio installare parte del suo contenuto, è abbastanza fastidioso aggiornare tutto il mio elenco apt usando apt-get update.

È invece possibile sincronizzare solo il contenuto di un determinato repository?


1
A partire da astuto, potresti semplicemente usareadd-apt-repository -u
Treviño il

Non c'è -usu Ubuntu (15.x) Vivid per quanto posso dire.
Kenorb,

@ Treviño Non è menzionato nella manpage di Wily: manpages.ubuntu.com/manpages/wily/en/man1/… È documentato altrove?
Muru,

@muru Penso che debba essere risolto, è solo menzionato add-apt-repository --help. Si prega di aprire un bug che chiede di correggere la manpage.
Treviño,

@ Treviño @muru FYI, la -ufunzionalità è stata rimossa dal 18.04. Vedi askubuntu.com/questions/65245/…
wisbucky

Risposte:


82

sì, apt-get può farlo e può farlo in un modo carino.

  1. Aggiungi in seguito a ~/.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. Aggiungi in seguito a ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Aggiungi in seguito a ~/.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. Quindi fonte i file

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Fatto e inizia a sparare

    update-repo <tab> <tab>

È possibile aggiornare un singolo repository ppa senza dover aggiornare l'intera sorgente apt, con l'attivazione del completamento bash.


14
Dovresti confezionarlo.
PyRulez,

3
Sei sicuro che lo script di completamento automatico funzioni?
Qed

1
Quando update-repo _init_completion: command not found
premo

2
Cordiali saluti: Ho usato le conoscenze acquisite da questo post per proporre un'opzione al repository add-apt per farlo automaticamente. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren

2
@CiprianTomoiaga Si è unito, ma la fonte è qui: bazaar.launchpad.net/~evarlast/software-properties/… Spero che sia astuto.
Jay _silly_evarlast_ Wren,

41

Se il repository è configurato in un file specifico nella directory /etc/apt/sources.list.d/, ad esempio myrepo.list, è possibile aggiornare quel singolo repository con il comando:

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

Tuttavia questo non è molto conveniente.
Questo può essere semplificato definendo una funzione 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"
}

in modo che tu possa semplicemente correre

update_repo myrepo

L'ho verificato di nuovo, ma non funziona se si desidera installare un pacchetto che ha una dipendenza irrisolta su un altro repository (anche nell'archivio principale)
Treviño

1
puoi spiegare cosa significa "-" nella configurazione di sourceparts?
Sajuuk,

Penso che "-" sourcepartsnon dovrebbe essere usato solo un modo fittizio per dirlo . Vedi github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Potrei sbagliarmi, non sono riuscito a trovare un documento adeguato che spieghi il '-'.
casualità

12

Y PPA Manager include uno strumento da riga di comando chiamato update-ppache consente di aggiornare un singolo PPA.

Per esempio:

sudo update-ppa ppa:nilarimogard/webupd8

Inoltre, quando si aggiunge un PPA tramite Y PPA Manager, l'origine PPA viene automaticamente aggiornata (solo per quel PPA). In una versione futura, ci sarà una GUI per aggiornare manualmente anche singoli PPA.

Ulteriori informazioni su Y PPA Manager, QUI .


5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerpoi sudo apt-get updatee infinesudo apt-get install y-ppa-manager
mchid

8

Per aggiornare un repository specifico, utilizzare -o, ad esempio:

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

Ecco un one-liner che aggiorna solo repository apt aggiunto di recente

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

È molto più veloce dell'aggiornamento di tutti i repository, in particolare durante il provisioning della VM dopo aver aggiunto nuovi.


3
Penso che questo aggiorni tutto ciò che è stato trovato/path/to
John Bachir,

@JohnBachir Esattamente.
Romano

1

L' -uopzione è stata aggiunta in 15.10 . Dal 15.10 al 17.10, è possibile utilizzare -uper aggiornare automaticamente solo il repository specifico che si sta aggiungendo:

add-apt-repository -u my-ppa

La cosa sciocca è che questa opzione non è stata aggiunta fino manal 18.04 (è stata tuttavia documentata in add-apt-repository --help). Ma nel 18.04, questa funzionalità è stata rimossa! (Ancora una volta, non in man, ma puoi vedere in add-apt-repository --help).

Nel 18.04, la funzionalità di aggiornamento è stata modificata per fare sempre un apt-get updatedopo completo add-apt-repository. L' -uopzione è stata effettivamente rimossa. Rimane lì per la sintassi legacy, ma è sempre impostato su options.update = False. Nel 18.04, hai l'opzione di -n, --no-update, che è come il vecchio comportamento. Ma è tutto o niente, non è possibile aggiornare un singolo repository dal 18.04.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.