O Debian Jessie está instalando muitos backports

9

Eu tenho o Debian Jessie e adicionei backports (de acordo com estas instruções ):

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

(Fiz isso para obter um kernel mais recente, conforme necessário, para algum hardware no meu laptop.)

As instruções dizem que nada deve acontecer, a menos que eu solicite explicitamente um pacote com backport. por exemplo apt-get -t jessie-backports install "package".

No entanto, agora pareço ter uma carga completa do meu sistema a partir de backports, e um pacote foi desinstalado, porque depende de uma versão exata, de algo que foi atualizado para as portas traseiras.

Então, minha pergunta:

  • Como eu o paro primeiro, para que não haja mais backports instalados?
  • Como removo os backports existentes?

Nota: isso obtém uma lista de pacotes instalados que são de backports (e no formato que pode ser passado para apt-get install, por algum motivo, colocar o sudo apt-get installeco no final do pipeline não 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

Cuidado:

Alguns dos pacotes são instalados automaticamente, portanto, se você reinstalá-los todos, esses pacotes instalados automaticamente serão marcados como instalados manualmente. Portanto, não é removido quando não é necessário.

Alguém tem alguma idéia de como resolver isso?

ctrl-alt-delor
fonte

Respostas:

10
  1. Tente adicionar o seguinte a um /etc/apt/apt.confou a um arquivo em /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Para remover os backports existentes, é necessário obter uma lista de quais foram instalados e qual versão eles substituíram. Felizmente, essa informação pode ser extraída com muita facilidade de/var/log/dpkg.log

por exemplo grep ' upgrade ' /var/log/dpkg.log, fornecerá muitas linhas como as seguintes:

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

Isso diz que, às 11:06 do dia 15 de fevereiro, atualizei o python-numpy da versão 1: 1.11.0 ~ b2-1 para a versão 1: 1.11.0 ~ b3-1

Se eu quisesse fazer o downgrade para a versão anterior, execute:

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

NOTA: neste caso em particular, provavelmente não funcionará porque eu executo o debian sidaka, unstableportanto a versão antiga provavelmente não está mais disponível no repositório deb. Se você estiver executando jessiee reinstalando uma versão jessie de um pacote como um downgrade para a versão jessie-backports, funcionará conforme o esperado.

Da mesma forma, se um pacote foi removido, você pode encontrá-lo e sua versão exata grepping for removein /var/log/dpkg.log.


O downgrade em massa de muitos pacotes pode ser amplamente automatizado usando ferramentas padrão como awke grep. Por exemplo, se você sabe que as atualizações do jessie-backports instaladas foram todas feitas em um dia específico (por exemplo, 15/02/2016), você pode fazer o downgrade para as versões anteriores com algo como:

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

(avanço de linha e recuo adicionados para evitar a barra de rolagem horizontal)

NOTA o uso da opção -d( --download-only). Execute o comando novamente e remova essa opção depois de verificar se o apt-get installfará o que você deseja e SOMENTE o que você deseja.

Também recomendo executar apenas a awkparte desse comando primeiro, para que você possa ver uma lista exata de quais pacotes e versões serão reinstalados.

cas
fonte
1
por 'amplamente automatizado', quero dizer que, embora funcione sem problemas, nem sempre funcionará perfeitamente (dependendo dos pacotes exatos envolvidos e das suas linhas depende / recomenda / conflitos / etc). Pode haver um ou dois pacotes que você precisa instalar ou desinstalar manualmente com apt-getou dpkg. Contanto que você não entre em pânico, não há com o que se preocupar. A maioria dos problemas com os sistemas de embalagem é causada por pessoas em pânico e reagindo sem pensar ... vá devagar e pense antes de agir.
16286
Ele não deveria fixar os novos pacotes do kernel no backports @cas?
Rui F Ribeiro
Não faria mal, mas não é necessário, e fixar é um pouco mais complicado e difícil de acertar do que apenas definir o Apt :: Default-Release. apt-getnão fará o downgrade de um pacote já instalado, a menos que você o solicite explicitamente. E @richard disse que queria instalar jessiepacotes por padrão, a menos que especificasse explicitamente jessie-backports- presumo que o desejo também se aplique aos pacotes do kernel.
16286
ele disse que incluiu backports para ter um novo kernel, provavelmente como eu, para ter o kernel 4 em jessie.
Rui F Ribeiro
1
Acho que as pessoas que usam stable+ stable-backportsprovavelmente se importam muito mais com a fixação do que eu e se esforçaram para aprender mais sobre isso. Tenho a tendência de executar unstablee manter meus sistemas sincronizados regularmente com o sid mais recente (com extras ocasionais de experimental), por isso tenho pouca necessidade de fixar. A única vez em que o usei intensamente foi anos atrás, durante a transição para o gnome3, quando eu não queria que meus pacotes do gnome2 fossem substituídos - lembro que manter a lista de pacotes em constante mudança para fixar era uma PITA. Desde então, mudei para o xfce e limpei o gnome.
16286
1

Parece que você não configurou corretamente /etc/apt/preferences. O seguinte impedirá que qualquer coisa seja instalada a partir do jessie-backports, espere o que é necessário para instalar (como o kernel do backport). Você ainda terá problemas se os pacotes especificados exigirem outros pacotes de backports que não estão 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

Se você deseja obter uma lista de pacotes com portabilidade instalada, use o seguinte script (ou partes dele):

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 você deseja fazer o downgrade de qualquer pacote listado pelo script acima, acrescente o seguinte a /etc/apt/preferences:

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

Então corra:

sudo apt-get upgrade
NeoH4x0r
fonte
1

Verifique sua configuração de fixação quanto ao apt em / etc / apt / preferências e /etc/apt/preferences.d/

É possível que você tenha adicionado uma configuração de fixação personalizada e tenha esquecido? Essa é a única maneira que consigo pensar que faria o apt preferir backports, como parece estar fazendo com você. Caso contrário, é apenas extrair dependências - exigidas pelos pacotes que você especificou.

Os backports oficiais já estão mais baixos (100) do que jessie no arquivo Release de pacotes com backport no repositório de backports. Você não deve ter que fazer nenhuma configuração do apt para fazer o apt preferir jessie sobre jessie-backports.

figtrap
fonte