atualização apt-get apenas para um repositório específico


108

Quando adiciono um PPA e quero instalar parte de seu conteúdo, é bastante irritante atualizar novamente toda a minha lista do apt usando apt-get update.

Em vez disso, é possível sincronizar apenas o conteúdo de um determinado repositório?


1
A partir astuto, você só poderia usaradd-apt-repository -u
— Treviño

Não existe -uno Ubuntu (15.x) Vivid até onde eu sei.
— Kenorb

@ Treviño Não é mencionado na página de manual do Wily: manpages.ubuntu.com/manpages/wily/en/man1/… Está documentado em outro lugar?
— muru

@uru Eu acho que isso tem que ser consertado, é apenas mencionado add-apt-repository --help. Por favor, abra um bug pedindo para corrigir a página de manual.
— Treviño

@ Treviño @muru FYI, a -ufuncionalidade foi removida desde 18.04. Veja askubuntu.com/questions/65245/…
— wisbucky em 10/04

Respostas:


82

sim, o apt-get pode fazer isso e de uma maneira agradável.

  1. Anexe o seguinte a ~/.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. Anexe o seguinte a ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Anexe o seguinte a ~/.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. Em seguida, forneça os arquivos

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Feito e comece a dispará-lo

    update-repo <tab> <tab>

Você pode atualizar um único repositório ppa sem precisar atualizar toda a fonte apt, com o implemento de conclusão do bash.


14
Você deve empacotar isso.
— PyRulez

3
Tem certeza de que o script de preenchimento automático está funcionando?
— QED

1
Quando eu bati Tab mostraupdate-repo _init_completion: command not found
— kevy

2
FYI: Usei o conhecimento adquirido neste post para propor uma opção para adicionar o apt-repository para fazer isso automaticamente. code.launchpad.net/~evarlast/software-properties/support-update/...
— Jay _silly_evarlast_ Wren

2
@CiprianTomoiaga Foi mesclado, mas a fonte está aqui: bazaar.launchpad.net/~evarlast/software-properties/… Espero que seja um truque.
— Jay _silly_evarlast_ Wren

41

Se o repositório estiver configurado em um arquivo específico no diretório /etc/apt/sources.list.d/, por exemplo myrepo.list, você poderá atualizar esse repositório único com o comando:

sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

No entanto, isso não é muito conveniente.
Isso pode ser simplificado, definindo uma função 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"
}

para que você possa simplesmente executar

update_repo myrepo

Eu verifiquei isso de novo, mas não funciona se então você quer instalar um pacote que tem alguma dependência não resolvida em outro repositório (também no arquivo principal)
— Treviño

1
você pode explicar o que significa '-' na configuração do sourceparts?
— Sajuuk 03/04

Eu acho que '-' apenas uma maneira idiota de dizer sourcepartsnão deve ser usada. Consulte github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Eu poderia estar errado, porém, não consegui encontrar um documento adequado explicando o '-'.
— aleatoriedade

12

O PPA Manager vem com uma ferramenta de linha de comando chamada update-ppaque permite atualizar um único PPA.

Por exemplo:

sudo update-ppa ppa:nilarimogard/webupd8

Além disso, ao adicionar um PPA através do Y PPA Manager, a fonte do PPA é atualizada automaticamente (apenas para esse PPA). Em uma versão futura, haverá uma GUI para atualizar manualmente PPAs únicos também.

Mais informações sobre o Y PPA Manager, AQUI .


5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerentão sudo apt-get updatee finalmentesudo apt-get install y-ppa-manager
— mchid 08/11/14

8

Para atualizar um repositório específico, use -o, por exemplo:

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

Aqui está uma lista atualizada atualizando apenas o repositório apt adicionado recentemente

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

É muito mais rápido do que atualizar todos os repositórios, especialmente durante o provisionamento da VM após adicionar novos.


3
Eu acho que isso atualiza tudo o que é encontrado em/path/to
— John Bachir

@JohnBachir Exatamente.
— Roman

1

A -uopção foi adicionada em 15.10 . De 15.10 a 17.10, você pode usar -upara atualizar automaticamente apenas o repositório específico que você está adicionando:

add-apt-repository -u my-ppa

O mais bobo é que essa opção não foi adicionada manaté 18.04 (no add-apt-repository --helpentanto, foi documentada ). Mas em 18.04, essa funcionalidade foi removida! (Novamente, não em man, mas você pode ver em add-apt-repository --help).

Na versão 18.04, a funcionalidade de atualização foi alterada para sempre fazer um completo apt-get updatedepois add-apt-repository. A -uopção foi efetivamente removida. Ele permanece lá para a sintaxe herdada, mas é sempre definido como options.update = False. Na versão 18.04, você tem a opção de -n, --no-update, que é como o antigo comportamento. Mas é tudo ou nada, você não pode atualizar um único repo desde 18.04.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.