¿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 apt
políticas:
Para deshabilitar las actualizaciones automáticas del repositorio repo
, agregue un archivo /etc/apt/preferences.d/repo
con 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_preferences
o consulte el Wiki de la comunidad de Ubuntu .
apt-cache policy package-name
release n=repo
no va a cachear a nadie
Puede especificar un lanzamiento con -t
opción. Como ejemplo, he agregado el siguiente repositorio /etc/apt/sources.list
para instalar la última versión de Iceweasel:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Como saben, hay un mismo paquete iceweasel
en 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, " -t
especifica 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-get
manual, -t
especifique 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 xenial
Funciona 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_preference
pá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 Release
archivo de repositorios . Tales como archive
, label
, release
, version
etc. 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 Release
archivos y su asignación a apt-cache policy
salida
Formato de archivos de preferencias de apt
Usar Release
campos de archivos para establecer prioridad
Release
archivo y apt-cache policy
salidaDel artículo de Debian Wiki
Vería resultados de apt-cache policy
estos
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 Release
archivos.
Descripción establece la descripción de un repositorio. Esto no se muestra en la apt-cache policy
salida
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 Ubuntu
como 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-security
etc. 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
, universe
en Ubuntu. En la salida se muestra como c=main
o c=restricted
etc. La mayoría de los PPA se utilizan main
para este campo, por lo que tampoco ayuda a fijar mucho.
La arquitectura se trata de la arquitectura del sistema operativo. Mostrado como b=i386
o b=amd64
en 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 policy
salida como n=xenial
o 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 policy
salida que comienza origin
indica el origen de Internet del repositorio. También se puede usar para fijar. Pero no debe mezclarse con el campo de Release
archivos 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_preference
página de manual para esto.
Los archivos de preferencias pin o apt residen en la /etc/apt/preferences.d
carpeta. 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 xenial
más alto xenial-updates
, lo usaremos release a=xenial
.
Si queremos fijar la versión 5.0, la usaremos version 5.0
aquí. 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.
Release
campos de archivos para establecer prioridadAquí hay un ejemplo
Package: *
Pin: release a=xenial
Pin-Priority: 1001
En este ejemplo, los paquetes de xenial
archivos tienen mayor prioridad que xenial-updates
y xenial-security
.
Después de fijar, ejecutar un apt-cache policy nautilus
programa muestra que, de hecho, ha dado mayor prioridad a una versión inferior del xenial
archivo que a una versión superior del xenial-updates
archivo. 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 xenial
de forma predeterminada. Por lo tanto, asignar una prioridad a a=xenial
tambié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 xenial
archivo del repositorio oficial de Ubuntu y el PPA tienen la misma prioridad 1001
, porque ambos usan el mismo valor para el Archive
archivo 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 policy
comando. Acabamos de ver que a=xenial
eso 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 Origin
valor 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-glx
dice 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 origin
para 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_preference
la página del manual para más detalles.
La opción obvia es modificar /etc/apt/sources.list
y 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-get
pá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).