Setzen Sie die dselect-Auswahl vor der Paketinstallation zurück

Setzen Sie die dselect-Auswahl vor der Paketinstallation zurück

Ich habe die Paketliste mit durchgesehen dselect, aber Returnversehentlich zweimal gedrückt, wodurch die [S]electOption bestätigt und beendet wurde.

Wenn ich die Option aufrufe [I]nstall, wird mir nun die Installation einer Reihe neuer Pakete vorgeschlagen, die ich nicht haben möchte (und die nichts mit dem zu tun haben, wonach ich ursprünglich gesucht habe).

Da ich die Installation selbst noch nicht durchgeführt habe, gibt es eine Möglichkeit, die Auswahl auf den Stand vor der Auswahl neuer Pakete zurückzusetzen, ohne die Liste einzeln durchzugehen und -für jedes Paket auf zu klicken? (Ob dies über oder über einen anderen verwandten Befehl erfolgt, spielt keine Rolle dselect.)

BEARBEITEN: (Ein Beispiel hinzufügen)

Ich habe es auf einem anderen Computer versucht, auf dem dselectes installiert ist. Nehmen wir an, das Paket gnugoist nicht installiert (das ist nur ein Beispiel).

  • Starten Sie es delectund wählen Sie, [S]electob Sie die Liste abrufen möchten.
  • Suchen Sie gnugoin dieser Liste nach (verwenden Sie /, wenn Sie mit nicht vertraut sind dselect).
  • Wählen Sie es mit aus +.
  • Drücken Sie Return, um die Vorschläge zu bestätigen, und drücken Sie Returnerneut, um zum Hauptmenü zurückzukehren (das ist mein Fehler).
  • Gehen Sie zu [I]nstall. Es wird nun angezeigt:

    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]? 
    
  • Wählen Sie hier, nicht fortzufahren ( n).

  • Aufhören dselect.
  • dpkg --get-selections | grep gnugobringt überhaupt nichts.
  • Starten Sie dselecterneut, gehen Sie direkt [I]nstallerneut zu, die Pakete werden weiterhin zur Installation ausgewählt.

Natürlich kann ich zur [S]electListe zurückkehren, nach suchen gnugound drücken, _um die Auswahl aufzuheben. In komplexeren Fällen müssen Sie die Liste mit den neuen Paketen jedoch möglicherweise einzeln durchgehen.

[I]nstallin dselectist offensichtlich ein Frontend für apt-get install, aber ich bin nicht sicher, woher es seine Auswahl bekommt. Es scheint, dpkg --get-selectiondass es nicht so ist. Was betrifft dselect, würde ich es gerne in einen Zustand zurücksetzen, in dem alles, was mit erstellt wurde, ***so bleibt, wie es war, aber was jetzt nur mit markiert ist **(und noch nicht installiert ist), geht zurück zu __, ohne dass ich die vorgeschlagene Liste im Menü manuell durchgehen muss [I]nstall.

BEARBEITEN 2:

Dies hängt offensichtlich mit dem Inhalt von zusammen /var/lib/dpkg/status, das folgenden Eintrag enthält:

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

Wenn ich dies manuell auf ändere Status: deinstall ok not-installed, verschwindet es aus der Auswahl in dselect(was Sinn macht).

Was ich möchte, ist eine allgemeine Möglichkeit, alles, was gesagt wird, Status: install ok not-installedin „umzuwandeln Status: deinstall ok not-installed“ (wobei die Aussage der Pakete davon Status: install ok installedunberührt bleibt).

Antwort1

Verwenden Sie das --set-selectionsArgument * für Folgendes dpkg:

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

Anschließend können Sie apt-get dselect-upgrademit Ihre Paketauswahl übernehmen.


Wenn Sie die Pakete suchen müssen, die zur Installation ausgewählt, aber noch nicht installiert wurden (damit Sie diese Auswahl rückgängig machen können), verwenden Sie Folgendes:

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

Sie können es etwas raffinierter gestalten und es zurück in leiten --set-selections, wodurch automatisch alles abgewählt wird, was noch nicht installiert ist:

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

*Sie können auch verwenden, dpkg --get-selectionsum alle expliziten Auswahlen aufzulisten. Dadurch wird Ihnen auch das --set-selectionserforderliche Format angezeigt.

Antwort2

Es stellt sich heraus, dpkg --get-selectionsdass nicht aufgelistet wird, was zur Installation markiert und noch nicht installiert ist, sondern dpkg -l '*'dass diese Zeilen mit beginnen in.

Daher werden diese Auswahlen durch die folgende Zeile zurückgesetzt:

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

Antwort3

VerwendenEignung'SSuchfunktionenum die Liste zu erhalten.

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

Übergeben Sie die Liste an, dpkg --set-selectionsum sie als zu entfernend zu markieren.

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

Abgesehen davon: Willkommen im 21. Jahrhundert, ich schlage vor, von Dselect zu Aptitude zu wechseln.

verwandte Informationen