¿Desea poder especificar repositorio durante el tiempo de ejecución, o debería ser más una cosa estática? Las dos respuestas a continuación suponen la última opción.
tshepang
Idealmente sería durante el tiempo de ejecución. Sin embargo, la opción estática es suficiente.
Ton van den Heuvel
2
Su rumbo y la ayuda real que solicita son diferentes.
Sundar
Respuestas:
29
Usar fijación
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).
Es una pena que la única respuesta de apt_preferences sea la última ...
Robert Siemer
¿Cómo saber qué versión es de qué repositorio?
Max N
2
@MaxN normalmente encontrarías esa información ejecutandoapt-cache policy package-name
Anwar
Esto no forzará un repositorio por no ser considerado durante la actualización. porque release n=repono va a cachear a nadie
Anwar
35
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, ...)".
Como puede ver en el 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, ...)
SuB
1
@SuB Sí, tienes razón! ¡Confundí el nombre del repositorio con el lanzamiento!
dibujante
-t xenialFunciona para un solo paquete. pero todas sus dependencias aún se obtendrán de paquetes superiores
Anwar
10
Respuesta corta
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.
Respuesta larga
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
1. Campos de Releasearchivo y apt-cache policysalida
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.
2. Formato de archivo pin
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.
3. Uso de Releasecampos de archivos para establecer prioridad
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.
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),
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.
Algunos ejemplos
Anclar un repositorio de PPA
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
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.
Ignora el hecho de que es candidato. Esto sucedió porque ya está instalado en mi sistema . Verifique la prioridad a la derecha
Anclar un repositorio cuando falta información de lanzamiento
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 .
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).
Respuestas:
Usar fijación
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: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 .fuente
apt-cache policy package-name
release n=repo
no va a cachear a nadiePuede 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:Como saben, hay un mismo paquete
iceweasel
en el repositorio oficial de Debian. Si quiero instalar Iceweasel desde esta versión específica, ejecuto:de la página del manual de apt-get:
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, ...)".fuente
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 superioresRespuesta corta
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)Y para seleccionar un repositorio para fijar, usaría campos del
Release
archivo de repositorios . Tales comoarchive
,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.Respuesta larga
Antes de continuar, necesitamos saber algo importante sobre la fijación. Eso incluye
Campos de
Release
archivos y su asignación aapt-cache policy
salidaFormato de archivos de preferencias de apt
Usar
Release
campos de archivos para establecer prioridad1. Campos de
Release
archivo yapt-cache policy
salidaDel artículo de Debian Wiki
Vería resultados de
apt-cache policy
estosLos 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
salidaEtiqueta 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 comoo=
en la salidaVersión es la versión de una distribución. Son las 16.04 para Xenial. Se muestra como
v=
en la salidaSuite 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 ejemploxenial-updates
,,xenial-security
. Se muestra en la salida comoa=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 comoc=main
oc=restricted
etc. La mayoría de los PPA se utilizanmain
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
ob=amd64
en la salidaEl nombre en clave es el nombre de lanzamiento de la distribución. Para 16.04 lo es
xenial
. Para 14.04 lo estrusty
. Se muestra en laapt-cache policy
salida comon=xenial
on=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 comienzaorigin
indica el origen de Internet del repositorio. También se puede usar para fijar. Pero no debe mezclarse con el campo deRelease
archivosOrigin
. 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.2. Formato de archivo pin
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 globsLa segunda línea comienza con
Pin:
y se usa para apuntar a un conjunto de paquetes.Si queremos anclar paquetes desde
xenial
más altoxenial-updates
, lo usaremosrelease 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
, usaremosorigin "archive.ubuntu.com"
. Tenga en cuenta que no escribimoshttp://
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.3. Uso de
Release
campos de archivos para establecer prioridadAquí hay un ejemplo
En este ejemplo, los paquetes de
xenial
archivos tienen mayor prioridad quexenial-updates
yxenial-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 delxenial
archivo que a una versión superior delxenial-updates
archivo. Fíjate en laCandidate:
línea.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 aa=xenial
también se aplicará a esos paquetes. Por ejemplo (después de PPA habilitado),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 prioridad1001
, porque ambos usan el mismo valor para elArchive
archivo de lanzamiento. Para anclar con éxito, necesitamos combinar más campos en el archivo Pin.Algunos ejemplos
Anclar un repositorio de PPA
Para anclar paquetes desde un repositorio, necesitamos apuntarlo usando la información que se encuentra en el
apt-cache policy
comando. Acabamos de ver quea=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 usarAquí 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 deapt-cache policy libgl1-mesa-glx
dice que funciona. Se redujo la prioridad de todos los paquetes de este PPA.Ignora el hecho de que es candidato. Esto sucedió porque ya está instalado en mi sistema . Verifique la prioridad a la derecha
Anclar un repositorio cuando falta información de lanzamiento
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 usarloorigin
para anclar este repositorio de manera segura .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. Consulteapt_preference
la página del manual para más detalles.fuente
Una alternativa basada en GUI sería abrir el centro de software y seleccionar editar> fuentes de software ...
todo lo que necesita hacer es desmarcar los repositorios de los que no desea actualizaciones.
Espero que esto ayude
fuente
La opción obvia es modificar
/etc/apt/sources.list
y comentar todos los demás repositorios, y luego ejecutarY luego eliminar comentarios de
sources.list
. Tal vez no sea la mejor manera, pero al menos lasapt-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).
fuente
Otra opción de GUI es elegir el origen en el administrador de paquetes Synaptic.
fuente