29 de agosto de 2016

Estación meteorológica ONLINE ARDUINO.

Tras varios día de estudio, investigación y programación he diseñado una simple estación meteorológica que espero que os guste. Envía datos desde un ARDUINO UNO con tarjeta ETHERNET a través de la red y, otro servidor web, es capaz de ejecutar una aplicación para leer y tratar los datos. 

  1. Información en Google Drive
  2. Programas en Github.

8 de agosto de 2016

14. Moodle en la Raspberry Pi. Lentitud del sistema.

No sé demasiado sobre el tema. Simplemente iré hilando ideas tras leer en la web páginas en las que se habla del mismo.

Al parecer hay dos cuellos de botella con la Raspberry Pi. El primero es la velocidad de transferencia de datos almacenados (ya que no es lo mismo el acceso a una tarjeta microSD que a un disco duro), y el segundo puede ser la velocidad de la tarjeta ethernet, que es una 10/100 no una Gigabit.

La tarjeta microSD es una kingston 64GB clase 10 UHS-1, con 45MB/s de lectura y 10MB/s de escritura según el fabricante.  Comparado con:
  1. Disco duro HDD: hago la prueba con el disco duro del ordenador que estoy usando, que es una unidad de 160GB SATA. Usando el comando hdparm de Ubuntu, tenemos una velocidad de lectura de unos 63MB/s. La prueba de velocidad de escritura me da 51,9MB/s.
  2. Disco SSD: en mi ordenador de torre personal tengo una unidad SSD en la que, midiendo tengo una velocidad de lectura de 313 MB/s y de escritura de 343 MB/s.
  3. En el servidor, microSD: la velocidad de lectura es casi fija en 13,59MB/s y la velocidad de escritura arroja un resultado de 8,6MB/s. 
En esta página parece que puede mejorarse la transferencia con un overclocking (cuidado con la pérdida de datos): http://www.jeffgeerling.com/blog/2016/how-overclock-microsd-card-reader-on-raspberry-pi-3
En esta otra se habla de una comparativa de tarjetas y de velocidades medidas. http://www.jeffgeerling.com/blogs/jeff-geerling/raspberry-pi-microsd-card. En ella puede observarse que la tarjeta análoga, de la misma marca (Kingston clase 10 16GB) tiene un rendimiento algo mayor que la nuestra de 64GB. La que parece mejor documentada (y explica por qué los rendimientos teóricos no son comparables a la comunicación en la raspberry).

Otra página que habla como tener una tarjeta Gigabit con una Raspberry: http://www.jeffgeerling.com/blogs/jeff-geerling/getting-gigabit-networking
Conclusión: ¿es posible mejorar el acceso y la velocidad? Creo que, por este orden, habría que hacer:
  1. Mejorar el rendimiento del software. Implicaría una configuración quizás diferente, con un servidor web más ligero, con un php más eficiente. Habría que seguir los paso de la web: https://moopi.uk/ y/o https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04 ... Y otra web: https://www.howtoforge.com/tutorial/installing-nginx-with-php7-fpm-and-mysql-on-ubuntu-16.04-lts-lemp/
  2. Comprar una tarjeta de mejores prestaciones: OWC Envoy SSD 64GB, SanDisk Ultra Fit32GB... Si son ciertas las informaciones de las páginas web anteriores, deberíamos mejorar casi al doble el rendimiento de la Raspberry para este propósito. 
  3. Atreverse a hacer un overclocking, pero salvaguardar los datos con una imagen antes.
