Bagaimana cara menginstal ulang paket menggunakan 'apt-get'?

186

Sepertinya saya aptitudeentah bagaimana rusak:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

Jadi saya ingin menginstal ulang aptitudedengan menggunakan apt-get.

Sayangnya sepertinya apt-gettidak memiliki opsi instal ulang.

Bagaimana saya bisa mulai aptitudebekerja lagi?

Mungkin saja saya menemukan akar penyebab dari segfault aptitude. Inilah cara saya dapat mereproduksinya:

  1. 'ssh' login jarak jauh ke mesin Debian melalui terminal rxvt Cygwin (dari Windows 7 edisi 64-bit Jerman).
  2. Perbesar jendela rxvt sehingga membentang di dua monitor (ya, saya punya dua monitor)
  3. Lari aptitude update. Catatan: ketika saya mengubah ukuran terminal rxvt menjadi normal maka saya tidak memiliki kesalahan segmentasi ini!
Vokuhila-Oliba
sumber

Jawaban:

320
$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

Jadi, untuk menggunakannya untuk menginstal ulang aptitudegunakan:

sudo apt-get install --reinstall aptitude
pengguna23307
sumber
14
apa yang -A5kamu mengerti?
Vokuhila-Oliba
86
man grep | grep - "-A"
grawity
34
Apa yang --kamu mengerti?
Desty
13
man getopt, lihat di bawahPARSING
Tino
28
-A5menunjukkan garis yang cocok ditambah 5 baris berikut. --berhenti parsing opsi, sehingga menafsirkan apa pun yang datang sebagai argumen posisional, menghindari harus melarikan diri dari tanda hubung dalam ekspresi -Ayang seharusnya dapat ditafsirkan sebagai opsi untuk menangkap dirinya sendiri.
jjmontes
115

Anda dapat menginstal ulang paket dengan sudo apt-get install --reinstall packagename. Ini sepenuhnya menghapus paket (tetapi bukan paket yang bergantung padanya), lalu menginstal ulang paket.

Ini bisa nyaman ketika paket memiliki banyak dependensi terbalik.

Milad Khajavi
sumber
10
Terima kasih telah menjadi satu-satunya jawaban yang benar, lengkap, dan tidak snarky.
Cerin
6
@Cerin: Saya tidak akan menyebut jawaban lain yang terlalu tajam: bahkan "baca halaman manual" yang benar-benar memberikan jawaban serta cara menemukannya.
David Spillett
45
@ DavidSpillett, saya sangat tidak setuju. Halaman manual biasanya ditulis dengan sangat buruk dan sangat tidak bersahabat dengan pemula. Misalnya, paragraf pada opsi "--reinstall" tidak menyebutkan bahwa Anda harus menggunakannya dengan argumen "install". Seorang pemula mungkin berhak bertanya "mengapa saya harus mengatakannya untuk menginstal DAN menginstal ulang?" Sebuah jawaban yang memberi tahu seseorang kepada RTFM adalah jenis jawaban terburuk dan saya sangat sedih melihatnya dengan suara terbanyak, terutama ketika jawaban yang lengkap dan benar-benar membantu berada di dekat bagian bawah.
Cerin
20

Terkadang Anda perlu mengembalikan file konfigurasi juga! bukan hanya menginstal ulang.

sudo apt-get install --reinstall xxxx

Instal ulang aplikasi, simpan file konfigurasi.

Ini bisa membantu, tetapi kadang-kadang Anda harus memulai dari awal, jadi yang saya gunakan adalah ini:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

kemudian

sudo apt-get install xxxx
andreskwan
sumber
6
Dan jika Anda perlu mengembalikan file konfigurasi saja, dalam beberapa kasus (jika dikelola oleh ucf) Anda harus menggunakan UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou
2
Jawaban ini patut mendapat dukungan besar. Inilah yang Anda butuhkan ketika Anda ingin "menginstal ulang sepenuhnya" sebuah paket. Misalnya - instal ulang vsftpd yang sederhana tidak membuat ulang file konfigurasi, bahkan jika file tersebut tidak ada lagi. "Hapus + Bersihkan + (Re) instal" melakukan pekerjaan sebagai gantinya.
Kar.ma
13

Anda harus aman untuk menghapus aptitude dan menginstal ulang, karena itu tidak akan mempengaruhi utilitas apt lainnya. Jadi: apt-get remove aptitudediikuti oleh apt-get install aptitude, atau jika masih gagal coba apt-get purge aptitudediikuti oleh apt-get install aptitude.

Sebelum melakukan salah satu di atas, saya sarankan sistem file lengkap dan cek blok buruk jika ada masalah di sana yang menyebabkan masalah (tergantung pada masalahnya, jika ada, aktivitas lebih lanjut dapat memperburuk keadaan). Juga, pastikan Anda meninjau apa yang akan dihapus pada langkah hapus / bersihkan sebelum membiarkannya dilanjutkan (harus berhenti sejenak untuk meminta izin jika ada tambahan yang diubah akibat menghapus satu paket itu), untuk memeriksa kembali pemikiran saya bahwa ini aman.

David Spillett
sumber
Terima kasih banyak! apt-get removeDiikuti dengan apt-get installmelakukan trik!
Vokuhila-Oliba
Sudah lama saya melakukan hal-hal seperti a full filesystem checkatau serupa. Bisakah Anda memberi saya petunjuk singkat bagaimana melakukannya?
Vokuhila-Oliba
1
fsck -f <block_device>seperti fsck /dev/sda1. Sistem file harus di-unmount atau di-mount read-only pada saat itu sehingga kemungkinan ini adalah sistem file root Anda, Anda harus reboot ke mode single-user atau boot dari sesuatu yang lain seperti live cd.
David Spillett
2
Anda dapat menggunakan tune2fsuntuk menandai sistem file sebagai telah di-mount lebih dari batas yang ditetapkan, yang akan memaksa cek boot berikutnya. Dengan asumsi filesystem ext2 / 3/4:, tune2fs -C 99 <device>atau jika Anda telah mengecek mount count dimatikan, hidupkan pada saat bersamaan dengan sesuatu seperti tune2fs -c 17 -C 99 <device>.
David Spillett
2
sentuh / forcefsck; reboot
user23307
1
sudo apt remove --purge package
sudo apt install package

Itu seperti Anda belum pernah menginstal paket sebelumnya. Saya sering melakukan ini dengan gerakan dan hal-hal semacam itu.

Niwla23
sumber