viernes, 31 de mayo de 2019

Linux Mandar correo desde la línea de comandos. mutt

Volver

Linux

Mandar correo desde la línea de comandos.

mutt


En un anterior artículo había mandado un correo desde la línea de comandos utilizando curl.
Ante la imposibílidad de mandar adjuntos mediante curl ( yo no lo he podido conseguir ) , he buscado otras soluciones, y he encontrado mutt que está bastante extendido.
Lo primero es instalar el paquete mutt.
    apt install mutt
Creamos los ficheros de configuración.
    mkdir -p ~/.mutt/cache/headers
    mkdir ~/.mutt/cache/bodies
     touch ~/.mutt/certificates
Creamos el archivo de configuración.
    touch ~/.mutt/muttrc
Editamos el fichero de configuración según nuestro servidor de correos.
En mi caso utilizo leafpad como editor.
     leafpad ~/.mutt/muttrc


En mi caso (GMAIL) la configuración del servidor es la siguiente
set ssl_starttls=yes
set ssl_force_tls=yes
 
set imap_user = 'CORREO_ORIGEN@gmail.com'
set imap_pass = 'CONTASEÑA'
 
set from='
CORREO_ORIGEN@gmail.com'
set realname='seta43'
 
set folder = imaps://imap.gmail.com/
set spoolfile = imaps://imap.gmail.com/INBOX
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
 
set header_cache = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = "~/.mutt/certificates"
 
set smtp_url = 'smtps://
CORREO_ORIGEN@gmail.com:CONTASEÑA@smtp.gmail.com:465/'
 
set move = no
set imap_keepalive = 900




El correo mandado será desde un archivo de texto, que en este caso se llama tarea23_59.txt .
Además se mandan los 3 ficheros adjuntos  gra1.png , gra2.png y datos.txt.

El fichero modelo del correo tiene el siguiente formato:
tarea23_59.txt
ESTADISTICAS DEL DIA
vie may 31 08:37:58 CEST 2019





Se crea script donde a partir de un modelo de correo, solo cambio la última línea donde inserto la fecha.
/home/seta/tareas/tarea1.sh
#!/bin/bash
datecreated=`date`

cd $HOME/tareas

sed -i '$d' tarea23_59.txt
echo
$datecreated >> tarea23_59.txt

mutt -s "temperaturas"  CORREO_DESTINO.com < tarea23_59.txt -a $HOME/www/webcam/gra1.png  -a $HOME/www/webcam/gra2.png  -a $HOME/www/webcam/datos.txt


Ya tenemos el script creado, pero nos falta que el script se ejecute a las 23:59.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

59 23 * * * /home/seta/tareas/tarea23_59.sh >/dev/null 2>&1

De esta forma el script se ejecutará a las 23:59 .


Saludos
Juan Galaz

Bibliografía:
https://www.garron.me/es/gnu-linux/correo-linea-commands-gmail-mutt.html
https://ubunlog.com/mutt-cliente-correo-terminal/

viernes, 10 de mayo de 2019

Mandar correo desde la línea de comandos y averiguar la IP publica

Volver

Linux

Mandar correo desde la línea de comandos.

Averiguar la IP publica de nuestro router desde la línea de comandos.


En anteriores artículos había realizado un servidor web.
Al no disponer IP fija de mi operadora, al algún caso cuando se reiniciaba el router, se cambiaba la IP pública.
Esto me hacía imposible entrar en mi servidor desde el exterior al no saber la IP en ese momento.
La única forma era mandarme un correo cada cierto tiempo de la IP publica que tengo.
En este artículo explico como averiguar mi IP pública, y cada 12 horas mandar a mi correo personal un correo donde indico la IP publica en ese momento.
El programa que se utiliza para mandar el correo y averiguar la IP pública es curl.
El programa curl es una auténtica navaja suiza, puede trabajar con la mayoría de los protocolos de internet.

Para averiguar nuestra IP pública utilizamos el comando:  
    curl ifconfig.me 
Nos devolvera una dirección IP, que corresponde la IP externa de nuestro router.

Para mandar un correo desde la línea de comandos (el servidor de correos es GMAIL) se utiliza el programa curl con los comandos:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure
Como podéis ver, para mandar un correo necesitamos una cuenta de correos de origen, y una cuenta de correos donde vamos a mandar el correo.
El correo mandado será desde un archivo de texto, que en este caso se llama correo.txt .

El fichero modelo del correo tiene el siguiente formato:
correo.txt
From: "SERVIDOR_PI" <correoOrigen@gmail.com>
To: "Otro Nombre" <
correoDestino@gmail.com>
Subject: AsuntoIP

Hola IP actual
vie may 10 00:00:01 CEST 2019
87.221.154.144


Todo lo anterior se junta en un script donde a partir de un modelo de correo, solo cambio las 2 últimas líneas donde inserto la fecha y la IP pública en ese momento.
/home/seta/tareas/tarea1.sh
#!/bin/bash
datecreated=`date`

cd /home/seta/tareas
echo "Mandando correo de la IP actual"
sed -i '$d' correo.txt
sed -i '$d' correo.txt

