Algo de Linux: noviembre 2016

miércoles, 30 de noviembre de 2016

Paquete linex-ubuntu-puppet 2.13

Acabo de empaquetar una nueva versión de linex-ubuntu-puppet, concretamente la 2.13 a la que he realizado las siguientes modificaciones:
  • He añadido un parámetro -r que permite regenerar el uiid y como consecuencia el certificado del cliente.
  • He añadido una opción -v para mostrar versión del script sinc_puppet.
  • He añadido una opción -h para mostrar la ayuda del script sinc_puppet.

# sinc_puppet -h
sinc_puppet 2.13
Automated sinc puppet client

Usage: /usr/sbin/sinc_puppet [OPTIONS]
Recognized options:
  -h              display this help and exit
  -v              display sinc_puppet version and exit
  -f              force sinc_puppet on SPLAYLIMIT
  -f now          force sinc_puppet now
  -r              renew cert client

Comentar tan sólo dos cosas:
  • now es una opción del parámetro -f. Por lo tanto, si lo utilizamos, debe ir a continuación de -f.
  • Es posible combinar las opciones -f y -r. Ejemplos:
# sinc_puppet -f now -r
# sinc_puppet -r -f now


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

martes, 29 de noviembre de 2016

Paquete linex-ubuntu-puppet 2.12-3

He modificado el paquete linex-ubuntu-puppet forzar el reemplazo del fichero /etc/puppet/puppet.conf por un link que apunta a /usr/share/linex-ubuntu-puppet/puppet.conf. Parece que algunas máquinas tenían el fichero en lugar del enlace.

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

Configuración BIOS portátiles HP x360

Como estoy volviendo a clonar los portátiles HP x360, y tengo que tocar algún ajuste en la BIOS, aprovecho para realizarles las siguientes configuraciones:
  • Establecer contraseña de acceso a la configuración.
  • Activar tecnología de virtualización.
  • En "Opciones de arranque" activo la "Compatiblidad heredada" para disponer de opciones de arranque "NO UEFI".
Como en todos los equipos HP:
  • El acceso a la configuración BIOS se realiza con F10.
  • El acceso a las opciones de arranque, con F9.

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

lunes, 28 de noviembre de 2016

Última versión del script sinc_puppet

Aquí tenéis el código de la última versión del script sinc_puppet, por si queréis echarle un vistazo. Como ya comenté en un post anterior, en el paquete linex-ubuntu-puppet 2.12-2 tan sólo he añadido una versión rectificada de la función solveapterrors en la que se diferencian los diferentes tipos de errores de apt para actuar en consecuencia:
/usr/share/linex-ubuntu-puppet/sinc_puppet
Y el fichero de configuración:
/etc/default/sincpuppet
Publicado por primera vez en http://enavas.blogspot.com.es

Script actualiza_proxmox: Instalar una versión actualizada de proxmox

En un post de enero de este año, os explicaba cómo solucionar el error de instalación de proxmox-ve. Para automatizar las actualizaciones de proxmox, utilizo un pequeño script. Aquí tenéis el código, por si queréis echarle un vistazo:
/usr/local/sbin/actualiza_proxmox
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 23 de noviembre de 2016

GPO: No mostrar el útimo usuario que hizo login en Windows

Por defecto, Windows muestra el nombre del usuario que inició sesión en el dominio. Para cambiar este comportamiento, podemos hacerlo vía objeto de directiva de grupo (GPO).

Como ya he comentado en un post anterior, utilizo Zentyal como controlador de dominio. Así que, para modificar las políticas, primero me conecto a la máquina Windows que tiene instaladas las herramientas administrativas.

Una vez conectado abro la consola de gestión de políticas de grupo gpmc.msc.

A continuación, edito la directiva POLITICAS_IES que creé en el post anterior.

Y hago clic en las siguientes opciones:
Configuración del Equipo -> Configuración de Windows -> Configuración de Seguridad -> Directivas Locales -> Opciones de Seguridad.

Por último, editamos la opción que dice "Inicio de sesión interactivo: no mostrar el último nombre de usuario", marcamos la casilla que dice "Definir esta configuración de directiva" y marcamos la opción "Habilitada".

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

Crear una nueva GPO para nuestro dominio y deshabilitar la "Default Domain Policy"

Vamos a crear una GPO para nuestro dominio (instituto.extremadura.es) y deshabilitar la "Default Domain Policy". De este modo, aplicaremos nuestras políticas sobre todo el dominio usando la GPO creada y guardaremos la "Default Domain Policy" como una alternativa a utilizar en caso de que se produzca un fallo en el dominio.

Para ello, primero seleccionamos nuestro dominio, en este caso, instituto.extremadura.es:

Una vez seleccionado, pulsamos con el botón derecho sobre él y seleccionamos la opción "Crear un GPO en este dominio y vincularlo aquí" en el menú de contexto que nos aparece:


Escribimos un nombre para nuestro nuevo GPO (por ejemplo, POLITICAS_IES):


Seleccionamos con el botón derecho sobre el nuevo GPO (POLITICAS_IES) y habilitamos la opción "Exigido". La opción "Vínculo habilitado" se encontrará activada por defecto.

Seleccionamos con el botón derecho sobre el GPO "Default Domain Policy" y deshabilitamos la opción "Vínculo habilitado".

Una vez realizados estos cambios, los dos GPO deben quedaros así:


Si ahora hacemos doble clic sobre la directiva "POLITICAS_IES", veremos que podemos crear:

  • Directivas y Preferencias para Equipos.
  • Directivas y Preferencias para Usuarios.



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

Instalar RSAT en Windows 10 para gestionar nuestro controlador de dominio

