Instalación

Introducción

Los nodos de Yuneta pueden clasificarse en:

  • Nodo de desarrollo:
    • Es el nodo que contiene el código fuente de Yuneta y los proyectos.

    • Sirve tanto para desarrollo como para despliegue.

    • Es la factoria de yunos, es decir, de los binarios y sus configuraciones iniciales, que acabarán desplegados en los Nodo de trabajo.

  • Nodo de trabajo
    • Realiza la carga de trabajo. Contiene los binarios y sus configuraciones (yunos).

Yuneta se instala en el directorio /yuneta, es decir, cuelga directamente del directorio root / del sistema de ficheros.

Yuneta no usa ningún otro directorio del sistemas de ficheros, tales como /usr o /var, a excepción de /etc que se usa para instalar el arranque autómatico del servicio del agente.

Advertencia

El directorio /yuneta y todos sus subdirectorios deben pertener al usuario y grupo yuneta.

Nodo de desarrollo

Se usa tanto para desarrollo como para funciones de despliegue. Despliegues de las diferentes combinaciones de distribución/procesador que use nuestro proyecto o sistema.

Puedes realizar la instalación de manera semi-automática o manual. Si no tienes mucha experiencia con Linux es aconsejable realizar la instalación manual para experimentar con los comandos.

Instalación semi-automática con scripts

Puedes instalar yuneta de manera más rápida con estos scripts.

Baja este script, dale permisos de ejecución, y ejecútalo como usuario root:

Baja este script, dale permisos de ejecución, y ejecútalo como usuario yuneta:

Instalación manual

Instalación paso a paso en la consola.

Aquí se dam instrucciones tanto para:

  • Debian y derivados (apt)

  • Red-Hat y derivados (yum).

La primera parte de la instalación necesita permisos de root. Contacte con su administrador de sistemas operativos si no los tiene.

La segunda parte de la instalación es Yuneta propiamente; todo las operaciones pertenecen al dominio de yuneta. Yuneta no necesita privilegios de root para operar, excepto en la fase de instalación.

  • Como root: instalar paquetes útiles:

    apt -y install vim rsync tree sudo ssh curl
    
  • Como root: crear el usuario yuneta:

    useradd yuneta -Um -s /bin/bash
    
  • Si sale el warning : Setting locale failed:

    dpkg-reconfigure locales
    
  • Como root: crear el directorio /yuneta si no existe:

    mkdir /yuneta
    
  • Añadir en .bashrc

    umask 0002
    
  • Poner nombre host:

    hostnamectl set-hostname {name-here}
    
    # y añadir a /etc/hosts <ip> <hostname>
    
  • IMPORTANTE Como root: darle la propiedad a yuneta

    chown yuneta:yuneta /yuneta
    
  • Como root: OPCIONAL, mejorar la seguridad de acceso ssh:

    Editar el fichero /etc/ssh/sshd_config para restringir el acceso como root:

    PermitRootLogin no
    

    Relanzar el servicio ssh:

    /etc/init.d/ssh restart
    

    Si el servidor está en una red pública (Internet), puedes instalar la utilidad fail2ban para blindar el servidor:

    apt -y install fail2ban
    
  • Como root: en Debian o similares, instalar los paquetes de desarrollo usados por Yuneta:

    apt -y install autotools-dev automake autogen libtool debmake cmake gettext mercurial git psmisc liblzma-dev zlib1g-dev libpcre3-dev libcurl4-openssl-dev libldap2-dev libidn11-dev libidn2-0-dev librtmp-dev libprocps-dev uuid-dev libarchive-dev libpq-dev can-utils libsocketcan2 libsocketcan-dev
    
  • En Centos o similar:

    # ***WARNING** The Centos installation will no longer be updated.
    
    # sudo usermod -aG wheel yuneta # wheel group has sudo privileges
    
    yum -y group install "Development Tools"
    yum -y install pcre-devel zlib-devel zlib-static libuuid-devel psmisc xz-devel centos-release-scl libarchive-devel procps-ng-devel cmake
    
    
    # see https://www.howtoforge.com/tutorial/how-to-install-fail2ban-on-centos/
    yum -y install epel-release
    yum -y install fail2ban fail2ban-systemd
    systemctl enable fail2ban
    systemctl start fail2ban
    
  • En Centos puede no estar instalardo el servidor que sincroniza la hora. Para instalar NTP (Network Time Protocol):

    yum -y install ntp ntpdate ntp-doc
    chkconfig ntpd on
    ntpdate pool.ntp.org
    
    systemctl start ntpd
    systemctl enable ntpd
    systemctl status ntpd
    
    ntpq -p     # Para verificar la hora
    date -R
    
  • Para cambiar el core dump filename