echo $datecreated >> correo.txt
curl ifconfig.me >> correo.txt

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd   --mail-from 'correoOrigen@gmail.com' --mail-rcpt 'correoDestino@gmail.com'   --upload-file correo.txt --user 'correoOrigen@gmail.com:CONTRASEÑA' --insecure


Ya tenemos el script creado, pero nos falta que el script se ejecute cada 12 horas.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

0 */12 * * * /home/seta/tareas/tarea1.sh >/dev/null 2>&1

De esta forma el script se ejecutará cada 12 horas.


Espero que os sirva de algo este artículo.


Saludos
Juan Galaz


lunes, 29 de abril de 2019

Sensores 18B20 LDR BMP180 DHT22, Arduino - Gambas - Python

Página principal


Sensores

18B20 LDR BMP180 DHT22

Arduino - Gambas - Python


Debía realizar un circuito electrónico para añadir a una página web donde indicara la temperatura ambiente.
La idea era solo colocar un sensor de temperatura 18B20, pero se me ocurrió añadir mas sensores.
En este circuito coloco varios sensores:
-18B20 sensor de temperatura.
-LDR sensor de luz.
-BMP180 sensor de presión y temperatura.
-DHT220 sensor de temperatura y humedad. (he utilizado el equivalente AM2302)


Todos los datos de estos sensores se transmiten al PC mediante el terminal serie.

Circuito montado.


Circuito.

Para la representación de los datos he utilizado dos programas.
El primero está realizado en Gambas (VB para linux).
El segundo realizado en Python.
En ambos programas busca la placa de sensores dentro de todos los posibles puertos serie.
Si encuentra el módulo de sensores los representa en pantalla.
Toda la programación se ha realizado en el entorno Linux con la distribución Debian 9.
La información de sensores se manda cada 5 segundos.
Su transformación para que funcionase en Windows en el caso de Phyton es fácil, solo cambiar la lista de dispositivos serie.

Programa Gambas (VB para linux).


Programa Phyton.

El montaje es perfecto para probar sensores.
Si no tenéis alguno de los sensores, deberéis anular el código correspondiente al sensor en el programa del arduino.

PROGRAMAS

VIDEO





Saludos.
Juan Galaz


Bibliografía:
predi.html
raspb.html
arterec.html
tm16tem.html




martes, 23 de abril de 2019

Servidor WEB con Cámara en Orange PI

Volver

Servidor WEB con Cámara
Orange PI


En el anterior artículo había realizado y probado un servidor WEB con la placa Orange PI y el servidor  NGINX.
En este artículo añado un componente mas a Orange PI, una cámara.
A través de la página web se podrá ver la imagen de la calle, esta imagen se actualizará cada 2 minutos.
http://seta43.duckdns.org/seta/webcam/index.html


Imagen vista desde un navegador.

Para este proyecto hemos utilizado una webcam  Logitech, Inc., aunque sirve cualquiera que funcione en Linux.

Cámara colocada en la ventana.

Como base de la página web tenemos el fichero index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta http-equiv="refresh" content="115">
    <title>miweb</title>
  </head>
  <body alink="#EE0000" bgcolor="#ffff99" link="#0000EE" text="#000000"
    vlink="#551A8B">
    <i><big><b>Mi_Cámara</b></big></i><br>
    <hr size="2" width="100%"><big><big style="font-weight: bold;"><img
          alt="" src="web.jpg" height="480" width="640"><br>
        <br>
mar abr 23 20:26:01 CEST 2019
      </big></big>
  </body>
</html>



Lo primero que debemos hacer es utilizar un programa que capture una imagen de la webcam para colocarla en la página web.
_____VERSIÓN___ANTIGUA CAMBIADA_________
El programa utilizado es vgrabbj , este programa se maneja vía comandos, que es lo que nos interesa.

vgrabbj -U -R -i vga  -z 50  -f /home/seta/www/webcam/web.jpg


Con esta orden capturamos una imagen en /home/seta/www/webcam/web.jpg , es donde alojaremos la página web de la webcam.
En mi caso coloco mi webcam boca-abajo para mejor sujección, por lo cual debo utilizar las opciones -U -R para dejar la imagen bien.
El tamaño será de 640x480, con la orden -i vga capturo  ese tamaño.
En algunas webcam se necesita ciertas imágenes para que se estabilice la luz, yo espero 50 imágenes, opción -z 50.
El script queda de la siguiente manera.


#!/bin/bash
datecreated=`date`

vgrabbj -U -R -i vga  -z 50  -f /home/seta/www/webcam/web.jpg
sed -i '14d' /home/seta/www/webcam/index.html
sed -i "14i${datecreated}" /home/seta/www/webcam/index.html


Después de funcionar perfectamente la webcam durante 1 semana, se me ocurrió reiniciar la placa Orange PI.
Resultaba que la webcam no se llegaba a ver. Probando y probando me dí cuenta que el programa vgrabbj no funcionaba a veces cuando se lanzaba por primera vez.
Para solucionar el problema he cambiado el programa que captura imagenes, y ahora es fswebcam.
Ahora funciona todo bien cuando re reinicia el servidor.

