Centos, enlazar sh a dash, intento fallido

Tras investigar un poco sobre las diferentes shells, decidí cambiar la script shell por defecto de Centos por dash. Hay que aclarar que la script shell no es la shell de ningún usuario, sino la shell de los daemons. Solía ser sh en la mayoría de las distros, aunque ya no es así.

En Ubuntu desde la versión 6.06, en Debian desde Squeeze y en Fedora desde 17 (si no me equivoco) la script shell por defecto es dash (Debian Almquist shell). Dash es más pequeño y más rápido que bash, esto es bastante importante en el inicio del sistema. ¿Y por qué hablo de bash y no de sh? Pues porque en la mayoría de las distros sh es un link que apunta ya sea a bash u a otra cosa.

En la wiki de ubuntu explican el uso de dash de esta manera:

The boot speed improvements in Ubuntu 6.10 were often incorrectly attributed to Upstart, which is a fine platform for future development of the init system but in Ubuntu 6.10 was primarily running in System V compatibility mode with only small behavioural changes.

La mejora de la velocidad de inicio de Ubuntu 6.10 fue muchas veces atribuida de manera equivocada a Upstart, que es una buena plataforma para el desarrollo del sistema init, pero que en Ubuntu 6.10 estaba ejecutándose en modo de compatibilidad con Sys V con solo algunos cambios.

Vaya, vaya, vaya. Decidí probar dash como la script shell en Centos, a pesar de las advertencias de algunos usuarios de Unix & Linux, pero antes tenía que saber a qué estaba enlazado /bin/sh en mi sistema.

Pregunté por Unix & Linux y me respondieron que se miraba con:

ls -l `which sh` 

El resultado en mi caso (Centos 6) fue:

lrwxrwxrwx. 1 root root 4 mar  9 22:42 /bin/sh -> bash

Me decían que lo que me proponía a hacer rompería el sistema porque los scripts de inicio de Centos están diseñados para bash, pero como el mundo es de los valientes…

Antes de los cambios /bin/sh era un enlace blando a /bin/bash:

48785 -rwxr-xr-x.  1 root root  938768 feb 21 22:09 bash
73189 lrwxrwxrwx.  1 root root       4 mar  9 22:42 sh -> bash

Por seguridad renombré /bin/sh a /bin/sh.bak y creé un enlace fuerte (porque son más rápidos que los blandos) de /bin/sh a /bin/dash:

14588 -rwxr-xr-x.  1 root root  109672 oct 17  2012 dash
14588 -rwxr-xr-x.  2 root root  109672 oct 17  2012 sh

Y reinicié. Ya reiniciando vi aparecer algunos errores típicos de un script mal escrito, línea noseque símbolo no reconocido o algo por el estilo, pero al iniciarlo, el sistema simplemente no iniciaba.

El mensaje de error:

/dev/fd/0: 0: /dev/fd/0: 1: Syntax error: Bad fd number

init: readahead-collector main process (501) terminated with status 2
init: rcS pre-start process (502) terminated with status 2
init: readahead main process (503) terminated with status 2
init: readahead-collector post-stop process (504) terminated with status 2
/dev/fd/0: 11: Syntax error: Bad fd nummber
init: rcS post-stop process (505) terminated with status 2
init: readahead-disable-services main process (506) terminated with status 2

Nada, a iniciar Fedora, montar el sistema de archivos de Centos, borrar /bin/sh y renombrar /bin/sh.bak a /bin/sh y listo, como si no hubiera pasado.

Como es un tema que me interesa y sobre el cual no he podido encontrar información detallada en internet tras varias horas de búsqueda, he expuesto aquí mi aventura.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s