เซิร์ฟเวอร์ลบหลังจาก“ yum remove python” [ปิด]


65

ภัยพิบัติเกิดขึ้นกับฉันหลังจากฉันรันคำสั่งyum remove pythonและตอนนี้ฉันไม่สามารถบูตเซิร์ฟเวอร์ได้อีกต่อไป

มันเกิดขึ้นได้อย่างไร: ฉันลองอัปเดตแอพผ่าน yum บน CentOS 5 VPS ของฉันและคำสั่งล้มเหลวเนื่องจากข้อผิดพลาดของ python 2.4 yum remove pythonผมสังเกตเห็นว่ารุ่นของฉันหลามอายุและฉันพยายามติดตั้งได้โดยการเอามันเป็นครั้งแรกและผมเลย

Yหลังจากนั้นก็ถามผมว่าบางสิ่งบางอย่างเกี่ยวกับการอ้างอิงการถอดและมันดูเหมือนไม่มีอะไรที่ฉันอาจจะพลาดดังนั้นฉันคลิก

ผลที่ตามมาก็คือฉันไม่สามารถเรียกใช้คำสั่งใด ๆ ได้ตลอดไป ฉันพยายามแล้วcd /var/wwwแต่ก็พูดเหมือน " command does not exist in /usr/bin" เมื่อฉันเคยtabเห็นข้อเสนอแนะการนำทางโฟลเดอร์โครงสร้างไฟล์ยังคงปรากฏอยู่ที่นั่น (อย่างน้อย/var/wwwบิตที่สำคัญสำหรับฉันจริงๆ) หลังจากนั้นฉันลองรีสตาร์ท vps (จากพาเนลผู้ดูแลระบบตั้งแต่rebootคำสั่งไม่ทำงาน) และตอนนี้ก็ไม่สามารถบูตได้อีกต่อไป

ตอนนี้คำถามของฉันคือ: คำสั่งเช่นนั้นจะทำลายเซิร์ฟเวอร์ของฉันได้อย่างไร


33
อนึ่ง apt-get remove apt ทำงานได้ ฉันยังไม่ได้ลอง dpkg - ลบ dpkg เลย ฉันพนันได้เลยว่ามันแย่จริงๆ
joshudson

19
คุณมีข้อมูลสำรองใช่ไหม
vasin1987

21
@ joshudson ฉันเพิ่งปั่น Debian 8.4 live CD ใน VM แล้วลองดู ผล: ถ่มน้ำลายออกมา# dpkg --remove dpkg dpkg: error processing dpkg (--remove): this is an essential package; it should not be removedถ้าฉันจะเพิ่ม--force-allบรรทัดคำสั่ง dpkg ของdpkgถ่มน้ำลายออกกำทั้งคำเตือนและวิธีการที่จะเอาตัวเองพร้อมกับหมดประมาณสองโหลแพคเกจอื่น ๆ dpkgที่ขึ้นอยู่กับ ในระบบจริงฉันค่อนข้างแน่ใจว่าคุณมีปัญหาในการกู้คืนจากที่ แต่คุณอาจทำได้ (มีเวทมนตร์เล็กน้อยเพื่อ.debs); CentOS อาจมีหรือไม่มีความคล้ายคลึงกันในเรื่องนี้
CVN

6
@joshudson ทำงานได้เนื่องจากมีสำเนาของ apt ที่ทำงานอยู่ในหน่วยความจำเมื่อคุณออกคำสั่ง ... ทันทีที่เสร็จสิ้น (และโปรแกรมจะหยุดทำงาน) คุณจะไม่สามารถใช้ apt ได้อีกต่อไป
SnakeDoc

2
ยำตัวเองถูกนำมาใช้ในงูหลามฉันเชื่อว่า ... ดังนั้นการลบงูหลามก็ช่วยให้เท้าของคุณสวยดี!
peufeu

คำตอบ:


67

ฉันขอโทษด้วยความจริงใจ: ฉันรู้สึกได้ถึงความเจ็บปวดที่เซิร์ฟเวอร์ไม่สามารถบูตได้ / ไม่สามารถให้บริการได้

อย่างไรก็ตามฉันหลงทางเมื่ออ่านแล้ว:

หลังจากนั้นมันถามฉันเกี่ยวกับการลบการพึ่งพาและดูเหมือนว่าไม่มีอะไรที่ฉันจะพลาดได้ดังนั้นฉันจึงคลิก [Y]

รายการของแพ็คเกจที่ต้องถูกลบนั้นใหญ่มากจริง ๆซึ่งเป็นpythonส่วนสำคัญของ RHEL / CentOS คุณไม่ควรยืนยันข้อความเตือนที่คุณไม่เข้าใจจริงๆ

