Serwer został wyczyszczony po „yum remove python” [closed]

65

Katastrofa właśnie przyszła mi do głowy po uruchomieniu polecenia yum remove pythoni teraz nie mogę już uruchomić serwera.

Jak to się stało: Próbowałem zaktualizować niektóre aplikacje przez yum na moim CentOS 5 VPS, a polecenie nie powiodło się z powodu dziwnego błędu python 2.4. Zauważyłem, że moja wersja Pythona jest stara i próbowałem ją ponownie zainstalować, najpierw ją usuwając, i tak też zrobiłem yum remove python.

Potem zapytał mnie o usunięcie zależności i wyglądało na to, że nie mogłem przegapić, więc kliknąłem Y.

Wynikało stąd, że nie byłem w stanie uruchomić żadnego polecenia. Próbowałem nawet, cd /var/wwwale powiedział coś w stylu „ command does not exist in /usr/bin”. Kiedy tabwidziałem sugestie dotyczące nawigacji po folderach, struktura plików nadal wydawała się istnieć (przynajmniej część, /var/wwwktóra jest dla mnie naprawdę ważna). Potem próbowałem zrestartować vps (z panelu administracyjnego, ponieważ rebootpolecenie nie działało), a teraz nie uruchamia się.

Teraz moje pytanie brzmi: w jaki sposób takie polecenie może zniszczyć mój serwer w ten sposób?

tadoman
źródło
33
Nawiasem mówiąc, apt-get remove apt działa. Nie próbowałem jeszcze dpkg --remove dpkg. Założę się, że to naprawdę źle.
joshudson 16.04.17
19
Masz kopię zapasową, prawda?
vasin1987 16.04.17
21
@ joshudson Właśnie uruchomiłem wirtualny dysk CD Debiana 8.4 na maszynie wirtualnej i wypróbowałem go. Wynik: # dpkg --remove dpkgwypluwa dpkg: error processing dpkg (--remove): this is an essential package; it should not be removed. Jeśli dodam --force-alldo wiersza poleceń dpkg, dpkgwypluwam cały pakiet ostrzeżeń i przystępuję do samoczynnego usuwania, a także niszczenia około dwóch tuzinów innych zależnych pakietów dpkg. W prawdziwym systemie jestem pewien, że miałbyś trochę problemów z odzyskaniem po tym, ale prawdopodobnie mógłbyś (jest trochę magii .deb); CentOS może pod tym względem być podobny.
CVn
6
@ joshudson Działa, ponieważ w pamięci wydaje się kopię apt po wydaniu polecenia ... jak tylko zakończy się (a program się zakończy), nie będziesz już mógł używać apt.
SnakeDoc
2
Uważam, że samo Yum jest zaimplementowane w Pythonie ... Więc usunięcie Pythona całkiem dobrze strzela własną stopą!
peufeu 18.04.17

Odpowiedzi:

67

Bardzo mi przykro: czuję ból z powodu braku możliwości uruchomienia / awarii serwera.

Jednak zagubiłem się, czytając:

Potem zapytał mnie o usunięcie zależności i wyglądało na to, że nie mogłem przegapić, więc kliknąłem [Y]

Lista pakietów, które należy usunąć, z pewnością była naprawdę ogromna, podobnie jak pythonistotna część RHEL / CentOS. Nigdy nie należy potwierdzać komunikatu ostrzegawczego, którego tak naprawdę nie rozumiesz.

Najlepszą rzeczą, jaką możesz zrobić, jak już zasugerowano, jest uruchomienie za pomocą nośnika odzyskiwania (tj. Livecd), wyodrębnienie wymaganych plików danych i ponowne zainstalowanie komputera z nowszą wersją CentOS (a ponieważ CentOS 6 jest dość stary, zdecydowanie zasugeruj, abyś bazował na CentOS 7).

Shodanshok
źródło
2
W przyszłości: buduj serwery z systemem operacyjnym na LVM LV (których ISTR jest domyślnym RHEL). Przed czymkolwiek, co ma nawet najmniejszą szansę na uszkodzenie systemu, utwórz migawkę (s). Jeśli rzeczywiście psuje system, możesz w ciągu kilku minut powrócić do migawki. W przeciwnym razie, gdy wszystko będzie w porządku, możesz usunąć migawkę. unix.stackexchange.com/questions/18913 . Migawki NB nie są kopiami zapasowymi. Nadal potrzebujesz kopii zapasowych w sytuacjach, gdy migawka nie może Cię uratować.
nigel222
Na Debianie / Ubuntu mógł uruchomić obraz odzyskiwania (np. Finnix), rozpakować podstawowy system z debootstrap, chroot i zainstalować Ubuntu-desktop. Nie mam pojęcia, czy centos / rhel ma odpowiednik debootstrap.
Edheldil
1
CentOS 6 jest obsługiwany do listopada 2020 r . Aktualizacja nie wymaga pośpiechu (choć przejście do wersji 7 ma wiele zalet).
psmears,
106