Para gestionar la instalación Windows de los Infolab monté un controlador de dominio Zentyal virtualizado en Proxmox.

Este controlador de dominio me permite gestionar el acceso de cada usuario a la instalación Windows de los Infolab de manera que cada usuario pueda hacer login con su usuario y su password. Y, por otro lado, me va a permitir establecer políticas de grupo para las máquinas del dominio.

La cuestión es que Zentyal implementa el controlador de dominio mediante Samba4. Esto significa que si queremos administrar nuestro controlador de dominio, deberemos instalar RSAT en una máquina Windows que se encuentre agregada al dominio. 

Las Herramientas de administración remota del servidor (RSAT: Remote Server Administration Tools) nos permiten administrar nuestro controlador de dominio Windows desde un equipo remoto que ejecuta Windows.

Para facilitar mi trabajo y, teniendo en cuenta que el Windows que viene preinstalado en mi máquina sólo lo utilizo para ejecutar las herramientas administrativas, he considerado que lo más conveniente era virtualizarlo y arrancarlo solamente cuando lo necesite.

En este post, vamos a ver cómo instalar RSAT en el equipo Windows virtualizado.

Para empezar, descargamos las herramientas de administración remota del servidor desde la web de Microsoft:


Como el sistema operativo instalado es de 64 bits, descargo la versión de 64 bits:


Comienza el proceso de descarga...


Una vez descargado, ejecutamos el instalador y comenzará el proceso de instalación:


Nos pedirá que aceptemos el acuerdo de licencia:


Lo aceptamos y comienza a instalarlo:






Cuando termine, tendremos que reiniciar el equipo para completar la instalación:



Una vez reiniciado, ya podemos utilizar cualquiera de las herramientas administrativas:



También podemos abrirlas desde el menú de inicio, escribiendo el nombre de la herramienta. Por ejemplo, si queremos abrir la consola del gestor de políticas de grupo (gpmc.msc):



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

martes, 22 de noviembre de 2016

Instalar tema Numix e iconos Numix-Circle y configurarlo para todos los usuarios en Xubuntu 14.04

Es fácil instalar este tema en Ubuntu:
# add-apt-repository ppa:numix/ppa
# apt-get update
# apt-get install numix-gtk-theme numix-icon-theme-circle
Una vez instalado, también es sencillo configurarlo por defecto para todos los usuarios. Tan sólo hay que tener en cuenta que en Xubuntu hay que colocar el fichero xsettings.xml en /etc/xdg/xdg-xubuntu/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml en lugar de situarlo en /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml

A continuación podéis ver el fichero xsettings.xml con los ajustes del tema por defecto que tienen nuestros equipos:
/etc/xdg/xdg-xubuntu/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
<?xml version="1.0" encoding="UTF-8"?>

<channel name="xsettings" version="1.0">
  <property name="Net" type="empty">
    <property name="ThemeName" type="string" value="Greybird"/>
    <property name="IconThemeName" type="string" value="elementary-xfce-darker"/>
  </property>
  <property name="Xft" type="empty">
    <property name="DPI" type="int" value="96"/>
    <property name="Antialias" type="int" value="1"/>
    <property name="Hinting" type="int" value="1"/>
    <property name="HintStyle" type="string" value="hintslight"/>
    <property name="RGBA" type="string" value="rgb"/>
    <property name="Lcdfilter" type="string" value="lcddefault"/>
  </property>
  <property name="Gtk" type="empty">
    <property name="CursorThemeName" type="string" value="Human"/>
    <property name="CursorThemeSize" type="int" value="24"/>
    <property name="FontName" type="string" value="Droid Sans 10"/>
  </property>
</channel>
Y aquí podéis ver un  fichero xsettings.xml con los ajustes modificados. Como podéis observar:
  • Para cambiar el tema, tenemos que modificar la propiedad ThemeName.
  • Y para cambiar los iconos, modificamos la propiedad IconThemeName.
/etc/xdg/xdg-xubuntu/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
<!--
  Default values for the X settings registry as described in
  http://www.freedesktop.org/wiki/Specifications/XSettingsRegistry
-->

<?xml version="1.0" encoding="UTF-8"?>
<channel name="xsettings" version="1.0">
  <property name="Net" type="empty">
    <property name="ThemeName" type="string" value="Numix"/>
    <property name="IconThemeName" type="string" value="Numix-Circle"/>
    <property name="DoubleClickTime" type="int" value="250"/>
    <property name="DoubleClickDistance" type="int" value="5"/>
    <property name="DndDragThreshold" type="int" value="8"/>
    <property name="CursorBlink" type="bool" value="true"/>
    <property name="CursorBlinkTime" type="int" value="1200"/>
    <property name="SoundThemeName" type="string" value="default"/>
    <property name="EnableEventSounds" type="bool" value="false"/>
    <property name="EnableInputFeedbackSounds" type="bool" value="false"/>
  </property>
  <property name="Xft" type="empty">
    <property name="DPI" type="empty"/>
    <property name="Antialias" type="empty"/>
    <property name="Hinting" type="empty"/>
    <property name="HintStyle" type="empty"/>
    <property name="RGBA" type="empty"/>
    <property name="Lcdfilter" type="empty"/>
  </property>
  <property name="Gtk" type="empty">
    <property name="CanChangeAccels" type="empty"/>
    <property name="ColorPalette" type="empty"/>
    <property name="FontName" type="string" value="Sans 10"/>
    <property name="IconSizes" type="empty"/>
    <property name="KeyThemeName" type="empty"/>
    <property name="ToolbarStyle" type="empty"/>
    <property name="ToolbarIconSize" type="empty"/>
    <property name="MenuImages" type="empty"/>
    <property name="ButtonImages" type="empty"/>
    <property name="MenuBarAccel" type="empty"/>
    <property name="CursorThemeName" type="empty"/>
    <property name="CursorThemeSize" type="empty"/>
    <property name="IMPreeditStyle" type="empty"/>
    <property name="IMStatusStyle" type="empty"/>
    <property name="IMModule" type="empty"/>
  </property>
</channel>
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 21 de noviembre de 2016

apt-key desde detrás de un firewall

Todos habréis tratado alguna vez hacer un apt-key para descargar la nueva clave de un repositorio que ha expirado (en particular desde nuestra intranet). Por ejemplo:
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ACCAF35C
Y habéis obtenido un error como el siguiente:
gpg: solicitando clave ACCAF35C de hkp servidor keyserver.ubuntu.com
gpg: error del servidor de claves
gpg: recepción del servidor de claves fallida: Error del servidor de claves
El problema probablemente se deba a que estáis detrás de un firewall y el puerto GPG SKS 11371 se encuentra cerrado.
Para solucionarlo, tan sólo tenemos que especificar el protocolo hpk:// y el puerto 80:
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ACCAF35C

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

Asegurar refind como gestor de arranque por defecto

Como ya he comentado en alguna ocasión en mis Infolab utilizo rEFInd como gestor de arranque.

Para asegurar desde Ubuntu que rEFInd sea el gestor de arranque por defecto, podemos hacer una cosa: Como en Ubuntu 14.04 se utiliza Upstart, podemos crear un script de inicio que ejecute refind-mkdefault cada vez que se apague o reinicie la máquina:
description "Script on shutdown to ensure refind as default boot loader"
author "Esteban M. Navas Martín"

start on runlevel [016] or deconfiguring-networking

#exec sh /path/to/script

# or

script

refind-mkdefault

end script
Si os fijáis en los comentarios, veréis que podemos crear un script independiente y llamarlo con exec:
# exec sh /path/to/script

O escribir el script entre:
script

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

Paquete pkgsync 1.34-1

He modificado el paquete pkgsync para añadir la versión rectificada de la función que detecta y resuelve problemas de apt:
function solveapterrors {

  idioma=$LC_ALL
  export LC_ALL=C

  apt-get check 1>/dev/null 2>/tmp/apterrors

  if [ -s /tmp/apterrors ]; then
     grep "Unmet dependencies. Try using -f." /tmp/apterrors && apt-get -yf install && dpkg --configure -a && apt-get -y autoremove
     grep "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem." /tmp/apterrors && dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
     grep -E 'Encountered a section with no Package: header|Problem with MergeList ' /tmp/apterrors && rm -rf /var/lib/apt/lists/
  fi

  export LC_ALL=$idioma
}
He fijado el idioma en inglés para los mensajes devueltos por los comandos en el terminal. De este modo garantizo el buen funcionamiento del script.

Por otra parte, he separado la detección de errores de apt para ejecutar los comandos que resuelven el problema en el orden adecuado.

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

Paquete linex-ubuntu-puppet 2.12-2

He modificado el paquete linex-ubuntu-puppet para añadir la versión rectificada de la función que detecta y resuelve problemas de apt:
function solveapterrors {

  idioma=$LC_ALL
  export LC_ALL=C

  apt-get check 1>/dev/null 2>/tmp/apterrors

  if [ -s /tmp/apterrors ]; then
     grep "Unmet dependencies. Try using -f." /tmp/apterrors && apt-get -yf install && dpkg --configure -a && apt-get -y autoremove
     grep "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem." /tmp/apterrors && dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
     grep -E 'Encountered a section with no Package: header|Problem with MergeList ' /tmp/apterrors && rm -rf /var/lib/apt/lists/
  fi

  export LC_ALL=$idioma
}
He fijado el idioma en inglés para los mensajes devueltos por los comandos en el terminal. De este modo garantizo el buen funcionamiento del script.

Por otra parte, he separado la detección de errores de apt para ejecutar los comandos que resuelven el problema en el orden adecuado.

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

Nueva versión del paquete pkgsync 1.34

He modificado el paquete pkgsync para incluir una función que detecta y resuelve problemas de apt. De este modo, además de configurar e instalar paquetes cuando dpkg fue interrumpido, borramos /var/lib/apt/lists si hay listas corruptas.

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

Paquete linex-ubuntu-puppet 2.12-1

He modificado el paquete linex-ubuntu-puppet para incluir una función que detecta y resuelve problemas de apt. De este modo, además de configurar e instalar paquetes cuando dpkg fue interrumpido, borramos /var/lib/apt/lists si hay listas corruptas.

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

domingo, 20 de noviembre de 2016

Dos libros para empezar a programar en Python

Si queréis empezar a programar en Python, en PythonLearn encontraréis dos libros en pdf, epub y html.



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

sábado, 19 de noviembre de 2016

Script solveapterrors para solucionar errores de apt

He escrito el siguiente script para completar la corrección de errores de apt y añadírselo a los paquetes linex-ubuntu-puppet y pkgsync:
#!/bin/bash
#
# Esteban M. Navas Martin
# algodelinux@gmail.com
# Fecha última modificación: 21/11/2016

idioma=$LC_ALL
export LC_ALL=C

apt-get check 1>/dev/null 2>/tmp/apterrors

if [ -s /tmp/apterrors ]; then
   grep "Unmet dependencies. Try using -f." /tmp/apterrors && apt-get -yf install && dpkg --configure -a && apt-get -y autoremove
   grep "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem." /tmp/apterrors && dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
   grep -E 'Encountered a section with no Package: header|Problem with MergeList ' /tmp/apterrors && rm -rf /var/lib/apt/lists/
fi

