Todas las entradas de: Héctor García Pérez

Aspecto Final del Prompt

Personalizar el Prompt de la terminal en Debian 7

Aspecto Final del PromptUna de las cosas que más me gustan de los sistemas operativos de tipo «Unix» es la posibilidad de personalizar el prompt de la terminal. Esta personalización incluye tanto la información que se mostrará en el prompt, como los colores en los que se mostrará dicha información.
En la mayoría de distribuciones Linux, el shell o interprete de comandos que se utiliza es bash, y aunque esta preferencia se puede cambiar, en este post se explicará como personalizar el prompt de bash, que es el interprete de órdenes por defecto en Debian 7.


1.- El fichero .bashrc

Para el interprete de comandos Bash existen tres ficheros importantes en el directorio de cada usuario. Estos ficheros son los siguientes:

  • .bash_profile: Se ejecuta una única vez al hacer login en el sistema.
  • .bashrc : Se ejecuta cada vez que se abre una ventana de terminal o se ejecuta una bueva instancia de Bash escribiendo el comando

    [sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
    #/bin/bash
    [/sourcecode]

  • .bash_logout: Se ejecuta cuando se sale del sistema. Lo podemos utilizar para que se borren los ficheros temporales creados en nuestra ultima sesión o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, no se ejecuta ningún comando.

Si no existe en el directorio del usuario ninguno de estos ficheros, el sistema cogerá la configuración del fichero \etc\profile.

Nosotros trabajaremos sobre el fichero .bashrc que se encunetra en el directorio home de cada usuario.


2.- La variable de entorno $PS1

En bash, la configuración del prompt es una cadena de formato que se almacena en una variable de entorno llamada PS1. Esta variable suele definirse en el fichero .bashrc. Si escribimos en la terminal la siguiente orden, obtendremos la configuración actual del prompt.

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
#echo $PS1
[/sourcecode]

El resultado será similar a:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
[/sourcecode]

¿Qué significan todos estos símbolos? Veámolos uno a uno:

  • ${debian_chroot:+($debian_chroot)} : Indica que si la variable de entorno $debian_chroot existe, se mostrará en el prompt el contenido de esta variable. En caso de que esta variable no exista, no se mostrará nada.
    En general dentro del contexto de bash, una expresión del tipo

    [sourcecode language=»bash» gutter=»false» wraplines=»false» highlight=»1″]
    ${var:+valor}
    [/sourcecode]

    significa : Si la variable var está definida, entonces usa valor, en caso contrario no hagas nada.
    Generalmente la variable de entorno $debian_chroot estará vacía, por lo que esta expresión no mostrará ninguna información en el prompt.

  • \u : Indica que se muestre el nombre del usuario actual.
  • @ : Simplemente pinta el símbolo @.
  • \h : Indica que se muestre el nombre de la máquina hasta el primer punto. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría simplemente «miordenador«
  • : : De nuevo, simplemente pintamos el simbolo :
  • \w : Indica que se muestre el directorio de trabajo actual. El directorio home del usuario actual se representa con el símbolo ~
  • \$ : Si el usuario actual es el root, muestra el simbolo #. En caso contrario muestra el simbolo $

Por lo tanto, la expresión :

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
[/sourcecode]

generará un prompt con la siguiente forma:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
usuario@maquina:/dir/trabajo$
[/sourcecode]

si se trata de un usuario normal, o bien

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
usuario@maquina:/dir/trabajo#
[/sourcecode]

Si se trata del usuario root.


3.- Listado de Caracteres Especiales de PS1

A parte de los caracteres especiales ya comentados en el apartado 2 existe toda una colección de caracteres especiales que podemos usar para personalizar nuestra variable de entorno. Son los siguientes:

  • \a : El carácter ASCII campana (07). Es el típico beep del ordenador.
  • \e: El carácter ASCII de escape (033).
  • \d : La fecha en formato «Dia(Nombre) Mes(Nombre) Dia(Numérico). Así para el día «Martes 11 de Marzo de 2014» el resultado sería «mar mar 11» algo así como «martes marzo 11»
  • \D {formato}: La fecha en el formato definido por la cadena formato (entre llaves). Esta cadena de formato es la aceptada por la función de C strftime(). Las opciones de formato para esta función son:
    • %a : Abreviatura del nombre del día de la semana.
    • %A : Nombre completo del día de la semana.
    • %b : Abreviatura del nombre del mes.
    • %B : Nombre completo del mes.
    • %c : Fecha y hora basadas en la configuración regional. Por ejemplo para el día «Martes 11 de Marzo de 2014» a las 21:00 este componente de la cadena de formato mostraría «11 mar 2014 21:00:00 CET».
    • %d : Número del día del mes. (01-31)
    • %H : Hora del reloj en formato 24h (01-24)
    • %I : Hora del reloj en formato 12h (01-12)
    • %j : Día del año como número (01-365)
    • %m : Mes como número (01-12)
    • %M : Minuto como número (00-59)
    • %S : Segundo como número (00-59)
    • %U : Número de la semana del año (00-53)
    • %w : Día de la semana como número(0-6), el Domingo es 0
    • %x : La fecha en el formato local. Por ejemplo 16/03/14 para el «16 de marzo de 2014»
    • %X : La hora en el formato local. Por ejemplo 21:04:48
    • %y : Año sin siglo como un número (00-99)
    • %y : Año con siglo como un número. Por ejemplo 2014
    • %Z : Es reemplazado por el nombre o la abreviatura del huso horario, o por ningún carácter si no se puede determinar el huso horario. Por ejemplo CET
    • %% : Muestra el caracter %
  • \a : El carácter ASCII escape(033).
  • \h : Indica que se muestre el nombre de la máquina hasta el primer punto. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría simplemente » miordenador«
  • \H : Muestra el nombre de la máquina completo. Si el nombre de mi maquina fuera «miordenador.local» este carácter especial mostraría » miordenador.local«
  • \j : Número de tareas actualmente gestionadas por el Shell.
  • \n : Nueva línea.
  • \r : Retorno de Carro.
  • \s : El nombre del Shell.
  • \t : La hora actual en el formato de 24 horas HH:MM:SS.
  • \T : La hora actual en el formato de 12 horas HH:MM:SS.
  • \@: La hora actual en el formato de 12 horas am/pm.
  • \A : La hora actual en el formato de 24 horas HH:MM.
  • \u : Indica que se muestre el nombre del usuario actual.
  • \v : Nuestra la versión mayor y menor de Bash. Por ejemplo: 2.00 .
  • \V : Nuestra la versión mayor, menor y micro de Bash. Por ejemplo: 2.00.0 .
  • \w : Muestra el directorio actual en versión larga (con la ruta). El directorio home del usuario se representa con el simbolo ~.
  • \W : Muestra el directorio actual en versión corta (sólo el nombre del directorio). El directorio home del usuario se representa con el simbolo ~.
  • \! : Número del comando dentro del historial de comandos del usuario; esto es el número del comando dentro de todos los comandos ejecutados por el usuario en el sistema. Por ejemplo: 1, para el primer comando, 2 para el segundo, etc.
  • \# : Número de comando en la sesión actual del usuario; es decir el número de comando desde que hacemos login en el sistema.Por ejemplo: 1, para el primer comando, 2 para el segundo, etc.
  • \$ : Si el usuario actual es el root (UID = 0), muestra el simbolo #. En caso contrario muestra el simbolo $
  • \xyz : Muestra el carácter correspondiente al número octal xyz.
  • \\ : Muestra el carácter «\«.
  • \[ : Principio de una secuencia de caracteres no imprimibles. Estas secuencias de caracteres no imprimibles se usan para incluir en el promt secuencias de control de la terminal.
  • \] : Final de una secuencia de caracteres no imprimibles. Estas secuencias de caracteres no imprimibles se usan para incluir en el promt secuencias de control de la terminal.


4.- Listado de códigos de color

Además de elegir que elementos se mostrarán en el prompt, tambien se puede escoger de que color se mostrará cada uno de los elementos. Para ello, se seguirá la siguiente sintaxis:

\[\e[x;ym\]$X\[\e[0m\]

donde:

  • \[: Inicio de la secuencia de caracteres no imprimibles
    • \e[: Inicio del código de color.
      • x;y: Código del color a usar.
    • m: Fin del código de color.
  • \]: Fin de la secuencia de caracteres no imprimibles
  • $X: Caracteres que aparecerán coloreados.
  • \[: Inicio de la secuencia de caracteres no imprimibles
    • \e[: Inicio del código de color.
      • 0: Código del color por defecto.
    • m: Fin del código de color.
  • \]: Fin de la secuencia de caracteres no imprimibles

Nota : Es muy importante recordar que una vez establecido un color, todos los caracteres que se impriman a continuación, aparecerán de dicho color.Por ello una vez escrito el texto que se desea colorear, debemos restaurar el color por defecto (Código de color 0).

El listado de colores disponibles es el siguiente:

Código Color
0;30 Negro
1;30 Gris
0;31 Rojo
1;31 Rojo Claro
0;32 Verde
1;32 VerdeClaro
0;33 Marron
1;33 Amarillo
0;34 Azul
1;34 Azul Claro
0;35 Violeta
1;35 Violeta Claro
0;36 Cian
1;36 Cian Claro
0;37 Gris Claro
1;37 Blanco
0 Color por defecto

Veamos como se mostraría la siguiente variable prompt:

\[\e[01;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]:\$

Si coloreamos el texto en función de sus partes:

\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]\$

Para verlo mejor, colorearemos cada sección del color en el que se mostrará finalmente:

\[\e[01;32m\]\u\[\e[0m\]@\[\e[1;33m\]\h\[\e[0m\]:\$

Eliminado los códigos de color y sustituyendo cada caracter especial por su significado nos quedaría:

usuario@host:$

5.- Ficheros bashrc

A continuación se muestran los enlaces de descarga para los ficheros bashrc tanto para un usuario normal, como para el usuario root:

[sdm_show_dl_from_category category_slug=»ficheros-bashrc» fancy=»1″ button_text=»Descargar» new_window=»1″]

Cambiar la distribución del teclado en Debian 7

Linux Terminal
Si por alguna razón deseamos cambiar la distribución del teclado de nuestro sistema Debian, esto es, cambiar el idioma para que por ejemplo reconozca la tecla ñ, lo podemos hacer en dos sencillos pasos:

1.- Cambiar la distribución del teclado:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
#dpkg-reconfigure keyboard-configuration
[/sourcecode]

2.- Hacer efectivos los cambios:

Para hacer que los cambios sean efectivos inmediatamente usaremos el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
#setupcon
[/sourcecode]


Aviso de Seguridad de GateKeeper

Ejecutar aplicaciones descargadas de internet en Mac OS X 10.8 Mountain Lion


Una de las características disponibles en el sistema operativo de la manzana desde la última versión de Mac OSX Lion (Versión 10.7.5) es GateKeeper. Mediante esta funcionalidad, el sistema operativo restringe la ejecución de programas procedentes de fuentes «dudosas», interponiendo de este modo una barrera más entre nuestro equipo y el software malicioso.
Hasta aquí todo perfecto, el problema surge cuando deseamos ejecutar algún software que los chicos de Cupertino consideran dudoso, aunque nosotros sepamos perfectamente que está libre de toda sospecha, por ejemplo aplicaciones GPL que no se encuentran disponibles en la App Store, ya que la configuración por defecto de GateKeeper sólo permite ejecutar aplicaciones descargadas de la tienda oficial de Apple o de «desarrolladores identificados».
Así, es probable que tras descargar una aplicación desde internet y tratar de ejecutar el instalador de dicha aplicación el sistema no te lo permita mostrándote un aviso similar al de la siguiente captura:


Aviso de Seguridad de GateKeeper

Aviso de Seguridad de GateKeeper

Para solucionarlo, tenemos dos opciones, bien cambiar la configuración general del sistema, bien habilitar la ejecución especifica de la aplicación que queremos descargar. En los siguientes apartados, se revisarán ambas opciones.


1.- Cambiar la configuración específica de la aplicación

Mediante esta solución permitiremos que se ejecute exclusivamente la aplicación que acabamos de descargar, por lo que es la solución mas recomendable. Para ello, localizaremos en Finder el archivo que queremos ejecutar, y en vez de hacer doble click sobre el, haremos click con el botón derecho del ratón de manera que el sistema nos muestre el menú contextual. En este menú seleccionaremos la opción Abrir con …

Menú contextual "Abrir con"

Al hacerlo, el sistema nos mostrará un cuadro de diálogo de advertencia, informado de que el archivo que deseamos ejecutar puede no ser seguro, similar al que se muestra en la siguiente captura:

Advertencia de Seguridad

Al pulsar sobre el botón Abrir, el sistema ejecutará el programa, y ya no volverá a bloquearnos su ejecución a próxima vez que deseemos ejecutarlo haciendo doble click sobre el.


2.- Cambiar la configuración general del sistema

Mediante esta opción, cambiaremos la forma en que actúa GateKeeper para todos los ficheros descargados de Internet, con lo que nunca más nos volvería a aparece el aviso de seguridad.
Para cambiar las preferencias generales del sistema, deberemos hacer click en el icono de preferencias del Dock:


Icono de Preferencias del Sistema

Icono de Preferencias del Sistema

A continuación seleccionamos la opción de Seguridad y privacidad :


Icono "Seguridad y Privacidad"

Icono «Seguridad y Privacidad»

En la mitad inferior sección General de la pantalla que nos muestra el sistema, podemos ver las opciones de configuración de la sección «Permitir aplicaciones descargadas de:». Sin embargo, para poder cambiar dichas opciones deberemos hacer click en el icono del candado situado en la esquina inferior izquierda de la pantalla.


Desbloqueo de las Preferencias de Seguridad

Desbloqueo de las Preferencias de Seguridad

Una vez que hemos hecho click en el icono del candado, el sistema nos pedirá la contraseña del usuario con el que hemos iniciado sesión. Tras introducirla, podremos modificar libremente las Preferencias de Seguridad y Privacidad del sistema:


Modificar las Preferencias de Seguridad y Privacidad

Modificar las Preferencias de Seguridad y Privacidad

Al seleccionar la opción Cualquier Sitio el sistema no volverá a bloquear la ejecución de ningún programa que descarguemos de Internet y no volveremos a ver el molesto aviso de seguridad. Sin embargo, debo insistir en que esta opción no es la mas recomendable, siendo el mejor método de ejecutar aplicaciones descargadas de Internet el explicado en el punto 1 de este artículo.


Asistente de configuración del teclado

Restablecer el botón «Cambiar Tipo de teclado…» en Mac OS X

Existe un Bug al menos desde la versión 10.6 de Mac OS X, y que sigue estando presente en la versión 10.8.3 lanzada el 14 de Marzo de 2013, que hace que si ejecutamos el asistente de configuración del teclado y no cambiamos nada de la configuración, el botón «Cambiar Tipo de Teclado…» desaparecerá de la pantalla de configuración del teclado. En los siguientes puntos, describiremos con detalle el problema y su solución:

1.- Descripción del problema

Las siguientes capturas ilustran el problema:

Accedemos a la pantalla de configuración del teclado a través de las preferencias del sistema:

Acceso a la configuración del teclado

Acceso a la configuración del teclado

Tras pulsar sobre la opción «Teclado», acedemos a la pantalla de configuración del mismo:

Botón "Cambiar tipo de teclado..."

Botón «Cambiar tipo de teclado…»


Pulsando el botón «Cambiar tipo de teclado…» accedemos al asistente de configuración:

Asistente de configuración del teclado

Acceso a la configuración del teclado

Pulsamos el botón continuar, y el sistema tratará determinar nuestro tipo de teclado:

Asistente de configuración del teclado

Asistente de configuración del teclado I

Finalmente el sistema nos muestra los resultados de la detección:

Asistente de configuración del teclado

Asistente de configuración del teclado II

Si llegados a este punto, pulsamos el botón «Aceptar» y no hemos cambiado el tipo de teclado, el botón «Cambiar tipo de teclado…» de la pantalla de preferencias del teclado desaparecerá, tal y como se puede ver en la siguiente captura:

Botón "Cambiar tipo de teclado..." desaparecido

Botón «Cambiar tipo de teclado…» desaparecido


2.- Solución del problema

La solución a este problema es sencilla, y pasa por eliminar desde la consola todos los perfiles de teclado almacenados, para que el sistema los regenere. Para ello, lo primero que debemos hacer es acceder a una terminal. La forma más sencilla de hacer esto es mediante Launchpad, pulsando sobre su icono en el Dock:


Icono "LaunchPad"

Icono «LaunchPad»

En el campo de búsqueda de Launchpad escribiremos la palabra Terminal, tal y como aparece en la la siguiente captura:


Terminal en "LaunchPad"

Terminal en «LaunchPad»

Una vez abierta la consola, deberemos escribir el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# sudo rm /Library/Preferences/com.apple.keyboardtype.plist
[/sourcecode]

El sistema nos pedirá una contraseña, y deberemos introducir la contraseña del usuario actual.

Finalmente, si nuestro teclado es externo, lo desconectaremos y lo volveremos a conectar.
Si nuestro teclado fuera interno (el caso de un portátil, por ejemplo) deberemos reiniciar el sistema.
En ambos casos, el botón «Cambiar Tipo de teclado…» volverá a estar disponible.


3.- Referencias

Restaurar configuración de teclado en OS X

Shift Swicher

Instalar Compiz-Fusion en Linux Mint 14 Nadia con escritorio Mate

compiz_fusion_logo Uno de los grandes puntos a favor de Mate (el fork de Gnome 2 desarrollado por el equipo de Linux Mint) es la posibilidad de instalar y ejecutar el gestor de ventanas Compiz-Fusion. Para quienes no lo hayan visto o usado nunca, solamente diré que en cuanto a efectos visuales, está a años luz de cualquier otra cosa, incluyendo Windows Aero y su contrapartida en MAC OS X Exposé.

Para instalar Compiz-Fusion en nuestro sistema seguiremos los siguientes pasos:

1.- Instalar los paquetes de Compiz-Fusion

Abriremos una terminal y escribiremos lo siguiente:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$ sudo apt-get install compizconfig-settings-manager fusion-icon compiz-plugins-extra libdecoration0-dev
[/sourcecode]

WPZOOM - Premium WordPress Themes

2.- Ejecutar el gestor de configuraciones de Mate

Ejecutaremos el gestor de configuraciones de Mate para lo cual escribiremos en una terminal:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$ sudo mateconf-editor
[/sourcecode]

Una vez abierta la herramienta buscaremos la siguiente ruta:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
desktop -> mate -> session -> required_components
[/sourcecode]

tal y como se muestra en la siguiente captura:

Editor de configuración

Editor de configuración

Dentro de esta ruta localizaremos la clave windowmanager y sustituiremos su valor marco por compiz, para lo cual, pulsaremos con el botón derecho sobre la clave, y seleccionaremos la opción Editar clave….

Una vez hechos el cambio, la configuración debe quedar así:

Editor configuración

Editor de configuración

3.- Reemplazar Marco por Compiz (Sesion Actual)

Para reemplazar Marco, el gestor de ventanas por defecto de Mate, por Compiz, abriremos una terminal y escribiremos lo siguiente:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$compiz –replace
[/sourcecode]

con ello, Compiz debería empezar a ejecutarse y reemplazar por completo a Marco.


4.- Reemplazar Marco por Compiz (Cada inicio de sesión)

Parece ser que debido a un bug aún no resuelto, el comando del paso 3 no reemplaza por completo a Marco, por lo que tendremos que ejecutarlo en cada inicio de sesión.

Para ello, abriremos el dialogo de «Aplicaciones al inicio» localizado dentro del menu de preferencias tal y como muestra la siguiente captura:

Localización en el menú de "Aplicaciones al Inicio"

Localización en el menú de «Aplicaciones al Inicio»

Una vez abierta la aplicación, pulsaremos sobre el botón Añadir y en el dialogo que nos aparece, escribiremos los siguientes datos:

  • Nombre : Compiz
  • Comando :compiz –replace

de forma que el dialogo se parezca a la siguiente captura:

Entrada para Compiz en "Aplicaciones al Inicio"

Entrada para Compiz en «Aplicaciones al Inicio»

para finalizar pulsamos sobre el botón añadir y cerramos la herramienta «Aplicaciones al inicio».
Una vez hecho esto, Compiz-fusion se ejecutará en casa inicio de sesión reemplazando a Marco.

5.- Configurar Compiz-Fusion

El ultimo paso será configurar Compiz-Fusion para activar aquellas características que deseemos. Para ello abriremos la herramienta CompizConfig cuya localización en el menú se puede ver en la siguiente captura:

Localización en el menú de CompizConfig

Localización en el menú de CompizConfig

Desde esta aplicación podremos configurar todas aquellas características de Compiz-Fusion que deseemos. En este artículo configuraremos el famoso Cubo 3d
para lo cual activaremos las opciones:

  • Cubo de Escritorio
  • Girar Cubo

tal y como se muestra en la siguiente captura:

Activación del Plugin "Cubo de Escritorio"

Activación del Plugin «Cubo de Escritorio»

Una vez hecho esto, configuraremos el número de escritorios que deseamos, es decir el número de caras de nuestro cubo. Para ello iremos a «Opciones Generales» y en la última pestaña «Tamaño de Escritorio» pondremos el número de escritorios que deseamos:

Opciones Generales

Opciones Generales

Configuración del número de escritorios

Configuración del número de escritorios

En este punto  ya tendremos activo el plugin Cubo 3D, por lo que si pulsamos la combinación de teclas Control+ Alt+ Botón Izquierdo ratón y movemos el ratón, obtendremos un efecto tan espectacular como el de la siguiente captura:

Cubo de Escritorio

Cubo de Escritorio

También podemos pasar de una cada a otra del cubo con las teclas Control+Alt+Flecha (Izquierda o Derecha) lo que nos permitirá girar el cubo en una dirección u otra.


Referencias

How to install compiz on Linux Mint 14 Nadia Mate edition

UbuntuTweak

Instalar Ubuntu Tweak 0.8.4 en Linux Mint 14 Nadia

ubuntu-tweak

Este fin de semana, he decidido instalar en mi máquina el sistema operativo Linux Mint 14 «Nadia», y una de las cosas que he echado de menos nada más empezar ha sido la herramienta «Ubunut Tweak», que permite instalar fácilmente software de terceros, así como configurar un montón de características ocultas de los sistemas operativos basados en Ubuntu.

En este post, se instalará la versión 0.8.4 de «Ubuntu Tweak» en Linux Mint 14 «Nadia», para lo cual seguiremos los siguientes pasos:

1.- Añadir el repositorio de Ubuntu Tweak

Abriremos una terminal, y escribiremos lo siguiente:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# sudo add-apt-repository ppa:tualatrix/ppa
[/sourcecode]

2.- Actualizar la lista de paquetes disponibles

Lo haremos con le clásico comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# sudo apt-get update
[/sourcecode]


3.- Instalar Ubuntu Tweak

A continuación instalaremos la herramienta con:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# sudo apt-get install ubuntu-tweak
[/sourcecode]

4.- Ejecutar Ubuntu Tweak

Por último ejecutaremos la aplicación a través del menú de Linux Mint, tal y como se muestra en la siguiente captura:


Localización de Ubuntu Tweak

Localización de Ubuntu Tweak

Haciendo click sobre el icono accederemos a la aplicación cuyo aspecto será similar a la siguiente captura:


Ubuntu Tweak 0.8.4

Ubuntu Tweak 0.8.4

Referencias

Install Ubuntu Tweak 0.8.4 in Linux Mint 14


Compilar PostgreSQL 9.2.4 con soporte para pldebugger en Debian 6

Logo PostgreSQLRecientemente en el trabajo, he tenido que desarrollar un triger para PostgresSQL algo complejo, así que la posibilidad de depurarlo paso a paso era muy desaeable. Sin embargo al intentar acceder al depurador desde pgAdminIII, resulta que la mayoría de las versiones de PostgreSQL para linux no disponen de esta funcionalidad.

Así pues, la única solución es compilar el plugin pldebugger desde las fuentes y añadirlo a PostgresSQL.

Sin embargo, para compilar este plugin es necesario disponer del código fuente de PostgreSQL, así que.. una vez metidos en faena… ¿porque que no aprovechar para instalar desde las fuentes la base de datos también?

Las versiones del software que se usaran en el articulo son las siguientes:

  •           Debian 6.1
  •           PostgreSQL 9.2.4
  •           pldebugger

Para lograr nuestro objetivo, y partiendo de una instalación limpia de Debian 6 NetInstall seguiremos los siguientes pasos:

1.- Instalar los paquetes build-esentials

Lo primero que debemos hacer es instalar los paquetes esenciales para poder compilar en nuestra distribución. En el caso de Debian 6, deberemos ejecutar la siguiente instrucción:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# apt-get install build-essential
[/sourcecode]

Además debemos bajarnos algunas bibliotecas extra que necesitaremos para realizar la compilación de PostgreSQL con éxito:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# apt-get install libreadline5 libreadline5-dev zlib1g zlib1g-dev openssl libssl-dev
[/sourcecode]

Las bibliotecas instaladas y su propósito son las siguientes:

También necesitaremos el cliente Git para poder descargar directamente del repositorio de pldebugger los fuentes del plugin:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# apt-get install git
[/sourcecode]

2.- Obtener el código fuente de PostgreSQL

El siguiente paso es obtener el código fuente de PostgreSQL, para lo cual usaremos el comando wget:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# wget http://ftp.postgresql.org/pub/source/v9.2.4/postgresql-9.2.4.tar.gz
[/sourcecode]

A continuación descomprimimos el fichero tar.gz que nos hemos descargado con la instrucción:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# tar xvzf ./postgresql-9.2.4.tar.gz
[/sourcecode]


3.- Obtener el código fuente del plugin pldebugger

Obtendremos el código fuente del plugin pldebugger desde los repositorios del proyecto con el comando git:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# git clone git://git.postgresql.org/git/pldebugger.git
[/sourcecode]

Siguiendo las instrucciones de instalación del plugin, copiamos el directorio que acabamos de descargar al directorio /comtrib del arbol de directorios del código fuente de PostgresSQL:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# cp ./pldebugger/ ./postgresql-9.2.4/contrib/ -R
[/sourcecode]

4.- Establecer las opciones de compilación de PostgresSQL

El siguiente paso es establecer las opciones de compilación. Para ello entraremos en el directorio donde están las fuentes de PostgreSQL:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# cd ./postgresql-9.2.4
[/sourcecode]

y escribiremos el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# ./configure -with-openssl -enable-thread-safety
[/sourcecode]

Las opciones de configuración establecidas son las siguientes:

  • -with-openssl: Permite conexiones encriptadas medieante SSL
  • -enable-thread-safety: Permite el uso seguro de concurrencia (hebras)


5.- Compliar el código fuente PostgreSQL

Una vez establecidas las opciones de configuración sin errores, procedemos a compilar el código fuente de PostgresSQL, para lo cual bastara llamar al comando make:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# make
[/sourcecode]

6.- Instalar los binarios

Si la compilación se ha completado sin errores, procederemos a instalar los binarios de la aplicación:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# make install
[/sourcecode]

Con ello ya tenemos instalado PostgreSQL en nuestra máquina.

7.- Compilar pldebugger

Para continuar , debemos compilar el pluging pldebugger. Para ello debemos ingresar en el directorio dentro del árbol de fuentes de PostgreSQL donde copiamos el código fuente del pluging. Si hemos seguido al pie de la letra las instrucciones de este articulo, deberíamos estar en el directorio ./postgresql-9.2.4, por lo que continuaremos ejecutando los siguientes comandos:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# cd ./contrib/pldebugger/
[/sourcecode]

y compilamos el plugin.

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# make
[/sourcecode]


8.- Instalar pldebugger

Instalar el plugin es tan sencillo como ejecutar el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# make install
[/sourcecode]

9.- Configurar postgreSQL

9.1 Añadir binarios al path del sistema

El siguiente paso es editar el fichero de configuración de bash /etc/profile para añadir la ruta de los binarios de PostgresSQL a la variable PATH del sistema.Para ello añadiremos al fichero la línea:

[sourcecode language=»text» gutter=»false» wraplines=»false»]
PATH="/usr/local/pgsql/bin":$PATH
[/sourcecode]

dejándolo de forma parecida a este:

[sourcecode language=»text» gutter=»true» wraplines=»false» highlight=»9″]
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), …).

if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
PATH="/usr/local/pgsql/bin":$PATH
export PATH

if [ "$PS1" ]; then
if [ "$BASH" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’\h:\w\$ ‘
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1=’# ‘
else
PS1=’$ ‘
fi
fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
[/sourcecode]

Si todo ha ido bien, al cerrar sesión y volver a entrar con nuestro usuario, el comando :

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# echo $PATH
[/sourcecode]

nos debe retornar algo parecido a esto:

[sourcecode language=»text» gutter=»false» wraplines=»false»]
/usr/local/pgsql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[/sourcecode]

donde vemos que en primer lugar esta incluida la ruta a los binarios de PostgresSQL.

9.2 Crear el usuario postgres

A continuación creamos el usuario postgres<+/em> que será el usuario bajo el cual se ejecute la base de datos:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# adduser postgres
[/sourcecode]

Cuando se nos pregunte la contraseña le podremos la que deseemos, pero deberemos recordarla, ya que se nos pedirá en un futuro.

9.3 Crear e inicializar el directorio de datos

El siguiente paso será crear e inicializar el directorio de datos, donde PostgreSQL guardará la información:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# mkdir /usr/local/pgsql/data
[/sourcecode]

Hacemos propietario de este directorio al usuario postgres:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# chown postgres /usr/local/pgsql/data
[/sourcecode]

A continuación asumimos la identidad del usuario postgres para inicializar el directorio de datos:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# su – postgres
[/sourcecode]

y finalmente inicializamos el directorio de datos:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$ initdb -D /usr/local/pgsql/data
[/sourcecode]

Llegados a este punto, y si todo ha ido bien, el deberemos ver en nuestra terminal algo parecido a esto

[sourcecode language=»text» gutter=»false» wraplines=»false»]
Success. You can now start the database server using:

postgres -D /usr/local/pgsql/data
or
pg_ctl -D /usr/local/pgsql/data -l logfile start

[/sourcecode]

En este momento, tal y como indica el sistema podremos arrancar la base de datos en primer plano con:

[sourcecode language=»text» gutter=»false» wraplinec=»false» highlight=»1″]
# postgres -D /usr/local/pgsql/data
[/sourcecode]

y detenerla simplemente pulsando la combinación de teclas Ctr-C

Si deseamos arrancar la base de datos en segundo plano, lo haremos usando la segunda opción:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# pg_ctl -D /usr/local/pgsql/data -l logfile start
[/sourcecode]

y la detendremos con el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$ pg_ctl -D /var/pgsql/data stop -m fast
[/sourcecode]

9.4 Configurar contraseña de acceso a la base de datos para el usuario postgres

Para configurar la contraseña de acceso del usuario postgres a la base de datos, lo primero que habrá que hacer lógicamente es iniciar el servidor:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# pg_ctl -D /usr/local/pgsql/data -l logfile start
[/sourcecode]

Una vez iniciado el servidor, y manteniendo en el sistema la identidad del usuario postgres, accederemos al interprete de ordenes de PostgreSQL:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
$psql
[/sourcecode]

Una vez dentro, escribiremos:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
postgres=# alter user postgres with password ‘passwd’;
[/sourcecode]

donde passwd es la nueva contraseña que deseamos poner.El sistema debe responder con un:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
ALTER ROLE
postgres=#
[/sourcecode]

Salimos del cliente de linea de ordenes con la orden:

[sourcecode language=»text» gutter=»false» wraplines=»false»]postgres=#\q [/sourcecode]

Y salimos de la cuenta en el sistema del usuario postgres con un simple:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]$exit [/sourcecode]


9.5 Crear script de arranque automático

Para hacer que PostgreSQL se ejecute automáticamente al iniciar el sistema, debemos copiar desde el directorio /contrib/start-scripts del arbol del código fuente de postgreSQL, el fichero denominado linux al directorio /etc/init.d. En este punto de la instalación, deberíamos estar en el directorio ./postgresql-9.2.4/contrib/pldebugger, por lo que ejecutaremos el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# cp ../start-scripts/linux /etc/init.d/postgresql
[/sourcecode]

Una vez copiado el script, debemos editarlo para añadirle las etiquetas LSB. Para ello, añadiremos al comienzo del fichero /etc/init.d/posgresql, justo debajo de #! /bin/sh las siguientes líneas:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»2″]
### BEGIN INIT INFO
# Provides: PostgreSQL
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Postgresql at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
[/sourcecode]

Además, debemos dar permisos de ejecución al script, con el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# chmod 755 /etc/init.d/postgresql
[/sourcecode]

Con ello, podremos arrancar y parar postgresql con el tipico comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# /etc/init.d/postgresql accion
[/sourcecode]

donde accion representa alguna de las siguientes posibles acciones:

  • start Arranca el servidor de bases de datos.
  • stop Detiene el servidor de bases de datos.
  • restart Detiene el servidor de bases de datos, y lo vuelve a arrancar.
  • reload Recarga la configuración del servidor de bases de datos.
  • status Informa si el servidor de bases de datos se esta ejecutando o no.

Por último, debemos añadir el script de inicio de PostgreSQL a los scripts de arranque del sistema, para lo cual ejecutaremos el siguiente comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# update-rc.d postgresql defaults
[/sourcecode]

Si por alguna razón deseamos eliminar el script de la secuencia de arranque, deberemos ejecutar el comando:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# update-rc.d -f postgresql remove
[/sourcecode]


9.6 Editar el fichero postgresql.conf

El siguiente paso es editar el fichero /usr/local/pgsql/data/postgresql.conf para, por un lado permitir que el servidor escuche por todas las interfaces de red, y por otro lado, indicarle que cargue el plugin pldebugger.

Para permitir que el servidor escuche por todas las interfaces de red, buscaremos la línea:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»59″]#listen-addresses = ‘localhost’ [/sourcecode]

(suele ser la línea 59), la copiamos debajo, la descomentamos, y la modificamos quedando :

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»60″]listen-addresses = ‘*’ [/sourcecode]

Si se quisera que PostgreSQL escuchase sólo las peticiones de determinadas IPs, bastaría con poner estas IPs separadas por comas, y todo el conjunto entre comillas simples. Por ejemplo:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»60″]
listen-addresses = ‘192.168.0.2,192.168.0.3’
[/sourcecode]

Nota: por custiones de seguridad no se recomienda permitir el acceso desde cualquier máquina.

Para indicarle a PostgreSQL que cargue el plugin pldebugger al arrancar, buscaremos la línea:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»127″]
#shared_preload_libraries = » # (change requires restart)
[/sourcecode]

(suele ser la línea 127), la copiamos debajo, la descomentamos, y la modificamos quedando :

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»128″]
shared_pbeload_libraries = ‘$libdir/plugin_debugger’ # (change requires restart)
[/sourcecode]

9.7 Configurar permisos de acceso

9.7.1 Configurar permisos de acceso local:

Al compilar desde las fuentes, PostgreSQL es muy poco restrictivo a la hora de gestionar permisos, ya que por defecto, permite a todos los usuarios del sistema el acceso sin contraseña. Por ello deberemos restringir ciertos permisos locales.

Para ello debemos editar el fichero /usr/local/pgsql/data/pg_hba.conf
Buscaremos la línea cuyo contenido es:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»84″]local all all trust[/sourcecode]

y la modificamos de forma que quede:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»84″]local all all md5[/sourcecode]

Con ello permitimos el acceso a cualquier cuenta de usuario desde la maquina local siempre que se especifique una contraseña encriptada mediante md5. Ello implica que al reinicar el servidor podremos acceder al cliente de linea de ordenes de PostgreSQL desde cualquier cuenta de usuario con la cuenta de postgres, escribiendo:

[sourcecode language=»text» gutter=»false» wraplines=»false»]$psql -U postgres -W [/sourcecode]

9.7.2 Configurar permisos de acceso remoto:

Por último, debemos configurar los permisos de acceso remoto. Se trata de responder a las siguientes preguntas:

  • ¿Que usuarios tienen permisos para conectarse?
  • ¿Desde que IPs se pueden conectar?
  • ¿A que bases de datos?
  • ¿Y.. que método de auteticación tienen que usar?

En este post, daremos permisos a todos los usuarios de la base de datos, para conectarse a todas las bases de datos, desde cualquier IP, usando una contraseña encriptada con MD5.

Esto lo lograremos editando de nuevo el fichero /usr/local/pgsql/data/pg_hba.conf y localizando la línea:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»86″]
host all all 127.0.0.1/32 trust
[/sourcecode]

y la modificandola forma que quede:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»86″]
host all all 0.0.0.0 0.0.0.0 md5
[/sourcecode]