Esperemos que en un futuro las prestaciones de una tarjeta como Raspberry alcancen las mínimas para montar este y otros servicios en red, como NAS, por ejemplo. Para ello deberían contar con un dispositivo I/O SATA dedicado (http://www.mikronauts.com/raspberry-pi/how-can-i-add-a-sata-hard-drive-to-a-raspberry-pi-2/)

En esta otra página hablan de una tarjeta de expansión, la X300, que tiene una conexión SATA: http://www.suptronics.com/xseries/x300.html. ¿Podrá ser esa una solución? En ese caso conectaríamos un disco duro al sistema con quizás su propia alimentación.
 

7 de agosto de 2016

13. Moodle en la Raspberry PI. Tareas de cron.

En el manual de Instalación rápida de Moodle, puede leerse que no debemos olvidarnos de ejecutar frecuentemente el fichero cron.php. (¡¡Nos aconsejan cada minuto??). Este fichero pone en marchas procesos de limpieza, sincronización, comprobación de actualizaciones, etc., y su ejecución permite que tengamos Moodle optimizado.

Desde un terminal (como administrador) se ejecuta el cron de Moodle fácilmente con la orden: /usr/bin/php /var/www/html/moodle31/admin/cli/cron.php. Sin embargo, como tenemos que ejecutarlo repetidamente, lo mejor es usar la utilidad crontab para que nuestro servidor lo haga automáticamente. Crontab es el "demonio" de Linux que ejecuta tareas automáticas programadas según entradas de hora y fecha (ver manual de uso de crontab).

Yo no voy a ejecutarlo cada minuto... Aún hay que resolver los problemas de lentitud del sistema y no quiero que esté constantemente ejecutándose esa orden. Lo haré una vez al día, además, cuando presuma que nadie está usando el servidor (tened en cuenta que se supone que un servidor siempre está encendido). Así que mi opción es ejecutarlo a las 3:30 de la madrugada. Mi tarea de cron es:

30 3 * * * /usr/bin/php /var/www/html/moodle31/admin/cli/cron.php

Minuto 30, hora 3, los demás asteriscos significan que cualquier día, y después, el comando. Antes del comando también se puede poner el usuario que lo ejecuta root, quedando como 30 3 * * * root /usr/bin/php /var/www/html/moodle31/admin/cli/cron.php

Una vez activado, podemos estar seguros que nuestro Moodle se encontrará siempre (en mi caso día tras día... :-) ) optimizado.




12. Moodle en la Raspberry PI. Instalación y Configuración de Moodle

La instalación de Moodle, en general, al menos por el método que he elegido, ha resultado ser lenta y tediosa, lo cual me hace pensar que: primero, es posible que Moodle, al menos en la instalación que estoy haciendo, sea muy lento con la Raspberry (más adelante intentaré explicar la causas de esta lentitud) y, segundo, que la instalación que estoy llevando a cabo está muy alejada de la óptima, con lo cual habría que optar por buscar más información por internet e intentar realizar una instalación optimizada. En fin, siempre habrá tiempo para hacer esto último.

Comentaros que en las instrucciones que siguen el proceso lo he llevado a cabo dos veces; el primero, incompleto, sirvió para darme cuenta que sería bueno instalar unos módulos de php recomendados y, el segundo, el definitivo, se demoró toda una noche (en realidad, porque me fui a dormir y lo dejé trabajando no sé cuanto tardó el proceso, pero os puedo asegurar que más de 4 horas).

 - - -

Instalando Paquetes recomendados.


Abriendo un terminal en la Raspberry (ya sabéis hacerlo) como administrador, instalé los siguientes paquetes:
  • apt-get install php7.0-intl
  • apt-get install php7.0-xmlrpc
  • apt-get install php7.0-xsl
  • apt-get install php-soap
  • Y que no se os olvide, que a mí me pasó, reiniciar después el sistema o con apache2ctl restart o reboot.


Instalando Moodle: Primera Parte.

Básicamente consiste en elegir el idioma de la instalación, indicarle al sistema qué rutas he elegido como directorio de moodle y de datos e indicar los parámetros de conexión a la base de datos MySQL. El sistema mostraría los paquetes php que le hacen falta y su estado, y empezará el proceso de generación de tablas en la base de datos y demás información en el directorio de instalación y en el directorio de datos.


¿Error instalando? Se demora mucho...

A las tres horas aún no ha terminado de generar las tablas

Instalando Moodle: Segunda Parte.

Una vez generada la información que le hace falta a Moodle, el sistema pide los datos del administrador. Es importante elegir un correo electrónico adecuado y una contraseña segura que deberá conservarse (el nivel de seguridad de la contraseña puede cambiarse/modificarse después). A continuación, pide información general para mostrar en Moodle, como el nombre del sitio, por ejemplo, y se accede , por fin, a la primera página, de administración.