#!/bin/bash
datecreated=`date`

#echo "$datecreated" >> /home/seta/web.txt
#vgrabbj -U -R -i vga  -z 50  -f /home/seta/www/webcam/web.jpg
#uvccapture -x640 -y480 -m -o"/home/seta/www/webcam/web.jpg"
fswebcam -r "640x480" -S 40 --flip h,v  --no-banner  --jpeg 70  /home/seta/www/webcam/web.jpg
sed -i '14d' /home/seta/www/webcam/index.html
sed -i "14i${datecreated}" /home/seta/www/webcam/index.html


Con el comando sed borro la línea 14, e inserto la hora y la fecha en la página web.

Para que la página web se actualize automáticamente coloco en la cabecera de la página web:

 <meta http-equiv="refresh" content="115">

Esto hace que se actualice cada 115 segundos.

Ya tenemos el script creado, pero nos falta que el script se ejecute cada 2 minutos.
Para esta tarea utilizaremos cron.  El comando cron es un administrador regular de procesos en segundo plano que viene de serie en linux.
Para añadir el comando que se debe ejecutar en segundo plano, utilizaremos el comando crontab -e  .
Y editaremos de la siguiente forma:

*/2  * * * * /home/seta/www/webcam/tareaWeb > /dev/null 2>&1

De esta forma el script se ejecutara cada 2 minutos.

Como veis es una forma bastante sencilla de crear una webcam en tu página web.


Saludos
Juan Galaz

Bibliografía:

servi.html
wpa.html
wpb.html
orange.html
https://orangepiweb.es/
http://www.orangepi.org/orangepibbsen/forum.php?gid=38



jueves, 11 de abril de 2019

Servidor WEB con Orange PI y NGINX

Volver

Servidor WEB

con

Orange PI y NGINX


En el anterior artículo había realizado y probado un servidor DELL R200.
El modelo DELL R200  tiene el procesador Xeon X3360 de 4 núcleos. El servidor está configurado con dos discos 250G en modo RAID, controlados por una tarjeta.
El resultado era bueno, pero el consumo 77W era alto debido a su potencia. Solo el coste de electricidad por año llegaba a 90€.
Para mantener un servicio comercial de varias páginas web es ideal, pero para un uso particular resulta un tanto costoso.
Hace años que había realizado un estudio de Orange PI PC ,es un clónico de la Raspberry Pi, pero algo mas barato y mas potente (en su día).
En este artículo realizo un servidor WEB con esta placa. Todos los pasos se pueden realizar en una Raspberry Pi, pero esto no lo he probado.
He de confesar que todos los pasos los realicé antes en un ordenador normal (PC) con Debian 9, y luego los he reproducido en la Orange PI PC con Debian 8, funcionando a la perfección.

Lo primero es ir a la página http://www.orangepi.org/downloadresources/ y bajar la versión de Debian que corresponda a vuestra placa, en mi caso (Orange Pi Pc)Debian XFCE Desktop .
Esta imagen está comprimida, y tenemos dos opciones para instalarla en una SD en linux.
La fácil es utilizar el programa gnome-disks desde root.
La segunda opción es descomprimir la imagen.gz que no creará un archivo con extensión .img.
Ahora instalamos la imagen.img a la SD con la orden:
    dd if=OrangePI_Jessie_Xdfce.img of=/dev/sdx bs=1M oflag=direct
donde /dev/sdx es el lugar donde se encuentra la SD. Para saber donde se encuentra la SD se teclea  fdisk -l y nos mostrará los diferentes discos y su localización.
Todo esto lo debemos hacer siendo root, tener paciencia, tarda tiempo en escribir la SD dependiendo de la clase que sea (4) (10).
En esta página del foro se puede encontrar algo en español:
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=33
En ingles:
http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=342
Una vez instalada la imagen en la SD nos creará dos particiones:
BOOT donde se instalan las imágenes uImage del kernel y los script.bin (configuraciones)
Linux donde se encuentra el propio sistema operativo.
Antes debíamos de seleccionar el script.bin apropiado a nuestra placa, ahora ya viene instalado el script apropiado y no hay que hacer nada.

Todo preparado para el primer arranque, hdmi conectado a la Tv, SD con el sistema operativo instalado, teclado y ratón conectado al USB ,y red conectada. Conectamos la alimentación y esperamos como salen los primeros caracteres de arranque de linux.
Nos encontramos ante la petición de usuario y contraseña. Existen dos usuarios ya creados.
orangepi    contraseña: orangepi
root        contraseña: orangepi
Entramos con el usuario orangepi y nos encontramos con un escritorio Xfce.
Lo primero es cambiar la configuración del teclado, entramos en Settings->Keyboard , cambiamos la localización del teclado.

Si queremos cambiar la configuración del teclado en los terminales gráficos, tecleamos como root, la orden:
dpkg-reconfigure locales
Aquí me he encontrado que no funciona el cambio de locales, yo lo he solucionado como indica la página:
    https://enavas.blogspot.com/2015/01/configurar-locales-y-eliminar-el-aviso.html
