Como me gusta cacharrear con todo este tipo de chismes, vamoms a intentar hacer algo guapo con las raspis.
Partimos de la base de:
-2 RBpi 3 Satellite (Una para el salon, otra para la habitacion)
-1 RBpi 2 Central
-1 Mando ps3 BlueTooth (Al final tendre que conseguir otro)
-1 Dongle BlueTooth (Al final tendre que conseguir otro)
-1 Dongle WIFI.
La filosofia principal del proyecto , actualmente, va a consistir en basicamente en cacharrear con ciertas tecnologias que no controlo (Ansible, Dockers, ... ) e integrarla con ciertas tecnologias que ya conozco mejor.
En cada Raspberry pi 3 hemos instalado con noobs 3 sistema operativos; RASPBIAN, OSMC, RECALBOX.
En la Raspberry pi 2 hemos instalado RASPBIAN.
Laboratorio Ronckola
-
- Pi Newbie
- Mensajes: 4
- Registrado: 08 Ago 2017, 11:23
- Agradecido: 0
- Agradecimiento recibido: 0
La verdad es que no me he liado la manta a la cabeza.
Al tener 2 maquinas fisicas con 3 sistemas operativos cada una he optado por lo mas sencillo a nivel administracion y configuracion.
Cada maquina tiene seteada las mismas ips estaticas en sus tres OS. Aunque si que tiene distintos DNS.
RASPI-SALON : recal-salon, osmc-salon, raspbian-salon.
RASPI-HABITACION: recal-hab, osmc-hab, raspbian-hab.
Esto he comprobado que realmente no es necesario para ansible pero me facilita el no tener que estar borrando las ips del knownhost para acceder por SSH.
He instalado el ansible de repositorio del raspbian en la raspberry pi central .
He creado la clave privada y la he compartido con el resto de la raspis. (vease ssh-keygen)
He modificado el archivo /etc/ansible/hosts.
[i]Tal y como hago siempre y recomiendo antes de modificar cualquier archivo de configuracion creo una copia de seguridad del original.
ejemplo : cp -p /etc/ansible/hosts /etc/ansible/hosts_orig
Apartir de aqui siempre que haga una modificacion creare una copia de seguridad con la fecha de la modificacion.[/i]
Volvemos al asunto.
He añadido dentro del fichero de hosts los nombres de las maquinas objetivas.
[i]#RASPBERRYS
[raspberrys]
raspi-salon
#raspi-habitacion[/i]
He comentado la linea de la raspi de la habitacion para poder minimizar los riesgos en caso de cagada no tener que arreglar las 2 raspberrys.
Vamos a crear algun playbook que va a ser utiles para todos los sistemas operativos.
PLAYBOOK 1 Montaje de FS en los FSTABS.
El objetivo es poder cargar una serie de recursos en los fstabs de todos los sistemas operativos guardando la configuracion en la raspi central de manera que mas tarde se puedan hacer extensibles a cualquier numero de raspis que vayamos añadiendo.
pi@raspiMGR:~/Ansible_commands/playbooks$ cat mount.ansible.yml
[i]---
- hosts: raspberrys
remote_user: root
tasks:
- name: Mount IMAC
mount:
name: /mnt/IMAC
src: //IMAC/Pictures
fstype: cifs
opts: ro,credentials=/root/.smbcredentials
state: present
- name: Mount NOOBS
mount:
name: /mnt/noobs
src: /dev/mmcblk0p*** (NOOBS partition)
fstype: ext4
opts: rw,noauto
state: present
[/i]
En este playbook se añaden 2 fs al fstab:
El primero un directorio compartido desde el ordenador de casa.
El segundo es el mas interesante sirve para montar el FS de arranque de NOOBS.
Para ejecutar este playbook simplemente se ejecuta el comando:
-$ ansible-playbook mount.ansible.yml
PLAYBOOK 2 Cambio de SISTEMA OPERATIVO.
Antes de configurar este playbook hay que obtener los datos de las particiones de arranque de los sistemas operativos cargados con noobs. Para esto bastará con leer el archivo installed_os.json disponible en la particion de arranque del NOOBS que hemos añadido a fstab con el anterior comando por lo que podremos disponer de ello montando el FS y consultandolo.
mount /mnt/noobs
cat /mnt/noobs/ installed_os.json
De este fichero nos interesa la identificacion de la particion de arranque de cada OS.
Una ve obtenido los datos he creado una copia del noobs.conf por cada OS:
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_RECALBOX.conf
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_OSMC.conf
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_RASPBIAN.conf
Cambiando luego en cada uno de ellos en la linea el numero indicado por el numero de cada sistema operativo.
default_partition_to_boot=@@
Ejemplo.
Tengo la particion de arranque de recalbox en "/dev/mmcblk0p10"
Para el noobs_RECALBOX.conf utilizare la linea
default_partition_to_boot=10
Una vez configurado esto damos paso al siguiente playbook.
pi@raspiMGR:~/Ansible_commands/playbooks$ cat select-OS_salon.yml
[i]---
- hosts: raspi-salon
remote_user: root
tasks:
- stat:
path: /mnt/noobs/noobs.conf
register: st
- name: Mount NOOBS
command: mount /mnt/noobs
when: st.stat.exists == False
- name: Select OS
command: cp -p /mnt/noobs/noobs-{{OS}}.conf /mnt/noobs/noobs.conf
- name: Umount NOOBS
command: umount /mnt/noobs
- name: Reboot
command: /sbin/init 6
vars:
OS: "{{ selected_OS }}"
[/i]
Donde se pasa un parametro y se ejecuta una serie de comandos sencillos que modifica el arranque predefinido por el que indiques y se reinicia la maquina.
Como parametro puedo pasar RECALBOX OSMC o RASPBIAN segun quiera arrancar.
Mas adelante creare un CGI para ejecutar este reinicio desde el movil mediante navegador web.
[PD] para cualquier modificacion de configuracion en recalbox es necesario remontar el FS con permisos de escritura.
mount -o remount, rw /
Al tener 2 maquinas fisicas con 3 sistemas operativos cada una he optado por lo mas sencillo a nivel administracion y configuracion.
Cada maquina tiene seteada las mismas ips estaticas en sus tres OS. Aunque si que tiene distintos DNS.
RASPI-SALON : recal-salon, osmc-salon, raspbian-salon.
RASPI-HABITACION: recal-hab, osmc-hab, raspbian-hab.
Esto he comprobado que realmente no es necesario para ansible pero me facilita el no tener que estar borrando las ips del knownhost para acceder por SSH.
He instalado el ansible de repositorio del raspbian en la raspberry pi central .
He creado la clave privada y la he compartido con el resto de la raspis. (vease ssh-keygen)
He modificado el archivo /etc/ansible/hosts.
[i]Tal y como hago siempre y recomiendo antes de modificar cualquier archivo de configuracion creo una copia de seguridad del original.
ejemplo : cp -p /etc/ansible/hosts /etc/ansible/hosts_orig
Apartir de aqui siempre que haga una modificacion creare una copia de seguridad con la fecha de la modificacion.[/i]
Volvemos al asunto.
He añadido dentro del fichero de hosts los nombres de las maquinas objetivas.
[i]#RASPBERRYS
[raspberrys]
raspi-salon
#raspi-habitacion[/i]
He comentado la linea de la raspi de la habitacion para poder minimizar los riesgos en caso de cagada no tener que arreglar las 2 raspberrys.
Vamos a crear algun playbook que va a ser utiles para todos los sistemas operativos.
PLAYBOOK 1 Montaje de FS en los FSTABS.
El objetivo es poder cargar una serie de recursos en los fstabs de todos los sistemas operativos guardando la configuracion en la raspi central de manera que mas tarde se puedan hacer extensibles a cualquier numero de raspis que vayamos añadiendo.
pi@raspiMGR:~/Ansible_commands/playbooks$ cat mount.ansible.yml
[i]---
- hosts: raspberrys
remote_user: root
tasks:
- name: Mount IMAC
mount:
name: /mnt/IMAC
src: //IMAC/Pictures
fstype: cifs
opts: ro,credentials=/root/.smbcredentials
state: present
- name: Mount NOOBS
mount:
name: /mnt/noobs
src: /dev/mmcblk0p*** (NOOBS partition)
fstype: ext4
opts: rw,noauto
state: present
[/i]
En este playbook se añaden 2 fs al fstab:
El primero un directorio compartido desde el ordenador de casa.
El segundo es el mas interesante sirve para montar el FS de arranque de NOOBS.
Para ejecutar este playbook simplemente se ejecuta el comando:
-$ ansible-playbook mount.ansible.yml
PLAYBOOK 2 Cambio de SISTEMA OPERATIVO.
Antes de configurar este playbook hay que obtener los datos de las particiones de arranque de los sistemas operativos cargados con noobs. Para esto bastará con leer el archivo installed_os.json disponible en la particion de arranque del NOOBS que hemos añadido a fstab con el anterior comando por lo que podremos disponer de ello montando el FS y consultandolo.
mount /mnt/noobs
cat /mnt/noobs/ installed_os.json
De este fichero nos interesa la identificacion de la particion de arranque de cada OS.
Una ve obtenido los datos he creado una copia del noobs.conf por cada OS:
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_RECALBOX.conf
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_OSMC.conf
cp /mnt/noobs/noobs.conf /mnt/noobs/noobs_RASPBIAN.conf
Cambiando luego en cada uno de ellos en la linea el numero indicado por el numero de cada sistema operativo.
default_partition_to_boot=@@
Ejemplo.
Tengo la particion de arranque de recalbox en "/dev/mmcblk0p10"
Para el noobs_RECALBOX.conf utilizare la linea
default_partition_to_boot=10
Una vez configurado esto damos paso al siguiente playbook.
pi@raspiMGR:~/Ansible_commands/playbooks$ cat select-OS_salon.yml
[i]---
- hosts: raspi-salon
remote_user: root
tasks:
- stat:
path: /mnt/noobs/noobs.conf
register: st
- name: Mount NOOBS
command: mount /mnt/noobs
when: st.stat.exists == False
- name: Select OS
command: cp -p /mnt/noobs/noobs-{{OS}}.conf /mnt/noobs/noobs.conf
- name: Umount NOOBS
command: umount /mnt/noobs
- name: Reboot
command: /sbin/init 6
vars:
OS: "{{ selected_OS }}"
[/i]
Donde se pasa un parametro y se ejecuta una serie de comandos sencillos que modifica el arranque predefinido por el que indiques y se reinicia la maquina.
Como parametro puedo pasar RECALBOX OSMC o RASPBIAN segun quiera arrancar.
Mas adelante creare un CGI para ejecutar este reinicio desde el movil mediante navegador web.
[PD] para cualquier modificacion de configuracion en recalbox es necesario remontar el FS con permisos de escritura.
mount -o remount, rw /
-
- Pi Newbie
- Mensajes: 4
- Registrado: 08 Ago 2017, 11:23
- Agradecido: 0
- Agradecimiento recibido: 0
Para darle un poco de alegria a la cosa y hacerlo utilizable para los demas miembros de la familia vamos a intentar crear una pequeña capa web donde disfrazaremos nuestros pequeños scripts y aplicaciones.
En principio me contento con que desde esta web se pueda reiniciar cada una de las raspberrys y saltar de un OS a otro dentro de cada raspberry
Para mi punto de vista lo mas sencillo es publicar unos scriptcillos que se ejecuten en un servidor web, entiendo que mucha gente preferira el php por su integracion con el apache y con el mysql pero, como se que esta tirando muy fuerte gracias a tecnologias como django y el propio ansible o incluso los interpretes que muchos productos java implementan (jython), utilizare pyhon. No es un lenguaje que utilice mucho, pero si que es un lenguaje que merece la pena conocer.
No me ando con rodeos.
He instalado un apache 2 desde repositorio.
sudo apt-get install apache2.
Este sevidor aparte de ser software libre, es muy potente, es gratuito y esta muy bien documentado.
Lo primero que hago nada mas instalarlo es pararlo.
sudo service apache2 stop
Como detesto la extructura inicial de Includes que propone apache voy a pasar de su configuracion inicial y creare una simplificada donde solo se carguen los modulos necesarios y haremos que aparezca todo en el mismo archivo. Parecera muy latoso , pero a la larga lo agradecere para no volverme loco respecto a en que archivo hicce que configuracion.
Como siempre empiezo con una copia de seguridad del archivo de configuracion propuesto por apache.
sudo cp -p apache2.conf apache2.conf_orig
Acto seguido me empezamos con la customizacion. Como en esta maquina solo va a haber una instancia de apache vamos a usar las rutas por defecto que propone el producto. Voy a eliminar bastante comentario y algunos bloques que no creo que vaya a utilizar.
He realizado las siguientes acciones para personalizar minimamente la instalacion
sudo cp /etc/apache2/mods-available/mime.conf /etc/apache2/mime.conf
sudo mkdir /var/www/estaticos /var/www/scripts
sudo chown -R pi:www-data /var/www/
Adjunto el apache2.conf que he acabado usando Una vez hecho esto ya tengo el apache configurado y preparado para ejecutar cgis.
He buscado una plantilla gratuita por el INTERNEEE. y he realizado modificaciones menores y quitado todo lo que me sobraba hasta que mas o menos ha quedado como queria.
La plantilla esta descargada de aqui
http://demo.themeum.com/html/oxygen/
He publicado el resultado en el apache y ya lo tengo todo listo para acceder al control web de las raspberrys.
Esta listo para empezar a enlazar los playbooks que vayamos generando modificando los href en las lineas de tipo
<a data-scroll class="btn btn-start animated fadeInUpBig" href="#services">Cambiar OS</a></p>
Tal y comentaba al principio dichos scripts se podrian hacer con bash mismamente o con cualquier otro lenguaje que la raspberry pueda interpretar.
De momento esto se queda como el esqueleto de mi web para gestionar los scripts que vaya haciendo mas adelante. Cuando tenga otro ratito configurare un servidor DNS para que no haga falta acceder por IP a las maquinas. Para muchos es incomodo tener que aprender IPS.
En principio me contento con que desde esta web se pueda reiniciar cada una de las raspberrys y saltar de un OS a otro dentro de cada raspberry
Para mi punto de vista lo mas sencillo es publicar unos scriptcillos que se ejecuten en un servidor web, entiendo que mucha gente preferira el php por su integracion con el apache y con el mysql pero, como se que esta tirando muy fuerte gracias a tecnologias como django y el propio ansible o incluso los interpretes que muchos productos java implementan (jython), utilizare pyhon. No es un lenguaje que utilice mucho, pero si que es un lenguaje que merece la pena conocer.
No me ando con rodeos.
He instalado un apache 2 desde repositorio.
sudo apt-get install apache2.
Este sevidor aparte de ser software libre, es muy potente, es gratuito y esta muy bien documentado.
Lo primero que hago nada mas instalarlo es pararlo.
sudo service apache2 stop
Como detesto la extructura inicial de Includes que propone apache voy a pasar de su configuracion inicial y creare una simplificada donde solo se carguen los modulos necesarios y haremos que aparezca todo en el mismo archivo. Parecera muy latoso , pero a la larga lo agradecere para no volverme loco respecto a en que archivo hicce que configuracion.
Como siempre empiezo con una copia de seguridad del archivo de configuracion propuesto por apache.
sudo cp -p apache2.conf apache2.conf_orig
Acto seguido me empezamos con la customizacion. Como en esta maquina solo va a haber una instancia de apache vamos a usar las rutas por defecto que propone el producto. Voy a eliminar bastante comentario y algunos bloques que no creo que vaya a utilizar.
He realizado las siguientes acciones para personalizar minimamente la instalacion
sudo cp /etc/apache2/mods-available/mime.conf /etc/apache2/mime.conf
sudo mkdir /var/www/estaticos /var/www/scripts
sudo chown -R pi:www-data /var/www/
Adjunto el apache2.conf que he acabado usando Una vez hecho esto ya tengo el apache configurado y preparado para ejecutar cgis.
He buscado una plantilla gratuita por el INTERNEEE. y he realizado modificaciones menores y quitado todo lo que me sobraba hasta que mas o menos ha quedado como queria.
La plantilla esta descargada de aqui
http://demo.themeum.com/html/oxygen/
He publicado el resultado en el apache y ya lo tengo todo listo para acceder al control web de las raspberrys.
Esta listo para empezar a enlazar los playbooks que vayamos generando modificando los href en las lineas de tipo
<a data-scroll class="btn btn-start animated fadeInUpBig" href="#services">Cambiar OS</a></p>
Tal y comentaba al principio dichos scripts se podrian hacer con bash mismamente o con cualquier otro lenguaje que la raspberry pueda interpretar.
De momento esto se queda como el esqueleto de mi web para gestionar los scripts que vaya haciendo mas adelante. Cuando tenga otro ratito configurare un servidor DNS para que no haga falta acceder por IP a las maquinas. Para muchos es incomodo tener que aprender IPS.
- Adjuntos
-
- apache2.zip
- (2.66 KiB)
-
- Pi Newbie
- Mensajes: 4
- Registrado: 08 Ago 2017, 11:23
- Agradecido: 0
- Agradecimiento recibido: 0
Buenas de nuevo,
No me entretengo mucho ya que hay muchisimos hilos donde se explica muy bien como configurar un servidor de nombres.
La filosofia de esta configuracion es no tener que acceder IP:PUERTO a los servidores web donde confguramos los scripts. Una vez instalado, seguro que se van ocurriendo mas utilidades.
Consiste en la configuracion de un servidor DNS en "RBpi 2 Central" y la configuracion del mismo en el router que levanta la wifi en casa.
No me gusta complicarme mucho la vida con nombres ni nada por el estilo asi que he decidido que llamare a mi dominio de nombres "casa.es" y a "RBpi 2 Central" le ha asignado el nombre master.casa.es.
No entrare mucho en detalles tecnicos ya que no tengo un conocimiento extenso al respecto. Este es el enlace del tutorial que segui la configuracion.
https://www.1and1.es/digitalguide/servi ... ns-server/
No me entretengo mucho ya que hay muchisimos hilos donde se explica muy bien como configurar un servidor de nombres.
La filosofia de esta configuracion es no tener que acceder IP:PUERTO a los servidores web donde confguramos los scripts. Una vez instalado, seguro que se van ocurriendo mas utilidades.
Consiste en la configuracion de un servidor DNS en "RBpi 2 Central" y la configuracion del mismo en el router que levanta la wifi en casa.
No me gusta complicarme mucho la vida con nombres ni nada por el estilo asi que he decidido que llamare a mi dominio de nombres "casa.es" y a "RBpi 2 Central" le ha asignado el nombre master.casa.es.
No entrare mucho en detalles tecnicos ya que no tengo un conocimiento extenso al respecto. Este es el enlace del tutorial que segui la configuracion.
https://www.1and1.es/digitalguide/servi ... ns-server/