export LC_ALL=$idioma
Con ésto conseguimos dos cosas:

  • Configurar e instalar paquetes cuando se produjo una interrupción de dpkg, un error producido probablemente porque el usuario apagó el equipo cuando se estaban instalando paquetes.
  • Borrar el directorio de listas de paquetes /var/lib/apt/lists cuando exista alguna corrupción en las listas de paquetes.


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

viernes, 18 de noviembre de 2016

Reemplazar el nombre de un paquete en todos los ficheros musthave del módulo pkgsync-ies

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. 

Si queremos reemplazar un nombre de paquete por otro en todos los ficheros musthave del módulo puppet, no tenemos más que combinar comandos bash para hacerlo de un plumazo:
# find /etc/puppet/modules/pkgsync-ies -name musthave.* -not -type d  | xargs sed -i 's|python-intef-exe|intef-exe|g'
Con ésto, busco todos los ficheros que comiencen por musthave que no sean directorios. De este modo, el reemplazo del nombre se realizará dentro de todos los ficheros musthave, musthave.ies o musthaveloquesea, siempre y cuando no sean directorios. Así evito que el comando trate de realizar el reemplazo sobre los directorios musthave.d.
Publicado por primera vez en http://enavas.blogspot.com.es

El servidor de desarrollo de Django

Django incluye un servidor web ligero como herramienta para utilizar durante en el proceso de desarrollo. Este servidor ligero nos permite centrarnos en el trabajo de desarrollar sin tener que pensar en configurar un servidor web. Más adelante cuando nuestra aplicación esté lista para ser puesta en producción, la implantaremos en un servidor web.

Este servidor web se inicia con la herramienta manage.py que se añade al proyecto cuando lo creamos. Por ejemplo, suponiendo que hemos creado nuestro proyecto de sitio y le hemos llamado miproyecto, entramos en el directorio miproyecto, e iniciamos el servidor de la siguiente manera:
$ python manage.py runserver
Al iniciarlo, veremos una salida similar a la siguiente:
Validating models...
0 errors found.

Django version 1.0, using settings 'miproyecto.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Por defecto, el servidor escucha en el puerto 8000, aunque eso es algo que se puede cambiar.

Cuando queramos parar el servidor de desarrollo, pulsamos CTRL+C y lo pararemos.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 17 de noviembre de 2016

Crear un proyecto en Django

Para crear un proyecto en Django, utilizaremos la herramienta django-admin.py. Por ser un poco organizados, podremos crear un directorio djprojects (o como queramos llamarlo) en nuestro directorio HOME. Un proyecto está formado por un conjunto de archivos.

Por ejemplo, para crear un proyecto al que llamemos miproyecto, ejecutaremos:
$ django-admin-py startproject miproyecto
Y se creará el siguiente conjunto de ficheros:
miproyecto
├── manage.py
└── miproyecto
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

donde:
  • miproyecto: Es el Directorio que contiene nuestro projecto. Podemos cambiarle el nombre en cualquier momento sin afectar para nada al mismo. 
  • manage.py: Es una herramienta de línea de comandos que nos va a permitir interactuar con este proyecto. 
  • miproyecto/miproyecto: Es el directorio de nuestro paquete. Contiene nuestro projecto el cual es un paquete python que se usará para importar cualquier cosa dentro de él. 
  • miproyecto/__init__.py: Es un archivo necesario para que Python trate a este directorio como un paquete (por ejemplo, un grupo de módulos). 
  • miproyecto/settings.py: Contiene ajustes de configuración para el proyecto.
  • miproyecto/urls.py: Este fichero contiene la declaración de las URL para el proyecto. 
  • miproyecto/wsgi.py: Este archivo es un punto de entrada para que los servidores web compatibles con WSGI puedan servir nuestro proyecto.
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar Django mediante pip3

Para instalar una versión concreta de Django mediante pip3, no tenemos más que indicarlo. Por ejemplo, si queremos instalar la versión 1.10 de Django, lo haremos de la siguiente manera:
# pip3 install django==1.10
Para comprobar que hemos instalado la versión que nosotros queríamos, tan sólo tenemos que ejecutar:
# django-admin --version
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar el gestor de paquetes python pip en Ubuntu

pip es una herramienta que nos va a permitir gestionar paquetes python. Como en nuestros sistemas tenemos instalado tanto python 2.7 como python3:

Si queremos instalar paquetes de python 2 debemos instalar el paquete python-pip:
# apt-get install python-pip
Y si queremos instalar paquetes de python 3, instalaremos el paquete python3-pip:
# apt-get install python3-pip
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar el IDE Spyder en Ubuntu

Repasando lo visto en el curso de esta mañana en el CPR, compruebo que, puesto que en nuestros sistemas tenemos instalado tanto python 2.7 como python3:

Si queremos programar para python 2 debemos instalar el paquete spyder:
# apt-get install spyder
Y si queremos programar en python 3, instalaremos el paquete spyder3:
# apt-get install spyder3
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 16 de noviembre de 2016

efibootmgr: Cambiar temporalmente el orden de arranque en Linux de equipos con firmware EFI

Hay una opción muy interesante de efibootmgr, y es cambiar el orden de arranque temporalmente. Ésto significa que podemos hacer que el equipo arranque la próxima vez con una opción determinada y en posteriores ocasiones permanezca el orden establecido por defecto. 

Por ejemplo, supongamos que tenemos las siguientes opciones de arranque:
# efibootmgr 
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0005,0002,0003,0000,0004,0001,2001,2002,2003
Boot0000* Windows Boot Manager
Boot0001* Internal EFI Shell
Boot0002* ubuntu
Boot0003* ubuntu
Boot0004* Windows Boot Manager
Boot0005* rEFInd Boot Manager
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network
Y necesitamos que solamente la próxima vez arranque Windows directamente. En ese caso, no tenemos más que ejecutar el comando efibootmgr con el parámetro -n y la opción que queremos arrancar:
# efibootmgr -n 0000
Imaginad lo útil que puede sernos ésto para actualizar de forma desatendida los dos sistemas operativos de nuestros equipos Infolab...
Publicado por primera vez en http://enavas.blogspot.com.es

