domingo, 20 de febrero de 2011

Instalación de un Servidor de Desarrollo - Parte 2 : Personalizando el Prompt

Hace un par de años hice un tutorial sobre cómo podíamos virtualizar un sistema Linux usando Virtualbox. La idea de aquel tutorial era montar un servidor de desarrollo para llevar el control de las aplicaciones que nos encontrábamos desarrollando. Por asares del destino no pude continuar con aquella serie, pero creo que ya es momento para seguir con aquella serie :D.

Un servidor de desarrollo nos ayuda, como su nombre lo dice, mientras estamos en la fase de desarrollo de nuestra aplicación. Este nos proporciona algunas herramientas que nos facilitarán la vida como programadores. Además también nos proporciona un ambiente "seguro" para probar que nuestra aplicación (principalmente las web) no hagan alguna cosa indebida o no causen problemas en nuestro servidor de producción (¿nunca han matado el servidor al subir un cambio no probado, o borrado por error una base de datos? ^_^!).

El servidor que usaremos ahora será un poco distinto de que habíamos instalado. Seguimos usando un servidor con Debian, pero en vez de usar la versión 5, usamos la versión 6. De la misma forma que la vez anterior, solo instalamos el sistema base, sin ningún paquete adicional (todo lo iremos instalando de forma manual o casi manual).

En este segundo tutorial de la serie, que será sumamente corto, veremos cómo configurar algunos aspectos simples del prompt de los usuarios que accederán al servidor (más que nada aspectos "gráficos"), que nos facilitarán el trabajo un poco más adelante; ya que en esta serie de tutoriales estaremos accediendo a nestro servidor exclusivamente por la línea de comandos.

*Nota: No soy ningún experto en Linux, así que mucha de la información que se encuentra en esta serie de tutoriales, seguramente se puede hacer de una mejor forma. Así que si tengo algún error o alguien conoce una forma mejor, o uso algunos términos de forma indebida, les agradecería que dejaran un comentario para que pueda mejorar estos tutoriales :D.

Proseguiremos este tutorial en el punto en el que nos quedamos la vez anterior, instalando un servidor de ssh para poder conectarnos de forma remota a nuestro servidor.

Si recuerdan, instalamos el servidor openssh usando la herramienta "apt-get", con el comando "apt-get install openssh-server" y con esto instalaba el servidor, que nos permite conectarnos a nuestro servidor usando cualquier cliente ssh como putty, kitty, o tunnelier:



Como podemos ver, nuestra pantalla se ve un tanto "seca", esto hace que algunas veces sea un poco complicado localizar de forma rápida la información en la que estemos interesados. Y como en la mayoría de los tutoriales de esta serie estaremos trabajando mediante la línea de comandos, lo primero que haremos es agregar un poco de color a nuestra consola.

Hacer esto es muy fácil. La configuración del bash de cada usuario de nuestro sistema se almacena en un archivo llamado ".bashrc", que se encuentra en el directorio home del usuario. Cuando un usuario de nuestro sistema utiliza el bash, se lee este archivo, y se usa la configuración contenida en el. De la misma forma existe un archivo de configuración global (para todos los usuarios del sistema), "/etc/bash.bashrc". Este cambio pueden hacerlo en cualquiera de los dos archivos, aunque yo les recomiendo que solo modifiquen el archivo ".bashrc" de su usuario, y le den a cada usuario del sistema la posibilidad de personalizar a él mismo sus propias opciones.

Antes de comenzar a editar este archivo hablemos un poco del prompt. El prompt se almacena en una variable especial del shell, "PS1" (en realidad existen 4 variables "PS1", hasta "PS4", cada uno de los cuales se usa en distintas situaciones). Para ver la configuración, o el patrón, de nuestro promt podemos ver el valor de esta variable:


echo $PS1




Dependiendo de su configuración y distribución de Linux, podría ser que vean cosas distintas, en mi caso el prompt es:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$


Como podemos ver, el prompt está formado por un conjunto de caracteres, cada uno de los cuales permite mostrar distinta información. La lista de los caracteres y su significado:
  • \a: carácter de sonido de campana (07)
  • \d: fecha en formato "dia_de_la_semana mes dia" (e.g., "Lun Ene 26")
  • \D{formato}: fecha con el formato especificado usando la convención de strftime; si no se especifica un formato, se usa una representación local (las llaves son requeridas)
  • \e: el carácter ASCII de escape, el cual utilizaremos para dar color (033)
  • \h: el hostname, hasta el primer "."
  • \H: el hostname
  • \j: el número de jobs que el shell esta manejando actualmente
  • \l: el nombre base de la terminal del dispositivo del shell
  • \n: salto de línea
  • \r: retorno de carro
  • \s: el nombre del shell, el nombre base de $0 (la porción sigue al slash final)
  • \t: la hora actual el formato de 24-horas HH:MM:SS
  • \T: la hora actual en formato de 12-horas HH:MM:SS
  • \@: la hora actual el formato de 12-horas am/pm
  • \A: la hora actual en formato de 24-horas HH:MM
  • \u: el username del usuario actual
  • \v: la versión de bash
  • \V: el release del bash, versión + nivel de parches
  • \w: el directorio actual de trabajo, con $HOME abreviado con una tilde "~"
  • \W: el nombre base del directorio actual de trabajo, con $HOME abreviado con una tilde
  • \!: el número de este comando en el historial
  • \#: el número de comando de este comando
  • \$: si el UID (identificador de usuario) efectivo es 0 (root), se muestra un #, de otra forma un $
  • \nnn: el carácter correspondiente al número octal nnn
  • \\: un backslash
  • \[: el inicio de una secuencia de caracteres que no se deben imprimir o mostrar, que puede ser usado para embeber una secuencia de control de la terminal en el prompt (como en este caso los colores)
  • \]: fin de una secuencia de caracteres que no se deben imprimir.

