Pertanyaan Cara menghapus deb tanpa menghapus dependensinya


Saya ingin menginstal versi terbaru dari boto, yang saya lakukan melalui python setup.py install

Namun ketika saya mencoba untuk menghapus versi lama, paket-paket berikut juga dihapus:

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

Bagaimana saya bisa memberi tahu manajer paket untuk menghapus boto, dan mereka menandainya sebagai diinstal secara eksternal (atau sesuatu seperti itu) sehingga apt tidak akan mencoba untuk memperbaiki ketergantungan yang hilang?

Terima kasih,
Pepatah.


35
2017-12-16 13:38


asal


Sudahkah Anda mencoba <code> sudo dpkg --hapus python-boto </ code>? - dkuntz2


Jawaban:


Anda dapat membuat paket .deb dummy menggunakan equivs utilitas, itu akan memberikan dependensi tanpa menginstal file apa pun. Kemudian, ganti saja paket yang saat ini diinstal ke versi dummy menggunakan dpkg -i fake.deb.


15
2017-12-16 15:06





Gunakan dpkg langsung, tidak apt-get atau aptitude:

sudo dpkg -r --force-depends "package"

46
2018-03-31 18:17



Benar tetapi ketika saya akan mencoba menggunakan apt untuk menginstal sesuatu itu akan mendeteksi bahwa paket yang telah saya hapus dengan dpkg hilang dan akan menginstalnya kembali. Pertanyaannya bagaimana saya membuat apt tidak ingin menginstal ulang / mengabaikan status konsistensi? - Maxim Veksler


Saya tahu ini adalah posting lama, tetapi karena saya baru-baru ini memiliki masalah yang sama saya ingin berbagi solusi saya dengan harapan bahwa seseorang di masa depan merasa berguna.

Jika Anda menginstal paket melalui aptitude, maka secara otomatis akan memberikan flag ke dependensi (auto) dan ketika Anda mencoba untuk menghapus paket Anda lagi, ia mencoba untuk menghapus semua dependensinya yang memiliki flag otomatis masih diatur.

Seperti yang Anda lihat dalam kasus saya, itu adalah zabbix yang ingin saya hapus:

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/?]

Dan jika kita melihat paket apache, ini terlihat seperti ini

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

bendera pertama "i" memberitahu kita bahwa apache sudah diinstal
Bendera berikutnya "A" kependekan dari pemasangan otomatis

Jadi untuk memperbaiki ini dan tidak memiliki apache, mysql dan php dihapus, kita bisa menghapus flag otomatis dengan kemampuan seperti ini:

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.

Sekarang terlihat seperti ini ketika menghapus paket 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/?] 

Silakan periksa halaman manual untuk mengetahui detail lebih lanjut


15
2018-01-07 15:26



Ini sepertinya jawaban terbaik dari semua (tergantung situasi). Seharusnya tidak terlalu sulit untuk membuat perintah yang menemukan semua tanggungan dan menyalurkannya ke unmarkauto. - johny why


Itu persisnya apa apt-mark hold adalah untuk.

apt-mark hold package_name

Dari dokumentasi:

hold digunakan untuk menandai paket yang ditahan, yang akan mencegah paket diinstal secara otomatis, ditingkatkan atau dihapus. Perintah hanya pembungkus sekitar dpkg --set-pilihan dan negara adalah karena itu

Untuk menahan sebuah paket:

apt-mark unhold package_name


10
2017-11-09 16:07



Untuk situasi saya, ini adalah pendekatan yang direkomendasikan. - Paulo Coghi
Sayangnya, ini gagal untuk memegang dependensi. Yaitu. jika saya menginstal paket A dan B dan mereka berbagi ketergantungan umum X, menahan A tidak akan menahan X, dan menghapus B akan gagal dengan "E: Error, pkgProblemResolver :: Menyelesaikan pemutusan yang dihasilkan, ini mungkin disebabkan oleh paket yang disimpan." - MSalters


AFAIK tidak ada cara untuk menghapus paket menggunakan APT tanpa juga menghapus paket-paket yang bergantung padanya.

Referensi: http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html


3
2017-12-16 14:14



tidak, ini adalah salah satu dari banyak tujuan untuk meta-paket - RobotHumans


Untuk melengkapi jawaban João Pinto, Anda dapat menggunakan skrip kecil saya untuk memperbaiki paket yang rusak, skrip ini akan membuat paket dummy dengan equivs dan menginstalnya. Anda dapat menemukan artikel tentang blog saya di perancis.

Atau langsung di kode inti .

Untuk menggunakannya:

$ ./gen-dummy-package.sh --install|i [packageName]+
# e.g. :
$ ./gen-dummy-package.sh -i rfkill nome-bluetooth bluez

0
2017-11-03 18:47