Redactado por Rubiño para www.ivlabs.org y www.crackergt.net

Existen múltiples formas de obtener un servidor Apache/PHP/MySQL. Se puede instalar cada componente por separado y configurar Apache para que dialogue con PHP, el cual cuenta con una API para acceder al motor de bases de datos MySQL. Por otro lado, Apache puede incluir a PHP como módulo en una configuración que impresiona más óptima. Todo ello cabe hacerlo a partir de la compilación de las fuentes mediante un método que es independiente de la distribución utilizada; aunque ello implica manejar “manualmente” las actualizaciones de seguridad. Por lo anterior es recomendable valerse de los paquetes suministrados por cada distro, en cuyo caso la manera de poner a punto el servidor queda supeditada al sistema de paquetes utilizado, puesto no todos los GNU/Linux acomodan de igual forma los ficheros de configuración.
En este documento voy a cubrir la instalación de un servidor Web en Fedora, Gentoo y Slackware, ya que son los únicos sistemas que tengo a mi disposición en este momento.

Instalar apache, php, mysql y phpmyadmin.

Gentoo.

ruben@MyBox ~ $ su
Contraseña:
MyBox ruben # cat >>/etc/portage/package.use

Código:
net-www/apache apache2 ssl
dev-lang/php apache2 cli ctype crypt gd gdbm iconv ipv6 kerberos ldap mysql ncurses nls pcre readline reflection session spell spl truetype xml zlib -bzip2
dev-db/mysql ssl

####Presionar Control+d para salir (EOF)####

MyBox ruben # emerge –sync
MyBox ruben # emerge -uND world

MyBox ruben # emerge –depclean
MyBox ruben # revdep-rebuild
MyBox ruben # emerge apache mysql php phpmyadmin

Las USE que coloqué son a modo de ejemplo y se condicen con las que actualmente tengo activadas. Para ilustrar un poco más sobre el asunto, quiero explicar el porqué de algunas de mis elecciones: 

CLI: Permite que php se pueda ejecutar por linea de comandos. Útil en testing y en el uso de scripts estilo “cron”.

PCRE, XML, CLI y ZLIB: Se precisan para que funcione el manejador de paquetes PEAR, con el que se pueden añadir muchas funcionalidades a php. Es importante notar que pear añade paquetes de con bibliotecas que contienen código php, es decir, no son funciones preconstruidas/compiladas. XML es además necesario para que php pueda parsear archivos *.xml,  habitualmente usados para guardar configuraciones y otro tipo de información. Creo que es mucho mas optimo incluir ficheros *.php con arrays, pero hay casos donde no es posible elegir en que forma se nos presentan los datos, como ser en los casos donde se usan APIs desarrolladas por terceros.

SIMPLEXML y REFLECTION: Los añadi para poder instalar el framework symfony. Este necesita además PCRE y CLI.

MYSQL, POSGRES: Para conectar con estos engines. Como se vé, he quitado -berkdb ya que no necesito ese soporte.

CRYPT : Permite criptografía. 

NCURSES y GTK: Php también puede utilizarse para el desarrollo de aplicaciones que se ejecutan en ordenadores de escritorio. Ncurses es una biblioteca que facilita la construcción de la interfaz gráfica de consola, y php es capaz de enlazarla; lo mismo ocurre con GTK, solo que está sirve para elaborar gráficos que se dibujan en ventanas. Como ncurses se activa por defecto, la quite mediante el signo de menos (-).

SESSION: Las sesiones son ámpliamente utilizadas en las aplicaciones web, aunque no por ello, imprescindibles. Es más, las sessiones pueden ser un verdadero dolor de cabeza ya que por cada una existe un archivo temporal. Cuando el número de estos crece lo suficiente se corre peligro de alcanzar la cantidad máxima de ficheros que pueden ser referidos por un directorio, cosa que obliga a eliminarlos (normalmente de forma manual) para evitar que el servidor caiga. Por lo anterior, es lógico que algunos deseen usar únicamente cookies, y es por ello que el soporte de sesion es opcional. Aun así recomiendo activarla ya que nunca se sabe cuando se puede necesitar un session_start().

GD: Para la generación dinámica de imágenes con php. 

Slackware.
Los paquetes de mysql, apache y php se encuentran en el DVD de Slackware, y se instalan por defecto mientras no se indique lo contrario. Solo resta construir las tablas de Mysql y añadir phpmyadmin, cosa que puede hacerse con unos sencillos pasos:

Tablas mysql.
ruben@MyBox ~ $ su
Contraseña:
MyBox ruben # mysql_install_db
MyBox ruben # chown -R mysql.mysql /var/lib/mysql/
MyBox ruben # exit

Crear un directorio para alojar el paquete phpmyadmin.
ruben@MyBox ~ $ mkdir phpmyadmin && cd phpmyadmin

Descargar phpmyadmin.
ruben@MyBox ~ $ wget \
http://downloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.5.2-all-languages.tar.bz2?modtime=1208878427&big_mirror=0

Desempaquetar el tarball en el directorio de localhost.
ruben@MyBox ~ $ su
Contraseña:
MyBox ruben # tar xjvf phpMyAdmin-* -C /var/www/htdocs/

Cambiar el nombre del directorio para que resulte más fácil de manejar.
MyBox ruben # mv /var/www/htdocs/phpMyAdmin-* /var/www/htdocs/phpmyadmin

Y crear el archivo de configuración.
MyBox ruben # cp /var/www/htdocs/phpmyadmin/config.sample.inc.php \
/var/www/htdocs/phpmyadmin/config.inc.php

Fedora.

ruben@MyBox ~ $ su
Contraseña:
MyBox ruben # yum update
MyBox ruben # yum install httpd php php-gd mysql-server php-mysql phpMyAdmin

Nota: php-gd es una librería precompiladas (builiding in) de php que permite trabajar con imágenes y es, por tanto, opcional. El paquete php-mysql es necesario para conectar a mysql desde un script php.

Iniciando los servicios.

Gentoo.

MyBox ruben # /etc/init.d/apache2 start
MyBox ruben # /etc/init.d/mysql start
Añadiendo al runlevel por defecto para que inicien en tiempo de booteo:

MyBox ruben # rc-update add apache2 default
MyBox ruben # rc-update add mysql default

Slackware.

MyBox ruben # sh /etc/rc.d/rc.httpd start
MyBox ruben # sh /etc/rc..d/rc.mysql start

Para que arranquen por defecto durante el booteo:

MyBox ruben # chmod +x /etc/rc.d/rc.httpd
MyBox ruben # chmod +x /etc/rc..d/rc.mysql

Fedora.

MyBox ruben # service httpd restart

MyBox ruben # service mysqld start

Para que arranquen durante el booteo se usa:

chkconfig –level on

Por ejemplo, para añadirlo al nivel de arranque número 5:

chkconfig –level 5 mysqld on

chkconfig –level 5 httpd on

Y para añadirlo al los niveles 3 y 5

chkconfig –level 35 mysqld on

chkconfig –level 35 httpd on

Y para quitarlos del nivel 5:

chkconfig –level 5 mysqld off

chkconfig –level 5 httpd off

Configuración de Apache.

Gentoo.

MyBox ruben # emerge –config apache

MyBox ruben # nano /etc/conf.d/apache2

Buscar la linea APACHE2_OPTS y añadir -D PHP. En mi caso queda así:

Citar
APACHE2_OPTS=”-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5″

Reiniciar apache:

MyBox ruben # /etc/init.d/apache2 restart

Slackware.

MyBox ruben # nano /etc/httpd/httpd.conf

Buscar y decomentar (quitar la almohadilla):

Citar
#Include /etc/httpd/mod_php.conf

Nota: Esto es para que apache cargue el módulo de php.

Buscar la sección:

Citar

DirectoryIndex index.html

Y añadir index.php luego de index.html. Sirve para que apache reconozca el archivo de inicio de phpmyadmin.
Guardar los cambios y reiniciar apache:

MyBox ruben # sh /etc/rc.d/rc.httpd restart

Fedora.

No es necesario tocar nada, mas creo oportuno acotar que los ficheros de configuración están en /etc/httpd/conf/httpd.conf.

Configurando un password para el usuario root de mysql

Fedora y Slackware.

MyBox ruben # exit
ruben@MyBox ~ $ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.54-log Linux mysql-5.0.54

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> USE mysql;
mysql> UPDATE user SET password=password(‘rootpass’) WHERE user=’root’;
mysql> quit

Nota: Se usa password(‘dato’) para aplicar encriptación determinista sobre un dato. Se podría, aunque por motivos de seguridad no es recomendable, setear password como cualquier campo ordinario.

Gentoo.
Aparentemente root viene con password incluido, así que me incliné por añadir una nueva clave de la forma señalada aquí: http://www.ivlabs.org/home/?p=909

Configurando phpMyAdmin

su

# Si la distro es Gentoo.
cp /var/www/localhost/htdocs/phpmyadmin/config.sample.inc.php /var/www/localhost/htdocs/phpmyadmin/config.inc.php
nano /var/www/localhost/htdocs/phpmyadmin/config.inc.php

nano /etc/phpMyAdmin/config.inc.php #—> Si la distro es Fedora.

nano /var/www/htdocs/phpmyadmin/config.inc.php #—> Si se instaló phpmyadmin de la manera propuesta para Slackware.

Buscar esta linea:

Citar
$cfg['Servers'][$i]['user']= ‘’;
$cfg['Servers'][$i]['password']= ‘’

Y cambiar por:

Citar
$cfg['Servers'][$i]['user']= ‘root’;
$cfg['Servers'][$i]['password']= ‘passroot’

Donde passroot debe sustituirse por la clave que corresponda.

Nota: Si las citadas lineas no existen (como ocurre en la instalación desde el taball mostrada para Slackware) deben añadirse debajo de “Server Parameters”.

Guardar los cambios (Contrl +X, luego “Y” seguido de ENTER) y reiniciar apache con:

MyBox ruben # /etc/init.d/apache2 restart #Gentoo
MyBox ruben # sh /etc/rc.d/rc.httpd restart #Slackware
MyBox ruben # service httpd restart #Fedora

Probando Apache-PHP.

Gentoo.
MyBox ruben # cat >> /var/www/localhost/htdocs/script.php

Código:
();
?>

###Presionar Control+d para salir####

Slackware.
Idem Gentoo, solo que el nombre del fichero debe ser /var/www/htdocs/script.php.

Fedora.
Idem, pero el fichero es /var/www/html/script.

Nótese que /var/www/localhost/htdocs/, /var/www/htdocs/ y /var/www/html/ son los directorios donde deben alojarse los ficheros de los sitios webs en Gentoo, Slackware y Fedora respectivamente.

Probando php-mysql.

Gentoo.

MyBox ruben # cat >> /var/www/localhost/htdocs/script2.php

Código:
function connect ()
{
	//sustituir passroot por el password de root en mysql.
	$con=mysql_connect('localhost','root','passroot'); 

	if (!$con)
	{
		$msj='No conecta a mysql ';
	}

	else
	{
		$msj='Conecta ';
	
		$db=mysql_selectdb('mysql');

		if (!$db)
		{
			$msj=$msj.'pero no logra seleccionar la base de datos';
		}
		else
		{
			$msj=$msj.'y consigue seleccionar la base de datos' ;
		}
	}

return $msj;
}

$var=connect();
echo '
'.$var;

?>

#### Pulsar Control+d para salir#########

Ahora para probar script2 es suficiente con cargar http://localhost/script2.php en el navegador web.
Obviamente en Slackware y Fedora solo varía el nombre del directorio al que se redirecciona la salida de cat.

Probando phpmyadmin.

En Fedora al escribir http://localhost/ en la barra de búsqueda del navegador se accede a la interface web de phpmyadmin. En cambio, en Slackware y Gentoo la url a tipear es obviamente http://localhost/phpmyadmin.

Eso es todo.