Algo de Linux: febrero 2017

viernes, 24 de febrero de 2017

Script update.cmd para actualizar Windows en equipos Infolab

He creado un script update.cmd que me permite dos cosas:
  • Actualizar el software instalado mediante chocolatey.
  • Aplicar las actualizaciones de Windows Update descargadas mediante WSUS Offline Update en mi NAS.
update.cmd
@echo off
bcdedit /set {bootmgr} path \efi\microsoft\boot\bootmgfw.efi
choco upgrade -y all --except=puppet
net use z: \\nas\wsus
z:
cd client\cmd
call DoUpdate.cmd /verify /updatecpp /updatetsc /instdotnet4
shutdown -r -t 10
El script realiza las actualizaciones y reinicia el equipo para que se apliquen aquellas que puedan requerir un reinicio.

La idea es poder usarlo, al menos de momento, de forma manual y, posteriormente encajarlo en el sistema que permita actualizar Ubuntu y Window de forma desatendida.

La línea que contiene el comando bcdedit cambia el arranque por defecto a Windows. Utilizo este mecanismo para forzar un inicio en Windows después de la actualización. En el siguiente reinicio volverá a iniciarse mi cargador de arranque por defecto (rEFInd) porque tengo mecanismos que lo establecen como gestor de arranque por defecto tanto en Windows como en Ubuntu.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 23 de febrero de 2017

Hacer un debug de un cliente ldap

Para diagnosticar un problema de conexión a un servidor LDAP desde un cliente, podemos realizar una búsqueda en modo debug.

Por ejemplo, supongamos que queremos ver qué sucede al realizar una consulta con el usuario administrador mediante ldap seguro:
# ldapsearch -v -H ldaps://servidor -D cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es -W -x -b dc=instituto,dc=extremadura,dc=es -d1
Ahora bien, supongamos que queremos comprobar qué sucede cuando hacemos una consulta con el usuario replica mediante ldap no seguro:
# ldapsearch -v -H ldap://servidor -D cn=replica,dc=instituto,dc=extremadura,dc=es -W -x -b dc=instituto,dc=extremadura,dc=es -d1
Como podéis imaginar, con "-d num" estamos indicando el nivel de debug.
Publicado por primera vez en http://enavas.blogspot.com.es

Iniciar el servidor LDAP en modo debug

Si tenemos problemas con el servidor LDAP porque no inicia o porque algo no está funcionando bien, podemos parar el servicio y ejecutarlo en modo debug:
# slapd -h "ldapi:/// ldap:// ldaps://" -u openldap -g openldap -F /etc/ldap/slapd.d/ -d 256
Publicado por primera vez en http://enavas.blogspot.com.es

ldap_add: Other (e.g., implementation specific) error (80)

En ocasiones, LDAP puede mostrarnos un error al agregar nuevas entradas que suele estar motivado por un mal apagado:
ldap_add: Other (e.g., implementation specific) error (80)
additional info: index generation failed
Para solucionarlo, lo que podemos hacer es tomar la última copia de seguridad y restaurarla.
En los siguientes posts podéis econtrar información acerca de cómo realizar un backup y restaurarlo:
https://enavas.blogspot.com.es/2016/04/script-backup-ldap-realizar-un-backup.html
https://enavas.blogspot.com.es/2017/02/script-restore-ldap-restaurar-backup-de.html
Publicado por primera vez en http://enavas.blogspot.com.es

Establecer Windows como gestor de arranque por defecto desde Windows

En un post anterior, vimos como establecer rEFInd como gestor de arranque por defecto en Windows.
Si por alguna razón necesitamos hacer que Windows arranque por defecto, tan sólo tenemos que modificar la configuración de arranque de Windows mediante el editor de opciones de arranque bcdedit:
C:\Windows\System32> bcdedit /set {bootmgr} path \EFI\microsoft\boot\bootmgfw.efi
Publicado por primera vez en http://enavas.blogspot.com.es

GPO: Establecer rEFInd como gestor de arranque por defecto en el inicio de Windows

Creé una política que ejecuta bcdedit para establecer rEFInd como gestor de arranque por defecto en el apagado de Windows con el fin de asegurar que rEFInd sea siempre el cargador de arranque. Ahora bien, uno de mis proyectos es realizar un sistema de actualización desatendida tanto de Ubuntu como de Windows en los equipos de Infolab de forma desatendida fuera del horario de actividad. La parte de Ubuntu ya está lista, pero me falta por terminar la parte de Windows.

La cuestión es que, he tenido que cambiar la política que establece rEFInd como gestor de arranque por defecto para que en lugar de ejecutarse en el apagado de la máquina, lo haga en el inicio. De este modo, voy a poder forzar un reinicio en Windows cuando lo necesite.





Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 22 de febrero de 2017

Script restore-ldap: Restaurar backup de la configuración y/o la B.D. LDAP con configuración OLC

Como ya vimos en un post de abril de 2016, el script backup-ldap permite realizar un backup completo de LDAP con configuración OLC. Ésto significa que no sólo haremos un backup de los datos almacenados en el árbol ldap. También guardaremos la base de datos de configuración:
  • LDAP config (slapcat -n 0)
  • LDAP DIT (slapcat -n 1)
Los backups se guardan en el directorio /var/backups/ con nombres:
  • backup-config-ldap-$TIMESTAMP.ldif 
  • backup-db-ldap-$TIMESTAMP.ldif 
Donde el valor de TIMESTAMP se sustituirá por la fecha del día en que se realiza el backup en formato AAAAMMDD.

Para hacer más cómodo el procedimiento de restauración, he escrito un nuevo script restore-ldap que me permite restaurar la configuración de ldap, los datos almacenados en la B.D. o ambas cosas a la vez.

