apt-get update solo para un repositorio específico

108

Cuando agrego un PPA y quiero instalar parte de su contenido, es bastante molesto volver a actualizar toda mi lista de apt usando apt-get update.

¿Es posible sincronizar solo el contenido de un repositorio dado?

Treviño
fuente
1
A partir de astucia, podrías usaradd-apt-repository -u
Treviño
No hay -uen Ubuntu (15.x) Vivid por lo que puedo decir.
kenorb
@ Treviño No se menciona en la página de manual de Wily: manpages.ubuntu.com/manpages/wily/en/man1/… ¿Está documentado en otra parte?
Muru
@muru Creo que hay que arreglarlo, solo se menciona en add-apt-repository --help. Abra un error que solicite corregir la página de manual.
Treviño
@ Treviño @muru FYI, la -ufuncionalidad se eliminó desde el 18.04. Ver askubuntu.com/questions/65245/…
wisbucky

Respuestas:

82

sí, apt-get puede hacer eso, y puede hacerlo de una manera agradable.

  1. Añadir siguiente 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. Añadir siguiente a ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
  3. Añadir siguiente 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. Luego busca los archivos

    . ~/.bashrc
    . ~/.bash_completion
  5. Listo y comienza a dispararlo

    update-repo <tab> <tab>

Puede actualizar un solo repositorio de ppa sin tener que actualizar toda la fuente de apt, con la implementación de bash-complete.

funicornio
fuente
14
Deberías empacar esto.
PyRulez
3
¿Estás seguro de que el script de autocompletado funciona?
qed
1
Cuando llego a Tab se muestraupdate-repo _init_completion: command not found
kevy
2
FYI: He utilizado el conocimiento que obtuve de esta publicación para proponer una opción para agregar-apt-repository para hacer esto automáticamente. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren
2
@CiprianTomoiaga Se fusionó, pero la fuente está aquí: bazaar.launchpad.net/~evarlast/software-properties/ ... Espero que sea astuta.
Jay _silly_evarlast_ Wren
41

Si el repositorio está configurado en un archivo específico en el directorio /etc/apt/sources.list.d/, por ejemplo myrepo.list, puede actualizar ese repositorio único con el comando:

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

Sin embargo, esto no es muy conveniente.
Esto se puede simplificar definiendo una función 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 puedas simplemente correr

update_repo myrepo
enzotib
fuente
He comprobado esto de nuevo, pero no funciona si desea instalar un paquete que tenga una dependencia no resuelta en otro repositorio (también en el archivo principal)
Treviño
1
¿Puedes explicar qué significa '-' en la configuración de sourceparts?
Sajuuk
Creo que '-' solo una forma ficticia de decir sourcepartsno debe usarse. Ver github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Sin embargo, podría estar equivocado, no pude encontrar un documento adecuado que explicara el '-'.
aleatoriedad
12

Y PPA Manager viene con una herramienta de línea de comandos llamada update-ppaque le permite actualizar un solo PPA.

Por ejemplo:

sudo update-ppa ppa:nilarimogard/webupd8

Además, al agregar un PPA a través de Y PPA Manager, la fuente de PPA se actualiza automáticamente (solo para ese PPA). En una versión futura, también habrá una GUI para actualizar manualmente los PPA individuales.

Más información sobre Y PPA Manager, AQUÍ .

Alin Andrei
fuente
55
sudo add-apt-repository ppa:webupd8team/y-ppa-managerentonces sudo apt-get updatey finalmentesudo apt-get install y-ppa-manager
mchid
8

Para actualizar un repositorio específico, use -o, por ejemplo:

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

Aquí hay una actualización de una línea que solo ha agregado recientemente el repositorio de apt

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

Es mucho más rápido que actualizar todos los repositorios, especialmente durante el aprovisionamiento de VM después de agregar nuevos.

kenorb
fuente
3
Creo que esto actualiza todo lo que se encuentra en/path/to
John Bachir
@JohnBachir Exactamente.
Romano
1

La -uopción se agregó en 15.10 . De 15.10 a 17.10, puede usar -upara actualizar automáticamente solo el repositorio específico que está agregando:

add-apt-repository -u my-ppa

Lo tonto es que esta opción no se agregó manhasta el 18.04 (sin embargo, se documentó add-apt-repository --help). ¡Pero en 18.04, esta funcionalidad fue eliminada! (Nuevamente, no adentro man, pero puedes ver adentro add-apt-repository --help).

En 18.04, la funcionalidad de actualización se cambió para hacer siempre un completo apt-get updatedespués add-apt-repository. La -uopción fue eliminada efectivamente. Permanece allí para la sintaxis heredada, pero siempre se establece en options.update = False. En 18.04, tiene la opción de -n, --no-update, que es como el comportamiento anterior. Pero es todo o nada, no puede actualizar un solo repositorio desde 18.04.

wisbucky
fuente