efibootmgr: Cambiar el orden de arranque en Linux de equipos con firmware EFI

Instalar un arranque dual en un equipo moderno con firmware EFI es un problema bastante común hoy en día. 

Los usuarios se encuentran con que, a pesar de instalar Linux, el equipo sigue arrancando directamente a Windows, o que teniendo instalados ambos sistemas operativos, de repente deja de aparecer GRUB en el arranque y tan sólo se inicia windows.

efibootmgr (EFI Boot Manager) es una herramienta muy útil que nos va a permitir cambiar el orden de arranque en sistemas con firmware EFI.

Para disponer de la herramienta efibootmgr, no tenemos más que instalarla desde los repositorios:
# apt-get install efibootmgr
Una vez instalada, la ejecutamos sin parámetros:
# efibootmgr
Y obtendremos una salida parecida a la siguiente la siguiente:
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0005,0004,0002,0003,0000,0001,2001,2002,2003
Boot0000* Windows Boot Manager
Boot0001* Internal EFI Shell
Boot0002* ubuntu
Boot0003* ubuntu
Boot0004* Windows Boot Manager
Boot0005* rEFInd Boot Manager
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network
Digo parecida porque dependerá del equipo, de los cargadores de arranque, y de los sistemas operativos que tengáis.
  • En color amarillo, he destacado cuál es la opción de arranque actual; en el ejemplo, la número 0005, que, en mi caso es rEFInd Boot Manager, como podéis comprobar.
  • En color rojo, el timeout, que permite establecer un tiempo de espera para que el usuario elija la opción que desea iniciar.
  • En color verde, el orden de arrranque.
  • En color azul, las diferentes opciones de arranque.
En mi sistema, arrancará el cargador de arranque rEFInd como primera opción. En caso de que no cargue, se iniciaría Windows, a continuación Ubuntu, etc... en el orden marcado en color verde.

Si lo que me interesa es cambiar el BootOrder para que, en caso de no arrancar rEFInd, se inicie Ubuntu antes que Windows, podría usar efibootmgr y establecer el orden que yo quiera. Por ejemplo:
# efibootmgr -o 0005,0002,0003,0000,0004,0001,2001,2002,2003
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 0005,0002,0003,0000,0004,0001,2001,2002,2003
Boot0000* Windows Boot Manager
Boot0001* Internal EFI Shell
Boot0002* ubuntu
Boot0003* ubuntu
Boot0004* Windows Boot Manager
Boot0005* rEFInd Boot Manager
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network
Por supuesto, podemos indicar un número limitado de opciones en el BootOrder, de tal manera que el resto serán ignoradas:
# efibootmgr -o 2001,0005,0002,0000
BootCurrent: 0005
Timeout: 0 seconds
BootOrder: 2001,0005,0002,0000
Boot0000* Windows Boot Manager
Boot0001* Internal EFI Shell
Boot0002* ubuntu
Boot0003* ubuntu
Boot0004* Windows Boot Manager
Boot0005* rEFInd Boot Manager
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network
Publicado por primera vez en http://enavas.blogspot.com.es

Cambiar automáticamente el fondo de escritorio con Variety Wallpaper Changer

Variety Wallpaper Changer es una utilidad muy configurable que va a cambiar automáticamente el fondo de nuestro escritorio. 

Esta herramienta puede usar imágenes locales o descargar wallpapers desde diferentes fuentes en internet, pero, además, nos va a permitir mostrar citas o un reloj digital en el escritorio.

Podemos instalarlo en Ubuntu desde repositorio oficial:
# add-apt-repository ppa:peterlevi/ppa
# apt-get update
# apt-get install variety
Una vez instalado, lo iniciamos desde el menú de aplicaciones o desde un terminal y lo configuramos. 
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 14 de noviembre de 2016

Repositorio e instalación de Epoptes Stable en Ubuntu

Epoptes es un interesante software de control de aula OpenSource tipo cliente/servidor escrito en Python, lo que nos ofrece la posibilidad de adaptarlo a nuestras necesidades. 

Para instalar epoptes stable en Ubuntu, lo más sencillo es añadir el repositorio estable:
# add-apt-repository ppa:epoptes
Una vez añadido, podremos instalar fácilmente tanto el cliente como el servidor:
http://www.epoptes.org/installation
Publicado por primera vez en http://enavas.blogspot.com.es

Paquete linex-ubuntu-puppet 2.11

En la versión 2.11 he depurado el código del script sinc_puppet para que quede más claro y limpio.

Aquí tenéis el código, por si queréis echarle un vistazo:
/usr/share/linex-ubuntu-puppet/sinc_puppet
Y el fichero de configuración:
/etc/default/sincpuppet
https://mega.nz/#!V80iiAwY!4azL5EGmcNDlW72kCItDi4JFhiGQzUFdyGdqTFeOxhg
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 11 de noviembre de 2016

Paquete linex-ubuntu-puppet 2.10

