miércoles, 18 de marzo de 2015

Montaje de disco USB por nfs

Van a venir a hacer unas pruebas con esta idea:
Tienen una aplicación que funciona en linux para esta prueba. Los niños tendrían que utilizar esa aplicación para responder los que se les plantea.
Quieren que montemos un usb en una máquina de tal forma que la aplicación pueda escribir los resultados en dicho pendrive.
Tienen mucho interés en que no podamos copiar los archivos, por lo que quieren que se monte pero no que copiemos el contenido para compartirlo.

Por ello he utilizado el sistema de compartición por nfs que tenemos para montarlo, aunque en vez de montarlo en el servidor nfs voy a hacerlo en el servidorweb, un ltsp-server que tengo. Para ello la única operación previa es instalar nfs-kernel-server.

       1 . Enganchar el usb e identificar cual es el dispositivo:
root@servidorweb:~# ls /dev/sd*
/dev/sda   /dev/sda2  /dev/sdb   /dev/sdc   /dev/sdd   /dev/sde
/dev/sda1  /dev/sda3  /dev/sdb1  /dev/sdc1  /dev/sdd1  /dev/sde1
en mi caso es el último, /dev/sde1.

     2. Crear un directorio donde vamos a montar el usb:

root@servidorweb:~# mkdir /mnt/clone

     3. Montar el usb con opciones escribible.

root@servidorweb:~# mount -o rw,defaults,umask=0000 /dev/sde1 /mnt/clone/

     4. Para compartir el directorio por nfs especificamos en /etc/exports con qué máquinas y qué directorios:
root@servidorweb:~# cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/mnt/clone 172.XX.XX.X/255.255.255.0(rw,async)
en este caso digo que quiero compartir a todos los equipos del rango 172.XX.XX.X en modo escribible y asincrono. Con esto ya está finalizada la configuración del servidor. 
Ahora queda configuración en los clientes.
     5. En archivo /etc/master dice los ficheros en que tiene que mirar para montar directorios por nfs en arranque con autofs.
root@cliente:~# cat /etc/auto.master
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#
#/misc /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
# "nosuid" and "nodev" options unless the "suid" and "dev"
# options are explicitly given.
#
#/net -hosts
#
# Include /etc/auto.master.d/*.autofs
#
+dir:/etc/auto.master.d
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master
/homeInst /etc/auto.instituto

en nuestro caso dice que monte en /homeInst lo que le indica el archivo /etc/auto.instituto
     6. /etc/auto.instituto
root@cliente:~# cat /etc/auto.instituto
aulas -fstype=nfs,rw,hard,intr,nodev,nosuid,nolock,rsize=8192 servidor:/home/aulas
personal -fstype=nfs,vers=3,rw,hard,intr,nodev,nosuid,nolock,nobrowse,rsize=8192 servidor:/home/profesor/$USER
instituto -fstype=nfs,vers=3,rw,hard,intr,nodev,nosuid,nolock,nobrowse,rsize=8192 servidor:/home/instituto
departamento  -fstype=nfs,vers=3,rw,hard,intr,nodev,nosuid,nolock,nobrowse,rsize=8192 servidor:/home/profesor/dpto
prueba -fstype=nfs,vers=3,rw,hard,intr,nodev,nosuid,nolock,nobrowse,rsize=8192 servidorweb:/mnt/clone
en nuestro caso ya tenía 4 carpetas para que se montaran: aulas, personal, instituto y departamento, yo añado la de prueba que le indica que la tiene que montar del servidorweb carpeta /mnt/clone.
Es decir la carpeta se montará en /homeInst/prueba
     7. La carpeta sólo se montará cuando intentemos acceder a ella, y lo podemos hacer de dos formas:
           a) Desde un terminal el usuario escribe :
                              usuario@cliente:~# nautilus /homeInst/prueba

           b) Creamos un script  y un lanzador que lo ejecute cuando pulsemos sobre el. En este caso añado el script /usr/bin/pruebaInst con el siguiente contenido:
root@jmmedinac03-hptablet:~# cat /usr/bin/pruebainst 
#!/bin/sh

esta=`ping servidorweb -c 1 -w 2 2>/dev/null |grep  "1 received"`
if [ "$esta" ]; then
cd /homeInst/prueba
nautilus /homeInst/prueba
else
 zenity --info \
--text "No está conectado a la red de su IES, por tanto los
directorios del instituto no se encuentran disponibles"
fi
Comprueba si está accesible el servidor web y abre la carpeta con nautilus. Si no está accesible muestra ventana con error.
     8. Crear el lanzador llamando al script.

viernes, 13 de marzo de 2015

Tarea Puppet para crear archivos de pkgsync en Workstations

Como ya sabemos, gestionamos los paquetes instalados en los sistemas mediante pkgsyn, puedes verlo en el siguiente post de Esteban Navas:
http://enavas.blogspot.com.es/2013/12/compartir-la-gestion-de-paquetes.html?m=0

