apt-get update лише для конкретного сховища


108

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

Чи натомість можливо лише синхронізувати вміст певного сховища?


1
Починаючи з хитрості, ви могли просто скористатисяadd-apt-repository -u
Тревіньо

Існує немає -uна Ubuntu (15.x) Vivid, наскільки я можу судити.
kenorb

@ Treviño Це не згадується у Wily manpage: manpages.ubuntu.com/manpages/wily/en/man1/… Чи це документально зафіксовано в інших місцях?
муру

@muru Я думаю, що це має бути виправлено, це згадується лише на add-apt-repository --help. Відкрийте помилку з проханням виправити сторінку.
Тревіньо

@ Treviño @muru FYI, -uфункціональність видалена з 18.04. Дивіться askubuntu.com/questions/65245/…
wisbucky

Відповіді:


82

так, 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-завершення.


14
Ви повинні упакувати це.
PyRulez

3
Ви впевнені, що сценарій автодоповнення працює?
qed

1
Коли я потрапляю на Tab, це показуєupdate-repo _init_completion: command not found
гаряче

2
FYI: Я використав знання, отримані на цій посаді, щоб запропонувати опцію add-apt-сховища, щоб зробити це автоматично. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren

2
@CiprianTomoiaga Він об'єднався, але джерело тут: bazaar.launchpad.net/~evarlast/software-properties/… Я сподіваюся, що це буде хитро .
Jay _silly_evarlast_ Wren

41

Якщо репозиторій налаштований у певному файлі в каталозі /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

Я перевірив це ще раз, але це не працює, якщо тоді ви хочете встановити пакет, який має певну невирішену залежність від іншого сховища (також у головному архіві)
Treviño

1
чи можете ви пояснити, що означає "-" у конфігурації вихідних частин?
Саджук

Я думаю, що "-" просто підроблений спосіб сказати sourcepartsне слід використовувати. Див. Github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Я можу помилитися, але не зміг знайти належного документа, що пояснює "-".
випадковість

12

Y PPA Manager постачається з інструментом командного рядка, який називається, update-ppaщо дозволяє оновлювати один PPA.

Наприклад:

sudo update-ppa ppa:nilarimogard/webupd8

Також при додаванні PPA через Y PPA Manager джерело PPA автоматично оновлюється (лише для цього PPA). У майбутній версії буде графічний інтерфейс для оновлення одиничних PPA.

Більше інформації про Y PPA Manager, ТУТ .


5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerпотім sudo apt-get updateі нарештіsudo apt-get install y-ppa-manager
mchid

8

Для оновлення конкретного сховища використовуйте -o, наприклад:

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list

Ось однолінійне оновлення лише нещодавно доданого сховища

find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'

Це набагато швидше, ніж оновлення всіх сховищ, особливо під час надання VM після додавання нових.


3
Я думаю, що це оновлює все, що знайдено в/path/to
Джон Бачір

@JohnBachir Рівно.
Роман

1

-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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.