Szczerze mówiąc, ponieważ zrobiłeś coś, czego nie do końca rozumiałeś. Python jest istotną częścią systemu operacyjnego, a rzeczy, które uważasz za nieistotne, są bardzo ważne. Przywróć z kopii zapasowej.


Kiedy usunąłeś Python, yumpokazał ci długą listę pakietów, które również zostaną usunięte. Lista ta zawiera takie podstawowe informacje, jak yumsobie, coreutils, net-toolsi innych. Potwierdziłeś, że wiesz, co robisz i i tak chcesz kontynuować. Wynikiem tego jest niedziałający system. To nie powinno dziwić.

Dla przypomnienia, w nowszej wersji CentOS nie jest to już możliwe, ponieważ niektóre pakiety są teraz oznaczone jako chronione i nie można ich usunąć, a jedynie ponownie zainstalować lub uaktualnić. A ponieważ CentOS 5 i tak jest teraz w wersji EOL, to dobry moment na aktualizację do nowszej wersji.

Sven
źródło
3
Haha dobrze, że eskalacja szybko (mniam usunąć python == po prostu wyczyść całą maszynę: D). Czy zastanawiasz się, czy mogę w jakiś sposób przywrócić pliki, które znajdowały się w / var / www, czy też jest to całkowicie foobard?
tadoman
8
@tadoman: Jeśli możesz uruchomić system ratunkowy, będziesz mógł zamontować dysk i odzyskać dane z niego (powinny to być wszystkie dane użytkownika, w tym pliki konfiguracyjne). Musisz skontaktować się ze swoim dostawcą, aby omówić, co jest możliwe w ich środowisku.
Sven
6
@RussellBorogove: Nie mówię tego. yumdziała, przechodząc w dół wykresu zależności i usuwa pakiety, aż wszystkie zależności zostaną spełnione. Jeśli pakiet A zależy od pakietu B, a pakiet B zależy od pakietu C, yumusunie również pakiet B, a następnie pakiet A, aby spełnić wszystkie zależności, jeśli spróbujesz usunąć pakiet C. W przypadku pakietów centralnych (jak python) może to spowodować duża liczba usuniętych pakietów, które pozornie nie są ze sobą powiązane.
Sven
4
@ RussellBorogove: Tak, dokładnie, chociaż coreutilsnie zależy pythonbezpośrednio od CentOS 5, ale przez jeden lub więcej pakietów pośrednich - wynik jest taki sam: Usunięcie.
Sven
4
Wydaje się, że liczba pakietów pośrednich do coreutils wynosi dwa. python -> cracklib -> pam -> coreutils Zależność istnieje, ponieważ istnieją wiązania Pythona do cracklib, pam został zbudowany przy pomocy cracklib, a su jest zintegrowane z pam. Oczywiście zajęło to również wiele ważnych rzeczy, takich jak mniam, aby zainstalować więcej pakietów ...
John Mahowald
15

Zrobiłeś coś bez pełnego zrozumienia konsekwencji

Ta instalacja jest nie do odzyskania, wymagałaby dużo pracy, aby ponownie zainstalować centos5. A to zły plan, ponieważ

  1. CentOS 5 to End of Life, dlatego nie ma żadnych aktualizacji. Jest to szczególnie poważne, ponieważ brzmi jak serwer sieciowy obsługujący treści w publicznym Internecie i że do sterowania nim używasz aplikacji panelowych.
  2. CentOS> 5 powstrzymałby cię przed zrobieniem tej aktualizacji i zabiciem skrzynki. To miła poduszka powietrzna.
  3. CentOS 7 twierdzi, że wspiera ważne aktualizacje. Nigdy go nie użyłem, ale możliwość przeskakiwania z 7 na 8 po wydaniu będzie bardzo dobra. Debian miał to od zawsze, ale Redhat zawsze wymagał ponownej instalacji w przypadku dużych skoków wersji.

