Когда я добавляю PPA и хочу установить часть его содержимого, довольно раздражает повторное обновление всего моего списка приложений, используя apt-get update
.
Возможно ли вместо этого синхронизировать только содержимое данного репозитория?
. Да, apt-get может сделать это, и может сделать это красиво.
Добавить следующее к ~/.bash_funcs
update-repo() {
для источника в "$@"; сделать
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}". \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
готовый
}
Добавить следующее к ~/.bashrc
если [ -f $HOME/.bash_funcs ]; то
. $HOME/.bash_funcs
Добавить следующее к ~/.bash_completion
# Определяемое пользователем завершение Debian -*- shell-script -*-
...
местная кривая
_init_completion || return
COMPREPLY=( $( find /etc/apt/sources.list.d/ - имя "*$cur*.list" \.
-exec basename {} \; 2> /dev/null ) )
возврат 0
} &&
полный -F _ppa_lists updateate-repo
Затем инициируйте файлы
. ~/.bashrc
. ~/.bash_completion
Готово и начинайте запускать его
updateate-repo
Вы можете обновить один репозиторий ppa без необходимости обновления всего apt-источника, с реализацией bash-завершения.
Если репозиторий настроен в определенном файле в каталоге /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 поставляется с утилитой командной строки, называемой updateate-ppa
, которая позволяет Вам обновить один PPA.
Например:
sudo update-ppa ppa:nilarimogard/webupd8
Также, при добавлении PPA через Y PPA Manager, источник PPA автоматически обновляется (только для этого PPA). В одной из будущих версий также будет графический интерфейс для ручного обновления одиночных PPA.
Больше информации о Y менеджере PPA, ЗДЕСЬ.
Для обновления конкретного репозитория используйте -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="{}" ';'
Это намного быстрее, чем обновление всех репозиториев, особенно во время провижининга VM после добавления нового.
Параметр -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
после 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
в одноразовом контейнере.