Sintaxis:
# restore-ldap [-h|--help]
# restore-ldap [-c|--config] backup-config-ldap-file [-d|--data] backup-data-ldap-file

Ejemplos de uso:
# restore-ldap -h
# restore-ldap --help
# restore-ldap -c backup-config-ldap-20170222.ldif
# restore-ldap -d backup-data-ldap-20170222.ldif
# restore-ldap -c backup-config-ldap-20170222.ldif -d backup-data-ldap-20170222.ldif

Publicado por primera vez en http://enavas.blogspot.com.es

martes, 21 de febrero de 2017

GPO: No mostrar la opción "Instalar actualizaciones y Apagar" en el cuadro de diálogo Apagar de Windows

He habilitado la directiva No mostrar la opción "Instalar actualizaciones y Apagar" en el cuadro de diálogo Apagar de Windows para que no se muestre esta opción a los usuarios en el cuadro de diálogo de Apagar.

Para acceder a la configuración de Windows Update abrimos el editor de administración de directivas de grupo gpmc.msc en el equipo que tiene instaladas las herramientas de administración remota rsat y abrimos la siguiente rama de opciones:
Configuración de Equipo
 └── Directivas
     └── Plantillas administrativas
         └── Componentes de Windows
             └── Windows Update

Y se nos mostrarán las directivas disponibles. Seleccionamos la que nos interesa:



Y la habilitamos:


Publicado por primera vez en http://enavas.blogspot.com.es

GPO: Desactivar el reinicio automático de actualizaciones durante las horas activas

Las actualizaciones de Windows Update sin control son un verdadero problema porque impiden el uso del equipo durante el tiempo en que se están aplicando, a veces incluso durante horas...

Para evitar que el sistema operativo se reinicie cuando los usuarios están utilizando Windows, he activado esta directiva que lo bloquea durante las horas de actividad definidas: En mi caso, de 8:00 a 15:00.

Para acceder a la configuración de Windows Update abrimos el editor de administración de directivas de grupo gpmc.msc en el equipo que tiene instaladas las herramientas de administración remota rsat y abrimos la siguiente rama de opciones:

Configuración de Equipo
 └── Directivas
     └── Plantillas administrativas
         └── Componentes de Windows
             └── Windows Update

Y tendremos acceso a las diferentes directivas:


Habilitamos la Directiva y establecemos el período de actividad en el que no deben realizarse reinicios:


Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 17 de febrero de 2017

GPO: Establecer rEFInd como gestor de arranque por defecto en Windows

Tengo montado rEFInd como gestor de arranque en equipos SIATIC e INFOLAB. 

Lo que hice para instalarlo fue crear un módulo puppet que lo instala desde Ubuntu. 

Ahora bien, como en ocasiones se perdía el arranque dual, para evitarlo, creé un script de inicio que se ejecuta en los niveles 0, 1 y 6 de Ubuntu para asegurar que rEFInd sea el gestor de arranque por defecto cuando el usuario arranque Ubuntu. Con ésto ya no lo perdía, pero si el usuario iniciaba Windows, seguía existiendo la posibilidad que se perdiese.

Para evitar que se perdiese el arranque dual de rEFInd al iniciar Windows,  he creado una política que ejecuta bcdedit para establecer rEFInd como gestor de arranque por defecto en el apagado de Windows:


Publicado por primera vez en http://enavas.blogspot.com.es

Gestionar el dominio de Windows implementado con Zentyal

Para gestionar los sistemas operativos Windows del centro, creé un dominio: INSTITUTO.EXTREMADURA.ES implementado mediante Zentyal. Para administrarlo dispongo de dos máquinas virtuales:
  • pdc: Es el controlador de dominio implemnetado mediante Zentyal.
  • rsat: Es una máquina virtual windows con las herramientas rsat instaladas para administrar políticas de grupo.
Puedo conectarme a la máquina rsat de dos formas:
  • Mediante la consola del interfaz de administración de Proxmox, donde se encuentra alojada.
  • O mediante un cliente de escritorio remoto.
El cliente de escritorio remoto que utilizo es remmina, un cliente multiprotocolo que nos permite conectarnos mediante RDP, VNC, NX, XDMCP, SSH y Telepathy.


Si nos conectamos a diferentes máquinas incluso con diferentes protocolos, podemos crear perfiles para no tener que introducir los datos cada vez que realicemos una conexión:


Un ejemplo de conexión a la máquina Windows rsat mediante RDP:


Un ejemplo de conexión a la máquina Zentyal pdc mediante SSH:


Publicado por primera vez en http://enavas.blogspot.com.es

Ver qué políticas de grupo se han aplicado a nuestro equipo y usuario

Cuando aplicamos directivas de grupo mediante el controlador de dominio, nos interesa saber si se han aplicado o no.

La forma más sencilla de ver qué configuración de directivas de grupo se ha aplicado a una máquina o cuenta de usuario es utilizar rsop (Resultant Set of Policy Management Console). 

Para utilizarlo, iniciamos sesión en un cliente Windows, pulsamos la combinación de teclas Win + R para abrir un cuadro de ejecución y escribimos rsop.msc para iniciar la herramienta:


Se abrirá una ventana emergente que muestra cómo Windows obtiene los datos del sistema:


Una vez que se abra la consola, podremos ver qué ajustes se han aplicado a nuestro equipo:


Es importante destacar que sólo se mostrarán los ajustes aplicados al equipo y a la cuenta de usuario.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 16 de febrero de 2017

Restaurar una máquina virtual en Proxmox desde la línea de comandos

