Página 1 de 1

Crear .deb partiendo de codigo C++ en Wheezy

Publicado: Lun, 21 Jul 2014, 15:29
por pyChi
Hola,
Quiero generar un .deb partiendo de un programa desarrollado en C++ con Debian Wheezy, para distribuirlo y que la instalacion sea mas comoda para el usuario final.

Alguna receta??

Re: Crear .deb partiendo de codigo C++ en Wheezy

Publicado: Lun, 21 Jul 2014, 19:52
por hugo
Crear paquetes para Debian es un poco trabajoso, te recomiendo que comiences por la página Wiki del proyecto destinada a documentar el proceso (lamentablemente requerirás acceso a Internet).

Re: Crear .deb partiendo de codigo C++ en Wheezy

Publicado: Mar, 22 Jul 2014, 18:22
por stanley
Crear un paquete debian es relativamente fácil, solo hay que seguir unos pasos logicos, y poner cada fichero en su lugar.

Primero como experimento copia un fichero .deb en una carpeta vacía y descomprimirlo de la siguiente manera:

Código: Seleccionar todo

cd /direccion/carpeta/deb
dpkg-deb -e ./fichero.deb		# Extraer los ficheros de configuracion.
dpkg-deb -x ./fichero.deb		# Descomprimir los ficheros a instalar.
Ahora que ya tenemos nuestros ficheros descomprimidos cortaremos el fichero control y los otros que se extrajeron con la opción dpkg-deb -e a un carpeta que nombraremos DEBIAN (ojo que debe ser en mayúsculas tal y como aquí se muestra), Por lo que la carpeta DEBIAN deberá estar en la misma carpeta donde este usr etc entre otros ejemplo:

./DEBIAN
./usr
./etc
./usr/share

Si no entienden, la idea es que los ficheros ya tengan la estructura de niveles carpetas donde se van a copiar.

Luego nos tendremos que asegurar que las carpetas pertenescan al usuario root

Código: Seleccionar todo

# chown root:root --recursive /direccion/carpeta/deb
Entonces procedemos a crear nuestro fichero .deb de la siguiente forma:

Código: Seleccionar todo

# dpkg-deb --build /direccion/carpeta/deb

Después de realizar esto notaras que el fichero control es el que le dice al sistema que paquete y que version de este es cuales son sus dependencias a instalar entre otros. Supón que tienes un determinado programa escrito en C el compilaras y crearas su binario compatible con linux, deberás conocer sus dependencias ubicarlo en un en una carpeta donde se encuentren los ejecutables de linux ejemplo:

./usr/local/bin

En cierta manera puede ser complicado, mientras mas dependencias requiera y librerías propias que necesites compilar. En mi opinion, si es un programa tuyo de alguien escrito en ese lenguaje de programación solo compilalo y tenlo en una carpeta aparte de tus documentos.

Re: Crear .deb partiendo de codigo C++ en Wheezy

Publicado: Jue, 24 Jul 2014, 08:03
por pyChi
Primero, Gracias por las respuestas.

Los programas los escribo en C++ y FLTK para la GUI, por lo que las dependencias son pocas.

Al compilar directamente sobre Linux, me genera un binario que funciona perfecto.

