apt-get update только для определенного репозитория

Когда я добавляю PPA и хочу установить часть его содержимого, довольно раздражает повторное обновление всего моего списка приложений, используя apt-get update.

Возможно ли вместо этого синхронизировать только содержимое данного репозитория?

112
задан 27 March 2017 в 08:19

6 ответов

. Да, apt-get может сделать это, и может сделать это красиво.

  1. Добавить следующее к ~/.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" 
     готовый
    }
    
  2. Добавить следующее к ~/.bashrc

     если [ -f $HOME/.bash_funcs ]; то
    . $HOME/.bash_funcs
    
    
  3. Добавить следующее к ~/.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
    
  4. Затем инициируйте файлы

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Готово и начинайте запускать его

     updateate-repo  
    

Вы можете обновить один репозиторий ppa без необходимости обновления всего apt-источника, с реализацией bash-завершения.

88
ответ дан 27 March 2017 в 08:19

Если репозиторий настроен в определенном файле в каталоге /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
44
ответ дан 27 March 2017 в 08:19

Y PPA Manager поставляется с утилитой командной строки, называемой updateate-ppa, которая позволяет Вам обновить один PPA.

Например:

sudo update-ppa ppa:nilarimogard/webupd8

Также, при добавлении PPA через Y PPA Manager, источник PPA автоматически обновляется (только для этого PPA). В одной из будущих версий также будет графический интерфейс для ручного обновления одиночных PPA.

Больше информации о Y менеджере PPA, ЗДЕСЬ.

12
ответ дан 27 March 2017 в 08:19

Для обновления конкретного репозитория используйте -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 после добавления нового.

9
ответ дан 27 March 2017 в 08:19

Параметр -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.

2
ответ дан 27 March 2017 в 08:19

Можно также сократить количество доступных вариантов до одного репозитория:

echo "deb http://archive.ubuntu.com/ubuntu/ focal universe" > /etc/apt/sources.list
apt-get update -y && apt-get install -y ncftp

Это может быть радикальным, но это экономит время и трафик при запуске apt-get в одноразовом контейнере.

-1
ответ дан 4 September 2021 в 12:34

Другие вопросы по тегам:

Похожие вопросы: