¿Cómo limito las actualizaciones que se instalan a las de un conjunto específico de repositorios? ¿Es esto posible?
¿Cómo limito las actualizaciones que se instalan a las de un conjunto específico de repositorios? ¿Es esto posible?
Respuestas:
La fijación es un proceso que le permite permanecer en una versión estable de Ubuntu (o cualquier otro sistema debian) mientras toma paquetes de una versión más reciente. - help.ubuntu.com
Puede deshabilitar las actualizaciones automáticas de ciertos repositorios sin eliminarlas por completo mediante aptpolíticas:
Para deshabilitar las actualizaciones automáticas del repositorio repo, agregue un archivo /etc/apt/preferences.d/repocon el siguiente contenido:
Package: *
Pin: release n=repo
Pin-Priority: 50
Lo que dará a todos los paquetes de este repositorio una prioridad menor que los paquetes ya instalados (que tienen 100).
Para obtener más información man apt_preferenceso consulte el Wiki de la comunidad de Ubuntu .
apt-cache policy package-name
release n=repono va a cachear a nadie
Puede especificar un lanzamiento con -topción. Como ejemplo, he agregado el siguiente repositorio /etc/apt/sources.listpara instalar la última versión de Iceweasel:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Como saben, hay un mismo paquete iceweaselen el repositorio oficial de Debian. Si quiero instalar Iceweasel desde esta versión específica, ejecuto:
apt-get install -t squeeze-backports iceweasel
de la página del manual de apt-get:
-t, --target-release, --default-release
This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
apt_preferences(5) manual page.
Creo que esta es una mejor solución.
ACTUALIZACIÓN : Como @SuB mencionó en el comentario, " -tespecifica la versión, no el nombre del repositorio. No hay un nombre de repositorio en Ubuntu (a diferencia de Linux basado en RedHat como RHEL, Fedora, CentOS, ...)".
apt-getmanual, -tespecifique el nombre de la versión no del repositorio. No hay un nombre de repositorio en Ubuntu (a diferencia de Linux basado en RedHat como RHEL, Fedora, CentOS, ...)
-t xenialFunciona para un solo paquete. pero todas sus dependencias aún se obtendrán de paquetes superiores
Debe fijar los repositorios desde los que no desea instalar con una prioridad inferior a 100. Lo que significa (de la apt_preferencepágina de manual)
100 <= P <500
hace que se instale una versión a menos que haya una versión disponible que pertenezca a otra distribución o la versión instalada sea más reciente
Y para seleccionar un repositorio para fijar, usaría campos del Releasearchivo de repositorios . Tales como archive, label, release, versionetc. Al especificar los valores de estos campos, se pueden seleccionar con precisión un repositorio y asignar su prioridad preferente a la misma. Consulte la página apt_preference para más detalles.
Antes de continuar, necesitamos saber algo importante sobre la fijación. Eso incluye
Campos de Releasearchivos y su asignación a apt-cache policysalida
Formato de archivos de preferencias de apt
Usar Releasecampos de archivos para establecer prioridad
Releasearchivo y apt-cache policysalidaDel artículo de Debian Wiki
Vería resultados de apt-cache policyestos
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
Los valores en estas líneas provienen de los Releasearchivos.
Descripción establece la descripción de un repositorio. Esto no se muestra en la apt-cache policysalida
Etiqueta es la etiqueta del repositorio. Muchos repositorios tienen etiquetas vacías. Se muestra l=<label>en la salida.
Origen esto habla sobre el origen del repositorio. El repositorio oficial de Ubuntu tiene Ubuntucomo valor. Se muestra como o=en la salida
Versión es la versión de una distribución. Son las 16.04 para Xenial. Se muestra como v=en la salida
Suite es lo mismo que Archive . De debian wiki es El nombre de la distribución de Debian a la que pertenecen (o están diseñados) los paquetes en este directorio, es decir, estable, de prueba o inestable. . Para Ubuntu, estos son release-updates, release-securityetc. Por ejemplo xenial-updates,, xenial-security. Se muestra en la salida como a=xenial, a=xenial-security. Los PPA usan solo el nombre de la versión para esto, es por eso que no ayudará mucho en Pinning.
El componente habla sobre el tema de las licencias. Es main, multiverse, restricted, universeen Ubuntu. En la salida se muestra como c=maino c=restrictedetc. La mayoría de los PPA se utilizan mainpara este campo, por lo que tampoco ayuda a fijar mucho.
La arquitectura se trata de la arquitectura del sistema operativo. Mostrado como b=i386o b=amd64en la salida
El nombre en clave es el nombre de lanzamiento de la distribución. Para 16.04 lo es xenial. Para 14.04 lo es trusty. Se muestra en la apt-cache policysalida como n=xenialo n=trusty. Es lo mismo para todos los repositorios para una sola distribución por lo general. Es por eso que no ayuda a fijar mucho.
La otra línea en la apt-cache policysalida que comienza originindica el origen de Internet del repositorio. También se puede usar para fijar. Pero no debe mezclarse con el campo de Releasearchivos Origin. Esos son diferentes.
Usaremos estos valores para anclar un repositorio.
Entonces, ¿cómo usamos la fijación 1 para restringir el repositorio?
Hay varias formas de controlar la fijación y solo un pequeño subconjunto es efectivo para Ubuntu. Sin embargo, una explicación detallada está más allá del alcance de la respuesta. Consulte la apt_preferencepágina de manual para esto.
Los archivos de preferencias pin o apt residen en la /etc/apt/preferences.dcarpeta. Cada fijación contiene tres líneas.
La primera línea comienza con Package:un nombre de paquete separado por comas. Se permiten expresiones regulares y globs
La segunda línea comienza con Pin:y se usa para apuntar a un conjunto de paquetes.
Si queremos anclar paquetes desde xenialmás alto xenial-updates, lo usaremos release a=xenial.
Si queremos fijar la versión 5.0, la usaremos version 5.0aquí. Se permiten patitas de globo.
O si queremos anclar paquetes desde el origen http://archive.ubuntu.com, usaremos origin "archive.ubuntu.com". Tenga en cuenta que no escribimos http://protocolo allí.
La tercera línea comienza con Pin-Priority:y su valor es un número. Lo que significa la prioridad de los elementos seleccionados anteriormente.
Releasecampos de archivos para establecer prioridadAquí hay un ejemplo
Package: *
Pin: release a=xenial
Pin-Priority: 1001
En este ejemplo, los paquetes de xenialarchivos tienen mayor prioridad que xenial-updatesy xenial-security.
Después de fijar, ejecutar un apt-cache policy nautilusprograma muestra que, de hecho, ha dado mayor prioridad a una versión inferior del xenialarchivo que a una versión superior del xenial-updatesarchivo. Fíjate en la Candidate:línea.
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Pero, si queremos dar prioridad a los paquetes provistos por PPA también, esto no funcionará. Porque los PPA usan el mismo nombre de archivo xenialde forma predeterminada. Por lo tanto, asignar una prioridad a a=xenialtambién se aplicará a esos paquetes. Por ejemplo (después de PPA habilitado),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ahora la versión candidata es de un PPA. Ambos paquetes del xenialarchivo del repositorio oficial de Ubuntu y el PPA tienen la misma prioridad 1001, porque ambos usan el mismo valor para el Archivearchivo de lanzamiento. Para anclar con éxito, necesitamos combinar más campos en el archivo Pin.
Para anclar paquetes desde un repositorio, necesitamos apuntarlo usando la información que se encuentra en el apt-cache policycomando. Acabamos de ver que a=xenialeso no ayudará a señalar un repositorio. Necesitamos usar múltiples campos juntos usando una coma en un archivo de preferencias para apuntar con precisión a un repositorio.
Por ejemplo, para evitar todos los paquetes de http://ppa.launchpad.net/oibaf/graphics-drivers/ppa, podemos usar
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Aquí estamos utilizando el valor del nombre en código, así como el Originvalor del PPA. (Aunque el valor del nombre en clave no se requiere aquí en realidad). A veces, el repositorio puede perder estos valores. En esos casos, se deben utilizar algunas otras técnicas. La salida de apt-cache policy libgl1-mesa-glxdice que funciona. Se redujo la prioridad de todos los paquetes de este PPA.
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Ignora el hecho de que es candidato. Esto sucedió porque ya está instalado en mi sistema . Verifique la prioridad a la derecha
Si queremos anclar un repositorio cuya información de lanzamiento falta, como este http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04, debemos usar otro método. Dado que ningún otro repositorio está usando ese origen, podemos usarlo originpara anclar este repositorio de manera segura .
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Nota 1: Este origen es el origen de Internet, no el que especifica el proveedor en el archivo de lanzamiento.
Nota 2: Pin-Priority número tiene un significado especial. Consulte apt_preferencela página del manual para más detalles.
La opción obvia es modificar /etc/apt/sources.listy comentar todos los demás repositorios, y luego ejecutar
apt-get update && apt-get upgrade && apt-get autoclean
Y luego eliminar comentarios de sources.list. Tal vez no sea la mejor manera, pero al menos las apt-getpáginas man no especifican ninguna forma de hacerlo.
En una nota relacionada, por ejemplo, el proceso de actualización de distribución de Ubuntu deshabilita todos los repositorios de terceros durante la actualización (y no solo ejecuta alguna opción para excluirlos temporalmente).