Debian + Lighttpd + Mailman
Bueno después de darme de topes con esto, ya logre que funcione esta configuración, que me dio muchos problemas... para empezar por que no me enviaba el error y así ni encontraba el por que marcaba error.
Primero he de decir que tal cual lo único que debe hacer uno para que se ejecuten los cgi de mailman en Debian es lighttpd-enable-mod cgi y en lighttpd.conf agregar:
"/cgi-bin/" => "/usr/lib/cgi-bin/",
"/pipermail/" => "/var/lib/mailman/archives/public/",
"/images/mailman/" => "/usr/share/images/mailman/",
)
Como podrán ver en /usr/lib/cgi-bin es donde Debian realmente guarda los cgi (derivado de como ha ido creciendo esta instalación aún tengo /var/www/html/ (que en Debian debiera ser /var/www ) ahora el detalle esta en que lighttpd corre como el usuario 33 (www-data) y normalmente mailman espera al 38 (list) asi que no encontraba ni el error por que al ejecutarlo como lighttpd ni escribía en los logs.
Primero pensé en hacer strace de lighttpd, craso error, como el sitio esta vivo y tiene muchas visitas en unos segundos me llenaba de pantallas y aun cuando encontraba el error no lograba distinguirlo de muchas otras cosas que se ejecutaban casi al mismo tiempo.
Entonces fui directamente a /usr/lig/cgi-bin/mailman y le di file listinfo:
Entonces, pues a ejecutarlo,
Status: 405 Method not allowed
Content-type: text/plain
The method is not allowed
Mhh, por ahí recordé que con su se pueden enviar comandos con su y el usuario así que
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[----- Mailman Version: 2.1.11 -----]
[----- Traceback ------]
Traceback (most recent call last):
File "/var/lib/mailman/scripts/driver", line 82, in run_main
immediate=1)
File "/usr/lib/mailman/Mailman/Logging/StampedLogger.py", line 52, in init
Logger.init(self, category, nofail, immediate)
File "/usr/lib/mailman/Mailman/Logging/Logger.py", line 50, in init
self.get_f()
File "/usr/lib/mailman/Mailman/Logging/Logger.py", line 68, in get_f
1)
File "/usr/lib/python2.5/codecs.py", line 817, in open
file = builtin.open(filename, mode, buffering)
IOError: [Errno 13] Permission denied: '/var/lib/mailman/logs/error'
Content-type: text/html
Bug in Mailman version 2.1.11
We're sorry, we hit a bug!
Please inform the webmaster for this site of this
problem. Printing of traceback and other system information has been
explicitly inhibited, but the webmaster can find this information in the
Mailman error logs.
[----- Python Information -----]
sys.version = 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2]
sys.executable = /usr/bin/python
sys.prefix = /usr
sys.exec_prefix = /usr
sys.path = /usr
sys.platform = linux2
[----- Environment Variables -----]
LANG: en_US
TERM: xterm
SHELL: /bin/sh
LANGUAGE: en_MX:en_US:en_GB:en
SHLVL: 1
PYTHONPATH: /var/lib/mailman
PWD: /var/www
LOGNAME: www-data
USER: www-data
HOME: /var/www
MAIL: /var/mail/www-data
_: /usr/lib/cgi-bin/mailman/listinfo
Ahi estaba el primer detalle:
/var/log/mailman no es puede ser escrito cuando es invocado por www-data en este caso lighttpd a dar chown www-data.www-data /var/log/mailman -R
Bueno después de arreglar eso a invocarlo de nuevo:
/usr/lib/cgi-bin/mailman# su - www-data -c /usr/lib/cgi-bin/mailman/listinfo
Status: 405 Method not allowed
Content-type: text/plain
The method is not allowed
Bueno al menos ya tenemos el mismo comportamiento que cuando lo ejecuto directo como root, pero mejor aún ahora si escribe el error en /var/log:
admin(10633): [----- Mailman Version: 2.1.11 -----]
admin(10633): [----- Traceback ------]
admin(10633): Traceback (most recent call last):
admin(10633): File "/var/lib/mailman/scripts/driver", line 110, in run_main
admin(10633): main()
admin(10633): File "/usr/lib/mailman/Mailman/Cgi/listinfo.py", line 42, in main
admin(10633): listinfo_overview()
admin(10633): File "/usr/lib/mailman/Mailman/Cgi/listinfo.py", line 87, in listinfo_overview
admin(10633): mlist = MailList.MailList(name, lock=0)
admin(10633): File "/usr/lib/mailman/Mailman/MailList.py", line 130, in init
admin(10633): self.Load()
admin(10633): File "/usr/lib/mailman/Mailman/MailList.py", line 638, in Load
admin(10633): dict, e = self.load(file)
admin(10633): File "/usr/lib/mailman/Mailman/MailList.py", line 604, in load
admin(10633): fp = open(dbfile)
admin(10633): IOError: [Errno 13] Permission denied: '/var/lib/mailman/lists/anime/config.pck'
admin(10633): [----- Python Information -----]
admin(10633): sys.version = 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
[GCC 4.3.2]
admin(10633): sys.executable = /usr/bin/python
admin(10633): sys.prefix = /usr
admin(10633): sys.exec_prefix = /usr
admin(10633): sys.path = /usr
admin(10633): sys.platform = linux2
admin(10633): [----- Environment Variables -----]
admin(10633): REDIRECT_STATUS: 200
admin(10633): SERVER_SOFTWARE: lighttpd/1.4.19
admin(10633): SCRIPT_NAME: /cgi-bin/mailman/listinfo
admin(10633): REQUEST_METHOD: GET
admin(10633): HTTP_KEEP_ALIVE: 300
admin(10633): SERVER_PROTOCOL: HTTP/1.1
admin(10633): CONTENT_LENGTH: 0
admin(10633): HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7
admin(10633): HTTP_USER_AGENT: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009011912 Firefox/3.0.6
admin(10633): HTTP_CONNECTION: keep-alive
admin(10633): SERVER_NAME: foo.bar
admin(10633): REMOTE_PORT: 58661
admin(10633): SERVER_PORT: 80
admin(10633): SERVER_ADDR: 0.0.0.0
admin(10633): DOCUMENT_ROOT: /var/www/html
admin(10633): PYTHONPATH: /var/lib/mailman
admin(10633): SCRIPT_FILENAME: /usr/lib/cgi-bin/mailman/listinfo
admin(10633): HTTP_HOST: foo.bar
admin(10633): REQUEST_URI: /cgi-bin/mailman/listinfo
admin(10633): HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
admin(10633): GATEWAY_INTERFACE: CGI/1.1
admin(10633): REMOTE_ADDR: foo.bar
admin(10633): HTTP_ACCEPT_LANGUAGE: en-us,en;q=0.5
admin(10633): HTTP_ACCEPT_ENCODING: gzip,deflate
[terminal]
Mhh... aqui lo importante
[terminal]
admin(10633): IOError: [Errno 13] Permission denied: '/var/lib/mailman/lists/anime/config.pck'
admin(10633): [----- Python Information -----]
El directorio lists y todo su contenido tiene como dueño root.list entonces pues ahora nuestro binario (setgid) no puede leer las listas... pero entonces ya estamos de gane:
Y voila tenemos mailman funcionando en Debian con lighttpd. Resumiendolo en pocos pasos.
1) Es necesario activar el modulo cgi de lighttpd (si esta uno en stable, es este caso Lenny, no hay necesidad de modificar su configuración.
2) En lighttpd.conf hay que añadir alias a los archivos que se van a usar:
"/cgi-bin/" => "/usr/lib/cgi-bin/",
"/pipermail/" => "/var/lib/mailman/archives/public/",
"/images/mailman/" => "/usr/share/images/mailman/",
)
3) /var/log/mailman tiene como dueño root.list y debe ser www-data.lists para que pueda escribir lighttpd ahi
4) /var/lib/mailman/list tiene como dueño a root.list y tambien debe ser www-data.lists para que pueda leer y modificar ahi lighttpd (bueno mas bien el script pero que es invocado por lighttpd)
5) newlist en caso de que aun no tengamos listas creadas.
- Bitácora de vicm3
- Log in or register to post comments