Restablecer la selección de dselect antes de la instalación del paquete

Restablecer la selección de dselect antes de la instalación del paquete

Estaba revisando la lista de paquetes con dselect, pero presioné Returndos veces por error, lo que hizo que confirmara y saliera de la [S]electopción.

Cuando voy a la [I]nstallopción, ahora me sugiere instalar una serie de paquetes nuevos que no quiero (y que no tienen nada que ver con lo que estaba buscando en primer lugar).

Dado que no he procedido con la instalación en sí, ¿hay alguna manera de restablecer la selección a lo que era antes de seleccionar nuevos paquetes, sin revisar la lista uno por uno y presionar -para cada paquete? (No importa si se realiza mediante dselectotro comando relacionado).

EDITAR: (Agregando un ejemplo)

Lo probé en otra máquina donde dselectestá instalado. Supongamos que el paquete gnugono está instalado (es sólo un ejemplo).

  • Inicie delecty elija [S]electobtener la lista.
  • Busque gnugoen esta lista (usando /, si no está familiarizado con dselect).
  • Selecciónelo con +.
  • Presione Returnpara validar las sugerencias y Returnnuevamente para validar volver al menú principal (el error que cometí).
  • Ir a [I]nstall. Ahora 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]? 
    
  • Aquí, elija no continuar ( n).

  • Abandonar dselect.
  • dpkg --get-selections | grep gnugono produce nada en absoluto.
  • Comience dselectde nuevo, vaya directamente de [I]nstallnuevo, los paquetes seguirán seleccionados para la instalación.

Por supuesto, puedo volver a la [S]electlista, buscar gnugoy presionar _para deseleccionarlo, pero en un caso más complejo, es posible que tenga que revisar la lista de nuevos paquetes uno por uno.

[I]nstallin dselectes visiblemente una interfaz para apt-get install, pero no estoy seguro de dónde obtiene su selección. Parece dpkg --get-selectionque no es así. En lo que a dselectmí respecta, me gustaría restablecerlo en un estado en el que todo lo creado con ***permanece en el estado en el que estaba, pero lo que ahora está marcado solo con **(y aún no está instalado) vuelve a __, sin tener que revisar manualmente la lista sugerida. desde el [I]nstallmenú.

EDITAR 2:

Esto está claramente relacionado con el contenido de /var/lib/dpkg/status, que contiene esta entrada:

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

Si cambio esto manualmente a Status: deinstall ok not-installed, desaparece de la selección en dselect(lo cual tiene sentido).

Lo que me gustaría es una forma general de convertir lo que dice Status: install ok not-installed( Status: deinstall ok not-installeddejando los paquetes que dicen Status: install ok installedno afectados).

Respuesta1

Utilice el --set-selectionsargumento * para dpkg:

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

Luego puede utilizar apt-get dselect-upgradepara aplicar su selección de paquete.


Si necesita encontrar los paquetes que se seleccionaron para instalar pero que aún no están instalados (para que pueda revertir esa selección), use esto:

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

Puedes ser un poco más sofisticado y volver a conectarlo a --set-selections, deseleccionando automáticamente todo lo que aún no esté instalado:

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

*También puede utilizar dpkg --get-selectionspara enumerar todas las selecciones explícitas. Esto también le mostrará el formato que --set-selectionsrequiere.

Respuesta2

Resulta que dpkg --get-selectionsno enumera lo que está marcado para instalación y aún no instalado, pero dpkg -l '*'sí, y comienza estas líneas con in.

Como resultado, la siguiente línea restablece estas selecciones:

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

Respuesta3

UsarAptitud'scapacidades de búsquedapara obtener la lista.

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

Pase la lista a dpkg --set-selectionspara marcarlos como a eliminar.

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

Aparte: bienvenido al siglo XXI, sugiero cambiar a Aptitude en lugar de Dselect.

información relacionada