sábado, 9 de mayo de 2015

Primeros pasos recreando una máquina Manjaro

Hoy, luego de un buen tiempo usando el mismo viejo Manjaro que tengo implementado hace años, uno de sus discos decidió dejar el servicio.

Tengo gran cantidad de backups de ese disco, pero por primera vez, me dije que no sería una mala práctica comenzar de nuevo, con un sistema completamente limpio, y ver qué queda al finalizar.

Los servicios que mi máquina tenía antes de la muerte de su disco eran:
  • SSH Server.
  • ownCloud 8.
  • GateOne.
  • Lógicamente, Apache, PHP, MySQL.
  • Una vieja aplicación hecha en PHP3 que aún levanto, y que no tengo ganas de migrar a nuevas versiones de PHP dado que aún funciona de maravillas, y cumple con lo que necesito. Si algo no está roto, no intentes arreglarlo...
  • Cliente no-ip.
Lo primero fue bajar de www.manjaro.org la imagen de sistema operativo para 64 bits (0.8.12 en este momento), y pasarla a un pendrive.

Para ello no tuve que hacer más que colocar el pendrive en mi laptop, y ejecutar:

$ sudo dd if=manjaro-0.8.12-x64.iso of=/dev/sdf bs=1M

Efectivamente, el pendrive se ubica en el dispositivo /dev/sdf.

Booteé con el pendrive, particioné un disco USB externo para tener 500 MB de /boot, 8 GB de swap, 150 GB de /, y el resto para /home. Luego de eso, configuré mi zona horaria, mi teclado, mi usuario, y continué con una instalación común y corriente.

Al finalizar la instalación el sistema me pidió ejecutar alguna actualización. Como nada es fácil, se colgó la implementación del paquete "manjaro-system", que es el que actualiza el sistema operativo en general.

Entonces abrí una terminal, ejecuté "xkill" (viejo truco), y maté la ventana donde se estaba ejecutando la actualización.
En esa misma terminal ejecuté:

$ sudo pacman -Syyuu

...y acepté todo lo que me pidió cambiar. El total del download me pareció algo excesivo para un sistema recién instalado, pero la recompensa vale la pena. Son 800 MB de downloads.

Al finalizar la actualización, como siempre hacemos en estos casos, rebooteamos para que el nuevo kernel comience a tomar sus funciones.

Muy para mi sorpresa, al rebootear aparece un pedido de dos paquetes más que deben ser actualizados. En este caso, no se bajan y se instalan, sino que se compilan en vivo y en directo. Son los paquetes "libxfcegui4" y "arj". No hay problema, acepto todo y dejo que se baje el código fuente, y luego que se compilen e instalen.

Luego de esto, procedí a engordar con un pequeño lujito: yendo a la configuración de Manjaro, y de allí a "Kernel", pude implementar el nuevo kernel 4.0.1. Rebooteé, y noté para mi asombro que todo funciona, y lo hace de maravillas.

Instalamos algunos paquetes mandatorios para hacernos la vida más fácil:

$ sudo pacman -S vim community/remmina community/freerdp vim vi

Ahora comienzan los verdaderos temas a resolver. El primero es el SSH. Al querer ejecutar el comando ssh veo que no están instalados ni el servidor ni el cliente. A instalarlos:

 $ sudo pacman -S core/openssh

Al terminar la instalación, verifico el estado del servicio:

$ systemctl status sshd
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)


A activarlo:

$ sudo systemctl enable sshd
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
$ sudo systemctl start sshd


Ya con el SSH levantado, la vida se me hace bastante más fácil. Sólo me falta ownCloud 8, GateOne, y mi aplicación.

Vamos a la instalación directamente:

Instalamos Apache y PHP:

$ sudo pacman -S apache
$ sudo systemctl enable httpd
$ sudo systemctl start httpd
$ sudo pacman -S php php-apache

Configuramos Apache para soportar PHP:

$ sudo vi /etc/httpd/conf/httpd.conf

Comentamos esta línea:

# LoadModule mpm_event_module modules/mod_mpm_event.so

Agregamos debajo de ella la siguiente línea:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Agregamos al final del archivo:

# Agregado por HeCSa para PHP 5.x:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
Include conf/extra/php5_module.conf


Modificamos /etc/php/php.ini para soportar MySQL entre otras cosas, descomentando las líneas:

extension=bz2.so
extension=gd.so
extension=iconv.so
extension=intl.so
extension=mcrypt.so
extension=openssl.so
extension=pdo_mysql.so

extension=pdo_sqlite.so
extension=mysql.so
extension=mysqli.so
extension=sqlite3.so
extension=xmlrpc.so
extension=zip.so

Y relanzamos el servidor Apache, ahora con PHP habilitado:

$ sudo systemctl restart httpd

Instalamos MySQL:

$ sudo pacman -S mysql
:: There are 2 providers available for mysql:
:: Repository extra
   1) mariadb