Podemos restaurar una máquina virtual desde la línea de comandos:
# qmrestore IMAGENVM VMID
donde:
  • IMAGENVM es fichero de backup de la máquina virtual.
  • VMID es el identificador de la máquina virtual.
Por ejemplo: Si queremos restaurar una máquina virtual desde un backup vzdump-qemu-101-2017_02_15-13_19_1a.lzo en una máquina con identificador 101, haríamos lo siguiente:
# qmrestore nas-backup:backup/vzdump-qemu-101-2017_02_15-13_19_1a.lzo 101
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar una máquina virtual en Proxmox desde la línea de comandos

En ocasiones no tenemos acceso al interfaz web de Proxmox. En ese caso, podemos eliminar una máquina virtual desde la línea de comandos:
# qm destroy VMID
donde VMID es el identificador de la máquina virtual.

Por ejemplo: Si queremos eliminar la máquina virtual con identificador 101, haríamos lo siguiente:
# qm destroy 101
Publicado por primera vez en http://enavas.blogspot.com.es

Actualización de Zentyal 4.2 a Zentyal 5.0

Viendo las características destacadas en la nueva versión de Zentyal 5.0, he dedicido realizar la actualización siguiendo el siguiente procedimiento:

Primero.- Realizamos un apt-get update y un apt-get upgrade para actualizar todos los paquetes de Zentyal 4.2 que se encuentra basado en trusty.

Segundo.- Cambiamos el fichero /etc/apt/sources.list del servidor Zentyal 4.2 para que utilice los repositorios oficiales de Ubuntu en lugar de usar el mirror del centro. El motivo es que tengo mirrorizado trusty pero aún no mirrorizo xenial, principalmente porque aún no tengo muchas máquinas xenial..

Tercero.- Accedemos al interfaz web de administración de Zentyal desde mi máquina y he iniciado la actualización mediante el botón "UPGRADE NOW":


El sistema nos informa de que se va a realizar la actualización y nos recomienda leer las notas de lanzamiento. Las leemos, pulsamos el botón "CONTINUE":


Y comienza el proceso de actualización:


Una vez terminado, nos recomienda reiniciar el servidor para aplicar todas las actualizaciones:


Así que pulsamos el botón "CLOSE" y lo reiniciamos cuando podamos. Es más que conveniente porque se pasa de usar trusty a xenial, pero además se cambia de un kernel 3.x a un kernel 4.x.

Una vez reiniciado, accedemos de nuevo a la interfaz de administración de Zentyal y comprobamos que ya se encuentra actualizado a Zentyal 5.0:


Cuarto.- Para terminar, como este servidor es virtual, es conveniente realizar un nuevo backup de la máquina virtual.
Publicado por primera vez en http://enavas.blogspot.com.es

Compartir almacenamiento del NAS con servidores Proxmox

Hay varios motivos por los que nos interesa configurar nuestros servidores Proxmox como clientes del NAS, como por ejemplo, alojar los backups de las máquinas virtuales.

Teniendo en cuenta mi infraestructura, he realizado la configuración para que mi dos servidores Proxmox utilicen el almacenamiento del NAS:

La configuración del almacenamiento compartido se hace directamente desde el interfaz web:


El almacenamiento compartido vía NFS del NAS se monta localmente en ambos servidores en /mnt/pve/nas-backup/.

En cuanto al NAS, lo tengo implementado con OpenMediaVault:


Por otra parte, he configurado el almacenamiento compartido vía NFS del NAS en un volúmen lógico LVM de manera que se comparta sólo con los dos servidores Proxmox añadiendo la siguiente entrada al fichero de configuración NFS /etc/exports:
/export/backup 172.19.144.2(fsid=2,rw,no_root_squash,subtree_check,secure) 172.19.144.3(fsid=2,rw,no_root_squash,subtree_check,secure)
Publicado por primera vez en http://enavas.blogspot.com.es

Restaurar una máquina virtual en Proxmox

Restaurar una máquina virtual desde la interfaz web de Proxmox es algo realmente simple:

Primero seleccionamos el almacenamiento donde alojamos las copias de seguridad de nuestras máquinas virtuales. 

A continuación hacemos clic en "Contenido" para mostrar las copias de seguridad de que disponemos. 

Seleccionamos la máquina que queremos restaurar.

Y pulsamos el botón "Restaurar":


Nos mostrará información acerca del origen, el destino y nos pedirá que introduzcamos el VMID con el que queremos restaurar la máquina:


Pulsamos el botón "Restaurar" y veremos el progreso de restauración:


Publicado por primera vez en http://enavas.blogspot.com.es

Hacer un backup manual de máquinas virtuales en Proxmox

Una de las ventajas de utilizar un sistema de virtualización es que podemos realizar un backup de las máquinas virtuales, y si sucede un problema, restaurarlas en un tiempo óptimo. 

Es muy sencillo realizar un backup manual de cualquiera de nuestras máquinas desde la interfaz de administración de Proxmox. Tan sólo tenemos que hacer un clic sobre el nodo del cluster donde se encuentra alojada y seleccionar la máquina. Se nos mostrará un menú de acciones que podemos efectuar sobre ella. Tan sólo tenemos que hacer clic en "Respaldo" y, a continuación, realizar un clic  sobre el botón "Respaldar ahora".

Publicado por primera vez en http://enavas.blogspot.com.es

Configurar un cluster Proxmox VE 4 con dos servidores

Proxmox VE 4 nos permite crear clústeres de hasta 32 nodos físicos.

Crear un cluster Proxmox nos aporta interesantes beneficios:
  • Nos proporciona una gestión centralizada, lo que facilita la configuración de los nodos desde un mismo lugar. 
  • Es muy sencillo migrar una máquina virtual de un nodo a otro. 
  • Se puede utilizar al menos dos servidores Proxmox en un cluster, si bien es cierto que si queremos configurar Proxmox para alta disponibilidad, necesitaremos al menos tres nodos.
Primero.- Creamos el cluster en el servidor principal Proxmox:
# pvecm create instituto

Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.
Segundo.- Comprobamos el estado del cluster:
# pvecm status
Quorum information
------------------
Date:             Wed Feb 15 10:36:15 2017
Quorum provider:  corosync_votequorum
Nodes:            1
Node ID:          0x00000001
Ring ID:          1/4
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   1
Highest expected: 1
Total votes:      1
Quorum:           1  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 192.168.1.2 (local)
Tercero.- Añadimos el segundo servidor al cluster conectándonos vía ssh al nodo y ejecutando el siguiente comando:
# pvecm add 192.168.1.2

copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'ldap' to cluster.
Como podéis observar, ejecutamos el comando en el nodo que queremos añadir al cluster indicando la ip del nodo donde hemos creado el cluster.

Cuarto.- Ahora podemos comprobar el estado del cluster en cualquiera de los nodos del mismo:
# pvecm status
Quorum information
------------------
Date:             Thu Feb 16 06:35:39 2017
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          0x00000002
Ring ID:          1/12
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 192.168.1.2
0x00000002          1 192.168.1.3 (local)

Es importante destacar que no deben existir máquinas virtuales en los nuevos nodos que vayamos a añadir al cluster.
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 14 de febrero de 2017

Gestión de Windows en Infolab

Como ya sabéis, a algún iluminado con una falta de conocimientos técnicos brutal evidente, se le ocurrió la idea de desplegar Windows masivamente sin tener en cuenta que no era suficiente con suministrar los equipos sino que había que montar una serie de servidores y servicios para gestionarlos. Como consecuencia, los administradores nos estamos comiendo el marrón de poner el sistema en marcha tan sólo con lo que tenemos y los usuarios... de sufrir una serie de problemas que no hubieran tenido si todo ésto se hubiera planificado y se hubiera contado tanto con los técnicos como los usuarios.

Enfin....¿Y qué es lo que tenemos en los infolaboratorios? Unos equipos con arranque dual Windows/Ubuntu que hay que hacer funcionar. La parte de Linux está resuelta porque ya teníamos la infraestructura, pero en Windows... hay mucho trabajo de ingeniería por hacer.

Como dicen algunos compañeros que mi blog es una fuente de inspiración, y aunque aún me queda mucho por hacer, os cuento lo que ya tengo hecho para gestionar Windows:
  • Aislé la red de Infolab en una VLAN para tratar de controlar los problemas de consumo de ancho de banda derivados de virus y demás lindezas como las actualizaciones de Windows. De este modo, los equipos de Infolab tienen accceso a los servicios del centro a través del firewall pfSsense.
  • Instalé un controlador de dominio Windows mediante Zentyal Developement Edition. De este modo, los usuarios pueden hacer login con su usuario/password y puedo establecer políticas de grupo para los equipos y usuarios del dominio de windows.
  • El controlador de dominio Zentyal está montado como máquina virtual en el servidor principal del centro. Cuando recibí el servidor HP Proliant, no me convenció que se le hubiera instalado un Debian de 32 bits ni que se hubiera dejado de usar LVM, así que lo monté desde cero basándome en el servidor de virtualización Proxmox y añadiéndole los servicios que debía tener.
  • Escribí un script que parsea el fichero de exportación de usuarios de rayuela para crear las cuentas de usuarios en el controlador de dominio. El controlador de dominio en Zentyal se encuentra implementado mediante Samba 4 y no podía relacionarlo con nuestro Ldap, al menos sin meterme en demasiados berenjenales...
  • Monté wsus offline update en el NAS para que cada fin de semana descargue las actualizaciones de Windows que me permitan realizar actualizaciones offline.
  • He configurado mi servidor secundario Puppet para que sirva módulos Puppet tanto a máquinas Windows como Ubuntu distinguiendo por sistema operativo en el site.pp. Lo que significa que puedo usar el servidor puppet secundario para actualizar tanto clientes Ubuntu como clientes Windows.
  • He agregado el módulo puppetlabs/chocolatey al servidor secundario puppet. Ésto me permite mantener actualizado el software como LibreOffice, Gimp, 7zip, Firefox, Google Chrome, etc...
  • He definido algunas GPO para evitar que se muestre el último usuario que inició sesión, se mapeen las carpetas compartidas del NAS como una unidad de red, ...
  • He modificado el instalador msi del cliente puppet v3.4.3 para que se autoconfigure al instalar la aplicación, ajustando como servidor puppet el servidor secundario (puppetinstituto2) y como autoridad de certificación el servidor principal (puppetinstituto). 

Como ya decía al principio, aún me quedan unas cuantas ideas y cosas por hacer. Lo único que me falta es tiempo.
Publicado por primera vez en http://enavas.blogspot.com.es

Montar carpetas compartidas del NAS como una unidad de red en windows

Como ya he comentado en alguna ocasión, tengo montado un equipo con OpenMediaVault funcionando como nas. 

Entre otras cosas, en el nas tengo básicamente dos carpetas compartidas mediante samba para las máquinas windows: 
  • wsus: Aloja las actualizaciones de WSUS Offline Update.
  • publico: Una carpeta de uso general en la que colocar software, isos, scripts...
Como también tengo un controlador de dominio implementado con Zentyal, es muy sencillo hacer que se monten dichas carpetas compartidas utilizando una GPO:


Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 13 de febrero de 2017

