依存関係を削除せずにdebを削除する方法


43

私は、最新バージョンのインストールしたいのboto私は経由して行います、python setup.py install

しかし、古いバージョンを削除しようとすると、次のパッケージも削除されます。

apt-get remove python-boto
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  cloud-init cloud-utils euca2ools python-boto

パッケージマネージャーにbotoを削除するよう指示し、aptが不足している依存関係を修正しようとしないように、外部(またはそのようなもの)にインストール済みとしてマークする方法を教えてください。


マキシム、ありがとう。


<code> sudo dpkg --remove python-boto </ code>を試しましたか?
dkuntz2

回答:


16

equivsユーティリティを使用してダミーの.debパッケージを作成できます。ファイルをインストールせずに依存関係を提供します。次に、を使用して現在インストールされているパッケージをダミーバージョンに置き換えますdpkg -i fake.deb


60

apt-getやaptitudeではなく、dpkgを直接使用します。

sudo dpkg -r --force-depends "packagename-version"

1
正しいが、aptを使用して何かをインストールしようとすると、dpkgで削除したパッケージが見つからないことが検出され、再インストールされます。aptを再インストールしたくない/一貫性の状態を無視したくないのですが、どうすればいいですか?
マキシムVeksler

15

私はこれが古い投稿であることを知っていますが、最近同様の問題を抱えていたので、将来誰かがそれを役に立つと期待して私のソリューションを共有したいと思います。

aptitudeを介してパッケージをインストールした場合、依存関係にフラグが自動的に割り当てられ(自動)、パッケージを再度削除しようとすると、自動フラグが設定されている依存関係がすべて削除されます。

あなたが私の場合に見ることができるように、私が削除したいのはzabbixです:

uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:  
  apache2{u} dbconfig-common{u} fping{u} javascript-common{u} libhtml-template-perl{u} libiksemel3{u} libjs-prototype{u} 
  libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u} mysql-server{u} mysql-server-5.1{u} mysql-server-core-5.1{u} php5{u} php5-gd{u} 
  php5-mysql{u} snmpd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p} 
0 packages upgraded, 0 newly installed, 20 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 44.9 MB will be freed.
Do you want to continue? [Y/n/?]

そして、apacheパッケージを検索すると、次のようになります。

uman@mango:~$ aptitude search ^apache2
i A apache2        - Apache HTTP Server metapackage
<snip>

最初のフラグ「i」は、apacheがインストールされていることを示します
。次のフラグ「A」は、自動的にインストールされたことを意味します

したがって、これを修正し、Apache、mysql、およびphpをアンインストールしないようにするには、次のようにaptitudeで自動フラグを削除するだけです。

uman@mango:~$ sudo aptitude unmarkauto apache2 mysql-server php5
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.

zabbixパッケージを削除すると、次のようになります。

uman@mango:~$ sudo aptitude purge zabbix-server-mysql zabbix-frontend-php
The following packages will be REMOVED:  
  dbconfig-common{u} fping{u} javascript-common{u} libiksemel3{u} libjs-prototype{u} libjs-scriptaculous{u} libopenipmi0{u} libt1-5{u} 
  php5-gd{u} wwwconfig-common{u} zabbix-frontend-php{p} zabbix-server-mysql{p} 
0 packages upgraded, 0 newly installed, 12 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 16.6 MB will be freed.
Do you want to continue? [Y/n/?] 

詳細については、aptitudeのマニュアルページをご覧ください。


これはすべてのベストアンサーのようです(状況に応じて)。すべての依存関係を見つけてunmarkautoにパイプするコマンドを作成するのは難しくありません。
ジョニーなぜ

13

それがまさにそのapt-mark holdためです。

apt-mark hold package_name

ドキュメントから:

holdは、パッケージを保留状態としてマークするために使用されます。これにより、パッケージが自動的にインストール、アップグレード、または削除されなくなります。このコマンドはdpkg --set-selectionsのラッパーにすぎないため、状態は

パッケージを保留解除するには:

apt-mark unhold package_name


1
私の状況では、これが推奨されるアプローチです。
パウロ・コギー-モニカの復活

1
残念ながら、これは依存関係を保持できません。つまり、パッケージAとBをインストールし、それらが共通の依存関係Xを共有している場合、Aを保持するとXは保持されず、Bの削除は「E:エラー、pkgProblemResolver :: Resolve生成されたブレーク、これは保持されたパッケージが原因である可能性があります」で失敗します
–MSalters

このやろうとしているとき、私はちょうどエラーを取得する The following packages have unmet dependencies: mysql-server-5.7 : Depends: apparmor (>= 2.10) but it is not going to be installed E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
frogstarr78


0

JoãoPintoの答えを完成させるために、壊れたパッケージを修正するために私の小さなスクリプトを使用できます。このスクリプトはequivsでダミーパッケージを作成してインストールします。フランス語私のブログの記事を見つけることができます。

または、要旨コードで直接。

使用するには:

$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.