22 de marzo de 2009

Una alegría del software libre

Este post será un poco más técnico, así que si no te gustan mucho las computadoras te lo podés saltear... aunque, por supuesto, estás más que invitado a leerlo y preguntar!

Resulta que quería jugar al freeciv contra un contrincante que está en otro lugar del mundo. Podíamos usar un servidor de los que hay en internet... pero mola más poner un server propio :)
Así que una vez configurado mi router para que forwardee el puerto 5555, tratamos de empezar.
El otro jugagador no se podía conectar. No había caso. Tratamos con:

telnet miservidor 5555

pero nada... evidentemente estaban bloqueandole los puertos. Como por internet sí podía navegar, dije "bueno, es cuestión de poner el servidor de freeciv en el puerto 80 y listo", pero como todo buen Unix, no pude hacerlo como usuario normal. Traté entonces como root. Pero como todo buen programa, civserver se negó a arrancar como root, por cuestiones de seguridad posiblemente. Busqué en la ayuda, pero no encontré ninguna opción para forzar al civserver a ejecutar como root.

Lo maravilloso del software libre es que tenés acceso al código fuente del programa. Y lo maravilloso de eso es que uno puede cambiar el software para adaptarlo a sus necesidades. En la práctica, esto puede ser bastante difícil: para cambiar algo hay que entender en mayor o menor medida el código fuente, lo cual no siempre es fácil.
En este caso mi necesidad era muy específica: lograr ejecutar el civserver en el puerto 80, para lo cual necesito ser root. En este caso particular no parecía (ni lo fue, por suerte) muy difícil: seguro que había una función que verificaba si civserver estaba siendo ejecutado como root y abortaba. Efectivamete, luego de una búsqueda de menos de 1 minuto en el código fuente di con la función en cuestión. Comenté la línea que abortaba el programa, recompilé y voilá! Ahora estoy jugando al freeciv en el puerto 8o, jaja!

9 comentarios:

Eric dijo...

Felicitaciones. Anoche estuve con algo similar. Resulta que no encontraba forma de que en Audacious los track-numbers menores a 10 se mostraran con un 0 adelante. Estuve un poco más de tiempo que vos buscando en el código fuente (unas cuatro horas) como era el formato apropiado a usar hasta que lo encontré.

Ahora, capaz era mas simple hacer tunneling... digo, no se. A veces editar el programa es mas simple, que se yo.

mazlov dijo...

En este caso era fácil buscar. Tenía que estar más o menos al inicio. Pero también se podía buscar el string que motraba al dar el error (algo como "I can't run as superuser"). Me imagino que era más complicado lo que cambiaste vos :)
Un abrazo!

Marianyka dijo...

Lo mejor de todo es que gracias al SL se pudieron conectar dos personas y hacer que se sintieran como en casa... jugando al freeciv!! :)

mazlov dijo...

Qué ñoños, jajjaja! Besote!

Anónimo dijo...

groso hubiera estado hackear el kernel para que te deje usar el 80 como usuario :-P pero bueno, siempre hay soluciones de compromiso. un abrazo, chango.

mazlov dijo...

Jejje, pero pasa que no lo quise hacer por esa cosa de la seguridad :)

(y que no tengo idea de kernel hacking... aun)

fast dijo...

che, te pinta hacerme un jueguito a mi? es que me estoy adiccionando mucho al freeciv.... si te pinta avisa lugar y hora y vemos

Fede

PS: lo bueno es que creo que el huso orario nos faborece

mazlov dijo...

fast: no, no tengo idea de hacer juegos... si queres algun hack rápido y facil para algo, puede ser :)

mazlov dijo...

fast, después de un tiempo recién entendí tu comentario. y mucho después (ahora) escribo la respuesta. Cuando quieras hacemos un feeciv. Los que se quiran prender, bienvenidos!