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

6

Eu estava olhando a lista de pacotes com dselect , mas pressionei Return duas vezes por engano, confirmando assim e saindo da opção [S]elect .

Quando eu vou para a opção [I]nstall , agora está sugerindo instalar vários novos pacotes que eu não quero (e que nada têm a ver com o que eu estava procurando em primeiro lugar).

Como não procedi com a própria instalação, existe uma maneira de redefinir a seleção para o que era antes de eu selecionar novos pacotes, sem passar pela lista um por um e pressionar - para cada pacote? (Não importa se é feito via dselect ou via outro comando relacionado.)

EDIT: (Adicionando um exemplo)

Já experimentei outra máquina em que o dselect está instalado. Vamos supor que o pacote gnugo não esteja instalado (isso é apenas um exemplo).

  • Abra delect e escolha [S]elect para obter a lista.
  • Pesquise gnugo nesta lista (usando / , se você não estiver familiarizado com dselect ).
  • Selecione com + .
  • Pressione Retornar para validar as sugestões e Retornar novamente para validar voltar ao menu principal (o erro que cometi).
  • Vá para [I]nstall . Agora vai dizer:

    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, escolha não continuar ( n ).

  • Saia de dselect .
  • dpkg --get-selections | grep gnugo não gera nada.
  • Inicie o dselect novamente, vá direto para [I]nstall novamente, os pacotes ainda serão selecionados para instalação.

Claro, eu posso voltar para a lista [S]elect , procurar por gnugo , pressionar _ para desmarcá-la, mas em um caso mais complexo, você pode ter que passar pelo 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 é selecionado. Parece dpkg --get-selection não é isso. Quanto a dselect , gostaria de redefini-la em um estado em que tudo o que ficou com *** permanece, mas o que está marcado agora com apenas ** (e ainda não instalado) retorna a __ , sem ter que percorrer manualmente a lista sugerida no menu [I]nstall .

EDIT 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 isso manualmente para Status: deinstall ok not-installed , ele desaparecerá da seleção em dselect (o que faz sentido).

O que eu gostaria é de uma maneira geral de transformar o que diz Status: install ok not-installed em Status: deinstall ok not-installed (deixando os pacotes dizendo Status: install ok installed não afetado).

    
por Bruno 10.07.2012 / 20:41

3 respostas

2

Acontece que dpkg --get-selections não lista o que está marcado para instalação e ainda não está instalado, mas dpkg -l '*' faz 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
    
por 11.07.2012 / 03:07
4

Use o argumento --set-selections * para dpkg :

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

Você pode usar apt-get dselect-upgrade para aplicar sua seleção de pacotes.

Se você precisar encontrar os pacotes que foram selecionados para instalação, mas ainda não instalados (para 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 canalizar isso 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 que o --set-selections exige.

    
por 10.07.2012 / 21:42
2

Use Aptidão 's capacidade de pesquisa para obter a lista.

aptitude -F '%p' search '~ainstall !~i'

Passe a lista para dpkg --set-selections para marcá-los como removidos.

aptitude -F '%p deinstall' search '~ainstall !~i' | dpkg --set-selections

Além do bem-vindo ao século 21, sugiro mudar para o Aptitude em vez do Dselect.

    
por 11.07.2012 / 03:09