BatU’s Stack
            Aprendiendo a aprender Software Libre

15 October 2006

Creación de un repositorio Debian (2ª parte)

Archivado en: GNU/Linux, Debian

Conforme terminamos lo explicado en la primera parte nuestro repositorio no utiliza firmas. Para ello deberemos firmar los Release con gpg, para lo cual necesitamos habernos creado una clave.

Generación de una clave

Simplemente hemos de ejecutar el siguiente comando:

gpg --gen-key

Nos hará una serie de preguntas, entre ellas nos pedira un passphrase, que sera la clave privada.

Más adelante necesitaremos importar la clave pública para usar el repositorio, la exportamos con el siguiente comando:

gpg -a --export > clave_publica.gpg

Firma de los Release

Ahora que ya poseemos una clave para firmar el repositorio tenemos que firmar todos los Release en cada uno de los directorios:

gpg -bao Release.gpg Release

Esto nos pide el passphrase que introdujimos al generar la clave, y nos genera un fichero Release.gpg. Pues bien una vez hemos firmado todos los ficheros Release ya tenemos firmado el repositorio.

Importando la clave pública

Ahora lo único que nos falta es importar la clave pública exportada anteriormente en cada una de las máquinas que utilizan el repositorio:

apt-key add clave_publica.gpg

Si no hacemos este último paso el apt de cada máquina no reconocerá como firmados los Release

14 October 2006

Creación de un repositorio Debian automático

Archivado en: GNU/Linux, Debian

En este post voy a explicar cómo crear un repositorio para alojar nuestros propios paquetes .deb . Para ello necesitaremos tener instalado el paquete apt-utils que seguramente ya lo estará.

Preparando el repositorio

Antes que nada deberemos crear un directorio raíz donde se hallará el resto de directorios y ficheros. Por ejemplo creamos el directorio /var/repo.

Una vez creado el raíz habrá que crear dentro de el la estructura de directorios, por ejemplo para la distribución sarge creamos la siguiente estructura:


/dists
/dists/sarge
/dists/sarge/contrib
/dists/sarge/contrib/binary-i386
/dists/sarge/contrib/source
/dists/sarge/main
/dists/sarge/main/binary-i386
/dists/sarge/main/source
/dists/sarge/non-free
/dists/sarge/non-free/binary-i386
/dists/sarge/non-free/source

Donde vemos que primero se crea el directorio dists, donde luego habrá un directorio por cada distribución (en nuestro caso solo sarge). Dentro de la distribución (sarge) tendremos las diferentes secciones, main para paquetes libres, non-free para paquetes no libres, y contrib para paquetes libres que dependen de otros paquetes que no lo son.

Una vez creadas las secciones creamos un directorio para los binarios, binary-<arquitectura> en este caso como serán exclusivamente para arquitectura i386 solo necesitaremos binary-i386, y un directorio para los fuentes, source.

Llenando el repositorio

Una vez creada la estructura ya podemos alojar nuestros paquetes. Para ello tenemos que copiar los .deb correspondientes a paquetes binarios en los directorios binary-i386 de cada sección. Si además queremos distribuir los fuentes copiaremos los ficheros .dsc -diff.tar.gz .orig.tar.bz en los directorios source.

En cada directorio binary-i386 y source necesitamos un fichero Release cuyo contenido sería el siguiente:


Archive: stable
Component: main
Origin: <Tu nombre u organizacion>
Label: <Una etiqueta descriptiva>
Architecture: <Arquitectura de tu procesador o "source" para los directorios de fuentes>

Ficheros de configuración

Necesitamos dos ficheros de configuración:

  • apt-sarge-release.conf
  • apt-ftparchive.conf

Ambos ficheros los pondremos en el directorio raíz del repositorio. Y su contenido sería el siguiente:

apt-sarge-release.conf


APT::FTPArchive::Release::Origin "Tu nombre u organizacion";
APT::FTPArchive::Release::Label "Etiqueta descriptiva";
APT::FTPArchive::Release::Suite "stable";
APT::FTPArchive::Release::Codename "sarge";
APT::FTPArchive::Release::Architectures "i386 source";
APT::FTPArchive::Release::Components "main contrib non-free";
APT::FTPArchive::Release::Description "Descripcion detallada";

apt-ftparchive.conf

Dir {
  ArchiveDir \".\";
  CacheDir \".\";
};
	
Default {
  Packages::Compress \"gzip bzip2\";
  Sources::Compress \"gzip bzip2\";
  Contents::Compress \"gzip bzip2\";
};
	
BinDirectory \"dists/sarge/main/binary-i386\" {
  Packages \"dists/sarge/main/binary-i386/Packages\";
  Contents \"dists/sarge/Contents-i386\";
  SrcPackages \"dists/sarge/main/source/Sources\";
};
	
BinDirectory \"dists/sarge/contrib/binary-i386\" {
  Packages \"dists/sarge/contrib/binary-i386/Packages\";
  Contents \"dists/sarge/Contents-i386\";
  SrcPackages \"dists/sarge/contrib/source/Sources\";
};
	
BinDirectory \"dists/sarge/non-free/binary-i386\" {
  Packages \"dists/sarge/non-free/binary-i386/Packages\";
  Contents \"dists/sarge/Contents-i386\";
  SrcPackages \"dists/sarge/non-free/source/Sources\";
};
	
Tree \"dists/sarge\" {
  Sections \"main contrib non-free\";
  Architectures \"i386 source\";
};
	
Default {
  Packages {
    Extensions \".deb\";
  };
};

Una vez tenemos los ficheros de configuración adecuados a nuestras necesidades hemos de ejecutar un par de comandos, los cuales podemos meter en un script llamado por ejemplo update-archive.sh:


#!/bin/sh
apt-ftparchive generate apt-ftparchive.conf
apt-ftparchive -c apt-dapper-release.conf release dists/dapper/ >dists/dapper/Release

Actualizando el repositorio

Una vez hemos puesto los paquetes dentro de los directorios correspondientes de su sección ejecutamos el script update-archive.sh, obteniendo una salida como la siguiente:

$ ./update-archive.sh
 dists/sarge/main/binary-i386: 21 files 42.7MB 2s
 dists/sarge/contrib/binary-i386: 0 files 0B 0s
 dists/sarge/non-free/binary-i386: 4 files 114MB 5s
 dists/sarge/main/binary-i386/: 21 files 42.7MB 0s
 dists/sarge/contrib/binary-i386/: 0 files 0B 0s
 dists/sarge/non-free/binary-i386/: 4 files 114MB 0s
 dists/sarge/main/source/: 2 pkgs in 0s
 dists/sarge/contrib/source/: 0 pkgs in 0s
 dists/sarge/non-free/source/: 0 pkgs in 0s
Done Packages, Starting contents.
Done. 314MB in 50 archives. Took 7s

Usando el repositorio

Después de los pasos anteriores ya podemos utilizar el repositorio modificando el fichero /etc/apt/sources.list:

  • Para acceso local

    deb file:///var/repo sarge main contrib non-free

  • Para acceso remoto (si por ejemplo hacemos un enlace simbólico a /var/svn dentro del direcorio de un servidor http):

    deb http://nuestro.servidor/repositorio sarge main contrib non-free

Nota

Este post es prácticamente una traducción de un howto cuyo link es este

En un próximo post pondré como añadir nuestra firma al repositorio con gpg.

14 June 2006

Probando con Flock

Archivado en: Software Libre

Pues estoy probando el nuevo navegador este. Es un firefox (calcado) con algunas funcionalidades interesantes. Como esta que estoy gastando ahora mismo, posteando en el blog directamente desde el navegador (File -> New Blog post…), también se pueden subir fotos a Flickr y Photobucket, compartir los marcadores con del.icio.us, notificaciones de technorati, y un agregador de feeds. Muy chulo la verdad.

