Instalar Apache, MySQL y PHP en Linux (Ubuntu 14.04)

Probablemente este conjunto (Linux + Apache + MySQL + PHP), o también conocido como LAMP, sea uno de los más softwares libres que más se utilizan en servidores web. Hoy os voy a contar cómo instalar Apache, MySQL y PHP en una distribución Linux (Ubuntu 14.04).

1. Actualizar la base de datos de paquetes de apt-get

Sin entrar en mucho detalle, apt-get, es una herramienta para gestionar el software de varias distribuciones Linux. En el caso de Ubuntu, es la herramienta por defecto. Lo primero que debemos de hacer es actualizar la base de datos con las últimas versiones de los paquetes disponibles para nuestra distribución. Para ello utilizaremos el siguiente comando:

sudo apt-get update

2. Instalar Apache

Apache es un conocido servidor web de código abierto, y probablemente el más usado del mundo.

sudo apt-get install apache2

Una vez instalado, podremos probar que funciona a través de un navegador web usando las URLs http://hostname_o_dominio_servidor ó http://ip_de_servidor, según prefieras. En mi caso http://tesla:

Si has podido ver esta página, es que la instalación ha ido correctamente. Es la página web por defecto de Apache, con información básica del servidor.

3. Instalar MySQL

MySQL es un sistema de gestión de Base de Datos ampliamente utilizado en conjunto con Apache y PHP. En este caso también instalaremos varios paquetes para la integración de MySQL con Apache y PHP.

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

Durante la instalación, nos pedirá que asignemos una contraseña para el usuario root de MySQL.

Una vez instalado, es recomendable activar las tablas del sistema MySQL:

sudo mysql_install_db

Otro paso recomendable es ejecutar el programa mysql_secure_installation para mejorar la seguridad del servidor MySQL. Con esto:

  • Puedes definir una password para los usuarios root.
  • Puedes borrar los usuarios root para que son accesibles desde fuera del host local.
  • Puedes borrar cuentas de usuarios anónimos.
  • Puedes borrar la base de datos de test.

Ejecuta el siguiente comando y sigue sus instrucciones:

sudo mysql_secure_installation

Ahora ya podemos instalar PHP.

4. Instalar PHP

PHP es un lenguaje de código abierto de web scripting que es usado masivamente para construir páginas webs dinámicas.

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

Puede ser interesante añadir index.php al principio de los ficheros que puede indexar Apache. Para ello hay que editar el fichero dir.conf e incluir el index.php al principio.

sudo vi /etc/apache2/mods-enabled/dir.conf

De tal modo que quede así:

<IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Podría interesarte instalar más podulos de PHP. Aquí verías un listado:

yvoictra@tesla:~$ apt-cache search php5-
php5-common - Common files for packages built from the php5 source
php5-curl - CURL module for php5
php5-dev - Files for PHP5 module development
php5-json - JSON module for php5
php5-readline - Readline module for php5
php5-cgi - Lenguaje de guiones embebidos en HTML para servidores (binario CGI)
php5-cli - intérprete de órdenes para el lenguaje de guión php5
php5-dbg - Símbolos de depuración para PHP5
php5-gd - Módulo GD para php5
php5-gmp - Módulo GMP para php5
php5-ldap - Módulo LDAP para php5
php5-mysql - Módulo MySQL para php5
php5-odbc - Módulo ODBC para php5
php5-pgsql - Módulo PostgreSQL para php5
php5-pspell - Módulo pspell para php5
php5-recode - Módulo recode para php5
...

Para instalar cualquiera de los paquetes, usa la el comando apt-get:

sudo apt-get install nombre_del_modulo

5. Ver resultados

Ya tenemos los paquetes de LAMP instalados. Ahora podemos ver que PHP esté correctamente instalado creando la web de test. Creamos el siguiente fichero:

sudo vi /var/www/html/info.php

Y añadimos esto:

<?php
phpinfo();
?>

Ahora visitamos la web en las siguientes URLs http://hostname_o_dominio_servidor/info.php ó http://ip_de_servidor/info.php, según prefieras. En mi caso http://tesla/info.php.

Aparecerá la web de información de PHP:

php_info

¡Y se acabó! Ya está instalado Apache + MySQL + PHP en nuestro servidor Ubuntu.

Cómo resolver nombre de máquinas Linux (Ubuntu) en una red local

En casa tengo una red local con varios PCs y algunas máquinas virtuales, principalmente con Windows y Linux. En el CPE tengo configurado DHCP para asignación de IPs. Pura comodidad.

