Archivo

Archivo para la categoría ‘Sistemas Operativos’

TareasWindows7

Lunes, 26 de marzo de 2012

Tareas en Windows 7 desde la línea de comandos

Para gestionar las tareas en Windows 7, además del Programador de Tareas accesible desde el panel de control (en sistema y seguridad), disponemos del comando schtasks.exe. Este comando sustituye al comando at.exe (aunque todavía se encuentra presente).

Para ver las tareas que tenemos programadas podemos usar:

C:\>schtasks |more

En el listado que nos aparece se nos muestra el estado de cada tarea y podemos ver las que no se han iniciado (puede que por algún problema). Si queremos borrar alguna de estas tareas simplemente ejecutaremos:

C:\>schtasks /delete /TN "Nombre de la tarea"

El sistema nos solicitará confirmación y la tarea será borrada del sistema.

 

Windows ,

LDAPSearchWrapLines

Viernes, 28 de octubre de 2011

Corte de líneas largas en LDAPSearch

Si en el LDIF que se devuelve como resultado de una consulta al LDAP con el comando ldapsearch hay líneas más largas de 76 caracteres, estas lineas son cortadas y los caracteres sobrantes se escriben en la línea siguiente (esta línea comienza por un espacio en blanco):

dn: cn=UN_NOMBRE_LARGO_MUY_LARGO,cn=portal.080827.121025.144000000,cn=groups,d
 c=username,dc=local

Para volver a concatenar estas líneas podemos usar el siguiente script escrito en Perl:

#!/usr/bin/perl

$cnt=0;
while ($line = <>) {
 chomp($line);
 if ( $line =~ /^authpassword/ ) {
 next;
 } elsif ( $line =~ /^\S+/) { ### this line is a "normal" or starting line
 $results[$cnt++] = $line;
 } elsif ( $line =~ /^$/ ) {  ### this line is blank
 $results[$cnt++] = "";
 } elsif ( $line =~ /^ \S+/ ) {  ### this line is a continuation
 $results[$cnt-1] = $results[$cnt-1] . substr($line,1);
 }
}

for $i (0 .. $cnt) {
 print "$results[$i]\n";
}

Este script se ha obtenido de la dirección: http://www.dannorris.com/2008/09/08/concatenating-lines-in-ldapsearch-results/

Linux , ,

CommitMonitor

Martes, 18 de octubre de 2011

CommitMonitor: utilidad sencilla para monitorizar repositorios SVN

CommitMonitor es una pequeña utilidad para Windows que permite monitorizar los commits que se realizan a repositorios Subversion.

Esta utilidad se queda residente en el system tray de Windows y periodicamente monitoriza los repositorios SVN que nos interesan y nos avisa con los últimos commits realizados en ellos. El intervalo de tiempo entre las comprobaciones es configurable para cada repositorio.

Windows

RPMBinario

Lunes, 23 de mayo de 2011

Creación de RPMs binarios

El propósito de este documento es detallar los pasos que se han seguido para crearnos nuestro primer RPM. Como es el primero seguramente el proceso es notoriamente mejorable, pero por algo hay que empezar.

Necesitamos instalarlos la herramienta rpmbuild

# yum install rpm-build

Nos creamos un directorio donde crearemos los ficheros:

# mkdir /root/misrpms

Dentro de este directorio nos cremos otros: SPECS, BUILD, RPMS, SRPMS, SOURCES

# cd /root/misrpms
# mkdir SPECS BUILD RPMS SRPMS SOURCES

Nos cremos un fichero ~/.rpmmacros con el siguiente contenido:

%_topdir /root/misrpms
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS

Ahora nos creamos el fichero spec del RPM a construir que contiene los datos necesarios para construir el RPM ~/misrpms/SPECS/aspell-eu.spec:

Name:           aspell-eu
Version:        20081029
Release:        1%{?dist}.el5
Summary:        Basque dictionary for aspell
Group:          Applications/Text
License:        GPL

%description
Basque dictionary for aspell 0.60. Files obtained from .deb package.

%prep

%build

%install

%clean

%files
%defattr(-,root,root,-)
/usr/lib/aspell-0.60/eu.multi
/usr/lib/aspell-0.60/eu.rws
/usr/lib/aspell-0.60/eu.dat
/usr/lib/aspell-0.60/euskera.alias
/usr/lib/aspell-0.60/eu_affix.dat

%doc

%changelog
* Mon Nov  8 2010  David Fernanez <david.fernandez@ehu.es>
- Initial version

