Migrar una web con Drupal 8 a un virtual host local de apache

Migrar una instalación ya funcionando de Drupal 8 desde la web a un servidor local en nuestro equipo es ligeramente más complicado que con otras versiones de Drupal, la forma de hacerlo que a mí me ha funcionado es la siguiente:

Partimos de un equipo en el que tenemos instalado linux Mint 18.1, pero estas instrucciones podrían valer también para cualquier distribución linux, cambiando convenientemente las rutas de los ficheros.

Instalamos el servidor web:

sudo apt-get install apache2

Para comprobar que funciona, accedemos con un navegador a la dirección http://localhost  y deberíamos ver la página raíz del servidor apache

Instalamos PHP, que en esta versión de Linux Mint (18.1) es el PHP 7.0, y algunos módulos de php que nos serán necesarios:

sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-cli php7.0-cgi php7.0-gd php7.0-curl php7.0-gd php7.0-intl php7.0-imap php7.0-mcrypt php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-pear php-imagick php-apcu

Comprobamos que PHP funciona creando como root el fichero /var/www/html/info.php con una única línea que ponga

<?php phpinfo(); ?>

Reiniciamos el servidor web

sudo service apache2 restart

Accedemos a la dirección http://localhost/info.php y deberíamos de ver la página de información de PHP

Habilitamos el  módulo rewrite

sudo a2enmod rewrite

Instalamos MySQL

sudo apt-get install mysql-client mysql-server

Aseguramos la instalación de MySQL con el script

sudo mysql_secure_installation

Instalamos y configuramos SSL, para ello creamos una carpeta

sudo mkdir /etc/apache2/ssl

Nos situamos en ella y y ejecutamos el comando de creación de un certificado autofirmado (en este comando y en las instrucciones siguientes habrá que cambiar “misitio” por el nombre de nuestra web)

cd /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/misitiossl.key -out /etc/apache2/ssl/misitiossl.crt

Se nos hará una serie de preguntas, acerca de nuestra identidad etc. Cuando termine el comando, cambiamos los permisos de los ficheros creados en el directorio

sudo chmod 600 *

Ahora configuramos el host virtual en Apache, para ello creamos el directorio al que copiaremos los ficheros de nuestra web, y luego creamos el fichero de configuración del host virtual

sudo mkdir -p /var/www/misitio
sudo vim /etc/apache2/sites-available/misitio.conf

En este fichero tenemos que tener el siguiente contenido:

<VirtualHost *:80>
 ServerName www.misitio.local
 DocumentRoot /var/www/misitio

RedirectMatch 301 (.*) https://www.misitio.local$1
</VirtualHost>

<VirtualHost _default_:443>

ServerName www.misitio.local
 ServerAlias misitio.local
 ServerAdmin webmaster@localhost

DocumentRoot /var/www/misitio

ErrorLog ${APACHE_LOG_DIR}/misitio-error.log
 CustomLog ${APACHE_LOG_DIR}/misitio-access.log combined

SSLEngine on
 
 SSLCertificateFile /etc/apache2/ssl/misitiossl.crt
 SSLCertificateKeyFile /etc/apache2/ssl/misitiossl.key

<Directory "/var/www/misitio">
 Options FollowSymLinks
 AllowOverride All
 Require all granted
 </Directory>

<FilesMatch "\.(cgi|shtml|phtml|php)$">
 SSLOptions +StdEnvVars
 </FilesMatch>

<Directory /usr/lib/cgi-bin>
 SSLOptions +StdEnvVars
 </Directory>

BrowserMatch "MSIE [2-6]" \
 nokeepalive ssl-unclean-shutdown \
 downgrade-1.0 force-response-1.0
 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

Modificamos el fichero /etc/hosts añadiendo una línea en la que apuntamos a nuestro host virtual. Para ello incluimos en este fichero una línea al principio que ponga:

127.0.0.1      www.misitio.local

