Translate

lunes, 16 de octubre de 2017

Acceso a VNC por medio de java applet mediante openjdk , plugin icedtea desde Firefox en CentOS 6

En CentOS ( 6.9 por ejemplo) se puede emplear el Java del OpenJDK que ya viene del repositorio de CentOS  o también se puede usar el Java que ofrece Oracle. Para simplificar la instalación emplearemos el java de OpenJDK, sin embargo los pasos serán muy similares si se emplea el Java de Oracle.

Los siguientes pasos los haremos como root:
  •  Verificamos la versión de java que estamos utlizando:
# java -version
java version "1.7.0_151"
OpenJDK Runtime Environment (rhel-2.6.11.0.el6_9-x86_64 u151-b00)
OpenJDK 64-Bit Server VM (build 24.151-b00, mixed mode)

  •  Verificamos si existen otras versiones de java e intentamos seleccionar la más nueva:
 alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*  3           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 3

  • Ahora levantamos el Firefox como usuario normal y verificamos primero si está activo el plugin. En el menú de Firefox en Add-Ons->plugins verificamos los plugins instalados:



  • El plugin que permite ejecutar los applets de Java es el correspondiente a "IcedTea-Web". Sino está se puede instalar con: 
 yum -y install icedtea-web

  • Una vez instalado el plugin hay que salir de Firefox y volver a entrar para ver si ya tiene habilitado el plugin.
  • El siguiente paso es levantar el servidor de VNC en el puerto deseado y verificar con el cliente de VNC que se puede acceder a este. Por ejemplo, para levantar el VNC server en el DISPLAY=:8.0 , ponemos:
vncserver :8
  •  y verificamos en la misma màquina poniendo:
  •  
    vncviewer :8
    o también especificando la IP:
    vncviewer 127.0.0.1:8
     
  • El siguiente paso es habilitar los permisos de acceso del applet de Java. Se puede hacer por sitio (hostname/IP) o se pueden dar los permisos por applet (sin importar la IP y el puerto). Sino se le dan los permisos necesarios, aparecerán mensajes acceso denegado similar a las siguientes ventanas:


  • Para modificar las políticas de acceso del applet podemos ejecutar (como usuario normal) el comando:
 policyeditor.itweb

  • O ejecutarlo seleccionando del menú System->Preferences la opción "IcedTea-Web Policy Editor":

  • Nota: En algunas instalaciones no está creado el directorio security, por lo que pondremos:
mkdir -p ~/.config/icedtea-web/security
  •  A continuación seleccionamos del menú 'File' la opción 'Open default policy file' . Esto hará que para el usuario normal se vaya a crear un archivo llamado 'java.policy' el cual será creado dentro uno de los subdirectorios del directorio .config del  usuario. Por ejemplo:


  • Ahora le habilitamos los permisos deseados y guardamos la configuración:


  • Guardamos los cambios y cerramos.  Esta configuración queda guardada en el archivo java.policy de la siguiente manera:
 [alumno@localhost ~]$ grep net .config/icedtea-web/security/java.policy
    permission java.net.SocketPermission "*", "resolve,listen,connect,accept";

  • Es decir, no importa para qué dirección IP y puerto ( "*" ), se le habilitaràn los permisos de "resolve,listen,connect, accept".
  • Para que esta configuración sea tomada por la sesiòn del usuario, es necesario cerrar la sesión y volverla a abrir. Con esto ya podemos entrar con el Firefox a la aplicación (applet) del cliente de VNC. Ejemplo de ventanas:


    miércoles, 5 de julio de 2017

    Corrección de contextos de seguridad de SELinux en CentOS 6 (6.9)

    Por omisión RedHat Enterprise Linux, CentOS, etc. vienen con contextos de seguridad de SELinux para sus sistemas de archivos. Si se intenta realizar cambios en la estructura del sistema de archivos, entonces el SELinux empieza a enviar una serie de avisos de que no se tiene acceso a un archivo , programa , etc.

    Los cambios en la estructura pueden ser debido a que desde el principio no se calculó correctamente el tamaño de las particiones o volúmenes lógicos. Por omisión el instalador pone una partición relativamente pequeña para el directorio raíz ( / ) , en mi caso solo 50 GB del total de 4.5 TB, 500 MB para la partición primaria de /boot y el resto ( más de 4 TB para /home). Este tipo de particionamiento no toma en cuenta de que las bases de datos, el servidor de páginas web, etc., se encuentran ubicados en /var. Lo correcto sería crear una partición aparte y montarla en /var dándole al menos la mitad de la capacidad del disco duro. Por ejemplo en mi caso, serían unos 2TB.

    Cuando ya está hecha la instalación de los programas tales como la base de datos y el servidor WWW en una partición '/' pequeña, se hace entonces necesario redireccionar los directorios a los espacios físicos que quedan libres. Así por ejemplo, dentro de /home , se decidió crear un nuevo directorio '/' (root) para que allí estuvieran los archivos que ya no caben en el directorio '/' original. Por ejemplo:

    ls -al /home/ext-root-fs/
    total 12
    drwxr-xr-x.  3 root root 4096 Oct 31  2016 .
    drwxr-xr-x. 23 root root 4096 Jul  4 21:24 ..
    drwxr-xr-x.  3 root root 4096 Oct 31  2016 var

    En este caso ext-root-fs (extensión del sistema de archivos de root), contiene un directorio (var), el cual a su vez tiene el directorio lib que es donde está instalado el RDBMS PostgreSQL, así como todos los demás programas que normalmente se instalan en /var/lib. para hacer esto simplemente se creó una liga en /var:

    ls -al /var/lib
    lrwxrwxrwx. 1 root root 25 Oct 31  2016 /var/lib -> /home/ext-root-fs/var/lib

    ( con ln -s /home/ext-root-fs/var/lib /var/lib )

    Aunque esta es una solución sencilla, el problema es que el SELinux se da cuenta que los archivos que normalmente van en /var se están metiendo en un contexto muy diferente que es el de /home. Y es aquí donde empiezan las complicaciones del SELinux.

    Para verificar si está activado el SELinux. Ponemos:

    getenforce
    Enforcing

    Por omisión el archivo que tiene la política de habilitación del SELinux es:

    cat /etc/selinux/config | grep SELINUX
    # SELINUX= can take one of these three values:
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    SELINUXTYPE=targeted

     Sin necesidad de reiniciar la máquina, podemos deshabilitar y habilitar SELinux con setenforce:

    setenforce 0
    getenforce
    Permissive
    setenforce 1
    getenforce
    Enforcing

    Los permisos de acceso a archivos, directorios, puertos , etc. se realizan mediante los valores booleanos de SELinux, cada uno de los  cuales tiene un nombre predefinido.

    Por ejemplo si queremos ver todos los booleanos de SELinux que existen, ponemos:

    getsebool -a

    que en mi caso son 237:

      getsebool -a  | wc -l
    237

     Si quiero conocer todos los booleanos relacionados con httpd, le pongo:

    getsebool -a | grep httpd 

    Si quiero ver si los usuarios pueden tener en su home páginas web lo verifico con :

    getsebool -a | grep httpd  | grep home
    httpd_enable_homedirs --> on

    En mi caso está activo este booleano pero se puede desactivar/activar:

    setsebool httpd_enable_homedirs 0
    getsebool httpd_enable_homedirs
    httpd_enable_homedirs --> off
    setsebool httpd_enable_homedirs 1
    getsebool httpd_enable_homedirs

    httpd_enable_homedirs --> on


    Ahora bien, para corregir el problema del contexto mencionado anteriormente tenemos que hacer o siguiente.

    Lo primero, por si acaso, es restaurar el contexto de seguridad de todos los Filesystems:

    restorecon -r -v /

    (-r es recursivo y -v muestra los cambios realizados).

    Nota: Esto puede tardar decenas de minutos. Depende del número de archivos.

    Lo siguiente es analizar si está funcionando correctamente el audit:

    service auditd status

    Y verificar si está guardando mensajes en :

    ls -al /var/log/audit




    Suponiendo de que está trabajando correctamente el audit, queda ver si el setroubleshootd  está enviando correctamente los reportes de SELinux. En mi caso me di cuenta que no era así, ya que al darle al comando sealert , no me mostraba nada ( No alerts) . Para verficar el problema le puse:

    audit2allow -w -a

    -a significa todas las bitácoras
    -w que explique cual es el problema.

    En  mi caso habían unas lineas tales como:

    type=AVC msg=audit(1499299412.626:38955212): avc:  denied  { write } for  pid=25797 comm="setroubleshootd" name="setroubleshoot_database.xml" dev=dm-2 ino=283248333 scontext=system_u:system_r:setroubleshootd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:user_home_t:s0 tclass=file
        Was caused by:
            Unknown - would be allowed by active policy
            Possible mismatch between this policy and the one under which the audit message was generated.

            Possible mismatch between current in-memory boolean settings vs. permanent ones.



    El número 1499299412.626 en audit( , es el número de segundos desde 1970-01-01 tiempo UTC. Para saber a qué fecha hora, min, seg corresponde, podemos poner:

    date -d @1499299412.626
    Wed Jul  5 19:03:32 CDT 2017

    o si se tiene un date de una versión más vieja que no acepta la '@':

    date -d '1970-01-01 UTC + 1499299412.626 seconds'
    Wed Jul  5 19:03:32 CDT 2017



    El problema es que el contexto de setroubleshootd system_u:object_r:user_home
    Para corregir esto, buscamos primero el nombre correspondiente del contexto con:

    audit2allow -a

    En mi caso aparecieron unas lineas como estas:

    #============= setroubleshootd_t ==============

    allow setroubleshootd_t user_home_t:file { write setattr };


    Para 'corregir' el problema se ejecutó el comando que genera los permisos de los accesos con:

    audit2allow -a -M setroubleshootd_t
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:

    semodule -i setroubleshootd_t.pp

    Y  se ejecutó el comando correspondiente:

    semodule -i setroubleshootd_t.pp


    Lo mismo se hizo con el contexto de httpd:

     audit2allow -a  


    #============= httpd_t ==============
    allow httpd_t home_bin_t:file getattr;

     audit2allow -a -M  httpd_t
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:

    semodule -i httpd_t.pp

    semodule -i httpd_t.pp


    Otro ejemplo:
    Debido a que /tmp está en root y esta partición había quedado pequeña, se decidió hacer otro directorio en /home/tmp para guardar allí los archivos temporales.
    Por ejemplo el owncloud requiere un directorio temporal para guardar allí los archivos que se suben antes de procesarlos y enviarlos a su destino original.  Si el owncloud no encuentra suficiente espacio para crear los archivos temporales, entonces envía el error "Failed to write to disk". Para arreglar estom se tuvo que hacer lo siguiente:

    1. Modificar el  archivo /etc/php.ini, cambiando el parámetro upload_tmp_dir, para que quede: upload_tmp_dir = /home/tmp
    2. Agregar el contexto de los atributos del directorio de /tmp y ponérselos a /home/tmp. Esto se hizo con:
    # ls -lZd /tmp
    drwxrwxrwt. root root unconfined_u:object_r:tmp_t:s0   /tmp
    # ls -lZd /home/tmp
    drwxrwxrwt. root root unconfined_u:object_r:user_home_dir_t:s0 /home/tmp
    # semanage fcontext -a -t  tmp_t /home/tmp
    # restorecon -R /home/tmp







    Ahora podemos verificar el contexto de /home/tmp y podemos ver que el contexto de /home sigue siendo el mismo:

    # ls -lZd /home/tmp
    drwxrwxrwt. root root unconfined_u:object_r:tmp_t:s0   /home/tmp
    # ls -lZd /home
    drwxr-xr-x. root root system_u:object_r:home_root_t:s0 /home


    Actualización: Contexto para nginx y drupal 7:


    Si sale error de que no puede crear archivos temporales o escribir. Modificar el contexto de los archivos con:

    cd /usr/share/nginx
    chcon -t httpd_sys_rw_content_t -R html

    Es decir, nos cambiamos al directorio donde están los archivos html del nginx y cambiamos el contexto de los archivos poniéndole el correcto (en forma recursiva).

    Actualización 2020-03-05: Contexto para nginx en CentOS 6

    El nginx mediante el php-fpm, impedía la escritura de archivos en un subdirectorio ubicado dentro de /usr/share/nginx/html :

    grep php-fpm  /var/log/audit/audit.log| grep denied  | tail -1
    type=AVC msg=audit(1583456547.180:181159): avc:  denied  { write } for  pid=6206 comm="php-fpm" name="SI2017dea4ebfedd5b9a0d8e9c16b5ce9ee04f_0012345.png" dev=dm-0 ino=3398201 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file
    [root@ingenieria qr]# grep php-fpm  /var/log/audit/audit.log| grep denied  | tail -1  | audit2why


    Para verificar el contexto del acceso se empleó el comando:

    grep php-fpm  /var/log/audit/audit.log| grep denied  | tail -1  | audit2why
    type=AVC msg=audit(1583456547.180:181159): avc:  denied  { write } for  pid=6206 comm="php-fpm" name="SI2017dea4ebfedd5b9a0d8e9c16b5ce9ee04f_0012345.png" dev=dm-0 ino=3398201 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

        Was caused by:
            Missing type enforcement (TE) allow rule.

            You can use audit2allow to generate a loadable module to allow this access.


    El problema es que el contexto fuente: 
    scontext=unconfined_u:system_r:httpd_t:s0,
    no coincide con el contexto destino:
    tcontext=unconfined_u:object_r:usr_t:s0, 
    por lo que se hace necesario cambiar el contexto del archivo destino.


    Para que persistan los cambios de contexto es necesario poner:

    semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html(/.*)?"
    restorecon -R -v /usr/share/nginx/html


    Ejemplo de corrección de contexto en otro directorio ( /home/ext-root-fs/var/www
    )
    :

    semanage fcontext -a -t httpd_sys_content_t "/home/ext-root-fs/var/www(/.*)?"
    restorecon -R -v /home/ext-root-fs/var/www

    Actualización 2021-10-02: Corrección de contexto para un archivo script en CentOS 6

     

    #Verificación de contexto del script
    # ll -Z script
    -rwxr-xr-x. root root unconfined_u:object_r:user_home_t:s0 script

    #Corrección de contexto
    # chcon  system_u:system_r:user_home_t:s0 script
    # ls -alZ script
    -rwxr-xr-x. root root system_u:system_r:user_home_t:s0 script


    Las siguientes ligas pueden servir como referencias:
    https://wiki.centos.org/HowTos/SELinux
    https://wiki.centos.org/TipsAndTricks/SelinuxBooleans

    http://www.serverlab.ca/tutorials/linux/administration-linux/troubleshooting-selinux-centos-red-hat/

    https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

    RedHat:

    5.6.2. Persistent Changes: semanage fcontext

    https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Fixing_Problems-sealert_Messages.html
    https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow.html
    https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/sect-Security-Enhanced_Linux-Troubleshooting-Fixing_Problems.html


    http://melikedev.com/2012/09/28/centos-sealert-convert-audit-messages-into-human-readable-and-understandable-format/


    Contexto para Drupal:
    https://www.drupal.org/forum/support/post-installation/2009-09-20/error-when-trying-to-upload-logo-file-upload-error-could#comment-12601586


    Contexto de nginx:
    Contexto de SELinux en nginx


    Tutorial:

    1. https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts
    2. https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-2-files-and-processes
    3. https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-3-users














    miércoles, 28 de junio de 2017

    Instalación de Blender 2.71 en CentOS 6 ( 6.9 )

    Translated text

    • Instalar EPEL  y wget  (como root):

    yum -y install epel-release wget


    • Instalar repositorio rpmfusion :
    (ver https://rpmfusion.org/Configuration )

    sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm


    • Bajar el blender precompilado de:
    wget -c http://lab.anahuac.mx/rpms/blender-2.71-linux-glibc211-x86_64.tar.bz2

    también se puede de:
    wget -c http://download.blender.org/release/Blender2.71/blender-2.71-linux-glibc211-x86_64.tar.bz2

    • Descomprimirlo:

    tar xvfj blender-2.71-linux-glibc211-x86_64.tar.bz2

    • Cambiarse al directorio y copiar su contenido a /usr/local/bin:

    cd blender-2.71-linux-glibc211-x86_64

     su -c "cp -R * /usr/local/bin"

    • Crear icono de ejecución (launcher) en el Desktop:

    cd
    cd Desktop
    echo '#!/usr/bin/env xdg-open

    [Desktop Entry]
    Version=1.0
    Type=Application
    Terminal=false
    Icon[en_US]=/usr/local/bin/icons/32x32/apps/blender.png
    Exec=blender
    Name[en_US]=Blender 2.71
    Comment[en_US]=Blender 2.71
    Name=Blender 2.71
    Comment=Blender 2.71
    Icon=/usr/local/bin/icons/32x32/apps/blender.png' > blender.desktop


    chmod 755 blender.desktop


    • Ejecutar en terminal poniendo:

    blender &
    _________________________________________________________________________________

    Nota: También se puede intentar instalar el rpm, sin embargo esta versión no se visualiza correctamente:

    •  Bajar el rpm de Blender:

    wget http://lab.anahuac.mx/rpms/blender-2.49b-22.1.el6.x86_64.rpm

    También se puede bajar de :

    http://downloads.naulinux.ru/pub/NauLinux/6x/x86_64/sites/School/RPMS//blender-2.49b-22.1.el6.x86_64.rpm

    • Instalar Blender:

    yum -y install ./blender-2.49b-22.1.el6.x86_64.rpm

    Instalación de klogic 4.02 en CentOS 6 (6.9)

    Translated text

    • Cerciorarse de que se tiene instalado el EPEL. Por ejemplo (como root):

    sudo yum -y install epel-release

    • Instalar los paquetes de desarrollo de kdebase y kdelibs; los compiladores gcc  y gcc-c++; el cmake y el wget :
     yum -y install kdebase-devel kdelibs-devel gcc gcc-c++ cmake wget

    • Bajar la versión 4.02 de klogic :
    wget http://www.a-rostin.de/klogic/releases/klogic-4.0.2.tar.gz

    • Descomprimirlo, cambiarse al directorio, crear directorio de compilación build , cambiarse a este último:
    tar xvfz  klogic-4.0.2.tar.gz
    cd  klogic-4.0.2 
    mkdir build 
    cd build

    •  Ejecutar comando cmake (incluyendo los dos últimos puntos ( .. ), compilarlo e instalarlo:
    cmake -DCMAKE_INSTALL_PREFIX=$KDEDIRS -DCMAKE_BUILD_TYPE=Debug ..
    make 
    su -c "make install"


    •  Crear liga para que klogic4 apunte a klogic:
    cd /usr/bin
    su -c "ln -s klogic klogic4"

     
     Ahora se puede ejecutar desde el menú Applications->Other->klogic4. O en linea de comandos poner simplemente: klogic .

    Instalación de RStudio en Centos 6

    Translated text

    • Lo más sencillo es bajar los rpms del rstudio e instalarlos. Para CentOS 6 se recomienda la versión rstudio-0.98.1103: 

    wget http://download1.rstudio.org/rstudio-0.98.1103-x86_64.rpm 
    sudo yum -y install ./rstudio-0.98.1103-x86_64.rpm 



    La liga de esto está en: 
    https://support.rstudio.com/hc/en-us/articles/206569407-Older-Versions-of-RStudio-Desktop ) 


    • También se puede usar el rstudio-server que es el que recomienda rstudio: 


    wget https://download2.rstudio.org/rstudio-server-rhel-1.0.143-x86_64.rpm
    sudo yum install --nogpgcheck rstudio-server-rhel-1.0.143-x86_64.rpm


    (
    La liga de esto está en:
    http://www.rstudio.com/products/rstudio/download-server/
    )

    Para usar el rstudio-server hay que poner:


    http://<hostname o ip>:8787


    El usuario y contraseña son las del sistema operativo. Ver también:


    https://support.rstudio.com/hc/en-us/articles/200552306-Getting-Started




     

    martes, 27 de junio de 2017

    Instalación de 'Keyboard Layout Switcher' ( a.k.a. Keyboard indicator ), "cambiador de distribución de teclado" de XFCE4 en Linux CentOS 6

    Translated text

    El XFCE4 que instala CentOS 6 tiene una herramienta llamada 'Keyboard' que permite configurar diferentes distribuciones de teclado. Para seleccionar el teclado a utilizar en un momento dado, es necesario ir al menú de Settings->Keyboard->Layout de y seleccionar el teclado correspondiente. Ejemplo:



    Sin embargo, esta herramienta no es cómoda para cambiarse de teclado rápidamente. En este caso es más conveniente utilizar el xfce4-xkb-plugin que permite cambiarse haciendo un solo click sobre el texto o imagen del indicador (ver imágenes más abajo). Por alguna razón que desconozco, este plugin no viene preinstalado en CentOS 6 y es necesario compilarlo. Aquí se explica como hacerlo:

    • Instalar como root las bibliotecas de desarrollo necesarias para compilar el xfce4-xkb-plugin-0.4.3-1.el6.x86_64:
    sudo yum -y install libxfce4util-devel libxfce4ui-devel xfce4-panel-devel libxklavier-devel libxfcegui4-devel
    • Bajar la versión src.rpm del xfce4-xkb-plugin-0.4.3-1 y compilarala. Nota: las versiones más recientes de este plugin requieren de bibliotecas más actualizadas que por el momento no las tiene el CentOS 6.9. La versión probada que sí compila se obtuvo de:
    http://vault.centos.org/5.11/extras/SRPMS/xfce4-xkb-plugin-0.4.3-1.el5.centos.src.rpm


     [
    Es decir, sí existe la fuente para CentOS 5
    También se puede buscar otros paquetes en:
    https://centos.pkgs.org/5/centos-extras-i386/xfce4-xkb-plugin-0.4.3-1.el5.centos.i386.rpm.html
     ]

    • Ejecutar entonces lo siguiente para bajar el código fuente para rpm (puede hacerse como usuario normal sin privilegios de root) :
    wget http://vault.centos.org/5.11/extras/SRPMS/xfce4-xkb-plugin-0.4.3-1.el5.centos.src.rpm
    rpm -ivh xfce4-xkb-plugin-0.4.3-1.el5.centos.src.rpm
    • Construir el rpm a partir del spec y la fuente instaladas:
     cd ~/rpmbuild/SPECS/ ; rpmbuild xfce4-xkb-plugin.spec

    •  Cambiarse al directorio del rpm creado según sea su plataforma (32 o 64 bits). En mi caso es plataforma de 64 bits y le puse:
    cd ~/rpmbuild/RPMS/x86_64/
    •  Instalar como root el rpm :
     sudo yum -y install ./xfce4-xkb-plugin-0.4.3-1.el6.x86_64.rpm
    • Una vez instalado  el plugin, ir al panel y con el botón derecho del mouse haciendo click sobre este, agregar el plugin:

    • Aparecerá un menú donde se puede seleccionar el icono del cambiador de teclado:

    •  Una vez agregado del lado derecho aparecerá el indicador del teclado como una imagen de bandera ( o texto sino tiene imagen). Aquí se puede ver la distribución de teclado de Latinoamérica y de España:





    Nota: Los teclados indicados son los que aparecen en la aplicación 'Keyboard' de 'Settings' y son los que se seleccionaron en dicha aplicación. Al parecer esta versión de plugin no permite modificar directamente las distribuciones deseadas. Sin embargo, esto se puede seguir haciendo mediante la aplicación 'Keyboard' de 'Settings'.

    Verificar fecha de creación de la computadora viendo el BIOS desde Linux


    Translated text


     Check computer's creation date looking at the ROM BIOS from Linux:

    En general, la fecha del BIOS es la versión del firmware. Si no se ha actualizado el firmware del BIOS, se puede considerar como la fecha aproximada de manufactura de la computadora.

    Si el sistema no es UEFI. Se puede como root ejecutar:

    (dd if=/dev/mem skip=$((1024*1024-11)) bs=1 count=8 | hexdump -C ) 2>/dev/null 

    O con su :

    su -c '(dd if=/dev/mem skip=$((1024*1024-11)) bs=1 count=8 | hexdump -C ) 2>/dev/null'
    '


    La fecha aparece como 'Mes/Dia/Año'. 

    Ejemplo de salida:


    (dd if=/dev/mem  skip=$((1024*1024-11)) bs=1 count=8 | hexdump -C  ) 2>/dev/null
    00000000  30 33 2f 31 31 2f 31 33                           |03/11/13|
    00000008  
     

    También se puede (como root):

    echo `dd if=/dev/mem skip=$((1024*1024-11)) bs=1 count=8 2>/dev/null`

    o mejor:

    dd if=/dev/mem bs=1 count=8 skip=$((1024*1024-11)) 2>/dev/null;echo 

     

    En los sistemas más recientes como UEFI, mediante el estándar definido como SMBIOS, se puede ubicar la información del firmware. Esta información puede obtenerse mediante el comando dmidecode.

    Ver: man dmidecode

    Por ejemplo como root:

    dmidecode -s bios-release-date

    También se puede acceder a esta misma información como usuario común con, mediante el pseudoarchivo correspondiente al sistema:

    cat /sys/devices/virtual/dmi/id/bios_date

    Otra manera de ubicar en la memoria esta información es mediante la siguiente serie de comandos (como root):

    skip=$( dmidecode | head | grep "Table at" | cut -d x -f 2 | cut -f1 -d. )

    skip=$((16#$skip))

    dd if=/dev/mem skip=$skip bs=1 count=100 | hexdump -C

    Esto hace que primero se obtenga la dirección de memoria, en hexadecimal, de la tabla que contiene la información del DMI.

    El segundo comando convierte el número decimal a decimal

    El tercer comando lee desde la dirección original de la tabla 100 bytes y los convierte a ASCII gracias a hexdump. Dentro de esta información se puede encontrar la fecha del BIOS.




     

    sábado, 29 de abril de 2017

    Uso, empleo, formateo , creación de filesystems hfs y hfs+ / hfsplus con gparted en Linux CentOS 6

    Translated text
    • Es necesario habilitar los repositorios EPEL y elrepo:
     yum -y install epel-release.noarch
    rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
    •  Si se usan las herramientas de Paragon, es necesario también instalar un kernel más nuevo:
    yum -y --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel

    Montaje y uso de Filesystems (FS) con   diskdev_cmds ( hfs-tools, hfsplus-tools )

    •  Instalar los módulos del kernel para que puedan leer particiones con sistemas de archivos hfs y hfsplus (hfs+):
    yum -y install kmod-hfs kmod-hfsplus

    • Con esto ya se puede usar el mount. Para crear los filesystems hfs y hfsplus es necesario instalar mkfs.hfs y mkfs.hfsplus. Para ello se puede usar el software libre diskdev_cmds u opcionalmente el de Paragon

    Creación de Filesystems (FS) con   diskdev_cmds ( hfs-tools, hfsplus-tools )
    • Para CentOS 6 no encontré hfsplus-tools pero hay un programa equivalente que se llama diskdev_cmds y se puede bajar de rpm.pbone.net. Esta es la página:
    http://rpm.pbone.net/index.php3/stat/4/idpl/23514719/dir/centos_6/com/diskdev_cmds-332.14-3.2.x86_64.rpm.html

    • Y si existe aún el archivo , se puede instalar con:

    yum -y install ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/hrongyorgy/CentOS_CentOS-6/x86_64/diskdev_cmds-332.14-3.2.x86_64.rpm

    • El producto comercial Paragon tiene una versión de prueba y tiene algunas ventajas sobre la opción libre de hfs+. Home page:  
    Paragon software

    se desempaca el producto con :
    tar xvfz <archivo.tar.gz>

    • Y se instala empleando el script:
    ./install.sh
    By installing this software you accept the terms of End User License Agreement listed in License file.
    Continue installing? [yes/no/read].
    yes
    Searching and removing previously installed UFSD driver in /lib/modules/3.10.105-1.el6.elrepo.x86_64/
    Preparing to install
    Building driver to kernel 3.10.105-1.el6.elrepo.x86_64
    Install driver to kernel 3.10.105-1.el6.elrepo.x86_64
    Driver was installed to system
    which: no systemd in (/sbin:/bin:/usr/sbin:/usr/bin)
    which: no systemctl in (/sbin:/bin:/usr/sbin:/usr/bin)
    Installation complete!


    domingo, 12 de marzo de 2017

    Instalación de ambiente gráfico en instalación de CentOS 6.6 y CentOS 7 "Minimal"

    Translated text

    Después de realizar la instalación "Mínima" de CentOS 6.x, es necesario activar la tarjeta de red y que tome una dirección de IP. Para esto, es necesario identificar previamente los interfaces de red. Esto último lo podemos hacer entrando como root y ejecutando:

    ifconfig -a

    Para el caso de Centos 7.x se puede determinar el nombre de la tarjeta ejecutando como root:

    ip link

    En mi caso, la tarjeta de red tipo Ethernet está identificada con el nombre  'em1'. Le asignamos la dirección con:

    dhclient em1

    Una vez obtenida la dirección de red, procedemos a instalar el ambiente gráfico y el Firefox con los comandos:

    Si se desea instalar el Xfce, es necesario instalar el EPEL (Extra Packages for Enterprise Linux):

    Para las versiones más recientes de de CentOS 6 y para CentOS 7, es suficiente poner como root:

    yum  -y install epel-release

    En caso de que no se realice automáticamente la  instalación, se puede bajar primero el wget y mediante éste último instalar el paquete contenido en el url que se indica:

    yum -y install wget


    wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    yum -y install ./epel-release-6-8.noarch.rpm



    Ya instalado el EPEL en CentOS 6, se puede instalar el grupo de programas pertenecientes al ambiente gráfico XFCE:

    yum groupinstall Xfce

    O si se desea instalar el Gnome:



    
    
    yum -y groupinstall "Desktop" "Desktop Platform" "X Window System" "Fonts"

    yum -y install firefox


    En CentOS 7, para instalar el Xfce, es necesario indicar además que se instale el X11:

    yum groupinstall Xfce X11




    Después de esto ya es posible iniciar el sistema en ambiente gráfico. 

    En CentOS 6  se cambia al nivel de arranque 5 con:


    telinit 5

    Para que la próxima vez arranque en el nivel 5 es necesario editar como root el archivo /etc/inittab. Para ello, dentro del ambiente gráfico abrir una terminal y como root poner:
     
    gedit /etc/inittab
     
    Y donde dice:  "id:3:initdefault", modificarlo para que quede: 


    id:5:initdefault

    Guardar los cambios y si es necesario probar esto, será necesario reiniciar la máquina.




    En CentOS 7 es necesario, establecer el 'target' gráfico con:

    systemctl set-default graphical.target

    Que en realidad creará una liga

     
    Referencias:
    How to install Desktop Environments on CentOS 7?

    jueves, 16 de febrero de 2017

    Instalación de IDE de Arduino en Linux CentOS 6 y tarjetas Sparkfun


    Translated text

    1. (Estos 4 pasos son opcionales pero si tiene una tarjeta de Spakfun tendrá que seguirlos):
      1. El kernel que trae CentOS por default es la versión 2.6. En algunos casos, como es la tarjeta Sparkfun, la versión instalada no permitía acceder a la tarjeta del Arduino. En ese caso se recomienda instalar el kernel 3. Para ello es necesario primero instalar el repositorio 'elrepo.org' :
      2. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
        rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
        #o para CentOS 6.6: 
        yum -y install http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
        #o para CentOS 6.8: 
        yum -y install http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
        #o para CentOS 6.9/6.10: 
        yum -y install http://www.elrepo.org/elrepo-release-6-9.el6.elrepo.noarch.rpm 
         
         
         
      3. Instalar el kernel 'Long Term' del repositorio 'elrepo'. Opcionalmente también se puede instalar la parte de desarrollo por si se emplea además el VirutalBox y es necesario compilar los drivers de VirualBox:
      4. yum -y --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel
         
        
        
      5. Editar el grub.conf para que tenga un nuevo titulo , por ejemplo 'Arduino'. La siguiente linea pondrá 'Arduino donde encuentre en el tilte el kernel 3 o 4 de el repo:
      6.   
        sed -i 's/title.*[34]\..*elrepo.*/title Arduino/g' /etc/grub.conf
        
        
      7. Actualizar configuración del grub:
      8.  
        grub-install hd0
        












  • Instalar IDE de Arduino (como root), bajándolo preferentemente de arduino.cc o bajarlo de lab.anahuac.mx con:

  • 
    
    cd /usr/local
    wget http://lab.anahuac.mx/diaov/arduino/arduino-1.8.1-linux64.tar.xz
    tar xvfJ arduino-1.8.1-linux64.tar.xz
     
     



  • Crear liga:

  • ln -s arduino-1.8.1/ arduino
     




  • Agregar el directorio de instalación al PATH del sistema:

  • echo 'export PATH=$PATH:/usr/local/arduino' > /etc/profile.d/arduino.sh
     




  • Agregar el usuario al grupo de dialout, que es el grupo correspondiene a /dev/ttyACM*. Por ejemplo:

  •  
      usermod -a -G dialout alumno
    
    #O automáticamente, si ya se connectó el Arduino:
    
    usermod -a -G `ls -g /dev/ttyACM0 | cut -f3 -d' ' ` alumno
    







  • En el Desktop del usuario crear un launcher con:

  • cd ~/Desktop
    # ( o cd ~/Escritorio )
    
    cat > Arduino.desktop << FIN
    #!/usr/bin/env xdg-open
    
    [Desktop Entry]
    Version=1.0
    Type=Application
    Terminal=false
    Icon[es_MX]=/usr/local/arduino/lib/arduino.png
    Name[es_MX]=Arduino
    Exec=/usr/local/arduino/arduino
    Comment[es_MX]=Arduino IDE
    Name=Arduino
    Comment=Arduino IDE
    Icon=/usr/local/arduino/lib/arduino.png
    FIN
    chmod +x Arduino.desktop 
    
    







  • Si se instaló el nuevo kernel, es necesario reiniciar la máquina y seleccionar el arranque con el kernel indicado por el nuevo título.
  • Si no se instaló el nuevo kernel, solo es necesario salir de la cuenta del usuario y volver a entrar para que el ambiente de trabajo tome en cuenta los cambios de grupo y las variables de ambiente.
  • Probar el IDE Arduino con la cuenta del usuario. (Por ejemplo alumno)
  • Seleccionar del menú 'Tools' la tarjeta, el procesador y el puerto correspondientes.