Asignar la máxima prioridad a mi repositorio local

40

Resumen

¿Cómo puedo hacer que apt-get prefiera paquetes de repositorios locales en lugar de descargar nuevamente la misma versión del paquete desde los repositorios oficiales? El repositorio local está firmado y es de confianza. Ya hemos probado las preferencias de apt prioridad.


La pregunta original era: "Cómo asignar la máxima prioridad al repositorio local sin usar el archivo sources.list"

He configurado un repositorio local con los paquetes que descargué. Lo uso para evitar descargar los mismos paquetes a través de Internet, cuando necesito reinstalar mi Ubuntu. Es un repositorio básico, creado con apt-ftparchive packages . > Packages. Hice de este un repositorio de confianza para evitar la advertencia de "repositorio no autenticado". ( Cuando tenga un repositorio no confiable, apto synapticintente descargar los mismos paquetes a través de Internet, porque es confiable ).

He estado usando este repositorio local durante al menos 1 años. Pero siempre tengo que poner mi línea de repositorio local en la parte superior del sources.listarchivo para usar esto. Pero esto es molesto, ya que debo abrir un terminal y escribir algo cada vez que reinstalo Ubuntu, aunque hay una herramienta mejor software-properties-gtk. No puedo usar esta herramienta ya que coloca la línea de origen al final de `sources.list.

Y el verdadero problema es que, apt o synapticsiempre descarga un paquete de la fuente que se menciona anteriormente, sin inspeccionar si los paquetes ya están disponibles en el repositorio local. Por lo tanto, no tengo más remedio que colocar la fuente local en la parte superior de la sources.listterminal (en realidad no odio la terminal, pero necesito una solución).

He intentado este método . Pero esto no me ayuda.

Mi archivo de preferencias es esto en /etc/apt/preferences.d/local-pin-900

    Package: *
    Pin: release o=Local,n=ubuntu-local
    Pin-Priority: 900

Mi archivo de lanzamiento es este

    Origin: Local
    Label: Local-Ubuntu
    Description: Local Ubuntu Repository
    Codename: ubuntu-local
    MD5Sum:
     ed43222856d18f389c637ac3d7dd6f85          1043412 Packages
     d41d8cd98f00b204e9800998ecf8427e                0 Sources

Cuando habilito la preferencia de apt, apt-cache policymuestra correctamente la preferencia, por ejemplo, muestra que el repositorio local tiene la máxima prioridad.

Pero cuando hago esto sudo apt-get install <package-name>, aptintenta descargarlo de Internet. Pero cuando coloco mi repositorio local en la parte superior, se instala desde el repositorio local.

Entonces, mi pregunta es -> '¿Es posible forzar apto para usar el repositorio local cuando el paquete está disponible en el repositorio local, sin colocar explícitamente "la fuente local" en la parte superior de mi lista de repositorios (por ejemplo, el archivo sources.list)? '

Editar: la salida de apt-cache policy $package_namees la siguiente

  
nautilus-wipe:
  Instalado: (ninguno)
  Candidato: 0.1.1-2
  Tabla de versiones:
     0.1.1-2 0
        500 paquetes http://archive.ubuntu.com/ubuntu/ preciso / universe i386
        Archivo 900: / media / Main / Linux-Software / Ubuntu / Precise / Packages

Muestra que mi repositorio local tiene mayor preferencia, aunque no es el primero en el sources.listarchivo.

Aquí está la salida de apt-get install nautilus-wipe

Leyendo listas de paquetes ... Hecho
Construyendo árbol de dependencia       
Leyendo información del estado ... Hecho
Se instalarán los siguientes paquetes NUEVOS:
  nautilus-wipe
0 actualizado, 1 recién instalado, 0 para eliminar y 131 no actualizado.
Necesita obtener 30.7 kB de archivos.
Después de esta operación, se utilizarán 150 kB de espacio en disco adicional.
'http://archive.ubuntu.com/ubuntu/pool/universe/n/nautilus-wipe/nautilus-wipe_0.1.1-2_i386.deb' nautilus-wipe_0.1.1-2_i386.deb 30730 MD5Sum: 7d497b8dfcefe1c0b51a45f3b0466994

Todavía está tratando de obtener el archivo de Internet, aunque creo que debería estar contento con el local.


Resultado del uso de "" o localhost como mediageek sugirió

Usar localhost no tiene ningún efecto. pero "" tiene pero no fue diferente a mi método

    Package: *
    Pin: origin ""
    Pin-Priority: 1001

Los he usado antes de publicar la pregunta. Pero nuevamente intenté esto (por suridad). El mismo resultado. apt-cache policymostrando que mi repositorio local tiene de hecho la más alta prioridad. pero cuando intenté instalarlo, dice "Necesito obtener XXX / XXX KB de archivo".

Anwar
fuente
¿El paquete en su repositorio local era más nuevo / igual al paquete oficial?
planta rodadora
Sí, por supuesto, lo verifiqué con el apt-getcomando. Dice "0 kb necesitan ser descargados".
Anwar
Desea verificarlo conapt-cache policy
tumbleweed
El comentario anterior fue un error. Pensé que lo estaba dando en mi otra pregunta (con respecto a la instalación de software con el centro de software desde el repositorio local). Sí, ya lo he verificado apt-cache policyy vi que el repositorio local tiene mayor prioridad. Pero todavía apt-getestoy tratando de instalarlo desde internet. Creo que simplemente no es posible sin usar el sources.listarchivo.
Anwar
Estaba preguntando si apt-cache policymostraba que la versión era la misma
tumbleweed

Respuestas:

53

La respuesta corta:

El archivo de preferencias APT / etc / apt / preferencias se puede usar para controlar qué versiones de paquetes se seleccionarán para la instalación.

Aquí está el archivo /etc/apt/preferences, que se apt-getusa para decidir, qué versión se debe seleccionar si hay muchas versiones de un solo paquete. Con esto, cualquier paquete que provenga del repositorio local tendrá prioridad sobre los otros paquetes.

Paquete: *  
Pin: origen ""  
Prioridad de clavija: 1001  

Esto no controlará la versión, sino la preferencia de origen si ambos paquetes tienen la misma versión. Si necesita asignar la máxima prioridad para la misma versión del paquete en su repositorio local, enumérelos en la parte superior del /etc/apt/sources.listarchivo>

Respuesta a la pregunta original:

¿Cómo asignar la máxima prioridad al repositorio local sin usar el archivo sources.list?

No hay forma de asignar la máxima prioridad al repositorio local sin usar el sources.listarchivo. debe colocarlos en la parte superior de "sources.list" si desea asignar la máxima prioridad a su repositorio local.

Respuesta resumida a esta pregunta:

¿Cómo puedo hacer que apt-get prefiera paquetes de repositorios locales en lugar de descargar nuevamente la misma versión del paquete desde los repositorios oficiales? El repositorio local está firmado y es de confianza. Ya hemos probado las preferencias de apt prioridad.

Usando el /etc/apt/sources.listarchivo, debe colocar su línea de repositorio local en la parte superior de este archivo. como el de abajo

deb cdrom: [Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)] / preciso principal restringido
archivo deb: / media / Main / Precise-Debs-New /
archivo deb: / media / Main / Linux-Software / Ubuntu / Precise /

deb http://archive.ubuntu.com/ubuntu preciso universo principal multiverso restringido
deb-src http://archive.ubuntu.com/ubuntu universo preciso multiverso principal restringido #Añadido por propiedades de software

# deb cdrom: [Xubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423.1)] / universo restringido multiverso principal preciso
# deb cdrom: [Ubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423)] / preciso principal restringido

# deb http://archive.canonical.com/ubuntu socio preciso
# deb-src http://archive.canonical.com/ubuntu socio preciso
# deb http://extras.ubuntu.com/ubuntu precisa main
# deb-src http://extras.ubuntu.com/ubuntu precision main

Y sí, "apt_preference" no tiene nada que ver con seleccionar instancias de los paquetes con la misma versión. El punto aquí es que no puede usar el /etc/apt/preferencearchivo para forzar a seleccionar / usar un .debarchivo de su repositorio local asignando la más alta prioridad a su local. Ese archivo (preferencia) se utiliza para seleccionar una versión específica, no una instancia específica (archivo .deb) de la misma versión. Para el último caso, debe usar el /etc/apt/sources.listarchivo con el método mencionado anteriormente.


Explicación:

Parece que todos entendimos mal el apt_preferencepropósito, ¡el manual apt_preference describe esto en los primeros 3 párrafos!

El archivo de preferencias APT / etc / apt / preferencias se puede usar para controlar qué versiones de paquetes se seleccionarán para la instalación.

Varias versiones de un paquete pueden estar disponibles para la instalación cuando el archivo sources.list (5) contiene referencias a más de una distribución (por ejemplo, estable y prueba). APT asigna una prioridad a cada versión disponible. Sujeto a restricciones de dependencia, apt-get (8) selecciona la versión con mayor prioridad para la instalación. El archivo de preferencias de APT anula las prioridades que APT asigna a las versiones de paquetes de forma predeterminada, lo que le da al usuario el control sobre cuál se selecciona para la instalación.

Y el muy importante está en el tercer párrafo.

Varias instancias de la misma versión de un paquete pueden estar disponibles cuando el archivo sources.list (5) contiene referencias a más de una fuente. En este caso, apt-get (8) descarga la instancia listada más temprano en el archivo sources.list (5). El archivo de preferencias APT no afecta la elección de la instancia, solo la elección de la versión .

Esas cursivas fueron hechas por la mía

Veamos esto con un ejemplo:

Tengo una versión precisa de compiz-fusion-plugins-extra, pero la desactivé para la demostración

Aquí está el archivo /etc/apt/preferences, que se apt-getusa para decidir, qué versión se debe seleccionar si hay muchas versiones de un solo paquete. (En este ejemplo, compiz-fusion-plugins-extratiene varias versiones.

Paquete: *  
Pin: origen ""  
Prioridad de clavija: 1001  

Este archivo dice apt-getque la instalación desde el repositorio local para todos los paquetes que tienen varias versiones existe en un repositorio diferente.

En otras palabras, si tengo un paquete xappscon la versión 1.0en mi repositorio local, y este mismo paquete xappsexiste en el repositorio de Precise con una versión superior, por ejemplo 2.0, apt-getpreferiré la versión del repositorio local, es decir, la versión 1.0.

Aquí está mi /etc/apt/sources.listarchivo

deb http://archive.ubuntu.com/ubuntu preciso universo principal multiverso restringido
deb-src http://archive.ubuntu.com/ubuntu universo preciso multiverso principal restringido #Añadido por propiedades de software
deb http://security.ubuntu.com/ubuntu/ precisión-seguridad universo principal multiverso restringido
deb http://archive.ubuntu.com/ubuntu preciso-actualizaciones universo principal multiverso restringido
deb http://archive.ubuntu.com/ubuntu precisión-backports universo principal multiverso restringido

# deb http://archive.canonical.com/ubuntu socio preciso
# deb-src http://archive.canonical.com/ubuntu socio preciso
# deb http://extras.ubuntu.com/ubuntu precisa main
# deb-src http://extras.ubuntu.com/ubuntu precision main


archivo deb: / media / Main / Linux-Software / Ubuntu / Oneiric / #este es el repositorio oneiric.
archivo deb: / media / Main / Linux-Software / Ubuntu / Natty / natty /
archivo deb: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu /
archivo deb: / media / Main / Linux-Software / Ubuntu / Natty / natty_new /

Aunque, he enumerado el repositorio de precisión anteriormente en el archivo, no hace apt-getque seleccione el paquete de ese repositorio. Como se describe en el manual

El archivo de preferencias APT no afecta la elección de la instancia, solo la elección de la versión.

Entonces, la salida del comando apt-cache policy compiz-fusion-plugins-extrafue como se esperaba a continuación

anwar @ edubuntu-lenovo: / etc / apt $ apt-cache policy compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  Instalado: (ninguno)
  Candidato: 0.9.5.94-0ubuntu1 / ** seleccionando versiones inferiores para prioridad ** /
  Tabla de versiones:
     0.9.7.0 ~ bzr9-0ubuntu6 0
        500 paquetes http://archive.ubuntu.com/ubuntu/ preciso / universe i386
     0.9.5.94-0ubuntu1 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Oneiric / Packages
     0.9.4-0ubuntu3 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages

Aquí, la versión candidata es 0.9.5.94-0ubuntu1, (que está en el repositorio local), no 0.9.7.0~bzr9-0ubuntu6 0, que está en el repositorio de precises. aunque el de los precises figuraba primero en el sources.listarchivo.

Una ejecución de ejemplo de apt-getintentar instalar compiz-fusion-plugins-extradespués de establecer la máxima prioridad en el repositorio local.

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install compiz-fusion-plugins-extra 
Leyendo listas de paquetes ... Hecho
Construyendo árbol de dependencia       
Leyendo información del estado ... Hecho
Los siguientes paquetes se instalaron automáticamente y ya no son necesarios:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
Use 'apt-get autoremove' para eliminarlos.
Se instalarán los siguientes paquetes adicionales:
  compiz-core compiz-plugins-default compiz-plugins-extra
  compiz-plugins-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
Paquetes sugeridos:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
Los siguientes paquetes serán eliminados:
  compiz compiz-gnome compizconfig-backend-gconf edubuntu-desktop
  libcompizconfig0 ubuntu-desktop unity xorg xserver-xorg
  xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-mouse
  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
  xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-ati
  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode
  xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomagic
  xserver-xorg-video-nouveau xserver-xorg-video-openchrome
  xserver-xorg-video-qxl xserver-xorg-video-r128 xserver-xorg-video-radeon
  xserver-xorg-video-s3 xserver-xorg-video-savage
  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
  xserver-xorg-video-vesa xserver-xorg-video-vmware
Se instalarán los siguientes paquetes NUEVOS:
  compiz-fusion-plugins-extra compiz-plugins-extra
Los siguientes paquetes serán DESCARGADOS:
  compiz-core compiz-plugins-default compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
0 actualizado, 2 recién instalado, 6 degradado, 37 para eliminar y 698 no actualizado.
Necesita obtener 0 B / 5,772 kB de archivos.
Después de esta operación, se liberarán 8.294 kB de espacio en disco.
¿Quieres continuar [S / n]? 

¡¡¡Extraño !!!, está tratando de degradar los paquetes de compiz ya instalados de dependencias precisas para resolver (coincidentes con las de Oneiric) con las recién seleccionadas compiz-fusion-plugins-extra!!!.

Lo que es más peligroso es que está intentando eliminar los paquetes de controladores de gráficos (xserver-xorg -....) para evitar conflictos con las nuevas compilaciones.

(Probablemente, si también los tuviera en mi repositorio local, es posible que quieran degradarlos de manera segura. Pero como esos paquetes generalmente están instalados, no los descargué, por lo que no están en el repositorio local, de ahí este resultado) .

Conclusión : Por lo tanto, /etc/apt/preferencessolo se recomienda usar con el repositorio local, si tiene un repositorio completo en el sistema local.

¿Qué sucede si existen varias instancias (archivo .deb) de la misma versión en muchos repositorios?

Que se describe en el apt_preferencemanual

Pueden estar disponibles varias instancias de la misma versión de un paquete cuando el archivo sources.list (5) contiene referencias a más de una fuente. En este caso, apt-get (8) descarga la instancia listada más temprano en el archivo sources.list (5).

Un ejemplo de casos de uso para /etc/apt/preferencesarchivo:

Un ejemplo de forzar apt-geta seleccionar la versión disponible de un repositorio personalizado, en lugar del estándar de Ubuntu, puede ser la distribución "Linux Mint". Usan este preferencearchivo personalizado .

Paquete: *
Pin: liberar o = linuxmint
Prioridad de clavija: 700

Paquete: *
Pin: paquetes de origen. Linuxmint.com
Prioridad de clavija: 700

Paquete: *
Pin: lanzamiento o = Ubuntu
Prioridad de clavija: 500

Esto efectivamente les hace proporcionar paquetes cuando los tienen en sus repositorios. Pero si no los tienen, usan el repositorio estándar de Ubuntu.


Un ejemplo que se ejecuta apt-getdespués de establecer la máxima prioridad para el repositorio local

Solo quería instalar el kubuntu-desktop paquete sobre Ubuntu para probar KDE. (Olvidé eso, he establecido una preferencia usando el /etc/apt/preferencearchivo) . Tenía una iso del instalador alternativo kubuntu-12.04, así que pensé que podía usar eso.

(después de configurar correctamente la iso como fuente del repositorio) , corrí
sudo apt-get install kubuntu-desktop, luego me sorprendió ver la salida a continuación.

anwar @ edubuntu-lenovo: ~ $ sudo apt-get install kubuntu-desktop
Leyendo listas de paquetes ... Hecho
Construyendo árbol de dependencia       
Leyendo información del estado ... Hecho
Algunos paquetes no se pudieron instalar. Esto puede significar que tienes
solicitó una situación imposible o si está utilizando el inestable
distribución de que algunos paquetes requeridos aún no se han creado
o ha sido trasladado fuera de entrada.
La siguiente información puede ayudar a resolver la situación:

Los siguientes paquetes tienen dependencias insatisfechas:
 kubuntu-desktop: Depende: language-selector-kde pero no se instalará
                   Recomienda: amarok pero no se instalará
                   Recomienda: apturl-kde pero no se instalará
                   Recomienda: gdebi-kde pero no se instalará
                   Recomienda: gpgsm pero no se instalará
                   Recomienda: ibus-qt4 pero no se instalará
                   Recomienda: jockey-kde pero no se instalará
                   Recomienda: kdegraphics-strigi-plugins pero no se instalará
                   Recomienda: kdepim-wizards pero no se instalará
                   Recomienda: kpackagekit pero no se instalará
                   Recomienda: libreoffice-kde pero no se instalará
                   Recomienda: libreoffice-style-oxygen pero no se instalará
                   Recomienda: network-manager-pptp-kde pero no se instalará
                   Recomienda: plasma-widget-facebook pero no se instalará
                   Recomienda: plasma-widget-kimpanel pero no se instalará
                   Recomienda: usb-creator-kde pero no se instalará
E: Incapaz de corregir problemas, ha retenido paquetes rotos.

Me sorprendió el resultado. De repente, recuerdo que he establecido una preferencia ( por escribir esta respuesta ) /etc/apt/preferencepara establecer la máxima prioridad para mi repositorio local.

Entonces, ejecuté esto: apt-cache policy kubuntu-desktopla salida fue la siguiente:

anwar @ edubuntu-lenovo: ~ $ apt-cache policy kubuntu-desktop 
kubuntu-escritorio:
  Instalado: (ninguno)
  Candidato: 1.222.1kde47 ~ ppa2
  Tabla de versiones:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424) / precise / main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ preciso / main i386 Packages
     1.222.1kde47 ~ ppa2 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222.1 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

En este resultado, vemos que tanto el "cdrom" como el "repositorio principal preciso" tienen el número de versión 1.254 , mientras que el repositorio local tiene la versión 1.222.1kde47 ~ ppa2 , que es la versión inferior. Aunque, se colocan antes que los locales en el archivo sources.list, los paquetes locales tienen prioridad.

Para ver explícitamente que apt-getrealmente está intentando instalar desde uno local, ejecuté synapticy obtuve esto, lo que demuestra que el sistema Apt considera 1.222.1kde47 ~ ppa2 como la versión candidata para instalar.

ingrese la descripción de la imagen aquí

También apt-cache policy kubuntu-desktopmuestra las mismas cosas

anwar @ edubuntu-lenovo: ~ $ apt-cache policy kubuntu-desktop
kubuntu-escritorio:
  Instalado: (ninguno)
  Candidato: 1.222.1kde47 ~ ppa2
  Tabla de versiones:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424) / precise / main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ preciso / main i386 Packages
     1.222.1kde47 ~ ppa2 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222.1 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222 0
       Archivo 1001: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

Para resolver esto, eliminé el /etc/apt/preferencearchivo sudo rm /etc/apt/preference.

Luego corrió de nuevo esto de nuevo apt-cache policy kubuntu-desktop. solo viendo esta salida esperada.

anwar @ edubuntu-lenovo: ~ $ sudo rm / etc / apt / preferencias
anwar @ edubuntu-lenovo: ~ $ sudo apt-cache policy kubuntu-desktop
kubuntu-escritorio:
  Instalado: (ninguno)
  Candidato: 1.254
  Tabla de versiones:
     1.254 0
        500 cdrom: // Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424) / precise / main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ preciso / main i386 Packages
     1.222.1kde47 ~ ppa2 0
        Archivo 500: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222.1 0
        Archivo 500: / media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
     1.222 0
        Archivo 500: / media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

También ejecuté esto nuevamente. sudo apt-get install kubuntu-desktoppara ver el resultado a continuación:

......... Detalles innecesarios eliminados .........

0 actualizado, 213 recién instalado, 0 para eliminar y 150 no actualizado.
Necesita obtener 0 B / 89.6 MB de archivos.
Después de esta operación, se utilizarán 269 MB de espacio adicional en disco.
¿Quieres continuar [S / n]? 

Puedes consultar el resultado completo aquí

Entonces estoy bastante seguro de la parte de explicación.


Referencia 1: El manual de apt_preference

Referencia 2: Cómo mantener instalada una versión específica de paquetes

Anwar
fuente
1
+1 para la parte "¿Qué pasa si varias instancias de la misma versión" explica el comportamiento? Pero solo esperaré hasta el final de la semana, tal vez alguien tenga una mejor explicación. :)
Savvas Radevic
¿Debo agregar un ejemplo usando el repositorio local?
Anwar
Jesús ... quiero decir gracias por tu respuesta bien explicada, pero esto debería ser MUCHO más simple. ¿Por qué no se puede asignar una prioridad cuando se ejecuta apt-add-repository?
Adam Plocher,