Copiamos los ficheros de la web que queremos migrar a la carpeta /var/www/misitio, creamos en nuestro MySQL local una base de datos ideńtica a la que tenemos en la base de datos de la web, y creamos el usuario con el que se accede a ella desde el sitio web. Para ello podemos usar adminer, phpmyadmin, etc. Si en vez de migrar una web estamos creando una web desde cero, pues entonces usamos el método habitual de instalación de una web Drupal, usando la dirección de nuestro host virtual como inicio del proceso.

Solamente si estamos haciendo una migración, una vez que tenemos los ficheros transferidos y la base de datos configurada, accedemos al fichero:

sudo vim /var/www/misitio/sites/default/settings.php

y modificamos la parte correspondiente a los host de confianza, incluyendo la dirección de nuestro host virtual. Buscamos trusted_host_patterns y el fichero debería de quedar tal que así:

$settings['trusted_host_patterns'] = array(
 '^www\.misitio\.com$', 
 '^www\.misitio\.local$'
);

Y ya debería funcionar todo, accediendo a la página https://www.misitio.local deberíamos de ver la página principal de nuestra nueva web en local. La primera vez que accedamos a ella nos saltará una advertencia de seguridad en el navegador porque estamos usando un certificado autofirmado, por lo que deberemos de añadir una excepción de seguridad para poder acceder las siguientes veces sin que salte este aviso.

Este post está basado en gran parte en lo que se explica en: https://kreationnext.com/support/how-to-install-drupal-8-with-apache-mysql-and-ssl-on-ubuntu-15-10/

¿No funciona chmod -R?

Cuando alguna vez hemos tenido que cambiar los permisos a los ficheros de una carpeta y de las subcarpetas incluidas de forma recursiva, hemos usado por ejemplo el comando chmod -R 755 y ha funcionado perfectamente. Sin embargo, si tratamos de hacer los mismo seleccionando a qué tipo de ficheros queremos hacer el cambio con el comando chmod -R 755 *.php nos encontramos con que no funciona, que el comando no nos da error, pero solo cambia los ficheros de la carpeta actual, no lo hace sobre los ficheros con esa extensión incluidos en carpetas dentro del directorio.
Realmente no es un error, simplemente funciona así, pero como para todo hay arreglo, la forma de conseguir lo que queremos es combinando los comando find y chmod de la forma siguiente:
find . -type f -name '*.php' -exec chmod 755 {} \;
Con este comando buscamos (find) en el directorio actual (el .) todos los ficheros (-type f) que tienen extensión php (‘*.php’), y la lista recuperada la dirigimos (-exec) hacia el comando chmod, que la recibe en {}. El \; final solamente es para indicar que se acaba la orden.
Parece un comando complicado, pero cuando entiendes qué hace cada cosa resulta más fácil de recordar.
En esta entrada hay un ejemplo algo más complicado, que sirve para cuando queremos cambiar los permisos solamente a aquellos ficheros que tienen ya unos permisos determinados, por ejemplo cambiar al permiso 755 a aquellos ficheros que en ese momento tienen permisos 777.

Instalar Linux junto a Windows 10 en un portátil Acer Aspire E5

El siguiente procedimiento describe la instalación de Ubuntu 15.10 en un portátil Acer Aspire E5, pero debería de funcionar también para cualquier otra distribución que tenga incorporado ya el sistema UEFI (Ubuntu 14.04+) y cualquier otro portátil Acer más o menos parecido a éste. El procedimiento es sencillo, pero tiene varios pasos muy diferenciados que tenemos que hacer en ese mismo orden. Empecemos.

Actualizar la BIOS

Lo primero que hay que hacer es actualizar la BIOS del equipo, porque algunas de sus versiones no permiten ni la instalación de Linux ni el arranque en modo Live desde un USB. Para ello hay que acceder a la página de descargas de Acer, seleccionar el tipo y modelo de portátil, pulsar en la pestaña BIOS/Firmware y descargarse la versión más moderna de la BIOS, que en mi caso fue la v1.35. La versión 1.31 creo que también es válida, o al menos eso dicen en los foros; si es la que tiene el portátil de fábrica, no es necesario actualizarla. La que sí que no funciona es la versión 1.25, que era justo la que traía el mío. La actualización de la BIOS no conlleva ninguna complicación y se puede hacer fácilmente siguiendo las instrucciones del ejecutable que descargamos.

Desactivar el fast-boot en Windows

Para ello seguimos las instrucciones que tenemos en la página de Acer, las cuales nos dicen que tenemos que ir a Panel de Control / Opciones de energía / Elegir lo que hacen los botones de encendido / Cambiar ajustes actualmente no disponibles y desmarcar el check-box que pone “Activar arranque rápido” que aparece en la parte de abajo de la pantalla.

Dejar espacio libre en el disco duro

El siguiente paso es hacer sitio en el disco duro, algo que tenemos que hacer obligatoriamente desde dentro de Windows 10, no nos sirve hacerlo desde la distribución Live de Linux ni desde GParted. Para ello pulsaremos con el botón derecho en el icono de Windows 10 abajo a la izquierda y seleccionaremos la opción “Administración de discos”. En la ventana que se nos muestra nos aparecen tres particiones, nos fijamos en una de ellas etiquetada C y con formato NTFS, la más grande. La seleccionamos, pulsamos el botón derecho sobre ella y seleccionamos la opción “Reducir volumen”. Tras un tiempo calculando nos muestra cuánto tenemos libre. Ajustamos el espacio que queramos, por ejemplo yo he utilizado 90 Gb pero con 10-20Gb puede ser más que suficiente, depende de lo que vayamos a instalar posteriormente en el sistema linux. Cuando termine, dejamos el espacio libre vacío, sin asignar ni formatear.

Modificar el orden de arranque en la BIOS

Ahora ya podemos arrancar desde un USB en el que previamente hayamos instalado Ubuntu para iniciar en modo Live, pero antes tenemos que cambiar los parámetros de la BIOS para que el sistema arranque primero desde el USB. Para ello reiniciamos el equipo y al inicio del arranque pulsamos F2, lo que nos permite entrar a cambiar la configuración de la BIOS. Vamos a Boot, y en el orden de arranque ponemos en primer lugar el USB (mediante las teclas de función F5 y F6 podemos cambiar el orden de las unidades). Guardamos los cambios en la BIOS, salimos y si tenemos el USB insertado, al pulsar F12 en el arranque ya podremos seleccionar que lo haga desde el dispositivo USB con Ubuntu.

Iniciar desde un USB Live de Ubuntu e instalar el sistema Linux

Cuando arranca Ubuntu en modo Live, seleccionaremos la opción “Try Ubuntu…” y cuando finalmente se muestre el escritorio veremos que todo va bien menos la conexión inalámbrica (conseguir que funcione el wifi es tema para otra entrada del blog), por lo que tendremos que trabajar con el equipo conectado por cable si queremos actualizar el sistema tras su instalación.

Pulsamos el icono de “Instalar Ubuntu” y procedemos con el conocido y facilísimo proceso de instalación de Ubuntu en el disco duro, seleccionando cuando nos lo pregunte la opción “Instalar Ubuntu junto a Windows 10”. Esta forma de instalación de Ubuntu es específica para sistemas con UEFI activado, por lo que no se instala el grub de la manera habitual en sistemas anteriores, sino que lo hace de forma que Ubuntu pueda arrancarse posteriormente desde el Windows Boot Manager.

Cuando termina la instalación pulsamos reiniciar el equipo y extraemos el USB para que se arranque desde el disco duro.

Incluir el nuevo sistema en el arranque de Windows

