Para programar ambientes virtuales en 3D se recomienda OpenScenGraph.
En caso de que, al compilar en linux, se obtengan errores por la falta de un gif_lib.h, instalar giflib y libungif.
A menudo encuentro información interesante mientras trabajo con computadoras. Deseo utilizar este blog para reunir en él todo aquello que me ha resultado de utilidad y requiero consultar contínuamente, como pasos para configurar algún servicio o sitios con material interesante. Espero que también pueda ayudarle a otras personas, aunque sé que ya hay muchos sitios de este estilo (pero este contiene las ligas que a mí me sirven).
martes, 16 de enero de 2007
sábado, 13 de enero de 2007
Red en casa
La meta es acceder a internet desde dos computadoras, contando tan sólo con una conexión.
Para ello le he agregado una tarjeta ethernet pci extra a mi computadora con linux.
1) La tarjeta nueva fue colocada arriba de la anterior (o a la izquierda). Esto provocó conflictos al momento de activar la nueva tarjeta. Las direcciones físicas de eth0 y eth1 quedaron confundidas, dando origen a errores desagradables como " eth1: error fetching interface information: Device not found" o algo como que no estaba el dispositivo tulip, "retrasando la inicialización". En los foros, estos errores suelen deberse a que eth1 no ha sido dada de alta, en este caso los comandos dmesg e ifconfig -a me proveyeron de la información necesaria para encontrar la causa correcta. La solución al problema fué:
Entrar a la interfaz gráfica (Administración - Redes) borrar las interfaces (eth0 y eth1) y los registros del hardware; reiniciar la computadora y utilizar de nuevo la interfaz gráfica para darlos de alta otra vez.
Con esto las direcciones de los dispositivos se enderezaron (aunque ahora la tarjeta que solía ser eth0 se convirtió en eth1).
2) Seguir la guía en el rincón del programador. La versión resumida es:
Para ello le he agregado una tarjeta ethernet pci extra a mi computadora con linux.
1) La tarjeta nueva fue colocada arriba de la anterior (o a la izquierda). Esto provocó conflictos al momento de activar la nueva tarjeta. Las direcciones físicas de eth0 y eth1 quedaron confundidas, dando origen a errores desagradables como " eth1: error fetching interface information: Device not found" o algo como que no estaba el dispositivo tulip, "retrasando la inicialización". En los foros, estos errores suelen deberse a que eth1 no ha sido dada de alta, en este caso los comandos dmesg e ifconfig -a me proveyeron de la información necesaria para encontrar la causa correcta. La solución al problema fué:
Entrar a la interfaz gráfica (Administración - Redes) borrar las interfaces (eth0 y eth1) y los registros del hardware; reiniciar la computadora y utilizar de nuevo la interfaz gráfica para darlos de alta otra vez.
Con esto las direcciones de los dispositivos se enderezaron (aunque ahora la tarjeta que solía ser eth0 se convirtió en eth1).
2) Seguir la guía en el rincón del programador. La versión resumida es:
- Editar /etc/sysctl.conf para asignar
net.ipv4.ip_forward = 1
- Reiniciar la interfaz de red con
$ service network restart
- Comprobar que forwarding fue activado con
$ cat /proc/sys/net/ipv4/ip_forward
(se debe imprimir un 1).
- Indicar que haga los cambios de ip necesarios cuando recibe solicitudes para internet:
donde interfaz_internet es el dispositivo con el que nos conectamos a internet (eth0, ppp0 para un modem)
$/sbin/iptables -t nat -A POSTROUTING -o [INTERFAZ_INTERNET] -j MASQUERADE - Asegurar con:
$ /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$ /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
$ /sbin/iptables -A FORWARD -j DROP
// ¿Y si quiero usar ssh?
miércoles, 10 de enero de 2007
Memcached
Memcaché es un supersistema para guardar páginas dinámicas en un caché que sirve sitios con mucho tráfico.
Instalarlo requiere libevent. Sin embargo hay un problema común: config encuentra la librería cuando está ahí, pero al momento de ejecutar:
[]$ memcached -d -m 1024 -l 127.0.0.1 -p 3034 -P mem.pid
Se obtiene el error:
memcached: error while loading shared libraries: libevent-1.2a.so.1: cannot open shared object file: No such file or directory
Utilizando:
[]$ LD_DEBUG=libs memcached -v
Se puede ver en qué directorios está buscando la biblioteca. Éstos corresponden a un "system search path" que no incluye directorios como /usr/local/lib. Si libevent fue instalada aquí, aunque se haya configurado con ./configure --with-libevent=/usr/local/lib éste directorio no aparece. Esperaba encontrar alguna manera de arreglarlo al compilar memcached, pero no he podido, la única solución que se me ocurrió (y otros han usado) es crear una liga suave desde un directorio en el camino de búsqueda hacia la biblioteca:
[]& ln -s /usr/local/lib/libevent-1.2a.so.1 /usr/lib
Me encantaría saber de una solución más elegante.
Instalarlo requiere libevent. Sin embargo hay un problema común: config encuentra la librería cuando está ahí, pero al momento de ejecutar:
[]$ memcached -d -m 1024 -l 127.0.0.1 -p 3034 -P mem.pid
Se obtiene el error:
memcached: error while loading shared libraries: libevent-1.2a.so.1: cannot open shared object file: No such file or directory
Utilizando:
[]$ LD_DEBUG=libs memcached -v
Se puede ver en qué directorios está buscando la biblioteca. Éstos corresponden a un "system search path" que no incluye directorios como /usr/local/lib. Si libevent fue instalada aquí, aunque se haya configurado con ./configure --with-libevent=/usr/local/lib éste directorio no aparece. Esperaba encontrar alguna manera de arreglarlo al compilar memcached, pero no he podido, la única solución que se me ocurrió (y otros han usado) es crear una liga suave desde un directorio en el camino de búsqueda hacia la biblioteca:
[]& ln -s /usr/local/lib/libevent-1.2a.so.1 /usr/lib
Me encantaría saber de una solución más elegante.
viernes, 5 de enero de 2007
Django con Fast-Cgi
Aquí wmldocs está fuera de DocumentBase.
En httpd.conf (fuera de cualquier virtual host):
FastCGIExternalServer /.../wmldocs/mysite.fcgi -socket /home/.../mysite/mysite.sock
(Detro del host virtual, si hay uno):
Alias "/cel" "/.../wmldocs"
RewriteEngine On
RewriteBase /.../wmldocs
RewriteCond %{REQUEST_FILENAME} !-f #Si lo que se solicita no es un archivo
RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
Ejecutar el servidor de fcgi (daemonize=false se usa para depurar):
[]$ python manage.py runfcgi daemonize=false method=prefork socket=/home/.../mysite/mysite.sock pidfile=/home/.../mysite/mysite.pid
Detener el servidor:
[]$ kill `cat $PIDFILE`
[]$ rm -f $PIDFILE
Aún obtengo:
(13)Permission denied: FastCGI: failed to connect to server
Después de no encontrar el motivo del fallo (apache corre con un usuario, el subdominio con otro, fastcgi requiere permisos de lectura/escritura, etc.) opté por cambiar al uso del puerto TCP:
python manage.py runfcgi daemonize=false method=threaded host=127.0.0.1 port=3033 pidfile=/home/.../mysite/mysite.pid
FastCGIExternalServer /.../wmldocs/mysite.fcgi -host 127.0.0.1:3033
La aplicación manejada por django se ve en http://subdominio.servidor.com/cel/mysite.fcgi/polls/
En httpd.conf (fuera de cualquier virtual host):
FastCGIExternalServer /.../wmldocs/mysite.fcgi -socket /home/.../mysite/mysite.sock
(Detro del host virtual, si hay uno):
Alias "/cel" "/.../wmldocs"
RewriteEngine On
RewriteBase /.../wmldocs
RewriteCond %{REQUEST_FILENAME} !-f #Si lo que se solicita no es un archivo
RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]
Ejecutar el servidor de fcgi (daemonize=false se usa para depurar):
[]$ python manage.py runfcgi daemonize=false method=prefork socket=/home/.../mysite/mysite.sock pidfile=/home/.../mysite/mysite.pid
Detener el servidor:
[]$ kill `cat $PIDFILE`
[]$ rm -f $PIDFILE
Aún obtengo:
(13)Permission denied: FastCGI: failed to connect to server
Después de no encontrar el motivo del fallo (apache corre con un usuario, el subdominio con otro, fastcgi requiere permisos de lectura/escritura, etc.) opté por cambiar al uso del puerto TCP:
python manage.py runfcgi daemonize=false method=threaded host=127.0.0.1 port=3033 pidfile=/home/.../mysite/mysite.pid
FastCGIExternalServer /.../wmldocs/mysite.fcgi -host 127.0.0.1:3033
La aplicación manejada por django se ve en http://subdominio.servidor.com/cel/mysite.fcgi/polls/
Etiquetas:
apache,
frameworks,
instalación,
python
martes, 2 de enero de 2007
[Psycopg] configure.in patch for pg_type.h path on Red Hat
Cambio la idea original de Vsevolod Lobko
para que funcione en RedHat (postgresql por pgsql, se podría agregar otro if).
para que funcione en RedHat (postgresql por pgsql, se podría agregar otro if).
RedHat Fedora o Enterprise port for PostgreSQL puts server headers in
/usr/local/include/pgsql/server/
So proposed patch adds this directory to list of possible
locations for pg_type.h
-------------- next part --------------
--- configure.in.orig Sat Jul 26 16:16:54 2003
+++ configure.in Sun Jul 27 15:59:19 2003
@@ -72,6 +72,12 @@
PGSQLTYPES="$PGSQLDIR/server/catalog/pg_type.h"
PGSQLDIR="$PGSQLDIR/server"
CPPFLAGS="$CPPFLAGS -I$PGSQLDIR"
+ else
+ if test -d $PGSQLDIR/pgsql/server/catalog ; then
+ PGSQLTYPES="$PGSQLDIR/pgsql/server/catalog/pg_type.h"
+ PGSQLDIR="$PGSQLDIR/pgsql/server"
+ CPPFLAGS="$CPPFLAGS -I$PGSQLDIR"
+ fi
fi
fi
test -z "$PGSQLTYPES" && AC_MSG_ERROR(pg_type.h not found)
jueves, 21 de diciembre de 2006
Compilando Apache httpd con todo compartido
./configure --with-ldap --enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"
make
make install
Referencias:
Apache2.2
Recipes/ConfigAllMods
NOTA: Obsérvese que cada módulo sólo debe compilarse una vez, ya sea incrustado o compartido, pero no ambos. (En mi caso agregué también la opción --enable-modules="all" y el resultado fue que, al arrancar el servidor, nunca protestó, pero tampoco funcionó.)
make
make install
Referencias:
Apache2.2
Recipes/ConfigAllMods
NOTA: Obsérvese que cada módulo sólo debe compilarse una vez, ya sea incrustado o compartido, pero no ambos. (En mi caso agregué también la opción --enable-modules="all" y el resultado fue que, al arrancar el servidor, nunca protestó, pero tampoco funcionó.)
miércoles, 20 de diciembre de 2006
Formatear disco nuevo
Después de haber conectado el disco, encender la computadora. Utilizar dmesg para verificar que la computadora haya detectado el disco (este comando permite imprimir los mensajes de arranque).
Aunque no se esté usando debian, http://www.debianhelp.co.uk/newharddisk.htm es una buena referencia (algunos podrán saltar a esa página y no regresar aquí, sólo especifico los puntos donde tuve problemas al seguir esa guía).
Para hacer las particiones utilizo fdisk. Por ejemplo, queriendo particionar un disco scsi de 250G en dos secciones de 100G y 150G, se invoca:
#fdisk /dev/sdb
Es una aplicación interactiva, por lo que, para configuraciones básicas, basta con ir leyendo las indicaciones. Al final mi sistema quedó:
Disk sdb: 250.0 GB, 250000000000 bytes
255 heads, 63 sectors/track, 30394 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
sdb1 1 12158 97659103+ 83 Linux
sdb2 12159 30394 146480670 83 Linux
Para dar formato, en Fedora, mkfs -c -t ext3 /dev/sdb1 devuelve mkfs.ext2: invalid blocks count - /dev/sdb1. La opción es, entonces, el siguiente comando:
#mke2fs -cjv /dev/sdb1
Finalmente resta montar las particiones. Para montarla en el momento:
mount -rwt ext3 /dev/sdb1 /punto_de_montaje/
Agregar la entrada correspondiente en /etc/fstab para que la partición sea montada al arrancar el sistema:
/dev/sdb1 /punto_de_montaje ext3 defaults 0 0
Ojo, si se copian datos, aquí puede ser recomendable utilizar:
#cp -rp origen destino
si se quiere preservar permisos. También puede requerirse -Z si se trabaja con SELinux.
Aunque no se esté usando debian, http://www.debianhelp.co.uk/newharddisk.htm es una buena referencia (algunos podrán saltar a esa página y no regresar aquí, sólo especifico los puntos donde tuve problemas al seguir esa guía).
Para hacer las particiones utilizo fdisk. Por ejemplo, queriendo particionar un disco scsi de 250G en dos secciones de 100G y 150G, se invoca:
#fdisk /dev/sdb
Es una aplicación interactiva, por lo que, para configuraciones básicas, basta con ir leyendo las indicaciones. Al final mi sistema quedó:
Disk sdb: 250.0 GB, 250000000000 bytes
255 heads, 63 sectors/track, 30394 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
sdb1 1 12158 97659103+ 83 Linux
sdb2 12159 30394 146480670 83 Linux
Para dar formato, en Fedora, mkfs -c -t ext3 /dev/sdb1 devuelve mkfs.ext2: invalid blocks count - /dev/sdb1. La opción es, entonces, el siguiente comando:
#mke2fs -cjv /dev/sdb1
Finalmente resta montar las particiones. Para montarla en el momento:
mount -rwt ext3 /dev/sdb1 /punto_de_montaje/
Agregar la entrada correspondiente en /etc/fstab para que la partición sea montada al arrancar el sistema:
/dev/sdb1 /punto_de_montaje ext3 defaults 0 0
Ojo, si se copian datos, aquí puede ser recomendable utilizar:
#cp -rp origen destino
si se quiere preservar permisos. También puede requerirse -Z si se trabaja con SELinux.
Suscribirse a:
Entradas (Atom)