Qué hacer para que en Tomcat 6 funcionen CGI’s de ficheros ejecutables en Linux

Instalé el Tomcat 6 y no funcionaban los CGI’s así que no podía probar el juego de damas de Jacobo, programado en C. Para hacer que Tomcat 6 ejecute ficheros (que no sean Perl, que es la configuración por defecto), hay que hacer:

  • Modificar $CATALINA_HOME/conf/context.xml y en el tag <Context> poner <Context privileged=”true”> para que se pueda cargar la clase encargada de ejecutar los CGI’s, que ahora no es un .jar independiente, sino que viene embebido en catalina.jar (parece ser… es lo que he leído).
  • Modificar $CATALINA_HOME/conf/web.xml :
    • Descomentar <servlet>…</servlet> relacionado con el cgi; es el tag contenedor de <servlet-name>cgi</servlet-name>
    • Fijarse en el valor relacionado con <param-name>cgiPathPrefix</param-name> , en mi caso era WEB-INF/cgi , pero lo cambié a WEB-INF/cgi-bin porque me gusta más. Es el directorio donde pondremos los ejecutables, concretamente, para mí: $CATALINA_HOME/webapps/ROOT/WEB-INF/cgi-bin
    • Añadir el parámetro:
      <init-param>
      <param-name>executable</param-name>
      <param-value></param-value>
      </init-param>

      De esta manera, conseguiremos que se ejecute el ejecutable. Si se pone bash o sh a mí no me funciona, y con esto sí… tengo mis teorías, pero dan igual ;)
    • Descomentar el bloque del mapeado del servlet relacionado con los CGI’s:
      <servlet-mapping>
      <servlet-name>cgi</servlet-name>
      <url-pattern>/cgi-bin/*</url-pattern>
      </servlet-mapping>
  • Meter los CGI’s en $CATALINA_HOME/webapps/ROOT/WEB-INF/cgi (o cgi-bin si se cambia el nombre, como yo).
  • Recargar el Tomcat

Tras esto, se ejecutarán los ficheros cuando se acceda a la dirección http://localhost:8080/cgi/ejecutable (o el puerto que esté establecido)