すべてのDebianパッケージの再インストール


19

バックグラウンドで実行中のdpkgプロセスを誤って強制終了しました。すべてが正常であることを確認するために、すべてのパッケージを再インストールしたいと思います。

まず、すべてのパッケージのリストを取得して再インストールしようとしました

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)

しかし、次のようなメッセージがあります:

E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.

apt-get -f install成功せずに試しました。

最後の手段として、チェックサムに失敗したすべてのプログラムを再インストールしました。

dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a

すべてを再インストールするにはどうすればよいですか?

編集:問題は解決しました。問題は別のものでした(コメントを参照)。しかし、Debianでは避けるべきものだと理解しています。


1
最近、パッケージをインストールしようとしたときにクラッシュしました。再起動してそのパッケージを再インストールしようとすると、「E:dpkg is interrupted、you need to run 'dpkg --configure -a' to need the problem。」というメッセージが表示されました。そのコマンドを実行すると、そのパッケージとその構成ファイルが削除されました。その後、パッケージを最初からインストールすることができました。そのコマンドを試してみてください。
embedded.kyle

何もしなかったので、何も壊れていないと思います。ドライバーの問題が解決したかどうかを後で確認します。
alex_reader

1
すべてのパッケージを再インストールする==本当に悪い考えです。(a)それはほとんど常に不必要です(b)おそらく失敗します(c)システムが本当にひどく混乱している場合は、再インストールしてください。実際に表示される問題を修正するだけです。
ファヒームミタ

回答:


9

私はそれをテストしなかったことを思い出して、これを試してください:

dpkg --get-selections > selections
sudo dpkg --clear-selections
sudo dpkg --set-selections < selections
sudo apt-get --reinstall dselect-upgrade

ソース:


私の問題は完全に異なっていました:私は正しいカーネル(!)を起動していませんでした。私が望んだことをするように思えるので、あなたの答えを受け入れます(しかし、テストされていません)。
alex_reader

これは機能せず、システムを完全に破壊します。3行目でaptがアンインストールされるため、後ですべてを再インストールすることはできません。
rkjnsn

@rkjnsn:答えを更新し、動作するかどうかを確認します。
マルコ・スッラ

1
選択ファイルにデータが入力されていますが、これを実行しようとしても何も再インストールされていません:pi @ prodpi〜$ sudo apt-get --reinstall dselect-upgradeパッケージリストの読み取り中... 、0は新しくインストールされ、0は削除され、0はアップグレードされません。何か案が?
andig

コードが機能しないと思う理由の1つは、コマンドdpkg --get-selectionsリストもパッケージを削除するためです。
Ortomala Lokni

2

念のため、各パッケージを再インストールしみてください。

for i in $(cat list.log); do apt-get install --reinstall "$i"; done

すべての質問オプションに「はい」と答えることもできます。


cat:list.log:そのようなファイルまたはディレクトリはありません
-IgorGanapolsky

2
@IgorGanapolsky dpkg --get-selections > list.log最初に実行します。
-QwertyChouskie

2
list.log質問から取られます。
スティーブンキット

2

リソースの1ルーカスMalor私は解決策の近くにあるように思わポピュレータというスクリプトを発見したことにより、引用。パッケージ選択変数をすべてのパッケージのリストに設定した場合

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

その後、スクリプトを実行してすべてのパッケージを再インストールできますが、システムにはおそらくいくつかの問題があります。最初に仮想マシンでテストすることをお勧めします。

上記のリンクのスクリプトのバリアントを次に示します。

#!/bin/bash
#
# Script to pre-populate apt-get proxy for faster later downloads.
# It uses apt-get and wget to pull all the specified packages.
#

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "You're not root, are you?" 1>&2
   exit 1
fi

# Specify wanted packages
PKGLIST="exaile" 

# Clears out the local repository of retrieved package files
apt-get clean

# Resynchronize the package index files from their sources
apt-get update

# Re-install specified packages at the newest version. 
apt-get install --reinstall $PKGLIST

特定のパッケージを再インストールできないというエラーが表示された場合、次のコマンドを実行して再試行します。

sudo apt-get -y autoremove

1

代わりにこれを試してください。出力を取得し、ファイル名をスペースで区切った1つの巨大な行にします。

dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log awk '$1=$1' ORS=' ' list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

元の投稿への唯一の変更は、2番目のawkステートメントを追加することです。これはおそらく、最初のawkステートメントとインラインで実行して、必要なファイルを作成できます。

この変更により、apt-getはパッケージと、最初にインストールされなかった欠落している依存関係を正しく再ダウンロードし、順番に再インストールします。

インライン化すると、次のようになります。

dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log

そして、あなたが本当にシステムに正しいパッケージ(または最新のもの)があることを確認し、aptキャッシュをきれいにして、更新してからすべてのファイルを再ダウンロードします(キャッシュにあるものだけが必要な場合は最初の2つのステップをスキップできます再インストール):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

アップグレードしたシステムに、ハングアップのある2k以上のパッケージがインストールされていました。dpkg --configure -aを使用してインストールを終了しました(最終段階でした)。次に、これを実行して、すべてを正しく再インストールしました。

または/superuser/298912/reinstall-debian-while-keeping-installed-packages-and-dataで述べたように:

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)

Xまたはお気に入りのウィンドウマネージャーの一部のコンポーネントは再インストールが気に入らない場合があるため、再インストールする前に必ず「init 2」を実行してください。


IFSを変更していない限り、引用符で囲ま$(cat file)れていない空白はトークン化され、ファイルが改行またはスペースで区切られていてもまったく同じ結果が得られます。--reinstall役立つかもしれませんが、この前にすでに2回与えられました。
-dave_thompson_085

0

Aptitudeを使用する場合、簡単で迅速な方法があります。

sudo aptitude reinstall '~i'

現在インストールされているすべてのパッケージが再インストールされます。


-1

RPMを使用する場合、パッケージデータベースで破損が発生した場合、このデータベースを再構築するオプションがあり、基本的に再インストールを行う必要がなくなります。ここであるユーザーが指摘したように、これはDebianでによって行われますdpkg --configure -a


1
の役割dpkg --configure -aは、すべてのアンパックおよび未構成のパッケージを構成することです。manページを参照してくださいdpkgdpkg-reconfigureしてもdebian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html
Ortomala Lokni
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.