Wiki Linkat

Restaurar perfil usuaris locals Linkat 3

De Wiki Linkat

Restauració (congelació) del perfil dels usuaris locals en Linkat 3:

L'script següent permet restaurar de forma automàtica el perfil dels usuaris locals en Linkat 3. Aquest script té en consideració 4 perfils diferents i que corresponen als perfils:

Abans de procedir a la instal·lació de l'script cal copiar els scripts següents en fitxers que tinguin com a nom:

install_congela.sh      (script d'instal·lació)
congela.sh              (script de restauració)
PreSession_Default.diff (conté les modificacions del fitxer Default del GDM
                         que fa possible que l'script congela.sh s'executi

- estàndard (aquest perfil correspon a l'escriptori estàndard de linkat)
- infantil
- primària
- secundària

Així doncs, si un usuari pertany a un grup (només 1) dels esmentats anteriorment, se li restaura, en el proper inici de sessió, l'escriptori corresponent al seu grup.

Requisits necessaris:

Per poder fer ús de l'script cal tenir instal·lats els paquets següents:


perfil-usuari-infantil
perfil-usuari-primaria
perfil-usuari-secundaria 

Aquests paquets es poden instal·lar des del YaST


Instal·lació:


L'script disposa d'un instal·lador que és qui fa les comprovacions necessàries. Així, es comprova que els paquets corresponents als perfils d'infantil, primària i secundària estiguin instal·lats, crea el perfil estàndard (dins del directori /usr/share/linkat/profiles/), modifica el fitxer: /etc/gdm/PreSession/Default per tal que l'script s'executi a l'inici de la sessió de l'usuari i finalment crea els grups locals: estandard infantil primaria secundaria


El codi de l'instal·lador és el següent:


Codi de l'script: install_congela.sh

#!/bin/bash
# Script install_congela.sh
#
# Instal·lador de l'script congela.sh
# GPL 3.0
#
#
# Creació del fitxer perfil-estandard.tar.bz2 que no existeix per defecte
#
if [ -n "$(id | grep root)" ]; then
   for i in $(echo perfil-usuari-infantil perfil-usuari-primaria perfil-usuari-secundaria); do  
      if [ "$(zypper search $i | grep $i | cut -d "|" -f 1)" != "i " ]; then
         echo "El paquet $i ha d'estar instal·lat. Et recomano que facis la instal·lació amb el YaST"
         exit 0
      else
         echo "El paquet $i està correctament instal·lat."
      fi
   done
   echo "Els paquets corresponents als perfils es troben instal·lats. Ok"
   if [ -e congela.sh ]; then
      echo "Copiant el fitxer congela.sh a /usr/local/bin"
      cp congela.sh /usr/local/bin/.
   else
      echo "El fitxer congela.sh no s'ha trobat"
      exit 0
   fi
   if [ ! -f /usr/share/linkat/profiles/perfil-estandard.tar.bz2 ]; then
      echo "Creant el perfil estandard a /usr/share/linkat/profiles"
      cd /etc/skel
      tar -jcf /usr/share/linkat/profiles/perfil-estandard.tar.bz2 \.[a-zA-Z]*
      cd -
   fi
   if [ -e PreSession_Default.diff ]; then
      if [ -z "$(cat /etc/gdm/PreSession/Default |grep congela)" ]; then
         echo "Actualitzant el fitxer /etc/gdm/PreSession/Default perquè executi l'script congela.sh"
         cp /etc/gdm/PreSession/Default /etc/gdm/PreSession/Default.bak
         patch /etc/gdm/PreSession/Default < PreSession_Default.diff
      else
         echo "El fitxer /etc/gdm/PreSession/Default ja se li ha aplicat el patch."
      fi
   fi
   echo "Fem la còpia de seguretat del fitxer de grups situat a /etc/group"
   cp /etc/group /etc/group.bak
   for i in $(echo estandard infantil primaria secundaria); do
      if [ -z "$(cat /etc/group |grep ^$i)" ]; then
         echo "Creant el grup local $i"
         groupadd $i
      else
         echo "El grup $i ja existeix. No el donem d'alta"
      fi
   done
fi


Aquest script ha de ser executat com a root per la qual cosa es recomana fer alguna prova abans en un ordinador de proves.

El programa ha donat d'alta els grups següents: estandard, infantil, primaria i secundaria.


Script de congelació:

L'scrip següent és el que fa la tasca de restaurar els fitxers i/o directoris de configuració de l'usuari.


Codi de l'script: congela.sh

#!/bin/bash
#
# Grups: estandard, infantil, primaria, secundaria
#
#
# $1 és opcional. Si se li passa com a paràmetre, es restaura la sessió de l'usuari
# en cas contrari, agafa el valor de la variable $USER definit a PreSession
#
if [ -n "$1" ]; then
   USER=$1
fi
if [ "$(cat /etc/passwd | grep $USER)" != "" ]; then
   PROPIETARI_GRUP=$(cat /etc/passwd |grep $USER | cut -d ":" -f4)
   DIRECTORI_PERSONAL=$(cat /etc/passwd |grep $USER | cut -d ":" -f6)
   DIRECTORI_MODEL=/usr/share/linkat/profiles
   RESTAURA=0
   GRUP=$(groups $USER | cut -d ":" -f2)
   for i in $GRUP; do
      case "$i" in
         'estandard')
            PERFIL=estandard
            RESTAURA=1
         ;;
         'infantil')
            PERFIL=infantil
            RESTAURA=1
         ;;
         'primaria')
            PERFIL=primaria
            RESTAURA=1
         ;;
         'secundaria')
            PERFIL=secundaria
            RESTAURA=1
         ;;
      esac;
   done
   if [ -n "$2" ]; then
      PERFIL=$2
      RESTAURA=1
   fi
   if [ $RESTAURA -eq 1 ]; then
      RESTAURA=0
      cd $DIRECTORI_PERSONAL
