Eu tenho Debian Jessie e adicionei backports (de acordo comestas 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, ou para algum hardware em meu laptop.)
As instruções dizem que nada deve acontecer, a menos que eu solicite explicitamente um pacote backportado. por exemplo apt-get -t jessie-backports install "package"
.
No entanto, agora parece que tenho uma carga completa do meu sistema de backports, e um pacote foi desinstalado, porque depende de uma versão exata, de algo que foi atualizado para backports.
Então minha pergunta:
- Como faço para interrompê-lo primeiro, para que não haja mais backports instalados?
- Como faço para remover os backports existentes?
Nota: isso obtém uma lista de pacotes instalados que são de backports (e em formato que pode ser passado para apt-get install
, por algum motivo, colocar sudo apt-get install
no lugar de echo 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ê reinstalar todos eles, 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?
Responder1
Tente adicionar o seguinte a
/etc/apt/apt.conf
um arquivo em/etc/apt/apt.conf.d
:APT::Default-Release "jessie";
Para remover os backports existentes, você precisará obter uma lista de quais foram instalados e qual versão eles substituíram. Felizmente, esta informação pode ser extraída facilmente 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 11h06 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, executaria:
apt-get install python-numpy=1:1.11.0~b2-1
NOTA: neste caso específico, provavelmente não funcionará porque eu executo o debian, sid
também conhecido como, unstable
então a versão antiga provavelmente não está mais disponível no repositório deb. Se você estiver executando jessie
e reinstalando uma versão jessie de um pacote como um downgrade para a versão jessie-backports, ele funcionará conforme o esperado.
Da mesma forma, se um pacote foi removido, você pode encontrá-lo e sua versão exata digitando grepping for remove
in /var/log/dpkg.log
.
O downgrade em massa de muitos pacotes pode ser amplamente automatizado usando ferramentas padrão como awk
e grep
. Por exemplo, se você sabe que as atualizações do jessie-backports que você instalou foram todas feitas em um determinado dia (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 barra de rolagem horizontal)
NOTA o uso da opção -d
( --download-only
). Execute novamente o comando e remova essa opção depois de verificar se ele apt-get install
fará o que quiser e SOMENTE o que quiser.
Eu também recomendaria executar awk
primeiro apenas a parte desse comando para que você possa ver uma lista exata de quais pacotes e versões serão reinstalados.
Responder2
Parece que você não configurou corretamente /etc/apt/preferences
. O seguinte impedirá que qualquer coisa seja instalada a partir de jessie-backports, espere o que diz para instalar (como o kernel backportado). Você ainda terá problemas se os pacotes especificados exigirem outros pacotes de backports que não estejam 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 backportados instalados, você pode usar 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, anexe o seguinte a /etc/apt/preferences
:
Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000
Então corra:
sudo apt-get upgrade
Responder3
Verifique sua configuração de fixação do apt em /etc/apt/preferences e /etc/apt/preferences.d/
É possível que você tenha adicionado uma configuração de fixação personalizada e esquecido dela? Essa é a única maneira que consigo pensar que faria com que o apt preferisse backports como parece estar fazendo com você. Caso contrário, será apenas extrair dependências - exigidas pelos pacotes que você especificou.
Os backports oficiais já estão fixados abaixo (100) do que jessie no arquivo Release dos pacotes backportados no repositório de backports. Você não deve ter que fazer nenhuma configuração do apt para fazer com que o apt prefira jessie em vez de jessie-backports.