Servidor borrado después de "yum remove python" [cerrado]

65

Se me ocurrió un desastre después de ejecutar el comando yum remove pythony ahora ya no puedo arrancar el servidor.

Cómo sucedió: intenté actualizar algunas aplicaciones a través de yum en mi CentOS 5 VPS y el comando fallaba debido a un extraño error de Python 2.4. Noté que mi versión de Python era antigua e intenté reinstalarla quitándola primero, y así lo hice yum remove python.

Después de eso, me preguntó algo sobre la eliminación de dependencias y parecía que no podía perderme nada, así que hice clic Y.

Entonces, después de eso, no pude ejecutar ningún comando. Incluso lo intenté cd /var/wwwpero decía algo así como " command does not exist in /usr/bin". Cuando solía tabver sugerencias de navegación de carpetas, la estructura del archivo todavía parecía estar allí (al menos el /var/wwwbit que es realmente importante para mí). Después de eso intenté reiniciar el vps (desde el panel de administración ya que el rebootcomando no funcionó) y ahora ya no se inicia.

Ahora mi pregunta es: ¿cómo puede un comando como ese posiblemente destruir mi servidor de esta manera?

tadoman
fuente
33
Por cierto, apt-get remove apt funciona. No he probado dpkg --remove dpkg todavía. Apuesto a que es realmente malo.
joshudson
19
Tienes una copia de seguridad, ¿verdad?
vasin1987
21
@joshudson Acabo de crear un CD en vivo de Debian 8.4 en una máquina virtual y lo probé. Resultado: # dpkg --remove dpkgescupe dpkg: error processing dpkg (--remove): this is an essential package; it should not be removed. Si agrego --force-alla la línea de comando de dpkg, dpkgescupe un paquete completo de advertencias y procede a eliminarse, junto con romper alrededor de dos docenas de otros paquetes que dependen dpkg. En un sistema real, estoy bastante seguro de que tendría algunos problemas para recuperarse de eso, pero probablemente podría (hay poca magia .deb); CentOS puede o no ser similar a este respecto.
un CVn
66
@joshudson Funciona porque hay una copia de apt ejecutándose en la memoria cuando emite el comando ... tan pronto como termine (y el programa finalice), ya no podrá usar apt.
SnakeDoc
2
Yum en sí está implementado en Python, creo ... ¡Así que quitar Python dispara tu propio pie bastante bien!
peufeu

Respuestas:

67

Lo siento sinceramente: puedo sentir el dolor de tener un servidor que no se puede arrancar / que no se puede reparar.

Sin embargo, estoy perdido al leer eso:

Después de eso, me preguntó algo sobre la eliminación de dependencias y parecía que no me podía perder nada, así que hice clic en [Y]

La lista de paquetes que se eliminarán seguramente fue realmente enorme, ya que pythones una parte esencial de RHEL / CentOS. Usted debe nunca se confirme algún mensaje de advertencia que no entiendo muy bien.

Lo mejor que puede hacer, como ya se sugirió, es arrancar a través de un medio de recuperación (es decir, livecd), extraer los archivos de datos necesarios y reinstalar su máquina con una versión más reciente de CentOS (y como CentOS 6 es bastante antiguo, creo que sugiero que rebase en CentOS 7).

shodanshok
fuente
2
Para el futuro: cree servidores con el sistema operativo en LVM LV (que ISTR es el valor predeterminado de RHEL). Antes de cualquier cosa que tenga la más mínima posibilidad de romper el sistema, cree instantáneas. Si efectivamente rompe el sistema, puede volver a la instantánea en minutos. De lo contrario, cuando todo esté bien, puede eliminar la instantánea. unix.stackexchange.com/questions/18913 . Las instantáneas de NB no son copias de seguridad. Todavía necesita copias de seguridad para situaciones en las que la instantánea no puede salvarlo.
nigel222
En Debian / Ubuntu, podría arrancar la imagen de recuperación (por ejemplo, finnix), desempaquetar el sistema base con debootstrap, chroot y apt-get install ubuntu-desktop. No tengo idea de si los centos / rhel tienen un equivalente de debootstrap.
Edheldil
1
CentOS 6 es compatible hasta noviembre de 2020 . No hay prisa por actualizar (aunque ir a 7 tiene muchas ventajas).
psmears
106

Francamente, porque hiciste algo que no entendiste completamente. Python es una parte esencial del sistema operativo y las cosas que considerabas sin importancia son muy importantes. Reinstalar desde el respaldo.


Cuando eliminó Python, le yummostró una larga lista de paquetes que también se eliminarían. Esta lista contiene elementos esenciales como yumsí mismo, coreutils, net-toolsy otros. Usted confirmó a ñam que sabe lo que está haciendo y que desea continuar de todos modos. El resultado de esto es un sistema que no funciona. Esto no debería ser sorprendente.

Para el registro, en la versión más nueva de CentOS esto ya no es posible, ya que ciertos paquetes ahora están marcados como protegidos y no se pueden eliminar, solo reinstalar o actualizar. Y dado que CentOS 5 ahora es EOL de todos modos, este es un buen momento para actualizar a una versión más nueva.

