miércoles, 19 de junio de 2019

Raspbian Lite Setup

Hello everyone, today we are going to install and configure Raspbian Lite.

For hardware you can install this it in whatever you want, but keep in mind that this OS is optimized for Raspberry Pi products and that 4GB of storage are recommended.
I'll be using a Raspberry Pi Zero W. With this out of the way let's get to the fun part.

After installing Raspbian Lite form the RaspberryPi download page, next flash the image to the SD card. If you don't know how to do this here is another article on how to do it.

Once that's done, open the new disc you have on your computer and add a new file with no extension named ssh, all lower case, to later enable SSH.

Now, for the people using a device that doesn't have a Ethernet port, and can't or don't want to use a screen, you'll have to create a new file named wpa_supplicant.conf and paste this code, remember to change the country, name and password according to the wifi network you want to use.


 country=US  
 ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev  
 update_config=1  
 network={  
     scan_ssid=1  
     ssid="the_2.4-hz-wireless-network"  
     psk="the_2.4-hz-wireless-network_password"  
     proto=WPA  
     key_mgmt=WPA-PSK   
 }  

Place the microSD card on you device and power it.

Now SSH to your device. If you don't know how we also have a tutorial for that here.

Username: pi
Password: raspberry
To change the default password write on the console passwd

To set a static ip type: sudo nano /etc/dhcpcd.conf and paste at the bottom
 interface wlan0  
 static ip_address=192.168.1.12/24  
 static routers=192.168.1.1  
 static domain_name_servers=192.168.1.1 8.8.8.8  
In this example it will only apply if your connected by WiFi, for Ethernet use eth0 instead of wlan0

And for more settings type on your console sudo raspi-config.

A video I made explaining the process:

domingo, 16 de junio de 2019

Separador de miles con punto y coma decimal en Python

Pyhton es una herramienta estupenda para realizar cálculos pero se muestran en pantalla sin separador de miles y con el uso del punto como separador de decimales. Nos gustaría que las cifras se mostraran de la forma en la que estamos acostumbrados en español, esto es, usando el punto como separador de miles y la coma como separador de decimales.

Con el siguiente código podremos conseguir nuestro objetivo.

 a=1234.576  
 print(a)  
 b=round(a,2)  
 print(b)  
 print("{:,}".format(b))  
 print("{:,}".format(b).replace(',','~').replace('.',',').replace('~','.'))  

Resultado en pantalla.


Puede ver el código corriendo en el siguiente enlace.

Primero creamos la variable a con el valor 1234.576 y la imprimimos por pantalla. Vemos que no lleva separador de miles y que los decimales se separan con punto.

Luego creamos la variable b redondeando la variable a usando dos decimales e imprimimos la variable b. Seguimos sin separador de miles.

Ahora imprimimos la variable b haciéndola pasar por el comando format con ello conseguimos que ya tenga separador de miles. Lo que vemos es 1,234.58 que es perfectamente correcto para un anglosajón, pero en español lo que utilizamos es el punto como separador de miles y la coma como separador de decimales.

En la última línea de código lo que hacemos es utilizar el comando replace para conseguir cambiar los puntos por comas y las comas por puntos. Se ha de utilizar replace tres veces usando un caracter arbitrario, en nuestro caso hemos usado el caracter ~.

El motivo por el que usamos tres veces el comando replace se debe a que la primera vez cambiamos las comas por ese caracter arbitrario ~, la segunda vez cambiamos los puntos por comas, y la tercera vez cambiamos el caracter arbitrario ~ por puntos.

Si en lugar de ese caracter arbitrario desa poner otro caracter como una x tambien funcionará. La última línea quedaría así.

print("{:,}".format(b).replace(',','x').replace('.',',').replace('x','.'))

Con esto hemos solucionado el inconveniente que tenemos en España y otros paises Latinoamericanos, ya que no todo el mundo usa los separadores habituales del idioma inglés. Si te ha resultado útil puedes dejar en los comentarios tu experiencia.

domingo, 9 de junio de 2019

Raspberry Pi instalación de Wordpress

Este artículo forma parte de una serie que nos conducirá a configurar una Raspberry Pi hasta llegar a tener instalada en ella un servidor web con base de datos y PHP como lenguaje. Los artículos de la serie son los siguientes.
  1. Raspberry Pi instalación y puesta en marcha
  2. Raspberry Pi primeros pasos
  3. Raspberry Pi instalación de Apache + PHP + MySQL
  4. Raspberry Pi instalación de Wordpress   ← (es el post en el que estamos)
Trabajaremos desde la consola utilizando la línea de comandos ya que la instalación que hemos realizado no ha cargado las xWindows. No disponemos de interfaz gráfica y por lo tanto el ratón no lo utilizaremos.

Instalar WordPress

cd /var/www/html/
sudo rm *    WARNING!!!! Este comando borrará todos los archivos en este directorio
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz


Ahora si deseamos ver el árbol de directorios instalaremos el comando tree y luego lo utilizaremos.
Si vemos lo mismo que en la captura de abajo es que todo está instalado correctamente
sudo apt-get install tree
tree -L 1




