Debian Jessie sta installando troppi backport


9

Ho Debian Jessie e ho aggiunto backport (secondo queste istruzioni ):

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

(L'ho fatto per ottenere un kernel più recente, di cui avevo bisogno, per un po 'di hardware nel mio laptop.)

Le istruzioni dicono che non dovrebbe succedere nulla, a meno che non chieda esplicitamente un pacchetto di backport. es apt-get -t jessie-backports install "package".

Tuttavia ora mi sembra di avere un intero carico del mio sistema dai backport e un pacchetto non è stato installato, perché dipende da una versione esatta, di qualcosa che è stato aggiornato alle back-port.

Quindi la mia domanda:

  • Come posso prima interromperlo, in modo da non installare più backport?
  • Come rimuovo i backport esistenti?

Nota: viene visualizzato un elenco di pacchetti installati che provengono da backport (e nel formato a cui è possibile passare apt-get install, per qualche motivo l'inserimento sudo apt-get installdell'eco alla fine della pipeline non funziona):

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

Attenzione:

Alcuni pacchetti vengono installati automaticamente, quindi se li reinstalli tutti, questi pacchetti installati automaticamente verranno contrassegnati come installati manualmente. Quindi non rimosso quando non necessario.

Qualcuno ha qualche idea su come risolverlo?

Risposte:


10
  1. Prova ad aggiungere quanto segue a uno /etc/apt/apt.confo un file in /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Per rimuovere i backport esistenti, è necessario ottenere un elenco di quelli installati e della versione sostituita. Fortunatamente, queste informazioni possono essere estratte molto facilmente da/var/log/dpkg.log

ad esempio grep ' upgrade ' /var/log/dpkg.logti darà molte righe come le seguenti:

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

Questo dice che alle 11:06 del 15 febbraio, ho aggiornato python-numpy dalla versione 1: 1.11.0 ~ b2-1 alla versione 1: 1.11.0 ~ b3-1

Se volessi eseguire il downgrade alla versione precedente, avrei eseguito:

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

NOTA: in questo caso particolare, probabilmente non funzionerà perché eseguo debian sidaka, unstablequindi la vecchia versione probabilmente non è più disponibile nel repository deb. Se stai eseguendo jessiee stai reinstallando una versione jessie di un pacchetto come downgrade alla versione jessie-backports, funzionerà come previsto.

Allo stesso modo, se un pacchetto è stato rimosso lo si può trovare e la sua versione esatta da grep per removea /var/log/dpkg.log.


Il downgrade in blocco di molti pacchetti può essere ampiamente automatizzato utilizzando strumenti standard come awke grep. Ad esempio, se sai che gli aggiornamenti di jessie-backport installati sono stati tutti eseguiti in un determinato giorno (ad esempio, 15-02-2016), puoi eseguire il downgrade alle versioni precedenti con qualcosa del tipo:

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

(avanzamento riga e rientro aggiunti per evitare la barra di scorrimento orizzontale)

NOTA l'uso dell'opzione -d( --download-only). Eseguire nuovamente il comando e rimuovere tale opzione dopo aver verificato che apt-get installfarà ciò che si desidera e SOLO ciò che si desidera.

Vorrei anche raccomandare di eseguire solo la awkparte di quel comando prima da solo in modo da poter vedere un elenco di quali pacchetti e versioni verranno reinstallati.


1
per "ampiamente automatizzato" intendo che mentre funzionerà per lo più senza problemi, non sempre / non funzionerà perfettamente (a seconda dei pacchetti esatti coinvolti e delle loro linee dipendenti / raccomandate / conflitti / ecc.). Potrebbero essere presenti uno o due pacchetti che è necessario installare o disinstallare manualmente con apt-geto dpkg. Finché non sei nel panico, non c'è nulla di cui preoccuparsi. La maggior parte dei problemi con i sistemi di imballaggio sono causati dal panico e dalla reazione delle persone senza pensare .... prendila lentamente e pensa prima di agire.
Caso

Non dovrebbe aggiungere i nuovi pacchetti del kernel a backports @cas?
Rui F Ribeiro,

Non farebbe male ma non è necessario e il pinning è un po 'più complicato e difficile da correggere rispetto all'impostazione di Apt :: Default-Release. apt-getnon eseguirà il downgrade di un pacchetto già installato a meno che non lo si dichiari esplicitamente. E @richard ha detto che voleva installare i jessiepacchetti di default a meno che non avesse esplicitamente specificato jessie-backports- suppongo che il desiderio si applichi anche ai pacchetti del kernel.
Caso

ha detto che includeva backport per avere un nuovo kernel, probabilmente come me, per avere kernel 4 in jessie.
Rui F Ribeiro,

1
Immagino che le persone che usano stable+ stable-backportsprobabilmente si preoccupino molto di più del pin di me e di essersi impegnate per saperne di più. Tendo a funzionare unstablee mantenere i miei sistemi sincronizzati con l'ultimo sid abbastanza regolarmente (con extra occasionali da experimental), quindi ho poco bisogno di appuntamenti. L'unica volta che l'ho usato pesantemente è stato anni fa durante il passaggio a gnome3, quando non volevo che i miei pacchetti gnome2 venissero sostituiti - ricordo che mantenere un elenco in costante cambiamento di pacchetti da pin era una PITA. Da allora sono passato a xfce e ho eliminato lo gnomo.
Caso

1

Sembra che tu non abbia configurato correttamente /etc/apt/preferences. Quanto segue impedirà che qualsiasi cosa venga installata da jessie-backports si aspetti cosa gli dica di installare (come il kernel backported). Avrai comunque problemi se i pacchetti specificati richiedono altri pacchetti da backport che non sono elencati.

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

Se si desidera ottenere un elenco di pacchetti backport installati, è possibile utilizzare il seguente script (o parti di esso):

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

Se si desidera eseguire il downgrade di tutti i pacchetti elencati dallo script precedente, aggiungere quanto segue a /etc/apt/preferences:

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

Quindi eseguire:

sudo apt-get upgrade

1

Controlla la configurazione del tuo pin per apt in / etc / apt / preferenze e /etc/apt/preferences.d/

È possibile che tu abbia aggiunto una configurazione di pin personalizzata e te ne sia dimenticato? Questo è l'unico modo in cui riesco a pensare che farebbe preferire i backport come sembra farti. Altrimenti, sta semplicemente estraendo dipendenze, richieste dai pacchetti specificati.

I backport ufficiali sono già bloccati su un valore inferiore (100) rispetto a jessie nei pacchetti di backport File di rilascio nel repository backport. Non dovresti fare alcuna configurazione di apt per fare in modo che apt preferisca jessie a jessie-backport.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.