Como curiosidad, lleva como buscador por defecto Yahoo! en lugar de Google.


technorati tags:, , ,

Blogged with Flock

24 April 2006

Probando con Swing

Archivado en: Programación, Java

Pues ya que lo estoy dando en clase, me ha dado por probar un poco con swing. El resultado es un pequeño, sencillo y poco usable programa que me he hecho para gestionar libros, mediante una base de datos mysql.

En concreto usando JDBC con el driver de mysql. Tiene muchos fallos y no funciona demasiado bien, pero ahi esta.

Código fuente

Por fin tengo un portátil

Archivado en: Personal

Pues sí, me salio una oferta y no la pude dejar pasar. El cacharro en cuestión es un HP Pavilion ze4930ea (1.5Ghz, 512 RAM, 40 Gb de disco, tarjeta wireless Intel PRO Wireless 2200…).

Empecé poniendole una Ubuntu Breezy, pero la tarjeta inalámbrica me daba muchos fallos (kernel panic), despues probé una fedora core 5 y más de lo mismo. Compilando el driver a mano, con ndiswrapper y nada. Al final he puesto una Ubuntu Dapper y va a las mil maravillas.

23 November 2005

Encontrar procesos zombi

Archivado en: GNU/Linux

Cuando tenemos una máquina que no funciona correctamente es posible que los procesos estén en estado zombi. Para poder ver los procesos en este estado usamos el comando siguiente:

ps -el | grep 'Z'

Con el comando ps -el se puede obtener una salida en la que la segunda columna indica el estado del proceso. Existen varios estados:

S : sleeping
R : running
D : waiting
T : gestopt (suspended)
Z : zombie (defunct)

Un ejemplo podría ser el siguiente:

# ps -el | grep 'Z'
F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
1 Z     0  1213   589  0  75   0    -     0 funct> ?        00:00:00 dovecot-auth 

Donde vemos que el proceso dovecot-auth está en estado zombi.

21 November 2005

Creación de paquetes

Archivado en: Debian

Hoy he descubierto un programa bastante interesante para generar paquetes para las distribuciones más usadas, entre ellas como no Debian. El programa en cuestión es Checkinstall. Nos permite generarnos debs a partir del código fuente de forma tan fácil como:

./configure

make

checkinstall

Al ejecutar el checkinstall este nos pregunta acerca de la descripción que queremos poner al paquete, el tipo de paquete(RPM, DEB o SLACKWARE TGZ), así como el maintainer, version, licencia… Y después de indicárselo tendremos en el directorio nuestro programa en forma de paquete deb/rpm/tgz. Además el programa nos permite poner documentación que luego se instalará en /usr/share/doc, también podemos ejecutar scripts preinstall/postinstall y preremove/postremove y puede que más cosas que no he mirado.

27 October 2005

Crear debs de Java

Archivado en: Debian

Existe una forma cómoda, fácil y rápida de tener java (ya sea jre o jsdk) en un deb, mediante el paquete java-package de debian. Los pasos son los siguientes:

  1. Instalar java-package (apt-get install java-package)
  2. Bajar de la web de sun el jsdk por ejemplo el jdk 5.0
  3. Ejecutar make-jpkg jdk-1_5_0-linux-i586.bin (lo que nos generará el .deb)

Ahora ya podremos hacer dpkg -i sun-j2sdk1.5_1.5.0_i386.deb , lo que nos instalará el entorno en /usr/lib/j2sdk1.5-sun.

20 September 2005

Configurar Gateway

Archivado en: GNU/Linux

Lo que voy a explicar es una forma de hacer que una máquina (servidor) actúe como pasarela a internet, es decir compartir la conexión a internet entre varios equipos. Para ello nuestro servidor deberá constar de dos tarjetas de red. Una de ellas conectada a “internet” (modem) y la otra a otro equipo ya sea otro pc o un switch.