Una explicación sencilla de esta regla de permisos del fichero /etc/postgresql/9.2/main/pg_hba.conf seria:

  • host: Indica que la regla se refiere a conexiones remotas
  • all: Responde a la pregunta ¿Que usuarios tienen permiso para conectarse?. En este caso todos.Si quisieramos especificar un usuario determinado, bastaría con sustituir «all» por el nombre del usuario deseado. Si queremos aplicar la misma regla a varios usuarios, tendremos que copiar y pegar la regla, cambiando el nombre de usuario.
  • all: Responde a la pregunta ¿A que bases de datos?. En este caso a todas .Si quisieramos especificar una base de datos determinada, bastaría con sustituir «all» por el nombre de la base de datos deseada. Si queremos aplicar la misma regla a varios bases de datos, tendremos que copiar y pegar la regla, cambiando el nombre de la base de datos.
  • 0.0.0.0 0.0.0.0: Responde a la pregunta ¿Desde que IPs se pueden conectar?. En este caso desde todas. el primer grupo de 4 digitos especifca la IP, mientras que el segundo es la mascara de red. Los valores 0.0.0.0 son valores comodin, cuyo significado es «cualquier IP» y «cualquier mascara» respectivamente.
  • md5: Responde a la pregunta ¿Que método de auteticación tienen que usar?. En este caso una contraseña encriptada con MD5. Otros posibles valores son : «passowrd» para una contraseña sin encriptar o «trust» para permitir un acceso sin contraseña

