web-dev-qa-db-fra.com

apt-get update uniquement pour un référentiel spécifique

Quand j'ajoute un PPA et que je veux installer une partie de son contenu, il est assez ennuyant de mettre à jour toute ma liste d'apt avec apt-get update.

Est-il au contraire possible de ne synchroniser que le contenu d'un référentiel donné?

108
Treviño

oui, apt-get peut le faire et peut le faire de manière agréable.

  1. Ajouter ce qui suit à ~/.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. Ajouter ce qui suit à ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Ajouter ce qui suit à ~/.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. Puis source les fichiers

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Fait et commence à le tirer

    update-repo <tab> <tab>
    

Vous pouvez mettre à jour un seul référentiel ppa sans avoir à mettre à jour tout le code source d'apt, avec la mise en œuvre de bash-completion.

82
funicorn

Si le référentiel est configuré dans un fichier spécifique du répertoire /etc/apt/sources.list.d/, par exemple myrepo.list, vous pouvez mettre à jour ce référentiel unique à l'aide de la commande suivante:

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

Néanmoins, ce n'est pas très pratique.
Ceci peut être simplifié en définissant une fonction 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"
}

afin que vous puissiez simplement courir

update_repo myrepo
41
enzotib

Y PPA Manager est fourni avec un outil de ligne de commande appelé update-ppa qui vous permet de mettre à jour un seul PPA.

Par exemple:

Sudo update-ppa ppa:nilarimogard/webupd8

De plus, lors de l'ajout d'un PPA via Y PPA Manager, la source du PPA est automatiquement mise à jour (uniquement pour ce PPA). Dans une version ultérieure, il y aura une interface graphique pour mettre à jour manuellement un seul PPA.

Plus d'informations sur Y PPA Manager, HERE .

12
Alin Andrei

Pour mettre à jour un référentiel spécifique, utilisez -o, par exemple:

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

Voici une mise à jour one-liner récemment ajoutée au dépôt apt

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

C'est beaucoup plus rapide que la mise à jour de tous les référentiels, en particulier lors du provisioning VM après l'ajout de nouveaux.

8
kenorb

L'option -u a été ajoutée dans 15.1 . De 15h10 à 17h10, vous pouvez utiliser -u pour mettre à jour automatiquement uniquement le référentiel spécifique que vous ajoutez:

add-apt-repository -u my-ppa

La chose stupide est que cette option n’a été ajoutée à man que le 18.04 (elle a été documentée dans add-apt-repository --help, cependant). Mais en 18.04, cette fonctionnalité a été supprimée! (Encore une fois, pas dans man, mais vous pouvez le voir dans add-apt-repository --help).

En 18.04, le fonctionnalité de mise à jour a été modifiée pour toujours faire un apt-get update complet après le add-apt-repository. L'option -u a été effectivement supprimée. Il reste là pour la syntaxe héritée, mais il est toujours défini sur options.update = False. En 18.04, vous avez l'option -n, --no-update, qui ressemble à l'ancien comportement. Mais c'est tout ou rien, vous ne pouvez pas mettre à jour un seul dépôt depuis le 18.04.

1
wisbucky