สิ่งที่ดีที่สุดที่คุณสามารถทำได้ตามที่แนะนำไว้คือการบู๊ตผ่านสื่อการกู้คืน (เช่น livecd) แยกไฟล์ข้อมูลที่ต้องการและติดตั้งเครื่องของคุณใหม่ด้วย CentOS รีลีสที่ใหม่กว่า (และ CentOS 6 ค่อนข้างเก่า แนะนำให้คุณ rebase ใน CentOS 7)


2
สำหรับอนาคต: สร้างเซิร์ฟเวอร์ที่มีระบบปฏิบัติการบน LVM LVs (ซึ่ง ISTR คือค่าเริ่มต้นของ RHEL) ก่อนสิ่งใดก็ตามที่มีโอกาสแม้แต่น้อยที่สุดในการทำลายระบบให้สร้างสแนปชอต ถ้ามันทำลายระบบจริงๆคุณสามารถเปลี่ยนกลับเป็น snapshot ได้ในไม่กี่นาที มิฉะนั้นเมื่อทั้งหมดตกลงคุณสามารถลบภาพรวม unix.stackexchange.com/questions/18913 NB snapshots ไม่ใช่ข้อมูลสำรอง คุณยังต้องสำรองข้อมูลสำหรับสถานการณ์ที่ snapshot ไม่สามารถช่วยคุณได้
nigel222

บน Debian / Ubuntu เขาสามารถบูตอิมเมจการกู้คืน (เช่น finnix), แกะระบบฐานด้วย debootstrap, chroot และ apt-get install ubuntu-desktop ไม่ทราบว่า centos / rhel มี debootstrap เทียบเท่าหรือไม่
Edeldil

1
CentOS 6 ได้รับการสนับสนุนจนถึงพฤศจิกายน 2020 ไม่มีการเร่งรีบในการอัพเกรด (แม้ว่าการไปที่ 7 จะมีข้อดีมากมาย)
psmears

106

ตรงไปตรงมาเพราะคุณทำสิ่งที่คุณไม่เข้าใจ Python เป็นส่วนสำคัญของระบบปฏิบัติการและสิ่งที่คุณถือว่าไม่สำคัญนั้นสำคัญมาก กู้คืนจากการสำรองข้อมูล


เมื่อคุณลบ Python yumแสดงให้คุณเห็นรายการแพคเกจแบบยาวที่จะถูกลบด้วย รายการนี้มีสาระสำคัญเช่นyumตัวเองcoreutils, net-toolsและอื่น ๆ คุณยืนยันกับ yum ว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่และต้องการดำเนินการต่อไป ผลลัพธ์ของสิ่งนี้คือระบบที่ไม่ทำงาน สิ่งนี้ไม่น่าแปลกใจ

สำหรับเร็กคอร์ดใน CentOS เวอร์ชันที่ใหม่กว่านี้เป็นไปไม่ได้อีกต่อไปเนื่องจากแพคเกจบางอย่างมีการทำเครื่องหมายว่าได้รับการป้องกันและไม่สามารถลบออกได้เพียงติดตั้งใหม่หรืออัพเกรดเท่านั้น และเนื่องจาก CentOS 5 เป็น EOL อยู่แล้วนี่เป็นเวลาที่ดีในการอัพเกรดเป็นเวอร์ชั่นใหม่


3
ฮ่าฮ่าดีที่เพิ่มขึ้นอย่างรวดเร็ว (yum remove python == เพียงแค่เช็ดทั้งเครื่อง: D) คุณคิดว่ามีวิธีใดบ้างที่ฉันสามารถคืนค่าไฟล์ที่อยู่ใน / var / www หรือว่าเป็น foobard อย่างสมบูรณ์เช่นกัน?
tadoman

8
@tadoman: หากคุณสามารถบูตเข้าสู่ระบบช่วยเหลือบางประเภทคุณจะสามารถเมานต์ดิสก์และกู้คืนข้อมูลจากมัน (นี่ควรเป็นข้อมูลผู้ใช้ทั้งหมดของคุณรวมถึงไฟล์กำหนดค่า) คุณต้องติดต่อผู้ให้บริการของคุณเพื่อหารือเกี่ยวกับสิ่งที่เป็นไปได้ในสภาพแวดล้อมของพวกเขา
สเวน

