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!

Extraer un fichero de un paquete comprimido tar.gz

tar.gz_200pxHace poco me encontré con un fichero tar.gz de cerca de 40 Gb que tenía comprimidos un montón de ficheros de log. El caso es que sólo me interesaba un fichero de todos los que tenía el paquete, pero normalmente suelo descomprimir todo el contenido del tar.gz (tar xvzf fichero.tgz).

En este caso descomprimir los 40Gb puede ser inasumible por la cantidad de espacio que puede llegar a ocupar todo eso sin comprimir.

Lo que hice para poder extraer un único fichero fue:

1. Localizar el fichero a extraer

Con el comando tar tzf se muestra un listado de los ficheros que contiene el fichero tar.gz.

# tar tzf trinity-15-03-09.tar.gz 
trinity_20150309000036_54133_15-03-09_00
trinity_20150309000041_54134_15-03-09_00
trinity_20150309000152_54135_15-03-09_00
trinity_20150309000158_54136_15-03-09_00
trinity_20150309000313_54137_15-03-09_00
trinity_20150309000320_54138_15-03-09_00
trinity_20150309000434_54139_15-03-09_00
trinity_20150309000443_54140_15-03-09_00
trinity_20150309000556_54141_15-03-09_00
trinity_20150309000606_54142_15-03-09_00
trinity_20150309000718_54143_15-03-09_00
trinity_20150309000730_54144_15-03-09_00
trinity_20150309000839_54145_15-03-09_00
trinity_20150309000853_54146_15-03-09_00
trinity_20150309001002_54147_15-03-09_00
trinity_20150309001017_54148_15-03-09_00
trinity_20150309001126_54149_15-03-09_00
...

2. Extraer el fichero

Una vez localizado el fichero, para extraerlo habría que incluir en el programar tar la ruta en la que está comprimido. Algo de este estilo:

# tar xvzf fichero.tar.gz */ruta_al_fichero/fichero.ext

En nuestro caso, utilicé el siguiente comando:

# tar xvzf trinity-15-03-09.tar.gz trinity_20150309000718_54143_15-03-09_00

Con esto, se descomprime únicamente el fichero deseado.

Nuestro viaje a Salamanca

El último fin de semana de Marzo mi chica y yo estuvimos de viaje en Salamanca. Yo ya había estado, pero fue un viaje medio rápido y no me dio tiempo a ver casi nada… así que decidimos ir un fin de semana entero para poder disfrutar y conocer bien la ciudad.

Nos alojamos en el hotel Vincci Ciudad de Salamanca, en una habitación superior. ¡La habitación era enorme! ¡Y la cama de 2×2! La verdad es que el hotel nos gustó mucho. La única pega (que para nosotros no lo era) es que está un poco lejos del centro. Pero el trayecto a pie es muy ameno y en cosa de 20 minutos te puedes plantar en el centro de la ciudad. A la gente le gusta hospedarse en sitios céntricos, pero vimos que eran hoteles más caros… y por la noche podrían tener ruidos. Además es posible que apenas hubiéramos andado. ¡Y oye! De esta manera te obligas a andar (Viene genial para quemar las calorías de más del tapeo) y a conocer más zonas.

La ciudad tiene un encanto especial. Me encantó el ambiente que tiene, sobre todo La Plaza Mayor. Es el centro de la vida social de la ciudad. La universidad también merece la visita, con una preciosa fachada donde todo el mundo se detiene para buscar la famosa rana de Salamanca.

Otro punto importante de visitar son las catedrales. Una vieja (Construida en los siglos XII y XII) y otra más nueva, construida entre los siglos XVI y XVII. Esta última me impresionó bastante por la cúpula que está a una altura de casi 100 metros.

Finalmente os recomiendo ir a la calle Van Dyck. Es una conocida calle de tapas buenas y baratas. Nosotros sólo probamos un sitio, y nos enamoró. Se llama Mesón Los Faroles, y tiene unos pinchos morunos cojonudos. Si vuelvo a Salamanca, volveré a probar los famosos pinchos.

Por último, aquí os dejo alguna de las fotos que hice por allí… os recomiendo visitar la ciudad si no la conocéis.

Salamanca (Río Tormes)

Salamanca (Desde el puente romano)

Selfie^2

Catedral de Salamanca

Plaza mayor de Salamanca

Pincho moruno @ Mesón Los Faroles (Salamanca)

Reflejos

Domingo de Ramos @ Catedral de Salamanca

Ensayo

Facultad de Ciencias @ Salamanca

Palacio de Congresos @ Salamanca

Nosotros. Fin del viaje :-)

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?

Dícese del organismo que convierte cafeína y pizza en software.

definicion_programador

vía @AlexandraEnsgtr

Obtener URL de página de foto de Flickr a partir de URL estática de la foto

flickr-logoEn más de una ocasión me he encontrado por internet un enlace de una foto de Flickr que enlaza directamente al fichero JPG, por ejemplo: https://farm4.staticflickr.com/3735/11801395743_3e95f00c43_z.jpg. Con este enlace a priori no se tiene acceso a la página de Flickr de la foto donde puedes encontrar el usuario propietario de la foto, así como comentarios, metadatos… y demás info.

Sin embargo, a partir de la URL de la foto estática, se puede obtener la URL de la página de Flickr de una forma sencilla.

Lo primero que hay que hacer es separar el nombre del fichero por los guiones (_) bajos en 3 partes. Con el ejemplo anterior (https://farm4.staticflickr.com/3735/11801395743_3e95f00c43_z.jpg), quedaría:

  1. photo-id: 11801395743
  2. secret: 3e95f00c43
  3. size: z

Ahora lo que hay que coger es la parte del photo-id y añadirlo a la URL http://flickr.com/photo.gne?id=, de modo que en este caso habría que generar la URL: http://flickr.com/photo.gne?id=11801395743 y ya tienes el enlace a la página oficial de Flickr con toda la información de la foto.

Sobre la estructura de las URLs de Flickr, hay bastante información en la web oficial.

Fuente.

Obtener hostname y demás info de un equipo remoto a través de la IP

nmap_logo_vx

En más de una ocasión me he encontrado ante la duda de qué máquina hay detrás de una IP. Siempre hay herramientas que nos pueden ayudar con este tema, y aquí os presento la que yo utilizo: el fantástico nmap. La verdad es que hay pocas herramientas tan útiles…

Lo que me suele ayudar para identificar máquinas, es buscando el hostname, que te lo devuelve el campo «Service Info«.

[root@host01:~]# nmap -A 10.114.99.29
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2014-03-03 17:14 CET
Interesting ports on sede1-10-114-99-29.wnet (10.114.99.29):
Not shown: 1673 closed ports
PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        OpenBSD ftpd 6.4 (Linux port 6.4)
22/tcp   open  ssh         (protocol 2.0)
80/tcp   open  http       Microsoft IIS webserver 7.5
111/tcp  open  rpcbind     2 (rpc #100000)
3128/tcp open  http-proxy Squid webproxy 3.1.20
6000/tcp open  X11        X.Org (open)
8080/tcp open  http       Microsoft IIS webserver 6.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port22-TCP:V=4.11%I=7%D=3/3%Time=5314AA54%P=i686-suse-linux-gnu%r(NULL,
SF:20,"SSH-2\.0-OpenSSH_6\.0p1\x20Debian-4\r\n");
Device type: general purpose
Running: Linux 2.4.X
OS details: Linux 2.4.18 - 2.4.27
Service Info: Host: host39.cosmos.es.ftgroup; OSs: Linux, Windows, Unix

Nmap finished: 1 IP address (1 host up) scanned in 13.901 seconds