Debian Jessie está instalando demasiados backports

Debian Jessie está instalando demasiados backports

Tengo Debian Jessie y he agregado backports (segúnestas instrucciones):

echo "deb http://http.debian.net/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list

(Hice esto para obtener un kernel más nuevo, ya que lo necesitaba, o para algún hardware en mi computadora portátil).

Las instrucciones dicen que no debería suceder nada, a menos que solicite explícitamente un paquete respaldado. p.ej apt-get -t jessie-backports install "package".

Sin embargo, ahora parece que tengo una carga completa de mi sistema desde los backports y un paquete se ha desinstalado, porque depende de una versión exacta, de algo que se actualizó a los backports.

Entonces mi pregunta:

  • ¿Cómo lo detengo primero para que no se instalen más backports?
  • ¿Cómo elimino los backports existentes?

Nota: esto obtiene una lista de paquetes instalados que provienen de backports (y en un formato al que se puede pasar apt-get install, por alguna razón colocar sudo apt-get installecho en lugar del final de la canalización no funciona):

cat /var/log/dpkg.log.1 |grep -v linux | grep -v xserver | grep -v firmware | grep "status installed" | grep bpo | cut -d" " -f 5 | cut -d: -f 1 | xargs -i{} -n1 bash -c "dpkg-query -s {} >/dev/null && echo {}" | sed -r -e "s~.*~\0/jessie~" | xargs echo

Precaución:

Algunos de los paquetes se instalan automáticamente, por lo que si los reinstala todos, estos paquetes instalados automáticamente se marcarán como instalados manualmente. Por lo tanto, no se elimina cuando no es necesario.

¿Alguien tiene alguna idea sobre cómo resolver esto?

Respuesta1

  1. Intente agregar lo siguiente a uno /etc/apt/apt.confo un archivo en /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Para eliminar los backports existentes, necesitará obtener una lista de cuáles se instalaron y qué versión reemplazaron. Afortunadamente, esta información se puede extraer muy fácilmente de/var/log/dpkg.log

por ejemplo, grep ' upgrade ' /var/log/dpkg.logle dará muchas líneas como las siguientes:

2016-02-15 11:06:32 upgrade python-numpy:amd64 1:1.11.0~b2-1 1:1.11.0~b3-1

Esto dice que a las 11:06 am del 15 de febrero, actualicé python-numpy de la versión 1:1.11.0~b2-1 a la versión 1:1.11.0~b3-1.

Si quisiera bajar a la versión anterior, ejecutaría:

apt-get install python-numpy=1:1.11.0~b2-1

NOTA: en este caso particular, probablemente no funcionará porque ejecuto Debian, sidpor unstablelo que la versión anterior probablemente ya no esté disponible en el repositorio de Deb. Si está ejecutando jessiey reinstalando una versión jessie de un paquete como una versión anterior a la versión jessie-backports, funcionará como se esperaba.

De manera similar, si se eliminó un paquete, puede encontrarlo y su versión exacta buscando removeen /var/log/dpkg.log.


La degradación masiva de muchos paquetes se puede automatizar en gran medida utilizando herramientas estándar como awky grep. Por ejemplo, si sabe que todas las actualizaciones de jessie-backports que instaló se realizaron en un día en particular (por ejemplo, 2016-02-15), puede cambiar a las versiones anteriores con algo como:

 apt-get -d -u install $(awk '/2016-02-15 ..:..:.. upgrade / {print $4 "=" $5}'
    /var/log/dpkg.log)

(Se agregaron salto de línea y sangría para evitar la barra de desplazamiento horizontal)

NOTA el uso de la opción -d( --download-only). Vuelva a ejecutar el comando y elimine esa opción después de haber verificado que hará apt-get installlo que quiera, y SÓLO lo que quiera.

También recomendaría ejecutar awkprimero solo la parte de ese comando para que pueda ver una lista exacta de qué paquetes y versiones se reinstalarán.

Respuesta2

Parece que no lo has configurado correctamente /etc/apt/preferences. Lo siguiente evitará que se instale algo desde jessie-backports y espere lo que le indique que se instale (como el kernel respaldado). Aún tendrá problemas si los paquetes especificados requieren otros paquetes de backports que no figuran en la lista.

Package: *
Pin: release n=jessie-backports
Pin-Priority: -1

Package: *
Pin: release n=jessie
Pin-Priority: 1000

# this will allow you to not have to use '-t jessie-backports install'
Package: linux-doc linux-headers-amd64 linux-image-amd64 linux-source
Pin: release n=jessie-backports
Pin-Priority: 1000

Si desea obtener una lista de los paquetes respaldados instalados, puede utilizar el siguiente script (o partes del mismo):

chmod a+x name_of_script ./name_of_script > name_of_output_file

#!/bin/bash
RELEASES="jessie-backports"

echo  "Searching for installed packages from" >&2
echo $RELEASES | sed s/^/" * "/ | sed s/\|/"\n * "/g >&2

for package in $(dpkg -l | grep -i ^ii | awk '{print $2}')
do
check=$( apt-cache policy $package 2>&1 | grep -i -A 1 "[*]" | egrep $RELEASES )
if [ "$check" == "" ] ; then
 echo -ne "." >&2
else
 echo -ne "#" >&2
 echo
 apt-cache policy $package
fi
done
echo >&2
echo

Si desea degradar alguno de los paquetes enumerados en el script anterior, agregue lo siguiente a /etc/apt/preferences:

Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000

Entonces corre:

sudo apt-get upgrade

Respuesta3

Verifique su configuración de fijación para apt en /etc/apt/preferences y /etc/apt/preferences.d/

¿Es posible que haya agregado una configuración de fijación personalizada y se haya olvidado de ella? Esa es la única forma que se me ocurre que haría que apt prefiera los backports como parece estar haciéndole a usted. De lo contrario, solo se trata de extraer dependencias, que requieren los paquetes que especificó.

Los backports oficiales ya están fijados por debajo (100) que jessie en el archivo de lanzamiento de paquetes backport en el repositorio de backports. No debería tener que realizar ninguna configuración adecuada para que apt prefiera jessie a jessie-backports.

información relacionada