18 junio 2011

Script para instalar WmwareTools en Linux

Tengo varias máquinas virtuales de vmware sin las X instaladas y cada vez que tengo que instalar las VmwareTools o actualizarlas debo:

- Montar el cdrom.
- Instalar los paquetes necesarios.
- Copiar el archivo comprimido.
- Descomprimirlo.
- Instalarlas.

Algunos dirán que tampoco es tanto trabajo y tienen toda la razón, pero cuando tienes que hacerlo bastantes veces la tarea te resulta cuanto menos tediosa. Así que he decidido realizar un sencillo script en bash para automatizar las tareas antes descritas. Incluso la instalación de paquetes de las distribuciones que uso (RedHat, CentOS, Debian, Ubuntu) sin tener que especificarlo.

vim vmtools.sh

#!/bin/bash -
#==============================================================================
#       ARCHIVO:  vmtools.sh
#           USO:  ./vmtools.sh
#
#   DESCRIPCION:  Monta Cd de VmwareTools, verifica la instalación de los
#                paquetes necesarios según la distribución (redhat/Centos/
#                 Debian/Ubuntu), copia y descomprime el archivo e
#                inicia la instalación.
#
#      OPCIONES:  ---
#         NOTAS:  ---
#    REQUISITOS:  Tener permisos de root
#        AUTHOR:  Nebur (Más Vale Manya ...), masvalemanya@gmail.com
#           WEB:  http://masvale-manya.blogspot.com
#        CREADO:  16/06/11
#==============================================================================

set -o nounset                              # Treat unset variables as an error

#-------------------------------------------------------------------------------
#  Verifica que somos root y sino salimos
#-------------------------------------------------------------------------------
if [ $UID -ne 0 ]; then
echo "Necesitas ser root para que el script funcione!"
exit
fi

#-------------------------------------------------------------------------------
#  Creando directorio si es necesario
#-------------------------------------------------------------------------------
dir="/media/cdrom"
if [ ! -d $dir ]; then
mkdir $dir
fi

#-------------------------------------------------------------------------------
#  Verifica si el cdrom esta montado y sino lo monta
#-------------------------------------------------------------------------------
mens="motar el cdrom ..."
echo "$mens"
echo ""
montado=$(mount | grep "^/dev/sr0")
if [ -z "$montado" ]; then
cont=0
while [ $cont == 0 ]; do
error="No se ha podido montar el cdrom"
elegir="Quieres volver a intentarlo? (1)SI (2)No"
mal="Solo puedes elegir (1) para si o (2) para no"
cdrom="/dev/cdrom"
mount -t iso9660 $cdrom $dir &> /dev/null && cont=1 || cont=0
if [ $cont == 0 ]; then
resp=0
while [ $resp != 1 ] || [ $resp != 2 ]; do
echo "$error"
echo "$elegir"
read resp
case $resp in
1)
echo "Volviendo a $mens"
echo ""
;;
2)
exit
;;
"")
resp=1
echo "Volviendo a $mens"
echo ""
;;
*)
echo "$mal"
;;
esac    # --- end of case ---
done
fi
done
else
dir=$(mount | grep "^/dev/sr0" | cut -d' ' -f3)
fi
mens="Cdrom montado con exito ..."
echo "$mens"
echo ""

#-------------------------------------------------------------------------------
#  Instala los paquetes necesarios según distribución
#-------------------------------------------------------------------------------
inst="Instalando los requisitos necesarios ..."
echo "$inst"
echo ""
rhc="autoconf automake gcc gcc-c++ kernel-devel"
ud="autoconf automake binutils cpp build-essential gcc linux-headers-$(uname -r)"
error="No se han podido instalar los paquetes necesarios. Intente instalarlos y vuelva a ejecutar el script. Los paquetes son: "
paquet=""
if [ -f "/etc/redhat-release" ]; then
paquet="$rhc"
yum -y install $paquet &> /dev/null && cont=1 || cont=0
elif [ -f "/etc/debian-release" ] || [ -f "/etc/lsb-release" ]; then
apt=$(dpkg -l aptitude | grep -w "aptitude" | grep "^ii")
if [ ! -z "$apt" ]; then
orden="aptitude"
else
orden="apt-get"
fi
paquet="$ud"
$orden -y install $paquet &> /dev/null && cont=1 || cont=0
fi
if [ $cont == 1 ]; then
inst="Cambios realizados con exito ..."
echo "$inst"
echo ""
else
echo "$error$ud"
echo ""
exit
fi

#-------------------------------------------------------------------------------
#  Copiar vmware-tools e iniciar su instalación
#-------------------------------------------------------------------------------
inst="Preparando la instalación ..."
echo "$inst"
echo ""
pretools="/VMwareTools*"
c_tools=$(echo "$(ls $dir$pretools)")
a_tools=$(echo "$c_tools" | awk -F "/" '{print $NF}')
tools="vmware-tools-distrib"

cp $c_tools /tmp
cd /tmp
tar xzvf $a_tools &> /dev/null
cd $tools
./vmware-install.pl

Y como siempre le damos permisos de ejecución

chmod +x vmtools.sh

No hay comentarios: