Debian Jessie está instalando demasiados backports

9

Tengo Debian Jessie y he agregado backports (de acuerdo con estas 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, según lo necesitaba, o para algún hardware en mi computadora portátil).

Las instrucciones dicen que no debe pasar nada, a menos que solicite explícitamente un paquete con respaldo. por ej apt-get -t jessie-backports install "package".

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

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 los paquetes instalados que son de backports (y en formato al que se puede pasar apt-get install, por alguna razón sudo apt-get installno funciona el eco al final de la canalización):

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?

ctrl-alt-delor
fuente

Respuestas:

10
  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, deberá obtener una lista de los que 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, entonces ejecutaría:

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

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

Del mismo modo, si se ha eliminado un paquete, puede encontrarlo y su versión exacta haciendo clic removeen /var/log/dpkg.log.


La degradación masiva de muchos paquetes puede automatizarse en gran medida utilizando herramientas estándar como awky grep. Por ejemplo, si sabe que las actualizaciones de jessie-backports que instaló se realizaron en un día en particular (por ejemplo, 15/02/2016), 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)

(avance de línea y sangrado agregado para evitar la barra de desplazamiento horizontal)

TENGA EN CUENTA 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 apt-get installhará lo que quiera y SOLO lo que quiera.

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

cas
fuente
1
por "en gran medida automatizado" quiero decir que, si bien en su mayoría funcionará sin problemas, no siempre / no siempre se ejecutará perfectamente (dependiendo de los paquetes exactos involucrados y sus líneas depende / recomienda / conflictos / etc.). Puede haber uno o dos paquetes que debe instalar o desinstalar manualmente con apt-geto dpkg. Mientras no entre en pánico, no hay nada de qué preocuparse. La mayoría de los problemas con los sistemas de empaque son causados ​​por personas que entran en pánico y reaccionan sin pensar ... tómelo con calma y piense antes de actuar.
cas
¿No debería anclar los nuevos paquetes de kernel a backports @cas?
Rui F Ribeiro
No dolería, pero no es necesario, y la fijación es bastante más complicada y difícil de hacer que solo configurar Apt :: Default-Release. apt-getno degradará un paquete ya instalado a menos que se lo indique explícitamente. Y @richard dijo que quería instalar jessiepaquetes de manera predeterminada a menos que especificara explícitamente jessie-backports, supongo que el deseo también se aplica a los paquetes del kernel.
cas
dijo que incluyó backports para tener un nuevo kernel, probablemente como yo, para tener el kernel 4 en jessie.
Rui F Ribeiro
1
Supongo que las personas que usan stable+ stable-backportsprobablemente se preocupan mucho más por la fijación que yo y se han esforzado por aprender más al respecto. Tiendo a ejecutar unstabley mantener mis sistemas sincronizados con el último sid con bastante regularidad (con extras ocasionales experimental), por lo que tengo poca necesidad de fijarlos. La única vez que lo usé mucho fue hace años, durante la transición a gnome3, cuando no quería que mis paquetes de gnome2 fueran reemplazados; recuerdo que mantener la lista constantemente cambiante de paquetes para fijar era una PITA. Desde entonces he cambiado a xfce y he purgado gnome.
cas
1

Parece que no has configurado correctamente /etc/apt/preferences. Lo siguiente evitará que algo se instale desde jessie-backports espere lo que le dice que instale (como el kernel compatible). Aún tendrá problemas si los paquetes especificados requieren otros paquetes de puertos no listados.

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 paquetes con backport instalados, puede usar el siguiente script (o partes de él):

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 cualquiera 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
NeoH4x0r
fuente
1

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

¿Es posible que hayas agregado una configuración de fijación personalizada y te hayas olvidado de ella? Esa es la única forma en que puedo pensar que haría que prefiera los backports como parece que le está haciendo a usted. De lo contrario, solo se trata de extraer dependencias, que requieren los paquetes que especificó.

Los backports oficiales ya están fijados más bajos (100) que jessie en el archivo Release de paquetes backported en el repositorio de backports. No debería tener que hacer ninguna configuración apta para hacer que apt prefiera jessie sobre jessie-backports.

trampa de fig
fuente