Si vemos nuevamente el patrón de mi prompt:


\u@\h:\w\$


Podemos observar que lo que se debe mostrar es:


Nombre de usuario @ host : directorio actual de trabajo


Utilizando los caracteres anteriores podemos hacer que nuestro prompt muestre la información importante para nosotros. Incluso podemos mostrar un mensaje como "escribe tu comando >" en caso de que lo consideremos necesario.

Ahora pasaremos a editar nuestro archivo usando nuestro editor de texto preferido (vi, vim, nano, etc).

Como dije anteriormente: este archivo contiene la configuración de bash del usuario, y por lo tanto un usuario puede personalizar el comportamiento y apariencia del prompt en este archivo. Como habíamos dicho, lo que queremos es mostrar algunos colores en la consola. Para esto busquemos la línea que dice:

#force_color_prompt=yes


Esta es una indicación de que el prompt se muestre con colores. Por default esta desactivado (el "#" al inicio de la línea indica que este es un comentario). Para activarlo simplemente quitamos el "#" de la línea:

force_color_prompt=yes


En este momento podemos guardar el archivo, cerrar la sesión y volver a entrar, con lo que veremos que ahora podemos ver nuestro prompt de colores:



Si volvemos a ver nuestra variable PS1 ahora veremos:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$


La parte que nos interesa es:


\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$


En donde la parte que nos interesa (la que coloca el color) es:


\[\033[01;32m\]
\[\033[00m\]
\[\033[01;34m\]


Los colores se definen usando los números definidos antes de la m (en verde es 32, el azul es 34, el 00 anula el color). La parte de "01" antes del ";" indica que el color será brillante, si queremos colores opacos podemos poner "00".

Ahora que ya tenemos colores, podríamos querer personalizarlos a nuestro gusto (en el caso de que el verde y el azul no nos gusten). Los colores que tenemos disponibles (junto con su código) se muestran en la siguiente tabla:

ColorCodigo
Negro30
Rojo31
Verde32
Café33
Azul34
Morado35
Cyan36

Dejaré los colores para este usuario como están, pero en el caso del usuario root, agregaré el nombre del usuario en rojo (para tener una indicación de cuando estoy usando este usuario y saber que debo tener cuidado). Entonces lo primero que hacemos es entrar como el usuario root, usando el comando "su":


su


y modificamos el archivo ".bashrc" del home de root. En este caso el archivo ".bashrc" tendrá un contenido un poco diferente. De hecho en debían nos dice que no deberíamos mover este archivo en caso de que queramos usar algunos valores diferentes para root (que es justamente lo que queremos hacer). Busquemos la línea que tiene a nuestra variable "PS1" comentada:


# PS1=


Podemos descomentarla o eliminarla y reemplazarla con la siguiente:


PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '


En este archivo también agregaremos algunos alias. Un alias nos permite tener como atajos para los comandos que queramos. En este caso solo descomentaré las opciones para darle color a los directorios y archivos, y los alias que ya vienen en el archivo para las opciones "ls", las cuales me darán los alias para "ll" y agregaré una para "la". Estos cambios deben haber quedado asi:


export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias la='ls $LS_OPTIONS -a'


Guardamos el archivo. Cerramos la sesión del usuario root y volvemos a entrar, y con esto ya veremos la consola de la siguiente forma:



Como podemos ver ahora los colores para el usuario son ligeramente distintos.

Con este terminamos este segundo tutorial de la serie para la instalación de nuestro servidor de desarrollo. En los siguientes tutoriales aprenderemos a instalar las herramientas que estaremos usando.

No olviden dejar sus dudas, comentarios, sugerencias y correcciones ^_^!.

Saludos

Entradas Relacionadas:

1 comentario:

  1. Excelente, muy bien Alex, estos tutoriales son excelentes, claros, bien hechos, he buscado y buscado pero no habia encontrado tutoriales asi, mi admiración total:D

    ResponderEliminar