#
# Eliminem tots els directoris/fitxers .*
#
      for j in $(ls -A | grep '^\.'); do
         if [ ! -S "$j" ]; then
            rm -rf $j >/dev/null 2>&1
         fi
      done 
#
# Descomprimim el perfil que s'ha de restaurar
#
      tar -jxf $DIRECTORI_MODEL/perfil-$PERFIL.tar.bz2
#
# Només en el cas dels perfils diferents a l'estàndard, s'ha de reanomenar els fitxers continguts dins del
# directori .nautilus/metafiles de l'usuari
#
      if [ $PERFIL != "estandard" ]; then
         cd $DIRECTORI_PERSONAL/.nautilus/metafiles
	 DIRECTORI_PRINCIPAL=$(echo $DIRECTORI_PERSONAL | sed -e 's/'$USER'// ; s/\///g')
         for j in $(ls $DIRECTORI_PERSONAL/.nautilus/metafiles |grep $PERFIL); do
            mv $j $(echo $j | sed -e 's/home-local/'$DIRECTORI_PRINCIPAL'/ ; s/'$PERFIL'/'$USER'/')
         done 
      fi
#
# En cas que s'hagués esborrat els directoris: Documents, public_html, bin es creen de nou
#
      for i in $(echo Documents public_html bin); do
         if [ ! -d $DIRECTORI_PERSONAL/$i ]; then
            mkdir $DIRECTORI_PERSONAL/$i
         fi
      done
      chown -R $USER:$PROPIETARI_GRUP $DIRECTORI_PERSONAL  # > /dev/null 2>&1 
   fi
fi

Finalment, el fitxer PreSession_Default.diff conté les modificacions necessàries per tal que l'script congela.sh s'executi a l'entrada de la sesió de l'usuari. Si un usuari NO pertany a cap dels 4 grups esmentats anteriorment, l'script no té cap efecte. L'script NO elimina cap carpeta ni document creat per l'usuari i sí que elimina qualsevol fitxer/directori que comenci per punt.

Codi del fitxer l'script: PreSession_Default.diff

8a9
> sh /usr/local/bin/congela.sh