jueves, 22 de enero de 2009

Ohayo, HAL

Vamos a repasar por donde estamos en la senda que hemos iniciado junto a HAL para tratar de hacerle responder en la lengua que nos plazca, porque entre tantas idas y venidas y recovecos varios quizá andemos perdidos o casi mareados. Prometo que, al final, daré un esquema o mapa de todo el recorrido. Y estamos cerca, muy cerca, de ese final.

De momento valdrá echar la vista atrás para ver el paisaje que queda al fondo.

Nuestro objetivo inicial fue pedirle a HAL que nos respondiera en castellano, a lo Sancho Panza, pero en fino, es decir, en la forma en que HAL entiende la finura, que es para muchos fría como el hielo y para unos pocos, entre los cuales se encontrará el lector al cabo de estas charlas, cálida como el retorno al hogar.

Logramos que lo hiciera temporalmente, para cada pregunta que le hacíamos. Pero no contentos con esto nos propusimos que nos descargase del trabajo de solicitarle continuamente la respuesta en castellano. También conseguimos esto, modificando su propia configuración, la que tiene establecida para nosotros en particular. El resto ---los demás usuarios--- que se apañen como puedan.

Pero no hemos querido quedarnos ahí y hemos decidido poner a prueba a HAL para que ahora nos hable en la lengua nipona, una que, a buen seguro, el esforzado arquitecto de nuestra distribución ni siquiera pensó que nos interesase. Ayer mismo, y por un nuevo atajo, reprodujimos los pasos dados en nuestra previa castellanización para niponizar a HAL.

Pero ahí no podemos quedarnos, porque HAL seguramente no ha sido preparado por el citado arquitecto para que nos hable precisamente en japonés. (Habrase visto qué retorcidos somos, pensará el susodicho). La configuración a nivel de usuario es correcta, pero falta algo más para que tenga efecto.

Así es que lo que nos resta por hacer es preparar nosotros mismos a HAL para que acepte los cambios que efectuamos en nuestra configuración personal. Adoptaremos, en cierto modo, el papel del arquitecto. Algo que no debería hacerse a estas alturas de nuestros conocimientos. Pero ya nos hemos metido en el berenjenal y no queremos dar marcha atrás. Eso sí, habrá que tener ahora sumo cuidado y prometer que trataremos de no asumir papeles de tal responsabilidad, salvo cuando sea estrictamente necesario. Prometámoslo en serio, y sigamos con la atención bien concentrada y los nervios a flor de piel, porque la responsabilidad entraña un peligro y el peligro pone los pelos de punta.

Si volvemos a requerir ayuda a HAL sobre la orden locale ---recuerde el lector que esto se hace gritándole a HAL lo siguiente: locale --help---, veremos que hay una opción interesante de esa orden, la opción -a, que nos informa de las "localizaciones" que HAL tiene disponibles en este momento. Dicho de otro modo, nos informa de para qué configuraciones locales está HAL predispuesto. Aquellas para las que no esté predispuesto no funcionarán, por mucho que nos empeñemos en modificar nuestros ficheros privados de configuración de usuario, en concreto, nuestro fichero .bashrc.

Hagamos, pues, la consulta:


locale -a


El lector verá algo parecido a esto:


C
es_ES.utf8
POSIX


Los locales C y POSIX son básicamente sinónimos y aluden a la configuración local por defecto, la que habrá si no se especifica otra. O sea, un inglés, puro y duro, y sin matices. Por suerte hay soporte para otro entorno local, aparte del puro y duro. Es el soporte para el español de España. Las gracias hay que dárselas al arquitecto de nuestra distribución.

La pregunta del millón para nosotros es, naturalmente, si es posible hacer que HAL disponga también del soporte para el japonés, si hay manera de generar un ja_JP.UTF-8 que de cuya disponibilidad nos informe también locale -a. Tiene que haberla, y la vamos a descubrir ahora, cueste lo que cueste.

¿Por dónde empezar? Quizá haya alguna otra orden semejante a locale relacionada con lo que deseamos.

¿Por qué no preguntárselo a HAL? Sabemos ya que nos puede dar información sobre el significado y utilidad de una orden concreta, con la pregunta whatis, que vimos al final del otro día. Por ejemplo, podemos preguntarle:

whatis locale

¿No será también capaz de decirnos algo cuando no sabemos el nombre exacto de la orden, sino que simplemente barruntamos más o menos de qué puede tratarse? Algo parecido a cuando preguntamos a un amigo no informático: "Oye, tú que sabes a propósito de HAL. ¿Te suena?".

Probemos, probemos:

Oye, HAL, tú que sabes a propósito de locale

que se expresa de forma muy parecida en la lengua de HAL:

apropos locale

La respuesta, un tanto oscura, nos da descripciones del significado y utilidad de un número considerable de órdenes que tienen que ver con el entorno local. Quizá, por lo dicho antes, nos llamen especialmente la atención estas dos:


locale-gen (8) - generates localisation files from templates
locale.gen (5) - Configuration file for locale-gen


Si leemos la página de manual locale-gen(8), una página de manual de la sección 8, que es la que corresponde al manual para administradores, descubrimos que hemos dado en el clavo. En resumen, lo que ahí se cuenta es que para que el soporte de una localización específica esté disponible se debe, en primer lugar, modificar el fichero /etc/locale.gen, quitando el signo # en la línea donde consta el nombre del soporte local que nos interesa activar, y, en segundo lugar, ejecutar la orden locale.gen

Vamos, para empezar, a ver si hay una línea en /etc/locale.gen que haga referencia al soporte japonés, o sea una línea que contenga ja_JP.UTF-8. Sabemos que para conseguirlo hemos de utilizar la orden grep:

grep ja_JP.UTF-8 /etc/locale.gen

HAL devuelve lo siguiente:

# ja_JP.UTF-8 UTF-8

O sea, que el soporte existe, pero no está activado, porque, para que lo estuviera, debería aparecer sin el signo # delante. Digamos de paso que este signo es muy frecuente en los ficheros de configuración y su función es lo que técnicamente se llama comentar la línea que viene después de él. Una línea comentada es una línea que HAL pasa por alto, que no existe para él, que sólo existe para los humanos que leen el fichero. Se utiliza mucho para hacer comentarios sobre las instrucciones que se le dan a HAL y que a veces son tan oscuras para potenciales lectores humanos que requieren de una explicación previa. También se usa, como en el presente caso, para desactivar instrucciones que luego podrán reactivarse fácilmente, descomentándolas.

Deberíamos, por tanto, descomentar la dichosa línea. Pero, lo primero es lo primero, no tocar un fichero de configuración sin antes realizar una copia de él:

cp /etc/locale.gen /etc/locale.gen_ORIGINAL

Pero HAL, contra todo pronóstico, nos responde lo siguiente:

cp: no se puede crear el fichero regular «/etc/locale.gen.ORIG»: Permiso denegado


¡Pero qué es esto! ¿Cómo se atreve HAL a negarse a cumplir nuestras órdenes? Resulta que ahora nos niega el derecho de hacer lo que pedimos. ¿Acaso no somos nosotros los que mandamos?

No lo somos. Nosotros somos simples usuarios, usuarios de andar por casa, por nuestro home, se entiende. Ahí sí mandamos. Pero en HAL hay zonas reservadas a usuarios competentes y sabios, hay espacios donde a los usuarios del montón ---o sea, a nosotros--- no se nos permite realizar modificaciones ---y copiar un fichero en ellos es realizar modificaciones. El directorio /etc es uno de esos espacios, porque, a pesar de su insignificante nombre, reúne, nada menos, que todos los ficheros de configuración globales del sistema, es decir, todos los ficheros que hacen que HAL sea el que es para todos sus usuarios, nosotros y cualesquiera otros. Es natural que HAL no permita a cualquiera modificar aspectos que pueden afectar seriamente a la totalidad del sistema.

Pero si a nosotros nos lo prohíbe, debe de haber alguien al que se lo permita, un superjefe, el omnisciente y omnipotente usuario que pueda atravesar todas las puertas y posea todos los privilegios. ¿Existe alguien así? ¿Quién es?

Existe, es el superusuario, también llamado root. Lo absurdo, sin embargo, es que nosotros mismos procedimos a la instalación y no conocemos de la existencia de ningún otro usuario por aquí dentro. ¿Dónde está ese superusuario, si yo mismo soy el único que, aparte del arquitecto, se las ha visto con HAL cara a cara?

Ese superusuario no es más que otro papel, que nosotros mismos, únicos usuarios a día de hoy del sistema, podemos adoptar. Hemos salido a escena con nuestro traje y nuestras armas de usuario del montón. Pero podemos, si en verdad somos los únicos usuarios del sistema, cambiar de vestuario y pertrecharnos de armas superpotentes. HAL está diseñado para que asumamos este papel con plena conciencia de la responsabilidad que implica y de los atropellos que podemos cometer si obramos al tuntún. Por eso nos da de entrada el papel de usuario común y nos permite cambiarnos de máscara únicamente previa solicitud expresa nuestra. De esta forma, nos protege de nosotros mismos, de nuestras veleidades. Nos fuerza a tomarnos en serio la representación de superusuario cada vez que queramos convertirnos en él.

¡Vale! Pero como adoptamos el nuevo papel de root. ¿Cómo le indicamos a HAL que nos conceda provisionalmente este privilegio. La orden para ello es su (abreviatura de switch user, que en castellano significa "cambiar de usuario"). En otros sistemas, por ejemplo, los basados en Ubuntu, la orden es sudo (abreviatura de superuser do, que significa "actuar como superusuario"). [Téngase en cuenta que su permite cambiarse por cualquier usuario del sistema y, que si no se indica ningún nombre de usuario como argumento, cambia directamente al usuario root.]

Asumamos, pues, el papel de superusuario:

su

Nos pedirá una contraseña que tuvimos que crear al comienzo de la instalación o que vendrá documentada en el manual de la distribución.

[Si estuviésemos en una distribución que requiere sudo, en lugar de su, después de sudo y separada por un espacio se escribe la orden que queremos ejecutar como root. La contraseña será la misma que la de nuestro usuario normal.]

El "mensaje de bienvenida" ha cambiado para indicarnos que ahora somos root. Logrado el nuevo privilegio podemos intentar la solicitud de copia que quedó pendiente:

cp /etc/locale.gen /etc/locale.gen_ORIGINAL

Ahora sí ha funcionado, el silencio de HAL lo delata.

Procedamos, entonces, a modificar el fichero /etc/locale.gen, de nuevo como root, porque estamos cambiando un fichero de configuración del sistema. Tenemos, lo hemos dicho antes, que descomentar la línea relativa al soporte para japones. Sabemos desde el día pasado que se puede conseguir pidiéndole a HAL que recurra a su ayudante sed

sed 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen_ORIGINAL >/etc/locale.gen


sed permite hacer lo mismo con menos esfuerzo mediante expresiones regulares, pero todavía no sabemos de qué van tales engendros. Para el caso es lo mismo.

Estoy seguro de que el lector ya no aguanta sin ver el resultado. "Estamos actuando a ciegas desde hace días", dirá, "sin ver las consecuencias de nuestros cambios". Mal dicho, pues siempre podría haber recurrido a grep. Pero para acallar las protestas intestinas que puedan haber brotado, propongo que el lector haga:

more /etc/locale.gen

y que vea con sus propios ojos el fichero completo, pulsando la tecla de espaciado cuando quiera pasar de página, porque el fichero consta de varias.

Sólo queda una operación, como ya leímos en la página de manual locale-gen(8) comentada anteriormente. La operación la debe realizar el superusuario, que sigamos siendo nosotros, de momento. Ya sabes, HAL:

locale-gen

Colorín colorado. Y ahora a ver el resultado.

Lo primero, fundamental, es desembarazarnos del peso del disfraz de root, saliendo inmediatamente del escenario de los superpoderes, si es que entramos con su para ser root:

exit

¡Qué alivio! Volvemos a ser nosotros, usuarios sin compromisos ni responsabilidades insoportables. Estamos donde siempre y somos los de siempre ---se puede comprobar con whoami y pwd.

Ahora el lector, si siguió el consejo que propuse al final de la entrada anterior, tiene todavía su .bashrc adaptado al entorno castellano. Debe cambiarlo provisionalmente para amoldarlo al entorno nipón, tal como se explicó paso por paso en dicha entrada.

Una vez realizada esta readaptación orientalizante, abramos una nueva ventana de emulador de terminal y pidámosle a HAL algo, por ejemplo, que nos diga la fecha y hora actuales ---todavía no se lo hemos pedido nunca:

date

Y aquí la tiene, tal como la escribiría un samurai de los tiempos presentes:

2009年 1月 22日 木曜日 16:50:56 CET

El lector puede seguir jugando por su cuenta con el japonés. Al terminar debería volver a cambiar su .bashrc al estado castizo anterior, a no ser que se desenvuelva bien en Nihongo y no encuentre problemas con kanjis y hiraganas o katakanas.

Sajonara, HAL.

Y el resumen:

  • Si queremos preguntar a HAL sobre una orden cuyo nombre desconocemos o no recordamos con claridad conviene consultarle con apropos.

  • El directorio /etc contiene ficheros de configuración global de HAL.

  • El signo # al inicio de una línea es común en los ficheros de configuración y sirve para realizar comentarios a las instrucciones que lee HAL o para ocultar de su vista fragmentos de ese fichero.

  • El superusuario o root es el usuario de HAL con todos los privilegios y poderes.

  • Las tareas administrativas que afectan al sistema en su conjunto, suelen tener que realizarse como root.

  • Para ser root se usan las órdenes su o sudo, dependiendo de la configuración de que dispongamos.

  • De una sesión iniciada con su se sale con exit.

  • more nos muestra el contenido de un fichero, página a página.

  • date nos muestra la fecha y hora actual.

2 comentarios:

  1. Al comando sed que has puesto le falta una redirección, o si no, HAL se limitará a mostrarnos por pantalla el contenido del /etc/locale.gen, pero no lo guardará en ningún sitio. Deberíamos haber hecho:

    sed 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen_ORIGINAL >/etc/locale.gen

    ResponderEliminar
  2. Muchas gracias. Corregida la errata de la redirección.

    Espero que sigas enviando correcciones y comentarios de cuantos errores detectes en estas "conversaciones", aparte de las aportaciones originales ;-)

    ResponderEliminar