Una vez creado este fichero ya procedemos a generar el RPM:

# rpmbuild -bb SPECS/aspell-eu.spec

En este comando podemos especificar la arquitectura para la que se crea el paquete con –target (pe. noarch, i386,…). Si no se específica se usará la del servidor donde se construye el paquete.

Y ya tenemos nuestro RPM en ~/misrpms/RPMS/noarch/aspell-eu-20081029-1.el5.noarch.rpm

Linux ,

Rsyslog5enRH5

Lunes, 14 de marzo de 2011

Instalar Rsyslog 5.6.x en Red Hat 5

Red Hat 5 a partir de la versión 5.2 incluye el software rsyslog. Rsyslog es un sustituto del syslog tradicional de los sistemas Unix que incorpora funcionalidad nueva (envio de logs mediante TCP, a una BBDD,…). Sin embargo, la versión que se incluye con la distribución (3.22.x) es bastante antigua y tiene limitaciones.

En mi caso concreto me encontré con un error en el módulo imfile (módulo de rsyslogpara la lectura de fichros de logs). Este error ocasionaba que bajo determinadas circunstancias, en ficheros grandes, rsyslog perdiera el punto donde se encontraba leyendo el fichero y volviera a empezar desde el principio, con la consiguiente duplicación de mensajes.

Por este motivo decidí proceder a la instalación de una versión más reciente de rsyslog (la rama estable a fecha de este documento 5.6.x). Dado que esto lo debía hacer en varios servidores, en lugar de compilar en software en cada uno de ellos, me decidí por la opción de generar un RPM binario para luego instalar el software en los diferentes servidores.

Generar un RPM binario con la nueva versión de RSYSLOG para RH5

En primer lugar nos descargamos el SourceRPM del paquete rsyslog del RawHide de Fedora (a fecha de este documento este source era para la versión 5.6.2 de rsyslog). También nos descargamos el código fuente de Rsyslog.

En principio a partir de un Source RPM es fácil generar los RPMS binarios, pero en este caso a partir de Fedora 11 se ha cambiado el algoritmo resumen a la hora de generar los RPMs por lo que no podemos usar directamente ese Source RPM, tenemos que volver a generarlo.

Para volver a generar el Source RPM en primer lugar extraemos los ficheros del mismo:

# rpm2cpio rsyslog-5.6.2-2.fc15.src.rpm | cpio -idmv
cpio: rsyslog-5.6.2.tar.gz not created: newer or same age version exists
rsyslog-5.6.2.tar.gz
rsyslog.conf
rsyslog.init
rsyslog.log
rsyslog.spec
rsyslog.sysconfig
4451 blocks

Además de regenerar el source RPM vamos a actualizar la versión del paquete RPM. Para eso copiamos los ficheros rsyslog.conf, rsyslog.init, rsyslog.log y rsyslog.sysconfig extraidos anteriormente a la carpeta ~/SOURCES del rpmbuild (ver creación de un RPM binario). También copiamos a esta carpeta el fichero con el código fuente de RSYSLOG que nos hemos descargado (rsyslog-5.6.4.tar.gz).

Modificamos el fichero ~/SOURCES/rsyslog.log y lo dejamos como sigue (si no hacemos esto, al instalar el RPM se producirá un conflicto en el fichero /etc/logrotate.d/syslog con el paquete sysklogd de la distribución de Red Hat y eso nos complicará – aunque no de forma insalvable – la instalación de la nueva versión de rsyslog):

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
 sharedscripts
 postrotate
 /bin/kill -HUP catvarrunsyslogd.πd2>devνll 2> /dev/null || true
 /bin/kill -HUP catvarrunrsyslogd.πd2>devνll 2> /dev/null || true
 endscript
}

A continuación editamos el fichero rsyslog.spec y cambiamos las líneas 8 y 9:

Version: 5.6.2
Release: 2%{?dist}

por

Version: 5.6.4
Release: 1%{?dist}

Para generar el RPM binario necesitamos instalar una serie de dependencias. Para ello instalamos los siguientes paquetes:

# yum install mysql-devel postgresql-devel krb5-devel librelp-devel gnutls-devel net-snmp-devel

El paquete librelp-devel lo encontraremos en el repositorio EPEL.

Ahora procedemos a reconstruir el source RPM con:

# rpmbuild -bs rsyslog.spec

Una vez regenerado el source RPM procedemos a compilarlo para generar los binarios (vamos a necesitar el gcc). Lo hacemos con:

