jueves, 22 de marzo de 2007

MAC address

El primer problema: necesito conocer la dirección hardware de la(s) tarjeta(s) Ethernet instalada(s). En Linux tengo una ioctl, SIOCGIFHWADDR, que me devuelve una estructura con información del interfaz. En Darwin se usa la llamada getifaddrs.

He encontrado un trozo de código en las
páginas de Rafael Baptista, tiene la ventaja de que compara entre sistemas operativos. Gracias, Rafael!

Bueno, he codificado una compilación condicional y resuelto.

Empezamos a compilar

Ya tengo mi entorno preparado, podemos empezar la compilación propiamente dicha. Creo que lo mejor será intentar compilar todo e iré comentando los problemas. La otra opción sería estudiar las diferencias entre Darwin y Linux e intentar preparar el código, pero no sé lo suficiente de Darwin para eso.

miércoles, 21 de marzo de 2007

tcl ya funciona

Encontré esta solución (bendito Google) para que funcionen las scripts de TCL, Hay que cambiar la cabecera de la script, donde pone:

#!/usr/bin/wish

hay que poner:

#!/bin/sh
# HACK: this is a comment for tcl \
exec wish "$0" ${1+"$@"}

con eso ya está resuelto (me interesa, evidentemente, que la script siga funcionando en otros UNIX). No me gusta mucho, debería haber funcionado lo de arriba.

martes, 20 de marzo de 2007

Ejecucion de scripts de Wish

¡Empezamos a ejecutar código!

El primer candidato es una script auxiliar llamada mig escrita en wish. Y la primera en la frente, ¡no reconoce ni una línea! Los errores son:

./mig: line 17: proc: command not found
./mig: line 19: label: command not found
./mig: line 20: pack: command not found
./mig: line 21: syntax error near unexpected token `}'
./mig: line 21: `}'

El problema es que interpreta como una script de bash, en vez de script de wish, a pesa de que la primera línea dice:

#!/usr/bin/wish

En Google encuentro que otros han tenido el mismo problema. Curiosamente, si ejecuto:

/System/Library/Frameworks/Tk.framework/Versions/8.4/Resources/Wish\ Shell.app/Contents/MacOS/Wish\ Shell mig

Entonces el script funciona y me saca una ventanita. Por cierto, si ejecuto wish y luego tecleo directamente el código (cut & paste) entonces también funciona.

lunes, 19 de marzo de 2007

Mayúculas y Minúsculas

Seguimos compilando programas adicionales. El caso es que compilo el vncviewer (una mutación que copia las imágenes en memoria compartida). Hay un problema: al compilar el vncviewer me desaparece el fichero de recursos, llamado Vncviewer.

¡Horror! ¡No puede ser! ¿Tendrá un sistema de ficheros insensible a mayúsculas/minúsculas? Ejecuto "touch FILE" y "touch file" y ES VERDAD. Esto mola poco. En realidad, es más cercano al usuario (en mi puerta pone "GABRIEL", todo mayúculas, y sigo siendo yo). Pero del viejo UNIX siguen existiendo muchos ficheros con el mismo nombre cambiado una o varias minúsculas por mayúsculas. Ya veré si esto es realmente un problema.

viernes, 16 de marzo de 2007

Imagen de disco lista!

Ya tengo una imagen de disco, hecho con hdiutil. Esto del Mac está bastante bien documentado. Bueno, el comando es:

hdiutil create -srcfolder SRC_DIR -volname PKG_NAME PKG_NAME.dmg

donde SRC_DIR es el directorio donde tengo el paquete (y, posiblemente, documentación adicional), y PKG_NAME es el nombre del paquete.

licmandevel.dmg

Ahora estoy intentando generar una imagen de disco. Es fácil en modo interactivo, con el Disk Utility (File -> New -> Disk Image from Folder ...) y se siguen las instrucciones. Pero necesito hacerlo en línea de comandos, a ver si es posible.

IsabelExtras.pkg listo!

bien, ya soy capaz de hacer paquetes con el PackageMaker. Para simplificar, primero lo hice con el Asistente (en modo GUI) y luego copié los ficheros generados, abriendo con Show Package Contents. Hice un folder "Contents", y copié dentro:
  • Contents -> Info.list
  • Contents -> Resources -> English.lproj -> Description.plist
  • Contents -> Resources -> English.lproj -> LicManDevel.info
    (Nota: el paquete se llama LicManDevel, este último fichero cambiará de nombre para otros paquetes)
