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

108

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 en utilisant apt-get update.

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

Treviño
la source
1
À partir de rusé, vous pouvez simplement utiliseradd-apt-repository -u
Treviño
-uAutant que je sache, Ubuntu (15.x) Vivid n'existe pas .
Kenorb
@ Treviño Cela n'est pas mentionné dans la page de manuel Wily: manpages.ubuntu.com/manpages/wily/en/man1/… Est-ce que c'est documenté ailleurs?
Muru
@muru, je pense que cela doit être corrigé, il est seulement mentionné sur add-apt-repository --help. Veuillez ouvrir un bogue demandant de corriger la page de manuel.
Treviño
@ Treviño @muru FYI, la -ufonctionnalité a été supprimée depuis le 18.04. Voir askubuntu.com/questions/65245/…
wisbucky

Réponses:

82

oui, apt-get peut le faire, et le fait 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 l'ensemble du code source d'apt, avec la mise en œuvre de bash-completion.

funicorn
la source
14
Vous devriez emballer ceci.
PyRulez le
3
Etes-vous sûr que le script d'auto-complétion fonctionne?
Qed
1
Quand je frappe sur Tab, cela montreupdate-repo _init_completion: command not found
kevy
2
FYI: J'ai utilisé les connaissances acquises grâce à ce post pour proposer une option à add-apt-repository pour le faire automatiquement. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren
2
@CiprianTomoiaga Il a été fusionné, mais la source est la suivante: bazaar.launchpad.net/~evarlast/software-properties/… J'espère que ce sera malin.
Jay _silly_evarlast_ Wren
41

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

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
enzotib
la source
J'ai vérifié à nouveau, mais cela ne fonctionne pas si vous souhaitez ensuite installer un paquet ayant une dépendance non résolue sur un autre référentiel (également dans l'archive principale)
Treviño
1
pouvez-vous expliquer ce que signifie '-' dans config sourceparts?
Sajuuk le
Je pense '-' juste une façon fictive de dire sourcepartsne devrait pas être utilisée. Voir github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Je peux me tromper cependant, je ne pouvais pas trouver un bon document expliquant le "-".
hasard
12

Y PPA Manager est fourni avec un outil de ligne de commande appelé update-ppaqui 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, ICI .

Alin Andrei
la source
5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerpuis sudo apt-get updateet enfinsudo apt-get install y-ppa-manager
mchid
8

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 de la mise en service des ordinateurs virtuels après l'ajout de nouveaux.

Kenorb
la source
3
Je pense que cela met à jour tout ce qui a été trouvé dans/path/to
John Bachir le
@JohnBachir Exactement.
Roman
1

L' -uoption a été ajoutée à 15.10 . De 15h10 à 17h10, vous pouvez utiliser -upour 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 manqu’au 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 voir dans add-apt-repository --help).

En 18.04, la fonctionnalité de mise à jour a été modifiée pour toujours faire une complète apt-get updateaprès add-apt-repository. L' -uoption 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 la possibilité de -n, --no-update, ce 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.

sage
la source