Una vez el sistema instalado, en el próximo acceso , sólo tendré que escribir en el navegador http://192.168.1.30/moodle31 (o el nombre que pusiste en la carpeta moodle, u otro), y tras solicitar usuario y contraseña, se accede. 

Y ya podemos dar por concluido el proceso de instalación. A partir de ahora el trabajo se reduce al del administrador de Moodle: configuración del sitio. Pueden hacerse muchas cosas: fundamental, la creación o subida de cursos y la gestión de usuarios,  pero también mejorar el aspecto del sitio, la configuración de una cuenta de correo de envío SMTP, ajuste de parámetros de administración como por ejemplo el nivel de seguridad de las contraseñas, etc.

Por ejemplo, podéis encontrar más información en:


5 de agosto de 2016

11. Moodle en la Raspberry PI. Primeros pasos.

Toda la información de este post se muestra en el vídeo: 



Una guía general para la instalación (https://moodle.org/) se puede encontrar en la página https://docs.moodle.org/31/en/Installation_quick_guide#Basic_Requirements.

Sin embargo, no todos los pasos son absolutamente necesarios hacerlos de esa forma; algunos pueden simplificarse con las herramientas que ya hemos instalado.

Si has seguido las indicaciones de los post anteriores, la configuración de PHP, Apache y MySQL estará completada.
  1. De la página de descargas bájate el fichero ZIP de la última versión estable (en mi caso la 3.1.1). Guárdalo en tu ordenador cliente.
  2. Crea una base de datos entrando en PHPMYADMIN (http://192.168.1.30/phpmyadmin). Yo la he llamado bdmoodle31. Acuérdate del nombre... Si no tienes phpmyadmin puedes, alternativamente, crear la BD como te dice la guía de instalación accediendo a MySQL directamente a través de un terminal.
  3. Crea desde webmin el siguiente directorio /var/moodledata31. Desde el gestor de ficheros de webmin (icono chmod) selecciona la carpeta y dale permisos de escritura/lectura/ejecución para todos (permiso 0777). Si es necesario, Moodle avisará después, durante la instalación, del cambio de permisos que necesita. Observa que este directorio está fuera del directorio público del servidor /var/www/html.
  4. Entra en /var/www/html/ con webmin y sube el fichero zip que descargaste antes en tu ordenador. Descomprímelo. Creará en la raíz una carpeta llamada moodle (si quieres cámbiale el nombre a la carpeta, por ejemplo a moodle31).
  5. Aunque en la instalación habla de permisos, vamos a dejarlo. En la configuración de la instalación, si existen errores, te lo irá indicando sobre la marcha.
  6. Ejecuta en el navegador http://192.168.1.30/moodle (o si cambiaste el nombre de la carpeta /[nombrequepusiste]). Saldrá la página de instalación.
  7. Cambia el idioma a español internacional. Siguiente.
  8. En la siguiente página indica qué extensiones de php faltan. En concreto averiguamos que faltan php-curl y php7.0-zip. Cierra todo lo que estés haciendo, abre un terminal en el servidor (con ssh o directamente en el servidor) y ejecuta los comandos apt-get install php-curl y apt-get install php7.0-zip. Reinicia con apache2ctl restart ...o... reboot. NOTA: es posible que, más adelante, para instalar algo específico hagan falta más paquetes de php que se instalarían de la misma manera.
  9. Comprueba que esa segunda página ya no sale cargando otra vez desde el navegador http://192.168.1.30/moodle. 
  10. Dejamos los siguientes pasos para el siguiente post.

10. Moodle en la Raspberry PI 3. Configuración de php.ini

Toda la información de este post puedes encontrarla en vídeo.


Antes que nada indicar que intentaré instalar Moodle de la misma forma que lo hice en mi otro servidor, que os recuerdo que es un HP Proliant. Ambos tienen 1GB de RAM y unos 65GB de espacio disponible (el primero con discos SCSI y el segundo con una microSD Clase 10) , y, si acaso en mi HP Proliant la velocidad de 3.00GHz mientras que la Raspberry Pi 3 tiene 1.2GHz. Si existen problemas derivados de la diferencia de configuración, los resolveré sobre la marcha o, en su caso, daremos marcha atrás e intentaré la instalación de otra forma, quizás siguiendo las indicaciones de páginas como https://moopi.uk/

Para transferir al servidor ficheros grandes puedo usar FTP. Eso me servirá para cargar paquetes de instalación, contenidos, etc. Los paquetes de instalación pueden cargarse al servidor mediante otros métodos, con wget, con git, etc. Pero hay una circunstancia de carga en la que se usará PHP en particular: dentro de Moodle para subir copias de cursos al mismo. Los cursos son ficheros que pueden ocupar varios megas y, lo habitual, es que PHP no esté habilitado para cargar ficheros muy grandes, así que vamos a permitírselo.

La configuración de PHP viene en un fichero php.ini del que, además, podemos encontrar varias copias distintas en diversas rutas de la instalación (si no, ejecuta el comando whereis php.ini). Tengo que encontrar cuál es el que está usando PHP y donde está. Para ello, en la ruta del servidor /var/www/html crea un fichero phpini.php con el siguiente contenido:


Una vez guardado, ejecuta en el navegador la dirección 192.168.1.30/phpini.php (Recuerda: 192.168.1.30 es mi dirección IP de ejemplo; tú puede que la hayas cambiado. Lee los posts anteriores) , y saldrá una información como...:


En esta página, en la primera línea, aparece la ruta completa al fichero php.ini activo; en mi caso /etc/php/7.0/apache2/php.ini o en la línea de la tabla Loaded Configuration File. Como podréis comprobar este pequeño script muestra la información de todos los parámetros de PHP. 

Si usas Mozilla-Firefox con la tecla CTRL+F accedes a las opciones de búsqueda. Busca los parámetros post_max_size, upload_max_filesize y memory_limit. Comprobarás que no superan los 8MB (8M). Necesito que estos parámetros sean mayores, de 256M.

- - - 

Para cambiarlos sigue los siguientes pasos:
  1. Entra en la webmin del servidor. https://192.168.1.30:10000
  2. Accede con el usuario y contraseña administrador.
  3. En Others (otros), escoge File Manager o Java File Manager (Gestor de archivos o gestor de archivos Java).
  4. Entra en la ruta /etc/php/7.0/apache2 y localiza el fichero php.ini
  5. Haz una copia de este fichero y renómbrala como php_OLD.ini. Si tuvieses algún problema con PHP puedes usar esta copia de nuevo.
  6. Edita el php.ini. Localiza los parámetros anteriores (post_max_size, upload_max_filesize y memory_limit) y cambia sus valores a 256M (los tres). Guarda.
  7. Reinicia el servidor: entra en un terminal como administrador y ejecuta apache2ctl restart. (O bien haz un reboot a la raspberry).
  8. Entra otra vez en la página 192.168.1.30/phpini.php. Localiza los parámetros y comprueba que tienen el nuevo valor de 256M.








4 de agosto de 2016

Listado Raspberry PI

RaspBerry Pi 3 Model B con Ubuntu Server 16.04 Standard


09. Raspberry Pi, Ubuntu Server 16.04. FTP

Es conveniente también usar un servicio FTP; en mi caso usaremos vsftp (very secure ftp). Su utilidad radica en que puedo así subir/bajar ficheros con relativo peso, o muchos en bloque.

Puedo encontrar información en las siguientes webs:
  1. https://xsyscapacitacion.wordpress.com/2012/10/21/pasos-para-configurar-servidor-ftp-en-ubuntu-server/
  2. http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/s1-ftp-vsftpd-conf.html

Los pasos que he dado son los siguientes:
  1. Instalo el servicio apt-get install vsftpd
  2. Hago una copia del fichero de configuración, por si las moscas: cp /etc/vsftpd.conf  /etc/vsftpd.conf.bak
  3. Edito el fichero de configuración: nano /etc/vsftpd.conf 
  4. Después de leer las páginas web, edito el fichero como sigue:
    1. listen=YES
    2. # NO PERMITO EL ACCESO ANONIMO
      anonymous_enable=NO
    3. # PERMITO LA ESCRITURA EN ARCHIVOS
      write_enable=YES
    4. # directorio donde se suben los archivos
      local_root=/home/miusuario/ftp/  (se escribe al final del fichero)
  5. Creo en el servidor una carpeta dentro de /home/miusuario llamada ftp
    1. cd /home/miusuario
    2. mkdir ftp
    3. Cambio permisos para esa carpeta, de escritura/lectura para todos: chown 0777 -Rf /home/miusuario/ftp/
    4. reboot
- - - 

Tras haber configurado el servidor, para que sólo pueda entrarse con las contraseñas y usuarios ya creados en Ubuntu Server , la carpeta donde nos loguearemos para subir o bajar ficheros directamente es la que hemos creado. 

Ahora, en nuestro ordenador cliente tan sólo deberemos instalar un cliente de ftp, como filezilla, y configurarlo como SFTP (secure FTP - puerto 22) con los parámetros de conexión conocidos: IP: 192.168.1.30, usuario y contraseña la de nuestro servidor. La primera vez que se conecte por SSH pide una confirmación.

  1. Para instalar filezilla: apt-get install filezilla
  2. Tutorial de filezilla: https://wiki.filezilla-project.org/FileZilla_Client_Tutorial_(es)

08. Raspberry Pi, Ubuntu Server 16.04. SSH e instalación de webmin.

Ya en una anterior entrada comentamos que nuestro servidor lo manejaríamos desde otro ordenador. Ese otro ordenador, en mi caso, tendrá instalado una versión de Linux (Ubuntu). A partir de ahora lo llamaré "cliente".

De dos formas:

Conexión SSH.

Cuando instalamos el LAMP server, avisamos si estaba marcado el OpenSSH Server. El protocolo SSH permite conexiones seguras entre dos ordenadores. Así que si en mi ordenador cliente abro un terminal (aplicaciones >> herramientas del sistema >> terminal):

  1. Accedo como root o administrador en mi ordenador cliente.
  2. Escribo la orden ssh -p22 nombredeusuario@192.168.1.30 , cambiando, lógicamente, el nombredeusuario por el que tengamos en el servidor.
  3. Accedemos a una terminal como si fuese la del servidor. Observa que cambia el nombre al nombre del servidor que le pusimos. Puede que tengas que confirmar primero, la primera vez, que quieres conectarte.
  4. Para ejecutar comandos en esta terminal en el servidor, todavía tienes que loguearte como administrador en él. Ya sabes... sudo bash. Sí, muchas órdenes y contraseñas, pero funciona.

Instalando webmin


Webmin es una aplicación web que instalamos en nuestro servidor y permite su control completo de forma remota y gráfica. Para instalarla en el servidor accedemos a un terminal (ya sabemos que podemos hacerlo directamente o bien de forma remota desde un cliente con ssh).

  1. Seguir los pasos de este post: https://www.digitalocean.com/community/tutorials/how-to-install-webmin-with-ssl-on-ubuntu-14-04
  2. Y ya, desde el cliente, podemos acceder a ella escribiendo en la barra de direcciones de un navegador https://192.168.1.30:10000 (Importante , protocolo https no http).
  3. Webmin permite controlar servicios, actualizar paquetes, y lo que es más importante: controlar los archivos. Para ingresar en él, escribir el usuario y contraseña de acceso al servidor.
  4. Es importante, en el ordenador cliente, tener actualizado el plugin de Java, y aún más importante, darle permisos en el ControlPanel de Java a la dirección https://192.168.1.30:10000.  Desgraciadamente, el plugin de Java tiene un nivel de seguridad muy alto por defecto y pregunta constantemente si estas seguro que se puede acceder. 



07. Raspberry Pi, Ubuntu Server 16.04. Apagar mi servidor Raspberry Pi

Para apagar mi servidor solamente tengo que ejecutar, como administrador, la orden shutdown -h now.

Recuerdo que para reiniciar simplemente reboot.