Server dihapus setelah "yum remove python" [ditutup]

65

Bencana baru saja terjadi pada saya setelah saya menjalankan perintah yum remove pythondan sekarang saya tidak bisa boot server lagi.

Bagaimana ini terjadi: Saya mencoba memperbarui beberapa aplikasi melalui yum pada CentOS 5 VPS saya dan perintah itu gagal karena beberapa kesalahan python 2.4 yang aneh. Saya perhatikan bahwa versi python saya sudah tua dan saya mencoba menginstalnya kembali dengan terlebih dahulu menghapusnya, dan saya melakukannya yum remove python.

Setelah itu ia bertanya kepada saya sesuatu tentang menghapus dependensi dan sepertinya tidak ada yang bisa saya lewatkan sehingga saya mengklik Y.

Jadi akibatnya adalah bahwa saya tidak dapat menjalankan perintah apa pun. Saya bahkan mencoba cd /var/wwwtetapi mengatakan sesuatu seperti " command does not exist in /usr/bin". Ketika saya terbiasa tabmelihat saran navigasi folder, struktur file sepertinya masih ada (setidaknya /var/wwwbit yang benar-benar penting bagi saya). Setelah itu saya mencoba me-restart vps (dari panel admin karena rebootperintah tidak berfungsi) dan sekarang tidak bisa boot lagi.

Sekarang pertanyaan saya adalah: bagaimana mungkin perintah seperti itu dapat menghancurkan server saya seperti ini?

tadoman
sumber
33
Kebetulan, apt-get remove apt works. Saya belum mencoba dpkg - hapus dpkg. Saya yakin itu sangat buruk.
joshudson
19
Anda memang memiliki cadangan, bukan?
vasin1987
21
@ joshudson Saya baru saja memutar CD live Debian 8.4 dalam VM dan mencobanya. Hasil: # dpkg --remove dpkgdimuntahkan dpkg: error processing dpkg (--remove): this is an essential package; it should not be removed. Jika saya menambah --force-allbaris perintah dpkg, dpkgkeluarkan seluruh bundel peringatan dan hasil untuk menghapus sendiri, bersama dengan melanggar sekitar dua lusin paket lain yang bergantung dpkg. Pada sistem yang sebenarnya, saya cukup yakin Anda akan kesulitan memulihkan dari itu, tetapi Anda mungkin bisa (ada sedikit keajaiban untuk .debs); CentOS mungkin atau mungkin tidak serupa dalam hal ini.
CVn
6
@ joshudson Berhasil karena ada salinan apt yang berjalan di memori ketika Anda mengeluarkan perintah ... segera setelah selesai (dan program berakhir), Anda tidak akan dapat menggunakan apt lagi.
SnakeDoc
2
Yum sendiri diimplementasikan dalam Python, saya percaya ... Jadi menghapus tunas Python dengan baik!
peufeu

Jawaban:

67

Saya sungguh-sungguh minta maaf: Saya bisa merasakan sakitnya memiliki server yang tidak dapat di-boot / tidak dapat diperbaiki.

Namun, saya bingung ketika membaca itu:

Setelah itu ia bertanya kepada saya sesuatu tentang menghapus dependensi dan sepertinya tidak ada yang bisa saya lewatkan sehingga saya mengklik [Y]

Daftar paket yang harus dihapus pasti sangat besar, karena pythonmerupakan bagian penting dari RHEL / CentOS. Anda seharusnya tidak pernah mengkonfirmasi beberapa pesan peringatan yang Anda tidak benar-benar mengerti.

Hal terbaik yang dapat Anda lakukan, seperti yang disarankan, adalah mem-boot melalui media pemulihan (yaitu: livecd), mengekstrak file data yang diperlukan, dan menginstal ulang mesin Anda dengan rilis CentOS yang lebih baru (dan karena CentOS 6 sudah cukup tua, saya sangat menyarankan Anda untuk rebase pada CentOS 7).