La versión 2.10 del paquete linex-ubuntu-puppet incorpora los siguientes cambios:
  • linex-ubuntu-puppet (2.8)
    • Modificado el script /usr/sbin/sinc_puppet para eliminar procesos detenidos (en estado T) y eliminar todas las instancias de sinc_puppet que estén corriendo excepto la más reciente.
  • linex-ubuntu-puppet (2.9)
    • Modificado el script /usr/sbin/sinc_puppet para corregir un bug por el que, en ocasiones se generaba un nuevo nombre de host y se solicitaba un nuevo certificado cuando el certificado actual aún era válido.
    • Modificado el script /usr/sbin/sinc_puppet para eliminar certificados antiguos en el cliente.
  • linex-ubuntu-puppet (2.10)
    • Modificado el script /usr/sbin/sinc_puppet para mostrar más mensajes informativos y
    •     ejecutar puppet con las opciones --onetime --nodaemonize en todos los casos.
https://mega.nz/#!E8cghDqI!UvgmD1fBdex0liFSh3VFSpeoDZe1tVQsXnAeQ0r_Klk
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 10 de noviembre de 2016

remove-orphan-homes: Script para borrar directorios home de usuarios no existentes

remove-orphan-homes es un script muy sencillo que utilizo para borrar los directorios HOME de usuarios que no existen:

/usr/local/sbin/remove-orphan-homes
#!/bin/bash
#
# Elimina directorios HOME huérfanos de alumnos y profesores
#
# Esteban M. Navas Martin
# algodelinux@gmail.com
# Fecha creacion: 09/11/2016

remove_home() {
   for usuario in `ls /home/$1`; do

      if [ "$usuario" = "dpto" ]; then continue; fi

      USUARIO=$(stat -c '%U' /home/$1/$usuario 2>/dev/null)

      if [ "$USUARIO" == "UNKNOWN" ]; then
         echo "El usuario $usuario no existe"
         echo "Borrando /home/$1/$usuario"
         rm -r /home/$1/$usuario
      fi
   done
}

remove_home alumnos
remove_home profesor
¿Dónde lo utilizo? Principalmente en dos lugares:

  • En el servidor NFS, para borrar directorios HOME de profesores y alumnos que no existen.
  • En los equipos de INFOLAB, para borrar los directorios HOME locales de alumnos y profesores que no existen. Hay que decir que he decidido que, en principio, en los equipos de INFOLAB los usuarios utilicen su HOME local en lugar de usar el HOME del servidor NFS. Más adelante, probablemente haga un montaje "mixto".
Como podéis comprobar, el script es realmente sencillo:
  • Consta de una función remove_home() a la que pasamos como parámetro el nombre del directorio situado en /home en el que vamos a buscar los directorios a borrar:
    • alumnos
    • profesor
  • He implementado esta función para poder añadir fácilmente el borrado de otros directorios adicionales. Por ejemplo, supongamos que el personal de administración y servicios lo alojo en /home/pas. En este caso no tendría más que incluir una llamada a la función dentro del script para eliminar directorios huérfanos en el directorio pas:
    • remove_home pas
  • La idea es muy simple: 
    • Listo el nombre de los directorios de usuario en /home/alumnos, /home/profesor, etc...
    • Y ejecuto el comando id con el nombre del directorio obtenido (id - imprime UIDs y GIDs reales y efectivos).
    • Si el resultado de ejecutar el comando id con el nombre del directorio devuelve un error, eso significa que el usuario no existe, y, en ese caso, lo borramos.

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

Eliminar la salida estándar y la salida de errores de un comando

En ocasiones nos interesa ejecutar un comando y evaluar tan sólo el resultado de ejecutarlo, ignorando tanto la salida estándar como la salida de errores. En este post vamos a explicar cómo hacerlo:

La entrada y las salidas estándar y de errores son las siguientes:
  • stdin (entrada estándar): Descriptor 0 
  • stdout (salida estándar): Descriptor 1 
  • stderr (salida de errores): Descriptor 2 
Para eliminar las dos salidas lo que debemos hacer es:
  • Primero enviar a /dev/null stdout
  • y luego enviar stderr a dónde vaya stdout.
Ésto quedaría así:
>/dev/null 2>&1
Un ejemplo:
# id $usuario > /dev/null 2>&1
El comando anterior no mostraría nada por pantalla y podríamos comprobar el resultado de su ejecución con tan sólo consultar a continuación la salida del último comando: $?
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 9 de noviembre de 2016

Redirigir consultas DNS del dominio de Windows al controlador de dominio Windows

Como ya sabéis, un controlador de dominio Windows implementa su propio servidor DNS para resolver los nombres de su dominio.

Si queremos que el servidor PowerDNS de nuestro centro, resuelva nombres del dominio de Windows, podemos configurar el recursor para que redirija las peticiones al controlador de dominio de Windows. Ésto es algo tan sencillo como modificar el parámetro forward-zones del fichero /etc/powerdns/recursor.conf:
forward-zones=gobex.pri=172.21.8.8,juntaextremadura.pri=172.21.8.8,eco.pri=172.21.8.8
Para añadir el nombre del dominio que hay que resolver = ip del servidor que lo va a resolver. Por ejemplo, si mi dominio de Windows es instituto.extremadura.es y debe resolverlo el controlador de dominio de Windows cuya ip es 172.19.144.X, el parámetro forward-zones quedaría así:
forward-zones=instituto.extremadura.es=172.19.144.X,gobex.pri=172.21.8.8,juntaextremadura.pri=172.21.8.8,eco.pri=172.21.8.8
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 7 de noviembre de 2016

Módulo puppet para garantizar la instalación de mscorefonts (Microsoft True Type core fonts)

Es necesario instalar el paquete ttf-mscorefonts-installer para disponer de las siguientes fuentes en Debian:

  • Arial
  • Comic Sans MS
  • Courier New
  • Georgia
  • Impact
  • Times New Roman
  • Trebuchet
  • Verdana
  • Webdings

En el post anterior, vimos cómo asegurarnos de que las fuentes se encuentren instaladas, porque en ocasiones, es posible que tengamos instalado el paquete pero no se hayan añadido las fuentes; probablemente por haber realizado una instalación automática que no ha aceptado la licencia.

