From 1a16acdc7bbf0f471ee002a364ecfa980f191379 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Sun, 6 Mar 2005 04:43:47 +0000 Subject: [PATCH] =?utf8?q?-=20Se=20arregla=20el=20empaquetado=20de=20Debia?= =?utf8?q?n=20(limpiandolo=20bastante).=20-=20Se=20agrega=20el=20script=20?= =?utf8?q?setup.py=20para=20instalar=20los=20modulos=20de=20python.=20-=20?= =?utf8?q?Se=20actualizan=20los=20n=C3=BAmero=20de=20versi=C3=B3n=20a=200.?= =?utf8?q?3=20(incrementa=20la=20versi=C3=B3n=20de=20Debian).=20-=20Se=20m?= =?utf8?q?ejora=20bastante=20la=20documentaci=C3=B3n=20de=20los=20README.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Makefile | 44 +++++++++++++++++++++++ debian/README.Debian | 25 +++++++++++++ debian/changelog | 12 +++++++ debian/control | 20 +++++++++++ debian/copyright | 22 ++++++++++++ debian/sercom.cron.d | 5 +++ debian/sercom.default | 24 +++++++++++++ doc/README | 58 ++++++++++++++++++++++++++++++ doc/dependencias.txt | 3 -- doc/examples/Makefile-cpp | 75 +++++++++++++++++++++++++++++++++++++++ doc/examples/sercom.ini | 2 +- setup.py | 15 ++++++++ src/T/general.php | 2 +- src/sc_deliver | 2 +- src/sc_test | 2 +- src/sercom/__init__.py | 2 ++ 16 files changed, 306 insertions(+), 7 deletions(-) create mode 100644 Makefile create mode 100644 debian/README.Debian create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/sercom.cron.d create mode 100644 debian/sercom.default delete mode 100644 doc/dependencias.txt create mode 100644 doc/examples/Makefile-cpp create mode 100755 setup.py diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1019876 --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ +# sercom Makefile (probablemente _demasiado_ Debian friendly) + +INSTALL = install -o root -g root + +PREFIX = /usr/local + +CONFS = $(wildcard doc/examples/*.ini) +MAKEFILES = $(wildcard doc/examples/Makefile*) +DAEMONS = src/sc_fetch src/sc_test src/sc_deliver +COMMANDS = src/sc_codegen src/sc_dbq +PHPLIBS = $(wildcard src/T/*.php) +PHPDBO = $(wildcard src/T/DBO/*.php) +PHPSCHEMA = $(wildcard src/T/DBO/schema/*.ini) +DOCS = doc/README $(wildcard doc/schema.*) +EXAMPLES = $(wildcard doc/examples/*) + +.PHONY: all install clean + +all: + +install: + # Directorios + $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/sbin + $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/bin + $(INSTALL) -d -m 0755 $(DESTDIR)/etc/sercom + $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/doc/sercom/examples + $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema + $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/ejercicios + $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/intentos + # Archivos + $(INSTALL) -m 0644 $(CONFS) $(DESTDIR)/etc/sercom + $(INSTALL) -m 0664 $(MAKEFILES) $(DESTDIR)/var/lib/sercom + $(INSTALL) -m 0755 $(DAEMONS) $(DESTDIR)$(PREFIX)/sbin + $(INSTALL) -m 0755 $(COMMANDS) $(DESTDIR)$(PREFIX)/bin + $(INSTALL) -m 0644 $(PHPLIBS) $(DESTDIR)$(PREFIX)/share/php/T + $(INSTALL) -m 0644 $(PHPDBO) $(DESTDIR)$(PREFIX)/share/php/T/DBO + $(INSTALL) -m 0644 $(PHPSCHEMA) $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema + $(INSTALL) -m 0644 $(DOCS) $(DESTDIR)$(PREFIX)/share/doc/sercom + $(INSTALL) -m 0644 $(EXAMPLES) $(DESTDIR)$(PREFIX)/share/doc/sercom/examples + # Bibliotecas en Python + ./setup.py install --optimize 2 --root=$(DESTDIR) --prefix=$(PREFIX) + +clean: + diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..3770ed0 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,25 @@ +sercom for Debian +----------------- + +Primero que nada debería leer el archivo /usr/share/doc/sercom/README!!! + +Para que el programa empiece a funcionar, hay que cambiar /etc/default/sercom, +poniendo la variable ENABLED=1 (ver el resto de las variables por si hay que +ajustar algo más, aunque los valores que trae son bastante razonables). + +2 servicios arrancarán al prender la PC: sc_fetch (encargado de recibir las +entregas) y sc_test (encargado de probar las entregas). +Puede activarlos o desactivarlos con 'invoque-rc.d sercom start' o 'stop' +respectivamente. + +El programa sc_deliver, encargado de cerrar una entrega y tomar el último +intento exitoso como entrega final a corregir, corre todos los días a las +23:30hs, puede modificarlo en el archivo /etc/cron.d/sercom. +Puede ser necesario modificarlo si el corrector es muy lento compilando y no +llega terminar de compilar las cosas que, normalmente, se terminan de entregar a +las 20:00hs. + +Tambien puede cambiar la frecuencia de rotación de logs en +/etc/logrotate.d/sercom. + + -- Leandro Lucarella , sáb mar 5 22:16:29 ART 2005 diff --git a/debian/changelog b/debian/changelog index e942bab..860d0f9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +sercom (0.3) unstable; urgency=low + + * Se migra sc_test a python. + * sc_test ahora corre los casos de prueba y compara resultados, enviando + mails, etc. No corre un chequeador de memoria. + * Se agrega sc_deliver, encargado de cerrar las entregas. + * Se agrega sc_dbq, para hacer consultas a la base de datos usando sqlobject + de python, principalmente con motivos de debug. + * Bugfixes. + + -- Leandro Lucarella Sun, 6 Mar 2005 01:36:29 -0300 + sercom (0.2) unstable; urgency=low * Se mejora el log. diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..73debd1 --- /dev/null +++ b/debian/control @@ -0,0 +1,20 @@ +Source: sercom +Section: utils +Priority: optional +Maintainer: Leandro Lucarella +Build-Depends: debhelper (>= 4.0.0), cdbs +Standards-Version: 3.6.1 + +Package: sercom +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, + php4-cli, php4-pear, php4-imap, make, python2.4, python2.4-sqlobject (>> 0.6.1) +Recommends: php4-sqlite, python2.4-sqlite, python2.4-egenix-mxdatetime, gcc, + g++, sqlite +Description: Servidor de correccion de taller + sercom es un SERvidor de COMpilacion y ejecucion de pruebas para la catedra de + Taller de Programacion I de la Facultad de Ingenieria de la Universidad de + Buenos Aires, aunque puede ser facilmente adaptado para usar por otras + catedras e incluso usos mas generales. + . + Este paquete incluye sc_fetch, sc_test, sc_deliver, sc_dbq y sc_codegen. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..67b3e40 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,22 @@ +This is sercom, written and maintained by Leandro Lucarella +on Sun, 29 Aug 2004 15:20:25 -0300. + +Copyright (C) 2003 Leandro Lucarella + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/debian/sercom.cron.d b/debian/sercom.cron.d new file mode 100644 index 0000000..9b5e7c7 --- /dev/null +++ b/debian/sercom.cron.d @@ -0,0 +1,5 @@ +# /etc/cron.d/sercom: fragmento de crontab para sercom + +# Ejecuta sc_deliver todos los días después a las 23:30hs +# m h dom mon dow user command +30 23 * * * sercom /usr/sbin/sc_deliver diff --git a/debian/sercom.default b/debian/sercom.default new file mode 100644 index 0000000..0a6d1ab --- /dev/null +++ b/debian/sercom.default @@ -0,0 +1,24 @@ +# Defaults for sercom initscript +# sourced by /etc/init.d/sercom +# installed at /etc/default/sercom by the maintainer scripts + +# +# This is a POSIX shell fragment +# + +# Opciones para el fetch +FETCH_OPTS="" +# Prioridad del fetch +FETCH_NICE=5 +# Usuario con el cual correr el fetch +FETCH_UID=sercom +# Grupo con el cual correr el fetch +FETCH_GID=sercom + +# Opciones para el test +TEST_OPTS="" +# Prioridad del test +TEST_NICE=10 + +# Hasta que esto no esté en 1, el servidor no va a correr. +ENABLED=0 diff --git a/doc/README b/doc/README index 8df4df8..1c504d8 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,62 @@ Corrector Automático para Taller de Programación I (75.42) Universidad de Buenos Aires - Facultad de Ingeniería +Este programa requiere el siguiente los siguientes programas y bibliotecas: +* php4-cli +* php4-imap +* php4-pear +* php4 PEAR DB_DataObject (1.7.2 o superior) (# pear install -a DB_DataObject) +* make +* python2.4 +* python2.4-sqlobject (0.6.2 o superior) +En el directorio /etc/sercom se encuentran los archivos de configuración, +debería darle una mirada antes de correr el servidor. + +/etc/sercom/log.ini es un poco más complejo y sirve para configurar el nivel +de log. El formato está descripto en: +http://docs.python.org/lib/logging-config-fileformat.html +Se lo provee de una forma bastante razonable, probablemente haya que cambiar +la sección [handler_mail] para poner un servidor SMTP y direcciones de mail +válidas solamente. + +Los archivos de configuración originales se encuentran en +/usr/share/doc/sercom/examples, por si fuera necesario recuperarlos. + +En /var/lib/sercom están los archivos de datos del programa. Contiene: +- Makefile de ejemplo ('Makefile' para C y 'Makefile-cpp' para C++). +- Directorio 'intentos' donde los intentos de entrega que llegan por mail + de los alumnos. Su estructura es: + intentos/año.cuatrimestre/curso.ejercicio.entrega/padron.intento + dentro de cada directorio están los archivos fuente enviados por el alumno. +- Directorio 'ejercicios' donde los datos sobre los ejercicios deben ser + guardados, incluyendo los archivos para casos de prueba. Su estructura es: + ejercicios/[id]/Makefile + casos_de_prueba/[nombre]/{stdin} + {stdout} + {stderr} + {entradas/[archivo]} + {salidas/[archivo]} + [algo] significa que algo es una variable. {algo} indica que puede no existir. + id: es el identificador de ejercicio en la base de datos. + nombre: es el nombre del caso de prueba + stdin/stdout/stderr: es la entrada estándar, salida estándar y salida de error + esperada (la entrada es la que espera el programa a probar y las salidas son + las que espera el corrector para saber si la corrida fue correcta). + entradas: los 'archivo's de entradas son los archivos que espera tener + presente el programa para correr el caso de prueba. + salidas: los 'archivo's de salidas son los archivos que espera que genere (o + modifique si estaba presente también en entradas) el corrector y con el que + serán comparados dichos archivos generados para evaluar si la corrida fue + correcta. +- Archivo de base de datos: la configuración por omisión espera la base de datos + en /var/lib/sercom/corrector.sqlite, con la estructura descripta en + /usr/share/doc/sercom/schema.sql. Para crear la base de datos vacía: + sqlite /var/lib/sercom/corrector.sqlite < /usr/share/doc/sercom/schema.sql + Pero recuerde que también habrá que cargar la base de datos con los datos + mínimos para que el corrector funcione (entregas, ejercicios, cursos, + docentes, inscriptos, casos de prueba). + +Por omisión el programa guarda el archivo de log en /var/log/sercom.log. + + -- Leandro Lucarella , sáb mar 5 22:16:29 ART 2005 diff --git a/doc/dependencias.txt b/doc/dependencias.txt deleted file mode 100644 index b830f66..0000000 --- a/doc/dependencias.txt +++ /dev/null @@ -1,3 +0,0 @@ -PEAR: -===== -DB_DataObject 1.7.2 diff --git a/doc/examples/Makefile-cpp b/doc/examples/Makefile-cpp new file mode 100644 index 0000000..7679eb3 --- /dev/null +++ b/doc/examples/Makefile-cpp @@ -0,0 +1,75 @@ +# Makefile de ejemplo para C++ +# +# Creado: jue abr 15 15:34:19 ART 2004 +# +# Copyleft 2004 - Leandro Lucarella, Bajo licencia GPL [http://www.gnu.org/] +# + +# CONFIGURACION +################ + +# Nombre del ejecutable. +target = tp + +# Extensión de los archivos a compilar (c para C, cpp o cc o cxx para C++). +extension = cpp + +# Archivos con el código fuente que componen el ejecutable. Si no se especifica, +# toma todos los archivos con la extensión mencionada. Para especificar hay que +# descomentar la línea (quitarle el '#' del principio). +# NOTA: No poner cabeceras (.h). +#fuentes = entrada.cpp + +# Si es un programa GTK+, descomentá (quitale el '#' a) la siguiente línea. +#gtk = si + + +# CONFIGURACION "AVANZADA" +########################### + +# Opciones para el compilador C. +CFLAGS = -Werror -Wall -ggdb -ansi -pedantic -DDEBUG + +# Opciones para el compilador C++. +CXXFLAGS = $(CFLAGS) -fno-inline + +# Opciones del enlazador. +LDFLAGS=-static + + +# VARIABLES CALCULADAS A PARTIR DE LA CONFIGURACION +#################################################### + +# Agrego flags y libs de GTK+ de ser necesario. +ifdef gtk +CFLAGS += $(shell pkg-config --cflags gtk+-2.0) +CXXFLAGS += $(shell pkg-config --cflags gtk+-2.0) +LDFLAGS += $(shell pkg-config --libs gtk+-2.0) +endif + +# Uso enlazador de c++ si es código no C. +ifeq ($(extension), c) +enlazador = $(CC) +else +enlazador = $(CXX) +endif + +# Si no especifica archivos, tomo todos. +fuentes ?= $(wildcard *.$(extension)) + + +# REGLAS +######### + +.PHONY: all clean + +all: $(target) + +o_files = $(patsubst %.$(extension),%.o,$(fuentes)) + +$(target): $(o_files) + $(enlazador) $(LDFLAGS) $(o_files) $(LOADLIBES) $(LDLIBS) -o $(target) + +clean: + @$(RM) -fv *.o $(target) + diff --git a/doc/examples/sercom.ini b/doc/examples/sercom.ini index 781b1b1..0dafe52 100644 --- a/doc/examples/sercom.ini +++ b/doc/examples/sercom.ini @@ -58,7 +58,7 @@ options = novalidate-cert/ssl [DBO] -database = sqlite:////var/lib/sercom/corrector.sqlite +database = sqlite:///var/lib/sercom/corrector.sqlite schema_location = T/DBO/schema/ class_location = T/DBO/ require_prefix = T/DBO/ diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..4d43da1 --- /dev/null +++ b/setup.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python2.4 +# -*- encoding: iso-8859-1 -*- +# vim: set et sw=4 sts=4 : + +from distutils.core import setup + +setup(name='sercom', + version='0.3', + description='Sercom base library', + author='Leandro Lucarella', + author_email='luca@llucax.hn.org', + url='http://www.fi.uba.ar/materias/7542/', + packages=['sercom'], + package_dir={'': 'src'}, +) diff --git a/src/T/general.php b/src/T/general.php index 22d6ab7..75478e5 100644 --- a/src/T/general.php +++ b/src/T/general.php @@ -1,6 +1,6 @@