# rpmbuild --rebuild ~/SRPMS/rsyslog-5.6.4-1.src.rpm

Si todo va bien se nos habrán creado los RPMs binarios en ~/RPMS. Estos binarios son dependientes de la arquitectura por lo que habrá que generarlos en un servidor de 32 bits para las maquinas de 32 bits y en un servidor de 64 bits para las maquinas de 64 bits.

Estos RPMs ya están listos para ser instalados. Para facilitar este proceso se han movido al repositorio EHURepo.

Linux , , , ,

TimeoutComandoBash

Miércoles, 2 de febrero de 2011

Timeout para un comando en Bash

En algunas ocasiones nos puede interesar lanzar un comando con un timeout para acabar el comando en caso de que se demore más de un tiempo deseado.

Para hacer esto he encontrado un script que nos permite invocar un comando con un timeout. Si el timeout se supera, se termina la ejecución del comando, aunque éste no haya acabado.

La sintaxis es:

# ./timeout3 -t 5 comando parámetros-comando

Parece que en las últimas versiones del paquete coreutils (versión 7) ya se incluirá un comando timeout. Sin embargo, la versión que viene instalada en RH 5 es la 5.97.

Linux ,

CheckUpdatesRedHat4

Viernes, 21 de enero de 2011

Chequeo automático de actualizaciones pendientes en Red Hat 4

Al tener que administrar varios servidores linux Red Hat, me pareció interesante disponer de un sistema que me avisará mediante correo electrónico de las actualizaciones pendientes de instalar en los diferentes servidores para que no haya ninguno que se quede demasiado desactualizado.

En Red Hat 5 esto se puede hacer mediante el servicio yum-updatesd que viene incluido, pero para Red Hat 4 no he encontrada algo parecido. Por eso me he creado un script personalizado para hacer este trabajo. Este script además de avisar por e-mail, también descarga los paquetes para que la próxima vez que se haga la actualización esta sea más rápida. El script en cuestión es el siguiente:

#!/bin/bash

AVISADOS="root@midominio.es"
HOSTNAME=`hostname`
TMPDIR=/tmp
# Esperamos un tiempo aleatorio para que todos los servidores
# no ataquen a la RHN a la vez
sleep `expr $RANDOM % 300`
TMPFILE=`mktemp -p $TMPDIR checkup2date.XXXXXX`
TMPFILE2=`mktemp -p $TMPDIR checkup2date.XXXXXX`
# Obtenemos la lista de paquetes pendientes
/usr/bin/up2date -l > $TMPFILE
# Descargamos los paquetes para facilitar la instalacion posterior
/usr/bin/up2date -u -d -f  > /dev/null 2>&1
# Procesamos la lista de pendientes
ESTADO=0
CONT=0
while read linea
do
   if [[ `echo $linea | grep "^Name"` ]]
   then
      ESTADO=1
   elif [[ `echo $linea | grep "^--*$"` ]]
   then
      continue
   elif [[ $ESTADO -eq 1 && -z $linea ]]
   then
      ESTADO=0
   elif [[ $ESTADO -ne 0 ]]
   then
      echo $linea | awk -F" " '{printf "     %-50s %s-%s\n",$1,$2,$3}' >> $TMPFILE2
      CONT=`expr $CONT + 1`
   fi
done < $TMPFILE
# Generamos el mensaje de correo segun el num. de paquetes pendientes
case "$CONT" in
 0)
   SUBJECT="$HOSTNAME: no updates available"
   echo "Hi," > $TMPFILE
   echo "This is the automatic update system on $HOSTNAME" >> $TMPFILE
   echo >> $TMPFILE
   echo "There is no package updates available." >> $TMPFILE
   echo >> $TMPFILE
   echo "Thank You," >> $TMPFILE
   echo "Your Computer" >> $TMPFILE
   ;;
 1)
   SUBJECT="$HOSTNAME: 1 update available"
   echo "Hi," > $TMPFILE
   echo "This is the automatic update system on $HOSTNAME" >> $TMPFILE
   echo >> $TMPFILE
   echo "There is 1 package update available. Please run the system updater." >> $TMPFILE
   echo  >> $TMPFILE
   echo "Package available for update: " >> $TMPFILE
   echo  >> $TMPFILE
   cat $TMPFILE2 >> $TMPFILE
   echo >> $TMPFILE
   echo "Thank You," >> $TMPFILE
   echo "Your Computer" >> $TMPFILE
   ;;
 *)
   SUBJECT="$HOSTNAME: $CONT updates available"
   echo "Hi," > $TMPFILE
   echo "This is the automatic update system on $HOSTNAME" >> $TMPFILE
   echo >> $TMPFILE
   echo "There are $CONT package updates available. Please run the system updater." >> $TMPFILE
   echo  >> $TMPFILE
   echo "Packages available for update: " >> $TMPFILE
   echo  >> $TMPFILE
   cat $TMPFILE2 >> $TMPFILE
   echo >> $TMPFILE
   echo "Thank You," >> $TMPFILE
   echo "Your Computer" >> $TMPFILE
   ;;
esac
# Enviamos el correo
cat $TMPFILE |mail -s "$SUBJECT" $AVISADOS
# Borrado temporales
rm -f $TMPFILE $TMPFILE2

Linux ,

AmpliarVolumenLVM

Jueves, 20 de enero de 2011

Ampliación de una partición sobre LVM

Para ampliar un volumen LVM desde la línea de comandos haríamos lo siguiente:

En primer lugar necesitamos obtener el nombre del volumen lógico de la partición a ampliar

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root 3.8G  2.9G  770M  80% /
/dev/mapper/VolGroup00-home 1.5G  1.4G  1.9M 100% /home
/dev/mapper/VolGroup00-tmp 485M   11M  449M   3% /tmp
/dev/mapper/VolGroup00-var 1.9G  1.1G  753M  60% /var
/dev/sda1              99M   25M   70M  27% /boot
tmpfs                1002M     0 1002M   0% /dev/shm

Ahora necesitamos conocer el nombre del volume group donde esta creado nuestra partición.

# lvdisplay /dev/mapper/VolGroup00-home
--- Logical volume ---
 LV Name                /dev/VolGroup00/home
 VG Name                VolGroup00
 LV UUID                pzBSAL-dvH9-2hv5-sfnM-YGES-3pWC-JGk9mq
 LV Write Access        read/write
 LV Status              available
 # open                 1
 LV Size                2.49 GB
 Current LE             637
 Segments               3
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:1

Ahora hemos de comprobar que hay espacio disponible para la ampliación. Si no fuera así deberíamos dar más espacio a esto volume group.

 # vgdisplay VolGroup00
--- Volume group ---
 VG Name               VolGroup00
 System ID
 Format                lvm2
 Metadata Areas        3
 Metadata Sequence No  12
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                4
 Open LV               4
 Max PV                0
 Cur PV                3
 Act PV                3
 VG Size               19.39 GB
 PE Size               4.00 MB
 Total PE              4964
 Alloc PE / Size       2262 / 8.84 GB
 Free  PE / Size       2702 / 10.55 GB
 VG UUID               zqOdUf-3Y0b-78Gv-RUzO-8Ji3-ujpa-I0DaXw

Como tenemos espacio libre podemos ampliar la partición. Lo hacemos con el comando (en el ejemplo la ampliamos en 1 GB):

# lvresize -L +1GB /dev/mapper/VolGroup00-home
Extending logical volume home to 2.49 GB
Logical volume home successfully resized

Ahora tenemos que extender el sistema de ficheros. Lo hacemos con el comando resize2fs:

# resize2fs -p /dev/mapper/VolGroup00-home
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/mapper/VolGroup00-home is mounted on /home; on-line resizing required
Performing an on-line resize of /dev/mapper/VolGroup00-home to 2609152 (1k) blocks.
The filesystem on /dev/mapper/VolGroup00-home is now 2609152 blocks long.

Los dos comandos anteriores los podríamos ejecutar con uno solo si añadimos el flag -r al comando lvresize. El comando quedaría como sigue:

# lvresize -r -L +1GB /dev/mapper/VolGroup00-home

Ahora ya podemos ver el resultado:

#  df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root 3.8G  2.9G  770M  80% /
/dev/mapper/VolGroup00-home 2.5G  1.4G  943M  60% /home
/dev/mapper/VolGroup00-tmp 485M   11M  449M   3% /tmp
/dev/mapper/VolGroup00-var 1.9G  1.1G  753M  60% /var
/dev/sda1              99M   25M   70M  27% /boot
tmpfs                1002M     0 1002M   0% /dev/shm

Si en lugar de querer ampliar la partición en una cantidad determinada, lo que quisieramos es aprovechar todo el espacio disponible en el volumen podríamos usar el siguiente comando:

# lvresize -r -l +100%FREE /dev/mapper/VolGroup00-home

Linux

CreacionRepositorioYUM

