Català   English  

Cloudy plug-ins

De Guifi.net - Wiki Hispano

¿Qué es un plug-in?

Cloudy es una distribución de Linux basada en Debian que proporciona a los usuarios una interfaz simple y cómoda para gestionar diferentes servicios que pueden usarse a través de una red comunitaria; en nuestro caso, Guifi.

Al mismo tiempo, Cloudy ofrece una serie de herramientas que permiten a un usuario añadir un servicio de su agrado sin tener grandes conocimientos sobre redes e informática en general. Automaticamente, estos servicios se publican mediante Avahi, de manera que todo el que utilice Cloudy podrá hacer uso de estos servicios.

Otra manera de llamar estos servicios que se pueden poner y quitar de forma sencilla es plug-in. Por tanto, entendemos por plug-in a un programa o software que un usuario quiere añadir a la distribución y que puede ser gestionado de forma simple des de la interfaz web que provee Cloudy.


Añadir servicios a Cloudy

Una pequeña introducción

Esta guía te enseñará el proceso para añadir un nuevo servicio en la distribución Cloudy.

Para serclaro y dar algunos ejemplos al mismo tiempo, integraremos un servicio bastante simple mostrando algunos trozos de código por el camino. Para seguir el tutorial con más facilidad o bien para integrar servicios más complejos, estaría bien tener algunos conocimientos de Bash[1] y de PHP[2].

Por simplicidad utilizaremos Pastecat[3]. Es un buen candidato ya que:

  • Es independiente y no se federa ni se comunica con otros nodos.
  • Está hecho en Go, es facil de distribuir e instalar.
  • No necesita archivos de configuración.
  • No necesita muchos recursos.

Obtener el binario

Lo primero que hemos de investigar es como descargar e instalar el binario en Cloudy. La mayoria de software que podemos encontrar está por defecto en los paquetes de Debian, pero Pastecat no está. Si se diera el caso de que estuviera, solo tendríamos que ejecutar el comando apt-get install pastecat desde PHP.

Pero como este no es el caso, tendremos que obtener el binario por otro lado. Una opcion es coger el código fuente y compilarlo nosotros mismos, pero el problema de esto es que Cloudy necesitaria incluir muchas herramientas y librerias de desarrollo, y este no es el objetivo.

La mejor opción si un paquete de Debian no está disponible en los repositorios es descargar los binarios de otro lugar seguro. Podemos utilizar el servicio de "releases" de Github para ello. Las dos opciones nos dan un archivo ejecutable que tendríamos que ser capaces de ejecutar directamente sobre Cloudy.

En este caso en particular descargaremos los binarios desde el repositorio git con la siguiente linea de comandos:

   wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386

Nótese que en este caso en concreto estamos descargando una versión específica para Linux con arquitectura i386.

Fijaos que tener un servicio en los paquetes de Debian tiene muchas ventajas:

  • Las actualizaciones son simples y no necesitan trabajo extra desde Cloudy.
  • El paquete está compilado para Debian de manera segura.
  • Los archivos de init.d ya vienen por defecto.
  • Los paquetes de Debian suelen contener correciones.

Probarlo

Antes de añadir un servicio deberíamos configurarlo y probarlo nosotros directamente para ver cómo funciona y que realmente funciona. También hemos de entender qué opciones de configuración o de linea de comandos necesitamos para hacer uso de este servicio en particular y como lo gestionariamos una vez este funcionando.

Añadir el controlador

En web/plug/controllers tenenmos un archivo PHP para cada servicio, llamado controlador (o 'controller' en inglés). Este archivo contiene el codigo que se ejecutará cuando se visite la página de nuestro servicio desde la interfaz de Cloudy.

Añadir la función indice

Lo que queremos es que nuestro servicio esté integrado en la estructura web de Cloudy. Para ello, necesitamos crear unos cuantos scripts en PHP y añadirlos a nuestro sistema. De momento crearemos dos scripts: pastecat.php y pastecat.menu.php. El primer archivo es el controlador, es decir, el script que renderiza la página y tiene toda la información tal como botones o redireccionamientos. El otro es el que permite que nuestro servicio se muestre en los menus superiores desplegables de Cloudy.

El código del menú será similar a esto:

   <?php
   //peerstreamer.menu.php
   addMenu('Pastecat','pastecat','Clommunity');

Por ahora, utilizaremos un script muy simple en PHP como controlador:

   <?php
   //pastecat
   $title="Pastecat";
   
   function index(){
       global $paspath,$title;
       global $staticFile;
   
       $page=hlc(t($title));
       $page .= hl(t("Minimalist pastebin engine written in Go"),4);
       $page .= par(t("A simple and self-hosted pastebin service written in Go").' '.t("Can use a variety of storage backends").' '.t(" Designed to optionally remove pastes after a certain period of time.").' '.("If using a persistent storage backend, pastes will be kept between runs.").' '.t("This software runs the").' '."<a href='http://paste.cat'>".t("paste.cat")."</a>". t(" public service."));
       
       return(array('type' => 'render','page' => $page));
   }

En nuestro sistema Cloudy estos archivos han de ponerse en los directorios dentro de /var/local/cDistro/plug/. El primero ha de ir en menus y el segundo en el directori controllers. Una vez hecho esto podemos ir a la web de nuestro Cloudy y acceder al nuevo menú Pastecat.

Hacer que el controlador instale nuestro servicio

Como se ha comentado anteriormente, este paso es mucho más sencillo de hacer si el servicio está entre los paquetes de Debian. Como que no es el caso de Pastecat, lo tendremos que hacer manualmente. Normalmente hacer este proceso manualmente incluye una combinación de los comandos wget, mv y chmod. En general, es buena idea mantener los archivos de este tipo de servicios en /opt/SERVICENAME.

En nuestro caso particular, lo primero que necesitamos es descargar el binario de la release de Github. Para ello utilizaremos el comando: wget. Dada una URL a un archivo, este comando permite descargar este archivo en nuestro sistema, i es lo que haremos con:

   wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386

Una vez tengamos el binario en nuestra máquina, lo moveremos al directorio /opt/pastecat/. Para mover los archivos por nuestro sistema usaremos el comando mv. Aun así, primero tendremos que crear el directorio donde pondremos el archivo. Para ello utilizaremos mkdir de la siguiente manera:

  mkdir -p /opt/pastecat/

Una vez hayamos creado el directorio, es hora de mover el binario:

   mv current_directory/pastecat_linux_386 /opt/pastecat/

Donde "current_directory" es el directorio donde previamente hemos descargado el binario. Como el nombre del binario depende de la arquitectura, para simplificar el código del controlador, cambiaremos el nombre del archivo ejecutable por algo más genérico y simple:

   mv /opt/pastecat/pastecat_linux_386 /opt/pastecat/pastecat

Ahora nuestro binario se llama pastecat en lugar de pastecat_linux_386.

Estos pasos son los requisitos mínimos para instalar un servicio que no se ofrece directamente en los repositorios oficiales de Debian. Sin embargo, de cara a un usuario final, sería una pesadilla tener que hacer todos estos comandos en una consola conectado a través de ssh a su dispositivo, así que lo que haremos a continuación es crear un script en Bash que será llamado más adelante a traves de la interfaz web haciendo click en un botón.

Este script es la primera versión del controlador de Pastecat. Por ahora solo incluiremos una función para instalar Pastecat en nuestro dispositivo. Más adelante incluiremos otras funciones para proveer a nuestro script de más servicios:

   #!/bin/bash
   PCPATH="/opt/pastecat/"
   
   doInstall() {
       if isInstall
       then
           echo "Pastecat is already installed."
           return
       fi
   
       # Creating directory and switching
       mkdir -p $pcpath && cd $pcpath
   
       # Getting file
       wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386
   
       # Changing name so controller can invoke it generically
       mv pastecat_linux_386 pastecat
       chmod +x pastecat
       
       cd -
   }
   
   isInstalled() {
       [ -d $pcpath ] && return 0
       return 1
   }
   
   
   case $1 in
       "install")
           shift
           doInstall $@
           ;;
   esac

Podemos ver como los últimos pasos se han concentrado en una misma función, permmiténdonos instalar el software en el dispositivo de una manera mas sencilla.

Hacer que el controlador utilitce Pastecat

Ejecutar el servicio

WiP



Final

Finalmente añadir que todos los archivos implementados en este tutorial se pueden encontrar en un repositorio Github, que aparece en el apartado de Enlaces Externos, junto a este mismo tutorial en formato Markdown (md).


Referencias

  1. (http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf)
  2. (https://php.net/manual/es/index.php)
  3. (https://github.com/mvdan/pastecat)


Enlaces externos

https://github.com/Clommunity/Doc/tree/master/plugins/pastecat

Herramientas personales