Instalación de Apache, PHP y MySQL en Ubuntu

viernes, 9 de mayo de 2008

Para todo desarrollador web es un menester la instalación de un servidor web, agregarle algún módulo de procesamiento en el servidor y un motor de base datos. El combo que vamos a tratar aquí es un clásico: Apache como servidor web, MySQL como motor de base de datos y PHP como lenguaje de procesamiento "server-side".
A diferencia de otras guías que he escrito, esta la he realizado en base a un documento publicado por SiRGt, quien en vez de utilizar el comando apt-get para la descarga de los paquetes, utiliza el aptitude. Hay sutiles diferencias entre ambos, y voy a dar la visión pragmática del tema, paso a paso tal cual he realizado la instalación en mi equipo. No dudes en dejar un comentario al respecto; será muy bienvenido.

Primero, hay que actualizar los repositorios de paquetes. Ante la duda, se recomienda hacer un backup del repositorio. Basta con abrir la consola y tipear:

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup


De ser necesario, para restaurar el backup, solo basta pisar el archivo /etc/apt/sources.list con el que generamos (/etc/apt/sources.list.backup).
Para actualizar los repositorios, se debe hace un "update" y un "upgrade" de los mismos. Desde la consola:

$ sudo aptitude update
$ sudo aptitude upgrade

Si tenemos todo mas o menos al día, no tendríamos que tardar mas de unos segundos. Una vez actualizados los repositorios, procedemos a la instalación del motor de base de datos. Cabe destacar que en este ejemplo estamos instalando la version 5.0 de MySQL, recomendada al día de la fecha (09/05/2008) por sus desarrolladores. Veamos los comandos:

$ sudo aptitude install mysql-server-5.0


Si quisieramos instalar otra versión, solo se debe reemplazar el parámetro "mysql-server-5.0" por el indentificador que corresponda. Por ejemplo, para la versión 4.1, sería algo así:

$ sudo aptitude install mysql-server-4.1

Comenzará entonces una descarga de unos 40Mb aproximadamente (para la versión 5.0). Si utilizamos aptitude para realizar la instalación, en algún momento aparecerá una ventana que nos solicitará que ingresemos la contraseña de root para el motor de base de datos. NO PIERDAS ESTA CONTRASEÑA. Si en cambio utilizamos apt-get, o instalamos una versión anterior de MySQL, es posible que sea necesario ingresarla manualmente. En tal caso, basta con:

$ sudo /usr/bin/mysqladmin -u root password tu_password


Donde tu_password es la contraseña que quieras asignarle al usuario root.
Ahora continuaremos con la instalación del apache. Desde la consola, tipeamos:

$ sudo aptitude install apache2


Se descargarán unos 2Mb aproximadamente. Con eso es suficiente para el servidor web. Ahora pasaremos al módulo de PHP 5, para lo cual tipeamos:

$ sudo aptitude install php5


Se descargarán unos 3Mb aproximadamente. Ahora se deben instalar las librerías que permitiran al motor de base de datos trabajar en conjunto con el PHP y el Apache. Para instalarlas, ingresamos:

$ sudo aptitude install libapache2-mod-auth-mysql
$ sudo aptitude install php5-mysql

Ambas librerías no llegan a ocupar 300Kb. Y con esto damos por terminada la instalación. Ahora, para probar que todo este ok, reiniciaremos el daemon del servidor web y probaremos un script ejecutado desde nuestro servidor. Para reiniciar el servidor web:

$ sudo /etc/init.d/apache2 restart


Despues de unos segundos, se detendrá el servidor y se lo volverá a arrancar. Es posible que aparezca un "warning" indicándonos que el Apache no pudo determinar el nombre de dominio de nuestro servidor; a no preocuparse, utilizará por defecto el nombre "localhost" para la ip 127.0.0.1, lo cual nos permitirá realizar pruebas locales. Para configurar el servicio web, necesitaríamos otra guía, la cual no dudo escribire pronto ;)
Reinciado el servicio, crearemos un script para probar nuestro flamante "webserver". Para eso, ejecutamos desde la consola:

$ sudo gedit /var/www/script_prueba.php


Y como script, pondremos esto:

<?php
phpinfo();
?>

Guardamos el archivo, abrimos nuestro navegador web, y le solicitamos la siguiente URL:

http://localhost/script_prueba.php


Si todo esta bien, veremos una pantalla de status del módulo de PHP que está corriendo en nuestro servidor, con un detalle exhaustivo de toda su configuración.
Y con esto finalizamos la instalación y test de nuestro servidor web en Ubuntu. Quedan muchos temas por ver; desde como empezar a desarrollar un sitio hasta como configurar nuestro servidor para poder ser accedido desde internet. Intentaré cubrir todos esos temas en breve. Hasta la próxima!

Links de interés:
Guía original de SiRGt
Apache
PHP
MySQL

Canalizadores (Pipes) desde el bash

jueves, 8 de mayo de 2008

Como es de común conocimiento y experiencia, a todas las almas que alguna vez han dado con GNU/Linux nos toca acceder a la terminal de texto... nuestro querido bash. Amado por muchos, esta pequeña ventanita (para los agraciados que disponen del X) suele ser la navaja suiza de todas las soluciones. Ya sea para tirar un listado de procesos, acceder a un archivo de configuración o iniciar/detener algún daemon, nuestra vieja terminal de texto es la solución "rústica" a la mayoría de los problemas. En mi caso, las primeras distribuciones de GNU/Linux que tuve instaladas carecían de una interfase gráfica, con lo cual el manejo de los comandos del bash fue siempre un menester.
Ahora bien: es casi mágico y hasta criptográfico intentar entender que son aquellas líneas jeroglíficas que vemos en docenas de guías, tutoriales y how-to's que rondan la red para resolver esos problemas desde la terminal. Para el usuario avanzado no es más que un lenguaje cotidiano, pero para gente nueva suele ser todo un desconcierto. Pero es bueno destacar que la potencia de la terminal (y un poco de tiempo de práctica de por medio) hacen que un comando bien tirado y parametrizado resuelva tareas que manualmente son tediosas y llevan mucho tiempo en realizarse. Por eso, tímidamente intentare explicar que es un canalizador (pipe) de una forma simple (espero que la gente avanzada no se enoje...) con ejemplos puramente prácticos.

Comandos, StdIn y StdOut

Para ejecutar algo desde la consola (de ahora en adelante el término consola y terminal se refieren a lo mismo) basta con tipear el nombre de un comando, posiblemente algun parámetro y darle un golpe a la tecla enter. Este comando procesará alguna tarea, y posiblemente retorne algun resultado. Por ejemplo, el comando "ls" da un listado de los archivos que se encuentren en el directorio actual. Se puede formatear la salida con algún parametro; vamos a ejecutarlo (el signo $ indica el prompt del bash):

$ ls -t -l


Un posible resultado:

total 88
drwxr-xr-x 2 kaleb kaleb 4096 2008-05-08 01:27 Imágenes
drwxr-xr-x 2 kaleb kaleb 4096 2008-05-08 01:21 Escritorio
-rw-r--r-- 1 kaleb kaleb 33476 2008-05-08 01:11 hs_err_pid6619.log
-rw-r--r-- 1 kaleb kaleb 23452 2008-05-06 23:24 template-6354707186372224906.xml
drwxr-xr-x 2 kaleb kaleb 4096 2008-04-29 22:00 Documentos
drwxr-xr-x 2 kaleb kaleb 4096 2008-04-29 22:00 Música
drwxr-xr-x 2 kaleb kaleb 4096 2008-04-29 22:00 Plantillas
drwxr-xr-x 2 kaleb kaleb 4096 2008-04-29 22:00 Público
drwxr-xr-x 2 kaleb kaleb 4096 2008-04-29 22:00 Videos
lrwxrwxrwx 1 kaleb kaleb 26 2008-04-29 18:41 Examples -> /usr/share/example-content

¿Simple, no? Aparte de ser algo bastante simple, hay dos mecanismos que entraron en juego de manera implícita: el StdIn y StdOut, abreviaturas de STAndard INput y STAndard OUTput, respectivamente. El StdIn representa la entrada estandar (por defecto) al comando; en este caso el teclado, dado que fue el periférico que utilizamos para tirar el comando a la terminal. Por otra parte, el StdOut es la salida estandar (por defecto) del comando; en este caso la pantalla, dado que el resultado del comando salió por la ventana donde estamos trabajando (en realidad no es tan así, pero vale como ejemplo). Expresado graficamente, el comando "ls" tiene una entrada y una salida, similar a esto:


El uso de los canalizadores (pipes)

El canalizador "pipe" es un caracter que permite encadenar varios comandos entre si, tomando la salida de uno para aplicarla como entrada de otro. Resulta un poco abstracto en principio, pero graficamente sería algo así:



Para verlo en un ejemplo, tomemos dos comandos al azar: "ps", el cual muestra un listado de procesos que corren en nuestro equipo, y "more", un curioso comando que recibe texto como entrada y realiza una pausa cada vez que la salida por pantalla supera una determinada cantidad de líneas evitando el "scroll" de las mismas. Si el comando "ps" se utiliza con el parámetro "-A" (mostrar todos los procesos), es posible que la salida sea tan grande que no nos alcance la pantalla para ver todo el resultado, así que la salida de este comando se la pasaremos como entrada al "more", para que este muchacho nos "pause" la salida y podamos leer con detenimiento. Para utilizar un pipe, se debe escribir el caracter "|" (sin las comillas :P, se escribe pulsando AltGr+1 en un teclado español) entre el primer y segundo comando, de esta forma:

$ ps -A | more


Si se realiza la prueba en una terminal, veremos felizmente como la salida se va pausando a medida que se "llena" la pantalla de texto. Otro ejemplo sería utilizar el comando "grep", el cual toma como entrada un texto y como parametro una cadena de texto y devuelve todas las lineas de la entrada que contienen la cadena especificada. Para el ejemplo con "ps", podriamos utilizar el combo de ambos para saber si hay en memoria algún proceso relacionado al gnome, por ejemplo, con lo siguiente:

$ ps -A | grep "gnome"


¿Y si la salida fuera muy extensa? ¿Muchos procesos con la palabra "gnome? No hay problema! Canalicemos!

$ ps -A | grep "gnome" | more


¿Ahora la cosa es interesante, no? Otros comandos para probar: cat, glxinfo (en este tutorial se utiliza), grep, more, ps, netstat, etc.

Finalmente invito al lector a probar el uso de pipes y descubirir el potencial que brinda el uso de la consola. ¡Hasta la próxima!

Panel de configuración para Compiz-Fusion en Ubuntu 7.10

martes, 6 de mayo de 2008

Todos hemos visto en algún momento esos superescritorios con efectos delirantes que se muestran en cada presentación de Ubuntu. Bueno, no es ni mas ni menos que nuestro querido Compiz-Fusion, una extensión para el escritorio de nuestro X que permite un montón de magia al momento de poner manos en nuestra distribución. Desgraciadamente, en la versión 7.10 y 8.04, el panel de control que regula dichos parametros no se encuentra completo. A continuación relato una breve serie de pasos para habilitar la magia:

  1. Habilitar controladores de hardware restringidos: si al igual que yo posees una aceleradora de video NVIDIA verás como un mensaje nos indica que para utilizar todo el potencial de la misma se deben activar los controladores de hardware restringidos. ¿Qué es esto? No es más que una advertencia del S.O. que nos indica que los drivers a utilizar no son Open Source. Si no tenemos problema con eso, ir a Sistema->Administración->Gestor de controladores restringidos y tildar la columna que dice "Habilitado".
  2. Verificar que este activada la aceleración por hardware: una vez activada la placa aceleradora de video, es bueno verificar que la misma este renderizando el video que muestra por pantalla. Para esto, vamos a la consola y tipeamos:
    $ glxinfo | grep "direct render"

    Si todo va bien, entonces se supone que tendría que aparecer una línea que diga direct render = yes. Esto indica que vamos en buen camino.
  3. Instalar todas las actualizaciones disponibles: si tenemos un pequeño icono color naranja que destella sobre el panel de menú, es porque tenemos actualizaciones del S.O. pendientes. Es recomendable descargarlas e instalarlas.
  4. Instalar el panel de control completo para el Compiz-Fusion: ahora que tenemos el terreno preparado, descargamos/actualizamos los paquetes necesarios para agregar el dichoso panel.
    Si tenemos Gnome:
    $ sudo apt-get install compiz-gnome compizconfig-settings-manager emerald
    Si tenemos KDE:
    $ sudo apt-get install compiz-kde compizconfig-settings-manager emerald

    Después de unos minutos, tendremos el panel dentro de Sistema->Preferencias->Advanced Desktop Effects Settings

Y por suerte eso es todo. Dentro del panel de configuración encontramos muchas opciones para darle el look & feel que nos plazca a nuestro Ubuntu. Para dejar el dichoso cubo funcionando, activar estas opciones:

  1. Cubo de escritorio (es necesario tener 4 escritorios para que funcione el cubo; botón derecho del ratón sobre el selector de escritorios, "Preferencias" y luego ampliar la cantidad de áreas de trabajo a 4 o más)
  2. Girar cubo (se recomienda modificar el zoom para que el cubo se vea mejor)
Dejo en manos de los lectores el resto de las opciones. Todos los comentarios son bienvenidos, y desde ya, a jugar con el X!

Links de Interés:
Artículo original de utopianegra (del cual aprendí lo que aquí muestro)
Compiz-Fusion

Configurando GRUB en Ubuntu 7.10

lunes, 5 de mayo de 2008

Bien, después de haber instalado mi flamante Ubuntu 7.10 Gutsy Gibbon en mi equipo, donde hoy por hoy coexisten dos sistemas operativos (Ubuntu 7.10 64bits y Windows XP Professional SP2), noté con mucho agrado que en el arranque aparecía una ventana en modo texto, la cual me permitía elegir entre diferentes arranques de mi Linux, seleccionando diferentes kernels, y mi viejo y querido WinXP al fondo del menú. Un indicador en idioma anglosajón me advertía que si en 10 segundos yo no daba señales de vida, una determinada opción sería seleccionada por mí. En ese momento, cual luz en horizonte, surgió la pregunta del millón:

¿Y cómo hago para que en vez de arrancar con Ubuntu de forma predeterminada, arranque con Windows?

Sin mucho más preámbulo, levante mi sesión de usuario con Ubuntu y ataque los foros del pingüino en busca de una respuesta. Y he ahí el resultado: el gestor de arranque del S.O. se llama GRUB, y es configurable vía un archivo de texto desde la consola. Con solo tipear:

$ sudo gedit /boot/grub/menu.lst


...se abrió el editor de texto con el archivo de configuración del GRUB, el cual dicta como será la ventana de selección de arranque del S.O.
Atención: recomiendo hacer una copia de seguridad antes de tocar nada! Para eso, basta con:

$ sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.backup


Y para restaurarla

$ sudo cp /boot/grub/menu.lst.backup /boot/grub/menu.lst

Ahora bien, dentro del archivo hay varios parámetros de configuración, entre los que cuentan:

  • default N
    • donde N es el nro. de opción seleccionada por defecto dentro del menú de opciones. Para seleccionar la primera, dejar en 0 (cero). Ojo! Si hubiera algún título intermedio, éste también cuenta como opción (en mi caso, recuerdo una línea que decía "Other operative systems", la cual no significaba nada en particular, solo un separador en el listado de opciones). En mi caso, Windows era la 5 opción, para lo cual mi N era 4 (recordar que se comienza a numerar por el 0).
  • timeout N
    • donde N es la cantidad de segundos que el GRUB esperará antes de seleccionar una opción por defecto por nostros. En mi caso, deje un poco más de medio minuto, digamos, 40 segundos.
También se encontraran muchas cosas interesantes (por ejemplo permitir colores en el menú). Muchas de esas opciones se encuentran comentadas (dicho de una forma burda: deshabilitadas). Para habilitarlas, resta borrar el caracter numeral (#) que se encuentra al principio de la línea en cuestión, si es que poseen uno.

Bueno, sin más que agregar, los invito a probar con combinaciones y dejar comentarios. A continuación dejo un vínculo para acceder a un material un poco más completo de lo que aquí comparto, y algún que otro link de interes.

GRUB: Guía Ubuntu
GRUB
Wiki: GRUB

Todo tiene un comienzo...

Bueno, este es el punto de partida para un blog que, humildemente, tratará de conservar las memorias de un programador y usuario que se adentra en el mundo de GNU/Linux.
En la medida de lo posible, buscaré exponer todos aquellos temas que siempre me han llamado la antención (desde la informática hasta posiblemente algo de entretenimiento...). A saber, estos son:

  • Programación
  • Redes
  • Internet (general, vista como una "gran LAN")
  • Seguridad en informática
  • Juegos de Rol (¿?)
  • ...y por que no, hasta un poco de literatura binaria.
También quiero agradecer a todos aquellos que de una forma u otra han resultado de ayuda para completar esta bitácora, ya sea como mentores, colaboradores o meros comentaristas.

Finalmente los invito a recorrer conmigo aquellos caminos que desde hace ya muchos años he caminado (entre cuelgues, trasnochadas de teclado e interminables jornadas de debuggin).

Bienvenidos a Kaleb.Code