Sven
fuente
3
Jaja bueno, eso se intensificó rápidamente (yum remove python == simplemente limpie toda la máquina: D). ¿Considera si hay alguna manera de que al menos pueda restaurar los archivos que estaban en / var / www o también es completamente estúpido?
tadoman
8
@tadoman: si puede arrancar en algún tipo de sistema de rescate, podrá montar el disco y recuperar datos del mismo (estos deberían ser todos sus datos de usuario, incluidos los archivos de configuración). Debe comunicarse con su proveedor para analizar lo que es posible en su entorno.
Sven
66
@RussellBorogove: No digo nada de esto. yumfunciona caminando por el gráfico de dependencia y elimina los paquetes hasta que se satisfagan todas las dependencias. Si el paquete A depende del paquete B y el paquete B depende del paquete C, yumtambién eliminará el paquete B y, a su vez, el paquete A para satisfacer todas las dependencias si intenta eliminar el paquete C. Para paquetes centrales (como python), esto puede resultar en un gran cantidad de paquetes eliminados que aparentemente no están relacionados.
Sven
44
@RussellBorogove: Sí, exactamente, aunque coreutilsno depende pythondirectamente de CentOS 5, sino a través de uno o más paquetes intermedios; sin embargo, el resultado es el mismo: eliminación.
Sven
44
El número de paquetes intermedios a coreutils parece ser dos. python -> cracklib -> pam -> coreutils La dependencia existe porque hay enlaces de python a cracklib, pam se creó con cracklib y su su se integra con pam. Por supuesto, también sacó muchas cosas importantes, como yum para instalar más paquetes ...
John Mahowald
15

Hiciste algo sin comprender completamente las consecuencias

Esa instalación es irrecuperable, requeriría mucho trabajo para reinstalar centos5. Y ese es un mal plan porque

  1. CentOS 5 es End of Life y, por lo tanto, no tiene actualizaciones. Esto es muy grave dado que suena como un servidor web que sirve contenido en Internet público y que utiliza aplicaciones de panel para controlarlo.
  2. CentOS> 5 te habría impedido hacer esta actualización y matar la caja. Esa es una buena bolsa de aire para tener.
  3. CentOS 7 afirma que admite actualizaciones de versiones principales en su lugar. Nunca lo he usado, pero ser capaz de saltar de 7 a 8 cuando se lance será muy bueno. Debian ha tenido esto desde siempre, pero Redhat siempre requirió una reinstalación para los saltos de versiones principales.

Solución

Su mejor opción es crear un nuevo VPS, una instalación nueva de CentOS7, y luego volver a conectar el antiguo volumen de disco centos5 y montarlo de solo lectura. Luego trabaje para copiar (no mover) sus datos de la unidad anterior a la nueva.

Tenga en cuenta que este sería mi método con AWS. Si su proveedor de VPS no puede conectar discos a diferentes máquinas virtuales, tendrá que modificar el plan.

No importa lo que haga, considere configurar copias de seguridad automáticas en el futuro. No te salvaría, pero haría que la recuperación sea algo más flexible. En este momento necesita los datos en ese disco en un nuevo servidor de trabajo. No pierdas el disco existente.

Criggie
fuente
9

¿Cómo pudo pasar esto? Bueno, bastante simple: eliminando partes que eran críticas para su servidor.

Próximos pasos para usted: vuelva a implementar un sistema operativo nuevo y restaure sus datos de las copias de seguridad.

EEAA
fuente
1
Desinstalar un paquete nunca debería eliminar datos. Realmente no debería existir la necesidad de restaurar nada, a menos que algún responsable del paquete se equivoque.
Jörg W Mittag
66
Si el OP restaura un sistema operativo nuevo como lo recomendé, seguramente se requerirá la restauración de los datos y la configuración.
EEAA
@ JörgWMittag Creo que podría haber entendido mal el uso de la palabra "restaurar". EEAA significa que el sistema tendrá que reconfigurarse y los datos existentes se colocarán en algún lugar de la nueva máquina. "Restaurar" podría no ser la mejor palabra para eso, aunque podría ver a alguien usando la funcionalidad de restauración de la base de datos para esa pieza.
jpmc26
@ JörgWMittag Oh, sus datos todavía están allí, lo más probable. Es solo que con su sistema no funcional no tiene forma de acceder a él.
Shadur
4

Como señalaron dragon788 y otros en los comentarios, en Gentoo, los desarrolladores también mantienen un conjunto de paquetes tinderbox que son versiones binarias preconstruidas de un conjunto de paquetes principales del sistema operativo para tales situaciones. Si pierde un paquete principal, simplemente inicia el sistema en el LiveCD / DVD, monta la unidad del sistema operativo del servidor dañado y desempaqueta los paquetes de Tinderbox en el sistema de archivos, desmonta, reinicia y, si se inicia correctamente, reconstruya los paquetes de nuevo a las especificaciones y configuraciones de su servidor.

Entonces, para realizar algo similar en CentOS, creo que necesitaría encontrar las versiones correctas de los RPM que se desinstalaron, luego iniciar en un LiveCD / DVD, montar la unidad del sistema operativo y realizar el chroot (quizás ... si está familiarizado con cómo usar el indicador " --relocate " para rpm , es posible que no necesite hacer chroot), luego reinstale esos paquetes, desmonte y reinicie.

Por supuesto, dado que el soporte para CentOS 5 finalizó el mes pasado, después de reiniciar el sistema correctamente, puede actualizarlo a una versión actual.

HTH.

B.Kaatz
fuente
0

Por lo general, puede iniciar desde el medio de instalación y luego chrootejecutar comandos o ingresar a la instalación actual y recuperar archivos o realizar una reinstalación de paquetes.

dragon788
fuente
44
No podrá iniciar sesión en un directorio raíz sin binarios útiles en / usr / bin, etc. Daría el mismo resultado que arrancar en el sistema muerto. Chroot tampoco es necesario porque una vez que tiene el sistema de archivos montado, puede copiar los archivos que desea rescatar de / var / www.
qris
Definitivamente cierto, recuerdo haber instalado Gentoo / Arch donde generalmente hay algunos binarios útiles disponibles. Nunca he desinstalado todo primero. ;)
dragon788