Para poder conectarme de una máquina a otra conociendo sólo el hostname es necesario que haya una resolución del hostname. En mi caso, me encontré con el siguiente escenario:

  • Máquina Windows resuelve hostname de otra máquina Windows.
  • Máquina Windows no resuelve hostname de una máquina Linux.
  • Máquina Linux no resuelve hostname de una máquina Windows.
  • Máquina Linux no resuelve hostname de una máquina Linux.

Para poder dar resolución de hostnames en la red, tuve que hacer lo siguiente:

1. Cómo hacer que máquina Windows resuelva hostname de máquina Linux (Ubuntu)

En este caso la solución es instalar el paquete winbind en la máquina Linux (destino), para que utilice el protocolo NetBIOS de Windows y publique su resolución de nombres.

sudo apt-get install winbind

Una vez instalado, el fichero /etc/nsswitch.conf habrá añadido la palabra wins en la entrada de hosts. El fichero tendrá una pinta así:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files wins dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Con esto, ya deberías de poder hacer ping a la máquina Linux desde una máquina Windows y resolver correctamente su hostname.

2. Cómo hacer que máquina Linux (Ubuntu) resuelva hostname de máquina Linux (Ubuntu)

Para este tema tuve que instalar en ambas máquinas Linux el paquete avahi-daemon . Con este paquete, ya se resuelven los hostnames añadiendo el sufijo «.local».

Esto probablemente te modificará el fichero /etc/nsswitch.conf de ambas máquinas y dejará la línea de hosts así:

hosts: files wins mdns4_minimal [NOTFOUND=return] dns mdns4

Con esto, ya debes de poder resolver nombres entre máquinas Linux con el hostname estilo «.local»:

[23:04:02] yvoictra|trinity:~$ ping tesla.local
PING tesla.local (192.168.1.111) 56(84) bytes of data.
64 bytes from tesla.local (192.168.1.111): icmp_seq=1 ttl=64 time=0.455 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=2 ttl=64 time=0.524 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=3 ttl=64 time=0.489 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=4 ttl=64 time=0.499 ms

Y ahora queda poder resolver máquinas Windows desde máquinas Linux. De momento no he encontrado la manera de hacerlo… pero seguiré investigando. Cuando lo consiga actualizaré el post (Si alguien me echa un cable os lo agradeceré…).

En resumen, el tema en mi red local ha quedado:

  • Máquina Windows resuelve hostname de otra máquina Windows.
  • Máquina Windows resuelve hostname de una máquina Linux.
  • Máquina Linux no resuelve hostname de una máquina Windows.
  • Máquina Linux resuelve hostname de una máquina Linux.

¡Y esto es todo amigos!

Cómo activar SSH en Ubuntu

Es posible que tu distribución de Ubuntu no tenga instalado por defecto un servidor SSH. Para comprobar los servidores que tienes instalados y escuchando, puedes utilizar el programa netstat:

# sudo netstat -tlpn
Conexiones activas de Internet (solo servidores)
Proto  Recib Enviad Dirección local         Dirección remota       Estado       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               ESCUCHAR    1454/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               ESCUCHAR    1409/sshd
tcp        0      0 0.0.0.0:445             0.0.0.0:*               ESCUCHAR    1116/smbd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               ESCUCHAR    1470/mysqld
tcp        0      0 0.0.0.0:139             0.0.0.0:*               ESCUCHAR    1116/smbd
tcp6       0      0 :::8080                 :::*                    ESCUCHAR    1582/apache2
tcp6       0      0 :::22                   :::*                    ESCUCHAR    1409/sshd
tcp6       0      0 :::445                  :::*                    ESCUCHAR    1116/smbd
tcp6       0      0 :::139                  :::*                    ESCUCHAR    1116/smbd

(Puede que necesites activar el comando sudo para tu usuario)

En este caso, tengo el programa sshd escuchando en el puerto 22. También lo podríamos haber comprobado buscando entre los paquetes instalados:

# dpkg --get-selections | grep openssh-server
openssh-server                                  install

En caso de que no lo tengas, para activar el servidor SSH, simplemente hay que instalar el paquete openssh-server.

# sudo apt-get install openssh-server

Una vez instalado, ya puedes utilizar un cliente SSH, como Putty, para conectarte a tu servidor.

Puedes también modificar las configuraciones del servidor (cambio de puerto, etc…) en el siguiente fichero de configuración:

/etc/ssh/sshd_config

y para cargar las nuevas configuración, recargar el servidor:

# sudo service ssh restart

¡Y listo!

Cómo cambiar el hostname del equipo a través de la shell (Ubuntu / Linux)

Prerrequisito: Utilizar el usuario root ó bien tener permisos para utilizar sudo con otro usuario.

Para cambiar el nombre de una máquina Linux (hostname) a través de la shell (CLI) hay que hacer dos cosas.

1. Editar el fichero de configuración hostname:

# sudo vi /etc/hostname

En este fichero sólo hay una palabra, que define el hostname de la máquina.

2. Editar el fichero hosts:

# sudo vi /etc/hosts

Que tendrá un aspecto similar:
change_hostname
Lo que hay que modificar es la línea de la IP 127.0.1.1, y cambiar la palabra que sigue a la IP (Que es el nombre de la máquina, en este caso trinity).

Por último, y para que surta efecto este cambio, es necesario reiniciar el sistema. Para ello haremos un reboot:

# sudo reboot

¡Y listo!

Cómo activar sudo en Ubuntu

Lo primero. ¿Qué es sudo? Y no, no es del verbo sudar. El programa sudo es una utilidad que viene en los sistemas operativos Unix, como Linux, BSD, Mac OS ó incluso Android, que permite a un usuario ejecutar otro programa con privilegios de otro usuario (Normalmente el usuario root).

Lo típico es estar usando un sistema operativo Unix con un usuario diferente de root, para no liarla. Pero hay veces que necesitamos ejecutar programas que requieren tener permisos de root. Una opción sería cambiar al usuario root, y ejecutar lo que sea necesario… pero aquí es  donde sudo lo hace más sencillo: no hace falta iniciar sesión con el usuario root para ejecutar lo que necesites.

sudo-sandwichLa famosa tira cómida de xkcd explica claramente qué es lo que permite hacer sudo.

¿Y por qué os cuento esta peli? Pues porque Ubuntu, por defecto trae deshabilitada la opción de poder ejecutar este comando.

Para habilitarla hay dos formas de hacerlo.

Forma 1 (La más sencilla)

Este método consiste en añadir el usuario al que le queremos habilitar el sudo, dentro del grupo sudo. Esto hay que hacerlo con el usuario root.

# usermod -a -G sudo yvoictra

Con el comando id podemos comprobar si el usuario pertenece al grupo sudo. En este caso el 27.

yvoictra@trinity:~$ id
uid=1000(yvoictra) gid=1000(yvoictra) grupos=1000(yvoictra),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lpadmin),111(sambashare)

y ya se debe de poder utilizar el programa sudo.

Forma 2 (Otra sencilla)

Este método es igual que el anterior, pero con otro comando.

# gpasswd -a yvoictra sudo

Con el comando id comprobamos el cambio:

yvoictra@trinity:~$ id
uid=1000(yvoictra) gid=1000(yvoictra) grupos=1000(yvoictra),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lpadmin),111(sambashare)

y ya se debe de poder utilizar el programa sudo.

Forma 3 (La alternativa)

Otro método consiste en editar (con usuario root) el siguiente fichero:

# vi /etc/sudoers

Encontrarás una línea del siguiente aspecto:

root ALL=(ALL:ALL) ALL

Lo que hay que hacer es añadir una línea igual que la anterior, pero incluyendo el usuario con el cual quieres ejecutar sudo. En este caso, con mi usuario yvoictra:

yvoictra ALL=(ALL:ALL) ALL

Y debería de quedar algo así:

Guardas el fichero con el cambio realizado y ya se puede utilizar el programa sudo.

¡Listo! ¿Qué alternativa te ha gustado más?

Problema con los efectos del escritorio en Ubuntu 9.04

Anoche actualicé mi Ubuntu a la versión 9.04, y en principio todo funcionaba correctamente, exceptos los efectos del escritorio.
Al ir a configurarlos de nuevo (Sistema->Preferencias->Apariencia->Efectos visuales) y seleccionar «Normal» ó «Extra» me saltaba una ventana con el mensaje… «No se han podido activar los efectos del escritorio«, total… que buscando por ahí encontré esta solución, que a mí, me funciona.

Desde una terminal, escribimos:

sudo vi /usr/bin/compiz

Una vez abierto el fichero, buscamos la línea que pone «# blacklist based on the pci ids» y anteponemos un «#» en todas las líneas hasta la línea que indica «unset T«, de este modo:

# blacklist based on the pci ids
# See http://wiki.compiz-fusion.org/Hardware/Blacklist for details
#T=" 1002:5954 1002:5854 1002:5955" # ati rs480
#T="$T 1002:4153" # ATI Rv350
#T="$T 8086:2982 8086:2992 8086:29a2 8086:2a02 8086:2a12" # intel 965
#T="$T 8086:2a02 " # Intel GM965
#T="$T 8086:3577 8086:2562 " # Intel 830MG, 845G (LP: #259385)
#BLACKLIST_PCIIDS="$T"
#unset T

Guardamos el fichero, y reiniciamos el equipo.

Esto es una de las cosas que menos me gusta de Linux, si realmente estamos apostando por una interfaz de usuario sencilla… no me imagino a un usuario novel solucionando este problema, y eso que es bastante sencillo.

Aprendiendo a usar rsync

rsync es una aplicación del mundo Unix que permite sincronizar ficheros entre máquinas.

Un ejemplo de su uso sería el siguiente:

rsync -avrP --times --perms --links --exclude "*~" /ruta/a/documentos usuario@servidor:documentos

donde:

  • rsync: el programa que va a hacerse cargo del respaldo.
  • avrP: son las opciones: a significa “modo de archivo”, v por “verbose” (o sea, que verás en la terminal toda la información relevante sobre el proceso), r es por “recursivo” (respaldará el directorio ~/documentos y todo lo que esté dentro de él, incluyendo directorios) y P es para permitir la transfrerencia parcial de archivos (muy útil si se transfieren archivos muy grandes; si se llegara a cortar la conexión, retomará donde quedó, no desde el principio).
  • –times: Indica a rsync que envíe la fecha de modificación del fichero, de modo que se detecten actual¡zaciones de éstos y se sincronicen correctamente.
  • –perms: Para que se sincronicen también los permisos.
  • –links: Para que se sincronicen los links.
  • –exclude «*~»: con esto conseguimos que no sincronice los ficheros de backup.
  • /ruta/a/documentos es el directorio local que quieres sincronizar.
  • usuario@servidor:documentos es la información del servidor remoto donde se sincronizarán los ficheros.

Para poder utilizar esto de forma automática, sería necesario tener las llaves de SSH preparados para un login automático.

Instalar Latex en Ubuntu

Para instalar LaTeX en tu Ubuntu, debes de instalar los siguientes paquetes:

sudo apt-get install texlive-latex-base

si necesitáis más paquetes para LaTeX como ifpdf, podéis instalarlo así:

sudo apt-get install texlive-latex-recommended

Para instalar la fuente marvosym tienes que instalar lo siguiente:

sudo apt-get install ttf-marvosym

Para instalar el paquete ldesc2e.sty, primero nos debemos descargar el fichero, y luego guardarlo en el siguiente directorio:

/usr/share/texmf-texlive/tex/latex/ldesc2e

/usr/share/texlive/texmf/tex/latex/ldesc2e

para que se guarden los cambios, ejecutaremos

sudo texhash

Manual para instalación

Y para posteriormente crear ficheros en PDF, te puede ayudar este documento.

Configurar Ubuntu

Primero, instalamos las aplicaciones necesarias, para ello quizás tengamos que añadir estas líneas en el fichero /etc/sources.list:

deb http://archive.ubuntu.com/ubuntu/ hardy main universe multiverse restricted
deb-src http://archive.ubuntu.com/ubuntu/ hardy main universe multiverse restricted

ó simplemente con actualizar los repositorios a través de apt-get valdría:

sudo apt-get update

ahora ya podemos instalar las aplicaciones:

sudo aptitude install thunderbird ssh wireshark vim-full tilda htop screenlets netspeed sensors-applet samba traceroute unrar

También sería interesante habilitar la cuenta de root.

Instalar Java (Sun) en Ubuntu

Hay varias formas para poder instalar una máquina virtual de Java en (K)Ubuntu, aquí voy a explicar cómo hacerlo descargando los ficheros binarios (.bin) e instalarlos usando la consola.

Yo he usado un procedimiento que resumo aquí:

Pasos a seguir:

  1. Nos descargamos los ficheros .bin de la web de Java de Sun. En este caso yo he usado la versión JRE (Java Runtime Environment) de Java, puede que necesites la versión JDE (Java Development Environment) si lo que vas a hacer es desarrollar aplicaciones en Java, ya que trae más cosas, como el compilador…etc etc.
  2. Nos vamos al directorio donde hemos descargado el fichero (Será un fichero del estilo «jre-6-linux-i586.bin«)
  3. $ cd <directorio>

  4. Le damos permisos de ejecución al fichero.
  5. $ chmod +x jre-6-linux-i586.bin

  6. Lo instalamos
  7. $ sudo ./jre-6-linux-i586.bin

  8. Seguimos las instrucciones que van apareciendo en pantalla, que son 2 o 3.
  9. Movemos la carpeta creada después de la instalación (llamada jre1.6.0) a una más apropiada:
  10. $ sudo mv jre1.6.0 /usr/lib/jvm/

  11. Seteamos el nuevo Java como una de las alternativas de java:
  12. $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.6.0/bin/java" 1

  13. Ahora seteamos la nueva alternativa como la real de Java:
  14. $ sudo update-alternatives --set java /usr/lib/jvm/jre1.6.0/bin/java

  15. Para comprobar si tenemos correctamente instalada la versión de Java…
  16. $ java -version

Nos debería de aparecer algo así:

java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode)