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?


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.


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

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


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.