He creado la siguiente tarea para adaptar los workstations a este sistema.
La tarea comprueba que esté instalado el paquete pkgsync y creadas sus carpetas correspondientes, cambia el script pkgsync por el modificado por Esteban Navas para la gestión compartida (.ies), y descarga y mantiene actualizados los ficheros musthave, mayhave y maynothave que nos ponen desde la Consejería y que no podemos modificar.


class   workstation-pkgsync {

package { "pkgsync-workstation-directorio":
name => pkgsync,
ensure => installed,
}

file { "pkgsync-workstation":
path => "/etc/pkgsync",
owner => root, group => root, ensure => directory,
require => Package["pkgsync"],
# before => File[["pkgsync-workstation"],["pkgsync_backup"],["musthave-workstation"],[mayhave-workstation],[maynothave-workstation]],
}

        file { "pkgsync-bin-workstation":
path => "/usr/sbin/pkgsync",
        owner => root, group => root, mode => 755,
        source => "puppet:///modules/workstation-pkgsync/pkgsync",
}
        file { "pkgsync_backup":
path => "/usr/sbin/pkgsync_BACKUP ",
        owner => root, group => root, mode => 644,
        source => "puppet:///modules/workstation-pkgsync/pkgsync_BACKUP",
}
        file { "musthave-workstation":
path => "/etc/pkgsync/musthave",
        owner => root, group => root, mode => 644,
        source => "puppet:///files/workstation-wheezy/musthave",
}

file { "mayhave-workstation":
path => "/etc/pkgsync/mayhave",
owner => root, group => root, mode => 644, 
source => "puppet:///files/workstation-wheezy/mayhave",
#require => File["pkgsync-workstation"],
       }

file { "maynothave-workstation":
path => "/etc/pkgsync/maynothave",
        owner => root, group => root, mode => 644,
source => "puppet:///files/workstation-wheezy/maynothave",
        #require => File["pkgsync-workstation"],
}

}


Tarea puppet para gestionar ficheros .ies de pkgsync

Como ya sabemos, gestionamos los paquetes instalados en los sistemas mediante pkgsyn, puedes verlo en el siguiente post de Esteban Navas:
http://enavas.blogspot.com.es/2013/12/compartir-la-gestion-de-paquetes.html?m=0

La siguiente tarea es para que los diferentes equipos creen y mantengan actualizados los ficheros .ies de pkgsync.
La tarea, establece los nombres de las variables mayhaveIes, musthaveIes y maynothaveIes según el tipo de equipo donde se esté ejecutando la tarea. Esa es la ruta donde deben estar colocados los archivos dentro del servidor puppet. Así el mayhave.ies para un workstation lo tendré creado en la carpeta /etc/puppet/files(..../lo que pone en $mayhave) /workstation-wheezy/mayhave.ies
Lo único que hay que hacer antes de pasar la tarea es crear los tres ficheros de cada tipos de equipo en su ruta correspondiente.
El contenido del manifests/init.pp es el siguiente:

class   comunes-pkgsync-ies {

case $use {
       "portatil-profesor-wheezy": {   $mayhaveIes="miniportatil-wheezy/mayhave.ies.profesor"
$musthaveIes="miniportatil-wheezy/musthave.ies.profesor"
$maynothaveIes="miniportatil-wheezy/maynothave.ies.profesor"
}
       "portatil-alumno-wheezy": {   $mayhaveIes="miniportatil-wheezy/mayhave.ies.alumno"
$musthaveIes="miniportatil-wheezy/musthave.ies.alumno" 
$maynothaveIes="miniportatil-wheezy/maynothave.ies.alumno"
}
       "workstation-wheezy": { $mayhaveIes="workstation-wheezy/mayhave.ies" 
$musthaveIes="workstation-wheezy/musthave.ies" 
$maynothaveIes="workstation-wheezy/maynothave.ies"
}
       "ltsp-wheezy": { $mayhaveIes="ltsp-wheezy/mayhave.ltsp-wheezy.ies" 
$musthaveIes="ltsp-wheezy/musthave.ltsp-wheezy.ies" 
$maynothaveIes="ltsp-wheezy/maynothave.ltsp-wheezy.ies" 
}

#        default: { }

       }

file { "mayhave.instituto":
path => "/etc/pkgsync/mayhave.ies",
owner => root, group => root, mode => 644, 
source => "puppet:///files/$mayhaveIes",
       }

file { "maynothave.instituto":
path => "/etc/pkgsync/maynothave.ies",
        owner => root, group => root, mode => 644,
source => "puppet:///files/$maynothaveIes",
}

file { "musthave.instituto":
path => "/etc/pkgsync/musthave.ies",
        owner => root, group => root, mode => 644,
source => "puppet:///files/$musthaveIes",
}

}

Script para añadir paquetes a ficheros de Pkgsync

