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

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

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

6 ответов

Решение

Да , apt-get может сделать это, и может сделать это хорошим способом.

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

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

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Готово и начать стрелять

    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в одноразовой таре.

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