6
@RussellBorogove: ฉันไม่ได้พูดอย่างนี้ yumทำงานโดยการเดินลงกราฟการพึ่งพาและมันจะลบแพ็กเกจจนกว่าการอ้างอิงทั้งหมดจะพอใจ หากแพ็กเกจ A ขึ้นอยู่กับแพ็กเกจ B และแพ็กเกจ B ขึ้นอยู่กับแพ็กเกจ C yumก็จะลบแพ็กเกจ B และในทางกลับกันแพ็กเกจ A เพื่อตอบสนองการอ้างอิงทั้งหมดหากคุณพยายามลบแพ็กเกจ C สำหรับแพ็กเกจส่วนกลาง (เช่นpython) แพ็คเกจที่ถูกลบออกจำนวนมากซึ่งดูเหมือนไม่เกี่ยวข้องกัน
สเวน

4
@RussellBorogove: ใช่แน่นอนแม้ว่าจะcoreutilsไม่ได้ขึ้นอยู่กับpythonCentOS 5 โดยตรง แต่ผ่านทางแพ็คเกจระดับกลางอย่างน้อยหนึ่งแพค - ผลลัพธ์ที่ได้จะเหมือนกัน: การลบ
สเวน

4
จำนวนแพ็กเกจกลางถึงแกนกลางดูเหมือนจะเป็นสอง python -> cracklib -> pam -> coreutils การพึ่งพามีอยู่เนื่องจากมีการผูก python กับ cracklib, pam ถูกสร้างขึ้นด้วย cracklib และ su นั้นถูกรวมเข้ากับ pam แน่นอนว่ามันมีสิ่งที่สำคัญมากมายเช่น yum ในการติดตั้งแพ็คเกจเพิ่มเติม ...
John Mahowald

15

คุณทำอะไรบางอย่างโดยไม่เข้าใจผลที่ตามมาอย่างเต็มที่

การติดตั้งนั้นไม่สามารถกู้คืนได้จะต้องใช้งานอีกมากในการติดตั้ง centos5 และนั่นเป็นแผนที่ไม่ดีเพราะ

  1. CentOS 5 เป็นจุดสิ้นสุดของชีวิตและดังนั้นจึงไม่มีการอัปเดต นี่เป็นเรื่องที่ร้ายแรงเป็นพิเศษเพราะดูเหมือนว่าเว็บเซิร์ฟเวอร์จะให้บริการเนื้อหาบนอินเทอร์เน็ตสาธารณะและคุณใช้แอปแผงควบคุมเพื่อควบคุมมัน
  2. CentOS> 5 จะห้ามไม่ให้คุณทำการอัปเดตนี้และฆ่ากล่อง นั่นเป็นถุงลมนิรภัยที่ดีที่มี
  3. CentOS 7 อ้างว่ารองรับการอัปเกรดรุ่นใหญ่ ฉันไม่เคยใช้มัน แต่ความสามารถในการกระโดดจาก 7 เป็น 8 เมื่อเผยแพร่จะดีมาก เดเบียนมีสิ่งนี้มาตลอด แต่ Redhat จำเป็นต้องติดตั้งใหม่สำหรับการข้ามรุ่นใหญ่เสมอ

วิธีการแก้

ทางออกที่ดีที่สุดของคุณคือการสร้าง VPS ใหม่ติดตั้ง CentOS7 ใหม่จากนั้นใส่ดิสก์ไดรฟ์ centos5 เก่าและติดตั้งใหม่อ่านอย่างเดียว จากนั้นทำงานเพื่อคัดลอก (ไม่ย้าย) ข้อมูลของคุณจากไดรฟ์เก่าไปยังใหม่

หมายเหตุนี่จะเป็นวิธีของฉันที่ใช้ AWS หากผู้ให้บริการ VPS ของคุณไม่สามารถแนบดิสก์กับ VM ที่แตกต่างกันคุณจะต้องปรับแต่งแผน

ไม่ว่าคุณจะทำอะไรโปรดพิจารณาตั้งค่าการสำรองข้อมูลอัตโนมัติในอนาคต มันจะไม่ช่วยคุณ แต่จะทำให้การกู้คืนมีความยืดหยุ่นมากขึ้น ตอนนี้คุณต้องการข้อมูลบนดิสก์นั้นในเซิร์ฟเวอร์การทำงานใหม่ อย่าทำให้แผ่นดิสก์ที่มีอยู่หลวม


9

สิ่งนี้จะเกิดขึ้นได้อย่างไร? ค่อนข้างง่าย: โดยการลบส่วนที่สำคัญต่อเซิร์ฟเวอร์ของคุณ

ขั้นตอนถัดไปสำหรับคุณ: ปรับใช้ระบบปฏิบัติการใหม่และกู้คืนข้อมูลของคุณจากการสำรองข้อมูล


