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?

Treviño
fonte
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.

funicorn
fonte
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
enzotib
fonte
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 .

Alin Andrei
fonte
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.

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

wisbucky
fonte