shodanshok
sumber
2
Untuk masa depan: bangun server dengan OS di LVM LVs (yang ISTR adalah standar RHEL). Sebelum apa pun yang memiliki peluang sekecil apa pun untuk merusak sistem, buat snapshot. Jika memang merusak sistem, Anda dapat kembali ke snapshot dalam beberapa menit. Kalau tidak, ketika semuanya OK, Anda dapat menghapus snapshot. unix.stackexchange.com/questions/18913 . Snapshot NB bukan cadangan. Anda masih memerlukan cadangan untuk situasi di mana foto itu tidak dapat menyelamatkan Anda.
nigel222
Pada Debian / Ubuntu, ia dapat mem-boot image pemulihan (mis. Finnix), membongkar sistem dasar dengan debootstrap, chroot dan apt-get install ubuntu-desktop. Tidak tahu apakah centos / rhel memiliki debootstrap yang setara.
Edheldil
1
CentOS 6 didukung hingga November 2020 . Tidak perlu terburu-buru untuk meningkatkan (meskipun ke 7 memang memiliki banyak keuntungan).
psmears
106

Terus terang, karena Anda melakukan sesuatu yang tidak sepenuhnya Anda mengerti. Python adalah bagian penting dari OS dan hal-hal yang Anda anggap tidak penting sangat penting. Pulihkan dari cadangan.


Ketika Anda menghapus Python, yummenunjukkan kepada Anda daftar panjang paket yang juga akan dihapus. Daftar ini berisi hal-hal penting seperti yumitu sendiri coreutils,, net-toolsdan lainnya. Anda mengonfirmasi kepada yum bahwa Anda tahu apa yang Anda lakukan dan ingin melanjutkan. Hasil dari ini adalah sistem yang tidak bekerja. Ini seharusnya tidak mengejutkan.

Sebagai catatan, pada versi CentOS yang lebih baru ini tidak lagi mungkin, karena paket-paket tertentu sekarang ditandai sebagai terlindungi dan tidak dapat dihapus, hanya diinstal ulang atau ditingkatkan. Dan karena CentOS 5 sekarang adalah EOL, ini adalah waktu yang tepat untuk meningkatkan ke versi yang lebih baru.

Sven
sumber
3
Haha yah itu meningkat dengan cepat (yum menghapus python == cukup bersihkan seluruh mesin: D). Apakah Anda memperhitungkan apakah ada cara saya setidaknya dapat mengembalikan file yang ada di / var / www atau apakah itu benar-benar foobard juga?
tadoman
8
@tadoman: Jika Anda dapat mem-boot ke suatu jenis sistem penyelamatan, Anda akan dapat memasang disk dan memulihkan data darinya (ini harus semua data pengguna Anda, termasuk file konfigurasi). Anda harus menghubungi penyedia Anda untuk mendiskusikan apa yang mungkin terjadi di lingkungan mereka.
Sven
6
@RussellBorogove: Saya tidak mengatakan salah satu dari ini. yumbekerja dengan menyusuri grafik dependensi dan menghapus paket sampai semua dependensi puas. Jika paket A tergantung pada paket B dan paket B tergantung pada paket C, yumjuga akan menghapus paket B dan pada gilirannya, paket A untuk memenuhi semua dependensi jika Anda mencoba untuk menghapus paket C. Untuk paket pusat (seperti python), ini dapat menghasilkan sejumlah besar paket yang dihapus yang tampaknya tidak terkait.
Sven
4
@RussellBorogove: Ya, tepatnya, meskipun coreutilstidak bergantung pythonlangsung pada CentOS 5, tetapi melalui satu atau lebih paket perantara - hasilnya sama: Penghapusan.
Sven
4
Jumlah paket perantara ke coreutils tampaknya dua. python -> cracklib -> pam -> coreutils Ketergantungan ada karena ada python bindings ke cracklib, pam dibangun dengan cracklib, dan su terintegrasi dengan pam. Tentu saja butuh banyak hal penting juga, seperti yum untuk menginstal paket lagi ...
John Mahowald
15

Anda melakukan sesuatu tanpa sepenuhnya memahami konsekuensinya

Instalasi itu tidak dapat dipulihkan, akan membutuhkan banyak pekerjaan untuk menginstal ulang centos5. Dan itu rencana yang buruk karena

  1. CentOS 5 adalah End of Life, dan karenanya tidak memiliki pembaruan. Ini ekstra serius mengingat sepertinya server web menyajikan konten di internet publik dan Anda menggunakan aplikasi panel untuk mengontrolnya.
  2. CentOS> 5 akan menghentikan Anda dari melakukan pembaruan ini dan mematikan kotak. Itu airbag yang bagus untuk dimiliki.
  3. CentOS 7 mengklaim mendukung peningkatan versi utama. Saya tidak pernah menggunakannya, tetapi bisa melompat dari 7 ke 8 saat rilis akan sangat bagus. Debian sudah memiliki ini sejak selamanya, tetapi Redhat selalu membutuhkan instal ulang untuk lompatan versi utama.

