FreeBSD 8.2, eliminado / bin / sh, no se puede iniciar

8

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/shiniciar 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/bashpero todavía me presenta el error de tipo "No puedo encontrar sh". Supongo que es porque /usrtodavía no está montado porque se hace desde un script rc.

Cualquier ayuda es muy apreciada.

jon
fuente
2
Oh mi. Eso no está bien. Es hora de tirar de la última cinta.
MDMarra
Sus problemas de LiveCD probablemente se deben a que es una versión diferente de FreeBSD (o su LiveCD está usando un binario aplastado mágico que es / bin / ABunchOfStuff vinculado a diferentes nombres). ¿Qué versión de FreeBSD está ejecutando?
voretaq7
La versión herp-derp está en el título. No te preocupes por mi Necesito café.
voretaq7
3
Entonces ... uhm ... ¿qué te obligó a hacer esto? Lo haces sonar como si fuera intencional.
user606723

Respuestas:

8

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:

set init_shell=/bin/csh
unset init_script
unset init_path

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:

  1. ¡No elimines de / bin! (esa es la parte fácil)
  2. Tener un / bin / sh estáticamente construido, no vinculado dinámicamente.
  3. Tener una copia de seguridad sh como /bin/sh.static.

Haz los tres.

Mei
fuente
También es una excelente solución para "recuperarme para que pueda solucionar esto" (con la virtud de no requerir que tengas un LiveCD para arrancar).
voretaq7
6

OK, primero la conferencia:

  1. NO HAGA MENSAJES CON LOS BINARIOS DEL SISTEMA
    Cualquier cosa/bin,/sbiny/rescueen 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!)

  2. 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/shser un Shell Bourne. Rompe el universo.
    Si REALMENTE lo desea, probablemente pueda reemplazarlo de manera segura con una copia de labashque 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/localmontado.


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/shel 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/shdesde 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/shlo toma no es de una máquina razonablemente cercana a la idéntica.

voretaq7
fuente
1
Usar / bin / bash de otra distribución de FreeBSD solo funcionará si las bibliotecas compartidas son la versión correcta. Es mejor usar algo que viene directamente de FreeBSD 8.2 en lugar de una compilación alternativa. Sin embargo, cualquier sistema FreeBSD 8.x debería ser capaz de proporcionar un shell construido estáticamente que funcione.
Mei
@david Buen punto: /binya 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 que
arranqué
4

En lugar de simular, copie su bashen /bin/sh. Use el lddcomando para buscar bibliotecas que puedan residir en sistemas de archivos que no sean rootfs y copiarlas también en rootfs.

Adam Zalcman
fuente
1
Esta es una buena solución, pero hace un poco de desorden en la biblioteca que requerirá una limpieza posterior más adelante.
voretaq7
Sí, la limpieza es necesaria después. Una alternativa sería utilizar un shell binario construido estáticamente.
Adam Zalcman