apt-get update только для определенного репозитория
Когда я добавляю PPA и хочу установить часть его содержимого, довольно раздражает повторное обновление всего моего списка приложений, используя apt-get update
,
Возможно ли вместо этого синхронизировать только содержимое данного репозитория?
6 ответов
Да , apt-get может сделать это, и может сделать это хорошим способом.
Добавить следующее к
~/.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 }
Добавить следующее к
~/.bashrc
if [ -f $HOME/.bash_funcs ]; then . $HOME/.bash_funcs fi
Добавить следующее к
~/.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
Затем источник файлов
. ~/.bashrc . ~/.bash_completion
Готово и начать стрелять
update-repo <tab> <tab>
Вы можете обновить один репозиторий ppa без необходимости обновления всего исходного кода apt с помощью bash-complete.
Если хранилище настроено в определенном файле в каталоге /etc/apt/sources.list.d/
, сказать myrepo.list
Вы можете обновить этот единственный репозиторий с помощью команды:
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
Тем не менее это не очень удобно.
Это можно упростить, определив функцию 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"
}
так что вы можете просто запустить
update_repo myrepo
Y PPA Manager поставляется с инструментом командной строки под названием update-ppa
это позволяет вам обновить один PPA.
Например:
sudo update-ppa ppa:nilarimogard/webupd8
Кроме того, при добавлении PPA через Y PPA Manager источник PPA автоматически обновляется (только для этого PPA). В будущей версии также будет графический интерфейс для ручного обновления отдельных PPA.
Больше информации о Y PPA Manager, ЗДЕСЬ.
Чтобы обновить определенный репозиторий, используйте -o
Например:
apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list
Вот однострочное обновление только недавно добавленного репозитория apt
find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'
Это гораздо быстрее, чем обновление всех репозиториев, особенно во время подготовки виртуальной машины после добавления новых.
-u
опция была добавлена в 15.10. С 15.10 по 17.10 вы можете использовать -u
для автоматического обновления только определенного репо, которое вы добавляете:
add-apt-repository -u my-ppa
Глупо то, что эта опция не была добавлена в man
до 18.04 (документально add-apt-repository --help
, тем не мение). Но в 18.04 эта функциональность была удалена! (Опять же не в man
, но вы можете увидеть в add-apt-repository --help
).
В 18.04 функциональность обновления была изменена, чтобы всегда делать полную apt-get update
после add-apt-repository
, -u
опция была эффективно удалена. Это остается там для унаследованного синтаксиса, но это всегда установлено в options.update = False
, В 18.04 у вас есть возможность -n, --no-update
, что похоже на старое поведение. Но это все или ничего, вы не можете обновить один репозиторий с 18.04.
Можно также сократить доступные варианты до одного репозитория:
echo "deb http://archive.ubuntu.com/ubuntu/ focal universe" > /etc/apt/sources.list
apt-get update -y && apt-get install -y ncftp
Это может быть радикально, но экономит время и трафик при запуске
apt-get
в одноразовой таре.