Miércoles, 10 de noviembre de 2010

Creación de un repositorio YUM para Red Hat 4 y 5

En este documento pretendo explicar una forma rápida y sencilla de crearnos nuestro propio repositorio de paquetes RPM. El acceso al repositorio será vía web.

Crearemos un repositorio distinto por cada versión de SO (4 y/o 5) y arquitectura (32 bits y/o 64 bits). Los repositorios para Red Hat 4 serán accesibles mediante la herramienta up2date y los de Red Hat 5 mediante yum.

Para crear los repositorios necesitamos instalarnos las herramientas:

  • createrepo: es la encargada de generar los repositorios para YUM
  • repoview: genera unas páginas HTML indice con el contenido del repositorio. Estas páginas se generan dentro de una carpeta repoview y nos permite navegar por los paquetes del repositorio y obtener información sobre ellos.
  • yum-arch: esta herramienta la necesitamos para Red Hat 4 para generar unos ficheros .hdr que usa up2date.

Dado que el repositorio va a ser accesible vía web, también necesitamos un servidor web, en este caso yo voy a utilizar el servidor Apache.

Los repositorios se van a crear en un servidor con Red Hat 5 con el repositorio EPEL configurado (en este repositorio están disponibles las herramientas mencionadas con anterioridad).

La instalación de estas herramientas la hacemos con el siguiente comando:

yum install createrepo repoview yum-arch

A continuación nos creamos los directorios que albergarán el repositorio. Estos directorios deberán ser accesibles vía web.  Crearemos un directorio por cada repositorio.

Una vez creados los directorios hemos de copiar dentro de ellos los diferentes paquetes RPM que queremos dejar disponibles en el repositorio.

Nota:  Si tenemos activado SELinux, hemos de revisar el contexto de los ficheros *.rpm copiados, ya que por defecto se les asigna uno que los deja inaccesibles para el Apache.

Una vez copiados los RPMs que nos interesen y cada vez que se haga una modificación ejecutaremos los siguientes comandos para generar/actualizar el repositorio:

createrepo -d $dir
repoview $dir

siendo $dir el directorio del repositorio.

Además, en el caso de actualizar los repositorios de Red Hat 4 también ejecutaremos:

yum-arch $directorio

Al ejecutar esta herramienta obtenemos un aviso de que esta deprecated, pero es la forma que he encontrado para crear el repositorio en Red Hat 4.

Configuración del repositorio en los clientes

El activar el repositorio en los clientes depende de si vamos a usar Red Hat 4 (up2date) o Red Hat 5 (yum).

Red Hat 4 (up2date)

Nos hemos de crear un fichero /etc/yum.repos.d/myRepo.repo con el siguiente aspecto:

[myRepo]
name=myRepo Repository for Enterprise Linux 4 - $basearch
baseurl=http://$urlrepositorio
enabled=1
gpgcheck=0

Además hemos de dar de alta el repositorio en la configuración de los sources de up2date (/etc/sysconfig/rhn/sources) añadiendo las siguientes líneas al fichero mencionado con anterioridad:

#BEGIN myRepo
yum myRepo http://$urlrepositorio
#END myRepo

Con esto ya está dado de alta el repositorio en nuestro cliente.

Nuestro repositorio no tiene activado el uso de GPG. En caso de querer utilizar paquetes firmados con GPG hay que hacer más cosas, pero eso se escapa de los objetivos de esta documentación. Para poder utilizar este repositorio no firmado  es necesario pasar el parámetro –nosig al up2date para que no compruebe la firma GPG. Se podriá desactivar esta comprobación de forma global para todos los repositorios RPM, pero esto puede ser demasiado radical.

Red Hat 5 (Yum)

Nos hemos de crear un fichero /etc/yum.repos.d/myRepo.repo con el siguiente aspecto:

[myRepo]
name=myRepo Repository for Enterprise Linux 5 - $basearch
baseurl=http://$urlrepositorio
enabled=1
gpgcheck=0

A semejanza del repositorio EPEL (y supongo que otros) se podría crear un paquete RPM que se encargara de configurar el nuevo repositorio en nuestros clientes.

Linux , , , ,

Cambio idioma por defecto en Red Hat 5

Viernes, 10 de septiembre de 2010

Para cambiar el idioma por defecto en un equipo con Red Hat Enterprise Linux 5 podemos usar el comando:

# system-config-language

Este comando que funciona tanto en módo gráfico como texto nos permite seleccionar el idioma que queramos.

Linux ,