Réinitialisez la sélection dselect avant l'installation du package

Je regardais à travers la list des packages avec dselect , mais appuyé sur Retour deux fois par erreur, confirmant ainsi et quittant l'option [S]elect .

Quand je vais à l'option [I]nstall , il est maintenant suggéré d'installer un certain nombre de nouveaux packages que je ne veux pas (et qui n'ont rien à voir avec ce que je cherchais en premier lieu).

Puisque je n'ai pas procédé à l'installation elle-même, est-il possible de réinitialiser la sélection avant de sélectionner de nouveaux packages, sans passer par la list un par un et en appuyant sur - pour chaque package? (Peu importe si c'est fait via dselect ou via une autre command associée.)

EDIT: (Ajout d'un exemple)

J'ai essayé sur une autre machine où dselect est installé. Supposons que le package gnugo n'est pas installé (c'est juste un exemple).

  • Lancer delect et choisir [S]elect d'get la list.
  • Recherchez gnugo dans cette list (en utilisant / , si vous n'êtes pas familier avec dselect ).
  • Sélectionnez-le avec + .
  • Appuyez sur Retour pour valider les suggestions et revenir à nouveau pour valider revenir au menu principal (l'erreur que j'ai faite).
  • Aller à [I]nstall . Il va maintenant dire:

     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]? 
  • Ici, choisissez de ne pas continuer ( n ).

  • Quittez dselect .
  • dpkg --get-selections | grep gnugo dpkg --get-selections | grep gnugo ne cède rien.
  • Lancez à nouveau dselect , allez directement à [I]nstall , les packages seront toujours sélectionnés pour l'installation.

Bien sûr, je peux returnner dans la list [S]elect , searchr gnugo , appuyer sur _ pour le désélectionner, mais dans un cas plus complexe, il se peut que vous deviez parcourir la list des nouveaux packages un par un.

[I]nstall dans dselect est visiblement un frontal pour apt-get install , mais je ne suis pas sûr d'où il tire sa sélection. Il semble dpkg --get-selection n'est-ce pas. En ce qui concerne dselect , je voudrais réinitialiser dans un état où tout ce qui a été fait avec *** rest, mais ce qui est maintenant marqué avec seulement ** (et pas encore installé) remonte à __ , sans avoir pour passer manuellement à travers la list suggérée dans le menu [I]nstall .

EDIT 2:

Ceci est clairement lié au contenu de /var/lib/dpkg/status , qui contient cette input:

 Package: gnugo Status: install ok not-installed Priority: optional Section: games 

Si je change cela manuellement en Status: deinstall ok not-installed , il disparaît de la sélection dans dselect (ce qui a du sens).

Ce que je voudrais est une façon générale de tourner ce qui est dit Status: install ok not-installed dans Status: deinstall ok not-installed (en laissant les packages disant Status: install ok installed non affecté).

Utilisez l'argument --set-selections * pour dpkg :

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

Vous pouvez ensuite utiliser apt-get dselect-upgrade pour appliquer votre sélection de packageages.


Si vous devez find les packages qui ont été sélectionnés pour l'installation mais pas encore installés (afin de pouvoir inverser cette sélection), utilisez ceci:

 dpkg --get-selections | awk '{ if ($2=="install") print $1}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" 

Vous pouvez get un peu plus sophistiqué et canaliser dans les --set-selections , désélectionnant ainsi automatiquement tout ce qui n'est pas déjà installé:

 dpkg --get-selections | awk '{ if ($2=="install") print $1,"deinstall"}' | grep -vF "$(dpkg -l | awk '/^ii/ {print $2}')" | dpkg --set-selections 

* Vous pouvez également utiliser dpkg --get-selections pour listr toutes les sélections explicites. Cela vous montrera également le format --set-selections .

Utilisez les capacités de search d' Aptitude pour get la list.

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

Passez la list à dpkg --set-selections pour les marquer comme devant être supprimés.

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

En plus: bienvenue au 21ème siècle, je suggère de passer à Aptitude au lieu de Dselect.

Il s'avère que dpkg --get-selections n'indique pas ce qui est marqué pour l'installation et pas encore installé, mais dpkg -l '*' fait, et commence ces lignes avec in .

Par conséquent, la ligne suivante réinitialise ces sélections:

 dpkg -l '*' | grep '^in ' | awk '{ print $2 " deinstall" }' | dpkg --set-selections