Puedes ver que hay un archivo index.php, si abres tu localhost, o pones localhost/wp-admin/setup-config.php, veras que WordPress ya funciona.

Configurar la base de datos para  WordPress

sudo mysql -u root -p

Ahora te pedirá tu contraseña de MariaDB.
Una vez estamos dentro de la consola de MariaDB:

create database wordpress;

Creamos un usuario para que WordPress pueda usar la Base de Datos:

create user nombre_user@localhost identified by 'contraseña'; <-- Mantenemos las comillas de contraseña

Le damos acceso  root a el nuevo usuario:

GRANT ALL PRIVILEGES ON * . * TO nombre_user@localhost;


  • Reemplazamos nombre_user por el nombre que le queremos dar al nuevo usuario de la BD
  • Se puede dejar localhost como está o si se quiere cambiar por la IP interna de nuestra Raspberry Pi, en nuestro caso 192.168.1.11
  • Contraseña se cambia por la contraseña que queramos que use este usuario nuevo manteniendo las comillas, de lo contrario no funcionará

Aplicamos los cambios y cerramos la terminal de MariaDB

FLUSH PRIVILEGES; 
quit

Configuración de WordPress

Ahora volvemos a nuestro navegador y le damos al botón Let's go!
Tenemos que rellenar un formulario con la siguiente información:

Database Name: wordpress
User Name: El nuevo usuario
Password: Su contraseña
Database Host: localhost
Table Prefix: wp_

Si te sale esta pantalla sigue los pasos de aquí abajo, si no continúa con el post.

cd /var/www/html
sudo touch wp-config.txt
sudo nano wp-config.txt


Para los permisos.

sudo chown -R www-data: .

Pulsamos sobre el botón Let's go!


Si todo va bien veremos una ventana que nos da ánimos.


Ahora pulsamos sobre el botón Run the installation.


Después de rellenar los datos que nos piden ya tendremos operativo nuestro sitio en WordPress operando en nuestra Raspberry Pi.


De momento únicamente está operativo desde nuestra red local tecleando la IP de la Raspberry PI que en nuestro caso es 192.168.1.11. Si deseamos que se pueda acceder a la página desde fuera tenemos que haber cambiado los puertos de nuestro router y si nustra IP pública es dinámica también tendremos que haber configurado un sitio como noip.com para que apunte a nuestro router.

Si estos paso se han dado podremos ver la página desde fuera de nuestra red local.

Como vemos la página se llega a mostrar pero de forma incompleta. Esto es posiblemente debido a que nustra Raspberry Pi con su baja potencia no está optimizada para soportar este Wordpress.

viernes, 7 de junio de 2019

Raspberry Pi instalación de Apache + PHP + MySQL

Este artículo forma parte de una serie que nos conducirá a configurar una Raspberry Pi hasta llegar a tener instalada en ella un servidor web con base de datos y PHP como lenguaje. Los artículos de la serie son los siguientes.
  1. Raspberry Pi instalación y puesta en marcha
  2. Raspberry Pi primeros pasos
  3. Raspberry Pi instalación de Apache + PHP + MySQL   ← (es el post en el que estamos)
  4. Raspberry Pi instalación de Wordpress
Trabajaremos desde la consola utilizando la línea de comandos ya que la instalación que hemos realizado no ha cargado las xWindows. No disponemos de interface gráfica y por lo tanto el ratón no lo utilizaremos.


Vamos a instalar LAMP que son las siglas de:
  • Linux   ← es la propia Raspberry Pi con Raspbian
  • Apache   ← es el servidor de páginas web
  • MySQP   ← es la base de datos
  • PHP   ← es el lenguaje de programación web desde el lado del servidor

Apache

Instalar Apache:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2 -y


El modificador -y sirve para evitar estar pulsando Yes en todas las preguntas que nos hagan.

Ir a http://localhost (127.0.0.1) para ver que se ha instalado bien.

Si estamos en una Raspberry Pi que no tiene sistema de ventanas  (no tiene xWindows) y únicamente disponemos de lína de comandos, lo que podemos hacer para ver la web generada y que el servidor Apache funciona bien es ir a otro PC de nuestra red interna y teclear en el navegador la URL interna de nuestra Rasberry Pi. En mi caso teclrearé http://192.168.1.11

Obtendré la siguiente pantalla.


Esta es la prueba de que está funcionando nuestro servidor Apache.

Nota
Si no recuerda la IP de su servidor puede teclear:

hostname -I


Cambiar la página inicial

La página que se sirve inicialmente se llama index.html y se encuentra en el directorio
/var/www/html.

Primero vamos hasta ese directorio.

cd /var/www/html

Alli deberíamos ver el archivo index.html

ls -l



Si no te deja editar el archivo es debido a que no tenemos los permisos necesarios.

Para cambiar los permisos escribimos:

sudo chown -R pi: index.html

Ahora ya podremos editar el archivo, por ejemplo con el editor básico nano.

El inconveniente es que de esta forma el usuario pi únicamente tiene permisos para editar el archivo index.html, pero no podrá escribir sobre ningún otro en ese directorio. Por lo tanto, lo que proponemos es cambiar los permisos para el usuario pi en ese directorio, ejecutando las dos líneas siguientes.

