Katastrofa właśnie przyszła mi do głowy po uruchomieniu polecenia yum remove python
i 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/www
ale 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/www
która jest dla mnie naprawdę ważna). Potem próbowałem zrestartować vps (z panelu administracyjnego, ponieważ reboot
polecenie 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?
# dpkg --remove dpkg
wypluwadpkg: error processing dpkg (--remove): this is an essential package; it should not be removed
. Jeśli dodam--force-all
do wiersza poleceń dpkg,dpkg
wypluwam 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ówdpkg
. 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.Odpowiedzi:
Bardzo mi przykro: czuję ból z powodu braku możliwości uruchomienia / awarii serwera.
Jednak zagubiłem się, czytając:
Lista pakietów, które należy usunąć, z pewnością była naprawdę ogromna, podobnie jak
python
istotna 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).
źródło
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,
yum
pokazał ci długą listę pakietów, które również zostaną usunięte. Lista ta zawiera takie podstawowe informacje, jakyum
sobie,coreutils
,net-tools
i 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.
źródło
yum
dział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,yum
usunie 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 (jakpython
) może to spowodować duża liczba usuniętych pakietów, które pozornie nie są ze sobą powiązane.coreutils
nie zależypython
bezpośrednio od CentOS 5, ale przez jeden lub więcej pakietów pośrednich - wynik jest taki sam: Usunięcie.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 ...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ż
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.
źródło
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.
źródło
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.
źródło
Zazwyczaj można uruchomić komputer z nośnika instalacyjnego, a następnie
chroot
uruchomić polecenia lub wprowadzić bieżącą instalację i odzyskać pliki lub przeprowadzić ponowną instalację pakietów.źródło