Estaba revisando la lista de paquetes con dselect
, pero presioné Returndos veces por error, lo que hizo que confirmara y saliera de la [S]elect
opción.
Cuando voy a la [I]nstall
opció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 dselect
otro comando relacionado).
EDITAR: (Agregando un ejemplo)
Lo probé en otra máquina donde dselect
está instalado. Supongamos que el paquete gnugo
no está instalado (es sólo un ejemplo).
- Inicie
delect
y elija[S]elect
obtener la lista. - Busque
gnugo
en esta lista (usando /, si no está familiarizado condselect
). - 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 gnugo
no produce nada en absoluto.- Comience
dselect
de nuevo, vaya directamente de[I]nstall
nuevo, los paquetes seguirán seleccionados para la instalación.
Por supuesto, puedo volver a la [S]elect
lista, buscar gnugo
y 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]nstall
in dselect
es visiblemente una interfaz para apt-get install
, pero no estoy seguro de dónde obtiene su selección. Parece dpkg --get-selection
que no es así. En lo que a dselect
mí 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]nstall
menú.
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-installed
dejando los paquetes que dicen Status: install ok installed
no afectados).
Respuesta1
Utilice el --set-selections
argumento * para dpkg
:
echo "<package-name> purge" | dpkg --set-selections
Luego puede utilizar apt-get dselect-upgrade
para 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-selections
para enumerar todas las selecciones explícitas. Esto también le mostrará el formato que --set-selections
requiere.
Respuesta2
Resulta que dpkg --get-selections
no 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-selections
para 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.