Luego ejecutas el PackageMaker:

/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -build -p LicManDevel.pkg -f /var/tmp/pkg_dir -v -ds -i pkg.LicManDevel/Contents/Info.plist -d pkg.LicmanDevel/Contents/Description.plist

El directorio /var/tmp/pkg_dir tiene los ficheros a instalar, con la misma jerarquía relativa que se quiera instalar.
mola, eh?

jueves, 15 de marzo de 2007

PackageMaker

Bien, ya he "descubierto" el PackageMaker ;-) Tiene un asistente razonable y ya he conseguido hacer un paquete con los extras de Isabel, y los he instalado. Tiene una interfaz gráfica muy chula, pero necesito que funcione en modo línea de comandos. Acabo de leer que a veces no funciona igual, ya veremos como pita

martes, 13 de marzo de 2007

Empaquetamiento de IsabelExtras

Hoy he pasado el día intentando hacer un paquete con el IsabelExtras. Ya he conseguido
que compile, pero no tengo ni idea de cómo empaquetar. Empecé leyendo lo de los DarwinPorts, pero luego encontré el PackageManager. He estado echando una partidita, pero no he acabado de entenderlo, mañana me lo leo más despacio.

lunes, 12 de marzo de 2007

Compilación del reflector de VNC

Tenemos una modificación del reflector de VNC que incluye IPv6. Para compilarlo, he tenido que cambiar las siguientes líneas al Makefile:

# Link with zlib and JPEG libraries
LDFLAGS = -L/usr/local/lib -lz -ljpeg

por lo siguiente:

TARGET.OS :=$(shell uname)

# Link with zlib and JPEG libraries
ifeq ($(TARGET.OS),Darwin)
CFLAGS += -I/opt/local/include
LDFLAGS = -L/opt/local/lib -ljpeg -lz
else
LDFLAGS = -L/usr/local/lib -ljpeg -lz
endif

Ya tengo reflector de VNC con soporte IPv6.

Uso de libjpeg

Bueno, ha habido que tocar los Imakefiles del VNC viewer (una mutación pública para exportar el escritorio mediante memoria compartida). No sé si lo habré hecho bien, ponía esto:

ZLIB_INC = -I/usr/local/include
JPEG_INC = -I/usr/local/include
INCLUDES = -I../include -I. $(ZLIB_INC) $(JPEG_INC) -I/usr/include
VNCAUTH_LIB = ../libvncauth/libvncauth.a
ZLIB_LIB = -L/usr/local/lib -lz
#ifdef OSF1Architecture
XCOMM Avoid linking with different libjpeg in /usr/shlib under Tru64.
JPEG_LIB = /usr/local/lib/libjpeg.a
#else
JPEG_LIB = -L/usr/local/lib -ljpeg
#endif

Y ahora he puesto esto:

#ifdef DarwinArchitecture
ZLIB_INC = -I/opt/local/include
ZLIB_LIB = -L/opt/local/lib -lz
JPEG_INC = -I/opt/local/include
#else
ZLIB_INC = -I/usr/local/include
ZLIB_LIB = -L/usr/local/lib -lz
JPEG_INC = -I/usr/local/include
#endif
INCLUDES = -I../include -I. $(ZLIB_INC) $(JPEG_INC) -I/usr/include
VNCAUTH_LIB = ../libvncauth/libvncauth.a
#ifdef OSF1Architecture
XCOMM Avoid linking with different libjpeg in /usr/shlib under Tru64.
JPEG_LIB = /usr/local/lib/libjpeg.a
#else
#ifdef DarwinArchitecture
JPEG_LIB = -L/opt/local/lib -ljpeg
#else
JPEG_LIB = -L/usr/local/lib -ljpeg
#endif
#endif

El caso es que el vncviewer ya compila. Repetiré los cambios en los Imakefile que lo necesiten.

Bibliotecas Básicas

Bueno, compilo el IsabelExtras. Se queja de que no tiene la libjpeg. Encuentro instrucciones de instalacion en http://snippets.dzone.com/posts/show/38. Me intento bajar las fuentes con wget. Vale, no tengo wget, ejecuto

sudo port install wget

se tira media hora, pero instala el wget. Automáticamente me ha instadado: expat, libiconv, gettext, zlib, openssl y, por último, el wget propiamente dicho. ya puedo bajar el software con:

wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz

seguimos las instrucciones, que copio:

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install
sudo ranlib /usr/local/lib/libjpeg.a

Se queja en el "sudo make install", porque no existe el directorio "/usr/local/" donde intenta instalar la biblioteca.
Prueba a ejecutar:

./configure --prefix=/usr/share --enable-shared --enable-static

(Recompilo por si acaso). hmmm, estoy pensando, ¿existe port para jpeg? pruebo:

sudo port install jpeg

¡Ahí está! Ya tengo libjpeg. En fin, borraré lo anterior y sigo

isabelExtras

Vaya, necesito el paquete isabelExtras, disponible en .rpm y .deb para instalar en los SuSE y los Ubuntu. La aplicación es tan grande que tuvimos que dividirlas en la parte principal y los accesorios o "extras". Voy a intentar bajarlo, compilarlos y generar un paquete.

EMPIEZA LA FIESTA

(esta entrada es un compendio de los tres primeros días, que escribí en una wiki).

Gracias por la inestimable ayuda de: Joaquín Salvachúa, Eva Castro.

2006/03/07. Miércoles. EMPIEZA EL ASUNTO. Necesito los fuentes de código, voy a por el CVS. Para ello necesito un instalador de paquetes llamado DarwinPorts, parecido al dpkg de Ubuntu/Debian. Lo instalo desde http://darwinports.opendarwin.org/.

Ya puedo instalar el cvs con el comando sudo port install cvs

Ya me puedo bajar las fuentes de ISABEL, el software que quiero portar.

2006/03/08. Jueves. Intento compilar. Empiezo a añadir los ficheros en el directorio CONFIG/. Primer problema: no tengo makedepend. Viene con las X11, así que a instalarlas (no quería, para que la compilación fuese limpia, puesto que sólo los que "pintan" dependerían de las X, pero qué le vamos a hacer, ya veremos cómo independizarlo). Después de mil vueltas, para instalarlo se inserta el DVD-1, se busca "utilidades" y se instalan las X11. Ya tengo makedepend. Ah si! hay que añadir /usr/X11R6/bin a la variable PATH, que se inicializa en ~$HOME/.profile.

2006/03/09. Viernes. Vaya, después de algunos ficheros más en CONFIG, el gcc se queja de la opción -oTARGET, así que los iré cambiando por -o TARGET, (espacio en blanco) que sí le gusta (el primero no debería usarse, pero en otros sistemas se admite). Anda, el gcc para Mac OS no soporta las opciones -fpic, -fPIC ni -shared. Pues que bien, de momento las quito, pero los ejecutables serán G-O-R-D-O-S.

Vaya, se la pega porque no tengo la biblioteca licman. Todo un problema, está más abandonada que un grano de arena en el desierto. Sin fuentes podemos pasarlo MUY mal. Como no tengo nada que perder, la voy a copiar a pelo, a ver que pasa.

Vaya, pues no se queja mucho. La he tenido que poner en /usr/share en vez de /usr/local porque no existía y parece que todos los demás programas usan /usr/share, no voy a llevar yo la contraria. hmm. se me queja del libcrypto.a, claro. Vamos a buscarlo y lo instalamos.

(joe, leyendo mis propias notas, veo que makedepend lo proporciona imake (que pertenece a las X11) quizá lo prodría haber instalado aislado, sin el resto de las X11. En fin, a ver si mentero de lo que digo).

El ordenador y su software

Bien, aqui cuento la experiencia de compilar en un MacBook, que tiene un sistema operativo Mac OS X 10.4, que lleva un kernel Darwin 8.8.1. El comando uname -m informa de una arquitectura i386.

El software que quiero portar es un sistema de colaboración interactiva con soporte multimedia. Está escrito en C, C++, Java, TCL/TK y bash.

Iré contanto lo que hago, los problemas que me encuentro, cómo los soluciono y la gente que me ha ayudado. Por cierto, tengo un as en la manga: linea directa con Fraguel Rock. Espero que no tenga que usarla ;-)

Tengo un ordenador blanco

Me han comprado un ordenado blanco. Es muy estiloso y tiene manzanas por todas partes.
Me han dicho que por dentro tiene un UNIX. Voy a intentar portar el software en el que trabajo, junto con un grupo muy grande de compañeros y amigos, a este aparato.