Tomei uma péssima decisão em um dos meus servidores.
Eu apaguei /bin/sh
. Eu reiniciei o servidor e o servidor não será executado porque ele precisa /bin/sh
iniciar os scripts rc. Também não consigo acessar o modo de usuário único porque sh é necessário.
Existe alguma maneira fácil de reinstalar o shell de bourn?
Tentei copiar sh de um CD ao vivo, ele falhou na biblioteca ld-elf.so.1. Então, eu copiei isso para / libexec do livecd para minha / partição. Ele precisa da biblioteca libedit.so e eu a copiei para / libexec, mas desta vez não está funcionando.
Eu tentei um link simbólico, /usr/local/bin/bash
mas isso ainda me apresenta o erro do tipo "não é possível encontrar sh". Estou assumindo que é porque /usr
ainda não está montado porque é feito a partir de um script rc.
Qualquer ajuda é muito apreciada.
Respostas:
Você precisa substituir / bin / sh por algo ; essa é a chave. Se você pode acessar o carregador do FreeBSD durante a inicialização (com um prompt "ok"), tente algo como isto:
Eu obtive essas informações do loader (8) nas páginas de manual do FreeBSD (online). Eu não fiz isso, mas deve funcionar (assumindo que / bin / csh esteja presente e seja executável).
Se você possui um servidor FreeBSD 8.2 em execução em outro local, tente roubar o / bin / sh dessa fonte e colocá-lo no sistema onde for necessário.
Como alternativa, obtenha um / bin / sh estaticamente construído e coloque-o; não haverá problemas de biblioteca com um binário estaticamente construído.
EDIT: Eu deveria ter notado: se você inicializar em / bin / csh, ainda precisará obter algo para usar em vez de / bin / sh. Você pode obtê-lo pela Internet ou copiá-lo de outro CD ou pacote ou algo assim; O uso de / bin / csh para inicializar leva você à máquina. Copiar pela rede exige que você abra a rede; caso contrário, copie de um CD-ROM.
As melhores maneiras de evitar isso no futuro:
Faça os três.
fonte
OK, primeiro a palestra:
Não suje com SISTEMA BINARIES
Qualquer coisa
/bin
,/sbin
e/rescue
no FreeBSD deve ser deixado sozinho. Mesmo se você souber o que está fazendo (se você souber o que está fazendo, também saberá que eles devem ser deixados em paz. Eles são realmente importantes - todos eles!)NÃO apague
/bin/sh
. SEMPRE. Em qualquer sistema * NIX que o possua.Realmente. Não faça isso. A LOT de roteiros dependem de
/bin/sh
ser um Shell Bourne. Isso quebra o universo.Se você realmente quiser, você provavelmente pode substituir de forma segura-lo com uma cópia de
bash
como Adam Z sugerido, mas se você estiver indo para fazer isso você pode querer estaticamente ligação que copiar debash
- Ele puxa em um monte de bibliotecas, e você pode não ter esses até que o sistema esteja instalado e/usr/local
montado.Agora, como consertar a bagunça? Duas opções:
Opção 1: Um pouco doloroso
Vá para http://www.freesbie.org/ (ou o FreeBSD LiveCD de sua escolha - você provavelmente pode até usar o CD de recuperação de http://www.freebsd.org para isso). Pegue o LiveCD, grave-o e inicie-o.
Quando estiver no ambiente do LiveCD, monte a partição raiz do sistema bloqueado, copie-o
/bin/sh
do LiveCD para a sua máquina e reinicie.Isso deve fazer com que você volte a funcionar. Você pode seguir as instruções para Reconstruir o "Mundo" ou, pelo menos, recompilar a
/bin/sh
partir de uma árvore de origem que corresponda ao seu sistema em execução.Opção 2: Menos doloroso, sem LiveCD
Se você tiver outra caixa do FreeBSD por perto, poderá optar por (ou alguma outra maneira de obter uma cópia da cópia
/bin/sh
, traga sua máquina FreeBSD para o modo de usuário único. Configure a rede (ou monte qualquer mídia que tenha o shell de substituição) e copie-o no lugar onde deveria estar.Reinicie e você deve estar bem - as mesmas ressalvas que o LiveCD, se o
/bin/sh
pegar não for de uma máquina razoavelmente próxima da idêntica.fonte
/bin
não está mais vinculado estaticamente. Acho que os CDs de resgate para a liberação adequada do FreeBSD tem um shell utilizável (isto é, que só pode ser despejado no lugar), mas tem sido um tempo desde que iniciado um ...Em vez de simbolizar, copie seu arquivo
bash
para/bin/sh
. Use oldd
comando para encontrar quaisquer bibliotecas que possam residir em sistemas de arquivos que não sejam rootfs e copiá-las também para rootfs.fonte