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, apt
o synaptic
intente 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.list
archivo 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 synaptic
siempre 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.list
terminal (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 policy
muestra 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>
, apt
intenta 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_name
es 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.list
archivo.
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 policy
mostrando 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-get
comando. Dice "0 kb necesitan ser descargados".apt-cache policy
apt-cache policy
y vi que el repositorio local tiene mayor prioridad. Pero todavíaapt-get
estoy tratando de instalarlo desde internet. Creo que simplemente no es posible sin usar elsources.list
archivo.apt-cache policy
mostraba que la versión era la mismaRespuestas:
La respuesta corta:
Aquí está el archivo
/etc/apt/preferences
, que seapt-get
usa 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.list
archivo>Respuesta a la pregunta original:
No hay forma de asignar la máxima prioridad al repositorio local sin usar el
sources.list
archivo. 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.list
archivo, 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/preference
archivo para forzar a seleccionar / usar un.deb
archivo 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.list
archivo con el método mencionado anteriormente.Explicación:
Parece que todos entendimos mal el
apt_preference
propó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-get
usa para decidir, qué versión se debe seleccionar si hay muchas versiones de un solo paquete. (En este ejemplo,compiz-fusion-plugins-extra
tiene varias versiones.Este archivo dice
apt-get
que 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
xapps
con la versión1.0
en mi repositorio local, y este mismo paquetexapps
existe en el repositorio de Precise con una versión superior, por ejemplo2.0
,apt-get
preferiré la versión del repositorio local, es decir, la versión1.0
.Aquí está mi
/etc/apt/sources.list
archivoAunque, he enumerado el repositorio de precisión anteriormente en el archivo, no hace
apt-get
que seleccione el paquete de ese repositorio. Como se describe en el manualEntonces, la salida del comando
apt-cache policy compiz-fusion-plugins-extra
fue como se esperaba a continuaciónAquí, 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.list
archivo.Una ejecución de ejemplo de
apt-get
intentar instalarcompiz-fusion-plugins-extra
despué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/preferences
solo 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_preference
manualUn ejemplo de casos de uso para
/etc/apt/preferences
archivo:Un ejemplo de forzar
apt-get
a seleccionar la versión disponible de un repositorio personalizado, en lugar del estándar de Ubuntu, puede ser la distribución "Linux Mint". Usan estepreference
archivo 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-get
después de establecer la máxima prioridad para el repositorio localSolo quería instalar el
kubuntu-desktop
paquete sobre Ubuntu para probar KDE. (Olvidé eso, he establecido una preferencia usando el/etc/apt/preference
archivo) . 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.Me sorprendió el resultado. De repente, recuerdo que he establecido una preferencia ( por escribir esta respuesta )
/etc/apt/preference
para establecer la máxima prioridad para mi repositorio local.Entonces, ejecuté esto:
apt-cache policy kubuntu-desktop
la salida fue la siguiente: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-get
realmente está intentando instalar desde uno local, ejecutésynaptic
y 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-desktop
muestra las mismas cosasPara resolver esto, eliminé el
/etc/apt/preference
archivosudo rm /etc/apt/preference
.Luego corrió de nuevo esto de nuevo
apt-cache policy kubuntu-desktop
. solo viendo esta salida esperada.También ejecuté esto nuevamente.
sudo apt-get install kubuntu-desktop
para 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