Algo de Linux

miércoles, 24 de mayo de 2017

Administrar extensiones de Gnome Shell en portablet Vexia

Todos los nuevos equipos de nuestros centros llevan montado Ubuntu Trusty con entorno de escritorio XFCE4, excepto los portablets Vexia, en los que instalaron Ubuntu Xenial con entorno de escritorio GNOME SHELL, motivado porque estos últimos dispositivos tienen pantalla táctil.

Los portablets Vexia tienen instaladas una serie de extensiones de Gnome Shell que modifican el comportamiento y la funcionalidad del escritorio. Pues bien, para instalar y gestionar estas extensiones, podemos instalar una extensión en Firefox y/o Google Chrome que permite la integración de GNOME SHELL con el repositorio de extensiones https://extensions.gnome.org/


Aquí podéis ver una imagen de la extensión instalada en Google Chrome:


Y en Firefox:

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

martes, 23 de mayo de 2017

Obtener la clave de Windows OEM mediante Windows OEM Product Key Tool

Los nuevos equipos con Windows ya no traen una pegatina con la clave de instalación. En lugar de ésto, incorporan la clave en la BIOS o EFI. 

Para obtener la clave de instalación de un equipo Windows con licencia OEM, podemos utilizar la herramienta Windows OEM Product Key Tool.


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

Quitar mensaje: Modo de Prueba | Windows 10

Es posible que en alguna ocasión hayáis visto el siguiente mensaje en la esquina inferior derecha de vuestro escritorio Windows:


Para eliminarlo, abrimos como administrador la herramientas de símbolo de sistema de Windows cmd y ejecutamos el siguiente comando: bcdedit -set TESTSIGNING OFF




Una vez hecho ésto, reiniciamos el equipo y listo.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 19 de mayo de 2017

Instalar paquetes mediante Chocolatey a través de un proxy de nuestra red

Como ya vimos en posts anteriores es muy sencillo instalar y mantener actualizada una gran cantidad de software en Windows mediante Chocolatey.


Para instalar un paquete en concreto, tan sólo tenemos que utilizar el comando choco install al que pasaremos el nombre del paquete:
C:\> choco install mls-software-openssh
Chocolatey detectará el proxy de nuestra red y lo usará para instalar los paquetes que le pidamos. Ahora bien, en un momento determinado, es posible que nos interese especificar otro proxy diferente del proxy por defecto. Por ejemplo:
C:\> choco install mls-software-openssh --proxy=recursos:3128
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 18 de mayo de 2017

WSUS Offline Update: Solucionar problema de timeout en script DoUpdate.cmd

En mi centro utilizo WSUS Offline Update para descargar las actualizaciones de Windows y Office e instalarlas de forma local, lo que reduce el tiempo de actualización  y el consumo de ancho de banda.

Para descargar las actualizaciones, se utiliza un script que se ejecuta una vez a la semana en el servidor de almacenamiento mediante cron.

Para actualizar los clientes se utiliza un script Doupdate.cmd que se encuentra en el directorio wsusoffline/client/cmd/.

Pues bien, actualizando clientes, observé que tanto al detener el servicio wuauserv, como al iniciarlo o esperar a que estuviera iniciado, siempre se alcanzaba el timeout, lo que retardaba la ejecución un tiempo extra de 180s + 60s.

Esta mañana me puse a ver el código y descubrí dónde estaba el problema: El script está pensado para obtener el estado del servicio filtrando por la palabra "STAT".  Ahora bien, como nuestro sistema se encuentra en español, esa condición no se produce y estaremos esperando hasta que se agote el tiempo definido en el script.
La forma más sencilla de solucionar el problema es cambiar la palabra "STAT" por "ESTADO".

Aquí tenéis la parte del script donde hay que realizar las modificaciones:
:WaitService
echo Waiting for service '%1' to reach state '%2' (timeout: %3s)...
echo %DATE% %TIME% - Info: Waiting for service '%1' to reach state '%2' (timeout: %3s)>>%UPDATE_LOGFILE%
echo WScript.Sleep(2000)>"%TEMP%\Sleep2Seconds.vbs"
for /L %%i in (2,2,%3) do (
  for /F "tokens=4" %%j in ('%SystemRoot%\System32\sc.exe query %1 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
    if /i "%%j"=="%2" (
      echo %DATE% %TIME% - Info: Service '%1' reached state '%2'>>%UPDATE_LOGFILE%
      del "%TEMP%\Sleep2Seconds.vbs"
      goto :eof
    )
  )
  %CSCRIPT_PATH% //Nologo //B //E:vbs "%TEMP%\Sleep2Seconds.vbs"
) 
echo Warning: Service '%1' did not reach state '%2' (timeout occured)
echo %DATE% %TIME% - Warning: Service '%1' did not reach state '%2' (timeout occured)>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
verify other 2>nul
goto :eof


:StopWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
  if /i "%%i"=="STOPPED" goto :eof
)
echo Stopping service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Stopping service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% stop wuauserv >nul 2>&1
if errorlevel 1 (
  echo Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed.
  echo %DATE% %TIME% - Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
  call :WaitService wuauserv STOPPED 30
  if not errorlevel 1 echo %DATE% %TIME% - Info: Stopped service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof


:StartWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
  if /i "%%i"=="RUNNING" goto :eof
)
echo Starting service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Starting service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% start wuauserv >nul 2>&1
if errorlevel 1 (
  echo Warning: Starting of service 'Windows Update' ^(wuauserv^) failed.
  echo %DATE% %TIME% - Warning: Starting of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
  call :WaitService wuauserv RUNNING 30
  if not errorlevel 1 echo %DATE% %TIME% - Info: Started service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof
Y aquí tenéis esa parte del script en la que he cambiado la palabra "STAT" por "ESTADO":

:WaitService
echo Waiting for service '%1' to reach state '%2' (timeout: %3s)...
echo %DATE% %TIME% - Info: Waiting for service '%1' to reach state '%2' (timeout: %3s)>>%UPDATE_LOGFILE%
echo WScript.Sleep(2000)>"%TEMP%\Sleep2Seconds.vbs"
for /L %%i in (2,2,%3) do (
  for /F "tokens=4" %%j in ('%SystemRoot%\System32\sc.exe query %1 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
    if /i "%%j"=="%2" (
      echo %DATE% %TIME% - Info: Service '%1' reached state '%2'>>%UPDATE_LOGFILE%
      del "%TEMP%\Sleep2Seconds.vbs"
      goto :eof
    )
  )
  %CSCRIPT_PATH% //Nologo //B //E:vbs "%TEMP%\Sleep2Seconds.vbs"
) 
echo Warning: Service '%1' did not reach state '%2' (timeout occured)
echo %DATE% %TIME% - Warning: Service '%1' did not reach state '%2' (timeout occured)>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
verify other 2>nul
goto :eof


:StopWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
  if /i "%%i"=="STOPPED" goto :eof
)
echo Stopping service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Stopping service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% stop wuauserv >nul 2>&1
if errorlevel 1 (
  echo Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed.
  echo %DATE% %TIME% - Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
  call :WaitService wuauserv STOPPED 30
  if not errorlevel 1 echo %DATE% %TIME% - Info: Stopped service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof


:StartWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
  if /i "%%i"=="RUNNING" goto :eof
)
echo Starting service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Starting service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% start wuauserv >nul 2>&1
if errorlevel 1 (
  echo Warning: Starting of service 'Windows Update' ^(wuauserv^) failed.
  echo %DATE% %TIME% - Warning: Starting of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
  call :WaitService wuauserv RUNNING 30
  if not errorlevel 1 echo %DATE% %TIME% - Info: Started service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 5 de mayo de 2017

Reparación de particiones NTFS en Linux

Algunos usuarios tienen las particiones de sus discos duros externos en formato NTFS  y, si una partición se ha desmontado mal en algún momento, es posible que se necesite ser reparada.

Para reparar particiones NTFS desde linux podemos utilizar en primera instancia la herramienta ntfsfix que vienen en el paquete ntfs-3g. Por ejemplo: Supongamos que estamos tratando de conectar un disco duro que nos está mostrando error al montarse y que tiene una única partición /dev/sdb1. Podríamos chequearlo mediante ntfsfix de la siguiente manera:
# ntfsfix /dev/sdb1
Publicado por primera vez en http://enavas.blogspot.com.es

ntfs-3g: Gestionar particiones NTFS desde Linux

ntfs-3g es una implementación open source del sistema de ficheros NTFS de Microsoft. Para poder trabajar con particiones ntfs en nuestro sistema Ubuntu/Debian, no tenemos más que instalar este paquete:
apt-get install ntfs-3g

Al instalar el paquete, tendremos a nuestra disposición, junto con el driver, una amplia colección de utilidades que nos permiten trabajar con particiones NTFS.

Veamos algunas de las utilidades que nos proporciona este paquete:
  • ntfsfix tal y como dice la ayuda, ntfsfix es una utilidad que arregla algunos problemas comunes en volumenes NTFS.
  • mkntfs nos permite formatear una partición con el sistema de archivos NTFS.
  • ntfsinfo nos permite ver informacion detallada de volumenes NTFS.
  • ntfslabel nos permite ver y cambiar la etiqueta de volumen de una particion NTFS.
  • ntfsresize nos permite redimensionar un volumen NTFS de forma no destructiva, moviendo de forma segura cualquier dato si es necesario.
  • ntfsundelete nos permite recuperar archivos eliminados de una particion NTFS.
  • ntfscluster identifica ficheros en una región específica de un volumen NTFS.
  • ntfscat muestra en pantalla ficheros de volumenes NTFS sin montar la particion.
  • ntfsls lista el contenido de directorios sin montar la particion.
  • ntfscp nos permite copiar ficheros en un volumen NTFS.
  • ntfsclone nos permite clonar volumenes NTFS o una parte de ellos.
Publicado por primera vez en http://enavas.blogspot.com.es

Controlar los clientes Ubuntu de Infolab con Epoptes

Para los que no lo conocen, Epoptes es una herramienta de control de aula GPL bastante sencilla de utilizar que funciona mediante un sistema cliente/servidor y que nos va a permitir:
  • Mostrar la pantalla en los clientes.
  • Supervisarlos.
  • Ejecutar comandos de forma remota.
  • Enviarles mensajes.
  • Aplicar restricciones como por ejemplo el bloqueo del terminal.
  • etc...
Es fácil de implantar. Tan sólo requiere instalar y configurar:
  • El paquete epoptes en el equipo del profesor.
  • El paquete epoptes-client en los equipos de alumnos.
Además, es sencillo de desplegar con un simple módulo puppet que instale y configure tanto el cliente como el servidor.

Para que el profesor pueda controlar el aula, tiene que estar en el grupo por defecto epoptes. No obstante, es posible cambiarlo en el fichero /etc/default/epoptes:
# The port where the server will be listening on, and where the client will try
# to connect to. For security reasons it defaults to a system port, 789.
#PORT=789

# Epoptes server will use the following group for the communications socket.
# That means that any user in that group will be able to launch the epoptes UI
# and control the clients.
#SOCKET_GROUP=epoptes
SOCKET_GROUP=teachers
En el directorio /etc/epoptes del equipo del profesor, donde hemos instalado el paquete epoptes, encontraréis dos ficheros que contienen la clave pública y la clave privada:
# ls -l /etc/epoptes/
total 8
-rw-r--r-- 1 root root 1919 abr 21 13:44 server.crt
-rw------- 1 root root 3272 abr 21 13:44 server.key
Podemos distribuir la clave pública del equipo del profesor (server.crt) a los clientes mediante el módulo puppet que creemos para configurarlo.

Por último, podemos crear un grupo de hosts para cada infolab y copiar la información de grupos a los profesores: $HOME/.config/epoptes/groups.json 

Una vez configurarlo, podremos, encender, apagar y controlar los equipos de alumnos:


Como podéis ver en la siguiente imagen, podemos controlar el equipo de alumno incluso antes de que inicie sesión:


Y veremos qué equipos están encendidos, cuáles se encuentran apagados y quién ha iniciado sesión en un determinado equipo:


Además, podemos conectarnos de forma remota mediante ssh exportando el display y controlaremos el aula desde nuestro equipo de administrador.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 4 de mayo de 2017

Eliminar rutas por defecto cuando tenemos varias interfaces de red

Supongamos que tenemos un equipo con al menos dos interfaces de red... Por ejemplo:
# cat /etc/network/intefaces
auto lo eth0 eth1

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet dhcp

Si queremos garantizar que la ruta por defecto sea la de la interfaz eth0, podemos eliminar la ruta por defecto de la interfaz eth1 simplemente añadiendo la línea que he resaltado en color amarillo y que se encarga de eliminarla:
auto lo eth0 eth1

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet dhcp
      post-up route del default dev $IFACE
Publicado por primera vez en http://enavas.blogspot.com.es

CUPS Cloud Print: Nueva versión del paquete

Como ya vimos en un post de septiembre de 2015, el paquete cupscloudprint nos permite utilizar impresoras de Google Cloud Print como impresoras locales en nuestro equipo.
El paquete que instalábamos en ese post no funcionaba en versiones más actuales del sistema operativo, por lo que el autor del paquete publicó una nueva versión corrigiendo los problemas. Si queréis, podéis descargarlo con wget:
# wget http://ppa.launchpad.net/simon-cadman/niftyrepo/ubuntu/pool/main/c/cupscloudprint/cupscloudprint_20160502-1_all.deb
E instalarlo directamente:
# dpkg -i cupscloudprint_20160502-1_all.deb
Publicado por primera vez en http://enavas.blogspot.com.es