Tomé una decisión realmente mala en uno de mis servidores.
He eliminado /bin/sh
. Reinicié el servidor y el servidor no se ejecutará porque necesita /bin/sh
iniciar los scripts rc. Tampoco puedo acceder al modo de usuario único porque se necesita sh.
¿Hay alguna manera fácil de reinstalar el shell de bourn?
Intenté copiar sh de un CD en vivo, falló en la biblioteca ld-elf.so.1. Así que copié eso a / libexec desde el livecd a mi / partición. Luego necesita la biblioteca libedit.so y la copié en / libexec pero esta vez no funciona.
Intenté un enlace simbólico /usr/local/bin/bash
pero todavía me presenta el error de tipo "No puedo encontrar sh". Supongo que es porque /usr
todavía no está montado porque se hace desde un script rc.
Cualquier ayuda es muy apreciada.
Respuestas:
Necesita reemplazar / bin / sh con algo ; Esa es la clave. Si puede acceder al cargador de FreeBSD durante el inicio (con un mensaje "ok") intente algo como esto:
Obtuve esta información del cargador (8) de las páginas del manual de FreeBSD (en línea). No he hecho esto, pero debería funcionar (suponiendo que / bin / csh esté presente y sea ejecutable).
Si tiene un servidor FreeBSD 8.2 en funcionamiento en otro lugar, puede intentar robar / bin / sh de esa fuente y ponerlo en el sistema donde sea necesario.
Alternativamente, obtenga un / bin / sh estáticamente construido y póngalo en su lugar; no habrá problemas de biblioteca con un binario creado estáticamente.
EDITAR: Debería haber notado: si inicia en / bin / csh, todavía tiene que obtener algo para usar en lugar de / bin / sh. Puede obtenerlo por Internet o copiarlo desde otro CD o un paquete o algo; usar / bin / csh para arrancar te lleva a la máquina. Copiar a través de la red requiere que aparezca la red; de lo contrario, copie desde un CDROM.
Las mejores formas de evitar esto en el futuro:
Haz los tres.
fuente
OK, primero la conferencia:
NO HAGA MENSAJES CON LOS BINARIOS DEL SISTEMA
Cualquier cosa
/bin
,/sbin
y/rescue
en FreeBSD debe dejarse solo. Incluso si sabe lo que está haciendo (si sabe lo que está haciendo, también sabe que deben dejarse en paz. ¡Son realmente importantes, todos ellos!)NO eliminar
/bin/sh
. SIEMPRE. En cualquier sistema * NIX que lo tenga.De Verdad. No lo hagas Un montón de guiones se basan en
/bin/sh
ser un Shell Bourne. Rompe el universo.Si REALMENTE lo desea, probablemente pueda reemplazarlo de manera segura con una copia de la
bash
que sugirió Adam Z, pero si va a hacer eso, es posible que desee vincular estáticamente esa copia debash
- Atrae muchas bibliotecas, y usted puede no tenerlos hasta que el sistema esté encendido y/usr/local
montado.Ahora, ¿cómo arreglar el desastre? Dos opciones:
Opción 1: Algo doloroso
Dirígete a http://www.freesbie.org/ (o el LiveCD de FreeBSD que elijas; probablemente incluso puedas usar el CD de recuperación de http://www.freebsd.org para esto). Coge el LiveCD, grábalo y arranca.
Una vez que esté en el entorno LiveCD, monte la partición raíz de su sistema roto, copie
/bin/sh
el LiveCD en su máquina y luego reinicie.Esto debería ayudarlo a volver a funcionar: es posible que desee seguir las instrucciones para Reconstruir "Mundo" , o al menos volver a compilar
/bin/sh
desde un árbol de origen que coincida con su sistema en ejecución.Opción 2: menos doloroso, sin LiveCD
Si tiene otro cuadro de FreeBSD a su alrededor, puede usarlo (o alguna otra forma de obtener una copia de sus dedos
/bin/sh
, active su máquina FreeBSD en modo de usuario único. Configure la red (o monte cualquier medio que tenga el shell de reemplazo), y cópielo en su lugar donde se supone que debe estar.Reinicie y debería estar bien: las mismas advertencias que el LiveCD, aunque si
/bin/sh
lo toma no es de una máquina razonablemente cercana a la idéntica.fuente
/bin
ya no está vinculado estáticamente. Creo que los CD de Rescue para el lanzamiento apropiado de FreeBSD tienen un shell utilizable (es decir, uno que simplemente se puede volcar en su lugar), pero ha pasado un tiempo desde queEn lugar de simular, copie su
bash
en/bin/sh
. Use elldd
comando para buscar bibliotecas que puedan residir en sistemas de archivos que no sean rootfs y copiarlas también en rootfs.fuente