Redefinir a seleção do dselect antes da instalação do pacote

Redefinir a seleção do dselect antes da instalação do pacote

Eu estava olhando a lista de pacotes com dselect, mas apertei Returnduas vezes por engano, confirmando e saindo da [S]electopção.

Quando vou para a [I]nstallopçã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 dselectde outro comando relacionado.)

EDITAR: (Adicionando um exemplo)

Eu tentei em outra máquina onde dselectestá instalado. Vamos supor que o pacote gnugonão esteja instalado (isso é apenas um exemplo).

  • Inicie delecte escolha [S]electobter a lista.
  • Pesquise gnugonesta lista (usando /, se você não estiver familiarizado com dselect).
  • 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 gnugonão rende absolutamente nada.
  • Comece dselectde novo, vá direto para [I]nstallnovamente, os pacotes ainda estarão selecionados para instalação.

Claro, posso voltar à [S]electlista, 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]nstallin dselecté visivelmente um front-end para apt-get install, mas não tenho certeza de onde ele tira sua seleção. Parece dpkg --get-selectionque não é isso. No que diz dselectrespeito, 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]nstallcardá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-installeddeixando os pacotes dizendo Status: install ok installednão afetados).

Responder1

Use o --set-selectionsargumento * para dpkg:

echo "<package-name> purge" | dpkg --set-selections

Você pode então usar apt-get dselect-upgradepara 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-selectionspara listar todas as seleções explícitas. Isso também mostrará o formato --set-selectionsnecessário.

Responder2

Acontece que dpkg --get-selectionsnã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-selectionspara 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.

informação relacionada