sudo chown -R pi:www-data /var/www
sudo chmod u+rxw,g+rx-w,o-rwx /var/www


Gracias a que ahora el usuario pi ya tiene permisos de escritura en ese directorio podemos optar por otra opción que consiste en renombrar el archivo index.html como index_old.html y crear nuestro propio archivo index.html.

Vamos a renombrar el archivo.

mv index.html index_old.html

Ahora vamos a crear nustro archivo index.html a nuestro gusto.

nano index.html

Estando en el editor escribiremos el siguiente código para un archivo HTML básico que nos mostrará el texto Hola mundo.

 <!DOCTYPE html>  
 <html>  
  <head>  
   <meta charset="utf-8">  
   <title>Página inicial</title>  
  </head>  
  <body>  
   Hola mundo  
  </body>  
 </html>  


Veamos si ha funcionado solicitando nustra página web personalizada. Para ello escribimos en nuestro navegador la dirección IP fija de nuestra Raspberry Pi. En nuestro caso es 192.168.1.11


Instalar PHP

Para instalar PHP escribirmos la siguiente línea en la terminal.

sudo apt-get install php libapache2-mod-php -y

Comprobemos la versión instalada de PHP con el siguiente comando.

php -v

Vamos a renombrar el archivo index.html con la nueva extensión php.

mv index.html index.php

Vamos a editar el nuevo fichero para incluir una línea con código PHP para ver si está funcionando bien.

nano index.php


Ahora el fichero incluirá un script en PHP.

 <!DOCTYPE html>  
 <html>  
  <head>  
   <meta charset="utf-8">  
   <title>Página inicial</title>  
  </head>  
  <body>  
   Hola mundo.<br>  
   <?php  
    echo "Hello world!";  
   ?>  
  </body>  
 </html>  

Para ver el resultado actualicemos en nuestro navegador la página 192.168.1.11


Instalar MySQL

Para instalar la base de datos MySQL tecleamos.

sudo apt-get install mysql-server php-mysql -y
sudo mysql_secure_installation
sudo service apache2 restart


De las anteriores, la segunda línea generará una serie de preguntas para configurar la base de datos MariaDB.








Instalar phpMyAdmin

Tecleamos.

sudo apt install phpmyadmin

Seleccione apache2 como servidor. Para ello seleccione pulsando ESPACIO, muevase con TAB y finalmente valide con ENTER.



Luego ejecute la siguiente línea.

sudo systemctl restart apache2.service

En respuesta a la siguiente pregunta responderemos Aceptar pulsando ESPACIO (la barra espaciadora).


Configurar phpMyAdmin

Editamos el fichero de configuración, para lo cual tecleamos:

sudo nano /etc/apache2/apache2.conf

Dentro del archivo que estamos editando incluir al final la siguiente línea.

 Include /etc/phpmyadmin/apache.conf  

Restart Apache tecleando:

sudo /etc/init.d/apache2 restart

Hacer test en el navegador con una de estas dos opciones.

localhost/phpmyadmin

192.168.1.11/phpmyadmin

Yo he tenido que ejecutar esta segunda línea en el navegador ya que estoy en una sesión SSH conectado de forma remota a mi Raspberry Pi y no he podido usar localhost.


  1. Default user: phpmyadmin
  2. Default password: your mysql password



jueves, 6 de junio de 2019

Raspberry Pi comandos linux básicos

En nuestra Raspberry Pi tenemos instalado el sistema operativo Raspbian que es un Linux basado en Debian. Veamos algunos comandos básicos ejecutados en la terminal mediante línea de comandos.

Abrir y cerrar la terminal usando el teclado


Para abrir la terminal en un sistema Linux tecleamos simultánemante las tres siguientes teclas:

Control+Alt+t

Para cerrar la terminal en Linux tecleamos:

Control+d

Limpiar pantalla

clear

Listar un directorio


Para ver los archivos y carpetas que contiene el directorio en el que estamos se usa el comando:

ls -l


¿Quién soy yo?

Para conocer el usuario que estas usando en linux el comando es whoami.

whoami

Veamos un ejemplo sobre una distribución Manjaro que es un arch linux.



¿Dónde estoy?

Para conocer la ruta en la que me encuentro en este momento, o para conocer la carpeta o directorio donde estoy, se ha de teclear el comando:

pwd

Veamos un ejemplo en Manjaro linux.


Si en el prompt vemos el símbolo ~ indica que nos encontramos en el directorio home/usuario que es nuestro directorio personal.


Crear y eliminar un directorio

Vamos a crear un directorio con el comando:

mkdir nombre_del_directorio

Podemos ir a un directorio con:

cd nombre_del_directorio

Podemos regrasar al directorio anterior con:

cd ..

Podemos eliminar un directorio o carpeta con:

rm -r nombre_del_directorio


El parámetro -r es para añadir recursividad, por lo que eliminará directorios dentro de directorios, con la profundidad que sea.

En ocasiones no tenemos permisos para poder eliminar archivos o directorios en ese caso si queremos borar un directorio rebelde teclearemos una de las dos siguientes opciones. Es posible que con la primera sea suficiente.

  • sudo rm -rf directoriorebelde

  • sudo rm -rf 982899 directoriorebelde

