lunes, 17 de julio de 2017

Activar el debug de PHP en Linux Debian Jessie, utilizando el IDE NETBEANS

Para esta ocasión, mi artículo mostrará la manera de realizar una configuración de un apache y del PHP para que puedas ejecutar paso a paso mostrando las variables en tiempo real, tal como programar en windows con los IDE para Microsoft Framework.

Muchas veces, para realizar desarrollos en PHP es difícil detectar un error de lógica o una mala sintaxis en códigos muy complejos, es por ello que se recurre a los llamados "policías" los cuales no es mas que crear errores controlados, impresiones en pantalla o cualquier otro método que pueda realizar interrupciones en la ejecución de un código para ver el trabajo real del sistema, es por ello que muchas veces el desarrollo en PHP para muchos se hace cuesta arriba.

1.- Instalamos los paquetes que necesitamos:

apt install php5 libapache2-mod-php5 apache2 -y

Instalamos el paquete para realizar el debugging de PHP:

apt install php5-xdebug -y

Una vez instalado, debemos configurar el siguiente archivo y colocar los parámetros que se encuentran entre las dos líneas:

nano /etc/php5/mods-available/xdebug.ini
------------------------------------------------------------------------------
xdebug.profiler_enable=1
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug
------------------------------------------------------------------------------

Para que este cambio surta efecto debemos reiniciar el servicio de Apache

/etc/init.d/apache2 restart

2.- Ahora configuraremos el IDE (En este caso es NetBeans 8.2)

Buscamos la siguiente Ruta:

Herramientas > Opciones > PHP > Debugging

Las variables xdebug.remote_port y xdebug.idekey la colocamos en el IDE como configuramos en el archivo del xdebug.  Veamos la imagen a continuación:


Una vez realizada la configuración, solamente debemos ir al menu “Depurar” y utilicemos las opciones que allí nos indiquen de acuerdo al criterio necesario.

Ahora les muestro como es el debugging en tiempo de ejecución:



Se puede observar en la pestaña de abajo del IDE como muestra las variables cargadas en RAM y el tipo de las mismas. Adicionalmente, colocas el cursor sobre una variable que ya ha pasado por el punto de ejecución y te indicará el valor de la misma.

NOTA: Pueden utilizar cualquier IDE de su preferencia, solo deben recordar los parametros indicados en el archivo xdebug.ini.

Cuando termina de ejecutar el bloque de instrucciones, el navegador muestra el resultado del código ejecutado.


Hasta una próxima entrega.

Cómo escoger el Mirror mas Rápido. Uso del comando netselect-apt

Uno de los grandes problemas que se presentan al momento de realizar cualquier proceso de instalación o al realizar las replicas es la de escoger un mirror el cual represente menos congestión o latencia, es por ello que hoy explico el comando netselect-apt.

Este comando se encarga de realizar un análisis de los mirror que se encuentren en la nube y nos mostrará cual es el que presenta menos latencia. Este comando descargará un listado de los servidores activos de la siguiente dirección:

http://www.debian.org/mirror/mirrors_full

El comando es muy sencillo.

netselect-apt -a amd64 -n -o mirror_mas_rapido.txt -t 10

Explicamos los parámetros:

-a = Representa las arquitecturas a evaluar, en el caso que se omita, el entenderá que son todas las arquitecturas.

-n = incluye los paquetes de la rama non-free

-o = genera un archivo de salida el cual en este ejemplo es mirror_mas_rapido.txt

-t = es la cantidad de servidores a probar, en mi caso coloqué 10

-f = que también realice pruebas de transferencia vía FTP

-c = Indica el país a analizar (Venezuela, Brazil, France, entre otros). En el caso que deseen buscar el de un país especifico.

También puede utilizarse sin parámetros, es decir:

netselect-apt

Este comando solo creará un archivo sources.list en la ubicación del directorio actual.

Es todo por ahora.

Hasta la proxima entrega!!!

Instalación de un servidor mirror basado en Debian Jessie

En una red corporativa, es necesario tener un mirror local para evitar trafico innecesario al Internet, optimizamos el tiempo de instalación y podemos realizar procesos de actualización periódica en las estaciones de trabajo. En mi caso, cuento con servidores y estaciones de trabajo en Debian 8 (Jessie) y utilizo solamente arquitectura de 64 bits (el equipo mas viejo que poseo es un Intel Dual Core con 2 GB de RAM y soporta instrucciones de 64 bits).

El procedimiento es el que describiré a continuación.

En primer lugar, tener un equipo con suficiente almacenamiento de disco (al menos 160GB). Si se observa que es necesario tener mas RAM o un mejor equipo ya depende del requerimiento y la concurrencia que exista en la empresa.

Instalamos Debian Jessie (version actual 8.8) con una instalación minima. El particionado que utilicé fue el siguiente:

/                 20GB
swap           1GB
/var         138GB (lo que queda)

Procedemos a instalar los paquetes necesarios:

apt install -y debmirror apache2 php5 libapache2-mod-php5

Una vez completado ejecutamos los comandos para poder realizar la descarga:

Descargamos con este comando los paquetes estables, seguridad y Backports:

debmirror -debug -progres --no-source --verbose --getcontents --diff=none --no-check-gpg --ignore-release-gpg --ignore-missing-release --i18n -a amd64 -s main,contrib,non-free -h ftp.debian.org -d jessie,jessie-updates,jessie-backports -e http -r /debian /var/www/html/debian

Este comando tomará su tiempo al momento de realizar la primera replica. Una vez se encuentra descargada solamente se encargará de actualizar las diferencias existentes entre el servidor de la nube y el local.

Ahora bien, para poder realizar una actualización del mirror periódica, se puede realizar un script de shell para que el proceso pueda automatizarse. En mi caso, realizo un proceso de registro de eventos para llevar un mejor control. Ejecutamos el siguiente comando para crear el script:

nano /root/mirror.sh

Y copiamos el siguiente contenido:
------------------------------------------------------------------------------
#!/bin/bash
clear
echo “########################################################” >> /root/registro_mirror.log
#debian jessie
echo “Inicio de descarga de Mirror, distribucion Debian 8 estable, Updates y Backports (solo 64 bits) – ” `date`>> /var/www/html/logs/registro_mirror.log
debmirror -debug -progres --no-source --verbose --getcontents –--=none --no-check-gpg --ignore-release-gpg -ignore-missing-release --i18n -a amd64 -s main,contrib,non-free -h ftp.debian.org -d jessie,jessie-updates,jessie-backports -e http -r /debian /var/www/html/debian
echo “Fin de descarga de Mirror, distribucion Debian 8 estable, Updates y Backports (solo 64 bits) – ” `date`>>/var/www/html/logs/registro_mirror.log
echo “Reiniciando el Servidor -  ” `date`>>/var/www/html/logs/registro_mirror.log
reboot
------------------------------------------------------------------------------


Ahora procedemos a automatizar el proceso de actualización, colocando la siguiente línea en el crontab (programador de tareas).

nano /etc/crontab

Agregamos estas lineas al final

#Tarea mirror debian
00 22 * * * root  -c "sh /root/mirror.sh"

Con este comando, la tarea se ejecutará todos los días a las 10:00 PM y el proceso de actualización dependerá de las diferencias existentes entre el mirror local y el de la nube.

Para poder acceder desde un equipo cualquiera y evitar errores de transcripción de los datos, he diseñado este index.php para que pueda ser dinamico. A su vez, muestra información referente al equipo desde el cual nos estamos conectando. 


Ahora el fuente del index.php

nano /var/www/html/index.php


------------------------------------------------------------------------------
<?php
print '<html><head><title>Mirror Local</title></head><body>';
print '<h1>Mirror Local </h1>';
print '<p>#mirror local Debian 8<br>';
print 'deb [arch=amd64] http://mirror/debian/ jessie main contrib non-free<br>';
print 'deb [arch=amd64] http://mirror/debian/ jessie-updates main contrib non-free<br>';
print 'deb [arch=amd64] http://mirror/debian/ jessie-backports main contrib non-free<br></p>';
print '<br>';
print '<p>Tu IP es: <b>'.$_SERVER["REMOTE_ADDR"].'</b></p>';
print '<br>';
print '<p>El IP del servidor es: '.$_SERVER["SERVER_ADDR"].'</p>';
?>



------------------------------------------------------------------------------

Debemos borrar el archivo index.html con el siguiente comando:

rm /var/www/html/index.html

Para poder acceder al mirror, solamente debemos acceder con la siguiente dirección:

http://IP_MIRROR/

NOTA: Se observa que en este caso, en el repositorio se hace mención a la arquitectura que posee el repositorio, la cual se establece con el parámetro [arch=amd64]. Si se desea  agregar otras arquitecturas, se debe cambiar en el SCRIPT el siguiente parámetro: -a i386,amd64 para agregar la arquitectura i386. Cabe mencionar que el tamaño del mirror se incrementará dramaticamente.