Para una mayor información sobre como funciona el fichero /etc/postgresql/9.2/main/pg_hba.conf se puede consultar la documentación oficial en castellano en la dirección: http://www.postgresql.org/docs/9.2/interactive/auth-pg-hba-conf.html

Finalmente inhabilitaremos las conexiones locales a través de IP6, para lo cual, localizaremos la línea:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»88″]
host all all ::1/128 trust
[/sourcecode]

y la comentaremos de forma que quede:

[sourcecode language=»text» gutter=»true» wraplines=»false» firstline=»88″]
#host all all ::1/128 trust
[/sourcecode]


10.- Reiniciar el servidor

Para comprobar que todo ha ido bien, que el script de autoarranque esta correctamente instalado, y que las configuraciones definidas en la base de datos son correctas, Debemos reiniciar la máquina servidora. Para ello, ejecutaremos las siguiente instrucción:

[sourcecode language=»text» gutter=»false» wraplines=»false» highline=»1″]
# reboot
[/sourcecode]

11.- Probar el depurador

Para probar el depuraror, lo primero que hemos de hacer es crear una base de datos de prueba,con una tabla de prueba, y con un procedimiento almacenado de prueba que podamos depurar.

11.1.- Acceder al interprete de PostgreSQL

Accedemos al interprete de comandos de PostgresSQL con la siguiente instrucción:

[sourcecode language=»text» gutter=»false» wraplines=»false» highline=»1″]
$ psql -U postgres -W
[/sourcecode]

11.2.- Crear base de datos de prueba

Una vez dentro del interprete de comandos de PostgresSQL creamos la base de datos con el siguiente comando:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
postgres=# CREATE DATABASE prueba_debugger WITH ENCODING=’UTF8′;
[/sourcecode]

11.3.- Crear tabla de pruebas

Nos conectamos a la base de datos que acabamos de crear:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
postgres=# \c prueba_debugger
[/sourcecode]

y el sistema responde con:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
You are now connected to database "prueba_debugger".
[/sourcecode]

A continuación creamos la la tabla de pruebas

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
prueba_debugger=# CREATE TABLE tabla_prueba (
Id BIGSERIAL PRIMARY KEY ,
Valor VARCHAR (255) default »
);
[/sourcecode]

y el sistema responde con:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
NOTICE: CREATE TABLE will create implicit sequence "tabla_prueba_id_seq" for serial column "tabla_prueba.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tabla_prueba_pkey" for table "tabla_prueba"
CREATE TABLE
[/sourcecode]

11.4.- Crear procedimiento almacenado de prueba

Seguimos creando objetos en la base de datos de prueba. En este punto crearemos un procedimiento almacenado:

+

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
prueba_debugger=#
CREATE OR REPLACE FUNCTION tabla_prueba_trigger() RETURNS TRIGGER AS $tabla_prueba_trigger$
DECLARE
sValor VARCHAR (255):= NEW.Valor;
iId INTEGER:= NEW.Id;
iCalculo INTEGER:= 0;
BEGIN
RAISE NOTICE ‘———- INICIO prueba_debugger.tabla_prueba_trigger() ———-‘;
RAISE NOTICE ‘———- => El nuevo registro tiene un Id: %’,iId;
RAISE NOTICE ‘———- => El nuevo registro tiene un Valor: %’,sValor;
iCalculo=iId +5;
RAISE NOTICE ‘———- => El Id del nuevo registro +5 es igual a: %’,iCalculo;
RAISE NOTICE ‘———- FIN prueba_debugger.tabla_prueba_trigger() ————-‘;
NEW.Id= iCalculo;
RETURN NEW;
END;
[/sourcecode]

Nota: para introducir el procedimiento almacenado desde la consola de PostgreSQL copiaremos todo el procedimiento almacenado y pulsaremos la tecla Enter.
A continuación le indicamos a PostgreSQL el lenguaje en el que está escrito el procedimiento almacenado:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
prueba_debugger=# $tabla_prueba_trigger$ LANGUAGE plpgsql;
[/sourcecode]

Despues de introducir el comando anterior y pulsar la tecla Enter, el sistema debe responder con:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
CREATE FUNCTION
[/sourcecode]


11.5.- Crear disparador para lanzar el procedimiento almacenado de prueba

Crearemos un disparador que lanzará el procedimiento almacenado después de cada inserción:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
prueba_debugger=# CREATE TRIGGER update_tabla_prueba AFTER INSERT
ON tabla_prueba FOR EACH ROW EXECUTE PROCEDURE tabla_prueba_trigger();
[/sourcecode]

y el sistema responde con:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
CREATE TRIGGER
[/sourcecode]

11.6.- Ejecutar el script de preparacion para la depuración

Para poder depurar los procedimientos almacenados, es necesario que antes hayamos ejecutado en la base de datos donde queremos hacer la depuración el siguiente comando:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
prueba_debugger=# CREATE EXTENSION pldbgapi;
[/sourcecode]

el sistema responderá con:

[sourcecode language=»sql» gutter=»false» wraplines=»false»]
CREATE EXTENSION
[/sourcecode]

Una vez ejecutado el comando, ya podemos conectarnos a la base de datos desde pgAdminIII y usar la función de depuración.

Nota: Debemos ejecutar este comando en cada base de datos donde deseemos usar la funcionalidad de depuración.



&ld;/p>

11.7.- Probar el depurador

Finalmente, obtendremos la recompensa a nuestro esfuerzo, al abrir pgAdminIII, abrir la base de datos de prueba que hemos creado, abrir el esquema public, abrir la tabla tabla_prueba desplegar la sección Trigger-Functions, y sobre nuestra función, hacer click con el boton derecho, y seleccionar la opción «Set breakpoint»


Estableciendo punto de ruptura con pgAdminIII

Estableciendo punto de ruptura con pgAdminIII

En la siguiente captura podemos ver el depurador en acción:


Depurador pgAdminIII en acción

Depurador pgAdminIII en acción

Asignar nombres de interfaces a direcciones MAC en Debian 6

ifconfig
 
A veces sucede que se rompe tu interfaz ethernet o que simplemente la sustituyes por otra más moderna. En este caso, al reiniciar la máquina Debian detecta que la MAC de la nueva interfaz de red es diferente a la MAC de la interfáz que estaba instalada, por lo que asume que es una nueva interfáz y le asigna un nombre distinto.

Así, si antes teníamos eth0, al sustituir la tarjeta por una nueva, esta pasa a ser eth1. Este comportamiento tiene la ventaja de que permite añadir varias interfaces de red de forma fácil, pero en el caso de la sustitución de una interfáz de red por otra, rompe la configuración de red, ya que las directivas definidas en el fichero /etc/networt/interfaces
dejan de ser aplicables.

Para solucionar este inconveniente, debemos editar el fichero acabado en persistent-net.rules del directorio /etc/udev/rules.d/

En él, se asocia a cada dirección MAC un nombre de dispositivo (del tipo ethx), por lo que deberemos eliminar la línea que hacia referencia a eth0, y editar la línea que hace referencia a eth1, para que haga erferencia a eth0.
Así, si nuestro fichero de reglas tiene un aspecto como este:
[sourcecode language=»text» gutter=»true» wraplines=»false» highlight=»7,8″]
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM==»net», ACTION==»add», DRIVERS==»?*», ATTR{address}==»08:00:27:65:9a:9f», ATTR{dev_id}==»0x0″, ATTR{type}==»1″, KERNEL==»eth*», NAME=»eth0″
# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM==»net», ACTION==»add», DRIVERS==»?*», ATTR{address}==»08:00:27:37:bd:91″, ATTR{dev_id}==»0x0″, ATTR{type}==»1″, KERNEL==»eth*», NAME=»eth1″
[/sourcecode]
deberemos elminar las líneas 7, y 8, y modificar la línea 10, para dejar nuestro fichero como sigue:
[sourcecode language=»text» gutter=»true» wraplines=»false» highlight=»8″]
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM==»net», ACTION==»add», DRIVERS==»?*», ATTR{address}==»08:00:27:37:bd:91″, ATTR{dev_id}==»0x0″, ATTR{type}==»1″, KERNEL==»eth*», NAME=»eth0″
[/sourcecode]

Finalmente reiniciamos la máquina con el típico
[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# restart
[/sourcecode]

Con ello, nuestra configuración de red, debería quedar restablecida.

Referencias

Debian: MAC address changes: interface changes

Configurar interfaces de red en Debian 6

Una de las cosas más comunes que se hacen en cualquier ordenador es configurar sus interfaces de red. En Debian 6 podemos configurar nuestras interfaces de red mediante los siguientes pasos:

1.- Configurar interfaz de red con IP dinámica o estática

Lo primero que debemos hacer es decidir que tipo de configuración vamos a implementar. Básicamente tenemos dos formas de configurar nuestras interfaces de red en Debian 6:

  • IP dinámica: Es más sencilla de configurar pero requiere que tengamos un servidor DHCP funcionando en nuestra red.
  • IP estática: Requiere algo más de configuración, pero permite conectarse a la red sin servidor DHCP.

1.1- Configurar interfaz de red con IP dinámica

Con esta configuración la interfaz de red tomará su configuración automáticamente de un servidor DHCP. Para ello, debemos añadir al fichero /etc/network/interfaces las siguientes líneas:

[sourcecode language=»text» gutter=»true» wraplines=»false» highlight=»9,10″]
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Interfaz de red principal
allow-hotplug eth0
iface eth0 inet dhcp
[/sourcecode]

donde eth0 es el nombre de la primera interfaz de red. Las directivas introducidas y su significado son las siguientes:

  • allow-hotplug eth0: Permite la conexión y desconexión «en caliente» (Sin apagar la máquina) de la interfaz de red eht0 (típicamente la primera interfaz de red).
  • iface eth0 inet dhcp: Especifica que la interfaz de red eth0 se configurará mediante el protocolo DHCP.

1.2- Configurar interfaz de red con IP estática

En este tipo de configuración se establecerán manualmente todos los parámetros de red de la interfaz. Para lograrlo se deben añadir en el fichero /etc/network/interfaces las siguientes líneas:

[sourcecode language=»text» gutter=»true» wraplines=»false» highlight=»9,10,11,12,13,14,15″]
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Interfaz de red principal
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.99
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

[/sourcecode]

donde eth0 es el nombre de la primera interfaz de red. Las directivas introducidas y su significado son las siguientes:

  • allow-hotplug eth0: Permite la conexión y desconexión «en caliente» (Sin apagar la máquina) de la interfaz de red eht0 (típicamente la primera interfaz de red).
  • iface eth0 inet static: Especifica que la interfaz de red eth0 se configurará con una IP estática.
  • address 192.168.0.99: Especifica la dirección IP de la interfaz de red. En este ejemplo 192.168.0.99.
  • netmask 255.255.255.0: Especifica la la máscara de la interfaz de red. En este ejemplo 255.255.255.0.
  • network 192.168.0.0: Especifica la red a la que pertenece la interfaz de red. En este ejemplo 192.168.0.0.
  • broadcast 192.168.0.255: Especifica la dirección IP de difución, es decir la dirección IP a la que se deben mandar los paquetes de red para que lleguen a todas las máquinas de la red. En este ejemplo 192.168.0.255.
  • gateway 192.168.0.1: Especifica la puerta de enlace de la interfaz, esto es a que IP se deben mandar los paquetes que no van destinados a ninguna de las IPs de la red. Tipicamente esta es la IP de nuestro router. En este ejemplo 192.168.0.1.

2.- Levantar la interfáz de red (activarla)

Para levantar la interfaz de red, podemos usar bien el comando ifup o bien simplemente reiniciar la máquina con el comando reboot.

2.1- Levantar la interfáz de red con ifup

Para levantar la interfaz de red de nuestro ejemplo con el comando ifup simplemente escribiremos en la terminal:

[sourcecode language=»text» gutter=»false» wraplines=»false» highlight=»1″]
# ifup eth0
[/sourcecode]

La siguiente captura de pantalla muestra como debería el fichero /etc/network/interfaces en un sistema con dos interfaces de red, una eth0, con IP dinámica y la otra, eth1 con IP estática.

Captura de pantalla 2013-05-01 a la(s) 16.05.14