Ubuntuユーザーは時々、apt
またはapt-get
、形式は次のようになります。
The package some-package needs to be reinstalled, but I can't find an archive for it.
壊れたパッケージが重要で多くの依存関係がある場合でも、このエラーを再現して安全に修正する方法を見つけられるように、このエラーの原因を知りたいです。このビットのAPT ソースコード少しは手がかりになるかもしれませんが、パッケージがエラーの原因となるステータスを取得する方法がわかりません。
(Ubuntu MATE 17.10) システムでテストするときにこのエラーを生成するにはどうすればよいですか?
これは、最近の Ask Ubuntu の質問そして、この誤りについての質問を締め切ることに対する私の長年の不快感はApt/Synaptic はパッケージを再インストールする必要がありますが、アーカイブが見つかりません、その回答を使用して、dpkg --force-all
問題のあるパッケージを削除します。匿名のフィードバックこの解決策は多くのユーザーにとって有効であることが示唆されていますが、使用することで--force-all
後で問題が発生しないかどうか、またはこの方法を使用して APT などの重要なパッケージを削除するのが良い考えであるかどうかは自信がありません。
答え1
「Apt/Synaptic はパッケージを再インストールする必要がありますが、そのアーカイブが見つかりません」というエラーは、特定の原因が特定できない場合があります。
このエラーが最もよく見られるのは、Ubuntu をあるバージョンから別のバージョンにアップグレードするときです。
注記: Ubuntuはapt-getからaptに移行中ですが、この記事ではapt-getを使用しています。詳細については、およびを参照してくださいman apt
。https://www.debian.org/doc/manuals/debian-reference/ch02.en.html
このエラーの最も一般的な原因は、ユーザーがパッケージをインストールした後、.debを削除した場合です。通常は、sudo apt-get clean
http://manpages.ubuntu.com/manpages/zesty/man8/apt-get.8.html
クリーン
clean clears out the local repository of retrieved package files. It removes everything but the lock file from /var/cache/apt/archives/ and /var/cache/apt/archives/partial/
その後、ある時点で、dpkg --reconfigure
ユーザーによって、またはアップグレードによって、またはある時点でユーザーがパッケージを再インストールしようとして再インストールされるsudo apt-get --reinstall foo
か、何らかのバリエーションによって、が呼び出されます。
パッケージが削除された(まれ)、リポジトリがシステムから削除された、またはアップグレードされてパッケージが新しいリポジトリに存在しないなどの理由で、apt がリポジトリ内の .deb を見つけられない場合は、「Apt/Synaptic はパッケージを再インストールする必要がありますが、そのアーカイブが見つかりません」というエラーが表示されます。
しかし、エラーは他の原因から発生する可能性があります。
dpkgのマニュアルページから関連セクションを引用します(http://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.html詳細については )
パッケージに関する情報 dpkg は、利用可能なパッケージに関する有用な情報を保持しています。情報は、状態、選択状態、フラグの 3 つのクラスに分かれています。これらの値は、主に dselect を使用して変更することを目的としています。
パッケージの状態
not-installed The package is not installed on your system. config-files Only the configuration files of the package exist on the system. half-installed The installation of the package has been started, but not completed for some reason. unpacked The package is unpacked, but not configured. half-configured The package is unpacked and configuration has been started, but not yet completed for some reason. triggers-awaited The package awaits trigger processing by another package. triggers-pending The package has been triggered. installed The package is unpacked and configured OK.
行動
-i, --install package-file... Install the package. If --recursive or -R option is specified, package-file must refer to a directory instead. Installation consists of the following steps: 1. Extract the control files of the new package. 2. If another version of the same package was installed before the new installation, execute prerm script of the old package. 3. Run preinst script, if provided by the package. 4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored. 5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed. 6. Configure the package. See --configure for detailed information about how this is done.
--パッケージを構成...|-a|--pending
Configure a package which has been unpacked but not yet configured. If -a or --pending is given instead of package, all unpacked but unconfigured packages are configured. To reconfigure a package which has already been configured, try the dpkg-reconfigure(8) command instead. Configuring consists of the following steps: 1. Unpack the conffiles, and at the same time back up the old conffiles, so that they can be restored if something goes wrong. 2. Run postinst script, if provided by the package. /var/lib/dpkg/status Statuses of available packages. This file contains information about whether a package is marked for removing or not, whether it is installed or not, etc. See section INFORMATION ABOUT PACKAGES for more info.
マニュアルページが tl;dr の場合 -> インストールの一環として、 .deb / dpkg / apt はインストール前 / インストール後のスクリプトやその他の機能を実行します。これらのインストール / 削除スクリプトがさまざまな理由で失敗した場合、パッケージは「半分インストール済み」(またはインストールされていない / インストール済み以外の状態) としてマークされます。そのクリーンでない状態では、「Apt/Synaptic はパッケージを再インストールする必要がありますが、そのアーカイブが見つかりません」というエラーが表示されることもあります。この例では、問題はアーカイブが見つからないことではなく、インストール前 / インストール後のスクリプトの問題であり、それらを再実行しても解決できません。したがって、エラーは時々特定されません。
壊れた荷物の管理方法
まず、適切な PPA / リポジトリ (たとえば、universe) または必要なリポジトリが有効になっていることを確認して、依存関係を修正してみてください。
そして悪名高い
sudo apt-get install -f
読む出力とエラー メッセージを確認し、ヘルプが必要な場合はコマンドと出力をここに投稿してください。
再構成を試みる
sudo dpkg --configure -a
これにより、設定スクリプトが実行されます。-a ではなくパッケージを指定することもできますが、問題が発生している場合は -a の方が役立ちます。
読む出力とエラー メッセージを確認し、ヘルプが必要な場合はコマンドと出力をここに投稿してください。
失敗したスクリプトを確認し、可能であればスクリプト内のエラー/問題を修正してください。
問題のあるパッケージを、必要であれば強制的に削除してみてください。重要なパッケージや、さらに悪いことに重要なパッケージのセットを強制的に削除してしまう可能性があるため、ここでは非常に注意する必要があります。次のコマンドは、丁寧なものからあまり丁寧でない、そして完全に強制的なものまであります。順番に試してください。
sudo dpkg --remove $broken_package sudo dpkg --remove --force-remove-reinstreq $broken_package sudo dpkg --remove --force-all $broken_package
これらのいずれかが機能する場合は、 を実行します。また、および/またはも
sudo apt-get update && sudo apt-get upgrade
実行する必要がある可能性があります。sudo apt-get -f install
sudo dpkg --configure -a
それが失敗した場合は、パッケージを手動で削除する必要があります。これには、システム上のすべてのコンポーネントを見つけて手動で削除することが必要になる場合があります。
以下の手順で
dpkg情報を削除します(上記参照)
cd /var/lib/dpkg/info sudo rm -i package_name*
ここで必要以上に削除しないように注意してください。
最後に問題のあるパッケージを削除します
sudo dpkg --remove --force-remove-reinstreq package_name
これでaptが使えるようになるはずです
sudo apt-get update sudo apt-get install -f sudo apt-get upgrade
必要な場合にのみ、システムに残っているファイルを見つけて手動で削除します。これは手動の手順であり、設定ファイルや
/etc
マニュアル ページ、共有データが含まれる場合があります。残っている可能性のあるファイルを特定するには、find または locate を使用します。当然のことながら、システム ファイルを削除するときは細心の注意を払う必要があります。理解できないものや、そのコマンドが何を行うかを理解せずに使用しないものは削除しないでください
rm -Rf
。オプションで確認を求めるrm -i
ので、おそらくこれがより適切です。-i
この問題を再現する
/var/lib/dpkg/info
このエラーメッセージは、任意のパッケージのdpkgステータスファイルを手動で編集し、ステータスを半分インストール済みに変更することで再現できる場合があります。
sudo nano /var/lib/dpkg/info/some_package
ステータス行を次のように編集します。
ステータス: purge reinstreq が半分インストールされました
次に、 を実行してみてくださいapt-get
。
それでも問題が解決しない場合は、PPA からパッケージをインストールし、apt-get clean を実行して、PPA を削除してから、パッケージを再インストールまたは再構成してみてください。
長い投稿で申し訳ありませんが、この複雑なエラー メッセージ「Apt/Synaptic はパッケージを再インストールする必要がありますが、アーカイブが見つかりません」の原因と解決方法についての洞察が得られることを願っています。