Editar el fichero /etc/sysctl.conf y añadir

kernel.core_uses_pid=0
kernel.core_pattern = /var/crash/core.%e

Relanzar con:

sysctl -p
  • Para poner la zona horaria:

    sudo timedatectl set-timezone Europe/Madrid
    

Advertencia

A partir de aquí, los comandos hay que ejecutarlos como usuario yuneta.

  • A partir de aquí, los comandos hay que ejecutarlos como usuario yuneta

    su - yuneta
    
  • O mejor: sal del equipo (exit) y vuelve a entrar por ssh con el usuario yuneta para comprobar los cambios en el servicio ssh:

    ssh yuneta@??.??.??.?? (ip del nodo)
    
  • Como yuneta: instalar el framework Yuneta

    • Crea los directorios básicos

      mkdir -p /yuneta/bin
      mkdir -p /yuneta/agent
      mkdir -p /yuneta/development
      mkdir -p /yuneta/development/yuneta
      mkdir -p /yuneta/development/projects
      mkdir -p /yuneta/development/output
      
    • Instalación de GObj-ecosistema

      git clone https://github.com/gobj-ecosistema/external-libs.git /yuneta/development/yuneta/^gobj-ecosistema/external-libs
      git clone https://github.com/gobj-ecosistema/ghelpers.git /yuneta/development/yuneta/^gobj-ecosistema/ghelpers
      git clone https://github.com/gobj-ecosistema/ginsfsm.git /yuneta/development/yuneta/^gobj-ecosistema/ginsfsm
      git clone https://github.com/gobj-ecosistema/tests-g.git /yuneta/development/yuneta/^gobj-ecosistema/tests-g
      git clone https://github.com/gobj-ecosistema/stats.git /yuneta/development/yuneta/^gobj-ecosistema/stats
      git clone https://github.com/gobj-ecosistema/timeranger.git /yuneta/development/yuneta/^gobj-ecosistema/timeranger
      git clone https://github.com/gobj-ecosistema/ytls.git /yuneta/development/yuneta/^gobj-ecosistema/ytls
      git clone https://github.com/gobj-ecosistema/rxspencer.git /yuneta/development/yuneta/^gobj-ecosistema/rxspencer
      
    • Instalación de Yuneta

      git clone https://github.com/yuneta/c-core /yuneta/development/yuneta/^yuneta/c-core
      git clone https://github.com/yuneta/c-rc_sqlite /yuneta/development/yuneta/^yuneta/c-rc_sqlite
      git clone https://github.com/yuneta/c-rc_treedb /yuneta/development/yuneta/^yuneta/c-rc_treedb
      git clone https://github.com/yuneta/js-core /yuneta/development/yuneta/^yuneta/js-core
      git clone https://github.com/yuneta/c-tls /yuneta/development/yuneta/^yuneta/c-tls
      git clone https://github.com/yuneta/c-postgres /yuneta/development/yuneta/^yuneta/c-postgres
      git clone https://github.com/yuneta/c-iot /yuneta/development/yuneta/^yuneta/c-iot
      git clone https://github.com/yuneta/packages /yuneta/development/yuneta/^yuneta/packages
      git clone https://github.com/yuneta/tests-y /yuneta/development/yuneta/^yuneta/tests-y
      git clone https://github.com/yuneta/web-skeleton3 /yuneta/development/yuneta/^yuneta/web-skeleton3
      git clone https://github.com/yuneta/ybatch /yuneta/development/yuneta/^yuneta/ybatch
      git clone https://github.com/yuneta/ycommand /yuneta/development/yuneta/^yuneta/ycommand
      git clone https://github.com/yuneta/ylist /yuneta/development/yuneta/^yuneta/ylist
      git clone https://github.com/yuneta/yshutdown /yuneta/development/yuneta/^yuneta/yshutdown
      git clone https://github.com/yuneta/ystats /yuneta/development/yuneta/^yuneta/ystats
      git clone https://github.com/yuneta/ytestconfig /yuneta/development/yuneta/^yuneta/ytestconfig
      git clone https://github.com/yuneta/yuno_agent /yuneta/development/yuneta/^yuneta/yuno_agent
      git clone https://github.com/yuneta/yuno_cli /yuneta/development/yuneta/^yuneta/yuno_cli
      git clone https://github.com/yuneta/yuno-skeleton /yuneta/development/yuneta/^yuneta/yuno-skeleton
      git clone https://github.com/yuneta/yclone-gclass /yuneta/development/yuneta/^yuneta/yclone-gclass
      git clone https://github.com/yuneta/docs /yuneta/development/yuneta/^yuneta/docs
      git clone https://github.com/yuneta/yscapec /yuneta/development/yuneta/^yuneta/yscapec
      git clone https://github.com/yuneta/mxgraph-js.git /yuneta/development/yuneta/^yuneta/mxgraph-js
      git clone https://github.com/yuneta/ytests /yuneta/development/yuneta/^yuneta/ytests
      git clone https://github.com/yuneta/extractjson /yuneta/development/yuneta/^yuneta/extractjson
      git clone https://github.com/yuneta/yclone-project /yuneta/development/yuneta/^yuneta/yclone-project
      git clone https://github.com/yuneta/yuno_agent22 /yuneta/development/yuneta/^yuneta/yuno_agent22
      git clone https://github.com/yuneta/w2ui /yuneta/development/yuneta/^yuneta/w2ui
      git clone https://github.com/yuneta/ymake-skeleton /yuneta/development/yuneta/^yuneta/ymake-skeleton
      
    • Instalación de Yuno-store

      git clone https://github.com/yuno-store/emailsender /yuneta/development/yuneta/^yunos/emailsender
      git clone https://github.com/yuno-store/emu_device /yuneta/development/yuneta/^yunos/emu_device
      git clone https://github.com/yuno-store/logcenter /yuneta/development/yuneta/^yunos/logcenter
      git clone https://github.com/yuno-store/watchfs /yuneta/development/yuneta/^yunos/watchfs
      git clone https://github.com/yuno-store/controlcenter /yuneta/development/yuneta/^yunos/controlcenter
      git clone https://github.com/yuno-store/sgateway /yuneta/development/yuneta/^yunos/sgateway
      git clone https://github.com/yuno-store/dba_postgres /yuneta/development/yuneta/^yunos/dba_postgres
      
  • Si quieres directorios compartidos para el grupo (derecho de escritura para todos los usuarios del grupo yuneta)

    find /yuneta -type d -exec chmod g+s {} \;
    find /yuneta -type d -exec chmod g+w {} \;
    find /yuneta -type f -exec chmod g+w {} \;
    

Compilación de Yuneta

Para facilitar la compilación decomprime este fichero que contiene varios CMakeLists.txt que agrupan los proyectos y un script para compilarlos:

cp -a /yuneta/development/yuneta/^yuneta/packages/yuneta/* /yuneta/development/yuneta
cp -a /yuneta/development/yuneta/^yuneta/packages/recompila.sh /yuneta/development/yuneta
cp -a /yuneta/development/yuneta/^yuneta/packages/compila.sh /yuneta/development/yuneta
cp -a /yuneta/development/yuneta/^yuneta/packages/yuneta-pull-from-github.sh /yuneta/development/yuneta

Y ahora ya puedes compilarlo todo (OJO, puede durar bastante tiempo)

cd /yuneta/development/yuneta
./recompila.sh

Para compilar sin las librerias externas:

cd /yuneta/development/yuneta
./compila.sh

Instalación del Agente

Para instalar el Run-time del Agente en el nodo de desarrollo, ejecutar:

cd /yuneta/development/output/agent
./deploy_agent.sh
cd /yuneta/agent/service
sudo ./install-yuneta-service.sh

Ahora puedes rebootear el equipo para comprobar que el servicio del agente se inicia correctamente:

sudo reboot 0

o puedes arrancarlo manualmente:

/yuneta/agent/yuneta_agent --start

Una vez rebooteado el equipo o arrancado manualmente el servicio, ejecuta el CLI:

/yuneta/bin/yuneta

Si te aparece una pantalla con las dos líneas inferiores de color blanco y naranja, con algo así escrito:

console>
Wellcome to Yuneta. Type help for assistance.

Enhorabuena! ya tienes a Yuneta funcionado. Ahora conéctate al agente del nodo local y empieza a jugar. Para cualquier duda, teclea help, o simplemente h.

Por comodidad para ejecutar los comandos de Yuneta añade a la variable $PATH las rutas:

/yuneta/bin
/yuneta/development/bin
/yuneta/development/output/bin
/yuneta/development/output/yunos

Nodo de trabajo

Un nodo de trabajo o de carga es aquel que solo contiene binarios de Yuneta, que se deberán desplegar desde un Nodo de desarrollo, que es quien los genera para la plataforma adecuada.

Para crear un nodo de trabajo de Yuneta:

  • Crea el run-time del Agente adecuado al dispositivo.

    Para crear un paquete .deb del run-time del Agente usa los scripts del directorio /yuneta/development/yuneta/^yuneta/packages.

    Por ejemplo para Debian/AMD64:

    cd /yuneta/development/yuneta/^yuneta/packages
    ./build-yuneta-agent-debian-AMD64.sh
    

    Los paquetes .deb se generan en el directorio en ~/deb-build/.

  • Ejemplo de instalación manual en nodo de trabajo con hostname nodo100 (sustituyelo por una ip o un hostname real), suponiendo que has generado la version 3.2.0 release 1:

    cd ~/deb-build/amd64
    scp yuneta-agent-3.2.0-1-amd64.deb yuneta@nodo100:
    ssh yuneta@nodo100
    sudo apt -y install ./yuneta-agent-3.2.0-1-amd64.deb
    

Actualización

Para actualizar el código fuente de Yuneta con la última versión en github podemos usar el script:

/yuneta/development/yuneta/yuneta-pull-from-github.sh

ó

/yuneta/development/yuneta/^yuneta/packages/yuneta-pull-from-github.sh

El contenido del script es:

#!/bin/bash
DIRECTORY="/yuneta/development/yuneta"

if [ ! -d "$DIRECTORY" ];
then
    echo "No existe el directorio '$DIRECTORY'"
    exit
fi

cd $DIRECTORY

for d in */
do
    if [[ $d =~ \^.* ]]
    then
        # group of projects
        GPROJECT="${d%/}"
        echo "^===>" $GPROJECT
        cd $GPROJECT
        GPROJECT=${GPROJECT:1}
        for s in */
        do
            # single project
            PROJECT="${s%/}"
            if [ "$PROJECT" == "build" ]; then
                continue
            fi
            #echo "    ===>" $PROJECT
            cd $PROJECT
            git pull
            cd ..
        done
        cd ..
    else
        PROJECT="${d%/}"
        if [ "$PROJECT" == "build" ]; then
            continue
        fi
        #PROJECT="${s%/}"
        echo " ===>" $PROJECT
        cd $PROJECT
        git pull
        cd ..
    fi
done