:: Repository community
   2) percona-server

Enter a number (default=1): 1


Inicializamos la base de datos MySQL:

$ sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
$ sudo systemctl start mysqld

$ sudo mysql_secure_installation (las opciones por default en este caso están bien)
$ sudo systemctl enable mysqld

Instalamos el cliente no-ip:

$ yaourt -S aur/noip (aceptamos todas las opciones)
$ sudo noip2 -C -Y
(configurar todos los parámetros según las preguntas que nos hace el sistema, más apuntadas a nuestra cuenta, clave, tiempo de refresco, servidores, etc.)
$ sudo systemctl enable noip2
$ sudo systemctl start noip2

Bravo...ya tenemos un servidor localizable en la red de redes! Ahora a por ownCloud 8, considerando que conservamos aún los archivos que teníamos en el viejo disco, el que hemos recuperado usando el procedimiento que podemos encontrar en este mismo blog, en "Recuperación de discos levemente arruinados". Conservamos los directorios "data" y "config", fundamentales para nuestra recreación completa.

Instalamos los paquetes necesarios:

$ sudo pacman -S owncloud php-pear php-intl
$ sudo pear install MDB2

Ahora...ingresamos en el directorio de instalación de ownCloud, y destareamos los dos directorios "data" y "config", conservados en dos archivos llamados "/backup/data.tgz" y "/backup/config.tgz":

$ cd /usr/share/webapps/owncloud
$ sudo tar zxvf /backup/data.tgz
$ cd /etc/webapps/owncloud
$ sudo mv config config.original
$ sudo tar zxvf /backup/config.tgz

Al finalizar el destareo, tendremos los dos directorios completamente recreados, pero ownCloud aún no está funcional. Tendremos que tocar algunas cosas en los archivos de configuración para que realmente comience a funcionar, asi como recrear su base de datos completamente, de la que por suerte conservamos un backup llamado "owncloud-2015-05-06.dump".

$ cd /usr/share/webapps/owncloud
$ sudo mv data data.original
$ sudo mv config config.original

Recreamos  tanto la base de datos de ownCloud como la de la mi aplicación PHP3 (llamada demohd):

$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.0.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database demohd;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> create database owncloud;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on demohd.* to xxxx@localhost identified by 'xxxx';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on owncloud.* to xxxx@localhost identified by 'xxxx';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>


Recuperamos los backups de ambas bases de datos:

$ mysql -u demohd -p demohd < demohd-2015-05-06.dump
$ mysql -u owncloud -p owncloud < owncloud-2015-05-06.dump

Llegó el momento de tocar archivos! Allá vamos:

$ sudo cp /etc/webapps/owncloud/apache.example.conf /etc/httpd/conf/extra/owncloud.conf
$ sudo vi /etc/httpd/conf/httpd.conf

(descomentamos estas líneas)

LoadModule proxy_html_module modules/mod_proxy_html.so

LoadModule rewrite_module modules/mod_rewrite.so

(al final del archivo agregamos esta línea)

Include conf/extra/owncloud.conf

Cambiamos permisos:

$ sudo chown -R http:http /usr/share/webapps/owncloud/

Finalmente, mi aplicación se ubica dentro de un directorio llamado /opt/lampp, el cual también tengo resguardado en un archivo llamado lampp.tgz. Para reconstruir la aplicación sólo debo ejecutar:

$ cd /opt
$ sudo tar zxvf /backup/lampp.tgz

Ahora sólo queda reconstruir el servicio que levantaba dicho entorno de ejecución, para lo cual ingresamos al directorio "/etc/systemd/system", y ejecutamos los siguientes comandos:

$ cd /etc/systemd/system
$ sudo vi lampp.service

[Unit]
Description=LAMPP de versiones viejas de Apache y PHP

[Service]
ExecStart=/opt/lampp/bin/apachectl start
ExecReload=/opt/lampp/bin/apachectl restart
ExecStop=/opt/lampp/bin/apachectl stop
Type=forking

[Install]
WantedBy=multi-user.target


$ sudo systemctl --system enable lampp
$ sudo systemctl start lampp

Una cosa que había olvidado es que en PHP3 la app no soportaba el nuevo esquema de autenticación que ahora tiene MySQL (en realidad instalé MariaDB), por lo que debo ejecutar:

$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.0.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> set password for xxxx@localhost = old_password('xxxx');
Query OK, 0 rows affected (0.23 sec)

MariaDB [(none)]>


Listo, ya puedo ingresar a mi página basada en PHP3!

Vamos a la instalación de GateOne. Es bien sencilla:

$ yaourt -S aur/gateone-git
$ sudo systemctl enable gateone
$ sudo systemctl start gateone

Listo, ya tengo de nuevo mi máquina tal como alguna vez estuvo...pero actualizada a lo último!

Publicar un comentario en la entrada