1
การถอนการติดตั้งแพคเกจไม่ควรลบข้อมูล ไม่จำเป็นต้องเรียกคืนอะไรเลยเว้นแต่จะมีผู้ดูแลแพคเกจบางคนติดขัด
Jörg W Mittag

6
ถ้า OP คืนค่าระบบปฏิบัติการใหม่เหมือนที่ฉันแนะนำการกู้คืนข้อมูลและการกำหนดค่าจะต้องมั่นใจที่สุด
EEAA

@ JörgWMittagฉันคิดว่าคุณอาจเข้าใจผิดเกี่ยวกับการใช้คำว่า "คืนค่า" EEAA หมายความว่าระบบจะต้องมีการกำหนดค่าใหม่และข้อมูลที่มีอยู่จะถูกนำไปวางไว้ในเครื่องใหม่ "คืนค่า" อาจไม่ใช่คำที่ดีที่สุดสำหรับเรื่องนั้นแม้ว่าฉันจะเห็นใครบางคนที่ใช้ฟังก์ชันการคืนค่าฐานข้อมูลสำหรับชิ้นส่วนนั้น
jpmc26

@ JörgWMittagโอ้ข้อมูลของเขายังคงอยู่ที่นั่นส่วนใหญ่ เป็นเพียงแค่ว่าระบบของเขาไม่ทำงานเขาไม่มีวิธีเข้าถึงมัน
Shadur

4

ดังที่ dragon788 และคนอื่น ๆ ให้ความเห็นใน Gentoo ผู้พัฒนายังคงรักษาชุดของชุดเครื่องมือtinderboxซึ่งเป็นรุ่นไบนารีที่สร้างไว้ล่วงหน้าของชุดของแพ็คเกจหลักของระบบปฏิบัติการในสถานการณ์เช่นนี้ หากคุณทำแพ็กเกจหลักหายคุณเพียงแค่นำระบบบู๊ตไปยัง LiveCD / DVD ติดตั้งไดรฟ์ระบบปฏิบัติการของเซิร์ฟเวอร์ที่ใช้งานไม่ได้และแกะแพ็คเกจ tinderbox ไปยังระบบไฟล์ unmount รีบูตและหากบู๊ตถูกต้อง สร้างแพ็คเกจใหม่กลับไปตามข้อกำหนดและการกำหนดค่าของเซิร์ฟเวอร์ของคุณ

ดังนั้นเพื่อดำเนินการบางอย่างที่คล้ายกันใน CentOS ฉันคิดว่าคุณจะต้องค้นหา RPMs ที่ถูกต้องที่ถูกถอนการติดตั้งจากนั้นบู๊ตเป็น LiveCD / DVD ติดตั้งไดรฟ์ OS และ chroot (อาจเป็น ... ถ้าคุณคุ้นเคย ด้วยวิธีการใช้แฟล็ก "- relocate " สำหรับรอบต่อนาทีคุณอาจไม่จำเป็นต้อง chroot) จากนั้นติดตั้งแพ็กเกจเหล่านั้นใหม่ถอนติดตั้งและรีบูต

แน่นอนเนื่องจากการสนับสนุน CentOS 5 สิ้นสุดเมื่อเดือนที่แล้วหลังจากที่คุณได้รับการรีบูตระบบอย่างถูกต้องคุณสามารถอัปเดตเป็นเวอร์ชันปัจจุบันได้

HTH


0

โดยทั่วไปคุณสามารถบูตจากสื่อบันทึกการติดตั้งจากนั้นchrootเรียกใช้คำสั่งหรือป้อนการติดตั้งและกู้คืนไฟล์ปัจจุบันหรือทำการติดตั้งแพ็กเกจใหม่


4
คุณจะไม่สามารถ chroot ลงในไดเรกทอรีรากโดยไม่มีไบนารีที่มีประโยชน์ใน / usr / bin ฯลฯ มันจะให้ผลลัพธ์เช่นเดียวกับการบูตเข้าสู่ระบบที่ตายแล้ว Chroot ก็ไม่จำเป็นเพราะเมื่อคุณติดตั้งระบบไฟล์แล้วคุณสามารถคัดลอกไฟล์ที่คุณต้องการกู้คืนจาก / var / www
qris

ความจริงฉันกำลังนึกถึงการติดตั้ง Gentoo / Arch ที่มักจะมีไบนารีที่มีประโยชน์ ฉันไม่เคยถอนการติดตั้งทุกอย่างก่อน ;)
dragon788
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.