パッケージのインストール前にdselectの選択をリセットする

パッケージのインストール前にdselectの選択をリセットする

でパッケージのリストを確認していましたdselectが、Return誤って を 2 回押してしまい、オプションが確定して終了してしまいました[S]elect

オプションに移動すると[I]nstall、不要な新しいパッケージ(最初に探していたものとはまったく関係のないパッケージ)をいくつかインストールするように提案されます。

インストール自体はまだ進めていないので、リストを 1 つずつ確認して-各パッケージを押さずに、新しいパッケージを選択する前の状態に選択をリセットする方法はありますか? ( または別の関連コマンドを介して実行されるかどうかは関係ありませんdselect。)

編集: (例を追加)

がインストールされている別のマシンで試してみましたdselect。パッケージがインストールされていないと仮定しましょうgnugo(これは単なる例です)。

  • 起動してリストを取得することをdelect選択します。[S]elect
  • gnugoこのリストでを検索します(/に慣れていない場合は を使用してくださいdselect)。
  • で選択します+
  • を押してReturn提案を確認し、Returnもう一度押してメイン メニューに戻ります (これは私が犯した間違いです)。
  • に移動します[I]nstall。次のように表示されます。

    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]? 
    
  • ここでは、続行しないことを選択します(n)。

  • やめるdselect
  • dpkg --get-selections | grep gnugoまったく何も生み出しません。
  • もう一度開始してdselect、もう一度直接進むと[I]nstall、パッケージはインストール用に選択されたままになります。

もちろん、[S]electリストに戻って を検索しgnugo、 を押して_選択を解除することもできますが、より複雑なケースでは、新しいパッケージ リストを 1 つずつ確認する必要があるかもしれません。

[I]nstalldselect明らかに のフロントエンドですapt-get installが、その選択をどこから取得するのかわかりません。 でdpkg --get-selectionはないようです。 に関する限り、 で作成されたものはすべて以前のままで、現在 のみ でマークされているもの(まだインストールされていないもの) は に戻るdselect状態にリセットしたいと思います。メニューからの推奨リストを手動で確認する必要はありません。*****__[I]nstall

編集2:

/var/lib/dpkg/statusこれは明らかに、次のエントリを含むのコンテンツに関連しています。

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

これを手動で に変更するとStatus: deinstall ok not-installed、 の選択範囲から消えますdselect(当然のことですが)。

私が欲しいのは、何を言ってStatus: install ok not-installedもそれを変換する一般的な方法ですStatus: deinstall ok not-installed(パッケージの言うことはStatus: install ok installed影響を受けません)。

答え1

--set-selections* 引数を使用して次の操作を行いますdpkg

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

その後、 を使用してapt-get dselect-upgradeパッケージの選択を適用できます。


インストール対象として選択されたがまだインストールされていないパッケージを見つける必要がある場合 (選択を元に戻すことができる場合)、次のコマンドを使用します。

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

もう少し工夫して、それを にパイプして戻すと--set-selections、まだインストールされていないものはすべて自動的に選択解除されます。

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

* を使用して、明示的に選択した項目をすべて一覧表示することもできますdpkg --get-selections。これにより、必要な形式も表示されます--set-selections

答え2

では、dpkg --get-selectionsインストール対象としてマークされていてまだインストールされていないものはリストされませんが、 ではdpkg -l '*'リストされ、これらの行は で始まりますin

その結果、次の行はこれらの選択をリセットします。

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

答え3

使用適性検索機能リストを取得します。

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

リストを に渡して、dpkg --set-selections削除対象としてマークします。

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

余談ですが、21 世紀へようこそ。Dselect ではなく Aptitude に切り替えることをお勧めします。

関連情報