El parámetro f evitará que tengamos que estar respondiendo y (yes) todo el rato si hay varios.


Si lo que deseamos es eliminar un archivo lo podemos hacerlo con:

rm nombre_del_archivo


Podemos salir de la terminal con el comando:

exit

Movernos por el arbol de directorios

Podemos movernos por el arbol de directorios usando cd. Para ir al directorio superior:
cd ..

Para ir al directorio raiz:
cd /


Renombrar un fichero o un directorio

Podemos utilizar rv que sirve para renombrar un archivo o un directorio.

mv nombre_viejo nombre_nuevo



Mover un archivo

Utilizaremos el comando mv que es la abreviatura de move. Con la siguiente línea moveremos un archivo al directorio superior.

mv nombre_archivo ../nombre_archivo

Deseamos mover el archivo info.old a un directorio superior.


¿Qué versión de Python 3 tengo?

En la terminal de linux teclea la siguiente línea de comandos.

python3 --version



El árbol de directorios

El comando tree no está disponible por defecto en la mayoría de las distribuciones de Linux, es necesario instalarlo. En nuestro caso por usar Manjaro que está basado en arch linux la forma de instalarlo es con la siguiente línea de comandos:

sudo pacman -S tree          # en arch linux
sudo apt-get install tree    # en Ubuntu
sudo aptitude install tree   # en Debian



Al ejecutar el comando veremos el arbor de directorios de nuestro sistema linux. También pueden ser útiles los siguientes parámetros.

tree -d     # Muestra sólo directorios
tree -L X   # Muestra hasta X directorios de profundidad
tree -f     # Muestra los archivos con su respectiva ruta
tree -a     # Muestra todos los archivos, incluidos los ocultos.
tree /      # Muestra un árbol de todo nuestro sistema
tree -ugh   # Muestra los ficheros con su respectivo propietario (-u),
              el grupo (-g) y el tamaño de cada archivo (-h)
tree -H . -o tudirectorio.html # Exporta tu árbol de directorio a un archivo HTML

Ver características de la distribución instalada

neofetch

Ver la memoria consumida


Podemos ver la memoria RAM disponible y consumida con el siguiente comando de terminal.
free -h

También podemos ver la memoria de intercambio swap disponible y utilizada.
swapon

miércoles, 5 de junio de 2019

Raspberry Pi primeros pasos

Este artículo forma parte de una serie que nos conducirá a configurar una Raspberry Pi hasta llegar a tener instalada en ella un servidor web con base de datos y PHP como lenguaje. Los artículos de la serie son los siguientes.
  1. Raspberry Pi instalación y puesta en marcha
  2. Raspberry Pi primeros pasos   ← (es el post en el que estamos)
  3. Raspberry Pi instalación de Apache + PHP + MySQL
  4. Raspberry Pi instalación de Wordpress
Trabajaremos desde la consola utilizando la línea de comandos ya que la instalación que hemos realizado no ha cargado las xWindows. No disponemos de interface gráfica y por lo tanto el ratón no lo utilizaremos.

Expandir el sistema de archivos

Expandir el sistema de archivos es lo primero que haremos al tener instalado nustro sistema operativo Raspbian. Lo que hace es aprovechar la capacidad de la micro SD para que el sistema operativo disponga de espacio para poder usar la tarjeta como equivalente a un disco duro donde poder crear y grabar archivos descargados. Si este paso no se realiza es posible que no se esté aprovechando la capacidad completa de la tarjeta micro SD.

Desde la línea de comandos teclearemos.

sudo raspi-config

En la ventana de opciones disponible elegimos la modalidad:

7 Advanced Options    Configure advanced settings

Seguidamente elegimos la opción:

A1 Expand Filesistem   Ensures that all of the SD card storage is available to de OS

Finalmente cuando nos soliciten que rebotemos el sistema diremos que si.

SSH

El protocolo SSH permite que nos podamos conectar de forma remota a nuestra Raspberry Pi. Para habilitarlo teclear en la consola la siguiente línea de comandos.

sudo raspi-config

Elegir la opción:

5 Interfacing Options    Configure connections to pheripherals

Elija la opción:

P2 SSH    Enable/Disable remote command line access to your Pi using SSH

A la pregunta 'Would you like the SSH server to be enabled?' responda afirmativamente.

Y acepte y finalize.

Ahora podrá conectarse a la Raspberry Pi de forma remota. En Windows usando un programa como Putty y en MAC no es necesario ningún programa ya que de forma nativa desde la terminal nos podremos conectar via SSH con nuestra Raspberry Pi. El puerto de conexión por defecto es el puerto 22.

Rebote la Raspberry Pi con sudo reboot y mire la IP asignada por su router haciendo ifconfig. En mi caso he visto que me ha asignaro la IP 192.168.1.64. Esta es la IP que pondremos en Putty con el puerto 22 para entrar de forma remota en nuestra Raspberry Pi.


Conviene cambiar ese puerto para dificultar que puedan acceder a nuestra red desde fuera.

Cambiar el puerto del servicio SSH

Teclee la siguiente línea de comandos.

sudo nano /etc/ssh/sshd_config

Cambie la línea

# port 22

por la línea

port 3022

de esta forma habrá elegido el puerto 3022 o cualquier otro que elija.

Para que el cambio tenga lugar ejecute la siguiente línea.

sudo service ssh restart

Cambiar la contraseña

El usuario es pi y la contraseña por defecto es raspberry. Conviene cambiar la contraseña especialmente si posteriormente necesitamos habilitar el protocolo SSH que nos permitirá conectarnos a nuestra maquina de forma remota. No nos gustaría que otra persona pudiera entrar sabiendo el usuario y la contraseña por defecto que viene en todas las plaquitas.


Para cambiar la contraseña desde la línea de comandos escribiremos lo siguiente.

passwd

A continuación tendremos que introducir la contraseña actual y luego tendremos que introducir la password nueva y volverla a introducir para comprobar. Al escribir la contraseña en el teclado no vemos que se produzcan caracteres en la pantalla. Esto no es error, ya que se ha diseñado de esta forma para mayor seguridad de miradas indiscretas.

Fijar la IP

Es muy frecuente que al conectarnos a un router por cable de red RJ45 o por WiFi el router nos proporcione una dirección IP variable que puede cambiar cada vez que nos desconectemos y volvamos a reiniciar la Raspberry Pi o el propio router.

Lo recomendable es que la dirección IP asignada sea siempre la misma, esto es que sea una IP fija para que cuando nos conectemos a la Raspberry Pi de forma remota no tengamos que estar averiguando en cada ocasión qué IP nos asignó el router en cada ocasión. Al ser fija la IP luego podremos dejar ya establecida ésta en nuestro software de conexión de forma remota con el protocolo SSH.

Para conseguir una IP fija o static IP en una conexión Ethernet (por cable de red) teclearemos lo siguiente.

sudo nano /etc/dhcpcd.conf

Existe un párrafo del documento que debemos sustituir. El parrafo que nos encontraremos será algo similar a esto:

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1


El párrafo anterior debe ser sustituido por el siguiente.

# Example static IP configuration:
interface eth0
static ip_address=192.168.1.11/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8


  • Estamos suponiendo que nuestro router tine como IP de acceso 192.168.1.1 y que hemos asignado a nuestra Raspberry Pi la IP fija 192.168.1.11
  • La conexión que hemos configurado es para usar la conexión Ethernet por cable de red. Si quisiéramos configurar lo para WiFi se cambiaría eth0 por wlan0.
  • Para que tenga efecto rebotamamos nuestra Raspberry Pi con sudo reboot.
  • Finalmente probamos a entrar con Putty usando como IP 192.168.1.11 como puerto 3022. Indicamos el usuario pi, y la contraseña nueva si la hemos cambiado y sino usamos la contraseña por defecto que es raspbian. Si todo va bien estaremos dentro de nuestra Raspberry Pi y podremos grabar en Putty los datos de acceso con esa IP fija para futuros usos.

Abrir los puertos de router

Nuestro objetivo es llegar a tener un servidor web funcionando en la Raspberry Pi que tenemos en casa por lo que será necesario abrir los puertos del router. El puerto 80 es el que permite servir una página web.

En nuestro caso el proveedor de servicios de Internet es Movistar que utiliza el portal Alejandra para gestionar el router. Se puede llegar a desvincular el router de este portal pero en nuestro caso lo hicimos en su día para probar, pero ahora de momento seguimos usando Alejandra.

Si no tenemos este portal lo que se ha de hacer es conectarnos a nuestro router tecleando en nuestro navegador la dirección IP de entrada al router, que en nuestro caso es 192.168.1.1. El router nos mostrará una página donde tendremos que poner el usuario y contraseña de nustro modelo concreto.


Para que funcione nuestro servidor web y pueda servir página web a un usuario externo a nuestra red es necesario abrir el puerto 80 mediante el protocolo TCP.

Para que consigamos conectarnos a nustra Raspberry Pi mediante SSH desde una ubicación externa a nuestra red tendremos que abrir el puerto 22 o si hemos cambiado el puerto el que sea, por ejemplo el puerto 3022, mediante TCP.

¿Cúal es mi IP?

La mayoría de las IP externas que tenemos son dinámicas.

En las casas y en muchas empresas pequeñas la conexión que nos proporciona nuestro proveedor de Internet nos ofrece una IP dinámica. Esto supone que cada vez que rebotamos el router la IP externa que tenemos puede cambiar.

Puedes hacer la prueba consultando la IP externa que tienes. Para ello existen múltiples páginas que te informan. Usando tu buscador favorito escribe la frase 'Mi IP', o 'Cuál es mi ip'. Y verás que dispones de muchos links que te llevan a páginas que te proporcionan tu IP pública en estos momentos. En la imagen siguiente se puede ver la IP que tengo en este momento.


Al reiniciar tu router (apagar, esperar unos segundos y encender) podremos ver que la IP externa seguramente habrá cambiado.

noIP

No es práctico establecer un servidor web donde la IP pública esté cambiando continuamente. Podríamos contratar una IP fija pero esto tiene un coste. Otra solución es utilizar algún sistema como el que nos proporciona la página noip.com.

Nos proporcionará un dominio que apunta siempre a nuestra IP pública aunque esta sea dinámica y por lo tanto cambie ocasionalmente. El sistema se encarga de vigilar si cambia nuestra IP pública y dirigir las peticiones a ese dominio a nuestra IP aunque haya cambiado.

Por ejemplo, el domino magnitopic.ddns.net es un dominio proporcionado por este servicio.

Raspberry Pi instalación y puesta en marcha

Este artículo forma parte de una serie que nos conducirá a configurar una Raspberry Pi hasta llegar a tener instalada en ella un servidor web con base de datos y PHP como lenguaje. Los artículos de la serie son los siguientes.
  1. Raspberry Pi instalación y puesta en marcha   ← (es el post en el que estamos)
  2. Raspberry Pi primeros pasos
  3. Raspberry Pi instalación de Apache + PHP + MySQL
  4. Raspberry Pi instalación de Wordpress
Trabajaremos desde la consola utilizando la línea de comandos ya que la instalación que hemos realizado no ha cargado las xWindows. No disponemos de interface gráfica y por lo tanto el ratón no lo utilizaremos.


Vamos a instalar una Raspberry Pi desde cero preparándola para que actue como servidor, por lo que vamos a prescindir de la parte gráfica y vamos a trabajar con la línea de comandos desde consola.

Material necesario

  1. Una Raspberry Pi. El modelo elegido no es crítico, en principio puede ser cualquiera. Nosotros vamos a usar una Raspberry Pi 2. Actualmente el modelo más moderno es la Raspberry Pi 3B+. También se puede instalar en una Raspberry Pi Zero o Zero W.
  2. Una fuente de alimentación de 5 v (voltios) y 3 A (amperios). Los primeros modelos o la versión Zero aceptan fuentes de solo 2.5 A. Es conveniente que la fuente no sea muy mala ya que estará conectada durante mucho tiempo de forma continuada.
  3. Una tarjeta micro SD, de 8 Gb o más. Preferiblemente, de 64 Gb, actualmente, ya que su precio ha bajado mucho. También necesitaremos un adaptador de tarjeta micro SD a SD, o un adaptador de tipo USB para tarjetas micro SD, con el fin de introducirlo en nuestro PC y grabar por primera vez el sistema operativo.
  4. Un cable de red RJ45 para conectar la Raspberry Pi a nuestra red y a Internet. Se podría usar conexión WiFi en aquellas versiones que dispongan de esta capacidad pero no se recomienda tener un servidor permanentemente conectado 24 horas al día, 365 días al año mediante una conexión inhalánbrica. Para un servidor es mucho mejor la conexión por cable.
  5. Un cable HDMI para conectar un monitor o TV. Este cable no será necesario cuando al final terminemos accediendo a nuestra Raspberry Pi de forma remota mediante protocolo SSH.
  6. Un ratón si usamos la versión gráfica, pero si usamos únicamente la versión LITE que trabaja desde la consola por línea de comando no será necesario en ratón en ningún momento. En todo caso, este periferico no será necesario cuando al final terminemos accediendo a nuestra Raspberry Pi de forma remota mediante protocolo SSH.
  7. Un teclado. Este periferico no será necesario cuando al final terminemos accediendo a nuestra Raspberry Pi de forma remota mediante protocolo SSH.
  8. Un PC Windows o MAC, fijo o portatil. En mi caso he utilizado un laptop HP G62 comprado en abril 2011 con Windows 10. El PC será util para flashear la tarjeta micro SD como luego veremos, y para manejar remotamente la Raspberry Pi con el protocolo SSH.

Ubicación

  • Posiblemente la mejor ubicación es dejar la Raspberry Pi cerca del Router que tenemos en casa, ya que estará conectada por cable de red RJ45 y si este es corto incluso será preferible. En un sitio más o menos ventilado. Si no tenemos carcasa casi mejor, ya que ventilará mejor. Y donde un niño pequeño no llegue ya que todo dispositivo electrico/electrónico debe tener ciertas precauciones obvias.
  • Cualquier otra ubicación es posible. En los primeros momentos necesitaremos usar un cable HDI, un monitor o TV, y un teclado. El ratón únicamente será necesario si usamos una versión gráfica de Raspbian. Luego cuando tengamos habilitado el protocolo SSH, ya no seran necesarias estas conexiones puesto que nos conectaremos de forma remota desde nuestro PC. Como ejemplo, de ubicación insólita, recuerdo que en una ocasión colocamos una Raspbeery Pi perfectamente operativa, a modo de broma, colgada de una lámpara de techo. Estaba alimentada por una batería de las que se usan para cargar los smartphones, y tenía habilitada la conexión WiFi. Estuvo funcionando perfectamente hasta que se agotó la batería :-)

Sistema Operativo

Vamos a utilizar Raspbian que es un Linux basado en Debian perfectamente adaptado a la RPi (Raspberry Pi).
De la pagina de descarga (https://www.raspberrypi.org/downloads) no elegiremos la modalidad NOOBS sino que elegiremos directamente la versión Raspbian y así aprenderemos a flashear la tarjeta microSD.

En la página de Raspbian (https://www.raspberrypi.org/downloads/raspbian/) nos encontramos actualmente con tres versiones. Vamos a elegir la más ligera sin parte gráfica, y por lo tanto si escritorio (desktop) ya que al tratarse de una RPi destinada a funcionar como servidor lo que queremos es ligereza e instalar via consola solo lo que nos interese.


Elegiremos Raspbian Stretch Lite que es la modalidad Raspbian Lite (ligera) que ahora va por la versión que se denomina Stretch. La versión anterior se llamaba Jessie. Seguidamente una lista de las últimas versiones.
  • The next release of Debian is codenamed buster — no release date has been set
  • Debian 9 (stretch) — current stable release (actualmente estamos en junio 2019)
  • Debian 8 (jessie) — obsolete stable release
  • Debian 7 (wheezy) — obsolete stable release
  • Debian 6.0 (squeeze) — obsolete stable release

Pasos para instalar Raspbian

  1. Descargamos en nuestro PC la última versión Lite como se ha indicado en el punto anterior.
  2. Introducimos la tarjeta micro SD en el adaptador a SD, y éste en nuestro PC
  3. Formateamos la tarjeta micro SD. No es obligatorio pero se recomienda usar un software específico para formatear tarjetas de memoria como SD Card Formatter.
  4. Paso optativo. Si quieres puedes comprobar el hash de la descarga. Es ese código larguísimo que aparece en la página desde la que te has bajado Raspbian. Por ejemplo, SHA-256:03ec326d45c6eb6cef848cf9a1d6c7315a9410b49a276a6b28e67a40b11fdfcf Se puede comprobar con un programa que verifica el checksum como por ejemplo MD5 & SHA Checksum Utility. Esto sirve para comprobar que la descarga del sistema operativo no tiene errores al realizar el download.
  5. Flasheamos la trarjeta SD con el sistema operativo elegido. Para ello utilizamos un programa que nos permita realizar el flasheado como por ejemplo Etcher. El programa detectará la tarjeta micro SD que tenemos introducida en nuestro PC y le indicaremos el fichero ZIP donde se encuentra el sistema operativo Raspbian que hemos descargado previamente. El programa se encarga de flashear, esto es se encarga de descomprimir y copiar adecuadamente el contenido del fichero ZIP a nuestra tarjeta micro SD. Si hacermos una descompresión manual y un copiado manual de los ficheros a la tarjeta micro SD no funcionará. Lo que se ha de hacer es flashear la tarjeta con Etcher.
  6. Sacamos la micro SD de nustro PC y ya tendremos dentro de la tarjeta el sistema operativo listo para conectar en nuestra Raspberry Pi.

Conexiones

  1. Introducimos la micro SD en nuestra Raspberry Pi.
  2. Encendemos el monitor o TV y lo conectamos por cable HDMI a nuestra Raspberry Pi. El model antiguo Raspberry Pi original no tenía HDMI y se podía conectar a un monitor por VGA o incluso a una TV antigua utilizando un cable de vídeo compuesto.
  3. Conectamos el teclado por USB. Si usamos versión gráfica también conectaremos el ratón.
  4. Conectamos el cable de red RJ45 a nuestro router o a un switch que tengamos disponible en nuestra red
  5. Finalmente conectamos el cable de la fuente de alimentación
Si todo va bien veremos en pantalla como se inicia el sistema operativo. Arriba veremos un imagen de unas frambuesas. Si es la versión de Raspberry Pi original (la versión uno) veremos únicamente una frambuesa, y si se trata de una versión posterior veremos cuatro frambuesas.


Si la fuente de alimentación es insuficiente veremos en la parte superior derecha de la pantalla un símbolo de un rayo de color amarillo que podrá aparecer ocasionalmente. Si aparece quiere decir que la fuente de alimentación no es capaz de suministrar el amperaje suficiente y que por lo tanto se requiere utilizar una fuente de alimentación de mayor capacidad. Se recomienda una de 5 voltios (5V) y 3 amperios (3A).

 Ya tenemos todo conectado y la Raspberry Pi arrancada, ahora tenemos que logearnos.

Login


El usuario es:
pi

La contraseña por defecto es:
raspberry

Si todo va bien ya tendremos la sesión iniciada y veremos el prompt que se muestra en la imagen siguiente, y el cursor será una barra baja titilando en espera de que introduzcamos nuestro primer comando.


Reiniciar la Raspberry Pi

Desde la línea de comandos escribiremos lo siguiente.

sudo reboot

Otra opción para rebotar nuestra plaquita es utilizar el comando siguiente.

sudo shutdown -r now

El modificacor -now hace referencia a que deseamos que se cierre el sistema operativo ahora, ya que existen otros modificadores con los que es posible programar el apagado para dentro de un cierto número de minutos/horas.

Apagar la Raspberry Pi

Para apagar la Raspberry Pi desde la línea de comandos o desde la consola utilizaremos el siguiente comando.

sudo shutdown -h now

El modificador -h hace referencia a halt. Lo que hace es detener los procesos.

Finalmente desconectaremos el cable de alimentación de la Raspberry Pi para evitar que se continúe proporcionando corriente. Muchas de las fuentes de alimenación no llevan interruptor por lo que será necesario desconectar fisicamente el cable micro USB.

Si vamos a tener apagada la Raspberry Pi durante un periodo largo conviene desconectar fisicamente la fuente de alimentación del enchufe para evitar que se continúe trasnformando electricidad y generando consumo electrico y calor.

Usando la base da datos mariadb en una Raspberry Pi

Supongamos que ya tenemos instalada la base de datos mariadb en nuestra Raspberry Pi. Estamos en Windows y nos queremos conectar a nustra Raspberry Pi através del protocolo SSH, para ello usamos el programa Puty. Si estamos en la misma red local ponemos la dirección IP interna donde está nuestra plaquita, por ejemplo, 192.168.1.10 y el puerto, que por defecto es el puesto 22. Aunque siempre es recomendable cambiar el puerto cuando se instala el protocolo SSH añadir una dificultad extra a los posibles atacantes. Si logramos entrar nos pedirá el usuario, que habitualmente es pi, y la contraseña que es recomendable que previamente tengamos ya personalizada, ya que si no la hemos cambiado será la conocida raspberry.

Para entrar en la base de datos tecleamos:

sudo mariadb

de esta forma comprobaremos que está activa y funcionando.


Para gestionar la base de datos puedes usar phpMyAdmin desde una pestaña de tu nevegador poniendo la dirección ip interna de tu Raspebrry Pi barra phpmyadmin, tal y como se muestra seguidamente.

http://192.168.1.10/phpmyadmin     ← cambia la IP por la que tenga tu Raspberry Pi en tu red local

Al entrar veremos algo similar a lo que se muestra en la siguiente imagen.


  • El usuario por defecto es phpmyadmin
  • La contraseña por defecto es la que pusiste al instalar mysql




martes, 4 de junio de 2019

Formulario que envía un email con el método POST en PHP

Disponemos de un formulario HTML que envía los datos recogidos a un script en PHP utilizando el método POST.

Código HTML

El archivo se denomina formulario2.php y pese a su extensión se trata de un archivo HTML.

 <!DOCTYPE html>  
 <html lang="es">  
 <head>  
  <meta charset="utf-8">  
  <title>formularioPHP</title>  
 </head>  
 <body>  
  <form action="actua2.php" method="post">  
   <label for="nombre">Nombre: </label>  
   <input type="text" name="nombre"><br>  
   <label for="correo">Correo: </label>  
   <input type="email" name="correo"><br>  
   <label for="mensaje">Mensaje: </label>  
   <textarea name="mensaje"></textarea><br>  
   <input type="submit" value="Enviar"><br>  
  </form>  
  <p>Envía un correo con los datos del formulario a la cuenta de correo indicada.</p>  
 </body>  
 </html>  

Utilizamos el método POS para comunicarnos con el archivo actua2.php.

El formulario que veremos se encuentra en la siguinte dirección.



Código PHP

El archivo actua2.php mostrará información sobre los datos recogidos en el formulario y si el correo ha sido correctamente enviado mostrará la siguiente pantalla.


Observe cómo se recoge con el método POST el valor de cada una de las variables del formulario. En realidad lo que se hace es recoger con POST un array con todo el contenido del formulario y luego se va pidiendo cada una de esas variables que es cada una de las posiciones del vector.

El condicional if se añade para comprobar que la instrucción mail no arroje ningún error. En caso de que no exista error quiere decir que el mensaje se ha enviado con éxito. Por lo tanto es la instrucción mail la que envía el mensaje.

mail($to, $subject, $message, $headers);

 <?php  
 $nombre=$_POST['nombre'];  
 $mensaje=$_POST['mensaje'];  
 $para=$_POST['correo'];  
 echo "Hola ".$nombre.", hemos recibido tu mensaje: <br>";  
 echo $mensaje."<br>";  
 echo "Vamos a enviar tu mensaje a la dirección de correo <b>".$para."</b><br>";  
 if(mail($para,'Mensaje de prueba',$mensaje,'From: adolfo <micuenta@miservidor.com>')){  
  echo "El email ha sido enviado exitosamente.";  
 }else{  
  echo "Se ha producido un error al enviar el email.";  
 }  
 ?>  

La expresión 'From: adolfo <micuenta@miservidor.com>' es optativa y se añade para indicar como cabecera (header) de quién procede el mensaje. Personalize esta línea cambiando este código por otro que contenga su nombre y su correo electrónico.
También podríamos haber creado unas cabeceras más complejas añadiendo direcciones de correo para enviar este mensaje como copia (Cc) o como copia oculta (Bcc).

Suponga que deseamos añadir una cabecera algo más compleja como la siguiente.

 $headers = 'From: adolfo <micuenta@miservidor.com>' . "\r\n";  
 $headers .= 'Cc: antonio <sucorreo@suservidor.com>' . "\r\n";  
 $headers .= 'Bcc: susana@trabajo.com' . "\r\n";  
   
 mail($to, $subject, $message, $headers);  

Veamos el correo correctamente recibido.


Ahora si podemos ver la dirección desde la que 'From' nos dice que se envió el mensaje.