Larutan

Taruhan terbaik Anda adalah membuat VPS baru, instal CentOS7 baru, dan kemudian pasang kembali volume disk centos5 lama dan pasang hanya-baca. Kemudian bekerja untuk menyalin (tidak memindahkan) data Anda dari drive lama ke yang baru.

Perhatikan ini akan menjadi metode saya menggunakan AWS. Jika penyedia VPS Anda tidak dapat melampirkan disk ke VM yang berbeda maka Anda harus mengubah rencana.

Apa pun yang Anda lakukan, pertimbangkan untuk menyiapkan cadangan otomatis di masa mendatang. Itu tidak akan menyelamatkan Anda, tetapi itu akan membuat pemulihan sedikit lebih fleksibel. Saat ini Anda membutuhkan data pada disk itu di server yang berfungsi baru. Jangan kehilangan disk yang ada.

Criggie
sumber
9

Bagaimana ini bisa terjadi? Yah, cukup sederhana: Dengan menghapus bagian yang penting untuk server Anda.

Langkah selanjutnya untuk Anda: gunakan kembali OS baru dan pulihkan data Anda dari cadangan.

EEAA
sumber
1
Menghapus instalasi suatu paket jangan pernah menghapus data. Seharusnya tidak ada kebutuhan untuk mengembalikan apa pun, kecuali beberapa pengelola paket secara kacau mengacau.
Jörg W Mittag
6
Jika OP mengembalikan OS baru seperti yang saya rekomendasikan, pemulihan data dan konfigurasi pasti akan diperlukan.
EEAA
@ JörgWMittag Saya pikir Anda mungkin salah mengerti penggunaan kata "restore." EEAA berarti bahwa sistem harus dikonfigurasi ulang dan data yang ada ditempatkan di suatu tempat pada mesin baru. "Kembalikan" mungkin bukan kata terbaik untuk itu, meskipun saya bisa melihat seseorang menggunakan fungsionalitas pemulihan basis data untuk bagian itu.
jpmc26
@ JörgWMittag Oh, datanya masih ada, kemungkinan besar. Hanya saja dengan sistemnya yang tidak berfungsi ia tidak dapat mengaksesnya.
Shadur
4

Seperti yang ditunjukkan oleh dragon788 dan lain-lain di komentar, di Gentoo, para pengembang juga memelihara satu set mudah terbakar paket yang hanya pre-built, versi biner dari satu set paket inti dari OS untuk situasi hanya seperti itu. Jika Anda kehilangan paket inti, Anda hanya perlu mem-boot sistem ke LiveCD / DVD, memasang drive OS dari server yang rusak dan membongkar paket tinderbox ke sistem file, unmount, reboot dan, jika boot dengan benar, membangun kembali paket-paket kembali ke spesifikasi dan konfigurasi server Anda.

Jadi, untuk melakukan sesuatu yang serupa di CentOS, saya pikir Anda perlu menemukan versi RPM yang tepat yang dihapus, lalu boot ke LiveCD / DVD, pasang drive OS dan chroot di (mungkin ... jika Anda terbiasa dengan cara menggunakan flag " --relocate " untuk rpm , Anda mungkin tidak perlu melakukan chroot), lalu instal ulang paket-paket itu, unmount dan reboot.

Tentu saja, karena dukungan untuk CentOS 5 berakhir bulan lalu, setelah sistem di-boot ulang dengan benar, Anda dapat memperbaruinya ke versi saat ini.

HTH.

B.Kaatz
sumber
0

Anda biasanya dapat mem-boot dari media instal dan kemudian chrootmenjalankan perintah atau masuk ke instal saat ini dan memulihkan file atau melakukan instal ulang paket.

dragon788
sumber
4
Anda tidak akan dapat melakukan chroot ke direktori root tanpa binari yang berguna di / usr / bin, dll. Ini akan memberikan hasil yang sama dengan mem-boot ke sistem yang mati. Chroot juga tidak diperlukan karena setelah Anda menginstal sistem file, Anda dapat menyalin file yang ingin Anda selamatkan dari / var / www.
qris
Benar sekali, saya ingat menginstal Gentoo / Arch di mana biasanya ada beberapa binari berguna yang tersedia. Saya tidak pernah menghapus semuanya terlebih dahulu. ;)
dragon788