Modificar el instalador msi del cliente puppet de windows

He modificado el instalador msi de puppet-3.4.3 para que al instalarlo, se configuren por defecto:
  • El servidor puppet: puppetinstituto2 (mi puppetmaster secundario)
  • La autoridad de certificación: puppetinstituto (mi puppetmaster principal)
Para ello, he utilizado el editor de msi InstEd, instalado vía chocolatey con el que he modificado la tabla CustomAction.

En esta primera imagen pueden verse los valores de dicha tabla antes:


Y después:


Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 10 de febrero de 2017

Módulo puppetlabs-chocolatey para gestionar la instalación de software en windows

Para gestionar software en Windows desde los repositorios de Chocolatey, he instalado el módulo puppet puppetlabs-chocolatey. La última versión del módulo disponible a día de hoy en puppetforge es la 2.0.1, que tiene las siguientes dependencias:
  • puppetlabs/stdlib (>= 4.6.0 < 5.0.0) 
  • puppetlabs/powershell (>= 1.0.1 < 3.0.0) 
  • puppetlabs/registry (>= 1.0.0 < 3.0.0)
Publicado por primera vez en http://enavas.blogspot.com.es

Módulo puppet para instalar software en windows mediante chocolatey

No voy a entrar en muchos detalles porque estoy tan ocupado que no tengo tiempo de documentar, pero al menos me servirá para recordar. 
He creado un pequeño módulo puppet al que he llamado windows_software para instalar paquetes en Windows mediante Chocolatey:
class windows_software {

   require windows_software::chocolatey

   package { 'puppet':
     ensure          => '3.4.3',
     provider        => 'chocolatey',
   }

   $installed_pkg = ['powershell']

   package { $installed_pkg:
     ensure          => installed,
     provider        => 'chocolatey',
   }

   $upgraded_pkg = ['chocolateygui','nano','mls-software-openssh','googlechrome','7zip','firefox','libreoffice','thunderbird','clamwin','jdk8','gimp','vlc','picasa','quicktime','greenshot','winscp','putty','geany','gedit','sudo','notepadplusplus']

   package { $upgraded_pkg:
     ensure          => latest,
     provider        => 'chocolatey',
   }

}
En cuanto a la clase windows_software::chocolatey simplemente se encarga de instalar chocolatey si no se encuentra instalado:
class windows_software::chocolatey {

  exec { 'install_chocolatey':
    command  => "iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex",
    provider => 'powershell',
    creates  => 'C:/ProgramData/chocolatey',
  }

}
Publicado por primera vez en http://enavas.blogspot.com.es

Versiones de puppet instaladas en clientes y servidores

Para evitar problemas, es importante recordar que la versión de puppet agent instalada en los clientes debe ser siempre igual o inferior a la versión del puppet master.

A día de hoy, mis puppetmaster Debian Jessie tienen instalada la versión 3.7.2 y los agentes Ubuntu Trusty la 3.4.3. Así que me ha parecido conveniente instalar también la versión 3.4.3 en clientes Windows.

Se me olvidaba comentar que el cliente puppet 3.4.3 es de 32 bits. Tan sólo existe versión de 64 bits a partir de puppet 3.7.3
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 9 de febrero de 2017

Módulo puppet xfce4 para gestionar el entorno de escritorio de equipos Xubuntu

Para gestionar el entorno de escritorio de los equipos Xubuntu de mi centro, utilizo un único módulo puppet con el que iré configurando los diferentes aspectos del escritorio.



De momento, está pensado para controlar el tema, el panel y los favoritos. El dock que se ve en la parte inferior es plank y de momento, lo gestiono de otro modo.
/etc/puppet/modules/xfce4/
├── files
│   ├── infolab
│   │   └── xsettings.xml
│   ├── notebookACER
│   │   └── xsettings.xml
│   ├── notebookAPD
│   │   └── xsettings.xml
│   ├── notebookHP
│   │   └── xsettings.xml
│   ├── notebookXTREM
│   │   └── xsettings.xml
│   ├── siatic
│   │   └── xsettings.xml
│   ├── Telefonica
│   │   └── xsettings.xml
│   ├── whiskermenu-1.rc
│   ├── workstation
│   │   └── xsettings.xml
│   ├── xfce4-mount-plugin-13.rc
│   ├── xfce4-notes-plugin-11.rc
│   ├── xfce4-panel.xml
│   └── xsettings.xml
└── manifests
    ├── favorites.pp
    ├── init.pp
    ├── panel.pp
    └── theme.pp
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 8 de febrero de 2017

Redirección de la entrada y salida estándar en bash

En bash existen tres descriptores de archivo que representan:
  • 0: Entrada estándar (stdin). 
  • 1: Salida estándar (stdout).
  • 2: Error estándar (stderr).
Podemos redirigir tanto la entrada como la salida o el error utilizando diferentes símbolos:

> Redirigir la salida estándar
2> Redirigir la salida de error estándar
2>&1 Redirigir la salida de error estándar a la salida estándar
< Redirigir la entrada estándar
| Enviar la salida de un comando a otro
>> Añadir a la salida estándar
2>&1| Enviar la salida de error estándar y la salida de estándar a otro comando

Un ejemplo práctico:

Muchas veces utilizamos combinaciones de  comandos y no nos interesa que el resultado de esa combinación muestre información de errores en pantalla. Para resolverlo, simplemente podemos redirigir la salida de error estándar a la salida  estándar y ésta a su vez a /dev/null: 
# dpkg -l|grep 'ii  gawk' 2>&1>/dev/null
Publicado por primera vez en http://enavas.blogspot.com.es

Cursos sobre Ciberseguridad, Introducción al internet de las cosas y Emprendimiento digital en Aula Mentor


Con el fin de impulsar la formación en competencias digitales y en virtud del convenio entre Cisco y Aula Mentor se pone en marcha una tercera edición de los cursos on-line que contienen las claves necesarias para entender las oportunidades que ofrecen las TIC en torno al emprendimiento digital, la ciberseguridad y el Internet de las cosas. 

Los cursos se ofertan de manera independiente y dispondrán del apoyo de un tutor. 

Introducción a la Ciberseguridad (Curso en inglés) https://www.netacad.com/es/courses/intro-cybersecurity/
Introducción al Internet de las cosas https://www.netacad.com/es/courses/intro-iot/

La matrícula se podrá realizar de forma gratuita en cualquiera de las Aulas Mentor a partir del 13 de febrero contando cada curso con 300 plazas que serán asignadas por riguroso orden de inscripción. Dado que el curso tendrá tutor se realizará un seguimiento personalizado del avance de cada alumno.

La formación comenzará el día 1 de marzo y el plazo para terminar finalizará el 30 de abril para los tres cursos.

Esta iniciativa se suma a los cursos especializados en tecnología de redes CCNA -también ofrecidos por Cisco y Aula Mentor y en el que participan más de 600 alumnos cada año- y al resto de iniciativas gestionadas por el programa Aula Mentor del Ministerio de Educación, Cultura y Deporte, en colaboración con Comunidades Autónomas, Ayuntamientos y otras instituciones nacionales e internacionales.

Publicado por primera vez en http://enavas.blogspot.com.es

Actualizado puppetlast para instalar gawk si no se encuentra instalado

puppetlast utiliza gawk para realizar cambios directamente dentro de un fichero mediante el parámetro "inplace". No me había dado cuenta de que gawk no se encuentra instalado por defecto en el sistema (gracias, José Cristo por la observación), así que he modificado el script para que instale gawk si no se encuentra instalado aún.

Podéis instalarlo fácilmente en vuestro servidor con tan sólo ejecutar los siguientes comandos:
# wget --no-check-certificate -O /usr/local/sbin/puppetlast https://github.com/algodelinux/puppetlast/raw/master/puppetlast
# chmod 755 /usr/local/sbin/puppetlast
Aquí podéis ver el código completo: Publicado por primera vez en http://enavas.blogspot.com.es

martes, 7 de febrero de 2017

Paquete linex-ubuntu-puppet 2.16

En esta nueva versión del paquete linex-ubuntu-puppet he incorporado las modificaciones realizadas por los compañeros de administracionsi.

Publicado por primera vez en http://enavas.blogspot.com.es

sed: Extraer en un string un valor que se encuentra entre paréntesis

Una forma de extraer de un string un valor entre paréntesis es utilizar el comando sed de la siguiente manera:
sed 's/^.*(//;s/).*$//'
Un ejemplo:
# puppetlast | sed 's/^.*(//;s/).*$//'
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 5 de febrero de 2017

pkgsync-ies: Módulo puppet para distribuir ficheros mustave, mayhave y maynothave a clientes

En el post anterior hice un resumen de las herramientas que utilizamos para gestionar configuraciones y software en los equipos de los IES.

Esta semana me han preguntado varias veces sobre la gestión de los ficheros musthave, mayhave y maynothave y, a los compañeros que me han preguntado, les he respondido que desconozco cómo gestiona cada uno estos ficheros en sus centros. Por lo que he podido ver, hay gente que gestiona los ficheros mediante un módulo puppet, pero también hay muchos otros que los gestionan manualmente. Por lo que considero que sería importante  estandarizarlo.

pkgsync-ies es un módulo puppet que escribí para distribuir los ficheros mayhave, musthave y maynothave a todas las máquinas del centro en función del tipo de máquina. 
/etc/puppet/modules/pkgsync-ies/
├── files
│   ├── add-apt-key
│   ├── nightly-pkgsync
│   ├── setrepositories.trusty
│   └── ubuntu
│       ├── infolab
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   ├── musthave.d
│       │   │   │   ├── kernel
│       │   │   │   ├── programacion
│       │   │   │   ├── refind
│       │   │   │   └── virtualbox
│       │   │   └── musthave.ies
│       │   └── pkgsync.default
│       ├── ltsp
│       │   └── pkgsync_amd64
│       │       ├── mayhave.ies
│       │       ├── maynothave.ies
│       │       └── musthave.ies
│       ├── notebookACER
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   └── musthave.ies
│       │   └── pkgsync_i386
│       │       ├── mayhave.ies
│       │       ├── maynothave.ies
│       │       └── musthave.ies
│       ├── notebookAPD
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   └── musthave.ies
│       │   └── pkgsync_i386
│       │       ├── mayhave.ies
│       │       ├── maynothave.ies
│       │       └── musthave.ies
│       ├── notebookHP
│       │   └── pkgsync_amd64
│       │       ├── mayhave.ies
│       │       ├── maynothave.ies
│       │       ├── musthave
│       │       └── musthave.ies
│       ├── notebookXTREM
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   └── musthave.ies
│       │   └── pkgsync_i386
│       │       ├── mayhave.ies
│       │       ├── maynothave.ies
│       │       └── musthave.ies
│       ├── siatic
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── mayhave.siatic
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   ├── musthave.d
│       │   │   │   ├── kernel
│       │   │   │   ├── nvidia
│       │   │   │   ├── programacion
│       │   │   │   ├── refind
│       │   │   │   ├── smartboard_software
│       │   │   │   └── virtualbox
│       │   │   └── musthave.ies
│       │   ├── pkgsync.default
│       │   └── pkgsync_i386
│       │       ├── mayhave.ies
│       │       ├── mayhave.siatic
│       │       ├── maynothave.ies
│       │       ├── musthave
│       │       ├── musthave.d
│       │       │   ├── kernel
│       │       │   ├── programacion
│       │       │   └── virtualbox
│       │       └── musthave.ies
│       ├── sources.list.ubuntu
│       ├── Telefonica
│       │   ├── pkgsync_amd64
│       │   │   ├── mayhave.ies
│       │   │   ├── maynothave.ies
│       │   │   ├── musthave
│       │   │   ├── musthave.d
│       │   │   │   └── smartboard
│       │   │   └── musthave.ies
│       │   └── pkgsync.default
│       └── workstation
│           ├── pkgsync_amd64
│           │   ├── mayhave.ies
│           │   ├── maynothave.ies
│           │   ├── musthave
│           │   ├── musthave.d
│           │   │   ├── kernel
│           │   │   └── smart
│           │   └── musthave.ies
│           └── pkgsync.default
└── manifests
    ├── config.pp
    ├── frequency.pp
    ├── init.pp
    └── sources.pp 