En este post os voy a mostrar un módulo puppet muy sencillo que permite asegurar que las fuentes se encuentren instaladas, algo más que útil cuando tenemos que realizar el mismo procedimiento en una gran cantidad de máquinas:

/etc/puppet/modules/puppet_msttcorefonts/manifests/init.pp
class puppet_msttcorefonts {

   exec { 'accept-msttcorefonts-license':
      command => 'echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections',
      unless  => 'debconf-get-selections | egrep "msttcorefonts/accepted-mscorefonts-eula.*true"',
      notify  => Exec['reinstall-msttcorefonts']
   }

   exec { 'reinstall-msttcorefonts':
      command => 'apt-get install --reinstall ttf-mscorefonts-installer',
      require => Exec['accept-msttcorefonts-license'],
      refreshonly => true
   }

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

Ubuntu 14.04: El paquete ttf-mscorefonts-installer se encuentra instalado pero las fuentes no

Si no lo habéis comprobado, es posible que creáis que tenéis instaladas las mscorefonts en Ubuntu 14.04, por haber instalado el paquete ttf-mscorefonts-installer, pero las fuentes no aparecen en el directorio /usr/share/fonts/truetype/msttcorefonts.

El paquete ttf-mscorefonts-installer se encuentra instalado:
# dpkg -l|grep mscorefonts
ii  ttf-mscorefonts-installer                   3.4+nmu1ubuntu1
Pero en el directorio /usr/share/fonts/truetype/msttcorefonts/ está vacío:
# ls /usr/share/fonts/truetype/msttcorefonts/
README
Para solucionar el problema, podemos utilizar debconf para aceptar la licencia:
# echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections
Y luego reinstalar el paquete:
# apt-get install --reinstall ttf-mscorefonts-installer
Una vez hecho ésto, si listamos el contenido de directorio /usr/share/fonts/truetype/msttcorefonts/ , comprobaremos que ahora sí tenemos las fuentes:
# ls /usr/share/fonts/truetype/msttcorefonts/Andale_Mono.ttf         comic.ttf                    Georgia.ttf                      Trebuchet_MS_Bold.ttf
andalemo.ttf            courbd.ttf                   georgiaz.ttf                     Trebuchet_MS_Italic.ttf
arialbd.ttf             courbi.ttf                   impact.ttf                       Trebuchet_MS.ttf
arialbi.ttf             Courier_New_Bold_Italic.ttf  Impact.ttf                       trebucit.ttf
Arial_Black.ttf         Courier_New_Bold.ttf         timesbd.ttf                      trebuc.ttf
Arial_Bold_Italic.ttf   Courier_New_Italic.ttf       timesbi.ttf                      Verdana_Bold_Italic.ttf
Arial_Bold.ttf          Courier_New.ttf              timesi.ttf                       Verdana_Bold.ttf
Arial_Italic.ttf        couri.ttf                    Times_New_Roman_Bold_Italic.ttf  verdanab.ttf
ariali.ttf              cour.ttf                     Times_New_Roman_Bold.ttf         Verdana_Italic.ttf
arial.ttf               Georgia_Bold_Italic.ttf      Times_New_Roman_Italic.ttf       verdanai.ttf
Arial.ttf               Georgia_Bold.ttf             Times_New_Roman.ttf              verdana.ttf
ariblk.ttf              georgiab.ttf                 times.ttf                        Verdana.ttf
comicbd.ttf             Georgia_Italic.ttf           trebucbd.ttf                     verdanaz.ttf
Comic_Sans_MS_Bold.ttf  georgiai.ttf                 trebucbi.ttf                     webdings.ttf
Comic_Sans_MS.ttf       georgia.ttf                  Trebuchet_MS_Bold_Italic.ttf     Webdings.ttf
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 6 de noviembre de 2016

pkgsync 1.32: Asegurar el estado de los paquetes y purgar viejos kernels al principio

En esta nueva versión del paquete tan sólo he realizado un par de modificaciones:
  • Para asegurar el estado de los paquetes, he incluído la siguiente línea:
    • dpkg --configure -a && apt-get -f install
  • He añadido la eliminación de kernels al principio también; de manera que se eliminen kernels antiguos antes de instalar actualizaciones o nuevos paquetes. De este modo, liberamos espacio en /boot para evitar que se llene si lo tenemos en una partición separada con un tamaño muy ajustado.
Para consultar la ayuda de pkgsync:
# man pkgsync
Para consultar la ayuda de purge-old-kernels:
# man purge-old-kernels

Aquí podéis ver el código completo de pkgsync:

Y si queréis descargar el paquete que instala esta versión de pkgsync, aquí lo tenéis:
https://mega.nz/#!AxNAHYbJ!qPZC5EBLLPoaBqZ_Sh8Cr-nQLxgZDsmvGsgglt3ayoc
Publicado por primera vez en http://enavas.blogspot.com.es

sábado, 5 de noviembre de 2016

Añadir máquinas a un dominio Windows con Powershell

En un post de octubre os mostré cómo podemos añadir máquinas a un dominio de Windows. En esta ocasión vamos a ver cómo podemos hacer lo mismo utilizando un script de PowerShell, un lenguaje de scripting y shell de línea de comandos creado por Microsoft y diseñado especialmente para la administración del sistema.

Todos nuestros equipos de Infolab vienen con sistema de arranque dual Windows/Xubuntu. La parte de administración de Ubuntu e inicio de sesión se encuentra resuelta, pero en Windows no hay nada resuelto. Los usuarios deben iniciar sesión con el mismo usuario local, con todos los problemas que ello acarrea y los administradores debemos gestionar las máquinas de forma individual con todo el trabajo que ello supone.

Alguien decidió que implantar Windows sin planificar, diseñar el sistema y sin contar con los técnicos era una buenísima idea, y, por desconocimiento o incompetencia, creyó que con "tirar" el sistema operativo encima de las máquinas era suficiente. Ahora con las máquinas desplegadas, y tenemos que buscar soluciones para dar respuesta a los usuarios sobre cosas que ni tan si quiera se han planificado, algo que resulta increíblemente complicado porque no tenemos laboratorios de pruebas.

Enfin, a lo que iba... Como los equipos tienen un nombre genérico (Destkop-xxxxx), queremos darles un nombre más lógico que coincida con el que la máquina tiene en Ubuntu y al mismo tiempo, añadirlo al dominio de Windows.

El script que he creado es muy simple y se entiende perfectamente sin saber mucho de Powershell. 
$Domain = 'instituto.extremadura.es'
$hostname = Read-Host -Prompt 'Nombre del equipo'

Rename-Computer $hostname
Add-computer -domainname $Domain -Credential instituto\gestor -newname $hostname -Restart
Veamoslo paso a paso:
  • En una variable a la que hemos llamado "Domain" introducimos el nombre de nuestro dominio:
$Domain = 'instituto.extremadura.es'
  • En una variable a la que hemos llamado "hostname" introducimos el nombre del host,  pero en lugar de especificar su valor, solicitamos al usuario que lo introduzca mediante teclado: 
$hostname = Read-Host -Prompt 'Nombre del equipo'
  • A continuación ejecutamos un cmdlet que nos permite renombar el equipo con el nombre almacenado en la variable $hostname:
Rename-Computer $hostname
  • Y, por último, ejecutamos el cmdlet que permite añadir el equipo al dominio:
Add-computer -domainname $Domain -Credential instituto\gestor -newname $hostname -Restart
En este último paso comentar dos cosas:

Una es que estamos especificando la credencial de un administrador cuyo nombre es "gestor" y pertenece al dominio "instituto" directamente en el comando (-Credential instituto\gestor). Si nos interesa más, podríamos solicitar al usuario que la introdujera por pantalla y la almacenamos en una variable y, posteriormente, usar la variable en el cmdlet Add-computer . Por ejemplo:
$Credential = Get-Credential

Otra, que estamos utilizando el parámetro -Restart para reiniciar el equipo justo después de cambiar el nombre, puesto que Windows requiere reiniciar para aplicar los cambios.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 3 de noviembre de 2016

Instalar Master PDF Editor en Ubuntu

Master PDF Editor es una excelente herramienta para editar ficheros PDF en Linux, Windows o Mac OS X que se encuentra disponible tanto en versión comercial como free.

La versión free tan sólo puede utilizarse con fines no comerciales, como por ejemplo, para propósitos educativos o uso en casa y tiene algunas funciones bloqueadas:
  • "Paste to Multiple Pages"
  • "Save Optimized As..."
  • "Document Actions"
  • "Document JavaScript"
  • "Page Properties"
  • "Signing PDF with digital signature"
Si queréis disponer de estas funciones, tendréis que adquirir una licencia. 

Instalarlo en Ubuntu es sencillo:

Primero.- Descargamos el paquete, que se encuentra disponible tanto para 32 como 64 bits, desde el sitio web. Por ejemplo:
# wget http://get.code-industry.net/public/master-pdf-editor-3.7.10_amd64.deb
La 3.7.10 es la última versión disponible a día de hoy.

Segundo.- Instalamos el paquete:
# dpkg -i master-pdf-editor-3.7.10_amd64.deb
Tercero.- Y por último, instalamos sus dependencias:
# apt-get -f install

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

martes, 1 de noviembre de 2016

Instalar la última versión de Google Earth en Debian/Ubuntu

Por lo que he podido comprobar, Google ya no mantiene los repositorios de Google Earth. Así que si queréis instalar la última versión disponible, tendréis que descargarlo desde la página web.

Si queréis descargar la versión de 64 bits:
# wget https://dl.google.com/dl/earth/client/current/google-earth-stable_current_amd64.deb
Si queréis descargar la versión de 32 bits:
# wget https://dl.google.com/dl/earth/client/current/google-earth-stable_current_i386.deb
Una vez descargado el paquete correspondiente a vuestra arquitectura, no tenéis más que instalarlo con dpkg:
# dpkg -i google-earth-stable_current_amd64.deb
# dpkg -i google-earth-stable_current_i386.deb
Ahora bien, si lo que necesitáis es instalarlo en todas las máquinas, podéis hacer una tarea puppet, o mejor, colocarlo en el musthave de vuestros equipos, y agregarlo a vuestro repositorio local.
Publicado por primera vez en http://enavas.blogspot.com.es

Configurar máquina virtual KVM para que se inicie en el arranque

Podemos gestionar nuestras máquinas virtuales completamente desde la línea de comandos con tan sólo utilizar qm manager, algo de lo más interesante cuando no tenemos acceso a la interfaz web o queremos automatizar tareas.

Si queremos configurar una máquina virtual para que se inicie en el arranque desde la línea de comandos no tenemos más que ejecutar el siguiente comando:
# qm set 100 -onboot yes
Con este comando le estamos diciendo a qm manager que:
  • Queremos establecer una opción en la máquina virtual 100: qm set 100
  • Y que esa opción es activar el arranque automático: -onboot yes

Y si queremos desactivar el arranque automático de una máquina virtual desde la línea de comandos no tenemos más que cambiar la opción 'yes' por 'no' en el comando anterior:
# qm set 100 -onboot no
Publicado por primera vez en http://enavas.blogspot.com.es