[ubuntu-ar] consulta: como realizar un despliegue masivo

Mariano Mara marplatense at ubuntu.com
Tue Nov 11 19:04:22 GMT 2008


On 11/11/2008 04:22 PM, Damian Suarez wrote:
 >
 >
 > 2008/11/11 Fernando SISMONDA <fernando en sismonda.com.ar
 > <mailto:fernando en sismonda.com.ar>>
 >
 >
 >
 >     On Tue, Nov 11, 2008 at 12:26 PM, Marco Antonio <mhoyos en gmail.com
 >     <mailto:mhoyos en gmail.com>> wrote:
 >
 >         buenas...
 >
 >         con un amigo, nos surgio una duda que paso a comentarles...
 >
 >         alguien idea que sera recomendable usar para hacer un 
deployment de
 >         muchos Ubuntu Desktop ?? ej: mas de 100 maquinas..
 >
 >         es para el caso de actualizar y/o eliminar y/o modificar en los
 >         equipos, y no estar "sshacheando" uno por uno... sino, que se
 >         realice
 >         un despliegue hacia las maquinas, desde un solo equipo..
 >
 >         por ej: apt-get remove && apt-get install && etc...
 >
 >         si alguien sabe algo, se agradece.. :)
 >
 >         salu2
 >
 >
 >     Se que ubuntu tiene una implementación de kickstart. Que es una
 >     herramienta desarroyada por redhat para hacer instalaciones rápido.
 >
 >     Eso te solucionaría la puesta en marcha. Yo en ubuntu no tuve tiempo
 >     de probarlo.
 >
 >     Después para hacer actualizaciones, podes hacer un script que
 >     instale paquetes a de una lista de un repositorio local O grupos de
 >     paquetes. En donde trabajo se utiliza este esquema con varios miles
 >     de servidores.
 >
 >
 > A mi me pasa mas o menos lo mismo. Estoy en el departamento de
 > informática del municipio de mi ciudad. Son alrededor de 240 PCs. La
 > verdad que la tarea se pone un poco pesada. Lo que estoy haciendo a
 > pulmón es la configuración en forma medianamente automática a través de
 > scripts en el shell bash.
 > Cosas como configurar samba, actualizar el S.O., configurar permisos de
 > usuario, instalar paquetes, accesos directo en ele escritorio, etc; los
 > hago desde la línea de comandos y va como trompada.
 > Una de las primeras cosas que hice, y que estoy haceindo todavía, es un
 > repositorio local. Tengo problemas para descargar los sources (deb-src).
 > No estaría mal tratar de buscar una buena alternativa a este asunto,
 > creo que cada vez es algo que más se necesita.
 >
 > Yo por ejemplo, ahora me pregunto si es posible configurar la sesión de
 > un usuario en función de una configuración en un servidor. Por ejemplo,
 > guardar en el server el perfil de este usuario, y quecuando este se
 > loguee desde una terminal, seal cual sea, tome dicha configuración y se
 > la /baje/ a esa terminal. Se puede hacer algo así ?. Creo que esta
 > pregunta en realidad mueve el hilo del post ... hagámos de cuenta que es
 > una pregunta retórica. ;-)
 >
 > Saludos.
 >

Usando paramiko desde python es posible establecer una conexión ssh a
cada máquina y ejecutar los comandos necesarios, trayendo el output para
verificar si salió todo bien. No es nada que no sea posible hacer a puro
shell script pero con el control, precisión y elegancia que te da
python.
Con una llave autorizante del otro lado es posible ahorrarse el tema de 
passwords, debería ser trivial de implementar (aunque se los dice el 
tipo que en la oficina se hizo tristemente celebre por la frase: "eso es 
trabajo de una tarde").

Para que no digan que soy un bocón vamos a hacer un ejemplo:
tengo un servidor remoto (CentOS 5) al cual solo se puede acceder con
una llave autorizada y a través del puerto 55555, esa llave está
encriptada desde mi máquina, por lo tanto para poder ingresar a ese
equipo se tienen que cumplir las siguientes reglas:
  1- solo se puede acceder con llave (no se puede con root, no se puede
con usuario ni password)
  2- esa llave tiene que estar presente en el equipo que se quiere
conectar (por lo tanto solo es posible conectarse desde mi computadora
personal).

Ahora veamos un ejemplo [1] donde primero listo los archivos que hay en 
mi /home en el servidor usando un sftp y luego ejecuto una actualización
del yum para ver si hay paquetes nuevos que instalar (para los que no
saben, el yum es una especie de apt-get para las distros que usan rpm).
En ambos casos me traigo la respuesta del server la cual podré analizar
en mi máquina para comprobar como salió el proceso.

Como es típico en Python, todo lo que dije que iba a hacer, lo hice en
apenas 12 líneas de código. Ahora se pueden imaginar que si tienen
llaves en cada máquina y guardan las ips (o el dnsname) de cada máquina
y a todas les mandan instrucciones de mantenimiento en un loop debería
ser posible controlar una gran granja de máquinas y mantenerlas
alineadas (los usuarios no deberían conocer la pass del root para
hacerlas más estables). Tecnicamente todo lo que puedan hacer por
consola, lo pueden hacer con un script de este estilo.

Mariano

[1]
$ ipython
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)

In [1]: import paramiko

In [2]: key = 
paramiko.RSAKey.from_private_key_file("/home/mariano/.ssh/id_rsa", 
'MiSuperComplejaPassword')

In [3]: transport = paramiko.Transport(('xx.xx.xx.xx', 55555))

In [4]: transport.start_client()

In [5]: transport.auth_publickey('mariano', key)
Out[5]: []

In [6]: sftp = paramiko.SFTPClient.from_transport(transport)

In [7]: dirlist = sftp.listdir('.')

In [8]: dirlist
Out[8]:
['.bash_logout',
  '.gnupg',
  '.lesshst',
  '.bash_profile.rpmnew',
  '.bashrc.rpmnew',
  '.bash_profile',
  '.bash_history',
  '.bashrc',
  '.rnd',
  '.bash_logout.rpmnew',
  '.mysql_history',
  '.bzr.log',
  '.ssh',
  '.bazaar']

In [9]: ch = transport.open_session()

In [10]: ch.exec_command('yum check-update')

In [11]: response = ch.recv(10000)

In [12]: response
Out[12]: 'Loading "fastestmirror" plugin\nLoading mirror speeds from 
cached hostfile\n * epel: mirror.unl.edu\n * base: 
centosu-msync-dvd.centos.org\n * updates: centosu-msync-dvd.centos.org\n 
* addons: ftp.osuosl.org\n * extras: centosu.centos.org\nExcluding 
Packages in global exclude list\n'





More information about the Ubuntu-ar mailing list