Servidor apagado após "yum remove python" [fechado]

65

Ocorreu um desastre depois de executar o comando yum remove pythone agora não consigo mais inicializar o servidor.

Como aconteceu: Tentei atualizar alguns aplicativos via yum no meu CentOS 5 VPS e o comando falhou devido a algum erro estranho do python 2.4. Percebi que minha versão do python era antiga e tentei reinstalá-lo removendo-o primeiro yum remove python.

Depois disso, ele me perguntou algo sobre como remover dependências e não parecia nada que eu pudesse sentir falta, então cliquei Y.

Então, o resultado disso foi que eu não conseguia executar nenhum comando. Eu até tentei, cd /var/wwwmas dizia algo como " command does not exist in /usr/bin". Quando eu costumava tabver sugestões de navegação em pastas, a estrutura do arquivo ainda parecia estar lá (pelo menos o /var/wwwque é realmente importante para mim). Depois disso, tentei reiniciar o vps (no painel de administração, pois o rebootcomando não funcionou) e agora ele não inicializa mais.

Agora, minha pergunta é: como um comando como esse pode destruir meu servidor dessa maneira?

tadoman
fonte
33
Aliás, o apt-get remove funciona do apt. Ainda não experimentei o dpkg --remove dpkg. Aposto que é muito ruim.
joshudson
19
Você tem um backup, certo?
precisa saber é o seguinte
21
@joshudson Acabei de criar um CD ao vivo do Debian 8.4 em uma VM e tentei. Resultado: # dpkg --remove dpkgcospe dpkg: error processing dpkg (--remove): this is an essential package; it should not be removed. Se eu adiciono --force-allà linha de comando do dpkg, dpkgcospe um pacote inteiro de avisos e procede a sua remoção, além de quebrar cerca de duas dezenas de outros pacotes que dependem dpkg. Em um sistema real, tenho certeza de que você teria algum problema em se recuperar disso, mas provavelmente poderia (há pouca mágica .deb); O CentOS pode ou não ser semelhante a esse respeito.
um CVn
6
@joshudson Funciona porque há uma cópia do apt em execução na memória quando você emitir o comando ... assim que terminar (e o programa terminar), você não poderá mais usar o apt.
SnakeDoc
2
Yum em si é implementado em Python, eu acredito ... Então, remover o Python atira muito bem no seu próprio pé!
Peufeu 18/04

Respostas:

67

Lamento sinceramente: sinto a dor de ter um servidor não inicializável / não reparável.

No entanto, estou perdido ao ler isso:

Depois disso, ele me perguntou algo sobre como remover dependências e não parecia nada que eu pudesse sentir falta, então cliquei em [Y]

A lista de pacotes a serem removidos certamente foi realmente enorme, pois pythoné uma parte essencial do RHEL / CentOS. Você nunca deve confirmar alguma mensagem de aviso que realmente não entende.

A melhor coisa que você pode fazer, como já sugerido, é inicializar através de uma mídia de recuperação (por exemplo: livecd), extrair os arquivos de dados necessários e reinstalar sua máquina com uma versão mais recente do CentOS (e como o CentOS 6 é bastante antigo, eu recomendo sugiro que você faça uma nova atualização no CentOS 7).

shodanshok
fonte
2
Para o futuro: construa servidores com o SO em LVM LVs (que ISTR é o padrão RHEL). Antes de qualquer coisa que tenha a menor chance de quebrar o sistema, crie instantâneos. Se realmente quebrar o sistema, você poderá reverter para o instantâneo em minutos. Caso contrário, quando tudo estiver OK, você poderá remover o instantâneo. unix.stackexchange.com/questions/18913 . NB instantâneos não são backups. Você ainda precisa de backups para situações em que o instantâneo não pode salvá-lo.
precisa saber é o seguinte
No Debian / Ubuntu, ele pode inicializar a imagem de recuperação (por exemplo, finnix), descompactar o sistema base com o debootstrap, chroot e apt-get install ubuntu-desktop. Não faço ideia se os centos / rhel têm o desbootstrap equivalente.
Edheldil
11
O CentOS 6 é suportado até novembro de 2020 . Não há pressa para atualizar (embora a versão 7 tenha muitas vantagens).
Psmears 19/04
106

Francamente, porque você fez algo que não entendeu completamente. Python é uma parte essencial do sistema operacional e as coisas que você considera sem importância são muito importantes. Restaurar a partir do backup.


Quando você removeu o Python, yummostrou uma longa lista de pacotes que também seriam removidos. Esta lista contém bens essenciais como yuma si mesmo, coreutils, net-toolse outros. Você confirmou a yum que sabe o que está fazendo e deseja prosseguir de qualquer maneira. O resultado disso é um sistema não operacional. Isso não deveria ser surpreendente.

Para o registro, na versão mais recente do CentOS isso não é mais possível, pois certos pacotes agora estão marcados como protegidos e não podem ser removidos, apenas reinstalados ou atualizados. E como o CentOS 5 agora é EOL, é um bom momento para atualizar para uma versão mais recente.