Yo he editado el fichero  /etc/default/locale y lo he puesto de la siguiente forma:

LANG=es_ES.UTF-8
LANGUAGE=es_ES.ISO-8859-15@euro
LC_ALL=es_ES.UTF-8
LC_CTYPE=es_ES.UTF-8
LC_MESSAGES=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_PAPER=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_MONETARY=es_ES.UTF-8
LC_NUMERIC=es_ES.UTF-8

De todas formas puedes manejar el teclado si sabes como está el teclado americano.

Lo primero y mas conveniente es cambiar las contraseñas de root y orangepi con la orden passwd usuario.
El usuario seta es desde donde voy a trabajar, este usuario entrara automáticamente en forma gráfica, se podrá manejar a distancia con ssh, VNC y ftp. Vamos que una vez configurado todo, no hace falta tener ni teclado, ratón y monitor en la placa Orange PI.
Creamos el  usuario con la orden adduser seta , y  colocamos la contraseña con passwd seta.
Para que inicie automáticamente un usuario, debemos configurar el gestor de arranque  lightdm .
Entramos en consola como root  y editamos el fichero de configuración con la orden:
pluma /etc/lightdm/lightdm.conf
y editamos las líneas siguientes:
autologin-user=seta
autologin-user-timeout=20
Donde seta es el usuario que se inicia automáticamente, y 20 son los segundos que tarda en iniciarse automáticamente.

Debemos configurar la red para que sea la IP estática, en nuestro caso le vamos a dar la IP 192.168.1.70 .


Veremos que cuando entramos en la consola como root o orangepi , nos salda la opción de poder utilizar toda la SD para el sistema. Cuando se instala la imagen en la SD se crea una partición de solo 2 o 3 Gb, si tenemos una SD de 16Gb desaprovecharíamos 13Gb, con la orden sudo fs_resize ,se redimensiona la partición para utilizar toda la SD.

Como pienso que instalar un servidor de páginas dinámicas en esta placa es un tanto pretencioso, no digo que no funcione, no he añadido los paquetes PHP, ni MySQL. El servidor solo servirá páginas estáticas para ser mas rápido.

Con el instalador de aplicaciones Synaptic, o con la orden apt install paquete,  instalamos los paquetes:
ssh    - acceso remoto a un servidor por medio de un canal seguro.
vsftpd    -Servidor ftp
x11vnc    -Servidor VNC
nginx    -Servidor WEB, es algo mas ligero que apache.
Además a mi me gusta instalar: dillo, xfe.

Otra cosa que me gusta hacer es instalar un servidor de escritorios remotos. Con el instalador de aplicaciones Synaptic instalamos x11vnc. Ahora  desde consola indicamos la contraseña del servidor de escritorio remoto, x11vnc  -storepasswd .
Para lanzar el escritorio remoto desde consola , x11vnc -forever -usepw -display :0 -ultrafilexfer


Ahora vamos a configurar el servidor ftp.
Editamos el fichero /etc/vsftpd.conf y colocamos esto:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log    
xferlog_std_format=YES
xferlog_file=/var/log/xfer.log
dual_log_enable=YES
pam_service_name=vsftpd
ssl_enable=NO

Con esto enjaulamos a todos lo usuarios en su propio directorio.
Editamos el fichero /etc/vsftpd.chroot_list y colocamos esto: seta
Indicamos que el único usuario que no estará enjaulado será seta.

Para que las configuraciones se actualicen deberemos reiniciar la placa o actualizarlas una por una, mejor reiniciamos la placa.
Ahora mismo ya no nos hace falta ni ratón, teclado y monitor.
Podremos manejar la placa Orange PI de forma remota, lo podéis comprobar desde otro PC.

La forma de entrar desde otro ordenador a la placa Orange PI mediante ssh es:
ssh seta@192.168.1.70
También existe la posibilidad de ejecutar un programa gráfico con ssh,  ejemplo:
ssh -X -p 22 seta@192.168.1.70 pluma
Es una forma bastante más rápida que utilizar  VNC.

Para transferir ficheros utilizamos ftp, cualquier programa como gftp o Filezilla sirve.
Recordar que solo hemos autorizado la usuario seta a moverse por todos los directorios de la placa Orange PI.

También podemos entrar mediante VNC a manejar el escritorio del usuario seta.

Ya nos toca empezar ha configurar todos los parámetros del servidor WEB, que es el objetivo de este artículo.
Desde cualquier ordenador de nuestra red interna, teclearemos en nuestro navegador la dirección 192.168.1.70 .
Si todo fue bien nos aparecerá la página por defecto del servidor NGINX, el fichero es : /var/www/html/index.nginx-debian.html .
Este fichero será el de por defecto, si no encuentra el fichero index.html.
Normalmente esto serviría si solo tenemos un usuario, pero como yo suelo crear varías páginas que gestionan diferentes usuarios, debo hacer diferentes cambios.
Lo primero es crear un directorio www en el directorio de cada usuario, donde se alojará la página web de cada usuario.
mkdir   /home/seta/www
chown  -R seta:seta    /home/seta/www
chmod  u+rwx      /home/seta/www
chmod  ugo+rx      /home/seta/www
Hemos creado el directorio ww y dado todos los permisos para el buen funcionamiento.

Le damos as seta los permisos para editar todos los fichero web
chown -R seta:seta   /var/www/html
chmod  ugo+rx    /var/www/html

Como root creamos otro directorio:
mkdir  /var/www/html/seta
chown -R seta:seta   /var/www/html/seta
chmod  ugo+rx    /var/www/html/seta

Ahora hacemos un montaje, no enlace, donde los los ficheros que se encuentran en /home/seta/www , el servidor pensará que están en /var/www/html/seta.
echo "/home/seta/www     /var/www/html/seta   none    bind    0    0" >> /etc/fstab
Desde el navegador tecleamos la dirección 192.168.1.70/seta , y nos aparecerá la página almacenada en el directorio /home/seta/www.
Esto es muy útil, podemos crear usuarios enjaulándolos en su directorio www y que puedan tener su página. Ejemplo: http://seta43.duckdns.org/usuario

En mi caso he creado un script de comandos bash donde se crean usuarios con su pagina web desde 4 estilos diferentes en menos de 7 segundos. Los usuarios creados mediante este método están enjaulados en su propio directorio. Además tienen su directorio www, donde alojan su página que pueden actualizar mediante ftp.
Recordar que cuando subáis ficheros a vuestra página, estar seguro que ponéis los permisos adecuados para que se puedan leer,  a mi me paso, hasta que me di cuenta.

Si queréis ver mi página funcionando está en:
http://seta43.duckdns.org

Existe una utilidad en Apache tools para testear el servidor.
Con la orden: ab -c 5 -t 60 http://192.168.1.70/  chequeamos la velocidad del servidor WEB.
Petición desde HP A6_5400 hacia ORANGE PI
Petición desde HP A6_5400 hacia DELL R200
Server Software:        nginx/1.6.2
Server Hostname:        192.168.1.70
Server Port:            80

Document Path:          /
Document Length:        813 bytes

Concurrency Level:      5
Time taken for tests:   21.551 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      52250000 bytes
HTML transferred:       40650000 bytes
Requests per second:    2320.07 [#/sec] (mean)
Time per request:       2.155 [ms] (mean)
Time per request:       0.431 [ms] (mean, across all concurrent requests)
Transfer rate:          2367.65 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       4
Processing:     0    2   0.7      2      25
Waiting:        0    2   0.7      2      25
Total:          1    2   0.6      2      26
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.60
Server Port:            80

Document Path:          /
Document Length:        1112 bytes

Concurrency Level:      5
Time taken for tests:   4.606 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      69200000 bytes
HTML transferred:       55600000 bytes
Requests per second:    10855.19 [#/sec] (mean)
Time per request:       0.461 [ms] (mean)
Time per request:       0.092 [ms] (mean, across all concurrent requests)
Transfer rate:          14671.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       4
Processing:     0    0   0.1      0       4
Waiting:        0    0   0.1      0       4
Total:          0    0   0.1      0       4

El consumo del DELL R200 es de 77W con un coste anual de 90€
El consumo de la placa Orange PI es de 1,7W con un coste anual de 2,5€.

Como podéis observar el coste anual es mínimo, es una solución muy valida para tener unas pocas páginas sin demasiado tráfico.
Me ha sorprendido lo bien que responde a las peticiones desde internet, funciona bastante bien.

Como es tan pequeña la placa Orange PI la tengo metida debajo de la mesa, no mete ruido, consume poco, y se calienta poco (yo tengo la caja abierta para que no se acumule el calor).
Recordar que para que se pueda ver vuestro servidor desde internet, se tiene que configurar el router para que redireccione los puertos a la placa Orange PI, de la misma forma pasa con el ftp.

Si ahora intentas acceder a la página web desde internet, fuera de nuestra red, veremos que ya funciona nuestro servidor WEB.
Para poder verse a uno mismo como si estuviésemos en el exterior, debemos emplear un truco.
Existe una página web que permite hacer esto: http://anonymouse.org/anonwww.html
Aunque inserta un pequeño anuncio funciona perfectamente.
Otra forma utilizar nuestro móvil con conexión a internet, pero claro gastaremos datos.

Para los que no tengan dominio y quieran experimentar, yo utilizo un subdominio tipo NO-IP.
En mi caso es  http://seta43.duckdns.org/
En la página http://www.duckdns.org/ podéis conseguir el vuestro, funciona bastante bien, además te explican como instalarlo en vuestro servidor para que se actualice la dirección IP dinámica que ha dado el operador.



Saludos
Juan Galaz

Bibliografía:

servi.html
wpa.html
wpb.html
orange.html
https://orangepiweb.es/
http://www.orangepi.org/orangepibbsen/forum.php?gid=38

jueves, 28 de marzo de 2019

Servidor DELL R200

Página principal


Servidor
DELL R200



El otro día vi un anuncio en páginas de segunda mano sobre un servidor DELL R200 por 25€.
La tentación era enorme, nunca había trasteado con equipos servidores en forma de rack.

Imagen interna del equipo DELL R200


R200
1U Rack 2010 Intel 3200 1 LGA 775 Xeon processors 3000
4GB Four unbuffered PC2-5300/6400 (DDR2 667/DDR2 800) ECC SDRAM, 2 channels × 2 sockets 2 × 3.5" non-hot-swap SATA or SAS and 1 × 5.25" removable CD/DVD

El modelo DELL R200 que compré tiene el procesador Xeon X3360 de 4 nucleos.
El vendedor me dijo que se había quitado funcionando, pero claro, por algo se retiraron.
El servidor está configurado con dos discos 250G en modo RAID, controlados por una tarjeta
    Dell YK838 SAS 6IR Controller (Raid 0 or 1) UCS-61 JW065
Lo primero que suelo hacer es comprobar el estado de los discos mirando los datos que proporciona el propio disco con S.M.A.R.T.
Esto suele dar una indicación del uso dado por el servidor.

Los datos ofrecidos por SMART dan un disco en estado de BAD (malo)
El otro disco duro espejo también ofrecen datos parecidos y disco MALO.
De tal forma, que el propio servidor te avisa del estado del disco duro, y hasta que no confirmas este error el servidor no continua.
Esto es una cualidad importante en los servidores, antes de que falle por completo el disco duro te avisa para que lo cambies.
Al estar duplicados los discos duros en forma RAID, cuando fallan los datos en un disco duro, el otro disco duro dispone los mismo datos pero correctos.
El cambio de los discos duros es fácil, no hace falta ningún destornillador, en apenas 5 minutos puedes cambiar los discos duros.

Como solo lo quiero para hacer pruebas y montar un miniservidor, no necesito 2 discos duros en RAID.
Quito la controladora junto con sus cables, y conecto un solo disco duro a la controladora integrada en la placa base.

La controladora retirada.



 Panel posterior.


Panel fontal.

En el panel fronta existe una segunda salida de video VGA para poder conectar un monitor sin tener que desmontar el servidor.
También se puede ver el lector de DVD , salida serie, 2 USB y el boton de encendido.
Existe un botón de acceso a información, y 4 LED que nos muestran algún tipo de problema.
Dispone de dos puertos de RED  de 1 Gigabit, que se pueden configurar en la BIOS.
Al ser ordenador diseñado para ser un servidor, existe multitud de opciones en la BIOS que no formarían parte de un PC normal.
Hay un manual de 180 pag. que explican todas las opciones y configuración.

A modo de prueba instalo un WindowsXP, que se instala sin problemas.
Instalo un segundo sistema operativo, Debian 9.5 , que es con el cual realizo las pruebas de servidor.
Instalo en Linux el servidor  Apache, servidor SSH, MariaDB, PHP y Perl.
También instalo WordPress para hacer todo tipo de pruebas.
Para el control en remoto instalo X11vnc, y para actualizar las páginas web el servidor ftpd.
Con todos los programas anteriormente instalados y configurados, ya no hace falta tener conectado el monitor, teclado y ratón.

El funcionamiento del R200 es bastante bueno, el único pero que encuentro es el ruido que hacen los ventiladores.
Cuando arranca desde el pulsador de encendido o cuando se alimenta por primera vez,  parecen los ventiladores  de un avión, solo dura 3 segundos.
En funcionamiento normal, el ruido de los ventiladores se hace notar. Lo mas curioso es que aunque esté apagado con alimentación, los ventiladores siguen funcionando.

Para hacer una prueba de la potencia de del procesador Xeon de 4 núcleos, codifiqué una película con el programa HandBrake.

Comparación del AMD A6 frente al Xeon.

La ejecución del programa se realizó en remoto mediante la orden:
    ssh -X -p 22 seta@192.168.1.60 ghb
Es una foma bastante más rápida que utilizar  VNC.
La comparación es de 169 fps en el A6 frente a los 273 fps en el Xeon.

Existe una utilidad en Apache tools para testear el servidor.
Con la orden: ab -c 5 -t 60 http://192.168.1.60/  chequeamos la velocidad del servidor apache.
Petición desde HP A6_5400 hacia DELL R200 Petición desde HP A6_5400 hacia HP A6_5400
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.60
Server Port:            80

Document Path:          /
Document Length:        1112 bytes

Concurrency Level:      5
Time taken for tests:   4.606 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      69200000 bytes
HTML transferred:       55600000 bytes
Requests per second:    10855.19 [#/sec] (mean)
Time per request:       0.461 [ms] (mean)
Time per request:       0.092 [ms] (mean, across all concurrent requests)
Transfer rate:          14671.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       4
Processing:     0    0   0.1      0       4
Waiting:        0    0   0.1      0       4
Total:          0    0   0.1      0       4
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.120
Server Port:            80

Document Path:          /
Document Length:        1215 bytes

Concurrency Level:      5
Time taken for tests:   6.785 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      74350000 bytes
HTML transferred:       60750000 bytes
Requests per second:    7368.79 [#/sec] (mean)
Time per request:       0.679 [ms] (mean)
Time per request:       0.136 [ms] (mean, across all concurrent requests)
Transfer rate:          10700.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:     0    0   0.3      0       7
Waiting:        0    0   0.2      0       7
Total:          0    1   0.3      1       7
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.60
Server Port:            80

Document Path:          /myblog2
Document Length:        314 bytes

Concurrency Level:      5
Time taken for tests:   3.966 seconds
Complete requests:      50000
Failed requests:        0
Non-2xx responses:      50000
Total transferred:      27100000 bytes
HTML transferred:       15700000 bytes
Requests per second:    12607.66 [#/sec] (mean)
Time per request:       0.397 [ms] (mean)
Time per request:       0.079 [ms] (mean, across all concurrent requests)
Transfer rate:          6673.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0      33
Processing:     0    0   0.2      0      33
Waiting:        0    0   0.2      0      33
Total:          0    0   0.4      0      33
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.120
Server Port:            80

Document Path:          /myblog
Document Length:        315 bytes

Concurrency Level:      5
Time taken for tests:   6.444 seconds
Complete requests:      50000
Failed requests:        0
Non-2xx responses:      50000
Total transferred:      27150000 bytes
HTML transferred:       15750000 bytes
Requests per second:    7759.65 [#/sec] (mean)
Time per request:       0.644 [ms] (mean)
Time per request:       0.129 [ms] (mean, across all concurrent requests)
Transfer rate:          4114.74 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       3
Processing:     0    0   0.2      0      10
Waiting:        0    0   0.2      0       9
Total:          0    1   0.2      1      10


Petición desde R200 hacia  R200 Petición desde R200 hacia HP A6_5400
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.60
Server Port:            80

Document Path:          /
Document Length:        1112 bytes

Concurrency Level:      5
Time taken for tests:   2.949 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      69200000 bytes
HTML transferred:       55600000 bytes
Requests per second:    16953.36 [#/sec] (mean)
Time per request:       0.295 [ms] (mean)
Time per request:       0.059 [ms] (mean, across all concurrent requests)
Transfer rate:          22913.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       1
Processing:     0    0   0.0      0       2
Waiting:        0    0   0.0      0       2
Total:          0    0   0.0      0       2
Server Software:        Apache/2.4.25
Server Hostname:        192.168.1.120
Server Port:            80

Document Path:          /
Document Length:        1215 bytes

Concurrency Level:      5
Time taken for tests:   5.304 seconds
Complete requests:      50000
Failed requests:        0
Total transferred:      74350000 bytes
HTML transferred:       60750000 bytes
Requests per second:    9427.30 [#/sec] (mean)
Time per request:       0.530 [ms] (mean)
Time per request:       0.106 [ms] (mean, across all concurrent requests)
Transfer rate:          13689.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       1
Processing:     0    0   0.2      0      11
Waiting:        0    0   0.2      0       8
Total:          0    1   0.2      0      11
En esta comparativa se puede ver la diferencia entre un servidor y un PC normal


Consumo del R200 comparándolo con otros dispositivos.


Como podemos observar el costo anual llega a los 90€, por lo que debemos sopesar si nos interesa para un servidor doméstico.
Para un servidor doméstico nos podría servir un ordenador HP con procesador A6, suficiente para instalar servidores de páginas web tanto estáticas como dinámicas, y que apenas mete ruido ni se calienta, consumiendo la mitad.
Si solo tenemos páginas estaticas nos puede servir un router  retirado, o una raspberry. Lo cual nos produciría un ahorro importante de energía y como consecuencia de dinero.
Os recomiento esta página de Vicente Navarro donde explica las formas y costes de montar un servidor. Es un poco antigua pero nos ayudará a tener una idea de los problemas y necesidades.
http://www.vicente-navarro.com/blog/2008/03/09/hosting-casero-howto/

Esta claro que el servidor DELL R200 está especializado en servir de forma segura al disponer de dos discos duros conectados en RAID.
Por lo que se puede emplear en llevar varios servicios de páginas a nivel profesional.



Saludos
Juan Galaz

Bibliografía:

http://www.vicente-navarro.com/blog/2008/03/09/hosting-casero-howto/

martes, 26 de marzo de 2019

Ajustes 2 - WORDPRESS - Debian 9


Página principal

Ajustes 2

 WORDPRESS

 Debian 9


Continuando con mi anterior artículo de como instalar WordPress en Debian 9, y después de la primera configuración, continuamos con mas ajustes.
Si tenemos un ordenador con pantalla y teclado no existe este paso, es solo para lo que tengan solo la caja a modo de servidor.
Lo primero es tener un servidor ftp para poder cambiar o actualizar la página web.
Yo he elegido ftpd, es sencillo y no debéis configurar nada, con usuario y contraseña entramos en nuestro servidor.
Recordemos que el ftp no es el mas seguro, manda las contraseñas sin codificar, por lo cual cualquier escuchador de red puede verlas.

Cuando instalamos el servidor, también instalamos el servidor ssh. Este protocolo es bastante seguro estas codificados los datos que se mandan entre el servidor y cliente. Además yo lo utilizo para meterme en la consola y configurar el servidor, es bastante mas rápido que hacerlo con VNC.
También permite ejecutar una aplicación gráfica en el servidor en modo remoto, desde el cliente. Es curioso ver lo bien que trabaja y el poco ancho de banda que ocupa.
ssh -X -p 22 seta@192.168.1.60  mousepad /var/www/html/wordpress/wp-config.php

Ejecución de una aplicación gráfica en el servidor.

Como última opción de manejar el ordenador de forma remota es mediante VNC.
Existen bastantes servidores del protocolo VNC, yo he elegido  x11vnc, es sencillo y con una configuración sencilla.
Desde consola indicamos la contraseña del servidor de escritorio remoto.     x11vnc  -storepasswd
Para lanzar el servidor desde consola ,    x11vnc -forever -usepw -display :0 -ultrafilexfer
Lo que hago es que se inicie un usuario automáticamente, y en programas de arranque automático, añado el comando anterior.
Como cliente de escritorio remoto se puede utilizar cualquiera de los muchos que existen, yo utilizo Vinagre.



Empecemos con lo que realmente es el título del artículo, ajustes de WordPress.
Repetimos la serie de pasos para la instalación de WordPress.
=======================================
Nombre base de datos - wordpress0
Usuario              - seta'@'localhost
Contraseña           - murcielago

Esto no es necesario si solo existe una base de datos para varias instalaciones de wordpress
prefijo_tabla wp_1
=======================================

En ROJO como root.
mysql -u root -p
    CREATE DATABASE wordpress0 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    GRANT ALL PRIVILEGES ON wordpress0.* TO 'seta'@'localhost';
    CREATE USER 'seta'@'localhost' identified by 'murcielago';
    FLUSH PRIVILEGES;
    exit
usermod -a -G www-data seta
Descargamos de la página de WordPress la versión que queramos.
tar -xzf wordpress-4.1.26-es_ES.tar.gz
mv  wordpress myblog2
mv myblog2 /var/www/html/
chmod ugo+rw /var/www/html/myblog2/wp-content
chmod ugo+rw /var/www/html/myblog2

cp /var/www/html/myblog2/wp-config-sample.php  /var/www/html/myblog2/wp-config.php
nano /var/www/html/myblog2/wp-config.php

config.php
==========
/** El nombre de tu base de datos de WordPress */
define('DB_NAME', 'wordpress1');

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'seta');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'murcielago');

/** Host de MySQL (es muy probable que no necesites cambiarlo) */
define('DB_HOST', 'localhost');

* Cambia el prefijo si deseas instalar multiples blogs en una sola base de datos.
 * Emplea solo números, letras y guión bajo.
 */
$table_prefix  = 'wp_1';

PHP viene configurado para no poder subir ficheros de mas de 2M.
Para cambiar esto debemos cambiar su configuración.
Por ejemplo, si está corriendo bajo Apache la ruta probablemente sea /etc/php5/apache2/php.ini y en el caso de CGI sería /etc/cgi/apache2/php.ini .
Las variables que habría que modificar para aumentar el límite serían las siguientes:

upload_max_filesize = 2M
post_max_size = 8

Podemos modificar también estos valores si no ocurre algún error.
memory_limit = 64M; //Para aumentar el limite de memoria
max_execution_time = 7200; //Aumentar el tiempo de espera
upload_max_filesize = 20M; //aumentar tamaño permitido de archivos a subir
post_max_size = 20M; //aumentar tamaño de post

Si habéis utilizado o instalado WordPress en una red interna, habréis detectado que tarda mucho en cargar las páginas buscando unas fuentes llamadas google-fonts .
Esto no lo he entendido nunca, pero es lo que hay. Buscando por internet, encontré un Plugins que deshabilitaba esto.
Este plugins se llama disable-google-fonts , vereís que ahora todo funciona bastante fluido.

Para instalar los famosos plugins existe en el menú de configuración la opción de instalar plugins.
Pero se necesita usuario y contraseña de ftp, y resulta que solo funciona si WordPress se encuentra instalado en el directorio con nombre wordpress, o eso me pasa a mi.
La solución que he encontrado es descargar el plugins en formato zip y descomprimirlo en /var/www/html/myblog2/wp-content/plugins.
Ahora solo debemos activarlos desde el menú de plugins.
Mis plugins favoritos que instalo siempre son:
chat.1.0.8.2.zip
disable-google-fonts.2.0.zip
wordpress-importer.0.6.1.zip


Saludos
Juan

Bibliografía:
https://linuxconfig.org/how-to-install-wordpress-on-debian-9-stretch-linux#h1-objective
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-lamp-on-debian-9
https://www.howtoforge.com/tutorial/install-wordpress-5-with-apache-on-debian-9/
https://chachocool.com/como-instalar-wordpress-en-linux/
https://www.linuxtotal.com.mx/index.php?cont=info__tips_018