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é?


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.


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

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 .


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.