2. Plan de estudios en un colegio
Anterior | Capítulo 4. Plan de estudios y usos en un colegio | Siguiente

## 2. Plan de estudios en un colegio

Empleando clasificaciones, secuencias y el sistema de archivos puede organizarse el plan de estudios de un colegio. Una posible organización en directorios se esboza a continuación, es apropiada para mantener información de varios años en un colegio de acuerdo a la legislación colombiana vigente:

           2004
              bprimaria
                1
                  castellano.sec ,  castellano.cla, castellano.def
                  dh.sec ,  dh.cla, dh.def
                  dibujo.sec ,  dibujo.cla, dibujo.def
                  edufisica.sec ,  edufisica.cla, edufisica.def
                  matematicas.sec ,  matematicas.cla, matematicas.def
                  musica.sec ,  musica.cla, musica.def
                  naturales.sec ,  naturales.cla, naturales.def
                  religion.sec ,  religion.cla, religion.def
                  sociales.sec ,  sociales.cla, sociales.def
                  trabajomanual.sec ,  trabajomanual.cla, trabajomanual.def
                2
                  ...
                3
                4
                5
              bsecundaria
                  ...
              media
                  ...
           2003
              bprimaria
              bsecundaria
              media
           ...

Que se podría crear a partir del plan de estudios completo incluido entre los ejemplos de `repasa` (ver directorio `ejemplos/planest` o http://structio.sourceforge.net/repasa/planest), bien copiandolo para adaptarlo respetando los créditos o bien con comandos como:

    mkdir planest
    cd planest
    mkdir 2004
    cd 2004
    mkdir bprimaria bsecundaria media
    cd bprimaria
    mkdir 1 2 3 4 5
    cd ../bsecundaria
    mkdir 6 7 8 9
    cd ../media
    mkdir 10 11

y que podría completarse con los archivos creados por los profesores de cada asignatura en cada grado. Un archivo de clasificaciones tendrá los logros e indicadores de una asignatura en un grado, posiblemente con ejercicios, ejemplos y referencias a definiciones importantes consignadas en el archivo de definiciones correspondiente. Por su parte el archivo de secuencia separará en los 4 periodos los indicadores del archivo de clasificaciones correspondiente.

Además de logros e indicadores, en los archivos de clasificaciones puede incluir información adicional empleando anotaciones. Por ejemplo si un indicador en un archivo de clasificaciones no es recuperable después de la descripción (y antes de cerrar el elemento `clasif`) puede agregar una anotación como:

    	     <anota tipo="Recuperable" valor="no"></anota>

### 2.1. Edición

Para la edición de archivos de clasificaciones y secuencias podría emplear un editor de texto como vim o emacs. Desde ambos podrá ejecutar repchq y el corrector de ortografía para verificarlos sintáctica y ortográficamente (o mejor con un `Makefile`, ver Sección 2.4, “Automatización”). Dado que la convención para presentar errores de repchq es estándar, desde ambos editores se pueden localizar errores rápidamente.

También podrían editarse empleando las herramientas edcla y edsec. La primera permite añadir o eliminar una clasificación o anotaciones a un archivo de clasificaciones. La segunda permite añadir o eliminar una referencia a una clasificación en un archivo de secuencia. Si deseara añadir un indicador al logro con identificación `establece` del ejemplo de clasificaciones que se ha visto podría emplear:

    	     edcla ejsimple.cla "añadir" "Indicador" "establece.esperanza" \
    	     "Considere la muerte, ¿En algún mensaje de Jesús encuentra esperanza?"

Puede consultar la sintaxis de uso de estos programas en las páginas del manual edcla(1), edsec(1)

### 2.2. Generación de archivos HTML con plan de estudios

En la sección Sección 1.2, “Convirtiendo a HTML con XSLT” se presentó la forma de generar un HTML a partir de un archivo de secuencia y su archivos asociados. Puede crearse un script que genere toda la información del plan de estudios en archivos HTML. En el directorio `ejemplos/planest` encontrará uno que realiza esta labor. Puede emplearlo para generar archivos HTML del plan de estudios del 2004 en el directorio `/var/www/htdocs/plan` con:

    cd planest
    ./genhtml.sh /var/www/htdocs/plan 2004

### 2.3. Consideraciones sobre la integridad

En un servidor tipo Unix (como OpenBSD o Linux) una organización de archivos como esta junto con una convención en permisos puede facilitar mantener la integridad de los archivos, es decir buscar que cada archivo sólo pueda ser modificado por el profesor de la materia en el grado correspondiente.

Tal como se sugiere en la plataforma de referencia S-Helio 1.1, cada profesor puede tener una cuenta personal y puede haber un grupo `profesor` el cual sería el grupo de la jerarquía completa y el grupo principal de las cuentas de los profesores. A continuación se ejemplifica como se crearía el grupo y cuentas para dos profesores en un sistema OpenBSD:

    	 groupadd -v -g 1102 profesor
    	 useradd -m -g profesor -c "Pepe Suarez" -s /bin/ksh pepsub
    	 useradd -m -g profesor -c "Jeremías Gonzáles" -s /bin/ksh jergon

Cada profesor debería poder modificar sus archivos en el servidor (por ejemplo mediante NIS o vía ssh). Los archivos que deba mantener cada profesor serán de su propiedad y tendrán permisos así:

- Sin permiso alguno para otros.

- Con permiso de lectura para profesores (y de ejecución en el caso de directorios), pero no de escritura.

- Con permiso de lectura y escritura para el propietario (y de ejecución en el caso de directorios).

Desde el directorio `planest` del ejemplo anterior el administrador podría establecer los permisos con:

    chmod -R o-xrw,g+r-w,u+rw .
    find . -type d -exec chmod gu+x {} ";"

También tendría que dejar como propietario de cada archivo el profesor a cargo. Por ejemplo si el usuario `pepsub` es responsable de castellano en 1:

    cd 2004/bprimaria/1
    chown pepsub:profesor castellano.*

Este esquema permite modificar la estructura sólo al administrador, ver el plan de estudios sólo a quienes estén en el grupo `profesor` y al administrador (privacidad) y sólo al profesor responsable de cada materia y al administrador modificar la información.

Además de este esquema de permisos, de ser posible es mejor que el servidor donde se almacene la información no pueda ser accedido por personas que no estén el grupo `profesor`. Por ejemplo puede haber una red interna sólo para profesores, conectada al resto de redes por intermedio de un contrafuegos.

### 2.4. Automatización

Pueden crearse Makefiles y scripts para el interprete de comandos en diversos directorios del plan de estudios. Pueden servir para:

- Configurar permisos y propietarios de archivos. Desde el directorio con el plan de estudios un profesor podría ejecutar un script para esto, digamos:

      ./perm.sh

- Que un profesor valide sus archivos de definiciones, clasificaciones y secuencias ejecutando

      make

  y que pueda limpiar archivos temporales de la validación con:

      make limpia

  Así cuando el profesor a cargo, edite `planest/2004/bprimaria/1/castellano.cla`, podría ejecutar make desde el editor[11] para validar, y eventualmente desde el mismo editor localizar rápidamente errores[12].

- Que el administrador pueda validar todos los archivos del plan de estudios. Para esto desde el directorio `planest` (con la nomenclatura usada) podría ejecutar:

      make

  o tal vez redireccionando errores a un archivo `err`, para examinarlo:

      make 2> err

  Y que pueda limpiar archivos temporales de la validación con:

      make limpia

En el directorio principal (`planest`) podría emplearse el siguiente Makefile:

    # Makefile para verificar toda la estructura de directorios de un
    # plan de estudios.  Dominio público. http://structio.sourceforge.net/repasa

    valida:
    	m=`find . -name Makefile`; \
    	for i in $$m ; do \
    	  f=`dirname $$i`; \
    	  if (test "$$f" != ".") then { \
    	  	echo "Directorio $$f"; \
    		(cd $$f; make valida); \
    		if (test "$$?" != "0") then { exit 1; } fi; \
    	  } fi; \
    	done

    limpia:
    	m=`find . -name Makefile`; \
    	for i in $$m ; do \
    	  f=`dirname $$i`; \
    	  if (test "$$f" != ".") then { \
    	    echo "Directorio $$f"; \
    	    (cd $$f; make limpia); \
    	   } fi; \
    	 done

Su propietario y permisos podrían establecerse con:

    chown root:profesor Makefile
    chmod -R o-xrw,g+r-w,u+rw Makefile

También en el directorio principal podría usarse el siguiente script `perm.sh`, que sigue las convenciones de la sección anterior y de esta para establecer permisos y propietarios.

    #!/bin/sh
    # Script para establecer permisos y propietarios en un plan de estudios
    # para  repasa. Dominio público.

    chgrp -R profesor *
    chown root:profesor Makefile perm.sh
    chmod -R o-xrw,g+r-w,u+rw .
    chmod 4750 perm.sh
    find . -type d -exec chmod gu+x {} ";"
    p=`pwd`;
    m=`find . -name perm.sh -user root -group profesor -perm 4750`;
    for i in $m ; do
    	f=`dirname $i`;
    	if (test "$f" != ".") then {
    		echo $f;
    		cd $f;
    		./perm.sh;
    		cd $p;
    	} fi;
    done;

Para que todo profesor pueda ejecutarlo debería tener el bit SUID activo:

    chown root:profesor perm.sh
    chmod 4750 perm.sh

En el directorio de cada grado, podría haber un Makefile como el siguiente (con el mismo propietario y permisos del Makefile en el directorio `planest`, como es el mismo para todos los grados podrían emplearse enlaces):

    # Para verificar archivos de plan de estudio
    # Dominio público. 2004. http://structio.sourceforge.net/repasa
    # Suponemos que además de un interprete de comandos como ksh o bash, pueden
    # usarse los programas POSIX: make, touch, grep, sed, ls, whoami

    REPCHQ=repchq -e

    valida:
    	u=`whoami`; \
    	if (test "$$u" = "root") then { \
    		make valida-root; \
    	} else { \
    		make valida-prof;\
    	} fi;

    valida-root:
    	err=0;u=`whoami`;\
    	a=`find . "(" -name "*cla" -or -name "*sec" -or -name "*def" ")"| \
    	  sed -e "s/[.]cla/.claok/g;s/[.]sec/.secok/g;s/[.]def/.defok/g"`; \
    	if (test "$$a" != "") then { make $$a; } fi;

    valida-prof:
    	err=0;u=`whoami`; \
    	a=`find . -user "$$u" -and "(" -name "*cla" -or -name "*sec" -or -name "*def" ")"| \
    	  sed -e "s/[.]cla/.claok/g;s/[.]sec/.secok/g;s/[.]def/.defok/g"`; \
    	if (test "$$a" != "") then { make $$a; } fi;

    .SUFFIXES: .cla .claok .def .defok .sec .secok

    .cla.claok:
    	$(REPCHQ) -j "Logro;Indicador" $<
    	touch $@

    .def.defok:
    	$(REPCHQ) $<
    	touch $@

    .sec.secok:
    	$(REPCHQ) -j "Periodo" $<
    	touch $@

    limpia:
    	u=`whoami`; \
    	if (test "$$u" = "root") then { \
    		make limpia-root; \
    	} else { \
    		make limpia-prof; \
    	} fi;

    limpia-prof:
    	u=`whoami`;a=`ls -l *ok | grep "$${u}[         ]*profesor " | \
    	  sed -e "s/.* [0-9]*:[0-9]* \(.*\)$$/\1/g"`; \
    	echo $$a; \
    	for i in $$a ; do \
    		echo $$i; rm -f $$i; \
    	done;

    limpia-root:
    	rm -f *ok

y un script `perm.sh` que establezca los permisos y propietarios de los archivo en un año:

    #!/bin/sh
    # Establece permisos y propietarios de archivos en plan de estudios
    # usando materias de ejemplo con profesor ejemplo pepsub y jergon

    chgrp -R profesor .
    chown root:profesor perm.sh
    chmod -R o-xrw,g+r-w,u+rw ..
    chmod 4750 perm.sh
    find . -type d -exec chmod gu+x {} ";"

    #1
    chown pepsub:profesor ../../planest/2004/bprimaria/1/castellano.* ../../planest/2004/bprimaria/1/comportamiento.* ../../planest/2004/bprimaria/1/dh.* ../../planest/2004/bprimaria/1/dibujo.* ../../planest/2004/bprimaria/1/edufisica.* ../../planest/2004/bprimaria/1/matematicas.*
    chown jergon:profesor  ../../planest/2004/bprimaria/1/musica.* ../../planest/2004/bprimaria/1/naturales.* ../../planest/2004/bprimaria/1/religion.* ../../planest/2004/bprimaria/1/sociales.* ../../planest/2004/bprimaria/1/trabajomanual.*
    chmod o-rxw,g+r-w,u+rw bprimaria/1/*.{cla,sec}

    #2
    chown pepsub:profesor ../../planest/2004/bprimaria/2/castellano.* ../../planest/2004/bprimaria/2/comportamiento.* ../../planest/2004/bprimaria/2/dh.* ../../planest/2004/bprimaria/2/dibujo.* ../../planest/2004/bprimaria/2/edufisica.* ../../planest/2004/bprimaria/2/ ../../planest/2004/bprimaria/2/matematicas.*
    chown jergon:profesor ../../planest/2004/bprimaria/2/ ../../planest/2004/bprimaria/2/musica.* ../../planest/2004/bprimaria/2/naturales.* ../../planest/2004/bprimaria/2/religion.* ../../planest/2004/bprimaria/2/sociales.* ../../planest/2004/bprimaria/2/trabajomanual.*
    chmod o-rxw,g+r-w,u+rw bprimaria/2/*.{cla,sec}

    #3
    chown pepsub:profesor ../../planest/2004/bprimaria/3/castellano.* ../../planest/2004/bprimaria/3/comportamiento.* ../../planest/2004/bprimaria/3/dh.* ../../planest/2004/bprimaria/3/dibujo.* ../../planest/2004/bprimaria/3/edufisica.* ../../planest/2004/bprimaria/3/ingles.* ../../planest/2004/bprimaria/3/informatica.* ../../planest/2004/bprimaria/3/matematicas.*
    chown jergon:profesor ../../planest/2004/bprimaria/3/ ../../planest/2004/bprimaria/3/musica.* ../../planest/2004/bprimaria/3/naturales.* ../../planest/2004/bprimaria/3/religion.* ../../planest/2004/bprimaria/3/sociales.* ../../planest/2004/bprimaria/3/trabajomanual.*
    chmod o-rxw,g+r-w,u+rw bprimaria/3/*.{cla,sec}

    #4
    chown pepsub:profesor ../../planest/2004/bprimaria/4/castellano.* ../../planest/2004/bprimaria/4/dh.* ../../planest/2004/bprimaria/4/dibujo.* ../../planest/2004/bprimaria/4/edufisica.* ../../planest/2004/bprimaria/4/ingles.* ../../planest/2004/bprimaria/4/informatica.* ../../planest/2004/bprimaria/4/matematicas.*
    chown jergon:profesor ../../planest/2004/bprimaria/4/ ../../planest/2004/bprimaria/4/musica.* ../../planest/2004/bprimaria/4/naturales.* ../../planest/2004/bprimaria/4/religion.* ../../planest/2004/bprimaria/4/sociales.* ../../planest/2004/bprimaria/4/trabajomanual.*
    chmod o-rxw,g+r-w,u+rw bprimaria/4/*.{cla,sec}

    #5
    chown pepsub:profesor ../../planest/2004/bprimaria/5/castellano.* ../../planest/2004/bprimaria/5/comportamiento.* ../../planest/2004/bprimaria/5/dh.* ../../planest/2004/bprimaria/5/dibujo.* ../../planest/2004/bprimaria/5/edufisica.* ../../planest/2004/bprimaria/5/ingles.* ../../planest/2004/bprimaria/5/informatica.* ../../planest/2004/bprimaria/5/matematicas.*
    chown jergon:profesor ../../planest/2004/bprimaria/5/ ../../planest/2004/bprimaria/5/musica.* ../../planest/2004/bprimaria/5/naturales.* ../../planest/2004/bprimaria/5/religion.* ../../planest/2004/bprimaria/5/sociales.* ../../planest/2004/bprimaria/5/trabajomanual.*
    chmod o-rxw,g+r-w,u+rw bprimaria/5/*.{cla,sec}

    #6
    chown pepsub:profesor ../../planest/2004/bsecundaria/6/arte.* ../../planest/2004/bsecundaria/6/biologia.* ../../planest/2004/bsecundaria/6/castellano.* ../../planest/2004/bsecundaria/6/comportamiento.* ../../planest/2004/bsecundaria/6/dh.* ../../planest/2004/bsecundaria/6/edufisica.* ../../planest/2004/bsecundaria/6/ingles.* ../../planest/2004/bsecundaria/6/matematicas.*
    chown jergon:profesor ../../planest/2004/bsecundaria/6/ ../../planest/2004/bsecundaria/6/religion.* ../../planest/2004/bsecundaria/6/programacion.* ../../planest/2004/bsecundaria/6/sociales.*
    chmod o-rxw,g+r-w,u+rw bsecundaria/6/*.{cla,sec}

    #7
    chown pepsub:profesor ../../planest/2004/bsecundaria/7/arte.* ../../planest/2004/bsecundaria/7/biologia.* ../../planest/2004/bsecundaria/7/castellano.* ../../planest/2004/bsecundaria/7/comportamiento.* ../../planest/2004/bsecundaria/7/dh.* ../../planest/2004/bsecundaria/7/edufisica.* ../../planest/2004/bsecundaria/7/ingles.* ../../planest/2004/bsecundaria/7/matematicas.*
    chown jergon:profesor ../../planest/2004/bsecundaria/7/ ../../planest/2004/bsecundaria/7/religion.* ../../planest/2004/bsecundaria/7/programacion.* ../../planest/2004/bsecundaria/7/sociales.*
    chmod o-rxw,g+r-w,u+rw bsecundaria/7/*.{cla,sec}

    #8
    chown pepsub:profesor ../../planest/2004/bsecundaria/8/arte.* ../../planest/2004/bsecundaria/8/biologia.* ../../planest/2004/bsecundaria/8/castellano.* ../../planest/2004/bsecundaria/8/comportamiento.* ../../planest/2004/bsecundaria/8/dh.* ../../planest/2004/bsecundaria/8/edufisica.* ../../planest/2004/bsecundaria/8/ingles.* ../../planest/2004/bsecundaria/8/matematicas.*
    chown jergon:profesor ../../planest/2004/bsecundaria/8/ ../../planest/2004/bsecundaria/8/religion.* ../../planest/2004/bsecundaria/8/programacion.* ../../planest/2004/bsecundaria/8/sociales.*
    chmod o-rxw,g+r-w,u+rw bsecundaria/8/*.{cla,sec}

    #9
    chown pepsub:profesor ../../planest/2004/bsecundaria/9/arte.* ../../planest/2004/bsecundaria/9/biologia.* ../../planest/2004/bsecundaria/9/castellano.* ../../planest/2004/bsecundaria/9/comportamiento.* ../../planest/2004/bsecundaria/9/dh.* ../../planest/2004/bsecundaria/9/edufisica.* ../../planest/2004/bsecundaria/9/ingles.* ../../planest/2004/bsecundaria/9/matematicas.*
    chown jergon:profesor ../../planest/2004/bsecundaria/9/ ../../planest/2004/bsecundaria/9/religion.* ../../planest/2004/bsecundaria/9/programacion.* ../../planest/2004/bsecundaria/9/sociales.*
    chmod o-rxw,g+r-w,u+rw bsecundaria/9/*.{cla,sec}

    #10
    chown pepsub:profesor ../../planest/2004/media/10/aleman.* ../../planest/2004/media/10/arte.* ../../planest/2004/media/10/castellano.* ../../planest/2004/media/10/democracia.* ../../planest/2004/media/10/comportamiento.* ../../planest/2004/media/10/comportamiento.* ../../planest/2004/media/10/dh.* ../../planest/2004/media/10/edufisica.* ../../planest/2004/media/10/fisica.* ../../planest/2004/media/10/filosofia.* ../../planest/2004/media/10/matematicas.*
    chown jergon:profesor ../../planest/2004/media/10/ ../../planest/2004/media/10/religion.* ../../planest/2004/media/10/programacion.* ../../planest/2004/media/10/quimica.*
    chmod o-rxw,g+r-w,u+rw media/10/*.{cla,sec}

    #11
    chown pepsub:profesor ../../planest/2004/media/11/aleman.* ../../planest/2004/media/11/arte.* ../../planest/2004/media/11/castellano.* ../../planest/2004/media/11/democracia.* ../../planest/2004/media/11/comportamiento.* ../../planest/2004/media/11/dh.* ../../planest/2004/media/11/edufisica.* ../../planest/2004/media/11/fisica.* ../../planest/2004/media/11/filosofia.* ../../planest/2004/media/11/matematicas.*
    chown jergon:profesor ../../planest/2004/media/11/ ../../planest/2004/media/11/religion.* ../../planest/2004/media/11/programacion.* ../../planest/2004/media/11/quimica.*
    chmod o-rxw,g+r-w,u+rw media/11/*.{cla,sec}

### 2.5. Consideraciones sobre el control de versiones

Para facilitar el trabajo en grupo y controlar versiones, recomendamos emplear CVS. Puede ser dejando el repositorio en el mismo servidor para profesores o para mayor respaldo en otro servidor de la red interna de profesores.

Suponiendo que en el servidor ya está instalado CVS habría que realizar tres tipos de actividades:

- El administrador configura un repositorio para el plan de estudios.

- Cada profesor trabaja sus porciones del plan de estudio en una copia local y actualiza periodicamente el repositorio.

- Periodicamente el administrador realiza labores. Por ejemplo al finalizar cada periodo agrega un tag para marcar estado y poderlo recuperar en el futuro si se requiere.

Aunque en esta sección se dan ejemplos de como emplear CVS para estas actividades, sugerimos antes consultar documentación sobre CVS en las secciones correspondientes de [AA1.1] o en [CVS]

#### 2.5.1. Configuración del servidor CVS

El repositorio puede ser creado por el administrador, digamos en `/var/colegio-cvs` con:

    	   export CVSROOT=/var/cvs-colegio
    	   export CVS_RSH=ssh
    	   cd /var
    	   mkdir cvs-colegio
    	   cd cvs-colegio
    	   cvs init

Después puede agregar un módulo con un plan de estudios con la estructura deseada y parcialmente lleno. Suponiendo que el plan de estudios está en el directorio `/home/pepsub/planest`[13] se añade el módulo y se configuran sus permisos con:

    	   export CVSROOT=/var/cvs-colegio
    	   export CVS_RSH=ssh
    	   cd /home/pepsub/planest
    	   cvs -z3 import planest vendor start
    	   cd /var/cvs-colegio/planest
    	   chgrp -R profesor .
    	   chmod -R o-xrw .

Dado que CVS puede cambiar el propietario de los archivos en el repositorio, no resulta útil configurar más detalles en los permisos y usuarios del repositorio. Hay otra alternativa que se presenta más adelante (ver Sección 2.5.4, “Mas ayudas para automatizar”).

#### 2.5.2. Actualización del repositorio

Tras la configuración del repositorio cada profesor podría sacar su copia local del plan de estudios completo junto con los Makefile y scripts para facilitar edición y validación. Note que antes de sacar su copia local debe asegurarse de no tener un directorio con el mismo nombre del módulo (e.g. `planest`), después podría ejecutar:

    	   export CVSROOT=/var/cvs-colegio
    	   export CVS_RSH=ssh
    	   cd ~
    	   cvs -z3 co planest

y el administrador podria permitirle cuadrar permisos (con el script `perm.sh`) ejecutando:

    	   cd planest
    	   find . -name perm.sh -exec chown root:profesor {} ";"
    	   find . -name perm.sh -exec chmod 4750 {} ";"
    	   ./perm.sh

Después de sacar la copia local (que sólo requiere hacerse una vez), cada profesor podría editar, validar y actualizar en el respositorio los archivos que le corresponden. La actualización en el repositorio es muy importante porque con esto, indicará al administrador que usted está avanzando o que ha completado una meta en la edición de sus logros e indicadores (por ejemplo indicaría que terminó de escribir y validar logros e indicadores de un periodo).

Primero actualice su copia local con los cambios recientes en el repositorio (eventualmente el administrador puedo haber corregido sus archivos):

    export CVSROOT=/var/cvs-colegio
    export CVS_RSH=ssh
    cvs -z3 update -Pd

Después de editar y validar (digamos sus archivos del directorio `~/planest/2004/bprimaria/1`) puede actualizar el repositorio con sus modificaciones emplenado:

    	   export CVSROOT=/var/cvs-colegio
    	   export CVS_RSH=ssh
    	   cd ~/planest/2004/bprimaria/1
    	   cvs commit -m "Logros e indicadores del primer periodo"

Poniendo un comentario descriptivo del cambio que está actualizando en lugar de 'Logros e indicadores del primer periodo'.

Para evitar tener que establecer las variables `CVSROOT` y `CVS_RSH` cada vez que desee usar cvs, puede agregar estas líneas al archivo de configuración de su interprete de comandos (por ejemplo `.profile` si usa ksh o `.bash_profile` si usa bash):

    export CVSROOT=/var/cvs-colegio
    export CVS_RSH=ssh

#### 2.5.3. Procedimientos periódicos con el repositorio

Cada vez que en el repositorio se completa una meta importante, puede ser apropiado dejar una "marca[14]" en el que permita recuperar la versión marcada, por ejemplo al finalizar un periodo, cuando todos los logros e indicadores han sido ingresados. Suponiendo que el administrador quisiera marcar la versión que hay en un instante con la marca 'p2004-1', desde su copia local del repositorio ejecutaría:

    cvs rtag 'p2004-1' planest

Posterioremente si desea recuperar la versión marcada del módulo `planest` puede usar:

    cd tmp
    cvs co -r p2004-1 planest

Tenga en cuenta que la versión que recupere así quedará con una "marca pegajosa"[15]. que hará que CVS la diferencie de la versión más reciente.

#### 2.5.4. Mas ayudas para automatizar

Es posible configurar CVS para que antes de actualizar el repositorio, verifique que el usuario pueda modificar los archivos que va a actualizar (en caso de que no haya ejecutado el script para establecer permisos i.e `perm.sh`). De esta forma sólo quien esté autorizado para modificar un archivo podrá ingresarlo al CVS. En esta sección se presenta como puede hacerse esta configuración suponiendo que la copia local de cada profesor está en el mismo computador donde está el repositorio (consideramos que es posible que funcione también con el método `ssh`, pero no con `pserver`).

CVS puede configurarse para ejecutar un script antes de realizar un `commit`, esta configuración se hace en el archivo `commitinfo` del directorio `CVSROOT` del repositorio. Para obtener una copia de ese directorio ejecute:

    cd tmp
    export CVSROOT=/var/cvs-colegio
    cvs co CVSROOT

Después pase al directorio `CVSROOT` obtenido y edite el archivo `commitinfo`, agregando al final una línea como la siguiente:

    ^planest        /usr/local/bin/chqperm.sh

la cual especifica que antes de hacer actualizaciones a un módulo que comience con `planest` debe ejecutarse el script `/usr/local/bin/chqperm.sh`.

El script `/usr/local/bin/chqperm.sh` puede adaptarlo para su caso a partir del siguiente. Note que este script supone la nomenclatura hasta ahora presentada y que cada profesor tendrá en su directorio personal (e.g `/home/pepsub`) el directorio `planest` con su copia local del repositorio:

    # Chequea permisos y verifica archivos por actualizar en el repositorio CVS.
    # Para ser usado desde CVSROOT/commitinfo
    # Dominio público. Sin garantías. 2003. http://structio.sourceforge.net/repasa

    usuario=`whoami`
    echo "Chequeando permisos y verificando. Usuario: $usuario"
    dir=$1
    shift
    arch="$*"
    for f in "$arch" ; do
    	exst=1;
    	n=$dir/$f;
    	echo $n;
    	if (test "$usuario" = "root") then {
    		exst=0;
    	} elif (test "$usuario" = "pepsub") then {
    		case $n in
    			*planest/2004/bprimaria/1/castellano.*) exst=0;;
    			*planest/2004/bprimaria/1/comportamiento.*) exst=0;;
    			*planest/2004/bprimaria/1/dibujo.*) exst=0;;
    			*planest/2004/bprimaria/1/edufisica.*) exst=0;;
    			*planest/2004/bprimaria/1/dh.*) exst=0;;
    			*planest/2004/bprimaria/1/matematicas.*) exst=0;;
    		esac
    	} elif (test "$usuario" = "jergon") then {
    		case $n in
    			*planest/2004/bprimaria/1/musica.*) exst=0;;
    			*planest/2004/bprimaria/1/naturales.*) exst=0;;
    			*planest/2004/bprimaria/1/religion.*) exst=0;;
    			*planest/2004/bprimaria/1/sociales.*) exst=0;;
    			*planest/2004/bprimaria/1/trabajomanual.*) exst=0;;
    		esac
    	} fi;
    	if (test "$exst" != "0") then {
    		echo "No puede escribir '$n'";
    		exit 1;
    	} fi;
    	dirloc=`echo $dir | sed -e "s|.*planest/\(.*\)|/home/$usuario/planest/\1|g"`;
    	nloc=$dirloc/$f;
    	repchq -D $dirloc $nloc
    	if (test "$?" != "0") then {
    		echo "Problemas verificando";
    		exit 1;
    	} fi;
    done;

    exit 0;

[11] Desde vim puede ejecutarse con `:make`

[12] Desde vim, después de ejecutar make quedará en el primer error y podrá pasar al siguiente con `:cn`

[13] Antes de crear el repositorio es recomendable eliminar los archivos que no se deban agregar o incluirlos en un archivo `/home/pepsub/planest/.cvsignore`. de emplear los `Makefile` de la sección anterior, tal archivo podría incluir:

    	       *ok

[14] En inglés tag

[15] En inglés sticky tag.

Anterior | Subir | Siguiente
Capítulo 4. Plan de estudios y usos en un colegio | Inicio | 3. Autoevaluación en un colegio con red local