Bueno pues lo primero que necesitaremos que nuestro kernel debe soportar iptables (versiones 2.4 en adelante) así como realizar nat mediante este. Para ello tenemos que tener activados los modulos
ip_tables e iptable_nat.

Una vez nos aseguramos de ello deberemos ejecutar lo siguiente:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

Donde 192.168.0.0/24 indica que redireccionaremos a toda la subred 192.168.0.0 (con máscara 255.255.255.0) y eth0 es la interfaz de red conectada a internet.

Después debemos activar el ip forwarding de la ejecutando lo siguiente:

echo “1″ > /proc/sys/net/ipv4/ip_forward

Con esto ya tenemos a nuestra máquina haciendo funciones de pasarela. Pero en este punto si reiniciamos el ordenador se perderá la configuración y tendremos que volver a ejecutar los dos comandos anteriores. Para solucionar esto los metemos en un script, algo así como:

#! /bin/sh
echo -n “Iniciando Gateway… “
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

echo “1″ > /proc/sys/net/ipv4/ip_forward
echo “Iniciado.”

Guardamos este script como /etc/init.d/gateway, por ejemplo, le damos permisos de ejecución y creamos enlaces simbólicos a él para los runlevels que nos interesen, p. ej para el 2, como sigue:

ln -s /etc/init.d/gateway /etc/rc2.d/S99gateway

Solo resta configurar los clientes, utilizando como puerta de enlace la ip de nuestro servidor (p. ej. 192.168.0.1 en caso de que hayamos configurado esa ip en la segunda tarjeta de red de nuestro servidor) y para las DNS tenemos dos posibilidades:

  • Poner directamente las DNS de nuestro proveedor de servicios.
  • Instalar bind en nuestra máquina servidor (lo que se escapa de esta explicación).

15 September 2005

Probando subversion

Archivado en: Varios

He estado trasteando un poco (bastante poco la verdad) con el tan resonado software de control de versiones Subversion y la verdad, creía que no me serviría hasta que fuera a hacer algo serio y tal, pero es muy útil y fácil de utilizar.

Según he entendido, básicamente es un sistema de ficheros (o algo parecido) que guarda información en una base de datos acerca de todos los cambios que se realizan sobre los ficheros añadidos a los diferentes repositorios. Un repositorio (se pueden tener todos los que se quiera) no es más, a mi entender, que un contenedor de directorios y ficheros, en el que los usuarios van guardando archivos nuevos, actualizando existentes, eliminando… dando para cada una de estas acciones comentarios sobre lo que y porque lo hacen. De esta manera el sistema subversion guarda un historial de todos esos cambios referentes a cada acción, teniendo así un alto control del proyecto. Todos estos cambios se pueden extraer en un ChangeLog.

