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é?
oui, apt-get peut le faire et peut le faire de manière agréable.
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
}
Ajouter ce qui suit à ~/.bashrc
if [ -f $HOME/.bash_funcs ]; then
. $HOME/.bash_funcs
fi
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
Puis source les fichiers
. ~/.bashrc
. ~/.bash_completion
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.
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
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 .
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.
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.