jueves, 30 de junio de 2016

Máquina virtual de desarrollo para proyectos de AngularJS y NodeJS

Intentando afianzar mis conocimientos de AngularJS y NodeJS me he creado esta máquina virtual. En ella crearé todos los proyectos que usen estos frameworks de Javascript.

Información sobre máquina virtual

Esta máquina virtual la he creado con el VMware Player 12.

Características del hardware

La configuración del hardware usada ha sido la siguiente:
  • Memoria: 4Gb RAM.
  • Procesador: 1 procesador con 2 cores
  • Disco duro: disco SCSI de 40Gb, con fichero único autoexpandible.
  • CD-ROM: Usando unidad física, salvo en el momento de la instalación que se le ha asignado la imagen ISO del sistema operativo.
  • Adaptador de red: NAT.
  • Un controlador USB.
  • Pantalla.
El resto de hardware que se hubiera añadido de forma automática lo he eliminado.

Información sobre el sistema operativo

He instalado la distribución Fedora 23 de 64 bits con el escritorio LXDE.
Adicionalmente he actualizado el gestor de paquetes de yum a dnf, para esto he ejecutado los siguientes comandos:
sudo dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate
Después de esto he actualizado el sistema operativo, para esto he ejecutado los siguientes comandos:
sudo dnf update

Instalación de utilidades que yo considero necesarias.

Las utilidades que considero necesarias dentro del sistema operativo y que no son las que permiten trabajar directamente con los frameworks son las siguientes:

Terminator

Como terminal he instalado esta herramienta, la cual me permite trabajar tanto a pantalla partida como con diferentes pestañas.
Para la instalación he ejecutado los siguientes comandos:
sudo dnf install terminator

Información adicional

Para navegar y poder visualizar los proyectos generados he decidido instalar Firefox y Chrome.

Firefox

Para la instalación he ejecutado los siguientes comandos:
sudo dnf install firefox

Chrome

Para la instalación he seguido los siguientes pasos:
  • Cambiar a root:
su -
  • Después de esto he ejecutado el siguiente comando:
cat << EOF > /etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome - \$basearch
baseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
EOF
  • Para completar la instalación he ejecutado el siguiente comando:
dnf install google-chrome-stable
Información adicional

Filezilla

Como cliente de FTP he elegido el FileZilla.
Para la instalación he ejecutado los siguientes comandos:
sudo dnf install filezilla

Haroopad

Para mí es el editor que uso a diario y con el que genero la mayoría de la documentación.

Requerimientos previos

Se ha de instalar la siguiente librería:
sudo dnf install systemd-libs.i686 -y

Instalación de haroopad

El paquete de instalación lo he descarado desde la página de Haroopad.
El link de descarga que he utilizado es: Linux Binary (64bit) y la descarga la he realizado dentro del directorio ~/Descargas
Los comandos que he utilizado para realizar la instalación son:
cd ~/Descargas

tar zxvf haroopad-v0.13.1-x64.tar.gz

tar -zxvf data.tar.gz
sudo cp -R ./usr /

tar zxf control.tar.gz
chmod 755 postinst
sudo ./postinst
Para solucionar el problema de que no se ve el icono se han de realizar las siguientes modificaciones en el fichero /usr/share/applications/Haroopad.desktop.
Se ha de reemplazar la linea Icon=haroopad por Icon=/usr/share/icons/hicolor/128x128/apps/haroopad.png.

atom

Como editor de código he elegido a atom por su simplicidad y su capacidad de ampliarse con plugins.

Instalación:

El paquete de instalación lo he descarado desde la página de atom.
El link de descarga que he utilizado es: https://atom.io/download/rpm y la descarga la he realizado dentro del directorio ~/Descargas
Los comandos que he utilizado para realizar la instalación son:
cd ~/Descargas
sudo rpm -ivh atom.x86_64.rpm
En caso de error por dependencias se puede instalar ejecutando los siguientes comandos:
cd ~/Descargas
sudo dnf install atom.x86_64.rpm

plugins atom

Los plugins que he instalado dentro de atom han sido los siguientes:
  • AngularJS support in Atom
  • atom-beautify
  • atom-formatter-jsbeautify
  • Markdown preview

Control de versiones

Como control de versiones voy a usar git, ya que mi intención es publicar sobre github.
Para acceder a los proyectos guardados en GitHub he instalado los siguientes clientes de Git.

Git

Este es el cliente usado para cuando quiera trabajar por línea de comandos.
Para la instalación he ejecutado los siguientes comandos:
sudo dnf install git

SmartGit

Como cliente gráfico he elegido SmartGit.
Requerimientos
Se ha de instalar java:
sudo dnf install java
Instalación:
El paquete de instalación lo he descarado desde la página de SmartGit.
El link de descarga que he utilizado es: http://www.syntevo.com/smartgit/download?file=smartgit/smartgit-linux-7_1_2.tar.gz y la descarga la he realizado dentro del directorio ~/Descargas
Los comandos ejecutados para la instalación han sido
cd ~/Descargas
tar zxvf smartgit-linux-7_1_2.tar.gz -C /tmp/
sudo mv /tmp/smartgit /opt/
sudo ln -s /opt/smartgit/bin/smartgit.sh /usr/local/bin/smartgit

sudo /opt/smartgit/bin/add-menuitem.sh

Información adicional:

Instalación de AngularJS y NodeJS

AngularJS

No requiere instalación.

Información adicional

NodeJS

Para la instalación de NodeJS he elegido la última versión (en el momento de escribir el artículo es la 6.x) y he ejecutado los siguientes comandos:
su -
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
dnf -y install nodejs npm gcc-c++ make
Información adicional

bower

Los comandos que he utilizado para realizar la instalación de Bower son:
npm install -g bower

Grunt

Los comandos que he utilizado para realizar la instalación de Grunt son:
npm install -g grunt-cli

jueves, 23 de junio de 2016

Información sobre la CPU de la cubietruck (cubieboard 3)

Finalidad de artículo

La finalidad de este artículo es ampliar la información sobre el estado de la cubietruck que creé anteriormente y ampliar la información a mostrar en la web generada en el artículo anterior.

Nuevos comandos instalados

htop

htop es un visor de procesos interactivo para Linux. Es una aplicación en modo texto (para consola o terminales X) y requiere ncurses.
apt-get install htop

Scripts adicionales con información de CPU y memoria

Información del uso de CPU global:

El nombre usado para el script ha sido val_CPU.sh y se ha guardado dentro de /home/linaro/scripts.
El script realiza 2 lecturas del fichero /proc/stat con una diferencia de tiempo de 1 segundo, de esta forma resta las dos lecturas y devuelve el uso de CPU durante el último segundo. La variable que consulta es cpu.

Contenido del script

#!/bin/bash

function valor_USUARIO ()
{
    CPU_AUX=$2
    echo $CPU_AUX
}

function valor_NICE ()
{
    CPU_AUX=$3
    echo $CPU_AUX
}

function valor_SISTEMA ()
{
    CPU_AUX=$4
    echo $CPU_AUX
}

function valor_IDLE ()
{
    CPU_AUX=$5
    echo $CPU_AUX
}

INT_CPU1=$(cat /proc/stat | grep cpu | head -n1)
sleep 1
INT_CPU2=$(cat /proc/stat | grep cpu | head -n1)

CPU_USUARIO1=`valor_USUARIO $INT_CPU1`
CPU_USUARIO2=`valor_USUARIO $INT_CPU2`

CPU_NICE1=`valor_NICE $INT_CPU1`
CPU_NICE2=`valor_NICE $INT_CPU2`

CPU_SISTEMA1=`valor_SISTEMA $INT_CPU1`
CPU_SISTEMA2=`valor_SISTEMA $INT_CPU2`

CPU_IDLE1=`valor_IDLE $INT_CPU1`
CPU_IDLE2=`valor_IDLE $INT_CPU2`

CPU_USUARIO=`expr $CPU_USUARIO2 - $CPU_USUARIO1`
CPU_NICE=`expr $CPU_NICE2 - $CPU_NICE1`
CPU_SISTEMA=`expr $CPU_SISTEMA2 - $CPU_SISTEMA1`
CPU_IDLE=`expr $CPU_IDLE2 - $CPU_IDLE1`

CPU_TOTAL=`expr $CPU_USUARIO + $CPU_SISTEMA + $CPU_NICE`
CPU_MAXIMA=`expr $CPU_TOTAL + $CPU_IDLE`

# RATIO_CPU_USUARIO=`expr $CPU_USUARIO \* 100 / $CPU_MAXIMA`
# RATIO_CPU_SISTEMA=`expr $CPU_SISTEMA \* 100 / $CPU_MAXIMA`
RATIO_CPU_TOTAL=`expr $CPU_TOTAL \* 100 / $CPU_MAXIMA`

echo "$RATIO_CPU_TOTAL"

Ejemplo de llamada

/home/linaro/scripts/var_CPU.sh

Ejemplo de resultado

53

Información del uso de uno de los cores de la CPU:

El nombre usado para el script ha sido val_CPU_id.sh y se le pasa un parámetro con el identificador del core.
El identificador de core empieza en 0.
El script realiza 2 lecturas del fichero /proc/stat con una diferencia de tiempo de 1 segundo, de esta forma resta las dos lecturas y devuelve el uso de CPU durante el último segundo. La variable que consulta es cpu?, siendo ? el número de core deseado.

Contenido del script

#!/bin/bash

function valor_USUARIO ()
{
    CPU_AUX=$2
    echo $CPU_AUX
}

function valor_NICE ()
{
    CPU_AUX=$3
    echo $CPU_AUX
}

function valor_SISTEMA ()
{
    CPU_AUX=$4
    echo $CPU_AUX
}

function valor_IDLE ()
{
    CPU_AUX=$5
    echo $CPU_AUX
}

INT_CPU1=$(cat /proc/stat | grep cpu$1)
sleep 1
INT_CPU2=$(cat /proc/stat | grep cpu$1)

CPU_USUARIO1=`valor_USUARIO $INT_CPU1`
CPU_USUARIO2=`valor_USUARIO $INT_CPU2`

CPU_NICE1=`valor_NICE $INT_CPU1`
CPU_NICE2=`valor_NICE $INT_CPU2`

CPU_SISTEMA1=`valor_SISTEMA $INT_CPU1`
CPU_SISTEMA2=`valor_SISTEMA $INT_CPU2`

CPU_IDLE1=`valor_IDLE $INT_CPU1`
CPU_IDLE2=`valor_IDLE $INT_CPU2`

CPU_USUARIO=`expr $CPU_USUARIO2 - $CPU_USUARIO1`
CPU_NICE=`expr $CPU_NICE2 - $CPU_NICE1`
CPU_SISTEMA=`expr $CPU_SISTEMA2 - $CPU_SISTEMA1`
CPU_IDLE=`expr $CPU_IDLE2 - $CPU_IDLE1`

# CPU_USUARIO=$(cat /proc/stat | grep cpu0 | cut -f2 -d " ")
# CPU_NICE=$(cat /proc/stat | grep cpu0 | cut -f3 -d " ")
# CPU_SISTEMA=$(cat /proc/stat | grep cpu0 | cut -f4 -d " ")
# CPU_IDLE=$(cat /proc/stat | grep cpu0 | cut -f5 -d " ")

CPU_TOTAL=`expr $CPU_USUARIO + $CPU_SISTEMA + $CPU_NICE`
CPU_MAXIMA=`expr $CPU_TOTAL + $CPU_IDLE`

# RATIO_CPU_USUARIO=`expr $CPU_USUARIO \* 100 / $CPU_MAXIMA`
# RATIO_CPU_SISTEMA=`expr $CPU_SISTEMA \* 100 / $CPU_MAXIMA`
RATIO_CPU_TOTAL=`expr $CPU_TOTAL \* 100 / $CPU_MAXIMA`

echo $RATIO_CPU_TOTAL

Ejemplo de llamada

/home/linaro/scripts/var_CPU_id.sh 0

Ejemplo de resultado

5

Página web modificada para mostrar la nueva información obtenida

<?php

echo '<Hr /><H2>CPU</H2>';

echo '<Hr /><h3>Uso CPU</h3> <hr />';
echo '<pre>';
echo 'CPU total: ';
echo exec('/home/linaro/scripts/var_CPU.sh');
echo ' % ';
echo 'CPU 0: ';
echo exec('/home/linaro/scripts/var_CPU_id.sh 0');
echo ' % ';
echo 'CPU 1: ';
echo exec('/home/linaro/scripts/var_CPU_id.sh 1');
echo ' %';
echo '</pre>';

echo '<Hr /><h3>Temperatura CPU</h3><hr />';
echo '<pre>';
$ultima_linea = system('/home/linaro/scripts/temperatura.sh', $retval);
echo '</pre>';

echo '<Hr />';


echo '<br/>';
echo '<br/>';


echo '<Hr /><H2>DISCO DURO</H2>';

echo '<Hr /><h3>Temperatura disco duro</h3><hr />';
echo '<pre>';
$ultima_linea = system('sudo hddtemp /dev/sda', $retval);
echo '</pre>';

echo '<Hr /><h3>Espacio en disco</h3><hr />';
echo '<pre>';
$ultima_linea = system('df -h', $retval);
echo '</pre>';

echo '<Hr /><h3>SMART disco duro</h3><hr />';
echo '<pre>';
$ultima_linea = system('sudo smartctl -A /dev/sda', $retval);
echo '</pre>';

echo '<Hr />';
?>