web-dev-qa-db-ja.com

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

バックグラウンドで実行されている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では避けるべきことだと理解しています。

21
alex_reader

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

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

出典:

11
Marco Sulla

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

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

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

3
Coward

Lucas Malorによって引用された リソースの1つ で、解決策に近いように見えるpopulatorと呼ばれるスクリプトを見つけました。パッケージ選択変数をすべてのパッケージのリストに設定した場合

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
2
Ortomala Lokni

出力を受け取り、ファイル名をスペースで区切った巨大な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ステートメントを追加することです。これは、おそらく最初のインラインとインラインで実行して、必要なファイルを作成することができます。

この変更により、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を使用すると、インストールが完了しました(最終フェーズでした)。次にこれを実行して、すべてが正しく再インストールされるようにしました。

または https://superuser.com/questions/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」を実行してください。

1

Aptitudeを使用する場合、それを行うための簡単かつ迅速な方法があります。

Sudo aptitude reinstall '~i'

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

1
goetzc

aptを使用してこれを行うのは非常に簡単です。

_apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y_

_apt list --installed_部分は、推測したとおりのことを行います。 _|_文字は、aptコマンドの標準出力をcutコマンドの標準入力にパイプします。 _cut --delimiter=/_部分は、cutコマンドに_/_を区切り文字として使用するように指示し、_--fields=1_はcutに最初のフィールドを使用するように指示します。つまり、 _/_コマンドの出力に表示される最初の_apt list --installed_の前のテキスト。この場合、cutコマンドの結果は、_apt list --installed_コマンドから不要な追加情報をすべて除いた、インストールされたすべてのパッケージのリストです。

次の_|_は、cutコマンドの標準出力(インストールされたすべてのパッケージのリスト)をxargsコマンドの標準入力にパイプし、次に_apt reinstall -y_現在インストールされているパッケージごとに。

:apt構成によっては、_apt reinstall -y_の部分で、現在インストールされている正確なバージョンではなく、既存のパッケージの更新がインストールされる場合があります。

0
toputnal