Bueno, continuare viendo la cuestion de empaquetar un . deb a partir de C++.
Falta que nos hace la Internet. :(

Re: Crear .deb partiendo de codigo C++ en Wheezy

Publicado: Jue, 24 Jul 2014, 11:44
por stanley
Tal vez mi explicación anterior te resultara un poco confusa, pues le faltaban ciertos detalles que con la practica uno no le presta atención, fijate a ver si el de esta pagina web te sirve:

http://www.ubuntu-es.org/node/145497

Cómo crear un paquete deb para nuestra aplicación

1.- Queremos hacer un paquete deb para instalar nuestra aplicación y la instalaremos en la carpeta /usr

1.1- En /usr hay dos carpetas que necesitaremos, /usr/bin y /usr/share, en la primera colocaremos nuestro ejecutable directamente y en la segunda, en varias de sus subcarpetas, llamadas /usr/share/applications, /usr/share/doc y /usr/share/menu, colocaremos una serie de archivos de nuestro programa. Aparte crearemos una carpeta en /usr/share llamada como nuestra aplicación,
/usr/share/gursync, la cual, en nuestro caso, sólo contendrá otra carpeta con los iconos del programa. Vayamos a una explicación somera de todas estas carpetas:

1.1.1- En /usr/share/applications se guardan las entradas de cada aplicación gnome, en archivos de texto y con el siguiente formato en el nombre del archivo: nombrePrograma.desktop. El contenido es similar a éste:

[Desktop Entry]
Version=0.1
Name=gursync
GenericName=Gursync
Comment=Sincronizador de carpetas
Exec=gursync
Terminal=false
Type=Application
Categories=GNOME;GTK;Utility;
Icon=briefcase.png
StartupNotify=true
OnlyShowIn=GNOME;

1.1.2- En /usr/share/doc/ hay subcarpetas con el nombre de cada programa y en el interior de cada una de ellas se guardan archivos con información de ese programa. Archivos tales como: AUTHORS, COPYNG, README y otros

1.1.3- En /usr/share/menu/ se guardan las entradas del menú de gnome, cada entrada está en un archivo de texto el cual tiene el mismo nombre que la aplicación. El contenido es similar a éste:

?package(gursync):needs="X11" section="Applications/utils"\
title="Gursync" command="/usr/share/gursync/bin/gursync"\
description="Programa para sincronizar carpetas"
icon="/usr/share/gursyc/icons/briefcase.png"

1.1.4- En la carpeta creada por nosotros en /usr/share/ con el mismo nombre que nuestra aplicación, crearemos otra subcarpeta llamada iconos y que contendrá eso, los iconos del programa: /usr/share/nombre_programa/iconos

2. Llegados a este punto, y para crear nuestro paquete deb, debemos de simular todas éstas carpetas en nuestro directorio personal, esto es, crear una carpeta llamada usr con su misma estructura. Así que creamos una carpeta para el empaquetamiento llamada por ejemplo deb y en ella creamos usr y todas las carpetas mencionadas anteriormente, pero además debemos de crear junto a la carpeta usr otra carpeta llamada DEBIAN, así, en mayúsculas. En ésta carpeta crearemos tres archivos que sólo se utilizarán para la instalación/desinstalación del programa en un sistema linux. Estos archivos son: control, postinst y postrm.

El contenido de los mismos es similar a estos:

Archivo control:
Package: gursync
Priority: optional
Section: utils
Maintainer: ubaloie@gmail.com
Architecture: i386
Version: 0.1
Depends: gtk2
Provides: gursync
Conflicts:
Replaces:
Description: Programa para sincronizar carpetas

Archivo postinst:
#!/bin/sh
set -e
if [ "$1" = "configure" ] && [ -x /usr/bin/update-menus ]; then update-menus ; fi

Archivo postrm:
#!/bin/sh
set -e
if [ "$1" = "configure" ] && [ -x /usr/bin/update-menus ]; then update-menus ; fi

El primer archivo especifica las características del paquete y los otros dos son para actualizar el menú de gnome al instalar/desinstalar la aplicación.

3.- Una vez creado un espejo de la carpeta /usr y creado también la carpeta DEBIAN en la carpeta de empaquetamiento llamada deb, sólo nos queda poner en su ruta los siguientes archivos: En la carpeta applications instalamos el archivo nombre_programa.desktop, con el contenido explicado más arriba. En la carpeta doc se crea una nueva carpeta con el nombre del programa y se incluye en ella los archivos de documentación del mismo, como README y demás. En la carpeta menú se crea un archivo de texto con el contenido explicado anteriormente. Y en la carpeta con el nombre del programa que cuelga de usr/share se crea otra carpeta llamada icons con los archivos de imagen del programa: /usr/share/nombre_programa/icons. En esta carpeta del programa podemos crear más carpetas como html y demás.

La carpeta deb quedaría así, los verdes son carpetas y los amarillos archivos y donde gursync sería el nombre de nuestra aplicación:

deb:
deb/DEBIAN:
control postinst postrm
deb/usr:
deb/usr/bin:
gursync
deb/usr/share:
deb/usr/share/applications:
gursync.desktop
deb/usr/share/doc:
deb/usr/share/doc/gursync:
AUTHORS COPYING README
deb/usr/share/gursync:
deb/usr/share/gursync/iconos:
briefcase.png database_go.png database_refresh.png
database_save.png door_out.png house.png
deb/usr/share/menu:
gursync

4.- Ahora llegamos al punto final, nos situamos por encima de la carpeta deb y cambiamos el propietario de la carpeta:

sudo chown -R root.root ./deb

Y creamos el paquete con formato deb en nuestro directorio personal:

dpkg -b ./deb /home/ubaloie/gursync.deb

Nota: Manualmente, para crear el programa e instalarlo, se utilizan los comandos: make y make install y para probar la instalación se puede cambiar el DESTDIR en el archivo Makefile para que apunte a /home/ubaloie/deb y el cual ha de tener la estructura de /usr/ con las carpetas bin y share que cuelguen de él, aparte de otras que necesitemos y en las cuales vayamos a instalar cosas de nuestro programa, y así sabríamos si todo funciona como es debido.





Y por ultimo y mas complejo si no lees antes el primero esta la guia de como crear un paquete debian a partir del codigo fuente tomado de:
http://www.ubuntu-es.org/node/11143


Introducción

Una situación bastante común que se encuentran muchos usuarios es necesitar un programa que no esta empaquetado para su distribución favorita. Por suerte para todos, teniendo disponible el código fuente cualquiera puede compilar por si mismo los programas, aunque esto genera varios inconvenientes. Es fácil hacer un "make install" pero no todos los programas soportan "make uninstall", de modo que eliminar el paquete cuando deje de ser necesario o directamente estorbe puede ser bastante complicado.

La solución mas cómoda y eficaz en estos casos es crear paquetes deb a partir del código fuente, y utilizar la administración de paquetes para instalarlos/actualizarlos/eliminarlos cuando sea necesario. Esto suena bonito pero casi siempre parece mas complicado de lo que es, sobretodo cuando se es novato. Ahí es donde entra en juego esta pagina. Voy a explicar de forma más o menos simple, el proceso para crear paquetes de forma sencilla. Este proceso no se puede seguir al pie de la letra, tiene que ser adaptado para cada paquete en particular, pero sirve como plantilla general para la mayoría de programas, especialmente aquellos que se podrían compilar siguiendo el clásico proceso "./configure && make && make install".
Programas necesarios

1. Herramientas

Para crear nuestros paquetes, vamos a utilizar unos cuantos "ayudantes" que nos hagan el trabajo sucio, así que necesitaremos los siguientes paquetes:

* dh-make
* devscripts
* fakeroot
* build-essential

2. Debianizando

Lo primero que necesitamos es un directorio de trabajo. En este directorio acabaremos teniendo varias cosas así que es recomendable que sea un directorio vacío. Si vamos a preparar varios paquetes yo recomendaría usar un directorio para cada uno.

Una vez dentro del directorio de trabajo, descomprimimos las fuentes del programa a empaquetar, así nos quedara (casi siempre) un subdirectorio con el nombre del programa. Tenemos que comprobar que el nombre sea del tipo "nombre-versión", por ejemplo "agenda-0.0.1". Si el nombre no corresponde lo modificaremos para que no de problemas y entraremos en ese subdirectorio.

Ahora pasamos a lo importante, vamos a "debianizar" el árbol de fuentes ejecutando "dh_make -e email@proveedor". Nos preguntara que tipo de paquete queremos crear, generalmente sera "s" para programas o "l" para librerías (hay mas opciones pero esto es una guia básica, consulta los manuales para mas detalles). Se pueden añadir las opciones "-s" o "-l" detrás del email para responder directamente a esta pregunta.

Con esto, a menos que falle algo, tenemos hecha la debianización básica a falta de algunos detalles y personalizaciones y ya seria posible empaquetar el programa.

Es importante tener en cuenta que en el directorio "exterior" a las fuentes (el que esta justo por encima) se van a crear varias cosas durante el proceso que se usaran en la creación del paquete, ¡no las eliminéis!

3. Configurando

Ahora toca configurar el paquete. La configuración se hace editando varios archivos que se crearon al debianizar las fuentes. Todos esos archivos están dentro del directorio "debian".

Empezaremos por modificar la información del paquete, que se encuentra en el archivo "debian/control". Como podéis ver tiene varias partes con un formato predefinido (¡cuidado de no alterarlo!). Concretamente modificaremos las lineas "Section:" para definir la sección a la que pertenece el paquete (por ejemplo "main/x11" o "universe/web"), "Package:" si necesitamos cambiarle el nombre al paquete por algún motivo y por ultimo "Description:". La parte "Description:" tiene un formato un poco distinto, en la misma linea se puede poner una descripción corta (60 caracteres si no recuerdo mal) y debe empezar con minúsculas después de los dos puntos, la segunda parte va a continuación en una nueva linea. Esta linea y las siguientes que forman parte de la descripción deben empezar con un espacio en blanco y si queremos dejar una linea en blanco debemos poner un solo punto después del espacio obligatorio.

El siguiente archivo que modificaremos es uno de los mas importantes, porque define la forma en que se compilara y empaquetara nuestro programa. Es el archivo "debian/rules" y tiene formato de makefile. No entraremos en muchos detalles (consultar el manual para más información), pero si en lo mas practico. En la línea que comienza CFLAGS="$(CFLAGS)" ./configure .... podemos añadir todas las opciones que normalmente añadiríamos al ./configure de un programa, opciones de compilación, optimizaciones, etcetera.

Para terminar con la configuración básica nos falta modificar el archivo "debian/changelog". Podemos hacerlo a mano pero es mejor hacerlo con un programa ayudante llamado "dch" (incluido en devscripts). Es recomendable hacerlo así porque con solo ejecutarlo estando en el directorio de fuentes (no un subdirectorio) nos abrirá el changelog para modificar y nos creara una linea nueva, pero mas aun, si lo ejecutamos con el parámetro "-i" nos incrementa el numero de versión del paquete, crea una entrada nueva en el changelog y nos permite editarla. Una de las utilidades de este archivo es controlar que cambios hay de una versión a otra, pero también la propia versión del paquete. Por ejemplo, al debianizar amule-2.0.3 en el changelog nos pondrá la versión "2.0.3-1" indicando que es la primera versión del paquete, al hacer "dhc -i" pasaría a ser la "2.0.3-2". Más aun, si queremos identificar el paquete aun mejor podemos introducir algo entre el guión y el numero, por ejemplo el nombre de la distribución a la que se dirige ("2.0.3-breezy1"). Justo detrás de la versión nos encontramos con la distribución, donde podemos poner a que distribución pertenece, por ejemplo "stable", "unstable", "unreleased", ... y para finalizar la prioridad. Esta prioridad indica la importancia de las diferencias entre este paquete y la versión anterior. Así por ejemplo si el nuevo paquete solo añade alguna funcionalidad poco importante puede ser "low" (baja) mientras que si arregla algún fallo importante puede ser "high" (alta).

4. Compilando y empaquetando

Estamos terminando chicos, solo nos falta empaquetar. Para ello nos colocamos en el directorio de fuentes y ejecutamos "dpkg-buildpackage -rfakeroot" y nos sentamos a esperar con los dedos cruzados para que no falle nada. Si todo va bien debería quedarnos fuera del directorio de fuentes un lindo paquete deb listo para usar.

También nos habrán quedado varios archivos auxiliares pero la utilidad de esos archivos es otra historia ;)

5. Agradecer a Gatoloko el curre con éste COMO, ya que él es el autor de esta ayuda que yo me he limitado a recopilar para que esté accesible para toda la comunidad de Ubuntu-es.org