Para insertar, borrar o reemplazar nombres de paquetes en todos los ficheros musthave del servidor, podemos usar una simple combinación de comandos:
Me gustaría compartirlo. El problema es que tiene dependencia del módulo puppetlabs-apt para gestionar los repositorios de clientes y probablemente casi nadie lo esté usando. Así que habría que documentarlo muy bien y enseñar a utilizarlo.

Hay elementos del módulo, como garantizar que el paquete pkgsync esté instalado o ejecutar pkgsync cuando cambien los ficheros musthave que están comentados porque esa parte se gestiona desde Mérida, pero también podría estandarizarse.
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 4 de febrero de 2017

Gestión de configuraciones y sofware de equipos en IES mediante puppet y pkgsync

En los centros educativos de Extremadura, los administradores utilizamos dos herramientas fundamentales para gestionar de forma automatizada las configuraciones y el software de los diferentes equipos del centro: puppet y pkgsync. Digo que son fundamentales porque sin ellas sería difícil administrar un número tan alto de equipos como el que tenemos a nuestro cargo.

Como buen sysadmin, pienso que los equipos están ahí para hacer por mí todo el trabajo que sea posible e invierto mucho tiempo en automatizar tareas y procesos, desarrollando y modificando todo aquello que permita simplificarlo. Es ahí donde el software de código abierto juega un papel fundamental. Y la consecuencia es que nos consideren "makers". Supongo que tienen razón y soy un "maker" porque si necesito algo y no lo tengo, lo hago. Por todo ésto considero que el software libre debería ser tan importante para todos como para mí.

En mi faceta de "maker", he trabajado en varias herramientas que facilitan mi trabajo en el día a día. Y, en mi opinión, creo que sería conveniente instalar las últimas versiones y que todo administrador de cualquiera de nuestros centros dominara:
  • linex-ubuntu-puppet: Es un paquete desarrollado por nuestros compañeros de administracionsi que sirve para configurar una máquina como cliente puppet del servidor del centro. Este paquete contiene un script (sinc_puppet) para sincronizar el cliente sólo en el arranque, que reescribí completamente para que funcionara de un modo más eficiente y solucionara el problema de sincronizar hosts con el mismo nombre utilizando un uuid en lugar del fqdn de la máquina. Además, modifiqué el script sinc_puppet para poder utilizarlo también de forma interactiva con parámetros. Podéis consultar los parámetros ejecutando: sinc_puppet -h. La última versión modificada por mí a día de hoy es linex-ubuntu-puppet_2.15
  • pkgsync: Es una herramienta creada por Steinar H. Gunderson para manener una uniformidad en el software mediante tres listas de paquetes: musthave, mayhave y maynothave. Comencé modificándola para compartir la gestión de paquetes con los compañeros de administracionsi y poco a poco la he ido mejorando y dotándola de mayor funcionalidad. Os recomiendo echar un vistazo al man de la herramienta: man pkgsync. La última versión a día de hoy es: pkgsync_1.37-2.
  • puppetlast: Es una pequeña herramienta que nos sirve para obtener un listado ordenado de máquinas y su última sincronización con el servidor puppet. Estaba pensada para utilizar el hostname de la máquina. Aprovechando que tenía que modificarla para utilizar el uuid, la he reescrito en bash. Podéis ver el código y descargarla desde mi GitHub.
  • cleanpuppetnodes: Es otra pequeña herramienta escrita en bash que nos permite hacer limpieza de nodos, certificados y facts en el puppetmaster. Por defecto, elimina información de nodos cuya sincronización se realizó hace más de 60 días, aunque podemos indicarle como parámetro el número días. Podéis ver el código y descargarla desde mi GitHub.
A tener en cuenta:
  • linex-ubuntu-puppet y pkgsync son herramientas para los clientes puppet.
  • puppetlast y cleanpuppetnodes son herramientas para instalar en el servidor puppet.
Además de todo ésto, considero fundamental instalar una serie de herramientas relacionadas:
  • Un mirror local de paquetes, por ejemplo con apt-mirror.
  • Un repositorio local de paquetes, con reprepro.
  • dsh y tmux-cssh para ejecutar comandos de forma remota.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 3 de febrero de 2017

Monitorizar los servidores de los IES con Monit

Ya sé que se tomó la decisión de no utilizar monit de forma generalizada para monitorizar servidores en los centros, pero me gustaría insistir en que sería conveniente implantarlo al menos en el servidor principal en lugar de utilizar scripts en cron para monitorizar los servicios.

Adjunto un par de pantallazos para que veáis cómo tengo monitorizados mis servidores usando Monit. 


Como podéis comprobar, monitorizo incluso la temperatura de diferentes partes del servidor.


Además, es sencillo a la vez que eficiente.
Publicado por primera vez en http://enavas.blogspot.com.es

Actualizar nas OpenMediaVault de Debian Wheezy a Debian Jessie

Como ya he comentado en alguna ocasión, tengo un NAS implementado con OpenMediaVault sobre Debian Wheezy en una máquina que da servicio en tres VLAN. Tarde o temprano llega la hora de actualizar a la siguiente versión, así que voy a empezar por esta máquina para ir eliminando Wheezy de las máquinas para posteriormente eliminar el mirror de esta distribución.

Éste es el procedimiento que he seguido:
He cambiado en el fichero /etc/apt/sources.list las referencias a wheezy por jessie:
/etc/apt/sources.list
deb http://ftp.es.debian.org/debian/ jessie main
#deb-src http://ftp.es.debian.org/debian/ jessie main

deb http://security.debian.org/ jessie/updates main
#deb-src http://security.debian.org/ jessie/updates main

# wheezy-updates, previously known as 'volatile'
deb http://ftp.es.debian.org/debian/ jessie-updates main
#deb-src http://ftp.es.debian.org/debian/ jessie-updates main
He reemplazado kralized por erasmus en el fichero /etc/apt/sources.list.d/openmediavault.list:
/etc/apt/sources.list.d/openmediavault.list
deb http://packages.openmediavault.org/public erasmus main
He actualizado los índices de los repositorios:
# apt-get update
He descargado primero todos los paquetes para realizar una actualización completa del sistema:
# apt-get --download-only dist-upgrade
Y he realizado la actualización de la distribución, una vez descargados los paquetes:
# apt-get dist-upgrade
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 2 de febrero de 2017

Cambiar la password del usuario MYSQL ocs de ocsinventory

Podemos cambiar la password del usuario MYSQL ocs de ocsinventory en particular, o de cualquier otro usuario en general, básicamente de dos modos:
En este post, vamos a ver cómo hacerlo utilizando mysqladmin.

Primero.- Nos conectamos al servidor y ejecutamos el siguiente comando para conectarnos como root a MYSQL:
$ mysql -u root -p
Nos pedirá la password del administrador de MYSQL. La introducimos y nos mostrará un mensaje de bienvenida junto con el prompt de MYSQL:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 456
Server version: 5.5.54-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
Segundo.- A continuación, en el prompt de MYSQL, ejecutamos el siguiente comando:
mysql$gt; use mysql;
Con ésto, le estamos diciendo a MYSQL que vamos a trabajar con la B.D. MYSQL, que es la que contiene los usuarios de MYSQL entre otras cosas. Nos mostrará un mensaje confirmando que la operación ha sido realizada:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
Tercero.- Cambiamos la password del usuario:
mysql> update user set password=PASSWORD("nuevapasword") where User='nombreusuario';
Suponiendo que al usuario MYSQL "ocs" le queremos poner la password "p@ssw0rd", el comando quedaría así:
mysql> update user set password=PASSWORD("p@ssw0rd") where User='ocs';
Si todo ha ido bien, obtendremos una respuesta de confirmación:
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0
Por último, recargamos privilegios y salimos:
mysql> flush privileges;
mysql> quit
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 1 de febrero de 2017

GetDeb: Instala software más actualizado en Ubuntu

GetDeb es un proyecto no oficial cuyo objetivo es proporcionar las últimas versiones de aplicaciones de código abierto y freeware para nuestra distribución Ubuntu.

Si por ejemplo, queremos añadir el repositorio getdeb a nuestro Ubuntu Trusty, no tenemos más que hacer lo siguiente:
1) Añadir el repositorio:
# echo "deb http://archive.getdeb.net/ubuntu trusty-getdeb apps" > /etc/apt/sources.list.d/trusty-getdeb.list
2) Añadir la clave del repositorio:
# wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
Y, si por ejemplo, queremos añadir el repositorio getdeb a nuestro Ubuntu Xenial, haremos básicamente lo mismo:
1) Añadir el repositorio:
# echo "deb http://archive.getdeb.net/ubuntu xenial-getdeb apps" > /etc/apt/sources.list.d/xenial-getdeb.list
2) Añadir la clave del repositorio:
# wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
También existe otra posibilidad, que consiste en instalar el paquete getdeb, que automáticamente nos añade el repositorio.
Publicado por primera vez en http://enavas.blogspot.com.es

pkgsync 1.37-2: Nuevos cambios

En la versión 1.37-1 de pkgsync he introducido una modificación para evitar que, al ejecutarlo, se muestre un mensaje de error cuando el paquete linex-ubuntu-puppet no se encuentra instalado. Esto sucede, por ejemplo, en los servidores donde nos interesa instalar pkgsync pero no linex-ubuntu-puppet.

En la versión 1.37-2, he agregado el script /usr/local/sbin/launchpad-getkeys que sirve para obtener las claves de repositorios que faltan. De este modo, no dependemos de que se haya instalado el paquete o no.

Aquí podéis ver el código completo de pkgsync:
Publicado por primera vez en http://enavas.blogspot.com.es

arduinoide_1.8.1_all.deb: Paquete para instalar arduino IDE en los equipos del centro

He creado un paquete debian con Arduino IDE 1.8.1 para poder instalarlo de manera automática en los equipos Ubuntu del centro.

Podéis descargarlo desde Google Drive:
Se instala en el directorio /opt/arduino-1.8.1/ y se crea el enlace para ejecutarlo desde el menú de aplicaciones.
Publicado por primera vez en http://enavas.blogspot.com.es