Cuando el sistema arranca vemos que directamente entramos en Windows 10, como si no hubiéramos hecho nada. Bien, eso es porque todavía no le hemos dicho al arranque de Windows que hay otro sistema operativo en el disco que queremos poder seleccionar cuando queramos. Así que volvemos a reiniciar el equipo, pulsamos F2 para entrar en las opciones de la BIOS y vamos a Security. Primero tenemos que seleccionar la opción de dar una password al supervisor (que somos nosotros). Lo hacemos, confirmamos la password y vemos que ahora ya nos permite seleccionar más opciones. Seleccionamos la opción “Elegir un fichero UEFI seguro”. Nos aparece una pantalla en la que solamente aparece HDD0 o algo parecido. Pulsamos Intro. En la siguiente pantalla vemos que ya nos aparece una etiqueta que pone Ubuntu, la seleccionamos y pulsamos Intro. Posteriormente aparece una lista de ficheros de los que seleccionamos el correspondiente a Grub. Y ya está, guardamos las modificaciones en la BIOS, salimos y al reiniciar ya nos aparece el conocido menú de arranque de Grub en el que tenemos tanto la opción de iniciar Ubuntu como la de iniciar en el sistema Windows 10 con el que convive en el mismo disco duro.

 

Error “Cannot find include file …” en NetBeans

Si empezamos a codificar en el lenguaje C/C++ utilizando NetBeans IDE es probable que cuando hagamos nuestra primera aplicación nos encontremos con el error “Cannot find include file …”

Para solucionarlo, cerramos el IDE e instalamos las utilidades necesarias para construir aplicaciones C++, en Debian/Ubuntu y distribuciones derivadas se consigue mediante el comando:

sudo apt-get install build-essentials

En las distribuciones de Linux derivadas de Archlinux el comando sería:

sudo pacman -S base-devel

Una vez hecho esto, abrimos de nuevo NetBeans, vamos a Tools / Options / C/C++ y en la pestaña Build Tools pulsamos en el botón Restore Defaults y luego en el botón Apply. A continuación vamos a la pestaña Code Assistance, pulsamos en el botón Reset Settings y luego en Apply.

Una vez hecho esto deberían de desaparecer los errores en los “include”.

Instalar LAMP en Chakra Linux

Voy a separar la instalación en varias partes: instalar el servidor de páginas web con PHP, el mySQL, el phpMyAdmin y por último la habilitación de un directorio de usuario para desarrollo de nuestras páginas web. Aunque esta instalación la he realizado en Chakra Linux 2015.03 Euler, los pasos creo que también funcionarán para cualquier distribución basada en Arch Linux.

Instalación del servidor de páginas web

Para ello utilizamos el siguiente comando, que nos instala los paquetes principales y otros que nos vendrán bien:

sudo pacman -S apache php php-apache php-gd php-mcrypt php-pear xdebug

El xdebug solo lo uso para depurar las aplicaciones en NetBeans, luego si no se usa ese entorno de trabajo no es necesario instalarlo. Arrancamos el servicio con el comando:

sudo systemctl start httpd.service

Para comprobar que funciona el servidor de páginas web podemos acceder con el navegador a la página http://localhost y ver que nos aparece el famoso “It works!”

Para incluir el PHP, editamos el fichero de configuración de Apache (yo uso el editor vim, pero eso es cuestión de gusto y penitencia personal):

sudo vim /etc/httpd/conf/httpd.conf

Y justo después de la línea

LoadModule dir_module modules/mod_dir.so

Incluimos la línea

LoadModule php5_module modules/libphp5.so

Y después del último “Include” en ese mismo fichero, añadimos las líneas:

# PHP
Include conf/extra/php5_module.conf

Para comprobar que funciona el PHP creamos un fichero info.php en el directorio donde tendremos nuestras páginas web (en este caso es el directorio /srv/http)

sudo vim /srv/http/info.php

En ese fichero incluimos el contenido siguiente:

<?php phpinfo(); ?>

Y accedemos a la página http://localhost/info.php para comprobar que funciona. Se nos mostrará la página de información de PHP con los datos de nuestra instalación.

Instalación de mySQL

Por defecto en Chakra Linux nos viene ya instalado el MariaDB, un clon de mySQL. Podemos comprobarlo con el comando:

sudo pacman -Ss mysql

Si no nos aparece como instalado, lo instalamos con el mismo comando anterior pero sustituyendo el “-Ss” por “-S”.

A continuación editamos el fichero php.ini

sudo vim /etc/php/php.ini

Y en él descomentamos (quitamos el “;” inicial) de las líneas

extension=mysql.so
extension=mysqli.so
extension=pdo_mysql.so
extension=gd.so
extension=mcrypt.so

Arrancamos el servicio con el comando

sudo systemctl start mysqld.service

Y para asegurar la instalación de nuestro mySQL lo hacemos con el comando

sudo mysql_secure_installation

Con el cual podemos incluir una clave para el usuario root y dar mayor seguridad a nuestra instalación aceptando la opción por defecto que se nos muestra.

Instalación de phpMyAdmin

Para instalar este programa normalmente se hace mediante el paquete de cada distribución, si existe, pero en este caso lo haremos utilizando la fuente original. Para ello accedemos a la página http://phpmyadmin.net y nos descargamos el fichero zip con la última versión pulsando en el botón que pone Download.

El fichero que nos hemos descargado lo extraemos en el directorio /srv/http con el comando:

sudo unzip /<sitio_donde_lo_hemos_descargado>/phpMyAdmin-4.4.9-all-languages.zip -d /srv/http

Y como no nos gusta el nombre del directorio creado, lo cambiamos por otro más corto con el comando

sudo mv /srv/http/phpMyAdmin-4.4.9-all-languages /srv/http/phpMyAdmin

Para comprobar que funciona accedemos a la página http://localhost/phpMyAdmin, en la que podremos entrar con el usuario root y la clave que le dimos anteriormente.

Habilitar un directorio de usuario

Para ello tenemos que modificar el archivo /etc/http/conf/httpd.conf descomentando la línea

LoadModule userdir_module modules/mod_userdir.so

Tenemos también que verificar que en dicho archivo aparece también la línea que incluye nuestro archivo de configuración, que es

Include conf/extra/httpd-userdir.conf

Entramos en el archivo /etc/http/conf/extra/httpd-userdir.conf y comprobamos que incluye las siguientes líneas

<Directory "/home/*/public_html">
      AllowOverride FileInfo AuthConfig Limit Indexes
      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      Require method GET POST OPTIONS
</Directory>

A continuación creamos el directorio donde vamos a alojar nuestras páginas web y le damos permiso de lectura a él y a nuestro directorio de usuario (si no, nos aparecerá el famoso error 403 de Apache)

mkdir ~/public_html
chmod a+x ~
chmod a+x ~/public_html

Copiamos el fichero info.php que creamos en /srv/http al directorio ~/public_html y accedemos a él en la dirección

http://localhost/~nuestro_usuario/info.php

Y ya está, ya tenemos nuestro entorno LAMP en Chakra Linux. Si queremos que cada vez que arranque el sistema tengamos el servidor web y el mySQL disponibles, lanzamos los comandos:

sudo systemctl enable httpd.service
sudo systemctl enable mysqld.service

Un último detalle: si vamos a usar el depurador de PHP de NetBeans, tenemos que entrar en el fichero /etc/php/conf.d/xdebug.ini y comprobar que tiene las líneas

zend_extension=/usr/lib/php/xdebug.so
xdebug.remote_enable=on
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

 

KDE Dolphin no guarda los lugares de usuario

En una instalación nueva de openSUSE 13.2 me he encontrado con el bug 342685 aún no resuelto, que hace que los lugares que añadimos a la barra lateral de Dolphin no permanezcan cuando reiniciamos el navegador de archivos. La forma de solucionarlo es como indica el comentario 25 en la discusión, entramos al fichero:

/home/<nuestro_usuario>/.kde4/share/apps/kfileplaces/bookmarks.xml

Y ahí buscamos las etiquetas que se corresponde con el lugar que hemos creado y que no nos aparece, por ejemplo en mi caso es un acceso directo al directorio Dropbox, luego la parte del fichero a encontrar es:

<bookmark href=”file:///home/<nuestro_usuario>/Dropbox”>

<metadata owner=http://www.kde.org >

<isSystemItem>true</isSystemItem>
<metadata>
<bookmark>

La parte que tenemos que insertar en el xml es la etiqueta que ya he puesto en el ejemplo, y que podéis ver en ese fichero que la tienen todos los demás marcadores del sistema:
<isSystemItem>true</isSystemItem>

Hay que ponerla justo antes de la etiqueta <metadata> correspondiente.

Lo que hacemos es un engaño y algo chapucilla, la verdad, pues estamos haciendo creer al navegador que la carpeta es del sistema, cuando es una de usuario, pero mientras se corrige el bug, nos sirve.

Instalar Firefox o Thunderbird en Debian 8

Aunque las versiones adaptadas para Debian son perfectas y funcionales 100%, mi aprecio al proyecto Mozilla me impulsa siempre a usar directamente sus programas, por lo que si no eres un fan absoluto de Mozilla Foundation como yo, entonces no te hace falta hacer lo que sigue a continuación, tanto Iceweasel como Icedove funcionan perfectamente.

Primero descargamos el fichero de instalación de la página de descargas de Mozilla Firefox o Thunderbird.

Hacemos login en una consola como root y lanzamos los siguientes comandos (suponiendo que el fichero lo hemos descargado en el directorio Descargas):
#cd /opt
#tar xvf /home/nuestro_usuario/Descargas/firefox-...tar.bz2
#cp /opt/firefox/browser/icons/mozicon128.png /usr/share/pixmaps/firefox.png
#rm /usr/bin/firefox && ln -s /opt/firefox/firefox /usr/bin/firefox

Para el caso de Thunderbird los comandos son:

#cd /opt
#tar xvf /home/nuestro_usuario/Descargas/thunderbrid-...tar.bz2
#cp /opt/thunderbird/chrome/icons/default/default48.png /usr/share/pixmaps/thunderbird.png
#rm /usr/bin/thunderbird && ln -s /opt/thunderbird/thunderbird /usr/bin/thunderbird

A continuación tenemos que asignar el directorio en el que hemos hecho las instalaciones a nuestro usuario, para que así podamos actualizar las versiones sin tener que repetir la instalación. Para ello lanzamos el comando:

#chown -R nuestro_usuario:nuestro_grupo /opt/firefox
#chown -R nuestro_usuario:nuestro_grupo /opt/thunderbird

Para tener un acceso en el escritorio o el menú, depende de si usas Gnome, LXDE, etc tendrán que seguir un procedimiento u otro, por ejemplo, para Gnome y LXDE basta con crear el archivo firefox.desktop (hay que hacerlo con usuario root) en el directorio /usr/share/applications con el contenido siguiente:

[Desktop Entry]
Encoding=UTF-8
Name=Firefox
Comment=Browse the World Wide Web
GenericName=Web Browser
X-GNOME-FullName=Firefox Web Browser
Exec=/opt/firefox/firefox %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=firefox
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
StartupWMClass=Firefox
StartupNotify=true

Es conveniente cerrar sesión y entrar de nuevo en el escritorio, porque he visto en Gnome que si por ejemplo copias el archivo de otro programa para crear éste, a veces se mantiene el icono del anterior. Para Thunderbird sería igual  pero cambiando el nombre del programa, la descripción, etc y adaptándola al cliente de correo. El fichero thunderbird.desktop quedaría así:

[Desktop Entry]
Encoding=UTF-8
Name=Thunderbird
Comment=Mail client
GenericName=Mail client
X-GNOME-FullName=Thunderbird Web Browser
Exec=/opt/thunderbird/thunderbird %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=thunderbird
Categories=Network;
StartupWMClass=Thunderbird
StartupNotify=true

Y ya está, a disfrutar con los programas de la Mozilla Foundation.