Para mantener los paquetes deseados en los equipos usamos Pkgsync. Se gestiona con tres ficheros uno donde introducimos los paquetes que deben estar obligatoriamente, otro los que se permite que estén y otro los que no deben estar, así cuando el sistema se actualiza mediante pkgsync  instalará los necesarios, desinstalará los que no deben estar y dejará instalados aquellos que sí pueden estar.
Por otro parte estamos usando una modificación de Esteban Navas para compartir esos ficheros de manera que por cada uno tenemos tres: el que nos ponen desde la Consejería, otro el que ponemos nosotros(.ies) y con esos dos se forma el tercero y definitivo(.all) que es el que pkgsync utilizará.
Puedes verlo en el siguiente enlace de Esteban Navas:

http://enavas.blogspot.com.es/2013/12/compartir-la-gestion-de-paquetes.html?m=0

Así como tenemos diferentes equipos en el centro: miniportátiles(para alumnos y profesores), LTSP-Servers y Workstations  tenemos que gestionar esos tres archivos, los .ies que son los que podemos gestionar desde el centro, para cada uno de los tipos de equipo.
Ya los hemos colocado en los equipos con una tarea puppet :
 https://www.blogger.com/blogger.g?blogID=2361837138647093212#editor/target=post;postID=5095385512043461757;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=1;src=postname
Así si quiero introducir un paquete para que se instale en todos los equipos tendría que ir añadiéndolo uno a uno a los cuatro archivos musthave correspondientes, cada uno en una ruta distínta..
Para facilitar esto he creado un script, un tanto burdo, pero que me permite añadir estos ficheros, los llamo diciendo que fichero quiero modifica: mayhave, musthave o maynothave y si lo quiero añadir a todos los equipos o sólo a Workstation, LTSP o miniportátil.

#!/bin/bash
#como parámetro se pasa el archivo a introducir dentro de musthave
if ([ $# -ne 3 ] || ([ "$1" != "-y" ] && [ "$1" != "-s" ] && [ "$1" != "-t" ])|| ([ "$2" != "-a" ] && [ "$2" != "-w" ] && [ "$2" != "-l" ] && [ "$2" != "-m" ])); then

echo "Parámetros insuficientes o incorrectos "
        echo "escriba anadeAPkgsync [-y (para mayhave.ies)|-t (para maynothave.ies)|-s (para musthave.ies)] -[a(para todos)|w(para workstations)|-l(para ltsps)|m para miniportátiles nombre_de_paquete"
        exit 0
else

        if ([ "$2" = "-a" ]  ||  [ "$2" = "-l" ]); then
#añadimos en ltsp
                if [ "$1" = "-y" ]; then
#añadimos a mayhave de ltsp
echo "$3" >> /etc/puppet/files/ltsp-wheezy/mayhave.ltsp-wheezy.ies
echo "$3 añadido a mayhave.ltsp-wheezy.ies"
                 else
                        if [ "$1" = "-s" ]; then
#añadirmos a musthave
echo "$3" >> /etc/puppet/files/ltsp-wheezy/musthave.ltsp-wheezy.ies
echo "$3 añadido a musthave.ltsp-wheezy.ies"
                        else
#añadimos a maynothave
echo "$3" >> /etc/puppet/files/ltsp-wheezy/maynothave.ltsp-wheezy.ies
echo "$3 añadido a maynothave.ltsp-wheezy.ies"
fi
fi
fi
if ([ "$2" = "-a" ]  ||  [ "$2" = "-w" ]); then
                #añadimos a workstation
       if [ "$1" = "-y" ]; then
#añadimos a mayhave
echo "$3" >> /etc/puppet/files/workstation-wheezy/mayhave.ies
echo "$3 añadido a mayhave.ies de workstation"
                else
                        if [ "$1" = "-s" ]; then
#añadirmos a musthave
echo "$3" >> /etc/puppet/files/workstation-wheezy/musthave.ies
echo "$3 añadido a musthave.ies de workstation"
                        else
#añadimos a maynothave
echo "$3" >> /etc/puppet/files/workstation-wheezy/maynothave.ies
echo "$3 añadido a maynothave.ies de workstation"
fi
fi
fi
if ([ "$2" = "-a" ]  ||  [ "$2" = "-m" ]); then
                #añadimos a miniportatiles
       if [ "$1" = "-y" ]; then
#añadimos a mayhave
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/mayhave.ies.alumno
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/mayhave.ies.profesor
echo "$3 añadido a mayhave.ies de portatil de alumno y de profesor"
                else
                        if [ "$1" = "-s" ]; then
#añadirmos a musthave
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/musthave.ies.alumno
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/musthave.ies.profesor
echo "$3 añadido a musthave de portatil alumno y profesor"
                        else
#añadimos a maynothave
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/maynothave.ies.alumno
echo "$3" >> /etc/puppet/files/miniportatil-wheezy/maynothave.ies.profesor
echo "$3 añadidoa maynothave de alumnos y profesores"
fi
fi

        fi

fi