Rozwiązanie

Najlepiej jest utworzyć nowy VPS, świeżo zainstalować CentOS7, a następnie ponownie podłączyć stary wolumin dysku centos5 i zamontować go tylko do odczytu. Następnie pracuj, aby skopiować (nie przenosić) dane ze starego dysku na nowy.

Zauważ, że to byłaby moja metoda z AWS. Jeśli Twój dostawca VPS nie może dołączyć dysków do różnych maszyn wirtualnych, musisz dostosować plan.

Bez względu na to, co robisz, rozważ skonfigurowanie automatycznych kopii zapasowych w przyszłości. Nie uratuje cię, ale uczyni odzyskiwanie nieco bardziej elastycznym. Teraz potrzebujesz danych z tego dysku na nowym działającym serwerze. Nie trać istniejącego dysku.

Criggie
źródło
9

Jak to mogło się stać? Cóż, całkiem proste: usuwając części, które były krytyczne dla twojego serwera.

Kolejne kroki dla Ciebie: ponownie zainstaluj nowy system operacyjny i przywróć dane z kopii zapasowych.

EEAA
źródło
1
Odinstalowanie pakietu nigdy nie powinno nigdy usuwać danych. Naprawdę nie powinno być potrzeby przywracania czegokolwiek, chyba że jakiś opiekun pakietu królewskiego spieprzył sprawę.
Jörg W Mittag
6
Jeśli OP przywróci nowy system operacyjny, tak jak zaleciłem, najpewniej będzie wymagane przywrócenie danych i konfiguracji.
EEAA
@ JörgWMittag Myślę, że źle zrozumiałeś użycie słowa „przywróć”. EEAA oznacza, że ​​system będzie musiał zostać ponownie skonfigurowany, a istniejące dane umieszczone gdzieś na nowej maszynie. „Przywracanie” może nie być najlepszym słowem na to, chociaż widziałem, że ktoś korzysta z funkcji przywracania bazy danych dla tego elementu.
jpmc26
@ JörgWMittag Och, jego dane wciąż są, najprawdopodobniej. Po prostu z jego niefunkcjonalnym systemem nie ma możliwości dostępu do niego.
Shadur,
4

Jak zauważył dragon788 i inni w komentarzach, w Gentoo programiści utrzymują również zestaw pakietów tinderbox , które są właśnie gotowymi , binarnymi wersjami zestawu podstawowych pakietów systemu operacyjnego na takie sytuacje. Jeśli stracisz pakiet podstawowy, wystarczy uruchomić system z LiveCD / DVD, zamontować dysk OS uszkodzonego serwera i rozpakować pakiety Tinderbox do systemu plików, odmontować, uruchomić ponownie, a jeśli uruchomi się poprawnie, odbuduj pakiety z powrotem do specyfikacji i konfiguracji serwera.

Tak więc, aby wykonać coś podobnego w CentOS, myślę, że musisz znaleźć odpowiednie wersje RPM, które zostały odinstalowane, a następnie uruchomić komputer na LiveCD / DVD, zamontować dysk systemu operacyjnego i uruchomić chroot (być może ... jeśli znasz jak używać flagi „ --relocate ” do rpm , może nie być konieczne chroot), a następnie ponownie zainstaluj te pakiety, odmontuj i uruchom ponownie.

Oczywiście, ponieważ obsługa CentOS 5 zakończyła się w zeszłym miesiącu, po poprawnym uruchomieniu systemu można go zaktualizować do bieżącej wersji.

HTH.

B.Kaatz
źródło
0

Zazwyczaj można uruchomić komputer z nośnika instalacyjnego, a następnie chrooturuchomić polecenia lub wprowadzić bieżącą instalację i odzyskać pliki lub przeprowadzić ponowną instalację pakietów.

dragon788
źródło
4
Nie będziesz w stanie wykonać chroot do katalogu głównego bez użytecznych plików binarnych w / usr / bin itp. Dałoby to taki sam efekt jak uruchomienie w martwym systemie. Chroot również nie jest konieczny, ponieważ po zamontowaniu systemu plików możesz skopiować pliki, które chcesz uratować z / var / www.
qris 16.04.17
Zdecydowanie prawda, przypominam sobie instalowanie Gentoo / Arch, gdzie zwykle dostępnych jest kilka przydatnych plików binarnych. Nigdy najpierw nie odinstalowałem wszystkiego. ;)
dragon788