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

apt-getcomando. Dice "0 kb necesitan ser descargados".apt-cache policyapt-cache policyy vi que el repositorio local tiene mayor prioridad. Pero todavíaapt-getestoy tratando de instalarlo desde internet. Creo que simplemente no es posible sin usar elsources.listarchivo.apt-cache policymostraba que la versión era la mismaRespuestas:
La respuesta corta:
Aquí está el archivo
/etc/apt/preferences, que seapt-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.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:
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:
Usando el
/etc/apt/sources.listarchivo, debe colocar su línea de repositorio local en la parte superior de este archivo. como el de abajoY 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!Y el muy importante está en el tercer párrafo.
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ónAquí está el archivo
/etc/apt/preferences, que seapt-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.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ón1.0en mi repositorio local, y este mismo paquetexappsexiste en el repositorio de Precise con una versión superior, por ejemplo2.0,apt-getpreferiré la versión del repositorio local, es decir, la versión1.0.Aquí está mi
/etc/apt/sources.listarchivoAunque, 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 manualEntonces, la salida del comando
apt-cache policy compiz-fusion-plugins-extrafue como se esperaba a continuaciónanwar @ 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 / PackagesAquí, la versión candidata es
0.9.5.94-0ubuntu1, (que está en el repositorio local), no0.9.7.0~bzr9-0ubuntu6 0, que está en el repositorio de precises. aunque el de los precises figuraba primero en elsources.listarchivo.Una ejecución de ejemplo de
apt-getintentar instalarcompiz-fusion-plugins-extradespués de establecer la máxima prioridad en el repositorio local.¡¡¡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_preferencemanualUn 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 estepreferencearchivo personalizado .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 localSolo quería instalar el
kubuntu-desktoppaquete 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 / PackagesEn 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.También
apt-cache policy kubuntu-desktopmuestra las mismas cosasanwar @ 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 / PackagesPara resolver esto, eliminé el
/etc/apt/preferencearchivosudo 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 / PackagesTambién ejecuté esto nuevamente.
sudo apt-get install kubuntu-desktoppara ver el resultado a continuació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
fuente