Bueno esa es la visión global que he tenido en un ratito. Dejo aquí algunos comandos para ilustrar la facilidad de este sistema:

  • Crear un repositorio:

    svnadmin create /directorio/directorio

  • Importar un proyecto ya existente en un repositorio:

    svn import /directorio/dir http://server/dir -m “Comentario”

    Los repositorios se indican con URLs (file://, http://…)

  • Añadir un fichero al proyecto:

    svn add fichero
    svn commit fichero -m “comentario”

    Con add indicamos a subversion que vamos a controlar ese fichero y con commit subimos los cambios (la primera vez pues subimos el original)

  • Actualizar nuestra copia local de trabajo:

    svn update

    Desde el directorio que queremos actualizar.

Y bueno muchas más cosas interesantes. Será cuestión de intentar darle uso durante este curso, de hecho un amigo y yo ya hemos pensado usarlo para pasar a LaTeX los apuntes de matemáticas. Todo se andará.

Salu2

12 September 2005

De vuelta

Archivado en: Personal

Bueno, ya llegó septiembre. Después de todo el verano sin apenas acercarme a los pc’s, ahora vuelta a la carga. De aquí a dos semanas empezaré segundo… este año tendre que meter caña. Y nada a ver si empiezo a poner más cosillas por aquí, supongo que proximámente pondré cosillas de java (como me toca estudiarlo este año), a ver si continúo con Qt que lo dejé bastante parado y claro ahora mismo ya casi no me acuerdo de nada. :P

Salu2 (al Maca porque no se si lo leerá alguien más)

30 June 2005

Me he pasado a Qt

Archivado en: Programación

Pues si, hace ya varias semanas que me dió por probar con qt, así esporádicamente y… me quedé.
Quizá al principio me liaba un poco, debido a que había estado probando gtkmm, pero después ya me acostumbré. Como opinión propia (la de un novato en esto de la programación), me gusta más Qt pues quizá por las razones que daba la gente y por las cuales me empujé a probarla: la documentación es muchísimo mejor (muy completa), las interfaces (repito, en mi opinión) se construyen de forma más fácil e intuitiva (sobretodo gastando Qt Designer, una maravilla), y bueno también me gustó que las señales y los slots las maneja la propia librería (en gtkmm utiliza sigc).

De momento estoy leyendo el libro “oficial” de Qt: C++ GUI Programming with Qt 3. Está bastante bien, claro que se suponen unos conocimientos de C++ tirando a avanzados. De momento lo estoy entendiendo, y me he hecho una calculadora (bastante simple y que no funciona de manera ideal).

6 June 2005

Sarge ve la luz hoy

Archivado en: Debian

Pues si, si, no es una broma. Hoy por fín, y después de 3 años sin públicarse ninguna versión estable, se publica Sarge (versión 3.1rc0). En este momento aún no se puede ver en la web oficial ningún anuncio sobre esto, pero si que se ve como se están replicando los mirrors, llenándose con las isos para las diferentes arquitecturas soportadas.

Supongo que una vez ya se han realizado las réplicas harán el anuncio oficial, y entonces ya de manera definitiva la versión estable será Sarge.

Actualización: Confirmado aquí

24 May 2005

Mundo conocido

Archivado en: Personal

Pues navegando, concretamente en la página de un desarrollador de kde, Scott Wheeler, me he encontrado con una web que entre otras cosas (yo solo he probado esta), puedes generar mapas con los paises que has visitado. Esta curioso. :P

Así mi mapa de paises visitados actualmente es así:

Claro que por lo menos me gustaría que estuviera así:

Tampoco es mucho pedir, ¿no?

Pues eso, una curiosidad.

19 May 2005

Algoritmos de Aritmética de Computadores

Archivado en: Estudios

Dejo aquí un pdf con los diagramas de los algoritmos aritméticos vistos en clase de computadores.

Nota: Borrarle la extensión .jpg Que putada esto de no poder subir más que imágenes.

18 May 2005

Paquetes en Debian (algunas utilidades)

Archivado en: Debian

Existen una serie de opciones en los comandos típicos de gestión de paquetes de Debian que son bastante útiles y/o curiosas, que quizá se desconocen (o yo por lo menos desconocía o no las había usado). Algunos de estos usos de los comandos son:

dpkg --get-selections > fichero.txt

Nos da una lista del estado de todos los paquetes de nuestro sistema. Otra forma de obtenerlo es mediante dpkg -l > fichero.txt que nos da ademas la version del paquete y la descripción. Este último se puede usar también para saber si tenemos un paquete instalado (dpkg -l <paquete>)

dpkg --audit

Nos muestra los paquetes que se han quedado a medio instalar o en los que halla fallado la configuración, y los que tengan cualquier estado de error.

aptitude hold | unhold <paquete>

Para bloquear o desbloquear la actualización de un paquete.

aptitude -f --with-recommends dist-upgrade

Se realizará una actualización completa del sistema, esto es, se instalarán las versiones más recientes de los paquetes y se resolverán todos los posibles cambios de dependencias entre los paquetes de diferentes versiones. Si fuera necesario, se instalarían paquetes nuevos (normalmente, versiones nuevas de las bibliotecas o paquetes que han cambiado de nombre), y se eliminarían los paquetes obsoletos conflictivos.

Se puede utilizar aptitude facilmente (con comandos de consola) para instalar desinstalar programas, actualizar el sistema… de la misma manera que apt-get (claro que aptitude es un front-end de este), por ejemplo “aptitude install libncurses5-dev” , “aptitude purge libncurses5-dev“. Aun más fácil es usarlo con su interfaz.

Seguro que además de estas pocas hay muchísimas que desconozco (seguro que muchos también) y que si leemos atentamente los man seguro que las encontramos.

15 May 2005

Intentándolo con Gtkmm II

Archivado en: Programación

Bueno, pues me puse con el tutorial, y empezé a probar más cosillas en el HolaMundo. Y nada, después de unas pocas (como unas 60 quizá) líneas de código más, tengo lo que ya no es un HolaMundo, sino lo que le llamo Intentando Gtkmm (voy por la version 0.3), jajaja, si me entra risa.

Pues el programita en cuestión (si esque llega a programita) consta de un par de botones, unas cuantas etiquetas, tres RadioButton, dos CheckButton, un par de HScale, y la última adición una Entry. Con estos widgets, lo que he hecho no es otra cosa que mostrar de forma muy sencilla su funcionamiento básico. Aquí pongo una captura:

Intentando Gtkmm 0.3 - Small
Hacer click para ampliar

Además de lo que es en sí la librería también estoy desarrollando mi ejercicio como si se tratase de un programa medio útil, es decir, utilizando un proyecto de Anjuta configurado con autotools/automake … y me voy haciendo make distcheck y veo el resultado de instalarlo como si se tratase de un programa real, distribuido como código fuente.

En resumen, que me está gustando bastante esto de programar con interfaz gráfica.

Dudo que alguien lea esto pero si le apetece ver de lo que hablo bajaroslo de aquí. Bajar con botón derecho y cambiar la ultima extensión (jpg) por gz.

P.D: En vez de estar estudiando, pos no, programando en gtk!! :P

12 May 2005

Intentándolo con Gtkmm

Archivado en: Programación

Ayer tarde decidí probar, ahora que tengo unas nociones un poco más amplias de C++ y de la programación en general (y orientada a objetos en particula), el uso de la librería Gtkmm. Por si alguien no sabe lo que es, es una interfaz de C++ para GTK+.

Empezando con el tutorial que se encuentra en la web oficial del proyecto, he visto de forma escueta los principios muy muy básicos. Vamos el HolaMundo.

Por ejemplo, añadiendo el include <gtkmm .h> y mediante el siguiente código creamos una ventana principal vacía y la mostramos:


Gtk::Main kit(argc, argv[]);
Gtk::Window w;
Gtk::Main::run(w);

Y bueno, el hola mundo, que simplemente consta de un botón que muestra una cadena en la consola, ya es un pelín más complicado.

Resumiendo, que por ahora me voy enterando de lo que gasto, porque y, más o menos como funciona. Lo que no entiendo muy bien, porque aún no lo he estudiado/mirado, son temas como la herencia, los miembros virtual… Pero vamos que con las nociones básicas que tengo de las clases, ya comprendo mejor todo el tema.

Asi es que seguiré en ello hasta por lo menos terminar este tutorial, espero llegar y haberlo comprendido.

Saludos

9 May 2005

Se abre el telón

Archivado en: Personal

Pues nada, que viendo que un colega había puesto un blog de estos, me he dicho: “voy a probarlo” y nada… Dudo que alguien aparte de mi lea esto pero bueno. Si acaso Saludos

:-)

Get free blog up and running in minutes with Blogsome | Theme designs available here