Eu estava olhando a lista de pacotes com dselect
, mas apertei Returnduas vezes por engano, confirmando e saindo da [S]elect
opção.
Quando vou para a [I]nstall
opção, agora ela sugere a instalação de uma série de novos pacotes que não quero (e que não têm nada a ver com o que eu estava procurando).
Como não continuei com a instalação em si, existe uma maneira de redefinir a seleção para o que estava antes de selecionar os novos pacotes, sem passar pela lista um por um e pressionar -
cada pacote? (Não importa se isso é feito por meio dselect
de outro comando relacionado.)
EDITAR: (Adicionando um exemplo)
Eu tentei em outra máquina onde dselect
está instalado. Vamos supor que o pacote gnugo
não esteja instalado (isso é apenas um exemplo).
- Inicie
delect
e escolha[S]elect
obter a lista. - Pesquise
gnugo
nesta lista (usando /, se você não estiver familiarizado comdselect
). - Selecione-o com +.
- Pressione Returnpara validar as sugestões e Returnnovamente para validar para voltar ao menu principal (o erro que cometi).
Vá para
[I]nstall
. Agora dirá:Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed gnugo:i386 libgpm2:i386 libncurses5:i386 libreadline6:i386 libtinfo5:i386 0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. Need to get 1,926 kB of archives. After this operation, 9,634 kB of additional disk space will be used. Do you want to continue [Y/n]?
Aqui, opte por não continuar (
n
).- Desistir
dselect
. dpkg --get-selections | grep gnugo
não rende absolutamente nada.- Comece
dselect
de novo, vá direto para[I]nstall
novamente, os pacotes ainda estarão selecionados para instalação.
Claro, posso voltar à [S]elect
lista, procurar por gnugo
, pressionar _para desmarcá-lo, mas em um caso mais complexo, talvez seja necessário percorrer a lista de novos pacotes um por um.
[I]nstall
in dselect
é visivelmente um front-end para apt-get install
, mas não tenho certeza de onde ele tira sua seleção. Parece dpkg --get-selection
que não é isso. No que diz dselect
respeito, gostaria de redefini-lo para um estado em que tudo o que foi feito ***
permanece como estava, mas o que agora está marcado com only **
(e ainda não instalado) volta para __
, sem ter que passar manualmente pela lista sugerida do [I]nstall
cardápio.
EDITAR 2:
Isso está claramente relacionado ao conteúdo de /var/lib/dpkg/status
, que contém esta entrada:
Package: gnugo
Status: install ok not-installed
Priority: optional
Section: games
Se eu alterar manualmente para Status: deinstall ok not-installed
, ele desaparecerá da seleção dselect
(o que faz sentido).
O que eu gostaria é de uma maneira geral de transformar tudo o que diz Status: install ok not-installed
( Status: deinstall ok not-installed
deixando os pacotes dizendo Status: install ok installed
não afetados).
Responder1
Use o --set-selections
argumento * para dpkg
:
echo "<package-name> purge" | dpkg --set-selections
Você pode então usar apt-get dselect-upgrade
para aplicar sua seleção de pacote.
Se você precisar encontrar os pacotes que foram selecionados para instalação, mas ainda não instalados (para poder reverter essa seleção), use isto:
dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')"
Você pode ficar um pouco mais sofisticado e canalizá-lo de volta para --set-selections
, desmarcando automaticamente qualquer coisa que ainda não esteja instalada:
dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections
*Você também pode usar dpkg --get-selections
para listar todas as seleções explícitas. Isso também mostrará o formato --set-selections
necessário.
Responder2
Acontece que dpkg --get-selections
não lista o que está marcado para instalação e ainda não instalado, mas dpkg -l '*'
lista e inicia essas linhas com in
.
Como resultado, a linha a seguir redefine essas seleções:
dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections
Responder3
UsarAptidãoderecursos de pesquisapara obter a lista.
aptitude -F '%p' search '~ainstall !~i'
Passe a lista para dpkg --set-selections
para marcá-los como a serem removidos.
aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections
À parte: bem-vindo ao século 21, sugiro mudar para Aptitude em vez de Dselect.