Sven
fonte
3
Haha bem que escalou rapidamente (yum remove python == apenas limpe a máquina inteira: D). Você acha que existe alguma maneira de pelo menos restaurar os arquivos que estavam em / var / www ou que isso também é totalmente errado?
precisa saber é o seguinte
8
@tadoman: Se você pode inicializar em algum tipo de sistema de recuperação, poderá montar o disco e recuperar dados dele (esses devem ser todos os dados do usuário, incluindo arquivos de configuração). Você precisa entrar em contato com seu provedor para discutir o que é possível no ambiente deles.
Sven
6
@RussellBorogove: Eu não digo nada disso. yumfunciona percorrendo o gráfico de dependência e remove os pacotes até que todas as dependências sejam satisfeitas. Se o pacote A depender do pacote B e o pacote B depender do pacote C, yumtambém removerá o pacote B e, por sua vez, o pacote A para satisfazer todas as dependências se você tentar remover o pacote C. Para pacotes centrais (como python), isso pode resultar em um grande número de pacotes removidos que aparentemente não estão relacionados.
Sven
4
@RussellBorogove: Sim, exatamente, embora coreutilsnão dependa pythondiretamente do CentOS 5, mas através de um ou mais pacotes intermediários - o resultado é o mesmo: Remoção.
Sven
4
O número de pacotes intermediários para coreutils parece ser dois. python -> cracklib -> pam -> coreutils A dependência existe porque existem ligações python ao cracklib, o pam foi criado com o cracklib e esse su está integrado ao pam. Claro que tirou muitas coisas importantes também, como yum para instalar qualquer mais pacotes ...
John Mahowald
15

Você fez algo sem entender completamente as consequências

Essa instalação é irrecuperável, exigiria muito trabalho para reinstalar o centos5. E esse é um plano ruim porque

  1. O CentOS 5 é o fim da vida útil e, portanto, não possui atualizações. Isso é extremamente sério, pois parece um servidor da web que exibe conteúdo na Internet pública e que você usa aplicativos do painel para controlá-lo.
  2. O CentOS> 5 o impediria de fazer essa atualização e matar a caixa. É um bom airbag para se ter.
  3. O CentOS 7 afirma apoiar as principais atualizações de versão em vigor. Eu nunca o usei, mas ser capaz de pular de 7 para 8 quando for lançado será muito bom. O Debian tinha isso desde sempre, mas o Redhat sempre exigia uma reinstalação para os principais saltos de versão.

Solução

Sua melhor aposta é criar um novo VPS, instalar novamente o CentOS7 e, em seguida, reconectar o antigo volume de disco do centos5 e montá-lo somente leitura. Em seguida, trabalhe para copiar (não mover) seus dados da unidade antiga para a nova.

Observe que esse seria o meu método usando a AWS. Se o seu provedor de VPS não puder anexar discos a diferentes VMs, você precisará ajustar o plano.

Não importa o que você faça, considere configurar backups automatizados no futuro. Isso não salvaria você, mas tornaria a recuperação um pouco mais flexível. No momento, você precisa dos dados nesse disco em um novo servidor em funcionamento. Não perca o disco existente.

Criggie
fonte
9

Como isso pôde acontecer? Bem, bem simples: removendo partes que eram críticas para o seu servidor.

Próximas etapas para você: reimplante um novo sistema operacional e restaure seus dados a partir de backups.

EEAA
fonte
11
A desinstalação de um pacote nunca deve remover dados. Realmente não deve haver necessidade de restaurar nada, a menos que algum mantenedor do pacote tenha estragado tudo.
Jörg W Mittag
6
Se o OP restaurar um sistema operacional novo, como eu recomendei, a restauração de dados e configuração certamente será necessária.
EEAA
@ JörgWMittag Acho que você pode ter entendido mal o uso da palavra "restaurar". EEAA significa que o sistema precisará ser reconfigurado e os dados existentes colocados em algum lugar da nova máquina. "Restaurar" pode não ser a melhor palavra para isso, embora eu possa ver alguém usando a funcionalidade de restauração de banco de dados para essa peça.
precisa
@ JörgWMittag Oh, seus dados ainda estão lá, provavelmente. É que, com seu sistema não-funcional, ele não tem como acessá-lo.
Shadur
4

Como apontado por dragon788 e outros nos comentários, no Gentoo, os desenvolvedores também mantêm um conjunto de pacotes tinderbox que são apenas versões binárias pré-construídas de um conjunto de pacotes principais do sistema operacional para essas situações. Se você perder um pacote principal, basta iniciar o sistema no LiveCD / DVD, montar a unidade do SO do servidor quebrado e descompactar os pacotes tinderbox no sistema de arquivos, desmontar, reiniciar e, se inicializar corretamente, reconstrua os pacotes de volta às especificações e configurações do seu servidor.

Portanto, para executar algo semelhante no CentOS, acho que você precisaria encontrar as versões corretas dos RPMs que foram desinstalados, em seguida, inicialize em um LiveCD / DVD, monte a unidade do SO e faça o chroot (talvez ... se você estiver familiarizado com como usar o sinalizador " --relocate " para o rpm , talvez não seja necessário chroot), depois reinstale esses pacotes, desmonte e reinicie.

Obviamente, como o suporte ao CentOS 5 terminou no mês passado, depois de reiniciar o sistema corretamente, você pode atualizá-lo para uma versão atual.

HTH.

B.Kaatz
fonte
0

Normalmente, você pode inicializar a partir da mídia de instalação e, em seguida, chrootexecutar comandos ou entrar na instalação atual e recuperar arquivos ou executar uma reinstalação de pacotes.

dragon788
fonte
4
Você não poderá executar o chroot em um diretório raiz sem binários úteis em / usr / bin, etc. Isso daria o mesmo resultado que a inicialização no sistema morto. O Chroot também não é necessário porque, depois de montar o sistema de arquivos, você pode copiar os arquivos que deseja resgatar de / var / www.
QRIS
Definitivamente verdade, estou me lembrando de instalar o Gentoo / Arch, onde geralmente existem alguns binários úteis disponíveis. Eu nunca desinstalei tudo primeiro. ;)
Dragon788