<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://doc.ubuntu-es.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://doc.ubuntu-es.org/api.php?action=feedcontributions&amp;user=Festor&amp;feedformat=atom</id>
		<title>doc.ubuntu-es - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="http://doc.ubuntu-es.org/api.php?action=feedcontributions&amp;user=Festor&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Especial:Contribuciones/Festor"/>
		<updated>2013-05-20T13:57:23Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.18.0</generator>

	<entry>
		<id>http://doc.ubuntu-es.org/Wine</id>
		<title>Wine</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Wine"/>
				<updated>2010-01-11T09:07:20Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Nuevas versiones de Wine (no recomendado) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{software&lt;br /&gt;
| nombre = wine&lt;br /&gt;
| versión_estable = [http://winehq.org/announce/1.0.1 1.0.1]&lt;br /&gt;
| fecha_versión_estable = 17 de octubre de 2008&lt;br /&gt;
| versión_inestable = [http://winehq.org/announce/1.1.12 1.1.12]&lt;br /&gt;
| fecha_versión_inestable = 2 de enero de 2009&lt;br /&gt;
| género = [[:Categoría:Compatibilidad con otros S.O.|Implementación de API]]&lt;br /&gt;
| licencia = [[w:software libre|libre]] ([[w:GNU Lesser General Public License|LGPL]])&lt;br /&gt;
| español = Sí&lt;br /&gt;
| web = [http://www.winehq.org/ www.winehq.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Wine''' es una implementación de la [[w:Application Programming Interface|API]] de [[w:Microsoft Windows|Windows]] que te permite ejecutar muchos programas de este [[w:sistema operativo|sistema operativo]] en [[w:Linux|GNU/Linux]]. Si dispones de la última versión de Wine puedes recibir ayuda en el canal de [[IRC]] [irc://irc.freenode.net/#winehq #winehq].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: right; float: right; display: table;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Etimología ==&lt;br /&gt;
&lt;br /&gt;
El término «wine» es un acrónimo recursivo en [[w:idioma inglés|inglés]] que significa '''''W'''ine '''I'''s '''N'''ot an '''E'''mulator'', ''Wine no es un Emulador''. «Wine» también significa «vino» en [[w:idioma inglés|inglés]].&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
En los repositorios &amp;lt;code&amp;gt;universe&amp;lt;/code&amp;gt; tienes disponible una versión moderadamente reciente de Wine. Siempre es recomendable instalar software solo de los canales oficiales, pero también tienes la opción de instalar la última versión del repositorio no oficial de WineHQ.&lt;br /&gt;
&lt;br /&gt;
=== Versiones Ubuntu de Wine (recomendado) ===&lt;br /&gt;
&lt;br /&gt;
'''1.''' [[repositorios|Añade el repositorio]] ''universe''.&lt;br /&gt;
&lt;br /&gt;
'''2.''' Actualiza la lista de paquetes:&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
'''3.''' [[instalar aplicaciones|Instala]] el paquete &amp;lt;code&amp;gt;wine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nota: Si estás buscando paquetes de Wine para '''AMD64''', ve a esta página [[Wine AMD64]].&lt;br /&gt;
&lt;br /&gt;
=== Nuevas versiones de Wine (no recomendado) ===&lt;br /&gt;
&lt;br /&gt;
[http://www.winehq.org/ WineHQ] proporciona las últimas versiones empaquetadas de Wine par Ubuntu. Al ser versiones más nuevas pueden ser algo inestables. Para usarlas necesitas añadir el repositorio de WineHQ y entonces instalar Wine con Synaptic. Para ayuda añadiendo repositorios, consulta la página de [[Repositorios]].&lt;br /&gt;
&lt;br /&gt;
: Añade el repositorio correspondiente:&lt;br /&gt;
* Para '''Ubuntu 8.04 «Hardy Heron»''':&lt;br /&gt;
&lt;br /&gt;
: Añade al clave del repositorio escribiendo lo siguiente en la [[terminal]]:&lt;br /&gt;
 wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -&lt;br /&gt;
: Actualiza la caché de paquetes haciendo clic en 'Recargar' en Synaptic o con el siguiente comando:&lt;br /&gt;
 sudo aptitude update&lt;br /&gt;
: [[instalar aplicaciones|Instala]] el paquete &amp;lt;code&amp;gt;wine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nota: Si deseas un repositorio de fuentes, simplemente añade lo mismo pero reemplazando &amp;lt;code&amp;gt;deb&amp;lt;/code&amp;gt; por &amp;lt;code&amp;gt;deb-src&amp;lt;/code&amp;gt; o sigue las instrucciones de la [http://winehq.org/site/download-deb web oficial].&lt;br /&gt;
&lt;br /&gt;
== Funcionamiento ==&lt;br /&gt;
&lt;br /&gt;
=== Instalar aplicaciones de Windows ===&lt;br /&gt;
&lt;br /&gt;
Para instalar aplicaciones de Windows usando Wine, sigue las siguientes instrucciones:&lt;br /&gt;
&lt;br /&gt;
# Descarga la aplicación de Windows de alguna fuente (por ejemplo. download.com).  Descarga el .EXE (ejecutable).&lt;br /&gt;
# Ponlo en un directorio conveniente (por ejemplo en el escritorio o en la home).&lt;br /&gt;
# Abre la terminal y entra en el directorio donde esté localizado el archivo EXE: &amp;lt;code&amp;gt;cd /ruta/del/directorio&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Escribe  &amp;lt;code&amp;gt;wine ''el-nombre-de-la-aplicacion.extension''&amp;lt;/code&amp;gt; (p.e. &amp;lt;code&amp;gt;wine realplayer.exe&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Esto iniciará el .EXE usando Wine. Si es un instalador, deberá ejecutarse como si lo hiciera en Windows. Si la aplicación te pregunta por un directorio donde instalar la aplicación, selecciona un lugar que esté bajo C:\Program Files. El disco duro virtual C: se crea bajo ./wine después de que un usuario ejecute ''wine'' en la terminal por primera vez. El directorio .wine está oculto por defecto. Para verlo, ve a tu directorio de usuario en home y presiona CTRL-H, o ve a Ver &amp;gt; Mostrar ficheros ocultos.&lt;br /&gt;
&lt;br /&gt;
=== Ejecutar un programa de Windows ===&lt;br /&gt;
&lt;br /&gt;
Después de instalar una aplicación utilizando las indicaciones anteriores, estas aplicaciones pueden ser iniciadas y utilizadas introduciendo en una [[terminal]]&lt;br /&gt;
 wine nombreprograma.exe &lt;br /&gt;
(por ejemplo: &amp;lt;code&amp;gt;''wine realplayer.exe''&amp;lt;/code&amp;gt;).&lt;br /&gt;
Cuando lo hagas, cierra la aplicación como lo harías normalmente. Debes correr el ejecutable instalado, el cual por defecto estará en el disco virtual de Windows creado por Wine, en ''~/.wine/drive_c''.&lt;br /&gt;
&lt;br /&gt;
Generalmente los programas se instalaran en algún lugar bajo ''Program Files'' dentro del disco virtual de Windows, siguiendo las convenciones de Windows.&lt;br /&gt;
&lt;br /&gt;
Si quieres inicializar un CD/DVD hay que acceder a la unidad lectora y desde allí buscar el ejecutable de arranque e iniciarlo con los pasos mencionados en el párrafo anterior.&lt;br /&gt;
&lt;br /&gt;
Puedes también utilizar el navegador de archivos de Wine, ejecutando en una terminal:&lt;br /&gt;
 winefile&lt;br /&gt;
&lt;br /&gt;
Haciendo clic en el botón '''C:\''' en la barra de herramientas abrirás una ventana donde podrás examinar el disco virtual de Windows creado en .wine. Haciendo doble click en un ejecutable en el navegador de archivos de Wine, lo ejecutarás con wine.&lt;br /&gt;
&lt;br /&gt;
=== Crear un lanzador a una aplicación ===&lt;br /&gt;
&lt;br /&gt;
En vez de tener que estar siempre entrando en la terminal para usar el navegador de archivos de wine, puedes también crear un, por ejemplo, icono de escritorio, e iniciar aplicaciones de Wine usando ese icono. &lt;br /&gt;
Para hacerlo, haz click con el botón derecho en el escritorio y selecciona '''Crear un acceso directo'''. Si lo deseas, selecciona un icono de la lista de iconos disponibles, o navega hasta un icono que quieras utilizar, pon el resto de información que se te pide (Nombre, nombre genérico, etc.). Para el comando, escribe &amp;lt;code&amp;gt;Wine localización_del_programa.exe&amp;lt;/code&amp;gt; (por ej. wine /home/john/.wine/realplayer.exe). &lt;br /&gt;
La parte más importante de crear un acceso directo es el comando, y la otra información no es necesarias (p. e. Nombre genérico).  Asegúrate de ‘’’no’’’ tener seleccionado &amp;quot;ejecutar en una terminal.&amp;quot;  Esto completa el proceso.&lt;br /&gt;
&lt;br /&gt;
Si deseas tener un icono en el panel, crea un lanzador en el panel de tu elección. Hazlo haciendo clic con el botón derecho en el panel, seleccionando &amp;quot;Añadir a Panel,&amp;quot; y selecciona, &amp;quot;Lanzador personalizado.&amp;quot;  Te preguntará por la misma información que en un acceso directo.&lt;br /&gt;
&lt;br /&gt;
=== Desinstalar aplicaciones de Windows ===&lt;br /&gt;
&lt;br /&gt;
Abre una terminal y escribe:&lt;br /&gt;
 uninstaller&lt;br /&gt;
Esto abrirá un programa similar al panel de control &amp;quot;añadir/quitar programas&amp;quot; de Windows, permitiéndote desinstalar aplicaciones de la instalación de Wine. Ejecutar los programas de desinstalación directamente via Wine debe también funcionar normalmente. También puedes directamente eliminar el directorio de la aplicación. Sin embargo, como en Windows, este método será “poco limpio” y no eliminará la configuración del programa del registro de Wine como lo haría el desinstalador.&lt;br /&gt;
&lt;br /&gt;
== Configuración ==&lt;br /&gt;
&lt;br /&gt;
En la línea de comandos escribe &amp;lt;code&amp;gt;winecfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Añadir discos CD y DVD ===&lt;br /&gt;
&lt;br /&gt;
Ve a la pestaña '''drives''' en winecfg. Dale al botón Autodetectar.&lt;br /&gt;
Si encuentras que esto no funciona correctamente, entonces sigue las siguientes instrucciones:&lt;br /&gt;
&lt;br /&gt;
# Ejecuta &amp;lt;code&amp;gt;winecfg&amp;lt;/code&amp;gt;&lt;br /&gt;
# Navega a la pestaña '''drives'''&lt;br /&gt;
# Haz Click en '''Añadir...'''&lt;br /&gt;
#  En la barra de ruta, escribe &amp;lt;code&amp;gt;/media/cdrom&amp;lt;/code&amp;gt;&lt;br /&gt;
# Haz Click en el botón '''Mostrar Avanzadas''' bajo el botón '''Examinar...''' y pon en '''Tipo''' &amp;lt;code&amp;gt;CD-ROM&amp;lt;/code&amp;gt;&lt;br /&gt;
#  Haz click en ''OK''&lt;br /&gt;
&lt;br /&gt;
Si tienes más de un dispositivo CD/DVD necesitarás identificar cada uno de manera diferente. Utiliza &amp;lt;code&amp;gt;/media/cdrom0&amp;lt;/code&amp;gt; para el primer dispositivo de CD/DVD, &amp;lt;code&amp;gt;/media/cdrom1&amp;lt;/code&amp;gt; para el segundo, y así sucesivamente. Si tienes alguna duda, escribe  &amp;lt;code&amp;gt;ls -la ~/.wine/dosdevices/&amp;lt;/code&amp;gt; en una terminal para comprobar los detalles de tus dispositivos de CD/DVD después de la instalación de Wine.&lt;br /&gt;
&lt;br /&gt;
=== Añadir aplicaciones al menú ===&lt;br /&gt;
&lt;br /&gt;
Es un buen procedimiento antes de configurar la entrada del menú es lanzar el programa de Windows desde la línea de comandos para asegurarse que el programa funciona correctamente. Para hacerlo escribe &amp;lt;code&amp;gt;wine &amp;quot;C:\RUTA DELPROGRAMA\Program.exe&amp;quot;&amp;lt;/code&amp;gt; en la línea de comandos. (por ejemplo: &amp;lt;code&amp;gt;wine &amp;quot;C:\Program Files\World of Warcraft\WoW.exe&amp;quot;&amp;lt;/code&amp;gt;. Una vez hayas comprobado que todo está correcto, usa el proceso normal de edición menu para añadir una nueva entrada. Asegúrate de copiar en el campo de Comando exactamente la línea utilizada para iniciar el programa desde la terminal. Finaliza y guarda la nueva entrada. Pruebalo para asegurarte de que el programa se carga desde el menú.&lt;br /&gt;
&lt;br /&gt;
=== Cambiar la configuración específica de la aplicación ===&lt;br /&gt;
&lt;br /&gt;
# Escribe &amp;lt;code&amp;gt;winecfg&amp;lt;/code&amp;gt; en la línea de comandos.&lt;br /&gt;
# Haz clic en &amp;lt;code&amp;gt;Añadir Aplicaciones...&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Navega hasta donde esté el exe y escoge el programa.&lt;br /&gt;
# El menú  desplegable de la parte inferior te permite escoger qué versión de Windows debe emular Wine. También, cualquier cambio en las pestañas de Librerías  y Gráficos afectarán solo a la aplicación escogida en la pestaña Aplicaciones.&lt;br /&gt;
&lt;br /&gt;
=== Temas visuales de Windows ===&lt;br /&gt;
&lt;br /&gt;
==== Esquema de color ====&lt;br /&gt;
&lt;br /&gt;
Puedes cambiar el esquema de color de wine para que se parezca un poco más a los colores por defecto de Ubuntu&lt;br /&gt;
&lt;br /&gt;
 gedit ~/.wine/user.reg&lt;br /&gt;
&lt;br /&gt;
Sustituye la sección de [Control Panel\\Colors] por&lt;br /&gt;
&lt;br /&gt;
 [Control Panel\\Colors] 1176981676&lt;br /&gt;
 &amp;quot;ActiveBorder&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;ActiveTitle&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;AppWorkSpace&amp;quot;=&amp;quot;198 198 191&amp;quot;&lt;br /&gt;
 &amp;quot;Background&amp;quot;=&amp;quot;93 77 52&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonAlternativeFace&amp;quot;=&amp;quot;200 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonDkShadow&amp;quot;=&amp;quot;85 85 82&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonFace&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonHilight&amp;quot;=&amp;quot;255 255 255&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonLight&amp;quot;=&amp;quot;255 255 255&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonShadow&amp;quot;=&amp;quot;198 198 191&amp;quot;&lt;br /&gt;
 &amp;quot;ButtonText&amp;quot;=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;GradientActiveTitle&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;GradientInactiveTitle&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;GrayText&amp;quot;=&amp;quot;198 198 191&amp;quot;&lt;br /&gt;
 &amp;quot;Hilight&amp;quot;=&amp;quot;246 200 129&amp;quot;&lt;br /&gt;
 &amp;quot;HilightText&amp;quot;=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;InactiveBorder&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;InactiveTitle&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;InactiveTitleText&amp;quot;=&amp;quot;255 255 255&amp;quot;&lt;br /&gt;
 &amp;quot;InfoText&amp;quot;=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;InfoWindow&amp;quot;=&amp;quot;255 255 166&amp;quot;&lt;br /&gt;
 &amp;quot;Menu&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;MenuBar&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;MenuHilight&amp;quot;=&amp;quot;246 200 129&amp;quot;&lt;br /&gt;
 &amp;quot;MenuText&amp;quot;=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;Scrollbar&amp;quot;=&amp;quot;239 235 231&amp;quot;&lt;br /&gt;
 &amp;quot;TitleText&amp;quot;=&amp;quot;255 255 255&amp;quot;&lt;br /&gt;
 &amp;quot;Window&amp;quot;=&amp;quot;255 255 255&amp;quot;&lt;br /&gt;
 &amp;quot;WindowFrame&amp;quot;=&amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 &amp;quot;WindowText&amp;quot;=&amp;quot;0 0 0&amp;quot;}}}&lt;br /&gt;
&lt;br /&gt;
==== Temas visuales ====&lt;br /&gt;
&lt;br /&gt;
Wine tiene un gestor básico para ficheros de tema/skin de Windows en el formato &amp;quot;msstyles&amp;quot;. Hay un gran número de estos temas en [http://www.deviantart.com/ Deviant Art]. Para usarlos debes crear un directorio en el disco virtual de Windows, y entonces decirle a wine que use ese tema.&lt;br /&gt;
&lt;br /&gt;
Primeramente ve al disco virtual de Wine, que se encuentra normalmente en tu directorio &amp;lt;code&amp;gt;~/.wine/drive_c&amp;lt;/code&amp;gt; (está oculto, así que necesitarás seleccionar Ver-&amp;gt;Mostrar archivos ocultos en el navegador de archivos). Dentro de este directorio ve al directorio &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; y crea un nuevo subdirectorio con el nombre &amp;lt;code&amp;gt;Resources&amp;lt;/code&amp;gt;. Entra en él y crea otro nuevo, llamado &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt;. Dentro de este puedes crear directorios para cada tema que quieras, y meter dentro directamente ficheros acabados en extensión &amp;quot;.msstyles&amp;quot;. Por ejemplo, la ruta completa a un fichero de tema llamado «ejemplo» será &amp;lt;code&amp;gt;/home/usuario/.wine/drive_c/windows/Resources/Themes/Ejemplo/sample.msstyles&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación debes decirle a Wine que use tu tema, así que ejecuta &amp;lt;code&amp;gt;winecfg&amp;lt;/code&amp;gt;. En la ventana de configuración selecciona la pestaña «Desktop Integration» y marca la cajetilla de «Theme», que debe tener ahora tu tema en este menú. Después de seleccionar el tema, haz clic en «Aplicar» en la parte inferior para ver como queda (no siempre se muestra apropiadamente), entonces, si te gusta, haz clic en «OK» y tendrás tu nuevo tema.&lt;br /&gt;
&lt;br /&gt;
== Registrar archivos OCX o DLL ==&lt;br /&gt;
&lt;br /&gt;
Para registrar archivos OCX o DLL primero necesitamos el archivo ya sea extraido de una pagina que te de archivos dll o copiarlos desde una partición windows.&lt;br /&gt;
&lt;br /&gt;
1. Copia el archivo en cuestion al directorio &amp;lt;code&amp;gt;.wine/drive_c/windows/system32&amp;lt;/code&amp;gt;, el cual está oculto en &amp;lt;code&amp;gt;/home&amp;lt;/code&amp;gt;. Para verlo en [[Nautilus]] presiona &amp;lt;code&amp;gt;Ctrl+H&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. Abre una terminal y teclea lo siguiente:&lt;br /&gt;
 wine regsvr32.exe archivo.ocx&lt;br /&gt;
&lt;br /&gt;
Si el archivo no tiene dependencias te dirá que a quedado registrado en caso contrario te avisará qué dependencias tiene para que las copies al directorio.&lt;br /&gt;
&lt;br /&gt;
== Ejecutar paquetes MSI ==&lt;br /&gt;
&lt;br /&gt;
Esto es muy sencillo, con una [[terminal]] abierta en el directorio donde se encuentra el paquete .msi, escribimos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 msiexec /i paquete.msi&lt;br /&gt;
&lt;br /&gt;
== Crear asociaciones de ficheros ==&lt;br /&gt;
&lt;br /&gt;
Si quieres que ciertos ficheros se abran con una aplicación de windows cuando hagas clic en ellos, la mejor manera es crear un script. Por ejemplo, si quieres que los ficheros (''*.fla'') de un proyecto de Adobe Flash se abran con el editor de Flash de Adobe haciendo doble clic en él.&lt;br /&gt;
&lt;br /&gt;
Puedes por ejemplo crear un fichero &amp;lt;code&amp;gt;gedit ~/.wine/Flash\ 8&amp;lt;/code&amp;gt;. Ahora pega el script de ejemplo en el, guárdala y cierra gedit.&lt;br /&gt;
&lt;br /&gt;
Script de ejemplo:&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 QUICKPARLOCATION='c:\\Program Files\\Macromedia\\Flash 8\\Flash.exe'&lt;br /&gt;
 PARAM=$(winepath -w &amp;quot;$*&amp;quot;)&lt;br /&gt;
 wine &amp;quot;$QUICKPARLOCATION&amp;quot; &amp;quot;$PARAM&amp;quot;&lt;br /&gt;
 exit 0&lt;br /&gt;
&lt;br /&gt;
Asegúrate de que este fichero es ejecutable &amp;lt;code&amp;gt;chmod +x ~/.wine/Flash\ 8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Después de completar esto, ve a un fichero ''*.fla'' y haz clic con el botón derecho, propiedades, ve a «abrir con», haz clic en añadir, pega &amp;lt;code&amp;gt;'/home/&amp;lt;tunombredeusuario&amp;gt;/.wine/Flash 8'&amp;lt;/code&amp;gt; en la línea de comando y selecciona el «radio bullet». Ahora si todo ha ido bien, puedes hacer doble clic en el fichero y este se abrirá  en Flash 8.&lt;br /&gt;
&lt;br /&gt;
== Resolución de problemas comunes ==&lt;br /&gt;
&lt;br /&gt;
=== Problemas con la superposición del panel a pantalla completa ===&lt;br /&gt;
&lt;br /&gt;
A veces el panel se superpone a tu aplicación de Windows en pantalla completa que estás ejecutando con wine. Una solución es eliminar el panel antes de iniciar la aplicación y reiniciarla después.&lt;br /&gt;
&lt;br /&gt;
En [[GNOME]] ([[Ubuntu]]) los comandos son, respectivamente:&lt;br /&gt;
 gnome-session-remove gnome-panel&lt;br /&gt;
 gnome-panel&lt;br /&gt;
&lt;br /&gt;
En [[KDE]] ([[Kubuntu]]) sería:&lt;br /&gt;
 killall kicker&lt;br /&gt;
 kicker&lt;br /&gt;
&lt;br /&gt;
Y en [[Xfce]] ([[Xubuntu]]):&lt;br /&gt;
 killall xfce4-panel&lt;br /&gt;
 xfce4-panel&lt;br /&gt;
&lt;br /&gt;
=== Error: Unhandled Page Fault ===&lt;br /&gt;
&lt;br /&gt;
Si obtienes el mensaje de error 'wine: Unhandled page fault on read access', prueba a actualizar a wine 0.9.31, desde http://wine.budgetdedicated.com/archive/index.html&lt;br /&gt;
(Descárgalo, e instalalo con &amp;lt;code&amp;gt;sudo dpkg -i ./wine_0.9.31~winehq0~ubuntu~6.10-1_i386.deb&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Instrucciones para programas de Windows específicos ==&lt;br /&gt;
&lt;br /&gt;
Algunos programas de Windows han sido probados en Ubuntu. Se listan a continuación:&lt;br /&gt;
&lt;br /&gt;
* [[DVDShrink]].&lt;br /&gt;
* [[Flash Player Standalone]].&lt;br /&gt;
* [[World of Warcraft]].&lt;br /&gt;
* [[Instalar_Directx_usando_Wine|Directx 9]]&lt;br /&gt;
* [[Steam]].&lt;br /&gt;
&lt;br /&gt;
Consulta también la [http://appdb.winehq.org/ base de datos de compatibilidad con aplicaciones en wine].&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* [https://help.ubuntu.com/community/Wine wine] en [http://help.ubuntu.com/ help.ubuntu.com] {{en}}.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
* [[Wine para AMD64]].&lt;br /&gt;
&lt;br /&gt;
=== Aplicaciones similares ===&lt;br /&gt;
&lt;br /&gt;
* [[CrossOver]].&lt;br /&gt;
* [[Cedega]].&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
{{Wikipedia}}&lt;br /&gt;
* [http://www.winehq.org/ Sitio web oficial de wine] {{en}}.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Compatibilidad con otros S.O.]]&lt;br /&gt;
[[Categoría:Wine]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Suso</id>
		<title>Usuario discusión:Suso</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Suso"/>
				<updated>2008-07-11T00:18:49Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: Torrent disponible, se necesitan seeds!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Archivos de discusiones antiguas ===&lt;br /&gt;
:* [[Usuario_Discusi%C3%B3n:Suso/2007 | Archivo 2007]]&lt;br /&gt;
&lt;br /&gt;
== Sobre la categoría virtualización ==&lt;br /&gt;
&lt;br /&gt;
Claro que te ayudo :)&lt;br /&gt;
He visto el problema, veo que cuando añades la categoría virtualización lo haces de ésta manera: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Categoría:Virtualización|Virtualización]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Esto lo que hace es que en la página de categoría se incluya en la letra V. Es decir, si pusieras &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Categoría:Virtualización|A]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, te la incluiría en la letra A. Lo normal es no poner nada, es decir, poner la categoría como &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Categoría:Virtualización]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; y de ésta manera te lo ordenará por el nombre real de la página. Esto se utiliza por ejemplo para páginas que se llaman Proyecto:loquesea, poniendo &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[categoría:Proyecto|Nombre de la página]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, y se hace para que en el listado de categorías aparezca ordenado por el término que sustituyamos (en este caso por la N de &amp;quot;Nombre de la página&amp;quot; en lugar de por la P de proyecto, que es el nombre real. Espero haberme explicado y no haberte liado más, jeje! Saludos.--[[Usuario:Kelp|kelp]] 14:35 8 feb 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Delay man ==&lt;br /&gt;
Suso, siento todo el retraso y silencio por mi parte. Por un lado..aun no he conseguido enviarte correo desde el portal, parece que no funciona. Por otro, por temas laborales y personales..voy muy liado...apenas puedo echar un vistazo a algun artículo y modificarlo si mientras lo leo, detecto un error. En fins, que tu dejame mensajes y cuando pueda los respondo. Lo del tema mldnkey, que es lo que buscas? un ubuntu con mldonkey actuando como servidor?&lt;br /&gt;
tb incluyendo un servidor ftp? explicame un poquillo..que yo tpoco soy experto en nada.&lt;br /&gt;
un saludete golfo--[[Usuario:Gould|Gould]] 15:10 19 feb 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Probar Mldonkey ==&lt;br /&gt;
Buenas chaval, me baje ayer ubuntu server para intentar montar lo que tu, ahora que hago..ein? &lt;br /&gt;
He visto que has configurado tu Ubuntu server como server OpenSSH y con un mldonkey preparado. Ahora me lo descargo y te diré algo.Dime qué catálogo de pruebas quieres que realice.&lt;br /&gt;
Hay una cosa que no entiendo, me dices que necesitamos un servidor ftp/torrent, entiendo pues lo que has colgado en Beta mldonkey, no lo es, ya que es un servidor openssh con un mldonkey corriendo. Me equivoco?&lt;br /&gt;
&lt;br /&gt;
Yo no se mucho de mldonkey solo lo uso un poquillo. He estado investigando y he visto que su desarrollo esta un poco abandonado en algunos aspectos. De todas maneras de momento se me ocurre probar una GUI para acceder a el desde un PC remoto. Y no se que mas decirte. Alguna sugerncia?  &lt;br /&gt;
&lt;br /&gt;
Solucionado lo del correo. Saludetes--[[Usuario:Gould|Gould]] 16:17 6 mar 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Torrent disponible, se necesitan seeds! ==&lt;br /&gt;
&lt;br /&gt;
Suso te informo de que apareces apuntado en la página:&lt;br /&gt;
&lt;br /&gt;
http://doc.ubuntu-es.org/Proyecto:Colaboración&lt;br /&gt;
&lt;br /&gt;
Por lo que sería de gran ayuda que colaboraras con el ultimo lanzamiento:&lt;br /&gt;
&lt;br /&gt;
http://linuxtracker.org/download.php?id=842d42675b92bc32ee10a1b96255b50c90cb7726&amp;amp;f=Ubuntu-ES.iso%208.04.1%2032bits.torrent&lt;br /&gt;
&lt;br /&gt;
Gracias!&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Sertorio</id>
		<title>Usuario discusión:Sertorio</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Sertorio"/>
				<updated>2008-07-11T00:18:02Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: Torrent disponible, se necesitan seeds!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Bienvenido ==&lt;br /&gt;
&lt;br /&gt;
{{bienvenido}} [[Usuario:mstreet linux|::: mstreet linux :::]] &amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;amp;#91;[[Usuario Discusión:mstreet linux|disc]]&amp;amp;#124;[[Especial:Contributions/mstreet linux|contrib]]&amp;amp;#93;&amp;lt;/span&amp;gt; 22:55 19 jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Torrent disponible, se necesitan seeds!  ==&lt;br /&gt;
&lt;br /&gt;
Sertorio te informo de que apareces apuntado en la página:&lt;br /&gt;
&lt;br /&gt;
http://doc.ubuntu-es.org/Proyecto:Colaboración&lt;br /&gt;
&lt;br /&gt;
Por lo que sería de gran ayuda que colaboraras con el ultimo lanzamiento:&lt;br /&gt;
&lt;br /&gt;
http://linuxtracker.org/download.php?id=842d42675b92bc32ee10a1b96255b50c90cb7726&amp;amp;f=Ubuntu-ES.iso%208.04.1%2032bits.torrent&lt;br /&gt;
&lt;br /&gt;
Gracias!&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Ganon</id>
		<title>Usuario discusión:Ganon</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Ganon"/>
				<updated>2008-07-11T00:17:57Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: Torrent disponible, se necesitan seeds!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Comos o COMOs==&lt;br /&gt;
&lt;br /&gt;
¿Cual de los dos prefieres para el nombre de la categoría? --[[Usuario:Gallaecio|Gallaecio]]&amp;lt;sup&amp;gt;[[Usuario_Discusión:Gallaecio|¿Y luego?]]&amp;lt;/sup&amp;gt; 13:27 25 nov 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Gracias por tu bienvenida ==&lt;br /&gt;
&lt;br /&gt;
Pues eso gracias por tu bienvenida.&lt;br /&gt;
--[[Usuario:Suso|Suso]] 19:20 8 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Perdona que abuse ==&lt;br /&gt;
&lt;br /&gt;
Estoy un poco perdido,  ¿me puedes indicar a quien/quienes me dirijo para intentar lanzar mi propuesta de    [http://doc.ubuntu-es.org/Proyectos:Propuestas#Virtualizaci.C3.B3n virtualización] ?&lt;br /&gt;
--[[Usuario:Suso|Suso]] 13:28 11 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Gracias ==&lt;br /&gt;
&lt;br /&gt;
Gracias por tu pronta respuesta.  Espero no tener problemas, el proyecto quiero hacerlo yo, ya tengo preparada alguna documentación y alguna máquina virtual lista par poder compartir.  Eso si me gustaría que alguien me supervisara, dado que no  me manejo bien en la wiki.  Es mi primera vez.&lt;br /&gt;
&lt;br /&gt;
Saludos.&lt;br /&gt;
--[[Usuario:Suso|Suso]] 16:01 11 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ya he comenzado con un esbozo de tres niveles.  Gracias por tus ánimos.  Permíteme una pregunta.  Las máquinas virtuales acaban apuntando a una &amp;quot;zona de descarga&amp;quot;  tengo dos posibilidades:&lt;br /&gt;
-  El servidor de mi casa, para que la gente lo pueda descargar por ftp.  La subida no es ninguna maravilla, 90 Kb, y además no puedo usar todo el ancho de banda.  Me crearía una dependencia, si desconecto el pc, no funciona el tema.&lt;br /&gt;
-  Torrent:  Tener en alguna parte la semilla ¿se llama así? y todos los ficheros en mi casa, tiene la ventaja sobre el anterior de que puede haber más gente compartiendo, el problema que veo es donde poner la semilla.&lt;br /&gt;
&lt;br /&gt;
Te pongo un ejemplo [[Proyecto:Virtualización/MV:VMware:Ubuntu_jeOS_7_10 | Servidor Ubuntu jeOS 7.10 ]]&lt;br /&gt;
&lt;br /&gt;
En todo caso gracias por tu colaboración y disculpa el abuso, pero ando perdido en el ciberespacio.{{No firmado|Suso|--[[Usuario:Ganon|Ganon]] ([[Usuario Discusión:Ganon|¿mande?]]) [[Especial:Emailuser/Ganon|@]] 22:37 11 dic 2007 (CET)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
He tomado nota. En el tema de cambiar lo de MV hemos coincidido con una diferencia de 3 minutos haciéndolo.  &lt;br /&gt;
Lo de meter una categoría mas la :VMware:  lo pensé para separar las máquinas de esta plataforma de las de XEN y Virtual BOX.&lt;br /&gt;
El otro tema de la página para el torrent, creo que sería lo mejor.  Cuenta conmigo para lo que puedas necesitar.&lt;br /&gt;
&lt;br /&gt;
Lo he vuelto a hacer.  Me olvido de firmar.  Mis disculpas.&lt;br /&gt;
--[[Usuario:Suso|Suso]] 17:43 12 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
Otra vez yo.  El pesado.  Gracias por &amp;quot;wikificarme&amp;quot; el tema de Servidores:jeOS.  Continúo intentado aprender.  Tengo un par de problemas:&lt;br /&gt;
-  No se si la categorización ha sido correcta.&lt;br /&gt;
-  No logro enlazar desde otras páginas, he intentado [:Servidores:jeOS|jeOS] o [Servidores:jeOS|jeOS] pero no me funciona.  Gracias.&lt;br /&gt;
PD. Está vez me he acordado de firmar.&lt;br /&gt;
--[[Usuario:Suso|Suso]] 20:39 14 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
Pues queda claro que no hice bien la pregunta: si enlazaba con otras páginas internas, incluso externas con nomenclatura interna, como la wikipedia, con la que no lo consigo es con [Servidores:jeOS|jeOS].  Me he leido un par de veces las instrucciones de la wiki y cada vez que veo algo nuevo para mi, es decir muchas veces, entro en edición para ver como está hecho.  &lt;br /&gt;
En todo caso, saludos.&lt;br /&gt;
--[[Usuario:Suso|Suso]] 19:33 15 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Guia Ubuntu ==&lt;br /&gt;
&lt;br /&gt;
Hola, actualmente también soy colaborador de guia-ubuntu.org, pero en tu pagina de usuario dice que has dejado de colaborar, y quisiera saber cuales son esos problemas para saber si me dedico a colaborar solo aquí y dejo el projecto de guia ubuntu.{{No firmado|Black-Fox|--[[Usuario:Ganon|Ganon]] ([[Usuario Discusión:Ganon|¿mande?]]) [[Especial:Emailuser/Ganon|@]] 01:07 20 dic 2007 (CET)}}&lt;br /&gt;
&lt;br /&gt;
OK, he leído tu crónica y estoy de acuerdo con lo que comentas, dedicare mi tiempo solo en este proyecto, gracias&lt;br /&gt;
--[[Usuario:Black-Fox|Julio Cesar Díaz]] 21:12 24 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== Ahora te he entendido. ==&lt;br /&gt;
&lt;br /&gt;
Ahora, [[Usuario:Ganon|Ganon]],  te he entendido mejor.  Podría estar de acuerdo en que todos somos usuarios, pero no en que estamos en el mismo nivel.  Yo por lo menos, no.  Insisto en que ando perdido y hago lo que mis pocos conocimientos me permiten. He realizado algunos cambios. He separado la página de [[Virtualización]] del proyecto de [[Proyecto:Virtualización]] y he comenzado ha escribir en la página de [[Proyecto_Discusión:Virtualización | Discusión]] del proyecto.  Por cierto no hay nada que disculpar, son malos entendidos sin mayor historia, al contrario, tu me has ayudado en muchas cosas.  --[[Usuario:Suso|Suso]]([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir]]&lt;br /&gt;
&lt;br /&gt;
== Estilo de los resúmenes ==&lt;br /&gt;
Creo que tienes razón.  En principio no borraba los signos de comentario, /* y */, por lo que se producía el sombreado del Resumen.  Estaré atento.  Gracias por avisarme. &lt;br /&gt;
--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
:Pues a vuelto a pasar, le saqué los signos, en el comentario anterior,  y a vuelo a pasar. Pruebo de nuevo.&lt;br /&gt;
:--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
::Puede que no tenga que ver.  Siempre me aparecen sombreadas los dos últimos resúmenes, es decir los dos superiores.  O eso creo. Antes de grabar esta entrada estoy viendo dos lineas en sombreado.  En este caso volveré a dejar los signos de comentario.&lt;br /&gt;
::--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
&lt;br /&gt;
:::Esa forma no la había probado.  Ahora he puesto '''/* Estilo de los resúmenes */  Enésima prueba''' Veremos cómo aparece.&lt;br /&gt;
:::--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
&lt;br /&gt;
::::Continúa apareciendo mal.&lt;br /&gt;
::::--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
&lt;br /&gt;
:::::No nos entendimos. Yo me refería a que las dos primeras filas aparecen enmarcadas en gris.  Y tu al titulo de la sección y al comentario adiciona.  No se cual es la causa, o el objetivo, caso de que sea intencionado, de que las dos primeras filas aparezcan sombreadas en gris.&lt;br /&gt;
:::::--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
&lt;br /&gt;
:::::: Me refería a la [http://doc.ubuntu-es.org/index.php?title=Usuario_Discusi%C3%B3n:Ganon&amp;amp;action=history historia]. Las dos primeras filas aparecen enmarcadas en gris. &lt;br /&gt;
::::::--[[Usuario:Suso|Suso]] ([[Usuario Discusión:Suso|Suso a la escucha]]) [[Especial:Emailuser/Suso|@Si me quieres escribir...]]&lt;br /&gt;
&lt;br /&gt;
== Bienvenido ==&lt;br /&gt;
&lt;br /&gt;
{{bienvenido}} :P [[Usuario:mstreet linux|::: mstreet linux :::]] &amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;amp;#91;[[Usuario Discusión:mstreet linux|disc]]&amp;amp;#124;[[Especial:Contributions/mstreet linux|contrib]]&amp;amp;#93;&amp;lt;/span&amp;gt; 09:23 10 ene 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Torrent disponible, se necesitan seeds!  ==&lt;br /&gt;
&lt;br /&gt;
Ganon te informo de que apareces apuntado en la página:&lt;br /&gt;
&lt;br /&gt;
http://doc.ubuntu-es.org/Proyecto:Colaboración&lt;br /&gt;
&lt;br /&gt;
Por lo que sería de gran ayuda que colaboraras con el ultimo lanzamiento:&lt;br /&gt;
&lt;br /&gt;
http://linuxtracker.org/download.php?id=842d42675b92bc32ee10a1b96255b50c90cb7726&amp;amp;f=Ubuntu-ES.iso%208.04.1%2032bits.torrent&lt;br /&gt;
&lt;br /&gt;
Gracias!&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Kelp</id>
		<title>Usuario discusión:Kelp</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Usuario_discusi%C3%B3n:Kelp"/>
				<updated>2008-07-11T00:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: Torrent disponible, se necesitan seeds!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Hola==&lt;br /&gt;
&lt;br /&gt;
He estado buscando una lista de administradores, pero no la he encontrado, así que me fuí al historia de edición de la portada, y allí encontré tu nombre.&lt;br /&gt;
&lt;br /&gt;
Quería avisar de que el logo (doc.ubuntu-es) que hay en la parte superior izquierda me tapa parte del panel de usuario. Es decir, que la &amp;quot;parte invisible&amp;quot; del logo se superpone a los enlaces a mi página de usuario y discusión. Por lo tanto, cuando intento cliquear en mi nombre de usuario para ir a mi página de usuario, en realidad acabo yendo a la portada, que es el enlace al que lleva el logo.&lt;br /&gt;
&lt;br /&gt;
En fin, que si hubiese manera de que la imagen no se superpusiera, pues genial. De todas formas, tengo alguna experiencia en [http://gl.wikipedia.org/wiki/Usuario:Gallaecio wikis], y me las puedo apañar, pero supongo que tarde o temprano le pasará a más gente.&lt;br /&gt;
&lt;br /&gt;
Muchas gracias por adelantado, y felicidades por el proyecto que estais levantando. Promete. --[[Usuario:Gallaecio|Gallaecio]]&amp;lt;sup&amp;gt;[[Usuario_Discusión:Gallaecio|¿Y luego?]]&amp;lt;/sup&amp;gt; 01:16 25 nov 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
==Licencia de doc.ubuntu-es==&lt;br /&gt;
&lt;br /&gt;
¿Por qué este wiki no usa licencia GNU GPL? Hay otras wikis de documentación que las usan (Wikifonts, Wikibooks...) y no han tenido problemas. Además, la única diferencia que veo con la de Creative Commons que se está utilizando es el reconocimiento del autor, lo cual no es necesario para una documentación de ayuda. --[[Usuario:Gallaecio|Gallaecio]]&amp;lt;sup&amp;gt;[[Usuario_Discusión:Gallaecio|¿Y luego?]]&amp;lt;/sup&amp;gt; 12:59 25 nov 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gracias por tus correcciones y consejos ==&lt;br /&gt;
&lt;br /&gt;
Pues eso, que gracias.  Estoy en ello.  Lo de hacer subpáginas no sabía que se podía hacer. Ahora no se como, pero lo averiguaré.&lt;br /&gt;
Saludos.--[[Usuario:Suso|Suso]] 20:44 11 dic 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
== ¿Me puedes ayudar? ==&lt;br /&gt;
Tengo un problema con la ordenación de las categorías:&lt;br /&gt;
*[http://doc.ubuntu-es.org/Categoría:Virtualización Categoría:Virtualización  ]  &lt;br /&gt;
*[http://doc.ubuntu-es.org/Categoría:Máquinas_virtuales  Categoría:máquinas virtuales.] &lt;br /&gt;
He estado incluyéndolas en los artículos del [[P:V]], pero las de virtualización me aparece casi todas en la '''V''' y no en las letras que les corresponde.  En la otra categoría, aparecen bien.  ¿Tienes alguna idea?.  Gracias. --[[Usuario:Suso|Suso]] 14:22 8 feb 2008 (CET)&lt;br /&gt;
::Entiendo lo que me dices.  Lo que es peor, lo había leído pero no procesado.  Esta tarde trataré de arreglarlo.  Gracias. --[[Usuario:Suso|Suso]] 14:38 8 feb 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Buen Administrador ==&lt;br /&gt;
&lt;br /&gt;
Kelp para mí ha sido uno de los mejores administradores de Ubuntu-es.&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Marcianisto|Marcianisto]] 04:04 2 mar 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
== Agradecimiento ==&lt;br /&gt;
&lt;br /&gt;
No se si es un proceso automatizado, sea como sea, me ha gustado recibir la bievenida tener el mensaje en mi discusión, me parece una excelente aclaratoria y motivadora idea.&lt;br /&gt;
&lt;br /&gt;
Un saludo.&lt;br /&gt;
--[[Usuario:Carsses|JCasares]] 23:59 18 abr 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  otro mensaje, obviamente de un newbie == &lt;br /&gt;
&lt;br /&gt;
ah, yo nunca he sabido como funciona esto, pero me gustaria, sabes, hacerme cargo, por defecto, de las partes mas &amp;quot;lentas&amp;quot; del informe semanal... esto es, el asunto respecto a la blogósfera y &amp;quot;las noticias&amp;quot;... a mí, la verdad, me toma 20 minutos hacer la traducción.. y es algo que hago ahora, por ejemplo. si no es posible ello, me gustaría coordinar con otras personas a quienes les interese el tema, para definir secciones a traducir.... saludos!!&lt;br /&gt;
&lt;br /&gt;
p.s.:mira, en Resumen de reuniones &amp;gt; MOTU, Edicion 88&lt;br /&gt;
&lt;br /&gt;
agregué a los anuncios de cada cual que llegaba a MOTU, lo siguiente:&lt;br /&gt;
&lt;br /&gt;
* Y encima, sus logros, los de todos, son traducidos a otros idiomas, para mayor gloria. &lt;br /&gt;
&lt;br /&gt;
la verdad, no sé si corresponde, pero lo hice porque me pareció, porque se merecían la notificación al respectol, aunque quizás no lo lean o no conozcan el idioma. a lo mejor no corresponde. en fin, me parecío que quizás sería importnate para ellos, dado que ya estarian siendo destacados en otro idioma.. ah, yo y mi mala costumbre profesional de bibliotecario...&lt;br /&gt;
&lt;br /&gt;
si no corresponde ello, lo elimino.&lt;br /&gt;
{{no firmado|Axolotl}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uy, tienes razon, se me fue firmar mi mensaje... ahora sí que sí. --[[Usuario:axolotl|axolotl]]&lt;br /&gt;
&lt;br /&gt;
== Gracias por la bienvenida ==&lt;br /&gt;
&lt;br /&gt;
Gracias por el mensaje de bienvenida, e intentaré ser más meticulos con los resumenes de mis actividades.&lt;br /&gt;
&lt;br /&gt;
Saludos (y que no se me olvide firmar)&lt;br /&gt;
--[[Usuario:JoRRieal|JoRRieal]] 02:42 29 abr 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Edicion 89 del Boletin de Noticias Ubuntu casi listo... ==&lt;br /&gt;
&lt;br /&gt;
acabo de traducir el Boletin de Noticias Ubuntu #89, con algunas excepciones, debido a que hay términos técnicos que no supe traducir bien.&lt;br /&gt;
&lt;br /&gt;
dichas excepciones están en:&lt;br /&gt;
&lt;br /&gt;
Noticias de Launchpad (no traduje nada de ahí): http://doc.ubuntu-es.org/NSU/Edicion_89#Noticias_de_Launchpad&lt;br /&gt;
&lt;br /&gt;
En Otras Noticias - Lanzamiento de DeltaH: http://doc.ubuntu-es.org/NSU/Edicion_89#gNewSense_lanza_DeltaH_.28basado_en_Hardy_Heron.29&lt;br /&gt;
&lt;br /&gt;
En Otras Noticias - Consumo Energia Ubuntu vs W$ Vista: http://doc.ubuntu-es.org/NSU/Edicion_89#Consumo_de_energ.C3.ADa_en_Ubuntu_8.04_vs._Windows_Vista&lt;br /&gt;
&lt;br /&gt;
además, hay un par de secciones que habría que eliminar al menos en esta edición, dado que no existen en el original en inglés. estas son: Entrevista a..., Lo nuevo en Hardy Heron, y el Resumen de Reuniones.&lt;br /&gt;
&lt;br /&gt;
también hay que refinar algunos detalles, como los nombres de los equipos en el calendario de reuniones.&lt;br /&gt;
&lt;br /&gt;
de todas formas, dejé el original en inglés abajo de la traducción, tal como estaba.&lt;br /&gt;
&lt;br /&gt;
bueno, y eso sería todo por ahora.&lt;br /&gt;
&lt;br /&gt;
saludos!&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Axolotl|Axolotl]] 21:04 5 may 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Boletin Semanal #90 ==&lt;br /&gt;
&lt;br /&gt;
te escribo, como todos los lunes, para contarte que quedó lista la traducción para el número #90 del Boletin Semanal de Noticias.&lt;br /&gt;
&lt;br /&gt;
saludos!&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Axolotl|Axolotl]] 08:36 12 may 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Edicion #90 ==&lt;br /&gt;
&lt;br /&gt;
bueno, esos son los ratos libres, las maravillas de la cesantía, jajajaj&lt;br /&gt;
&lt;br /&gt;
saludos!&lt;br /&gt;
&lt;br /&gt;
[[Usuario:Axolotl|Axolotl]] 21:34 12 may 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Torrent disponible, se necesitan seeds! ==&lt;br /&gt;
&lt;br /&gt;
Kelp te informo de que apareces apuntada en la página:&lt;br /&gt;
&lt;br /&gt;
http://doc.ubuntu-es.org/Proyecto:Colaboración&lt;br /&gt;
&lt;br /&gt;
Por lo que sería de gran ayuda que colaboraras con el ultimo lanzamiento:&lt;br /&gt;
&lt;br /&gt;
http://linuxtracker.org/download.php?id=842d42675b92bc32ee10a1b96255b50c90cb7726&amp;amp;f=Ubuntu-ES.iso%208.04.1%2032bits.torrent&lt;br /&gt;
&lt;br /&gt;
Gracias!&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Nvidia_Geforce_FX_5100_y_superiores</id>
		<title>Nvidia Geforce FX 5100 y superiores</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Nvidia_Geforce_FX_5100_y_superiores"/>
				<updated>2008-07-09T11:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Importante|'''Nota Importante''': La mayoría de las tarjetas NVIDIA funciona con el driver libre &amp;quot;nv&amp;quot;, se recomienda usar este driver porque tiene soporte directo de Ubuntu. Solo se recomienda el driver propietario nvidia-glx a las personas que no les funcione el driver &amp;quot;nv&amp;quot; (sobre todo en la serie nueva 8000) o que quieran una aceleración mayor'''}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Forma recomendada de instalar el driver nvidia versión 1.0-9755(excepto para serie 8000 instalarlos manualmente)==  &lt;br /&gt;
&lt;br /&gt;
Usar el '''Gestor de controladores restringidos'''&lt;br /&gt;
&lt;br /&gt;
Para arrancar el gestor de controladores restringidos usar los menus:&lt;br /&gt;
&lt;br /&gt;
  Sistema -&amp;gt; Administración -&amp;gt; Gestor de controladores restringidos&lt;br /&gt;
&lt;br /&gt;
Marcamos el driver nvidia, esperamos a que se descarguen los ficheros, reiniciamos y comprobamos que la instalación es correcta&lt;br /&gt;
&lt;br /&gt;
'''NOTA: Si sucede algún problema basta con realizar los mismos pasos y desmarcar el driver nvidia en el gestor de controladores restringidos'''&lt;br /&gt;
&lt;br /&gt;
== Instalar el driver nvidia manualmente versión 100.14.09 (recomendados solo para serie 8000 o si tu tarjeta tiene algún problema)==&lt;br /&gt;
&lt;br /&gt;
Para empezar lo primero que haremos sera una copia de seguridad del fichero xorg.conf:&lt;br /&gt;
  sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup&lt;br /&gt;
Después hay que bajarse los drivers mas modernos de la web de nvidia 100.14.09 es la versión con la que esta probada esta guía.&lt;br /&gt;
[http://www.nvidia.com/object/unix.html http://www.nvidia.com/object/unix.html]&lt;br /&gt;
&lt;br /&gt;
Instalamos las cabeceras del kernel:&lt;br /&gt;
  sudo aptitude install build-essential linux-headers-`uname -r`&lt;br /&gt;
Ahora tenemos que desinstalar todos los paquetes que puedan crear conflictos:&lt;br /&gt;
  sudo aptitude purge nvidia-glx nvidia-glx-legacy nvidia-glx-new nvidia-settings&lt;br /&gt;
Ahora abrimos el archivo que se encuentra en /etc/default/linux-restricted-modules-common con vuestro editor de textos voy a poner el ejemplo con gedit pero basta cambiar gedit por vuestro editor preferido.&lt;br /&gt;
  sudo gedit /etc/default/linux-restricted-modules-common&lt;br /&gt;
Ahora en el fichero que tenemos abierto desactivamos los drivers que lleva Ubuntu por defecto de Nvidia si no lo hacemos dara problemas y nuestro ordenador no arrancara en modo grafico. Buscamos lo siguiente:&lt;br /&gt;
  DISABLED_MODULES=&amp;quot;&amp;quot;&lt;br /&gt;
Y lo sustituimos por: (nvidia_new solo es necerario en feisty)&lt;br /&gt;
  DISABLED_MODULES=&amp;quot;nv nvidia_new&amp;quot;&lt;br /&gt;
No olvidarse de guardar el documento anterior.&lt;br /&gt;
Ahora vamos a modificar el fichero xorg.conf. Lo abrimos con el editor de textos:&lt;br /&gt;
  sudo gedit /etc/X11/xorg.conf&lt;br /&gt;
Comentamos si tenemos la linea donde pone dri con una # como en el ejemplo:&lt;br /&gt;
  Section &amp;quot;Module&amp;quot;&lt;br /&gt;
        Load    &amp;quot;bitmap&amp;quot;&lt;br /&gt;
        Load    &amp;quot;dbe&amp;quot;&lt;br /&gt;
        Load    &amp;quot;ddc&amp;quot;&lt;br /&gt;
  #     Load    &amp;quot;dri&amp;quot;   &amp;lt;------ Esto esta &amp;quot;comentado&amp;quot;&lt;br /&gt;
        Load    &amp;quot;extmod&amp;quot;&lt;br /&gt;
        Load    &amp;quot;freetype&amp;quot;&lt;br /&gt;
        Load    &amp;quot;glx&amp;quot;&lt;br /&gt;
        Load    &amp;quot;int10&amp;quot;&lt;br /&gt;
        Load    &amp;quot;record&amp;quot;&lt;br /&gt;
        Load    &amp;quot;type1&amp;quot;&lt;br /&gt;
        Load    &amp;quot;vbe&amp;quot;&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
Ahora vamos hasta la sección device y cambiamos driver &amp;quot;nv&amp;quot; (o lo que tengamos puesto ej: &amp;quot;vesa&amp;quot;) por &amp;quot;nvidia&amp;quot;&lt;br /&gt;
  Section &amp;quot;Device&amp;quot;&lt;br /&gt;
        Identifier      &amp;quot;Card0&amp;quot;&lt;br /&gt;
        Driver          &amp;quot;nvidia&amp;quot; #Esto es lo que debe ser cambiado &lt;br /&gt;
  EndSection&lt;br /&gt;
Guardamos todo el documento y cerramos lo que tengamos abierto porque vamos a cerrar el modo gráfico.&lt;br /&gt;
Apagamos el sistema gráfico (X-windows) para poder terminar de instalar el driver.&lt;br /&gt;
  sudo /etc/init.d/gdm stop&lt;br /&gt;
Ahora nos situamos donde tengamos el driver descargado de Nvidia y le damos permisos de ejecucion si el nombre es diferente poner otro nombre:&lt;br /&gt;
  sudo chmod +x NVIDIA-Linux-x86-100.14.09-pkg1.run&lt;br /&gt;
Ahora instalamos el driver y seguimos los pasos que nos indica .&lt;br /&gt;
  ./NVIDIA-Linux-x86-100.14.09-pkg1.run&lt;br /&gt;
Después de esto el driver esta instalado ya tendremos aceleracion grafica, iniciamos otra vez el modo grafico.&lt;br /&gt;
  sudo /etc/init.d/gdm start&lt;br /&gt;
Si el driver esta bien instalado nos iniciara el modo gráfico ahora para comprobar que todo esta bien instalado reiniciamos el ordenador. Si no arranca el modo gráfico es porque tenemos algun conflicto con drivers antiguos porque no los hemos desactivado correctamente. Para volver a tener modo gráfico entrar en el archivo xorg.conf buscar la sección device driver &amp;quot;nvidia&amp;quot; y cambiarla por driver &amp;quot;nv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Compiz-fusion ==&lt;br /&gt;
&lt;br /&gt;
Si vamos a usar beryl o compiz-fusion con nuestro driver instalado MANUALMENTE tenemos que ejecutar.&lt;br /&gt;
&lt;br /&gt;
  sudo nvidia-xconfig --add-argb-glx-visuals -d 24&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
*[[Nvidia]]&lt;br /&gt;
*[[Nvidia:Soporte|Lista de modelos soportados]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Categoría --&amp;gt;&lt;br /&gt;
[[Categoría:tarjetas gráficas]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-07-08T14:40:31Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Requisitos de paquetes nuevos para Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{en desarrollo|Festor}}&lt;br /&gt;
&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa ''GNU hello'' como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio &amp;lt;code&amp;gt;hello/&amp;lt;/code&amp;gt; que contiene los archivos del código fuente. Ahora necesitamos crear un directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt; seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntará qué tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción «s» para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción «m» genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb).&lt;br /&gt;
* La opción «l» para bibliotecas.&lt;br /&gt;
* La opción «k» se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar).&lt;br /&gt;
* La opción «b» utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-l&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-k&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando &amp;lt;code&amp;gt;dh_make&amp;lt;/code&amp;gt; sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar &amp;lt;code&amp;gt;dh_make&amp;lt;/code&amp;gt; este crea los archivos básicos en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; y algunos archivos plantilla (.ex) que quizás puedan ser necesarios o no. El programa ''Hello'' no es muy complicado, y una vez vista la sección [[#Empaquetando desde el código fuente|Empaquetando desde el código fuente]], sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos &amp;lt;code&amp;gt;.ex&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 cd debian/&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;README.Debian&amp;lt;/code&amp;gt;: el archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
* &amp;lt;code&amp;gt;dirs&amp;lt;/code&amp;gt;: usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
* &amp;lt;code&amp;gt;docs&amp;lt;/code&amp;gt;: usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
* &amp;lt;code&amp;gt;info&amp;lt;/code&amp;gt;: usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada «Archivos de ejemplo dh_make».&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; sólo los archivos &amp;lt;code&amp;gt;changelog&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;compat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo '''&amp;lt;code&amp;gt;changelog&amp;lt;/code&amp;gt;''', como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave [[GPG]], asegúrate de usar el mismo nombre y cuenta de correo en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo &amp;lt;code&amp;gt;changelog&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aun más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato ''RFC822'' el cual se puede obtener usando el comando &amp;lt;code&amp;gt;date -R&amp;lt;/code&amp;gt;. Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo &amp;lt;code&amp;gt;changelog&amp;lt;/code&amp;gt; para ''hello'':&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice ''-0ubuntu1'', esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ''ubuntuX'' (donde ''X'' es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian ''hello 2.1.1-1'' se modifica para Ubuntu la línea de versión será ''2.1.1-1ubuntu1''. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es ''0'' (por ejemplo, ''2.1.1-0ubuntu1'').&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Date cuenta que en este caso la distribución a la que hace referencia es ''unstable'' (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo '''&amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt;''' contiene la información que el administrador de paquetes (como [[dpkg]], [[apt]], [[aptitude]], [[Synaptic]] y [[Adept]]) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete ''hello'' de Ubuntu, el archivo &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de ''Maintainer'' (''Mantenedor'') normalmente un nombre y cuenta de correo general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los [[MOTU]] (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo ''XSBC-Original-Maintainer''). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estás haciendo.&lt;br /&gt;
* '''Section:''' indica la categoría del paquete dentro de un repositorio [[apt]] que es reconocida por gestores de paquetes como [[Synaptic]] o [[Adept]], no obstante esto no tiene nada que ver con la categoría del menú de [[GNOME]] o [[KDE]].&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' indica la prioridad del paquete en el sistema. Dispones de las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más, si no se quiere dar basta con modificarlo con algo como ''email@email.com''.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves [[GPG]] (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes Deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información mira la [http://www.debian.org/doc/debian-policy/ documentación oficial de Debian].&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución.&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una [[terminal]]:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt; lo hace automáticamente, pero si estás portando un paquete de los ''backports'' de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' esta es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en ''Package'' y ''Source'' deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete. Algunos ejemplos son:&lt;br /&gt;
** ''all'' - El programa a empaquetar no depende de la arquitectura del sistema. Se refiere a programas hechos en lenguajes interpretados o independientes de la plataforma, como [[Python]] o [[Java]]. El resultado será un paquete binario cuyo nombre acabará en ''_all.deb''.&lt;br /&gt;
** ''any'' - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas compatibles. Habrá un archivo .deb para cada arquitectura (''_i386.deb'' por ejemplo).&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (''i386'', ''amd64'', ''ppc'', etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu.&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el ''-dev'').&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetado de programas hechos en Python, Java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' se usa para paquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo [[aptitude]], instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado.&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' aquí describiremos el programa, esto es lo que se verá cuando abras el archivo &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt; con un programa como [[GDebi]]. La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un ''título'' de 60 letras que va directamente después de ''Description:''.&lt;br /&gt;
** Un ''texto'' de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada línea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
El archivo '''&amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;''' proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo &amp;lt;code&amp;gt;COPYING&amp;lt;/code&amp;gt; en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar ''hello'' se libera bajo la [[w:licencia de software|licencia]] [[w:licencia pública general de GNU|GPL]]. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Nota que el archivo &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt; del paquete ''hello'' de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el '''&amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt;'''. Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un ''Makefile'' con instrucciones para compilar e instalar la aplicación, luego crear el archivo &amp;lt;code&amp;gt;.deb&amp;lt;/code&amp;gt; a partir de los archivos instalados. También tiene instrucciones para revertir la compilación e instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del &amp;lt;code&amp;gt;rules&amp;lt;/code&amp;gt; creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones ''noopt'' para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección ''build'':&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; con las variables adecuadas, luego ejecutan &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección ''clean'' en la cual se ejecuta &amp;lt;code&amp;gt;make -i distclean&amp;lt;/code&amp;gt; eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones ''binary-indep'' vacías. Algunos paquetes se crean independientes de una arquitectura específica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas Python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en ''_all.deb''.&lt;br /&gt;
&lt;br /&gt;
''hello'' es un programa escrito en [[w:lenguaje de programación C|C]] por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en ''_i386.deb'' o ''_amd64.deb'' principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo ''binary-arch'':&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts ''debhelper'' que crean nuestros paquetes deb. ''dh_testdir'' y ''dh_testroot'' hacen algunas comprobaciones de la estructura. ''dh_installdocs'' y ''dh_installchangelogs'' instala los archivos que especifiques en los archivos *.doc y *.changelog. ''dh_strip'' tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. ''dh_compress'' ejecuta [[gzip]] (un compresor de consola) para comprimir alguna documentación. ''dh_shlibdeps'' añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente ''dh_builddeb'' construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, &amp;lt;code&amp;gt;compat&amp;lt;/code&amp;gt;, el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estás listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
''Debuild'' comprobará primero si el paquete &amp;lt;code&amp;gt;build-depends&amp;lt;/code&amp;gt; está instalado, luego usará &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo &amp;lt;code&amp;gt;debian/rules&amp;lt;/code&amp;gt;. Si todo está bien debuild intentará firmar digitalmente el o los paquetes con [[GPG]], si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tú no tienes una llave GPG con el mismo nombre y correo que el que usaste en el archivo &amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el directorio superior al código fuente. Échale un vistazo e instálalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt; en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; para crear un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que contiene la descripción y el &amp;lt;code&amp;gt;md5sum&amp;lt;/code&amp;gt; para el paquete fuente y un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; en el cual se compara el código fuente comprimido (&amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;) con el descomprimido en donde se halla el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;. Los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;*_source.changes&amp;lt;/code&amp;gt; usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La opción &amp;lt;code&amp;gt;-S&amp;lt;/code&amp;gt; le dice al debuild que construya el paquete fuente usando los scripts ''dpkg-buildpackage'' y ''[[fakeroot]]'' para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las opciones &amp;lt;code&amp;gt;-us -uc&amp;lt;/code&amp;gt; con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurarte de que debuild encuentre correctamente la clave GPG debes introducir las variables de entorno &amp;lt;code&amp;gt;DEBFULLNAME&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;DEBEMAIL&amp;lt;/code&amp;gt;, en el script de inicio de tu intérprete de comandos (&amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt; en [[bash]], por ejemplo), con el nombre y el cuenta de correo electrónico respectivamente que uses para la clave GPG y en el archivo &amp;lt;code&amp;gt;debian/changelog&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt; es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con ''pbuilder'':&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando ''pbuilder'' podemos saber si las dependencias son correctas ya que este proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando ''lintian'':&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requisitos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
Cuando un paquete fuente, que aún no existe, se sube a Ubuntu o se construye un nuevo paquete binario debe ser colocado en la lista NEW y tienen que ser revisado por un miembro del equipo del archivo de Ubuntu&lt;br /&gt;
&lt;br /&gt;
===== Empaquetado =====&lt;br /&gt;
&lt;br /&gt;
 * Lo más importante: Mirar los derechos de autor (copyright) y la información de la licencia antes de nada.&lt;br /&gt;
 * El paquete fuente y el paquete binario deben tener un nombre &amp;quot;sano&amp;quot;: ni uno demasiado corto (como &amp;quot;editor&amp;quot;) ni uno extremadamente largo y sin sentido (como &amp;quot;nuevo-cool-administrador&amp;quot;)&lt;br /&gt;
 * debian/control y debian/rules deben construir paquetes con Architecture:, Build-Depends[-Indep]: correctos, y el archivo rules debe tener muy presente la relación  (binary-arch vs. binary-indep). &lt;br /&gt;
 * Los scripts de mantenimiento del paquete no deben estropear demasiado el sistema&lt;br /&gt;
 * ...&lt;br /&gt;
&lt;br /&gt;
===== Otros =====&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando módulos Python con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetado avanzado ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Creando más de un paquete binario ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando librerías compartidas ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Librerías compartidas ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Errores comunes ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Archivos de ejemplo dh-make ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Abusando de archivos ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Cambiando el tarball original ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Soluciones =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Consejos =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Información de Copyright ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Paquetes de referencia ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Sistema de parches ==&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
== Archivos complementarios ==&lt;br /&gt;
&lt;br /&gt;
== Recetas ==&lt;br /&gt;
&lt;br /&gt;
== Apéndice ==&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Pr%C3%B3logo.-_%C2%BFQu%C3%A9_vamos_a_aprender%3F</id>
		<title>Prólogo.- ¿Qué vamos a aprender?</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Pr%C3%B3logo.-_%C2%BFQu%C3%A9_vamos_a_aprender%3F"/>
				<updated>2008-07-07T09:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Descripción */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducción ==&lt;br /&gt;
¿Qué duda cabe que hoy día cualquier aplicación que se precie debe contemplar una interfaz gráfica que lo convierta en agradable para el usuario? Pero no es común encontrar gente cualificada para desarrollar esas aplicaciones, a pesar de que, tal y como vamos a demostrar, son unos conocimientos al alcance de todos.&lt;br /&gt;
&lt;br /&gt;
También cabe denotar que ante esta situación se ha generalizado el uso de otros lenguajes de programación que ya incluyen esta posibilidad, pero que no obstante, pierden la potencia y velocidad que en su día hicieron famoso a C++&lt;br /&gt;
&lt;br /&gt;
== Descripción ==&lt;br /&gt;
Realmente, sobre [http://www.codeblocks.org/ code::block] hay poco que mencionar, pues tan solo es una [http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado IDE], pero en cambio, si conviene hacer unos breves comentarios sobre [http://www.wxwidgets.org/ wxWidgets]&lt;br /&gt;
&lt;br /&gt;
wxWidgets son unas librerías que en un principio se orientaron a crear interfaces gráficas para C++, pero que actualmente sirven incluso para implementaciones cliente/servidor. Además de su potencia como herramienta de desarrollo, está su potencia como herramienta multiplataforma, ya que llevado el código con cuidado, este será igual de válido para Linux, Windows, Mac, etc.&lt;br /&gt;
&lt;br /&gt;
Efectivamente, nos centraremos en el mundo Ubuntu, no obstante, dedicaremos un capítulo a preparar un compilado de nuestro código para Windows.&lt;br /&gt;
&lt;br /&gt;
== Objetivo ==&lt;br /&gt;
Pues ya lo hemos mencionado, nuestro objetivo es crear una aplicación con una interfaz gráfica, intentando tocar todos lo puntos a los que el programador pueda tener que enfrentarse.&lt;br /&gt;
&lt;br /&gt;
Así pues, y sin más preámbulos, comencemos con el tutorial.&lt;br /&gt;
&lt;br /&gt;
{| border=1 class=&amp;quot;wikitable&amp;quot; align=center&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;&amp;quot; | [[Nuestra primera interfaz gráfica con CodeBlocks y wxWidgets]]&lt;br /&gt;
| style=&amp;quot;text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;&amp;quot; | [[Nuestra primera interfaz gráfica con CodeBlocks y wxWidgets]]&lt;br /&gt;
| style=&amp;quot;text-align: center; border: 2px solid #8B673A; background-color: #F0E2C6; -moz-border-radius: 8px; margin: 10 10 10 10; padding: 5px; font-weight: bold;&amp;quot; | [[Capítulo 0.- Sobre como instalar wxWidgets y CodeBlocks]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Preguntas_frecuentes</id>
		<title>Preguntas frecuentes</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Preguntas_frecuentes"/>
				<updated>2008-07-07T04:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Solucionar problemas con Synaptic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''FAQ''' es el acrónimo de '''''F'''requently '''A'''sked '''Q'''uestions'' (en inglés), que en español significa ''preguntas frecuentes''. El término se refiere a una lista de preguntas y respuestas, dentro de un determinado contexto y para un tema en particular. &lt;br /&gt;
&lt;br /&gt;
En español aunque menos utilizado, existe el término '''PUF''' acrónimo de '''''P'''reguntas de '''U'''so '''F'''recuente''.&lt;br /&gt;
&lt;br /&gt;
En esta sección trataremos de dar solución rápida a través de respuestas concisas a los problemas más frecuentes con que se puede encontrar el usuario de [[Ubuntu]], desde el principiante hasta el avanzado.&lt;br /&gt;
&lt;br /&gt;
== Consejos iniciales ==&lt;br /&gt;
&lt;br /&gt;
Si quieres encontrar la pregunta que te interesa lo más rápido posible, es aconsejable usar el buscador de tu navegador de internet pulsando CTRL + F.&lt;br /&gt;
&lt;br /&gt;
== Pre-instalación de Ubuntu ==&lt;br /&gt;
&lt;br /&gt;
=== ¿De dónde descargo Ubuntu? ===&lt;br /&gt;
&lt;br /&gt;
Es siempre aconsejable bajarse una .ISO (Imagen de Disco) desde la página oficial para no llevarse sorpresas.&lt;br /&gt;
&lt;br /&gt;
[[Sitios de descarga|Página de Descargas de Ubuntu]]&lt;br /&gt;
&lt;br /&gt;
Si no puedes descargarlo debido a tu ancho de banda, también puedes pedir que te envíen el CD a casa desde [https://shipit.ubuntu.com/ Shipit].&lt;br /&gt;
&lt;br /&gt;
=== ¿Qué versión de Ubuntu debo descargarme? ===&lt;br /&gt;
&lt;br /&gt;
Normalmente es aconsejable instalar la versión más actual pero si tu ordenador es antiguo o tiene pocos recursos deberías ver los requerimientos de cada versión. No es recomendable descargar una versión de Ubuntu inferior a 6.06 LTS. Consulta las versiones de Ubuntu en '''[[Versiones]]'''&lt;br /&gt;
&lt;br /&gt;
La principal limitación a la hora de instalar Ubuntu es la memoria RAM, ya que la instalación se realiza en modo gráfico.  A pesar de ello, puedes emplear la '''versión alternate (o alternativa)'''.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios recomiendan Ubuntu 6.06 LTS por ser más estable, y otros recomiendan la última versión de Ubuntu por ser más sencilla en su uso y estar más actualizado.&lt;br /&gt;
&lt;br /&gt;
La decisión a la hora de elegir cual versión de Ubuntu usar, está a criterio personal.&lt;br /&gt;
&lt;br /&gt;
=== ¿Desktop, Alternate o Server? ===&lt;br /&gt;
&lt;br /&gt;
'''La imagen tipo Desktop (o Escritorio)''' es una versión Live-CD (que te permite arrancar Ubuntu sin instalarlo en tú ordenador) que te da la posibilidad de instalarlo desde el escritorio con el icono &amp;quot;Install&amp;quot;. Es la adecuada para la mayoría de ordenadores actuales para uso doméstico o para oficina&lt;br /&gt;
&lt;br /&gt;
'''La imagen tipo Alternate (o Alternativa)''' es una versión que permite ciertas instalaciones especiales, como puede ser el caso de ordenadores con poca memoria RAM (menos de 192Mb) o con tarjetas gráficas problemáticas. Es la indicada si la versión anterior te ha dado algún problema durante la ejecución/instalación gráfica. No permite ejecutar Ubuntu con el entorno gráfico sino que te invita a instalarlo desde el principio.&lt;br /&gt;
&lt;br /&gt;
'''La imagen tipo Server (o Servidor)'''  es una versión que no instala un interfaz gráfico de usuario (aunque se puede instalar después), ya que está destinada a ordenadores que tengan que trabajar como servidores. En el menú inicial puedes elegir entre dos tipos de instalación:&lt;br /&gt;
&lt;br /&gt;
* '''Server:''' Se instala el sistema operativo y luego tú has de instalar las aplicaciones que necesites.&lt;br /&gt;
[[LAMP]]:''' Se instala el sistema operativo junto con Apache, soporte PHP, [[MySQL]] y queda configurado desde la instalación para trabajar como servidor web.&lt;br /&gt;
&lt;br /&gt;
Una recomendación final, al momento de seleccionar cual imagen descargar, muchos recomiendan 6.06 LTS por ser más estable y por tener más tiempo de soporte (hasta 2011). Aunque no significa que la versión más actualizada sea inestable.&lt;br /&gt;
&lt;br /&gt;
=== Distintos tipos de CD, ¿cuál es el adecuado para mi ordenador? ===&lt;br /&gt;
&lt;br /&gt;
Dentro de cada tipo de imagen hay distintos tipos de CD en función de la arquitectura de tu ordenador:&lt;br /&gt;
&lt;br /&gt;
* '''PC (Intel x86):''' Adecuada para la mayoría de PCs (i.e. Pentium, Celeron, Core, Athlon, Sempron) que ejecutan Windows. Escoge ésta si no está seguro, pues siempre te funcionará.&lt;br /&gt;
&lt;br /&gt;
* '''Mac (PowerPC):''' Adecuada para máquinas Apple Macintosh G3, G4 y G5. Esto incluye iBooks y PowerBooks.&lt;br /&gt;
&lt;br /&gt;
* '''64-bit PC (AMD64):''' Adecuada para máquinas basadas en la arquitectura AMD64 o EM64T (i.e. Athlon64, Core, Opteron, EM64T Xeon). No es la necesaria para todos ni la apropiada para muchos, solo para aquellos que soporten arquitectura de 64bits.&lt;br /&gt;
&lt;br /&gt;
* '''SPARC server install CD:'''  Este tipo de CD sólo está disponible para la imagen tipo Server y es la adecuada para las computadoras UltraSPARC de Sun Microsystems. Esto también incluye a las máquinas basadas en procesadores  multicore UltraSPARC T1 (&amp;quot;Niagara&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Instalación de Ubuntu ==&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo instalo Ubuntu? ===&lt;br /&gt;
&lt;br /&gt;
En pocos pasos:&lt;br /&gt;
# ''Redimensionar la partición de Windows'' y dejar un espacio de más o menos unos 10 GB o más no particionado. Puedes hacerlo desde Windows con Partition Magic por ejemplo. &lt;br /&gt;
# ''Insertar el CD de Ubuntu'' que has grabado y reiniciar. &lt;br /&gt;
# ''Instalar'': Cuando llegue a la opción de instalar Ubuntu en el disco duro (si es una versión alternate) o cuando entres en el escritorio y le des al icono de INSTALL (si es una versión Desktop) elige la opción “Instalar en espacio no asignado”. Del resto se encarga Ubuntu: te formateará la partición y te creará otra pequeña partición swap. Cuando acabe, reinicia y voilà: ya tendrás tu Ubuntu funcionando.&lt;br /&gt;
&lt;br /&gt;
Para una información más detallada, visita la sección de '''[[Instalación]]'''&lt;br /&gt;
&lt;br /&gt;
{{nota|Si eres un usuario más avanzado es aconsejable realizar el particionado mediante el programa de particionado de Ubuntu (que te aparece al instalar) dejando una partición Swap, una ext3 para &amp;quot;/&amp;quot; y una partición ext3 para &amp;quot;/home&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
== Básicos Ubuntu ==&lt;br /&gt;
&lt;br /&gt;
=== No puedo entrar como root ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu tiene desactivada por defecto la cuenta '''root'''. De este modo obtenemos dos ventajas fundamentales:&lt;br /&gt;
&lt;br /&gt;
* Que un usuario novato no provoque destrozos en el sistema, ya que no sabe que el archivo que está tocando es importante para el buen funcionamiento del sistema operativo.&lt;br /&gt;
&lt;br /&gt;
* Estar con privilegios totales constantemente es un agujero de seguridad importante que permitiría que algún programa malicioso dañara tu equipo.&lt;br /&gt;
&lt;br /&gt;
Una vez sepas activar la cuenta root por ti mismo, significará que ya estás preparado para usarla. Hasta entonces... mejor ser un SUDOer y emplear el comando SUDO.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo puedo trabajar con privilegios de root? === &lt;br /&gt;
&lt;br /&gt;
Si trabajas a través del entorno gráfico, él mismo ya te pide '''tu contraseña''' cada vez que se requieran permisos de administrador para realizar una acción. Esto suele ser para instalar programas a través de [[Synaptic]], cambiar la [[configuración de red]], [[usuarios y grupos|crear un nuevo usuario]], etc.&lt;br /&gt;
&lt;br /&gt;
Si necesitas realizar alguna acción desde consola con privilegios de root, sólo has de escribir el comado '''sudo''' delante del comando a ejecutar.&lt;br /&gt;
&lt;br /&gt;
Ejemplo: sudo fdisk -l (para ver las particiones del ordenador)&lt;br /&gt;
&lt;br /&gt;
=== ¿Qué es Sudo? ===&lt;br /&gt;
&lt;br /&gt;
Para ejecutar operaciones de administración en Ubuntu se emplea un comando llamado '''«sudo»'''. Este programa nos pregunta la contraseña de nuestro usuario actual para acceder a los poderes administrativos. Tras un tiempo de inactividad los permisos &amp;quot;caducan&amp;quot;, un mecanismo de seguridad para evitar los mismos riesgos que tendría trabajar desde la cuenta root.&lt;br /&gt;
&lt;br /&gt;
Este programa puede utilizarse en modo gráfico con «gksudo programa», por ejemplo:&lt;br /&gt;
&lt;br /&gt;
 gksudo gedit (para lanzar el editor de textos en modo administrador)&lt;br /&gt;
&lt;br /&gt;
aunque la consola es el uso mas común de sudo.&lt;br /&gt;
&lt;br /&gt;
=== En la terminal me pide la contraseña pero cuando lo introduzco no sale nada ===&lt;br /&gt;
&lt;br /&gt;
Aunque no veas la contraseña, sí que la estás escribiendo. Es una medida de seguridad ante miradas indiscretas. Simplemente escríbela y dale a intro.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo puedo trabajar gráficamente con permisos de Root? ===&lt;br /&gt;
&lt;br /&gt;
A veces nos interesa trabajar con archivos y carpetas de los que nuestro usuario no tiene permisos de escritura. En estas situaciones trabajar por consola mediante el comando ''sudo'' puede ser muy lento y tedioso. Para poder trabajar desde el entorno de ventanas debemos trabajar con nautilus (el gestor gráfico de archivos de Gnome) con privilegios de usuario root.&lt;br /&gt;
&lt;br /&gt;
Existe una forma muy sencilla de hacer esto::&lt;br /&gt;
&lt;br /&gt;
* Instala el paquete '''nautilus-gksu''' de los repositorios oficiales de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
* Una vez instalado el paquete abre una terminal y escribe el comando '''killall nautilus''' para activar la función de este paquete.&lt;br /&gt;
&lt;br /&gt;
* A partir de ahora aparecerá una opción llamada '''Abrir como administrador''' al pulsa con el botón derecho del ratón en una carpeta o archivo.&lt;br /&gt;
&lt;br /&gt;
== Programas ==&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo hacer que un programa se arranque desde el inicio? ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu es muy fácil. Sólo has de ir a: &lt;br /&gt;
&lt;br /&gt;
'''Sistema -&amp;gt; Preferencias -&amp;gt; Sesiones -&amp;gt; Programas de Inicio''' &lt;br /&gt;
&lt;br /&gt;
Donde has de añadir el nombre del programa que quieres que arranque al iniciarse el sistema. &lt;br /&gt;
&lt;br /&gt;
Otra opción es instalarte el programa '''Boot-Up Manager''' mediante [[Synaptic]]. Una vez instalado lo podrás encontrar en:&lt;br /&gt;
&lt;br /&gt;
'''Sistema -&amp;gt; Administración -&amp;gt; Boot-Up Manager'''&lt;br /&gt;
&lt;br /&gt;
=== ¿Hay algún messenger para Ubuntu? ===&lt;br /&gt;
&lt;br /&gt;
'''[[Pidgin]]''':&lt;br /&gt;
Tienes múltiples opciones. El sistema lleva preinstalado un programa llamado [[Pidgin]] (antiguo gaim), que permite trabajar como cliente Jabber, Google Talk, Messenger,..., aunque su interfaz gráfica no es similar a la de Messenger.&lt;br /&gt;
&lt;br /&gt;
'''[[aMSN]]''':&lt;br /&gt;
Otra opción es instalarte [[aMSN]], un clon libre de MSN Messenger (y en algunos aspectos superior). Puedes instalártelo desde [[Synaptic]] desde el cual debes buscar e instalar el paquete '''amsn'''.&lt;br /&gt;
&lt;br /&gt;
'''[[emesene]]''':&lt;br /&gt;
Una nueva opción que a partir de Ubuntu 8.04 se puede descargar de &amp;quot;Añadir/Eliminar...&amp;quot; en el menú &amp;quot;Aplicaciones&amp;quot;. También [[emesene]], es un clon libre de MSN Messenger, pero se destaca por tener una interfaz usuario flexible, configurable, agradable y muy intuitiva para usuarios que migran de [[w:Windows Live Messenger|Windows Live Messenger]].&lt;br /&gt;
&lt;br /&gt;
=== Mi aMSN no emite sonidos. ¿Cómo puedo solucionarlo? ===&lt;br /&gt;
&lt;br /&gt;
Abre la aplicación de aMSN y vete a Herramientas -&amp;gt; Preferencias -&amp;gt; Otras&lt;br /&gt;
&lt;br /&gt;
En la parte de servidor de sonidos verás una línea donde pone&lt;br /&gt;
&lt;br /&gt;
 play $sound&lt;br /&gt;
&lt;br /&gt;
que has de sustituir con:&lt;br /&gt;
&lt;br /&gt;
 aplay $sound&lt;br /&gt;
&lt;br /&gt;
De modo que AMSN empleará ALSA para emitir los sonidos.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cuáles son los equivalentes de mis programas de Windows en GNU/Linux? ===&lt;br /&gt;
&lt;br /&gt;
En [[Aplicaciones y equivalencias]] puedes hallar una colección de equivalencias entre programas Windows/Linux.&lt;br /&gt;
&lt;br /&gt;
Como verás, hay gran cantidad de alternativas (muchas de ellas superiores a sus homólogas de Windows). Puedes asesorarte con miembros de la comunidad ubuntu para escoger la que más se adapte a tus necesidades.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo se instalan programas? ===&lt;br /&gt;
&lt;br /&gt;
Existen diversas formas de [[instalar aplicaciones|instalar programas]] en Ubuntu en función de la situación en que te encuentres. En un rango de dificultad tenemos:&lt;br /&gt;
&lt;br /&gt;
* '''Añadir y Quitar Aplicaciones (método más sencillo):''' Aplicaciones -&amp;gt; ''Añadir y Quitar...''. Te instala por programas.&lt;br /&gt;
&lt;br /&gt;
* '''[[Synaptic]]:''' Sistema -&amp;gt; Administración -&amp;gt; Gestor de Paquetes Synaptic. Instalación por paquetes, pero te soluciona dependencias.&lt;br /&gt;
&lt;br /&gt;
* '''[[aptitude]]:''' Mediante el comando en consola ''sudo aptitude paquete''. Más potente que APT-GET. También te soluciona dependencias y recuerda librerías descargadas desinstalandolas si están en desuso.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]:''' Mediante el comando en consola ''sudo apt-get install paquete''. También te soluciona dependencias.&lt;br /&gt;
&lt;br /&gt;
* '''Paquetes .deb:''' Mediante el Gestor de Paquetes [[Instalar aplicaciones descargadas|gDebi]] (doble click sobre el .deb). No te soluciona dependencias.&lt;br /&gt;
&lt;br /&gt;
* '''Archivos .bin:''' Son los ejecutables de GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
* '''Archivos .run:''' Suelen ser asistentes de instalación para GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
* '''Paquetes .rpm:''' Mediante [[Alien]] los conviertes a paquetes.deb y los instalas, con doble click.&lt;br /&gt;
&lt;br /&gt;
* '''[[Compilar programas|Instalar aplicaciones a partir del código fuente (Compilar)]]:''' es la forma más eficiente, pero la más complicada.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que '''sólo podrás tener un programa de instalación activo a la vez''', por lo que si tienes abierto el programa Synaptic no podrás añadir aplicaciones mediante otro de los métodos de instalación ni actualizar el sistema operativo, de forma que se proteja la integridad del sistema.&lt;br /&gt;
&lt;br /&gt;
Si quieres saber más de cómo instalar programas, pásate por la sección de [[Instalar aplicaciones]].&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo ejecutar programas de Windows en Ubuntu? ===&lt;br /&gt;
&lt;br /&gt;
Puedes ejecutar programas de Windows empleando un emulador de Windows como:&lt;br /&gt;
&lt;br /&gt;
* '''[[Wine]]''' (http://es.wikipedia.org/wiki/Wine): Programa '''libre y gratuito''' que permite ejecutar programas de Windows y MS-DOS.&lt;br /&gt;
&lt;br /&gt;
* '''[[Crossover Office]]''' ([[w:CrossOver Office|CrossOver Office]]): Programa '''privativo y de pago''' que viene a ser Wine con algunos parches y una configuración más sencilla.&lt;br /&gt;
&lt;br /&gt;
* '''[[Cedega]]''' (http://es.wikipedia.org/wiki/Cedega): Programa '''privativo y de pago''' basado en Wine, pero diseñado para juegos de ordenador.&lt;br /&gt;
&lt;br /&gt;
También tienes la opción de virtualizar Windows mediante:&lt;br /&gt;
&lt;br /&gt;
* [[w:VMware VMware|VMware VMware]].&lt;br /&gt;
&lt;br /&gt;
* [[VirtualBox]], de licencia GNU en una de sus ediciones.&lt;br /&gt;
&lt;br /&gt;
* [[w:Virtual PC|Virtual PC]]&lt;br /&gt;
&lt;br /&gt;
* [[w:BOCHS|BOCHS]], de licencia GNU.&lt;br /&gt;
&lt;br /&gt;
* [[w:QEMU|QEMU]], de licencia GNU.&lt;br /&gt;
&lt;br /&gt;
* [[w:Virtuozzo|Virtuozzo]], software propietario.&lt;br /&gt;
&lt;br /&gt;
== Multimedia ==&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo ver peliculas en DivX, etc.? ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu viene con el Reproductor de Películas Totem ya instalado, pero los codecs para poder visualizar formatos DivX, Xvid, etc. hay que instalarlos aparte por ser de carácter propietario. &lt;br /&gt;
; En Ubuntu 7.10 (Gutsy Gibbon)&lt;br /&gt;
* Haz click en '''Aplicaciones → Añadir/Quitar''' y busca el paquete '''Ubuntu restricted extras'''. Seleccionalo y haz click en '''OK'''.&lt;br /&gt;
* Para ver la mayoría de DVDs necesitarás el paquete '''libdvdcss2''' . Este paquete está disponible utilizando [[Medibuntu]]. Este es un repositorio de terceros y no está soportado por Canonical.&lt;br /&gt;
* Algunos codecs externos pueden necesitar para reproducirse ciertos formatos propietarios como Apple Quicktime o Real``Video. Estos códecs externos están disponibles en el repositorio de terceros [[Medibuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Consulta: [[Formatos libres]] y [[Formatos Restrictivos]].'''&lt;br /&gt;
&lt;br /&gt;
== Personalización ==&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo crear un Acceso Directo? ===&lt;br /&gt;
&lt;br /&gt;
Tenemos diferentes mecanismos para hacer esto:&lt;br /&gt;
&lt;br /&gt;
* '''Desde Menú Aplicaciones:''' Para añadir un acceso directo de un programa que tengamos en Aplicaciones, únicamente deberemos hacer clic con el botón derecho sobre nuestra aplicación y seleccionar: &amp;quot;añadir este lanzador al escritorio&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* '''Desde Consola:''' Para añadir un acceso directo a cualquier aplicación, archivo o carpeta (independientemente de que aparezca en Aplicaciones) abriremos la consola de comandos y escribiremos: &lt;br /&gt;
&lt;br /&gt;
 ln -s /ruta_origen ~/Desktop&lt;br /&gt;
&lt;br /&gt;
* '''Desde Escritorio:''' Le das al botón derecho del ratón en cualquier parte del escritorio y seleccionamos ''crear nuevo -&amp;gt; enlace a aplicación''. Una vez dentro de esta ventana, en la pestaña ''aplicación'' donde pone ''orden'' pones el nombre de la aplicación y lo demas lo decoras a tu gusto (pones un icono, descripción y el nombre que tu quieras).&lt;br /&gt;
&lt;br /&gt;
=== ¿Cambiar tamaño de iconos? ===&lt;br /&gt;
&lt;br /&gt;
Abre una ventana del administrador de archivos [[Nautilus]] y en menú '''Editar''' vete a:&lt;br /&gt;
&lt;br /&gt;
'''Preferencias -&amp;gt; Vistas -&amp;gt; Valores Predeterminados para la vista de Iconos -&amp;gt; Nivel de Ampliación Predeterminado''' &lt;br /&gt;
&lt;br /&gt;
Donde puedes escoger el porcentaje de tamaño que quieres para los iconos. Cuanto menor sea el porcentaje, más pequeños se verán todos los iconos del sistema y viceversa.&lt;br /&gt;
&lt;br /&gt;
== Resolución de Problemas Habituales ==&lt;br /&gt;
=== Activar aceleración gráfica ===&lt;br /&gt;
Consulta la sección [[Tarjetas gráficas]]&lt;br /&gt;
&lt;br /&gt;
=== Problemas con el módulo tls de amsn ===&lt;br /&gt;
&lt;br /&gt;
Si cuando inicias amsn te pide que descargues el módulo tls siempre, prueba lo siguiente:&lt;br /&gt;
Copia la ruta del módulo tls, será algo parecido a &amp;lt;tt&amp;gt;http://switch.dl.sourceforge.net/sourceforge/amsn/tls-1.5.0-linux-x86.tar.gz&amp;lt;/tt&amp;gt;&lt;br /&gt;
Abre una terminal y escribe:&lt;br /&gt;
 cd&lt;br /&gt;
Descarga el paquete (cambia la ruta por la que te haya aparecido a tí):&lt;br /&gt;
 wget http://switch.dl.sourceforge.net/sourceforge/amsn/tls-1.5.0-linux-x86.tar.gz&lt;br /&gt;
Moverlo a la carpeta /usr/share/amsn:&lt;br /&gt;
 sudo mv tls-1.5.0-linux-x86.tar.gz /usr/share/amsn&lt;br /&gt;
Entrar en esa carpeta:&lt;br /&gt;
  cd /usr/share/amsn&lt;br /&gt;
Descomprimirlo:&lt;br /&gt;
 sudo tar -xvzf tls-1.5.0-linux-x86.tar.gz&lt;br /&gt;
  &lt;br /&gt;
Y después ejecuta el Amsn y ve a '''Cuenta &amp;gt; Preferencias &amp;gt; Avanzadas &amp;gt; Otras &amp;gt; TLS''' y ahi mismo escribe &amp;lt;tt&amp;gt;/usr/share/amsn/tls1.50&amp;lt;/tt&amp;gt;&lt;br /&gt;
Reinicia el Amsn y ya no te aparecerá más el problema&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo escribir/leer en una partición NTFS? ===&lt;br /&gt;
{{nota|A partir de Ubuntu 7.04 el soporte para lectura y escritura de particiones ntfs viene habilitado por defecto}}&lt;br /&gt;
Para versiones anteriores:&lt;br /&gt;
# Instala '''NTFS-3g''' mediante [[Synaptic]].&lt;br /&gt;
# Ve a '''''Aplicaciones -&amp;gt; Herramientas del Sistema -&amp;gt; Herramienta de configuración de ntfs3-g''''' y activa la primera opción al menos, si ves que es necesario activa también la segunda.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo recargo fstab sin reiniciar el sistema? ===&lt;br /&gt;
&lt;br /&gt;
'''Fstab''' es el archivo de configuración de particiones, en el se hacen cambios para [[montar particiones|montar y desmontar particiones y discos duros]].&lt;br /&gt;
Para ello has de entrar en consola y escribir:&lt;br /&gt;
&lt;br /&gt;
 sudo umount -a (desmonta todas las particiones que no estén en uso)&lt;br /&gt;
 sudo mount -a (monta las particiones que aparecen en fstab que no estén ya montadas)&lt;br /&gt;
&lt;br /&gt;
=== ¿Por qué el portapapeles de Ubuntu no funciona igual que en Windows? ===&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios observan que al copiar algo en una aplicación, al cerrar esta aplicación la información no queda memorizada en el portapapeles como en Windows. Esto es debido al diferente sistema de trabajo del portapapeles en GNU/Linux y Windows.&lt;br /&gt;
&lt;br /&gt;
En Windows los datos copiados de una aplicación se mantienen en memoria, lo cual causa un decremento del rendimiento del sistema a la hora de albergar grandes cantidades de datos en el portapapeles (ya que se ha de sacrificar memoria para una copia). El planteamiento en Linux es más eficiente, ya que la aplicación simplemente informa al sistema de que esos datos son los que se han de copiar. Al no almacenar la información completa en memoria evitamos duplicar esfuerzos y el rendimiento mejora. A parte, este sistema ofrece otras ventajas como por ejemplo que de este modo se consigue más seguridad a la hora de navegar por internet.&lt;br /&gt;
&lt;br /&gt;
Si aún así te interesa esta opción, puedes instalarte [http://http://glipper.sourceforge.net/ Glipper] a través de Synaptic, una sencilla herramienta que guarda un histórico de lo datos copiados (entre otras funciones). Esta aplicación estará ya accesible desde instalación en Ubuntu Feisty Fawn 7.04.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo recupero un GRUB perdido? ===&lt;br /&gt;
&lt;br /&gt;
Distintas soluciones, pero las más sencillas son:&lt;br /&gt;
&lt;br /&gt;
a.) Reinstalar el GRUB con tu Live-CD -&amp;gt; http://arot-linux.blogspot.com/2005/08/reinstalar-grub-en-el-mbr.html&lt;br /&gt;
&lt;br /&gt;
b.) Reinstalar GRUB con SuperGRUB Disk -&amp;gt; [[Super Grub Disk]]&lt;br /&gt;
&lt;br /&gt;
La que prefieras... una implica descargar algo de internet y la otra es independiente de internet. Decisiones, decisiones...&lt;br /&gt;
&lt;br /&gt;
=== Al reiniciar, la pantalla se queda en negro y no arranca el entorno gráfico ===&lt;br /&gt;
&lt;br /&gt;
Posiblemente has estado tocando la configuración de tu tarjeta gráfica. Si te aparece el modo texto de ubuntu, escribe: &lt;br /&gt;
&lt;br /&gt;
 sudo dpkg-reconfigure xserver-xorg&lt;br /&gt;
&lt;br /&gt;
Y vuelve a configurar tu entorno gráfico. Si no tienes acceso a escritura, reinicia y entra en modo seguro, cuando te aparezca la pantalla escribe el comando anteriormente escrito.&lt;br /&gt;
La próxima vez que edites el archivo Xorg.conf, haz una copia de seguridad, de esta manera:&lt;br /&gt;
&lt;br /&gt;
 sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf-backup&lt;br /&gt;
&lt;br /&gt;
Y si tienes problemas al reiniciar el entorno gráfico, entonces podrás recuperar tu antiguo xorg con el comando:&lt;br /&gt;
&lt;br /&gt;
 sudo cp /etc/X11/xorg.conf-backup /etc/X11/xorg.conf&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo hacer que arranque por defecto Windows en lugar de Ubuntu? ===&lt;br /&gt;
&lt;br /&gt;
Hay que editar el archivo menu.lst que se encuentra en ''/boot/grub/menu.lst''. Para ello hay que ir a la consola de comandos y escribimos:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /boot/grub/menu.lst&lt;br /&gt;
&lt;br /&gt;
Buscar la línea que ponga únicamente ''default'' y allí indica el número de línea que se carga por defecto (lo encontrarás con el número cero).&lt;br /&gt;
&lt;br /&gt;
 # You can specify 'saved' instead of a number. In this case, the default entry&lt;br /&gt;
 # is the entry saved with the command 'savedefault'.&lt;br /&gt;
 # WARNING: If you are using dmraid do not change this entry to 'saved' or your&lt;br /&gt;
 # array will desync and will not let you boot your system.&lt;br /&gt;
 default		0&lt;br /&gt;
ejemplo:&lt;br /&gt;
 0=Ubuntu  (development branch), kernel 2.6.22-14-generic&lt;br /&gt;
 1=Ubuntu  (development branch), kernel 2.6.22-14-generic (recovery mode)&lt;br /&gt;
 2=Ubuntu  (development branch), memtest86+&lt;br /&gt;
 3=Other operating systems:&lt;br /&gt;
 4=Microsoft Windows XXXXX&lt;br /&gt;
&lt;br /&gt;
Si tienes Windows y Ubuntu instalado este número debería ser 4 para que cargue Windows por defecto (hay que tener en cuenta que la entrada que aparece como separador (''&amp;quot;title Other operating systems:&amp;quot;'') también cuenta a la hora de contar el número de línea.&lt;br /&gt;
&lt;br /&gt;
Cierra el documento guardando y cuando reinicies verás el resultado.&lt;br /&gt;
&lt;br /&gt;
Si esto no te funciona, consulta este [http://www.ubuntu-es.org/index.php?q=node/57256 howto].&lt;br /&gt;
&lt;br /&gt;
=== Solucionar problemas con Synaptic ===&lt;br /&gt;
&lt;br /&gt;
Cuando estamos instalando programas con [[Synaptic]], Añadir y Quitar o vía terminal nos puede pasar que se nos quede colgado el PC o se nos vaya la luz a mitad instalación. En estos casos al volver abrir [[Synaptic]] nos sale el siguiente mensaje:&lt;br /&gt;
&lt;br /&gt;
 E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. &lt;br /&gt;
 E: _cache-&amp;gt;open() failed, please report.&lt;br /&gt;
&lt;br /&gt;
Para solucionarlo es muy sencillo, tan sólo hemos de seguir la recomendación que nos sale en la primera línea, es decir; cerrar [[Synaptic]], abrir una terminal y teclear:&lt;br /&gt;
&lt;br /&gt;
 sudo dpkg --configure -a&lt;br /&gt;
&lt;br /&gt;
=== Cuando aprieto el boton central del raton en firefox no me aparece el autoscroll ===&lt;br /&gt;
&lt;br /&gt;
Muchos que cambiais de Windows a Linux Ubuntu os encontrais con que al apretar el botón central del ratón no aparece el autoscrolling, cosa que si pasaba en Windows. Esto se arregla en firefox llendo a ''Editar&amp;gt;Preferencias&amp;gt;Avanzado&amp;gt;General&amp;gt;Activar Usar desplazamiento automático''.&lt;br /&gt;
&lt;br /&gt;
También diré que en Ubuntu, ese botón se puede usar para copiar y pegar (seleccionas un texto en una ventana, click en el botón, vas a otra, click y lo pegas). Con alt+click puedes redimensionar ventanas sin moverte hasta las esquinas, tambien puedes mover con él los iconos de los paneles de gnome...&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo pongo Firefox en español? ===&lt;br /&gt;
&lt;br /&gt;
Necesitas instalar el paquete mozilla-firefox-locale-es-es.&lt;br /&gt;
&lt;br /&gt;
=== ¿Cómo pongo OpenOffice.org en español? ===&lt;br /&gt;
&lt;br /&gt;
Necesitas instalar el paquete openoffice.org-l10n-es.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- categorías --&amp;gt;&lt;br /&gt;
[[Categoría:Empezando]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/ManualDebdiff</id>
		<title>Guía de empaquetamiento/ManualDebdiff</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/ManualDebdiff"/>
				<updated>2008-07-04T15:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Los archivos '''debdiff''' se utilizan normalmente para comparar las modificaciones entre 2 paquetes. Esto es útil para enviar un parche y facilitar la tarea al MOTU ya que puede comprobar de una forma más sencilla los cambios entre el paquete ya existente y el nuevo que se creará después de aplicar el parche.&lt;br /&gt;
&lt;br /&gt;
Pongamos un ejemplo: Nos informan de un paquete deb que actualmente presenta un error en la descripción del programa.&lt;br /&gt;
&lt;br /&gt;
Primero comprobamos que el error exista realmente, en este caso usaremos la herramienta '''apt-cache''' para ver la descripción.&lt;br /&gt;
&lt;br /&gt;
 apt-cache show deborphan&lt;br /&gt;
&lt;br /&gt;
(Nota: esto es un ejemplo, por lo que el error no existe lo hemos provocado a propósito)&lt;br /&gt;
&lt;br /&gt;
 festor@sniper-win:~$ apt-cache show deborphan&lt;br /&gt;
 Package: deborphan&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Section: universe/admin&lt;br /&gt;
 Installed-Size: 420&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 Original-Maintainer: Peter Palfrader &amp;lt;weasel@debian.org&amp;gt;&lt;br /&gt;
 Architecture: i386&lt;br /&gt;
 Version: 1.7.23&lt;br /&gt;
 Depends: libc6, dialog, bash (&amp;gt;= 2.05b-14), gettext-base (&amp;gt;= 0.14.1-6)&lt;br /&gt;
 Recommends: apt&lt;br /&gt;
 Filename: pool/universe/d/deborphan/deborphan_1.7.23_i386.deb&lt;br /&gt;
 Size: 71432&lt;br /&gt;
 MD5sum: 8d3db29961a02e0b5cb7e22eff830ed5&lt;br /&gt;
 SHA1: 5cce77d9feac087baa448f0092771bb01a9f3703&lt;br /&gt;
 SHA256: 92e0d6c9bf28edede6dac91821d98d88ef4b9ed816561c0c56e81a0e2d9ed8f8&lt;br /&gt;
 Description-es: Encuentra bibliotecas huérfanas&lt;br /&gt;
 deborphan encuentra paquetes «huérFAnos» en el sistema.&lt;br /&gt;
 Bugs: mailto:ubuntu-users@lists.ubuntu.com&lt;br /&gt;
 Origin: Ubuntu&lt;br /&gt;
&lt;br /&gt;
Como podéis ver debería ser «huérfanos» y no «huérFAnos». Así que vamos a arreglar el error. Para ello debemos buscar el archivo .dsc del paquete. La web http://packages.ubuntu.com es un buen sitio para empezar. En este caso en la página http://packages.ubuntu.com/hardy/deborphan veremos en la columna de la izquierda algo parecido a esto:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Deborphan-debdiff.png]]&lt;br /&gt;
&lt;br /&gt;
Normalmente en despues de ''&amp;quot;Download Source Package nombre_del_paquete_subrayado:&amp;quot;'' hay un tercer archivo llamado .diff.gz pero en este caso se trata de un paquete nativo. Para más información consultar la [[Guía de empaquetamiento/Completa|Guía completa de empaquetamiento]]&lt;br /&gt;
&lt;br /&gt;
 dget -x http://archive.ubuntu.com/ubuntu/pool/universe/d/deborphan/deborphan_1.7.23.dsc&lt;br /&gt;
&lt;br /&gt;
Entramos en el directorio recién creado:&lt;br /&gt;
&lt;br /&gt;
 cd deborphan-1.7.23&lt;br /&gt;
&lt;br /&gt;
Y luego al directorio debian/:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
&lt;br /&gt;
Por último ejecutamos el editor '''nano''' (o cualquier editor de su elección) seguido del nombre del archivo que queremos modificar:&lt;br /&gt;
&lt;br /&gt;
 nano control&lt;br /&gt;
&lt;br /&gt;
Arreglamos el error, guardamos el archivo con Ctrl+O y salimos con Ctrl+X&lt;br /&gt;
&lt;br /&gt;
 dch -i&lt;br /&gt;
&lt;br /&gt;
Actualizamos el changelog del paquete:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Generamos el nuevo código fuente del paquete, usa los parámetros '''-us -uc''' después del '''-S''' para evitar la firma digital&lt;br /&gt;
&lt;br /&gt;
Finalmente para crear el archivo debdiff ejecutamos el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 debdiff deborphan_1.7.23.dsc deborphan_1.7.23ubuntu1.dsc &amp;gt; deborphan_1.7.23ubuntu1.debdiff&lt;br /&gt;
&lt;br /&gt;
Ahora ya podemos enviárselo al mantenedor del paquete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/ManualDebdiff</id>
		<title>Guía de empaquetamiento/ManualDebdiff</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/ManualDebdiff"/>
				<updated>2008-07-04T15:28:30Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: New page: Los archivos '''debdiff''' se utilizan normalmente para comparar las modificaciones entre 2 paquetes. Esto es útil para enviar un parche y facilitar la tarea al MOTU ya que puede comproba...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Los archivos '''debdiff''' se utilizan normalmente para comparar las modificaciones entre 2 paquetes. Esto es útil para enviar un parche y facilitar la tarea al MOTU ya que puede comprobar de una forma más sencilla los cambios entre el paquete ya existente y el nuevo que se creará después de aplicar el parche.&lt;br /&gt;
&lt;br /&gt;
Pongamos un ejemplo: Nos informan de un paquete deb que actualmente presenta un error en la descripción del programa.&lt;br /&gt;
&lt;br /&gt;
Primero comprobamos que el error exista realmente, en este caso usaremos la herramienta '''apt-cache''' para ver la descripción.&lt;br /&gt;
&lt;br /&gt;
 apt-cache show deborphan&lt;br /&gt;
&lt;br /&gt;
(Nota: esto es un ejemplo, por lo que el error no existe lo hemos provocado a propósito)&lt;br /&gt;
&lt;br /&gt;
 festor@sniper-win:~$ apt-cache show deborphan&lt;br /&gt;
 Package: deborphan&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Section: universe/admin&lt;br /&gt;
 Installed-Size: 420&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 Original-Maintainer: Peter Palfrader &amp;lt;weasel@debian.org&amp;gt;&lt;br /&gt;
 Architecture: i386&lt;br /&gt;
 Version: 1.7.23&lt;br /&gt;
 Depends: libc6, dialog, bash (&amp;gt;= 2.05b-14), gettext-base (&amp;gt;= 0.14.1-6)&lt;br /&gt;
 Recommends: apt&lt;br /&gt;
 Filename: pool/universe/d/deborphan/deborphan_1.7.23_i386.deb&lt;br /&gt;
 Size: 71432&lt;br /&gt;
 MD5sum: 8d3db29961a02e0b5cb7e22eff830ed5&lt;br /&gt;
 SHA1: 5cce77d9feac087baa448f0092771bb01a9f3703&lt;br /&gt;
 SHA256: 92e0d6c9bf28edede6dac91821d98d88ef4b9ed816561c0c56e81a0e2d9ed8f8&lt;br /&gt;
 Description-es: Encuentra bibliotecas huérfanas&lt;br /&gt;
 deborphan encuentra paquetes «huérFAnos» en el sistema.&lt;br /&gt;
 Bugs: mailto:ubuntu-users@lists.ubuntu.com&lt;br /&gt;
 Origin: Ubuntu&lt;br /&gt;
&lt;br /&gt;
Como podéis ver debería ser «huérfanos» y no «huérFAnos». Así que vamos a arreglar el error. Para ello debemos buscar el archivo .dsc del paquete. La web [http://packages.ubuntu.com] es un buen sitio para empezar. En este caso en la página [http://packages.ubuntu.com/hardy/deborphan] veremos en la columna de la izquierda algo parecido a esto:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Deborphan-debdiff.png]]&lt;br /&gt;
&lt;br /&gt;
Normalmente en despues de ''&amp;quot;Download Source Package nombre_del_paquete_subrayado:&amp;quot;'' hay un tercer archivo llamado .diff.gz pero en este caso se trata de un paquete nativo. Para más informacón consultar la [[Guía de empaquetamiento/Completa Guía completa de empaquetamiento]]&lt;br /&gt;
&lt;br /&gt;
 dget -x http://archive.ubuntu.com/ubuntu/pool/universe/d/deborphan/deborphan_1.7.23.dsc&lt;br /&gt;
&lt;br /&gt;
Entramos en el directorio recién creado:&lt;br /&gt;
&lt;br /&gt;
 cd deborphan-1.7.23&lt;br /&gt;
&lt;br /&gt;
Y luego al directorio debian/:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
&lt;br /&gt;
Por último ejecutamos el editor '''nano''' (o cualquier editor de su elección) seguido del nombre del archivo que queremos modificar:&lt;br /&gt;
&lt;br /&gt;
 nano control&lt;br /&gt;
&lt;br /&gt;
Arreglamos el error, guardamos el archivo con Ctrl+O y salimos con Ctrl+X&lt;br /&gt;
&lt;br /&gt;
 dch -i&lt;br /&gt;
&lt;br /&gt;
Actualizamos el changelog del paquete:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Generamos el nuevo código fuente del paquete, usa los parámetros -us -uc después del -S para evitar la firma digital&lt;br /&gt;
&lt;br /&gt;
Finalmente para crear el archivo debdiff ejecutamos el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 debdiff deborphan_1.7.23.dsc deborphan_1.7.23ubuntu1.dsc &amp;gt; deborphan_1.7.23ubuntu1.debdiff&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Archivo:Deborphan-debdiff.png</id>
		<title>Archivo:Deborphan-debdiff.png</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Archivo:Deborphan-debdiff.png"/>
				<updated>2008-07-04T15:15:30Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento</id>
		<title>Guía de empaquetamiento</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento"/>
				<updated>2008-07-04T14:59:43Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Guías */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al espacio wiki de la Guía de Empaquetamiento. &lt;br /&gt;
&lt;br /&gt;
== Organización ==&lt;br /&gt;
&lt;br /&gt;
Toda la información relacionada con la creación de paquetes deb ha sido añadida aquí y dividida en partes más pequeñas para un mejor control.&lt;br /&gt;
&lt;br /&gt;
== Guías ==&lt;br /&gt;
&lt;br /&gt;
*[[Guía de empaquetamiento/Completa|'''Guía Completa''']]&lt;br /&gt;
*[[Guía de empaquetamiento/ManualDebdiff|'''Crear Debdiffs''']]&lt;br /&gt;
*[http://www.youtube.com/watch?v=VyEl3w7SFK4 Aprender crear paquetes deb (el primero de 3 vídeos en inglés)]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento</id>
		<title>Guía de empaquetamiento</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento"/>
				<updated>2008-07-04T14:51:45Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Guías */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al espacio wiki de la Guía de Empaquetamiento. &lt;br /&gt;
&lt;br /&gt;
== Organización ==&lt;br /&gt;
&lt;br /&gt;
Toda la información relacionada con la creación de paquetes deb ha sido añadida aquí y dividida en partes más pequeñas para un mejor control.&lt;br /&gt;
&lt;br /&gt;
== Guías ==&lt;br /&gt;
&lt;br /&gt;
*[[Guía de empaquetamiento/Completa|'''Guía Completa''']]&lt;br /&gt;
*[http://www.youtube.com/watch?v=VyEl3w7SFK4 Aprender crear paquetes deb (el primero de 3 vídeos en inglés)]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento</id>
		<title>Guía de empaquetamiento</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento"/>
				<updated>2008-07-04T14:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Guías */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bienvenido al espacio wiki de la Guía de Empaquetamiento. &lt;br /&gt;
&lt;br /&gt;
== Organización ==&lt;br /&gt;
&lt;br /&gt;
Toda la información relacionada con la creación de paquetes deb ha sido añadida aquí y dividida en partes más pequeñas para un mejor control.&lt;br /&gt;
&lt;br /&gt;
== Guías ==&lt;br /&gt;
&lt;br /&gt;
*[[Guía de empaquetamiento/Completa|'''Guía Completa''']]&lt;br /&gt;
*[http://www.youtube.com/watch?v=VyEl3w7SFK4 Aprender a ser un MOTU (el primero de 3 vídeos en inglés)]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-27T12:12:29Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: Vuelvo después del fin de semana (si alguien puede darle un poco de formato a la guía estaría bien :D )&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requerimientos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Empaquetado =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Otros =====&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando módulos Python con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetado avanzado ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Creando más de un paquete binario ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando librerías compartidas ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Librerías compartidas ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Errores comunes ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Archivos de ejemplo dh-make ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Abusando de archivos ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Cambiando el tarball original ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Soluciones =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Consejos =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Información de Copyright ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Paquetes de referencia ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Sistema de parches ==&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
== Archivos complementarios ==&lt;br /&gt;
&lt;br /&gt;
== Recetas ==&lt;br /&gt;
&lt;br /&gt;
== Apéndice ==&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Archivo:Motu-es-mugshot.png</id>
		<title>Archivo:Motu-es-mugshot.png</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Archivo:Motu-es-mugshot.png"/>
				<updated>2008-06-27T11:01:23Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/VirtualBox</id>
		<title>VirtualBox</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/VirtualBox"/>
				<updated>2008-06-27T09:54:11Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nota|Se ha sugerido descentralizar el contenido de este artículo en varios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{software&lt;br /&gt;
| nombre = VirtualBox&lt;br /&gt;
| logo = VBoxLogo.png &lt;br /&gt;
| captura = PantallazoVirtualbox.jpg&lt;br /&gt;
| pie = VirtualBox virtualizando Windows Xp sobre Ubuntu&lt;br /&gt;
| desarrollador = InnoTek&lt;br /&gt;
| versión_estable = [http://www.virtualbox.org/wiki/Changelog 1.6.2]&lt;br /&gt;
| fecha_versión_estable = 6 de junio de 2008&lt;br /&gt;
| género = [[:Categoría:máquinas virtuales|Máquina virtual]]&lt;br /&gt;
| licencia = [[w:software no libre|privativa]] &amp;lt;br /&amp;gt; [[w:software libre|libre]] ([[w:GNU GPL|GPL]])&lt;br /&gt;
| español = Sí&lt;br /&gt;
| web = [http://www.virtualbox.org/ www.virtualbox.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''VirtualBox''' es una [[w: máquina virtual| máquina virtual]]. Para entender este concepto es aconsejable leer el artículo que trata sobre [[Virtualizaci%C3%B3n|virtualización]].&lt;br /&gt;
&lt;br /&gt;
A la hora de afrontar la '''virtualización''' de un sistema operativo es importante definir muy claramente lo que es el sistema invitado y lo que es el sistema anfitrión:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* '''Sistema (Operativo) Anfitrión: '''Es el sistema operativo donde tendremos instalado el programa VirtualBox que nos permitirá ejecutar otro sistema operativo encima y simultáneamente.&lt;br /&gt;
&lt;br /&gt;
:::Ejemplo: Ejecutar Windows sobre '''Ubuntu''' (nuestro sistema operativo es ubuntu y dentro de él ejecutamos un Windows)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:* '''Sistema (Operativo) Invitado: '''Es el sistema operativo que instalamos encima del anterior con la ayuda de VirtualBox.&lt;br /&gt;
&lt;br /&gt;
:::Ejemplo: Ejecutar '''Windows''' sobre Ubuntu (o sea que en este caso el &amp;quot;intruso&amp;quot; es Windows ;))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear: right; float: right; display: table;&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Versiones ==&lt;br /&gt;
&lt;br /&gt;
Como paso previo a virtualizar algún sistema operativo bajo Ubuntu, veremos las dos versiones que hay y las diferencias entre ellas.&lt;br /&gt;
&lt;br /&gt;
''VirtualBox OSE (Open Source Edition)''&lt;br /&gt;
&lt;br /&gt;
Como bien indica su nombre es la versión de código abierto, distribuida bajo la licencia GPL. Es la que vamos a encontrar en los repositorios oficiales de Ubuntu junto al módulo que necesitamos precompilado. La carencia más significativa (se citan más abajo las diferencias) respecto a la versión PUEL es el soporte USB.&lt;br /&gt;
&lt;br /&gt;
''VirtualBox PUEL (Personal use and evaluation license)''&lt;br /&gt;
&lt;br /&gt;
Únicamente gratuita para un uso personal y de evaluación. Podemos obtener los binarios precompilados de la [http://www.virtualbox.org página oficial] del proyecto, o bien [[repositorios|agregando los repositorios]] oficiales de VirtualBox para instalarla mediante [[Synaptic]] o equivalentes. Las diferencias, que pueden encontrarse detalladamente [http://www.virtualbox.org/wiki/Editions aquí], son:&lt;br /&gt;
&lt;br /&gt;
* Servidor Remote Display Protocol (RDP)&lt;br /&gt;
* Soporte USB&lt;br /&gt;
* USB sobre RDP &lt;br /&gt;
* Iniciador iSCSI&lt;br /&gt;
&lt;br /&gt;
Para nuestro propósito elegiremos la versión OSE que funciona exactamente igual (hablando de rendimiento) que la versión PUEL. En el caso de elegir la segunda, los pasos a seguir son los mismos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sistemas Operativos que nos permite Virtualizar ==&lt;br /&gt;
&lt;br /&gt;
Virtualbox nos permite en principio crear una máquina virtual para ejecutar los siguientes sistemas operativos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* DOS&lt;br /&gt;
::* Windows 3.1&lt;br /&gt;
::* Windows 95&lt;br /&gt;
::* Windows 98&lt;br /&gt;
::* Windows NT 4&lt;br /&gt;
::* Windows Me&lt;br /&gt;
::* Windows 2000&lt;br /&gt;
::* Windows XP&lt;br /&gt;
::* Windows Server 2003&lt;br /&gt;
::* Windows Vista&lt;br /&gt;
::* OS/2 Warp 3&lt;br /&gt;
::* OS/2 Warp 4&lt;br /&gt;
::* OS/2 Warp 4.5&lt;br /&gt;
::* Linux 2.2&lt;br /&gt;
::* Linux 2.4&lt;br /&gt;
::* Linux 2.6&lt;br /&gt;
::* FreeBSD&lt;br /&gt;
::* OpenBSD&lt;br /&gt;
::* NetBSD&lt;br /&gt;
::* Netware&lt;br /&gt;
::* Solaris&lt;br /&gt;
::* L4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A pesar de ello, para estar a la última en cuanto a compatibilidad, funcionalidad, etc. de Virtualbox, tenemos el siguiente [http://www.virtualbox.org/wiki/Guest_OSes enlace] (en inglés, aunque no hay que entender nada más que el código de colores), donde se nos muestra una tabla actualizada de '''sistemas operativos invitados''' en la que figura la efectividad con que se virtualizan con Virtualbox. El rango de colores de las filas es:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:::* Verde: Funcionamiento perfecto y además tiene GuestAdditions.&lt;br /&gt;
:::* Ámbar: Funcionamiento parcial pueden haber complicaciones o características no funcionales) y además puede tener GuestAdditions o puede que no.&lt;br /&gt;
:::* Amarillo:  Funciona, pero no hay GuestAdditions para ese sistema operativo.&lt;br /&gt;
:::* Rojo: No funciona&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Las filas marcadas con asteriscos contienen información proporcionada por usuarios y que aún no ha sido verificada por Innotek.&lt;br /&gt;
&lt;br /&gt;
No nos debemos dejar llevar a malas interpretaciones:&lt;br /&gt;
&lt;br /&gt;
:Ejemplo: En la tabla aparecen Ubuntu 7.04 Server (servidor) y Ubuntu 7.10 (servidor) de color rojo. Esto no indica que no podamos instalar VirtualBox en ellos, si no que si intentamos instalar un Ubuntu 7.04 Server encima de otros sistema operativo (sistema operativo anfitrión), la virtualización no funcionará, que es algo independiente de si podemos instalar VirtualBox en Ubuntu 7.04 Server para virtualizar otro sistema operativo (como por ejempo un Windows).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|'''Para usuarios principiantes:''' Este sistema de clasificación por colores puede confundirnos si somos nuevos en esto de Ubuntu y la Virtualización. Se trata meramente de una ayuda para usuarios más avanzados que quieran saber hasta qué punto se virtualiza eficientemente un sistema operativo sobre VirtualBox, pero no hay que obsesionarse con ello. La mayoría de usuarios principiantes virtualiza Windows XP, 2000 y Vista, y sólo hay que saber que la virtualización de estos sistemas operativos (invitados) es 100% eficiente.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación ==&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox OSE ===&lt;br /&gt;
&lt;br /&gt;
Podemos encontrar esta versión dentro de los repositorios la versión 7.10 de Ubuntu llamada Gutsy Gibbon.&lt;br /&gt;
&lt;br /&gt;
Así que simplemente [[instalar aplicaciones|instalamos]] el paquete '''virtualbox-ose''' del repositorio ''?'' de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Para otras versiones de Ubuntu utilizar la siguiente parte&lt;br /&gt;
&lt;br /&gt;
=== VirtualBox PUEL ===&lt;br /&gt;
&lt;br /&gt;
Podemos instalarlo de dos formas:&lt;br /&gt;
&lt;br /&gt;
* '''Mediante un Paquete precompilado .deb'''&lt;br /&gt;
* '''Mediante Synaptic/APT-GET/Aptitude (recomendado)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Mediante un Paquete Precompilado .deb ====&lt;br /&gt;
&lt;br /&gt;
Primero tenemos que [http://www.virtualbox.org/wiki/Downloads descargar el .deb de VirtualBox] de la web oficial (en este caso, para Ubuntu). Una vez descargado (en este caso descargaremos el archivo en el escritorio), nos tendremos que ir al directorio dónde está el fichero descargado e instalarlo con el comando '''''dpkg''''' en un terminal:&lt;br /&gt;
 dpkg  -i nombredelarchivo.deb&lt;br /&gt;
&lt;br /&gt;
También podemos [[Instalar_aplicaciones_descargadas|instalar el .deb]] con la aplicación gráfica de instalación de paquetes .deb de Ubuntu: '''Gdebi'''.&lt;br /&gt;
&lt;br /&gt;
Puede que tengamos que instalar algunas librerías (dependencias) como: ''libqt3-mt, libxalan110 y libxerces27'', pero en todo caso, si tenemos cualquier otro problema de dependencias el programa detendrá la instalación y nos las comunicará para que las podamos instalar nosotros. Esto añade una dificultad extra a este sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|'''''Nota para nivel más avanzado:''''' Otra desventaja de este sistema de instalación es que no podremos tener al día nuestra versión de Virtualbox a través del actualizador del sistema de Ubuntu, ya que no hemos modificado los repositorios.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Mediante APT ====&lt;br /&gt;
&lt;br /&gt;
Este método es el mejor sistema y el más sencillo. &lt;br /&gt;
&lt;br /&gt;
'''Primero,''' añadiremos el repositorio de Virtualbox correspondiente a nuestra versión de Ubuntu a nuestra lista de repositorios. Para saber el repositorio que nos corresponde podemos obtenerlo de [http://www.virtualbox.org/wiki/Downloads esta web de Virtualbox]. &lt;br /&gt;
&lt;br /&gt;
  Ejemplo: ''deb http://www.virtualbox.org/debian feisty non-free''  (repositorio para Feisty)&lt;br /&gt;
&lt;br /&gt;
Una vez copiada la linea del repositorio que nos corresponda procederemos a añadirla en nuestro sources.list a través de un terminal:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
'''Segundo,''' descargaremos la '''clave pública''' para [[apt-secure]] en el siguiente [http://www.virtualbox.org/debian/innotek.asc enlace] para luego añadirla con el comando:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-key add innotek.asc&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Tercero''', actualizaremos la lista de repositorios y nuestra distribución antes de realizar cualquier instalación.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get update   --------&amp;gt; actualizamos la lista de repositorios&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get dist-upgrade ----&amp;gt; Actualizamos los paquetes de nuestra distribución&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cuarto,''' procedemos a instalar VirtualBox con el gestor de paquetes que queramos: Synaptic, apt-get o aptitude, dependiendo de qué sistema nos guste más.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|'''''Nota para Nivel más Avanzado:''''' La ventaja de seguir este método es que las dependencias las soluciona el propio gestor de paquetes, cosa que no ocurre con el método anterior y que además el actualizador de ubuntu se encarga de avisarmos de nuevas actualizaciones.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configurar permisos de usuario para usar VirtualBox ==&lt;br /&gt;
&lt;br /&gt;
Antes de arrancar el programa es interesante que realicemos ciertos cambios/comprobaciones para asegurarnos que nuestro usuario tiene privilegios sobre todo lo que precise para que Virtualbox nos trabaje a la perfección. este paso nos ahorrará muchos potenciales dolores de cabeza posteriores.&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Primeramente debemos agregar a nuestro usuario en el grupo de usuarios '''vboxusers'''. Para ello tenemos que ir a:&lt;br /&gt;
&lt;br /&gt;
:'''''Sistema -&amp;gt; Administración -&amp;gt; Usuarios y Grupos'''''&lt;br /&gt;
&lt;br /&gt;
Veremos la siguiente ventana (fig.1):&lt;br /&gt;
|[[Imagen:Vbox001.jpg|thumb|''Fig.1'' Ventana de Usuarios y Grupos]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Seguidamente haremos click en '''Administrar Grupos'''. Nos abrirá otra ventana con la lista de grupos de usuarios. Tenemos que seleccionar el grupo '''''vboxusers''''' (fig.2):&lt;br /&gt;
| [[Imagen:Vbox002.jpg|thumb|''Fig.2'' Ventana de Configuración de Grupos de Usuarios]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Y apretamos en el botón Propiedades. Nos aparecerá la ventana de configuración del grupo '''''vboxusers''''' (fig.3).&lt;br /&gt;
Debemos seleccionar los usuarios (el nuestro y el de otro usuario del sistema que sepamos que va a usar VirtualBox) que queremos que accedan a VirtualBox. Una vez seleccionados, apretamos en &amp;quot;Aceptar&amp;quot; y listos.&lt;br /&gt;
| [[Imagen:Vbox003.jpg|thumb|''Fig.3'' Ventana de Propiedades del Grupo vboxusers]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Crear una Máquina Virtual ==&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Para abrir el programa hemos de ir a:&amp;lt;br&amp;gt;&lt;br /&gt;
:'''''Aplicaciones -&amp;gt; Herramientas del Sistema -&amp;gt; Innotek VirtualBox'''''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
con lo que nos aparecerá la siguiente ventana ''(fig.4)'':&lt;br /&gt;
| [[Imagen:Vbox004.jpg|thumb|''Fig.4'' Ventana Principal de Innotek VirtualBox]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| En la imagen anterior se ve una máquina virtual creada, pero en vuestro caso no será así. Para crear una máquina virtual tendremos que pulsar en &amp;quot;Nueva&amp;quot; o teclear ''Ctrl + N'', como puede verse en la imagen anterior.&lt;br /&gt;
&lt;br /&gt;
Nos aparecerá una nueva ventana en la que aparece el siguiente asistente ''(fig.5)'':&lt;br /&gt;
&lt;br /&gt;
| [[Imagen:Vbox005.jpg|thumb|''Fig.5'' Ventana del Asistente para la Creación de una Nueva Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Ahora solo tendremos que seguir las instrucciones del asistente pulsando encima del botón ''&amp;quot;Siguiente&amp;quot;''. Nos aparecerá la siguiente ventana, en la que tenemos que poner el nombre de nuestra nueva máquina virtual. Cualquiera vale. En el desplegable hay que seleccionar el sistema operativo correspondiente. En el caso que se muestra es un Windows XP ''(fig.6)''.&lt;br /&gt;
| [[Imagen:Vbox006.jpg|thumb|''Fig.6'' Ventana del Asistente para la Creación de una Nueva Máquina Virtual donde poner Nombre de la Máquina Virtual y el tipo de Sistema Operativo que será]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| La siguiente ventana nos pide que decidamos la cantidad de memoria RAM que vamos a reservar a la máquina virtual. Inicialmente nos ofrece 192Mbytes. Con 192Mbytes, un Windows XP virtualizado casi vacío (esto es sin antivirus, antispyware, etc.) funciona perfectamente. Vosotros mismos tenéis que decidir cuánta Ram podéis sacrificar y cuánta vais a necesitar. De todos modos podéis cambiar estos valores más adelante. Más abajo se muestra cómo ''(fig.7)''.&lt;br /&gt;
| &lt;br /&gt;
| [[Imagen:Vbox007.jpg|thumb|''Fig.7'' Ventana del Asistente para la Administración de Memoria Base de la Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Tras seleccionar la memoria dedicada a nuestra nueva máquina virtual, pulsamos en ''&amp;quot;Siguiente&amp;quot;'' y nos aparecerá una pantalla que nos pide que asignemos un disco virtual para nuestra máquina. Podemos elegir entre crear un disco o usar uno creado por nosotros previamente. En nuestro caso crearemos un nuevo disco ''(fig.8'').&lt;br /&gt;
| [[Imagen:Vbox008.jpg|thumb|''Fig.8'' Ventana del Asistente para Asignación de un Disco Duro Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Si decidimos crear un disco virtual nuevo nos aparece el asistente de creación de Discos Virtuales ''(fig.9)''.&lt;br /&gt;
| [[Imagen:Vbox009.jpg|thumb|''Fig.9'' Ventana del Asistente para Creación de un Disco Duro Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Si pulsamos en ''&amp;quot;siguiente&amp;quot;'' nos aparece una ventana que nos hace decidir entre dos opciones ''(fig.10)'': &lt;br /&gt;
* Crear una imagen de ''disco de expansión dinámica'' (disco virtual que expande su espacio dinámicamente a medida que se va llenando)&lt;br /&gt;
* Crear una imagen de tamaño fijo&lt;br /&gt;
| [[Imagen:Vbox010.jpg|thumb|''Fig.10'' Ventana del Asistente para determinar el Tipo de Imagen de Disco Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota| Muchos usuarios optan por la primera opción, ya que permite instalar programas sin límite de espacio. El problema de esto es que si no se va con cuidado uno puede llenar todo su disco físico, con los consiguientes problemas. Para evitarlo es interesante mantener control del espacio que ocupa nuestra máquina virtual de vez en cuando y usar como directorio de almacenaje el directorio compartido con el sistema anfitrión: Ubuntu. Más abajo se trata este tema. En este artículo se empleará la opción de Imagen de Expansión Dinámica.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Seleccionaremos la opción de Imagen de Expansión Dinámica y pulsaremos en ''&amp;quot;Siguiente&amp;quot;'', por lo que nos aparecerá una ventana para ponerle nombre a la imagen del disco virtual, para ubicarla en nuestro PC y para asignarle el tamaño que ésta le comunicará que tiene al sistema. Este valor es puramente teórico, ya que a la práctica varía en función del uso que le demos a nuestra máquina virtual ''(fig.11)''.&lt;br /&gt;
| [[Imagen:Vbox011.jpg|thumb|''Fig.11'' Ventana del Asistente para determinar el Tamaño y Ubicación del Disco Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| De todos modos, el asistente lo va explicando todo. Es muy intuitivo. Una vez decididos los parámetros, pulsaremos en ''&amp;quot;Siguiente&amp;quot;'' y se nos muestra un resumen de las características de nuestro nuevo disco virtual ''(fig.12)''.&lt;br /&gt;
| [[Imagen:Vbox012.jpg|thumb|''Fig.12'' Ventana de Resumen de Datos del Disco Virtual de nuestra Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Si pulsamos &amp;quot;Terminar&amp;quot; pasamos a la ventana final del asistente de creación de la nueva máquina virtual de VirtualBox ''(fig.13)''.&lt;br /&gt;
| [[Imagen:Vbox013.jpg|thumb|''Fig.13'' Ventana de Resumen de Datos de nuestra Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
| Una vez pulsamos en &amp;quot;Terminar&amp;quot; nos aparece la ventana de VirtualBox con la nueva maquina virtual creada ''(fig.14)''.&lt;br /&gt;
&lt;br /&gt;
Ahora sólo queda configurarla como queramos.&lt;br /&gt;
| [[Imagen:Vbox014.jpg|thumb|''Fig.14'' Ventana Principal de Innotek VirtualBox con la nueva Máquina Virtual que hemos creado]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Configurar Máquina Virtual ==&lt;br /&gt;
&lt;br /&gt;
Antes de instalar nuestro nuevo sistema operativo a virtualizar debemos &amp;quot;afinar&amp;quot; nuestra nueva máquina virtual.&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Para ello debemos seleccionar la nueva máquina virtual que acabamos de crear y pulsaremos en ''&amp;quot;Configuración&amp;quot;'' (fig.15), de forma que nos aparecerá una ventana con las distintas posibilidades de configuración de nuestra máquina virtual.&lt;br /&gt;
|[[Imagen:Vbox015.jpg|thumb|''Fig.15'' Imagen mostrando el botón para acceder a la ventana de Configuración de nuestra Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuración General ===&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|En la sección &amp;quot;General&amp;quot; (fig.16) podemos determinar aspectos como la memoria de la tarjeta gráfica que queremos dedicar (como ya se mencionó antes), el orden de booteo/arranque de la máquina (igual que las BIOS de nuestros PCs), etc. Es recomendable no alterar nada a no ser que sea estrictamente necesario (juegos, necesidad de más recursos, etc.). La configuración base ya tiene los parámetros más adecuados. En cualquier caso, siempre podremos volver aquí en cualquier momento para alterar estos parámetros aunque ya tengamos instalado nuestro sistema operativo invitado.&lt;br /&gt;
&lt;br /&gt;
A pesar de lo dicho, podemos jugar un poco con estas opciones para aprender más sobre ellas, ya que todas las opciones son muy intuitivas.&lt;br /&gt;
&lt;br /&gt;
La secuencia de Booteo ya está por defecto en disquete - CD-Rom - HDD - Red, que es la más adecuada, pero podemos alterarla si lo precisamos.&lt;br /&gt;
|[[Imagen:Vbox016.jpg|thumb|''Fig.16'' Sección &amp;quot;General&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuración de la Unidad de CD/DVD-Rom ===&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|En esta sección tendremos que seleccionar el dispositivo de CD/DVD que vayamos a usar. La unidad de la imagen de ejemplo (fig.17) es una unidad de DVD ubicada en /dev/cdrom (ya que Virtualbox está corriendo sobre Ubuntu),pero en otros PCs puede ser /dev/cdrom o /dev/cdrom0 u otra ubicación si corremos Virtualbox sobre otros sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto ya tendremos el CD/DVD-Rom habilitado para que cuando arranquemos nuestra máquina virtual podamos arrancar desde CD/DVD e instalar nuestro sistema operativo invitado (ejemplo: Windows virtualizado sobre Ubuntu). &lt;br /&gt;
|[[Imagen:Vbox017.jpg|thumb|''Fig.17'' Sección &amp;quot;CD/DVD-Rom&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{nota | Podemos hacer lo mismo con la unidad de 3'5 (disquetera) si vamos a usar un disquete de arranque (para virtualizar un Windows 98 por ejemplo).}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuración de Audio ===&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Para que nos funcione el sonido tendremos habilitarlo haciendo un &amp;quot;click&amp;quot; sobre el &amp;quot;checkbox&amp;quot; correspondiente en '''Controlador de Audio Anfitrión''' y seleccionar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Controlador Audio ALSA''' si nos hallamos ejecutando Virtualbox sobre Ubuntu 7.10 o inferiores, que emplean [[ALSA]] como servidor de sonido(fig.18).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Pulseadio''' si nos hallamos ejecutando Virtualbox sobre Ubuntu 8.04 o superiores (y también si empleamos 7.10 con [[Pulseaudio]] en lugar de [[ALSA]]).&lt;br /&gt;
|[[Imagen:Vbox018.jpg|thumb|''Fig.18'' Sección &amp;quot;Audio&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual mostrando la configuración correcta para un sistema anfitrión Ubuntu]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota|Si al iniciar nuestro sistema invitado nos aparece el siguiente mensaje:&lt;br /&gt;
 &lt;br /&gt;
 Some audio devices (PCM_in, PCM_mic) could not be opened. Guest applications generating audio output or depending on &lt;br /&gt;
 audio input may hang. Make sure  your host audio device is working properly. Check the logfile for error messages of the audio subsystem..&lt;br /&gt;
 &lt;br /&gt;
 ID Error: HostAudioNotResponding&lt;br /&gt;
 Gravedad: Aviso&lt;br /&gt;
&lt;br /&gt;
significa que no hemos seleccionado el controlador de sonido adecuado. Seguramente hayamos seleccionado ALSA en lugar de Pulseaudio.}}&lt;br /&gt;
&lt;br /&gt;
=== Configuración de la Conexión a Red ===&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Si queremos acceder a internet o a cualquier otra red desde nuestro sistema invitado tendremos que habilitar nuestro adaptador de red (tarjeta de red) habilitado. Nótese que podemos trabajar con más de un adaptador de red en función de las tarjetas que temgamos instaladas en nuestro ordenador. Como lo más normal es tener una sola tarjeta, trabajaremos con la pestaña del ''&amp;quot;Adaptador 0&amp;quot;'' (fig.19). &lt;br /&gt;
&lt;br /&gt;
La configuración que deberemos poner será ''&amp;quot;Conectar a NAT&amp;quot;'', de modo que la configuración de red dependa del S.O. anfitrión: Ubuntu Linux. Esto no sólo será más cómodo para nosotros, si no que nos evita problemas de conexión, ya que entonces será 100% dependiente de la configuración de red del sistema anfitrión, por lo que solucionar problemas de conexión se simplifica enormemente y además se reducen eslabones donde puedan ocurrir fallos. Consecuentemente, si nos falla la conexión de red ya sabremos que nunca será por la configuración de red de nuestro sistema invitado. &lt;br /&gt;
&lt;br /&gt;
La dirección MAC es generada automáticamente para que difiera de la real en la máquina virtual y el sistema anfitrión. Esta MAC no es necesario modificarla a menos que nos surjan problemas de MACs repetidas en una intranet.&lt;br /&gt;
|[[Imagen:Vbox019.jpg|thumb|''Fig.19'' Sección &amp;quot;Red&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual mostrando la configuración correcta de los parámetros para el Adaptador de Red 0]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{nota | Tener la red habilitada puede dar problemas a veces en la instalación de Windows, haciendo que ésta se bloquee. Por eso, para evitarlo es aconsejable dejar la red deshabilitada inicialmente hasta haber instalado Windows. De este modo seguro que no habrá problemas.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuración de los Dispositivos USB ===&lt;br /&gt;
&lt;br /&gt;
Como hemos visto más arriba, según la versión de Virtualbox, tendremos soporte para USB o no.&lt;br /&gt;
&lt;br /&gt;
* Virtualbox OSE: No tiene soporte para USB, pero puede conseguirse.&lt;br /&gt;
&lt;br /&gt;
* Virtualbox PUEL: Con soporte para USB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Configuración de los Dispositivos USB en Virtualbox OSE ====&lt;br /&gt;
&lt;br /&gt;
Como se ha mencionado antes, la versión de Virtualbox OSE no tiene soporte para USB. Para conseguirlo habrá que hacer una serie de maniobras. Primero tendremos que abrir un terminal y escribir:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/init.d/mountdevsubfs.sh&lt;br /&gt;
&lt;br /&gt;
Esto nos abrirá un archivo que deberemos editar. Tendremos que buscar el siguiente texto (buscaremos ''&amp;quot;Magic to make /proc/bus/usb work&amp;quot;'':&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Magic to make /proc/bus/usb work&lt;br /&gt;
 #&lt;br /&gt;
 #mkdir -p /dev/bus/usb/.usbfs&lt;br /&gt;
 #domount usbfs &amp;quot;&amp;quot; /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644&lt;br /&gt;
 #ln -s .usbfs/devices /dev/bus/usb/devices&lt;br /&gt;
 #mount --rbind /dev/bus/usb /proc/bus/usb&lt;br /&gt;
&lt;br /&gt;
descomentando (eso es eliminando el símbolo de la almohadilla &amp;quot;#&amp;quot;) determinadas líneas para que quede de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # Magic to make /proc/bus/usb work&lt;br /&gt;
 #&lt;br /&gt;
 mkdir -p /dev/bus/usb/.usbfs&lt;br /&gt;
 domount usbfs &amp;quot;&amp;quot; /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644&lt;br /&gt;
 ln -s .usbfs/devices /dev/bus/usb/devices&lt;br /&gt;
 mount --rbind /dev/bus/usb /proc/bus/usb&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto tendremos que reiniciar nuestro sistema anfitrión para que los cambios tengan efecto. Si al iniciar la máquina virtual nos aparece el siguiente error:&lt;br /&gt;
&lt;br /&gt;
    Not permitted to open the USB device, check usbfs options&lt;br /&gt;
&lt;br /&gt;
habrá que editar el siguiente archivo:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/udev/rules.d/40-permissions.rules&lt;br /&gt;
&lt;br /&gt;
Y modificar:&lt;br /&gt;
&lt;br /&gt;
 SUBSYSTEM==&amp;quot;usb_device&amp;quot;, MODE=&amp;quot;0664&amp;quot;&lt;br /&gt;
&lt;br /&gt;
por esto:&lt;br /&gt;
&lt;br /&gt;
 SUBSYSTEM==&amp;quot;usb_device&amp;quot;, MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Configuración de los Dispositivos USB en Virtualbox PUEL ====&lt;br /&gt;
&lt;br /&gt;
Para poder usar dispositivos USB en un sistema virtualizado que se esté ejecutando sobre un sistema anfitrión GNU/Linux como Ubuntu, debemos seguir dos pasos:&lt;br /&gt;
&lt;br /&gt;
# Hacer que VirtualBox sea capaz de leer la carpeta de dispositivos USB&lt;br /&gt;
# Añadir los dispositivos correspondientes en la ventana de configuración de dispositivos USB de nuestra máquina virtual&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota | En un sistema Windows no es preciso hacer que VirtualBox sea capaz de leer la carpeta de dispositivos USB, ya que ya estamos trabajando con permisos de administrador y por tanto Virtualbox ya puede ver los dispositivos USB sin necesidad de tocar nada. Por ello, pasaríamos directamente a pasar al siguiente.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Hacer que VirtualBox sea capaz de leer la Carpeta de Dispositivos USB =====&lt;br /&gt;
&lt;br /&gt;
Para ello lo primero será cerrar VirtualBox para poder hacer los ajustes debidamente a través de terminal. Una vez hecho esto, abriremos y escribiremos:&lt;br /&gt;
&lt;br /&gt;
 gksudo gedit /etc/udev/rules.d/40-permissions.rules&lt;br /&gt;
&lt;br /&gt;
Con lo que se nos abrirá un archivo de texto donde tendremos que cambiar la línea:&lt;br /&gt;
&lt;br /&gt;
    SUBSYSTEM==”usb_device”, MODE=”0664&amp;quot;&lt;br /&gt;
&lt;br /&gt;
por:&lt;br /&gt;
&lt;br /&gt;
    SUBSYSTEM==”usb_device”, MODE=”0666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Una vez realizado este cambio, guardamos, cerramos el archivo y reiniciamos el ordenador para que cargue las nuevas reglas de permisos de nuestro sistema que permitirá a Virtualbox leer la carpeta de dispositivos USB.&lt;br /&gt;
&lt;br /&gt;
===== Añadir Dispositivos USB a nuestra Máquina Virtual =====&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Lo primero a hacer es acceder a la sección USB de la ventana de configuración de nuestra máquina virtual. Llegados a esta sección tendremos que ''&amp;quot;Habilitar el controlador USB&amp;quot;'' haciendo click sobre el checkbox correspondiente (fig.20).&lt;br /&gt;
|[[Imagen:Vbox020.jpg|thumb|''Fig.20'' Sección &amp;quot;USB&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual mostrando el checkbox para activar el controlador USB de nuestra máquina virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Una vez hecho esto, ya podremos agregar los dispositivos USB que queramos (impresoras, pendrives, etc.). Todo lo que no agreguemos aquí, nuestro sistema invitado no lo verá. Para agregar nuevos dispositivos sólo hay que pulsar en el botón de ''“agregar desde”'' o presionar las teclas Alt+Insert (fig.21).&lt;br /&gt;
&lt;br /&gt;
Nos saldrá una lista de dispositivos y sólo tendremos que “clicar” encima de los que queramos agregar.&lt;br /&gt;
|[[Imagen:Vbox021.jpg|thumb|''Fig.21'' Sección &amp;quot;USB&amp;quot; de la ventana de Configuración de nuestra Máquina Virtual mostrando el botón &amp;quot;Agregar desde&amp;quot; para añadir dispositivos USB a nuestra máquina virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota | Cuando tenemos agregado un dispositivo USB en nuestra máquina virtual, mientras ésta está encendida, tiene a veces dicho dispositivo secuestrado. Es por ello que algunos dispositivos como los ratones usb no hay que agregarlos, ya que si no, son secuestrados (a veces) por el sistema operativo invitado y ya no puedes usarlos en el sistema operativo anfitrión aunque se intente liberar el control del ratón mediante el sistema estándar. De todos modos, el ratón, independientemente de si es USB o PS/2 ya es capturado como ratón a través del propio VirtualBox sin que pase esto. Lo aconsejable por tanto es agregar solamente dispositivos como pendrives, impresoras, escáneres, etc.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalación de un sistema operativo invitado ==&lt;br /&gt;
&lt;br /&gt;
En el apartado en el que se trataba el tema de crear una máquina virtual se mostraba cómo crear una máquina Windows XP, aunque en Virtualbox podemos crear una máquina para muchos otros sistemas operativos. En este caso lo realizaremos con Windows XP. Para ello tenemos que poner el Cd-Rom de Windows en la unidad CD/DVD de nuestro ordenador y seleccionar la máquina virtual que hemos creado antes. &lt;br /&gt;
&lt;br /&gt;
A continuación tenemos que pulsar el botón ''&amp;quot;Iniciar”'' o hacer doble click sobre la máquina en cuestión. La máquina creada arrancará primero desde disquete (si lo habéis habilitado antes), si no encuentra disquete buscará en el lector de Cds/Dvds y se iniciará la instalación de windows como si en una sesión de ordenador normal se tratara. El resto del proceso sería una instalación estándar de Windows.&lt;br /&gt;
&lt;br /&gt;
Es interesante saber que si se hace “click” con el ratón dentro de la ventana del sistema operativo invitado (Windows) el teclado y el ratón son capturados por ella y por tanto funcionarán sólo dentro de ella. Para devolver el control a nuestro sistema anfitrión (Ubuntu) tenemos que pulsar una vez la tecla ''CTRL derecha'' de nuestro teclado. Esta tecla es referida por Virtualbox como '''''Host''''' y será utilizada en combinación con otras para algunos atajos de teclado que nos pueden ser útiles. (ver sección de ''Combinaciones de Teclas'' más adelante).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{nota | Nótese que como se ha mencionado anteriormente, podemos instalar más de un tipo de sistema operativo en Virtualbox. Para ello sólo hay que seguir el proceso de instalación estándar desde CD del propio sistema operativo. También podemos realizar una instalación desde red, ya que la configuración de red depende de la máquina virtual y del sistema anfitrión, por lo que ya tenemos acceso a red desde antes de instalar un sistema operativo.}}&lt;br /&gt;
&lt;br /&gt;
== Añadir VboxGuestAdditions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''Guest Additions''' son complementos que al instalarse en nuestra recientemente creada máquina virtual le confieren a ésta un incremento en el rendimiento del sistema invitado, además de una mayor interoperatividad entre el sistema anfitrión (en nuestro caso Ubuntu Linux) y el sistema invitado (por el ejemplo anterior, Windows XP). Un ejemplo de ello es si queremos tener algún directorio compartido entre nuestra máquina virtual y el sistema anfitrión. Tener los VboxGuestAdditions instalados es requisito indispensable.&lt;br /&gt;
&lt;br /&gt;
Para instalar los VboxGuestAdditions podemos emplear dos sistemas:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* Mediante Barra de Menús de la Máquina Virtual (recomendado)&lt;br /&gt;
::* Mediante CD/DVD de Arranque (proceso lento)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mediante Barra de Menús de la Máquina Virtual ===&lt;br /&gt;
&lt;br /&gt;
Este proceso seguramente sea el más rápido y sencillo, y nos sirve para cualquier sistema operativo invitado (osea que es independiente de la plataforma a virtualizar). Antes de probar el sistema a través de CD/DVD de arranque es aconsejable darle una oportunidad a este método, y si encontramos algún problema, optar por el método a través de CD/DVD de arranque.&lt;br /&gt;
&lt;br /&gt;
El proceso es el siguiente:&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
:* Una vez encendido el sistema operativo invitado (en nuestro caso, Windows) iremos a la barra de menús de la ventana de nuestra máquina virtual VirtualBox y pulsaremos sobre “Dispositivos” (fig.22).&lt;br /&gt;
|[[Imagen:Vbox022.jpg|thumb|''Fig.22'' Vista de Windows en Máquina Virtual de Virtualbox en la que se ven los menús y entre ellos el de &amp;quot;dispositivos&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
:* Seleccionaremos la opción “Instalar GuestAdditions (Aplicaciones del anfitrión)...” y nos aparecerá un asistente de instalación al estilo Windows (“siguiente – siguiente – siguiente”). Si seguímos las instrucciones del asistente se nos instalarán los VboxGuestAdditions. Finalmente sólo nos quedará reiniciar la máquina virtual.&lt;br /&gt;
|[[Imagen:Vbox023.jpg|thumb|''Fig.23'' Vista del Asistente de Instalación de GuestAdditions de Virtualbox]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mediante CD/DVD de Arranque (proceso lento) ===&lt;br /&gt;
&lt;br /&gt;
Este proceso es más recomendable en caso improbable de que falle el método anterior. &lt;br /&gt;
&lt;br /&gt;
{| width=100%&lt;br /&gt;
|-&lt;br /&gt;
|Primero tenemos que abrir el programa VirtualBox, y seleccionamos ''“Configuración”'' para ir a la sección '''CD/DVD-ROM'''. En esta sección tenemos que asegurarnos que tenemos montada la unidad de CD/DVD, pero seleccionaremos ''“Archivo de Imagen ISO”''.&lt;br /&gt;
&lt;br /&gt;
Seguidamente emplearemos el botón de ''examinar'' que se puede ver a la derecha del campo texto (fig.24) para buscar el archivo de imagen '''''VboxGuestAdditions.iso'''''. Este archivo puede hallarse en dos posibles localizaciones en función del método de instalación que hayamos elegido en el apartado de instalación.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
::* '''Método de Descarga de .deb:''' La imagen .iso estará en:&lt;br /&gt;
&lt;br /&gt;
::::''/opt/VirtualBox-x.x.x/additions/VBoxGuestAdditions.iso'' (donde las “x” serían los números que indican nuestra versión de VirtualBox)&lt;br /&gt;
&lt;br /&gt;
::* '''Mediante APT:''' La imagen .iso estará en:&lt;br /&gt;
&lt;br /&gt;
::::''/usr/share/virtualbox/VBoxGuestAdditions.iso'' (como se dijo más arriba, es más sencillo hacerlo todo si elegíamos el método a través de un gestor de paquetes tipo APT-GET/Aptitude/Synaptic)&lt;br /&gt;
&lt;br /&gt;
|[[Imagen:Vbox024.jpg|thumb|''Fig.24'' Vista de la Ventana de Configuración CD/DVD de nuestra máquina virtual de Virtualbox (en este caso la dirección de las GuestAdditions es la correspondiente al método de instalación con gestor de paquetes apt-get/aptitude/Synaptic)]]&lt;br /&gt;
|-&lt;br /&gt;
|}    &lt;br /&gt;
 &lt;br /&gt;
     &lt;br /&gt;
==== Si el Sistema Invitado es Windows ====&lt;br /&gt;
&lt;br /&gt;
Tendremos iniciar nuestra máquina virtual y que cargue nuestro Windows virtualizado. Seguidamente entraremos en ''“Mi PC”'' e iremos a nuestra unidad de CD-Rom/Dvd-rom para hacer clic sobre el .exe que nos muestre. Nos aparecerá un asistente de instalación sencilla de Windows (siguiente-siguiente-siguiente).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Si el Sistema Invitado es GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Tendremos que bajarnos antes el compilador gcc , el make y los headers correspondintes a nuestro kernel. Para ello tendremos que abrir un terminal en el sistema invitado y escibir lo siguiente:&lt;br /&gt;
&lt;br /&gt;
 $ sudo aptitude install gcc-4.0 # elegir el gcc con el que este compilado vuestro kernel&lt;br /&gt;
 $ sudo aptitude install make&lt;br /&gt;
 $ sudo aptitude install linux-headers-`uname -r`&lt;br /&gt;
&lt;br /&gt;
Seguidamente, debemos decirle al sistema qué compilador de gcc usar:&lt;br /&gt;
&lt;br /&gt;
 $ sudo ln -s /usr/bin/gcc-4.0 /usr/bin/gcc&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, debemos mirar si el CD-rom está montado en el sistema (por su está en &amp;quot;auto&amp;quot; en fstab):&lt;br /&gt;
&lt;br /&gt;
 $ mount /dev/cdrom directorio _donde _queremos _que _se _monte (tenemos que tener este directorio creado anteriormente)&lt;br /&gt;
&lt;br /&gt;
Nos situaremos dentro del directorio donde esta montado el cdrom y escribiremos:&lt;br /&gt;
&lt;br /&gt;
 $ sudo ./VBoxlinuxAdditions.run&lt;br /&gt;
&lt;br /&gt;
'''Si no nos deja ejecutar el archivo por problemas de permisos,''' tendremos que copiar el archivo a cualquier carpeta de nusetro sistema (una buena opción es en nuestro escritorio) y darle permisos de ejecucion:&lt;br /&gt;
&lt;br /&gt;
 $ cp VBoxlinuxAdditions.run /home/nombre_de_usuario/Desktop&lt;br /&gt;
 $ cd /home/nombre_de_usuario/Desktop&lt;br /&gt;
 $ sudo chmod -R 777 VBoxlinuxAdditions.run  (con esta orden asignamos permisos de lectura, modificación y ejecución a cualquiera)&lt;br /&gt;
&lt;br /&gt;
Y ahora sí podremos hacer:&lt;br /&gt;
&lt;br /&gt;
 $ sudo ./VBoxlinuxAdditions.run&lt;br /&gt;
&lt;br /&gt;
Nota: Siempre que usemos el sistema de CD/DVD de Arranque para instalar GuestAdditions tendremos que regresar a la configuración de nuestra máquina virtual para dejar el CD/DVD montado como estaba originalmente o si no no podremos leer CD/DVD desde nuestro sistema operativo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #B1883E; background-color: #EBDAB5; margin: 0 auto 0 auto; width: 90%; padding: 5px 0 0 10px; -moz-border-radius: 8px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[Imagen:Clip.png]]&lt;br /&gt;
|'''Importante:'''&lt;br /&gt;
* Para instalar VBoxGuestAdditions es mejor tener ya nuestro sistema operativo invitado instalado (Windows, etc.)&lt;br /&gt;
* Una vez realizada la instalación de las GuestAdditions tenemos que reiniciar el sistema operativo virtualizado para hacer efectivos los cambios.&lt;br /&gt;
* Una vez realizada la instalación de las GuestAdditions tendremos que dejar el CD/DVD montado como estaba originalmente o si no no podremos leer CD/DVD desde nuestro sistema operativo invitado (fig.25).&lt;br /&gt;
|[[Imagen:Vbox017.jpg|thumb|''Fig.25'' Configuración CD/DVD que debemos dejar una vez realizada la instalación de GuestAdditions]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Combinaciones de teclas ==&lt;br /&gt;
&lt;br /&gt;
Las combinaciones de teclas más interesantes para usar en Virtualbox son:&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) :''' Para liberar el ratón y el teclado del sistema invitado y dar el control al sistema anfitrión.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + F :''' Para entrar o salir del modo pantalla completa.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + L :''' Para entrar o salir del seamless mode, un modo en el que se ve el sistema invitado maximizado, pero que no se ve el escritorio (a no ser que lo pidas explícitamente), si no sólo las ventanas de las aplicaciones y la barra de Windows/Linux. Este modo es un poco confuso. a mí no me agrada.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + A :''' Ajustar tamaño de ventana.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + G :''' Autoajustar la Ventana del anfitrión.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + SUPR. :''' Envía un CONTROL + ALT + SUPR. al sistema invitado (interesante si es Windows)&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + BACKSPACE :''' Envía un CONTROL + ALT + BACKSPACE al sistema invitado (interesante si es GNU/Linux)&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + S :''' Tomar una instantánea de la máquina virtual, como si apretáramos “Impr Pant”.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + I :''' Inhabilitar la Integración del ratón con la máquina virtual.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + R :''' Para reiniciar la máquina virtual. Es el famoso “reset” windowsero. seguro que más de uno lo usa alguna vez. algooooo&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + P :''' Para pausar la máquina virtual. Una ventaja si te está comiendo recursos en un momento en que necesitas todos los recursos de tu ordenador para el sistema anfitrión.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + H :''' Apagado ACPI de la máquina virtual.&lt;br /&gt;
&lt;br /&gt;
* '''CTRL(derecho) + Q :''' Cerrar la máquina virtual.&lt;br /&gt;
&lt;br /&gt;
De todos modos, tenéis los mismos accesos de forma gráfica en la barra de menús de la máquina virtual. En el extremo inferior derecho de la ventana de la máquina virtual tenéis iconos para controlar aspectos de vuestra máquina virtual y el botón que libera el ratón y el teclado del sistema invitado y da el control al sistema anfitrión (igual que Ctrl Derecho). (fig.26)&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Vbox026.jpg|center|''Fig.26'' Detalle de la esquina inferior derecha de la Máquina Virtual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podemos observar en la ventana de la máquina virtual que en el menú ''“Máquina”'' podemos pedirle a Virtualbox que nos abra el sistema operativo de la ventana a pantalla completa o '''''seamless mode'''''. Esta opción no es muy recomendable, porque aunque funciona bien, es mejor seleccionar la opción de pantalla completa y así poder tener control del sistema anfitrión (en nuestro caso Ubuntu) y del sistema invitado (Windows o el que sea). Además, este modo es más difícilmente reversible si no se sabe el comando de teclado (CTRL + L), ya que elimina botones de menú u otros accesos (si no se sabe esto la primera vez que se activa, no sabremos qué hacer para revertirlo). Este menú incluye otras opciones de visualización y control de la máquina virtual. Podemos jugar con estas opciones, ya que son más fácilmente reversibles que &amp;quot;seamless mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Añadir un directorio compartido con sistema anfitrión ==&lt;br /&gt;
&lt;br /&gt;
Para poder compartir una carpeta entre el sistema anfitrión (en nuestro caso seguramente Ubuntu) y el sistema invitado (Windows, FreeBSD, etc.) '''es indispensable''' tener instalados los ''VboxGuestAdditions''.&lt;br /&gt;
&lt;br /&gt;
Para ello deberemos crear primero la carpeta compartida en nuestro sistema anfitrión (Ubuntu seguramente) y luego llamarla desde nuestro sistema invitado (Windows, FreeBSD,...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Crear carpeta compartida en nuestro sistema anfitrión ===&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Para crear una carpeta compartida en nuestro sistema anfitrión lo mejor y más fácil es hacerlo desde el propio VirtualBox. Para ello tendremos que seleccionar la máquina virtual que hayamos creado e ir a ''“Configuración”''.&lt;br /&gt;
&lt;br /&gt;
En la Sección ''“Directorios Compartidos”'' nos aparecerá un cuadro con los directorios compartidos entre esa máquina virtual y el sistema anfitrión (fig.26).&lt;br /&gt;
&lt;br /&gt;
| [[Imagen:Vbox027.jpg|thumb|''Fig.27'' Vista de la sección &amp;quot;Directorios Compartidos&amp;quot; en la Configuración de nuestra máquina virtual]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Tenemos que apretar la tecla ''“Insert” (Ins)'' de nuestro teclado o hacer click en el botón de agregar nuevo directorio compartido (en la figura 28, botón de arriba a la derecha que se ha resalatado en rojo).&lt;br /&gt;
&lt;br /&gt;
| [[Imagen:Vbox028.jpg|thumb|''Fig.28'' Vista de la sección &amp;quot;Directorios Compartidos&amp;quot; en la Configuración de nuestra máquina virtual en la que aparece resaltado en rojo el boton de &amp;quot;agregar nuevo directorio compartido&amp;quot;]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Nos aparecerá un navegador de archivos (fig.29) que nos pide que localicemos la carpeta (la podemos crear desde aquí) y que le pongamos un nombre, que será un nombre interno para saber cómo la llamaremos desde el sistema invitado. Es aconsejable no dejar espacios en dicho nombre. Si queremos separar dos palabras, podemos hacerlo por medio de un guión bajo “_”. Un ejemplo de ello será el nombre de &amp;quot;Carpeta_Compartida&amp;quot; que se seguirá empleando en este artículo para trabajar con la carpeta compartida entre sistema invitado y sistema anfitrión.&lt;br /&gt;
| [[Imagen:Vbox029.jpg|thumb|''Fig.29'' Vista de la sección &amp;quot;Directorios Compartidos&amp;quot; en la Configuración de nuestra máquina virtual en la que aparece el navegador de archivos para localizar/crear nuestra carpeta compartida]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Una vez hayamos hecho Click en “Ok” ya estará la carpeta activa. Ahora sólo nos quedará llamarla desde el sistema invitado.&lt;br /&gt;
&lt;br /&gt;
=== Llamar a nuestra carpeta compartida desde nuestro sistema invitado ===&lt;br /&gt;
&lt;br /&gt;
Hablaremos del método a seguir en el caso de que estemos virtualizando un sistema Windows o un sistema GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
Primero tendremos que iniciar el sistema invitado y según sea un Windows o un GNU/Linux haremos una cosa u otra:&lt;br /&gt;
&lt;br /&gt;
* '''Para un sistema invitado Windows:''' Podemos hacerlo desde consola, pero lo más sencillo es agregar el directorio haciendo click con el botón derecho del ratón sobre “Mi PC” y seleccionar la opción &amp;quot;Conectar a unidad de red&amp;quot;. Le asignamos una letra (la que queramos) a la nueva unidad y en el campo de Carpeta escribiremos:&lt;br /&gt;
&lt;br /&gt;
 \\vboxsvr\Carpeta_Compartida&lt;br /&gt;
&lt;br /&gt;
* '''Para un sistema invitado GNU/Linux:''' Montaremos la carpeta compartida que llamamos &amp;quot;Carpeta_Compartida&amp;quot; en nuestro sistema en el punto de montaje que queramos. Para ello abriremos un terminal y pondremos:&lt;br /&gt;
&lt;br /&gt;
 mount -t vboxsf Carpeta_Compartida puntodemontaje&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Posibles problemas ==&lt;br /&gt;
&lt;br /&gt;
Al actualizar el kernel de GNU/Linux puede ocurrir que al intentar ejecutar VirtualBox nos aparezca este mensaje:&lt;br /&gt;
&lt;br /&gt;
 VirtualBox kernel driver not installed. The vboxdrv kernel module was either not loaded or /dev/vboxdrv was not created for some reason. &lt;br /&gt;
 Re-setup the kernel module by executing '/etc/init.d/vboxdrv setup' as root.&lt;br /&gt;
 VBox status code: -1908 (VERR_VM_DRIVER_NOT_INSTALLED).&lt;br /&gt;
&lt;br /&gt;
o bién,&lt;br /&gt;
&lt;br /&gt;
 chmod: no se puede acceder a `/dev/vboxdrv': No existe el fichero ó directorio&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este segundo mensaje también puede aparecer por otras causas como puede ser que no esté creada la carpeta, que no hayamos configurado el grupo de usuarios como se indica más arriba o que no se ha cambiado el parámetro de los permisos de los dispositivos USB, así que conviene asegurarse de que se han realizado los pasos como se indica en este artículo. Si estamos seguros que hemos seguido los pasos correctamente, entonces este segundo mensaje reponde a lo mismo que el primero: un problema debido a que VirtualBox no estará configurado para el nuevo kernel. En este caso, no es necesario volver a instalar VirtualBox, si no simplemente seguir estos sencillos pasos:&lt;br /&gt;
&lt;br /&gt;
:'''1.)''' Instalar los ''kernel headers'' correspondientes al nuevo kernel. Usaremos el modificador ''uname -r'' para no tener que estar mirando la versión de nuestro nuevo kernel... que lo haga la propia máquina.&lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install linux-headers-$(uname -r)&lt;br /&gt;
&lt;br /&gt;
: '''2.)''' Seguidamente, ejecutaremos el siguiente comando para que se corrija el error:&lt;br /&gt;
&lt;br /&gt;
 sudo /etc/init.d/vboxdrv setup&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, VirtualBox ya estará configurado para el nuevo Kernel  funcionará sin problemas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.ubuntu-es.org/index.php?q=node/62374 Cómo instalar/hacer funcionar Virtualbox] en [http://www.ubuntu-es.org/ Ubuntu-es].&lt;br /&gt;
&lt;br /&gt;
* [http://www.virtualbox.org/wiki/End-user_documentation Documentación de Usuario Final en la Wiki de VirtualBox] (en inglés)&lt;br /&gt;
&lt;br /&gt;
* [http://www.virtualbox.org/wiki/User_HOWTOS How-Tos para Usuarios en la Wiki de Virtualbox] (en inglés)&lt;br /&gt;
&lt;br /&gt;
* [http://www.virtualbox.org/wiki/User_FAQ Preguntas Frecuentes en la Wiki de Virtualbox] (en inglés)&lt;br /&gt;
&lt;br /&gt;
* [http://www.blog.arun-prabha.com/2007/05/07/installing-virtualbox-and-windows-using-virtualbox-in-ubuntu/ Installing Virtualbox and Windows using Virtualbox in Ubuntu] (en inglés)&lt;br /&gt;
&lt;br /&gt;
* [http://www.virtualbox.org/download/UserManual.pdf Manual de Usuario de Virtualbox] (en inglés)&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [http://www.virtualbox.org/ Sitio web oficial de VirtualBox] {{en}}.&lt;br /&gt;
* [http://www.ubuntu-es.org/index.php?q=node/62374 Ubuntu-es - Cómo instalar/hacer funcionar VirtualBox].&lt;br /&gt;
{{Wikipedia}}&lt;br /&gt;
* [http://blarts.wordpress.com/2007/12/06/how-to-run-virtualbox-using-a-physical-partition-using-ubuntu-feisty-fawn/ Guía para usar una partición existente virtualizada en Ubuntu] (en inglés)&lt;br /&gt;
* [http://www.virtualbox.org/wiki/Migrate_Windows How to migrate existing Windows installations to VirtualBox] (en inglés)&lt;br /&gt;
[[Categoría:Máquinas virtuales]]&lt;br /&gt;
[[Categoría:Virtualización|Virtualización]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-27T08:49:37Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requerimientos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando módulos Python con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetado avanzado ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Creando más de un paquete binario ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando librerías compartidas ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Librerías compartidas ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Errores comunes ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Archivos de ejemplo dh-make ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Abusando de archivos ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Cambiando el tarball original ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Soluciones =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Consejos =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Información de Copyright ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Paquetes de referencia ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Sistema de parches ==&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
== Archivos complementarios ==&lt;br /&gt;
&lt;br /&gt;
== Recetas ==&lt;br /&gt;
&lt;br /&gt;
== Apéndice ==&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:MOTU-es]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/World_of_Warcraft</id>
		<title>World of Warcraft</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/World_of_Warcraft"/>
				<updated>2008-06-27T07:07:17Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Enlaces externos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{software&lt;br /&gt;
| nombre = World of Warcraft&lt;br /&gt;
| desarrollador = [[w:Blizzard Entertainment|Blizzard Entertainment]]&lt;br /&gt;
| versión_estable = 2.4.2&lt;br /&gt;
| fecha_versión_estable = 13 de mayo de 2008&lt;br /&gt;
| género = [[:Categoría:Juegos de rol|Juego de rol]]&lt;br /&gt;
| licencia = [[w:software no libre|privativa]]&lt;br /&gt;
| español = Sí&lt;br /&gt;
| web = [http://www.worldofwarcraft.com/ www.worldofwarcraft.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''World of Warcraft''', también abreviado '''WoW''', es un [[w:videojuego|videojuego]] [[w:MMORPG|MMORPG]] desarrollado por [[w:Blizzard Entertainment|Blizzard Entertainment]] disponible para los sistemas operativos [[w:Microsoft Windows|Windows]] y [[w:Mac OS X|Mac OS X]]. Está basado en el mundo de ficción y la historia de Warcraft donde se adopta el papel de un personaje virtual que interactúa con otros personajes y desarrolla situaciones en un ambiente fantástico como en un juego de rol.&lt;br /&gt;
&lt;br /&gt;
Consta de dos expansiones oficiales, una llamada ''World of Warcraft: The Burning Crusade'' y la otra ''World of Warcraft: Wrath of the Lich King''. Las revisiones de parches también añaden nuevos contenidos y son bastante frecuentes.&lt;br /&gt;
&lt;br /&gt;
La aceptación del juego ha sido enorme. De hecho, Blizzard Entertainment anunció que en los primeros días de enero de 2007 existían más de 8 millones de jugadores registrados (pagando suscripción) en todo el mundo.&lt;br /&gt;
&lt;br /&gt;
== Instalando los paquetes necesarios ==&lt;br /&gt;
&lt;br /&gt;
[[instalar aplicaciones|Instalamos]] los paquetes &amp;lt;code&amp;gt;wine&amp;lt;/code&amp;gt; del [[wine#Nuevas versiones de Wine (no recomendado)|repositorio oficial del proyecto]], &amp;lt;code&amp;gt;msttcorefonts&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;ttf-xfree86-nonfree&amp;lt;/code&amp;gt; de los repositorios de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
 sudo aptitude install wine msttcorefonts ttf-xfree86-nonfree&lt;br /&gt;
&lt;br /&gt;
Configuramos wine usando el comando winecfg o usando el lanzador que instala Wine en el menú de Gnome.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Wine-DirectX1.png|450px|Iniciamos la herramienta de configuración de Wine]]&lt;br /&gt;
&lt;br /&gt;
En la ventana que se abrirá seleccionamos la versión de Windows (preferiblemente XP).&lt;br /&gt;
&lt;br /&gt;
== Instalando World of Warcraft ==&lt;br /&gt;
&lt;br /&gt;
Desde el menú de Ubuntu vamos a '''Lugares''' -&amp;gt; '''Carpeta personal''' y crearemos una carpeta llamada '''''wow'''''&lt;br /&gt;
&lt;br /&gt;
En la carpeta '''''wow''''' deberemos copiar todos los archivos del CDs/DVD del juego, al finalizar abriremos el archivo Installer.exe con wine (botón derecho, &amp;quot;Abrir con Wine&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Pantallazo-Instalador de World of Warcraft.png|Pantalla del instalador del WoW]]    [[Imagen:Instalador_de_WoW-progreso.png|Progreso]]&lt;br /&gt;
&lt;br /&gt;
Durante la instalación es posible que algunos diálogos aparezcan en blanco y el instalador consuma el 100% del procesador durante unos segundos.&lt;br /&gt;
&lt;br /&gt;
Tranquilo, es normal, espera y pulsa continuar cuando sea posible.&lt;br /&gt;
&lt;br /&gt;
== Configuración del juego ==&lt;br /&gt;
&lt;br /&gt;
=== Config.wtf ===&lt;br /&gt;
&lt;br /&gt;
Lo primero que debes hacer es ejecutar el juego y entrar en el con un personaje para que se creen los archivos de configuración del World of Warcraft. Luego sal del juego y empezaremos a configurarlo para que te funcione bien.&lt;br /&gt;
&lt;br /&gt;
World of Warcraft usa [[w:DirectX|DirectX]] por defecto pero para la mayoría de las personas este modo no funciona bien. Lo mejor es usar el [[OpenGL]]. Para hacer esto debes editar el archivo &amp;lt;code&amp;gt;Config.wtf&amp;lt;/code&amp;gt; que se encuentra en el directorio. Puede hacer esto con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 xdg-open '.wine/drive_c/Archivos de programa/World of Warcraft/WTF/Config.wtf'&lt;br /&gt;
&lt;br /&gt;
Para ello pulsa Alt+F2 y escribe la ruta, se abrirá el archivo con el editor de textos predeterminado.&lt;br /&gt;
&lt;br /&gt;
Y añadimos esta linea de texto al archivo:&lt;br /&gt;
&lt;br /&gt;
 SET gxApi &amp;quot;opengl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Luego si experimentas un rendimiento pobre, errores en los gráficos o el juego no funciona del todo bien añade las siguientes lineas también:&lt;br /&gt;
&lt;br /&gt;
 SET ffxDeath &amp;quot;0&amp;quot;&lt;br /&gt;
 SET ffxGlow &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Al parecer si deshabilitamos el &amp;lt;code&amp;gt;ffxGlow&amp;lt;/code&amp;gt; (como se hizo antes) puede permitir el uso del antialiasing según algunos usuarios.&lt;br /&gt;
&lt;br /&gt;
Si experimentas un tartamudeo, sonido de mala calidad o simplemente no tienes sonido debes añadir estas otras líneas:&lt;br /&gt;
&lt;br /&gt;
 SET SoundOutputSystem &amp;quot;1&amp;quot;&lt;br /&gt;
 SET SoundBufferSize &amp;quot;150&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Herramienta de configuración de Wine (winecfg) ===&lt;br /&gt;
&lt;br /&gt;
Si aun modificando el archivo &amp;lt;code&amp;gt;Config.wtf&amp;lt;/code&amp;gt; el sonido no funciona correctamente deberemos configurar el sistema de sonido en Wine mediante la aplicación winecfg que administra la configuración de este programa.&lt;br /&gt;
&lt;br /&gt;
Configuramos wine usando el comando &amp;lt;code&amp;gt;winecfg&amp;lt;/code&amp;gt; o usando el lanzador que instala Wine en el menú de Gnome.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Wine-DirectX1.png|thumb|Iniciamos la herramienta de configuración de Wine]]&lt;br /&gt;
&lt;br /&gt;
Dirígete a la pestaña de Audio/Sonido. No te preocupes si al pulsar en dicha pestaña el programa parece que se bloquea, es normal, al cabo de unos segundos volverá a funcionar bien.&lt;br /&gt;
&lt;br /&gt;
Para la mayoría de las personas el sistema de sonido [[OSS]] le funciona mejor que el [[ALSA]], así que debes asegurarte de que solo está seleccionado OSS. Pero... para otros ALSA funciona mejor, así que intenta seleccionarla como segunda opción si OSS no funciona bien. En cualquier caso asegurarte de elegir solo uno a la vez, no puede haber dos sistemas de sonido seleccionados.&lt;br /&gt;
&lt;br /&gt;
También, comentar que en la sección de Chat por voz encontrarás información sobre como conseguir múltiples streams de audio usando OSS y ALSA (dos programas que usen el audio a la vez) Esto te serviría, por poner un ejemplo, si deseas escuchar música y jugar al mismo tiempo.&lt;br /&gt;
&lt;br /&gt;
Puedes probar a activar la opción «Emulación del manejador». Si no ayuda desactivarla.&lt;br /&gt;
&lt;br /&gt;
=== Configuración del registro ===&lt;br /&gt;
&lt;br /&gt;
Esto es una simple edición del registro de wine que aumentará drásticamente los FPS del juego. Mucha de esta información de obtuvo de [http://www.ubuntuforums.org/showthread.php?t=303509 este hilo en Ubuntuforums.org].&lt;br /&gt;
&lt;br /&gt;
Abre una terminal, escribe &amp;lt;code&amp;gt;regedit&amp;lt;/code&amp;gt; y pulsa enter. Esto iniciará el equivalente del editor de registro de Windows pero en Wine. Si estás familiarizado con el uso de la editor de registro bajo Windows, entonces no tendrás problemas ya que es muy similar.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Pantallazo-Editor del registro.png|thumb|Hack de rendimiento]]&lt;br /&gt;
&lt;br /&gt;
* Encuentra la clave &amp;lt;code&amp;gt;HKEY_CURRENT_USER\Software\Wine\&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Resalta la carpeta de Wine en el panel de la izquierda, haga clic en ella. El icono debería cambiar para abrir una carpeta.&lt;br /&gt;
* Click derecho en la carpeta Wine y selecciona «Nuevo» y luego «Clave».&lt;br /&gt;
* Remplaza el texto ''Nueva clave #1'' por ''OpenGL''.&lt;br /&gt;
* Click derecho en el panel de la derecha y selecciona «Nuevo» y luego «Valor de cadena».&lt;br /&gt;
* Remplaza el ''Nuevo valor #1'' por ''DisabledExtensions'' (fíjate bien en las mayúsculas y en las minúsculas).&lt;br /&gt;
* Realiza un doble click en cualquier lugar de la línea para que se abra una ventana de diálogo.&lt;br /&gt;
* En el campo «Datos del valor» escribe ''GPL_ARB_vertex_buffer_object''.&lt;br /&gt;
&lt;br /&gt;
== Jugando ==&lt;br /&gt;
&lt;br /&gt;
=== Iniciar desde el icono de escritorio ===&lt;br /&gt;
&lt;br /&gt;
Doble click en el icono que encontrarás en tu Escritorio con el nombre World of Warcraft, esto iniciará el lanzador. Si nunca has usado algo que requiera de renderizado HTML con Wine se te notificará para descargar y instalar automáticamente el motor de renderizado Gecko. Debes instalarlo para que el lanzador WoW muestre las noticias y novedades.&lt;br /&gt;
&lt;br /&gt;
=== Iniciar desde la terminal ===&lt;br /&gt;
&lt;br /&gt;
Para usar la terminal simplemente escribe esto en ella:&lt;br /&gt;
&lt;br /&gt;
 wine &amp;quot;C:/Archivos de programa/World of Warcraft/Launcher.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(instala el motor de renderizado Gecko cuando te lo pidan)&lt;br /&gt;
&lt;br /&gt;
O, para entrar directamente al juego:&lt;br /&gt;
&lt;br /&gt;
 wine &amp;quot;C:/Archivos de programa/World of Warcraft/Wow.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Menu WoW en Gnome ===&lt;br /&gt;
&lt;br /&gt;
Puedes hacer una entrada en el menú de Gnome para el WoW con estos comandos:&lt;br /&gt;
&lt;br /&gt;
 wget http://kde-files.org/CONTENT/content-files/41569-wow-icon-scalable.svg -O WoW.svg&lt;br /&gt;
 sudo mv WoW.svg /usr/share/pixmaps/&lt;br /&gt;
 gksudo gedit /usr/share/applications/wow.desktop&lt;br /&gt;
&lt;br /&gt;
Y en el archivo que se abrirá copiamos y pegamos el siguiente texto.&lt;br /&gt;
&lt;br /&gt;
 [Desktop Entry]&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Name=World of Warcraft&lt;br /&gt;
 Exec=wine &amp;quot;C:/Archivos de programa/World of Warcraft/Wow.exe&amp;quot;&lt;br /&gt;
 Icon=WoW.svg&lt;br /&gt;
 Terminal=false&lt;br /&gt;
 Type=Application&lt;br /&gt;
 Categories=Application;Game;&lt;br /&gt;
 StartupNotify=false&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* Artículo '''[https://help.ubuntu.com/community/WorldofWarcraft World of Warcraft]''' en [https://help.ubuntu.com/community/ Community Ubuntu Documentation] {{en}}.&lt;br /&gt;
&lt;br /&gt;
== Problemas comunes ==&lt;br /&gt;
&lt;br /&gt;
https://help.ubuntu.com/community/WorldofWarcraft/Troubleshooting.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
* [[Wine]].&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
{{Wikipedia}}&lt;br /&gt;
* [http://www.worldofwarcraft.com/ Sitio web oficial de World of Warcraft] {{en}}.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Juegos de rol]]&lt;br /&gt;
[[Categoría:Wine]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T21:35:25Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Errores comunes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requerimientos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando módulos Python con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetado avanzado ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Creando más de un paquete binario ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando librerías compartidas ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Librerías compartidas ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Errores comunes ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Archivos de ejemplo dh-make ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Abusando de archivos ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Cambiando el tarball original ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Soluciones =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
===== Consejos =====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Información de Copyright ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Paquetes de referencia ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Sistema de parches ==&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
== Archivos complementarios ==&lt;br /&gt;
&lt;br /&gt;
== Recetas ==&lt;br /&gt;
&lt;br /&gt;
== Apéndice ==&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T21:30:22Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Requerimientos de paquetes nuevos para Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requerimientos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando módulos Python con CDBS ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetado avanzado ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Creando más de un paquete binario ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando librerías compartidas ===&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==== Librerías compartidas ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=== Errores comunes ===&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T20:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
==== Requerimientos de paquetes nuevos para Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T19:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Algunos usuarios han reportado que les fue imposible que debuild encontrara la clave GPG incluso después de introducir las variables. Si este fuera tu caso puedes probar con el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild  -k &amp;lt;id_clave_GPG&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;id_clave_GPG&amp;gt;  es el identificativo de tu clave GPG.&lt;br /&gt;
&lt;br /&gt;
Para comprobar que el paquete se construya en un entorno limpio también podemos construir el paquete binario con pbuilder:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build ../*.dsc&lt;br /&gt;
&lt;br /&gt;
Usando pbuilder podemos saber si las dependencias son correctas ya que pbuilder proporciona un entorno mínimo así que todas las dependencias quedarían determinadas por el archivo control.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos comprobar los errores comunes en el paquete fuente usando lintian:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lintian -i *.dsc&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T19:16:41Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *.deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T19:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos. Para asegurase de que debuild encuentre correctamente la clave GPP debes introducir las variables de entorno DEBFULLNAME y DEBEMAIL, en tu archivo ~/.bashrc, con el nombre y el e-mail respectivamente que uses para la clave GPG y en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Macbook</id>
		<title>Macbook</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Macbook"/>
				<updated>2008-06-26T19:09:15Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Instrucciones básicas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{wikificar}}&lt;br /&gt;
&lt;br /&gt;
[[Imagen:SPEngUs2.png]]&amp;amp;nbsp;Página traduciendose de la documentación original https://help.ubuntu.com/community/MacBook?highlight=(macbook)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Como instalar Ubuntu en un Macbook =&lt;br /&gt;
&lt;br /&gt;
Esta guía le ayudará con los pasos necesarios para la instalación de Ubuntu en un MacBook. Esta guía ha sido realizada para Ubuntu 7.10 (Gutsy Gibbon), pero está siendo adaptada para Ubuntu 8.04 (Hardy heron).&lt;br /&gt;
&lt;br /&gt;
Si tienes un MacBook Pro te recomendamos que veas esta otra guía: https://wiki.ubuntu.com/MacBookPro, tenga en cuenta que es casi todo igual , aunque esta página es tambien relevante.&lt;br /&gt;
&lt;br /&gt;
Si tienes el nuevo Macbook (Santa Rosa v3.1) veer esta guía: https://help.ubuntu.com/community/MacBook_Santa_Rosa&lt;br /&gt;
&lt;br /&gt;
Para la discusión adicional de este asunto, vea: http://ubuntuforums.org/showthread.php?p=1699961&lt;br /&gt;
&lt;br /&gt;
Para una guía de tripe arranque vea: http://wiki.onmac.net/index.php/Triple_Boot_via_BootCamp_Ubuntu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Las instrucciones abajo se refieren a la aplicación BootCamp de Apple que está disponible de forma pública excepto si usas Leopard Mac OS X 10.5. Otra opción, sin embargo, es redimensionar la partición Mac OS X utilizando las utilidades de disco o reinstalar Mac Os X haciendo más pequeña la partición de Mac OS X, dejando el espacion libre necesario para Ubuntu'''&lt;br /&gt;
&lt;br /&gt;
== Instrucciones básicas ==&lt;br /&gt;
*1. Actualizar el software de tu sistema Mac Os X [http://www.apple.com/support/downloads/ firmware] a la versión más reciente.&amp;lt;br&amp;gt; Tambien puede hacerlo de la manera estandard pulsando en la manzana y luego &amp;quot;Actualización de software&amp;quot;&amp;lt;br&amp;gt;(Accesible desde el escritorio de su sistema Mac OS X)&amp;lt;br&amp;gt;&lt;br /&gt;
*2. Baja tu Ubuntu [http://www.ubuntu.com/getubuntu/download Live CD]. Para los primeros Macbooks tu debes seleccionar `i386`; Para los  Macbooks Core 2 Duo &amp;lt;br&amp;gt;(posterioes a 2006) puedes seleccionar `amd64` si tu estás interesado en arrancar a 64-bit OS,si no seleccionar ` i386`.&amp;lt;br&amp;gt;&lt;br /&gt;
*3. Instalar [http://refit.sourceforge.net/ rEFIt] si tu quieres un menu de arranque (para poder seleccionar OS X/Ubuntu) seleccionar el arranque.&amp;lt;br&amp;gt;Puedes hacer que el arranque a Ubuntu sea por defecto y cargar la cuenta atras editando el fichero &amp;quot;refit.conf&amp;quot;&amp;lt;br&amp;gt;(Según está descrito en el anterior web site [http://refit.sourceforge.net/ rEFIt]).&amp;lt;br&amp;gt;&lt;br /&gt;
*4. Si es necesario, use Boot Camp para redimensionar la partición OSX para dejar espacio para tu Ubuntu.&amp;lt;br&amp;gt;Don't waste a CD creating a Windows driver disk. Reboot.&amp;lt;br&amp;gt;&lt;br /&gt;
*5. Pulsa la tecla &amp;quot;C&amp;quot; para iniciar desde el CD.&amp;lt;br&amp;gt;&lt;br /&gt;
*6. Instalar Ubuntu de la forma usual, excepto:&lt;br /&gt;
** En la particion, selecciona ''Editar manualmente la tabla de particiones''&lt;br /&gt;
** Borra /dev/sda3 y /dev/sda4 si existe&lt;br /&gt;
** Crea una nueva partición ext3 para tu usuario root&lt;br /&gt;
** Monte la reción creada partición ext3 en '/'&lt;br /&gt;
** Tenga en cuenta que con Boot Camp puede darle problemas si hace más de dos particiones.&amp;lt;br&amp;gt; &lt;br /&gt;
*7. Finaliza la instalación y reinicia.&amp;lt;br&amp;gt;&lt;br /&gt;
*8. Si has instalado rEFIT, deberíaa tener la posibilidad de elegir entre el arranque OS X y Ubuntu. &amp;lt;br&amp;gt;Utilice las teclas de flecha y ENTER para seleccionar Ubuntu.&amp;lt;br&amp;gt;&lt;br /&gt;
*9. Aleternativamente, si no has instalado rEFIT, mantenga pulsada Alt/Opción para decidir si desea arrancar en OSX / Ubuntu.&amp;lt;br&amp;gt;  El menú de arranque del Bootcamp instalado reconocerá la instalación de Ubuntu como si fuera de Window$&amp;lt;br&amp;gt; pero en realidad arrancará Ubuntu sin problemas.&lt;br /&gt;
*10. Entre en su sistema.&lt;br /&gt;
*11. Siga las instrucciones que aparecen a continuación para configurar los distintos componentes de hardware que no funciona&amp;lt;br&amp;gt; de forma estandard en Gutsy.&lt;br /&gt;
&lt;br /&gt;
== Sound ==&lt;br /&gt;
&lt;br /&gt;
Sound on MacBooks is provided by an Intel HDA-based integrated chipset, and should work out-of-the-box. However, in Ubuntu 8.04 alsa drivers 1.0.15 will not work with some chipsets, like SigmaTel STAC9221. In such cases everything seems to work fine but no sound is present (even unmuting all controls). Alsa drivers 1.0.16 should work fine, to install them:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install build-essential linux-headers-$(uname -r) module-assistant alsa-source&lt;br /&gt;
sudo dpkg-reconfigure alsa-source&lt;br /&gt;
sudo module-assistant a-i   alsa-source&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
This may disable Madwifi drivers for the wireless card, hence you want to compile alsa first.&lt;br /&gt;
&lt;br /&gt;
The volume control will not work correctly out-of-the-box - in particular, reducing the default volume will result in sound distortion at lower volume levels, and volume control changes won't effect the headphone volume level.&lt;br /&gt;
&lt;br /&gt;
To fix this, do the following&lt;br /&gt;
&lt;br /&gt;
1. Add the following line to /etc/modprobe.d/alsa-base:&lt;br /&gt;
{{{&lt;br /&gt;
install snd-hda-intel position_fix=1 /sbin/modprobe --ignore-install snd-hda-intel $CMDLINE_OPTS &amp;amp;&amp;amp; /lib/alsa/modprobe-post-install snd-hda-intel&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
2. Increase the volume (both using the key combination and the system tray applet) to its maximum possible value.&lt;br /&gt;
&lt;br /&gt;
3. Right-click on the volume applet and choose Preferences.  Select &amp;quot;PCM&amp;quot; as the device to control.&lt;br /&gt;
&lt;br /&gt;
4. Open the Sound preferences (System-Preferences-Sound in GNOME).  Select &amp;quot;PCM&amp;quot; as the device to control.&lt;br /&gt;
&lt;br /&gt;
The above setting changes (step 3 and 4) can be done via the command line using these two gconftool-2 commands:&lt;br /&gt;
{{{&lt;br /&gt;
gconftool-2 --type list --list-type string --set /desktop/gnome/sound/default_mixer_tracks [PCM]&lt;br /&gt;
gconftool-2 --type string  --set /apps/panel/applets/mixer_screen0/prefs/active-track PCM&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Step 1. may be necessary in Hardy even if you don't appreciate this issue.&lt;br /&gt;
&lt;br /&gt;
== Microphone ==&lt;br /&gt;
&lt;br /&gt;
The built-in iSight microphone (above the LCD screen) will not record out of the box, but is really easy to get working.  The steps that I took to get the microphone working were:&lt;br /&gt;
&lt;br /&gt;
1. right-click on the volume applet and select &amp;quot;Open Volume Control&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. within the volume control application select &amp;quot;Edit &amp;gt; Preferences&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. select &amp;quot;Mux&amp;quot; and &amp;quot;Input Source&amp;quot; at the bottom of the list, and close.&lt;br /&gt;
&lt;br /&gt;
4. select the &amp;quot;Recording&amp;quot; tab and set &amp;quot;Mux&amp;quot; at about 1/3 full volume (higher results in static).&lt;br /&gt;
&lt;br /&gt;
5. make sure mic is unmuted!&lt;br /&gt;
&lt;br /&gt;
6. select the &amp;quot;Options&amp;quot; tab and select &amp;quot;Mic&amp;quot; as the input source.&lt;br /&gt;
&lt;br /&gt;
note: the only options I have checked in &amp;quot;Edit &amp;gt; Preferences&amp;quot; (step 2 above) are: PCM, Input source, and Mux.&lt;br /&gt;
&lt;br /&gt;
The above settings, minus the 1/3 volume level setting, can be toggled using the below commands:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
gconftool-2 --set /apps/gnome-volume-control/HDAIntelAlsamixerMux --type bool 1&lt;br /&gt;
gconftool-2 --set /apps/gnome-volume-control/HDAIntelAlsamixerPCM --type bool 1&lt;br /&gt;
gconftool-2 --set /apps/gnome-volume-control/HDAIntelAlsamixerInputSource --type bool 1&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Wireless ==&lt;br /&gt;
&lt;br /&gt;
If you have a first generation MacBook (Core Duo) then your wireless should just start working, though you may want to update to the latest version as illustrated below for better power efficiency and signal strength. Second generation Mac``Books (Core 2 Duo) have a newer version of the Atheros Wifi chipset which requires the installation of the latest Atheros Mad``Wifi drivers. [https://bugs.launchpad.net/madwifi/+bug/122703 bug #122703]&lt;br /&gt;
&lt;br /&gt;
Please note that the current Mad``Wifi drivers depend on a proprietary binary, the Atheros HAL, and therefore are not open-source software.  A free software implementation, [http://madwifi.org/wiki/About/OpenHAL OpenHAL], is currently being developed by the Madwifi devs, but unfortunately it does not support the Atheros chipset in the MacBooks yet.&lt;br /&gt;
&lt;br /&gt;
The following commands compile and install the prerelease Mad``Wifi driver, insert it into the kernel, and disable background scanning for better stability. For installation, you can choose to use daily snapshots or Subversion.&lt;br /&gt;
&lt;br /&gt;
Using daily snapshots:&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install build-essential autoconf automake&lt;br /&gt;
wget http://snapshots.madwifi.org/madwifi-trunk-current.tar.gz&lt;br /&gt;
tar -zxvf madwifi-trunk-current.tar.gz&lt;br /&gt;
cd madwifi-trunk-r*&lt;br /&gt;
make&lt;br /&gt;
sudo make install-modules&lt;br /&gt;
echo -e '#!/bin/sh\n/sbin/iwpriv ath0 bgscan 0' | sudo tee -a /etc/acpi/resume.d/99-madwifi-bgscan.sh&lt;br /&gt;
sudo chmod 755 /etc/acpi/resume.d/99-madwifi-bgscan.sh&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Alternatively, using Subversion (be patient with the checkout, it may take a while):&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install build-essential subversion autoconf automake&lt;br /&gt;
svn co http://svn.madwifi.org/madwifi/trunk madwifi&lt;br /&gt;
cd madwifi&lt;br /&gt;
make&lt;br /&gt;
sudo make install-modules&lt;br /&gt;
echo -e '#!/bin/sh\n/sbin/iwpriv ath0 bgscan 0' | sudo tee -a /etc/acpi/resume.d/99-madwifi-bgscan.sh&lt;br /&gt;
sudo chmod 755 /etc/acpi/resume.d/99-madwifi-bgscan.sh&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
At this point the driver should be installed and will be enabled after a reboot. Alternatively, you can skip the reboot and use the following commands to insert the driver into the running kernel: &lt;br /&gt;
{{{&lt;br /&gt;
sudo modprobe ath_pci&lt;br /&gt;
sudo iwpriv ath0 bgscan 0&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Additionally, the Mad``Wifi drivers are sometimes unstable under certain circumstances when using the standard NetworkManager tool for managing networks.  Because of these reasons, you may want to disable the drivers if you aren't using wireless.  To do this, edit the /etc/modprobe.d/blacklist file and add &amp;quot;blacklist ath_pci&amp;quot; at the bottom.  Additionally, you can deselect the Atheros HAL in the Restricted Manager (System-Administration-Restricted Drivers Manager).&lt;br /&gt;
&lt;br /&gt;
To disallow replacement of just installed modules by installing linux-restricted-modules package update you can edit /etc/default/linux-restricted-modules-common and insert ath_hal into DISABLED_MODULES list:&lt;br /&gt;
{{{&lt;br /&gt;
sudo sed -i~ -e 's/^\(DISABLED_MODULES=&amp;quot;\)\(.*&amp;quot;\)/\1ath_hal \2/' -e 's/ &amp;quot;$/&amp;quot;/' /etc/default/linux-restricted-modules-common&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
More information can be obtained at&lt;br /&gt;
http://madwifi.org/wiki/UserDocs/FirstTimeHowTo&lt;br /&gt;
&lt;br /&gt;
If you need to connect to a channel that's not allowed in the regulatory domain in which you bought your laptop, you'll need to follow these instructions: http://tumbleweed.org.za/2008/02/11/madwifi-regdomain-issues&lt;br /&gt;
&lt;br /&gt;
=== Ndiswrapper ===&lt;br /&gt;
If you instead want to use ndiswrapper to use the Windows wireless drivers on Ubuntu (only for 32-bit) these are the instructions: &lt;br /&gt;
&lt;br /&gt;
You have to have the XP drivers on your hard disk.  If you don't have a Windows XP installation on an alternate partition, you can get the drivers from the Boot Camp driver disk.  The drivers from the Boot Camp disk can be uncompressed using the non-free unrar in the multiverse repository:&lt;br /&gt;
 * Enable multiverse ( see https://help.ubuntu.com/community/Repositories/Ubuntu ) &lt;br /&gt;
 * Install the packages {{{rar unrar}}} (actually only unrar is truly necessary)&lt;br /&gt;
 * Uncompress the Windows XP Atheros driver installer:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
mkdir ~/atheros&lt;br /&gt;
unrar x atherosxpinstaller.exe ~/atheros/&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
 * Install the atheros drivers using ndiswrapper:&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install ndiswrapper-utils-1.8&lt;br /&gt;
&lt;br /&gt;
#install the driver into ndiswrapper:&lt;br /&gt;
sudo ndiswrapper -i &amp;quot;~/atheros/net5416.inf&amp;quot;&lt;br /&gt;
#--or--&lt;br /&gt;
sudo mount /dev/sda4 /mnt&lt;br /&gt;
sudo ndiswrapper -i &amp;quot;/mnt/Program Files/Macintosh Drivers for Windows XP 1.1.2/net5416/net5416.inf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sudo modprobe ndiswrapper&lt;br /&gt;
sudo echo &amp;gt;&amp;gt; /etc/modules &amp;quot;ndiswrapper&amp;quot;&lt;br /&gt;
sudo umount /mnt&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Reference: http://paulglover.net/20061210/triple-booting-macbook-os-x-ubuntu-edgy-windows-xp/&lt;br /&gt;
&lt;br /&gt;
=== Wicd ===&lt;br /&gt;
&lt;br /&gt;
In order to fix the wireless for the most recent Linux kernels, you may want to install wicd (http://wicd.net) instead of using network-manager. Follow the instructions for installation on Ubuntu on their website, then use these preferences:&lt;br /&gt;
&lt;br /&gt;
WPA Supplicant Driver: wext&lt;br /&gt;
Wireless Interface: ath0&lt;br /&gt;
Wired Interface: eth0&lt;br /&gt;
&lt;br /&gt;
All of the rest should not matter, except for your specific network settings, you should just leave them alone.&lt;br /&gt;
&lt;br /&gt;
== Brightness ==&lt;br /&gt;
&lt;br /&gt;
Brightness controls should work out-of-the box using HAL and GNOME Power Manager in Ubuntu 7.10.  However, there are a few issues with automatic dimming.  In particular, the automatic dimming feature actually *brightens* the MacBook screen when on AC, and on battery it brightens the screen if the screen brightness has been adjusted to a value below the standard level for battery power.  This is documented in bug [https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/137598 #137598] and [https://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/63543 #63543]. &lt;br /&gt;
&lt;br /&gt;
Due to these issues, you may want to disable auto-dimming.  This can be done by opening the Gconf Editor (gconf-editor in a Terminal will open it), and unchecking the key &amp;quot;enable&amp;quot; in &amp;quot;apps/gnome-power-manager/backlight&amp;quot;.  If at a later time you want to re-enable this feature (i.e. if the bug is fixed in a future update) simply return to this key and check it instead of unchecking it.&lt;br /&gt;
&lt;br /&gt;
** Easy fix for Macbook Pro Gutsy&lt;br /&gt;
&lt;br /&gt;
I simply went into System &amp;gt; Preferences &amp;gt; Power Management&lt;br /&gt;
 1) I unchecked &amp;quot;Dim Display when idle&amp;quot;&lt;br /&gt;
 2) In the &amp;quot;On Battery Power&amp;quot; tab, uncheck &amp;quot;Dim Display when idle&amp;quot;&lt;br /&gt;
 3) in the &amp;quot;General&amp;quot; tab, uncheck &amp;quot;use ambient light to adjust LCD brightness&amp;quot; &amp;lt;&amp;lt;-- This seems to be the main problem, but I kept the other two unchecked just to be sure ;-)&lt;br /&gt;
&lt;br /&gt;
== Suspend ==&lt;br /&gt;
&lt;br /&gt;
Suspend is broken in Ubuntu 7.10 on many first-generation MacBooks as well as some later-generation MacBooks and MacBook Pros [https://bugs.launchpad.net/bugs/151016 #151016].  In particular, these machines will go into suspend, but will not come out of suspend.  This is because the 32bit kernel supplied with 7.10 has some issues which prevent this from working (the x86_64 kernel works correctly out of the box). To fix this you will have to download an older version of the Linux kernel that is known to work.  The latest known version to work is 2.6.22-12, which you can download by installing the packages at the locations pointed to below.  Be sure to install them in the order as they appear here.&lt;br /&gt;
&lt;br /&gt;
https://launchpad.net/ubuntu/gutsy/i386/linux-image-2.6.22-12-generic/2.6.22-12.39&lt;br /&gt;
https://launchpad.net/ubuntu/gutsy/i386/linux-headers-2.6.22-12/2.6.22-12.39&lt;br /&gt;
https://launchpad.net/ubuntu/gutsy/i386/linux-headers-2.6.22-12-generic/2.6.22-12.39&lt;br /&gt;
https://launchpad.net/ubuntu/gutsy/i386/linux-ubuntu-modules-2.6.22-12-generic/2.6.22-12.32&lt;br /&gt;
https://launchpad.net/ubuntu/gutsy/i386/linux-restricted-modules-2.6.22-12-generic/2.6.22.4-12.3&lt;br /&gt;
&lt;br /&gt;
After installing, edit /boot/grub/menu.lst and change the default=0 line to default=2 (if the newly-installed kernel is the third listed in the menu.lst file, which it should be when installed on a stock Gutsy install).&lt;br /&gt;
&lt;br /&gt;
Restart your MacBook for the update to take effect.  You will have to reinstall any wireless drivers you may have installed in the past.&lt;br /&gt;
&lt;br /&gt;
Alternatively, users who prefer a newer kernel to an older one can install the 2.6.24 kernel packages from the upcoming Ubuntu 8.04 release by adding the hardy repositories to their software sources:&lt;br /&gt;
{{{&lt;br /&gt;
deb http://archive.ubuntu.com/ubuntu/ hardy main restricted&lt;br /&gt;
deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted&lt;br /&gt;
deb http://security.ubuntu.com/ubuntu hardy-security main restricted&lt;br /&gt;
}}}&lt;br /&gt;
Note: These should not replace the existing gutsy sources, but should be in addition to them.  See the Repositories Howto for more information.&lt;br /&gt;
&lt;br /&gt;
Once the new repositories have been added, and the package list reloaded, installing the new linux-generic should get all the necessary kernel packages from hardy, including linux-image, linux-ubuntu-modules, and linux-restricted-modules.  Once the new packages are installed, disable (but don't remove) the hardy repositories, so that upgrades using apt or synaptic don't result in a complete upgrade to hardy.  The user can periodically re-enable these repositories in order to check for updated kernel packages.&lt;br /&gt;
&lt;br /&gt;
Rebooting into the new kernel ''should'' result in a perfectly suspending MacBook.&lt;br /&gt;
&lt;br /&gt;
On my Macbook (2007), I need to edit /etc/default/acpi-support in the following way:&lt;br /&gt;
&lt;br /&gt;
- change POST_VIDEO=true into POST_VIDEO=false&lt;br /&gt;
&lt;br /&gt;
- Add sky2 in the modules to be removed before suspend and reloaded after: MODULES=&amp;quot;sky2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: on my MacBook (2nd gen: Nov 2006), using the hardy kernel as explained above, no change to /etc/default/acpi-support was required.&lt;br /&gt;
&lt;br /&gt;
== Whining noise ==&lt;br /&gt;
&lt;br /&gt;
In order to fix the whining noise that some MacBooks make, you need to install the iSight firmware. To install the iSight firmware, follow the steps listed below under &amp;quot;iSight&amp;quot;.  After installing the firmware and restarting, your MacBook should be whine-free.&lt;br /&gt;
&lt;br /&gt;
Note: The above does not always work. In that case, add the following to /etc/init.d/acpid before exit 0.&lt;br /&gt;
{{{&lt;br /&gt;
echo 2 &amp;gt; /sys/module/processor/parameters/max_cstate&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Fonts &amp;amp; Desktop Effects ==&lt;br /&gt;
&lt;br /&gt;
When using desktop effects (which are enabled by default on most MacBooks), the fonts used for menu bar titles will sometimes be larger than normal.  This issue is described in detail in bug [https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/141001 #141001]. &lt;br /&gt;
&lt;br /&gt;
To fix this, in /etc/gdm/gdm.conf change:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
[server-Standard]&lt;br /&gt;
name=Standard server&lt;br /&gt;
-command=/usr/bin/X -br -audit 0&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
[server-Standard]&lt;br /&gt;
name=Standard server&lt;br /&gt;
-command=/usr/bin/X -br -audit 0 -dpi 96&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Restart X for this to take effect.&lt;br /&gt;
&lt;br /&gt;
== iSight ==&lt;br /&gt;
&lt;br /&gt;
The iSight is currently broken in Ubuntu Hardy, please see&lt;br /&gt;
https://bugs.launchpad.net/ubuntu/+source/linux-ubuntu-modules-2.6.24/+bug/185634&lt;br /&gt;
&lt;br /&gt;
iSight works on Gutsy as long as you either 1) boot OS X before booting Gutsy or 2) install the iSight firmware in Gutsy.&lt;br /&gt;
To install the iSight firmware, perform the following steps, substituting your Mac OS X partition for sda2 and your kernel for 2.6.22-14-generic.  Please note that you need a Mac OS X partition to extract the firmware.&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo mount -t hfsplus /dev/sdax /mnt&lt;br /&gt;
sudo cp /mnt/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/* /lib/firmware/2.6.22-14-generic/&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Also, in /etc/default/acpi-support, edit the line that begins with MODULES such that it reads:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
MODULES=&amp;quot;isight_usb&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Restart for this to take effect. Once the firmware is functional, the iSight may be used with the &amp;quot;ekiga&amp;quot; program.&lt;br /&gt;
&lt;br /&gt;
To install prerequisites and launch Ekiga (Ekiga may also be launched through the menus), do the following:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install ekiga libpt-plugins-v4l2&lt;br /&gt;
ekiga&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
 1. Configuration. You may have to select the iSight device. Edit &amp;gt; Preferences &amp;gt; Devices &amp;gt; Video Devices &amp;gt;&lt;br /&gt;
 1. Video plugin: V4L2&lt;br /&gt;
 1. Input device: Built-in iSight&lt;br /&gt;
&lt;br /&gt;
If you want to use it in 640x480 mode, then:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
gconftool-2 --type integer --set /apps/ekiga/devices/video/size 1&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Minimum Fan Speed ==&lt;br /&gt;
&lt;br /&gt;
To set a minimum fan speed which may help your MacBook run cooler. Substitute your speed of choice (in RPM) for 3000 if you wish.&lt;br /&gt;
&lt;br /&gt;
First you need to load the appropriate module:&lt;br /&gt;
{{{&lt;br /&gt;
sudo modprobe applesmc&lt;br /&gt;
echo applesmc | sudo tee -a /etc/modules&lt;br /&gt;
}}}&lt;br /&gt;
then add the following line to /etc/init.d/acpid just before the exit statement:&lt;br /&gt;
{{{&lt;br /&gt;
echo 3000 &amp;gt; /sys/devices/platform/applesmc.768/fan1_min&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Reducing Power Consumption ==&lt;br /&gt;
&lt;br /&gt;
PowerTOP is a program that monitors a Linux system and gives suggestions on reducing power consumption. To install PowerTOP, enter this command in a terminal:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo apt-get install build-essential libncurses5-dev libncursesw5-dev&lt;br /&gt;
wget -c http://www.lesswatts.org/projects/powertop/download/powertop-1.9.tar.gz&lt;br /&gt;
tar -xvf powertop-1.9.tar.gz&lt;br /&gt;
cd powertop-1.9&lt;br /&gt;
sudo make&lt;br /&gt;
sudo make install&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
You can also use “checkinstall” instead of “make install” to create a simple .deb for easier removal.&lt;br /&gt;
&lt;br /&gt;
PowerTOP must always be run as root, so use the following command to run it:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo powertop&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== Reducing Drive Load/Unload Cycles ==&lt;br /&gt;
&lt;br /&gt;
My Second Generation (C2D) MacBook is susceptible to a high load/unload cycle count on the hard drive.  This is a workaround to lower the drive cycles and extend the drive life.  Generate the following three files using the commands below:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
echo -e '#!/bin/sh\nhdparm -B 254 /dev/sda' | sudo tee -a /etc/acpi/start.d/99-macbook-fix.sh&lt;br /&gt;
echo -e '#!/bin/sh\nhdparm -B 254 /dev/sda' | sudo tee -a /etc/acpi/resume.d/99-macbook-fix.sh&lt;br /&gt;
echo -e '#!/bin/sh\nhdparm -B 254 /dev/sda' | sudo tee -a /etc/acpi/suspend.d/99-macbook-fix.sh&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Add execute permissions to the files:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo chmod a+x /etc/acpi/start.d/99-macbook-fix.sh&lt;br /&gt;
sudo chmod a+x /etc/acpi/resume.d/99-macbook-fix.sh&lt;br /&gt;
sudo chmod a+x /etc/acpi/suspend.d/99-macbook-fix.sh&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
To have these changes take effect immediately (without requiring a reboot):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo hdparm -B 254 /dev/sda&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
See [https://bugs.launchpad.net/ubuntu/+source/acpi-support/+bug/59695 this bug] for more details.&lt;br /&gt;
&lt;br /&gt;
note: this is Ubuntu 8.04 &amp;quot;Hardy&amp;quot; on the Second Generation (C2D) MacBook.  I have not tested on previous releases or other models.&lt;br /&gt;
&lt;br /&gt;
== Right/Middle Clicking ==&lt;br /&gt;
&lt;br /&gt;
There are two main approaches to right/middle clicking:&lt;br /&gt;
 * Two/three finger taps via the synaptics touchpad driver by editing xorg.conf&lt;br /&gt;
 * Remapping the functions of keys on the keyboard by editing system keyboard layouts or using xmodmap and a local configuration file&lt;br /&gt;
&lt;br /&gt;
=== Multi-finger taps ===&lt;br /&gt;
See [#touchpadtweaks More touchpad tweaks].&lt;br /&gt;
&lt;br /&gt;
=== Keyboard keys ===&lt;br /&gt;
Enable mouse emulation:&lt;br /&gt;
 * On Ubuntu: Go to '''System ▸ Preferences ▸ Keyboard ▸ Accessibility''' in the Main menu. Check '''Enable keyboard accessibility features'''. Click the ''Mouse Keys'' tab and check '''Enable Mouse Keys''' also. &lt;br /&gt;
 * On Kubuntu: bring up ''System Settings'', find ''Keyboard &amp;amp; Mouse'', choose ''Mouse'' on the left, than the ''Mouse Navigation'' tab, and check the checkbox beside ''Move pointer with keyboard (using the num pad)''. Please note that on Kubuntu you will lose your numpad.&lt;br /&gt;
 * On Xubuntu: Go to '''Applications ▸ Settings ▸ Mouse Settings''' and on the '''Accessibility''' tab, enable the '''Enable mouse emulation''' check box.&lt;br /&gt;
Then '''either''' edit the system files '''or''' use a local configuration file and xmodmap:&lt;br /&gt;
 * Editing system files (choose '''one''' of the following options):&lt;br /&gt;
  * '''option 1:''' lower Enter key = Right Mouse Button, Shift + lower Enter key = Middle Mouse Button&lt;br /&gt;
  {{{&lt;br /&gt;
sudo sed -i~ 's/KP_Enter/Pointer_Button3, Pointer_Button2/' /etc/X11/xkb/symbols/keypad&lt;br /&gt;
}}}&lt;br /&gt;
  * '''option 2:''' lower Enter key = Right Mouse Button, Alt Gr key + lower Enter key = Middle Mouse Button&lt;br /&gt;
  {{{&lt;br /&gt;
sudo sed -i~ 's/KP_Enter/Pointer_Button3, Pointer_Button3, Pointer_Button2, Pointer_Button2/' /etc/X11/xkb/symbols/keypad&lt;br /&gt;
}}}&lt;br /&gt;
 * Using xmodmap and a local configuration file to override the system-wide layouts:&lt;br /&gt;
  * The keycodes for relevant keys are:&lt;br /&gt;
   * right Apple - keycode 116&lt;br /&gt;
   * lower enter - keycode 108&lt;br /&gt;
  * The keysyms for relevant input events are:&lt;br /&gt;
   * Alt Gr - ISO_Level3_Shift&lt;br /&gt;
   * Middle-click - Pointer_Button2&lt;br /&gt;
   * Right-click - Pointer_Button3&lt;br /&gt;
  * Create a text file as ~/.xmodmap containing the following text:&lt;br /&gt;
  ('''Note''': for my set up I use left Apple as Alt Gr, right Apple as middle-click and lower enter as right-click. If you want to use right Apple as Alt Gr then you may need to rethink your keys for clicks assignments.)&lt;br /&gt;
  {{{&lt;br /&gt;
keycode 116 = Pointer_Button2&lt;br /&gt;
keycode 108 = Pointer_Button3&lt;br /&gt;
}}}&lt;br /&gt;
  * Add a call to xmodmap to your startup applications:&lt;br /&gt;
   * On Xubuntu: Go to '''Applications ▸ Settings ▸ Autostarted Applications''', click the '''Add''' button, fill in the '''Name''' and '''Description''' fields and put the following into the '''Command''' field:&lt;br /&gt;
   {{{&lt;br /&gt;
xmodmap ~/.xmodmap&lt;br /&gt;
}}}&lt;br /&gt;
   Then click '''OK''' and '''Close'''.&lt;br /&gt;
&lt;br /&gt;
'''Restart X (Ctrl+Alt+Backspace) for the changes to take effect.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Motion Sensor ==&lt;br /&gt;
&lt;br /&gt;
The motion sensor doesn't support disk parking yet ([https://bugs.launchpad.net/bugs/139881 bug #139881]), but you can play physical neverball :-)&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
sudo modprobe applesmc&lt;br /&gt;
echo applesmc | sudo tee -a /etc/modules&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Then fire up neverball... (or any other game that uses a joystick)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard layouts ==&lt;br /&gt;
&lt;br /&gt;
(Xubuntu 7.10 UK MacBook) There are some MacBook / MacBook Pro keyboard models defined in xkb, however, I have found that the Apple Laptop model with layout as ''gb'' (for my UK MacBook) and variant as ''mac'' with the xmodmap configuration as below. Maybe this approach will work well for others.&lt;br /&gt;
&lt;br /&gt;
To make the keyboard usable, for an international keyboard layout:&lt;br /&gt;
## TODO cjwatson 2007-03-27: is this still required in Ubuntu 7.04? Changes like this won't be preserved on upgrade any more, so aren't recommended.&lt;br /&gt;
&lt;br /&gt;
 * The GUI way:&lt;br /&gt;
 Bring up the ''Keyboard Preferences'' window with '''System ▸ Preferences ▸ Keyboard''' from the Main menu. Click on the '''Keyboard Layout Options''' tab, and find '''Third level choosers'''. Mark the ''right Win key'' as third level chooser. Now your right Apple key works as Alt Gr.&lt;br /&gt;
 * The console way, editing system files:&lt;br /&gt;
  * Alt Gr for right Apple key&lt;br /&gt;
  {{{&lt;br /&gt;
sudo sed -i~ '/xkb_symbols &amp;quot;ralt_switch&amp;quot; {/a\  include &amp;quot;level3(rwin_switch)&amp;quot;' /etc/X11/xkb/symbols/level3&lt;br /&gt;
}}}&lt;br /&gt;
  * Fix swapped keys&lt;br /&gt;
  {{{&lt;br /&gt;
sudo sed -i~ 's/    &amp;lt;LSGT&amp;gt; =  94;/    &amp;lt;LSGT&amp;gt; =  49;\n    &amp;lt;TLDE&amp;gt; =  94;/' /etc/X11/xkb/keycodes/xfree86&lt;br /&gt;
}}}&lt;br /&gt;
 * The console way, using xmodmap and a local configuration file:&lt;br /&gt;
  * keycodes for relevant keys:&lt;br /&gt;
   * left Apple - keycode 115&lt;br /&gt;
   * right Apple - keycode 116&lt;br /&gt;
   * § or ± (UK MacBook key beneath escape) - keycode 49&lt;br /&gt;
   * ` or ~ (UK MacBook key left of z) - keycode 94&lt;br /&gt;
  * keysyms for relevant characters/functions:&lt;br /&gt;
   * Alt Gr - ISO_Level3_Shift&lt;br /&gt;
   * § or ± - section plusminus&lt;br /&gt;
   * ` or ~ - grave tilde&lt;br /&gt;
  * To fix the swapped keys and make left Apple equivalent to Alt Gr, edit a text file at ~/.xmodmap (create it if it doesn't exist) adding the following lines:&lt;br /&gt;
  {{{&lt;br /&gt;
keycode 115 = ISO_Level3_Shift&lt;br /&gt;
keycode 49 = section plusminus&lt;br /&gt;
keycode 94 = grave asciitilde&lt;br /&gt;
}}}&lt;br /&gt;
  Then add {{{xmodmap ~/.xmodmap}}} to your start up.&lt;br /&gt;
&lt;br /&gt;
'''Restart X (Ctrl+Alt+Backspace) for the changes to take effect.'''&lt;br /&gt;
&lt;br /&gt;
To swap the fn key behaviour:&lt;br /&gt;
{{{&lt;br /&gt;
#Add one of these commands to /etc/rc.local&lt;br /&gt;
echo -n 0x01 &amp;gt; /sys/module/hid/parameters/pb_fnmode #FN on (like OSX)&lt;br /&gt;
echo -n 0x02 &amp;gt; /sys/module/hid/parameters/pb_fnmode #FN off (press fn for volume/brightness/etc)&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screen Colors (optional) ==&lt;br /&gt;
To calibrate the screen colors (in order to match OS X), you need to install ''xcalib''.  This isn't available in the Ubuntu repositories, so you'll have to download it.&lt;br /&gt;
&lt;br /&gt;
Go to http://www.etg.e-technik.uni-erlangen.de/web/doe/xcalib/ and (if you are running `i386`) download the newest Linux binary; save it to the Desktop.  (If you are running `amd64`, you'll need to compile it from source; make sure to install `libxxf86vm-dev` and `libxext-dev` first, and then simply `make xcalib` in the extracted source directory.  Take the resulting `xcalib` binary and continue with these instructions.)&lt;br /&gt;
&lt;br /&gt;
To install and configure it, you will need to do a few things in the terminal and mount a Mac OS X partition (to copy your color profile) as follows (substitute your Mac OS partition's partition number for 2 in /dev/sda2, 2 being the first standard partition):&lt;br /&gt;
{{{&lt;br /&gt;
sudo mv ~/Desktop/xcalib /usr/local/bin/xcalib&lt;br /&gt;
sudo chmod 755 /usr/local/bin/xcalib&lt;br /&gt;
sudo mount -t hfsplus /dev/sda2 /mnt&lt;br /&gt;
sudo cp /mnt/Library/ColorSync/Profiles/Displays/* /usr/local/etc&lt;br /&gt;
}}}&lt;br /&gt;
Then, do an &amp;quot;ls /usr/local/etc&amp;quot; and note the name of the profile (for the next step).&lt;br /&gt;
&lt;br /&gt;
Finally, add the following line to the end of either `/etc/gdm/Init/Default` (for standard Ubuntu/Gnome) or `/etc/kde3/kdm/Xsetup` (for Kubuntu/KDE), before the final &amp;quot;exit&amp;quot; statement:&lt;br /&gt;
{{{&lt;br /&gt;
/usr/local/bin/xcalib &amp;quot;/usr/local/etc/&amp;lt;insert name of profile here&amp;gt;&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Restart X (Ctrl-Alt-Backspace) and your Mac OS X color profile will load as X starts.&lt;br /&gt;
&lt;br /&gt;
== Fonts like Mac OS X (optional) ==&lt;br /&gt;
&lt;br /&gt;
By default, Ubuntu uses a style of font rendering different than that used on Mac OS X.  You may prefer fonts similar to those on Mac OS X, and you can have these on Ubuntu by doing the following:&lt;br /&gt;
&lt;br /&gt;
1. Open a terminal and do &amp;quot;sudo dpkg-reconfigure fontconfig-config&amp;quot;.  Set font hinting to &amp;quot;None&amp;quot; and leave the rest of the options as default.&lt;br /&gt;
2. Paste the following into a new file entitled &amp;quot;/etc/fonts/conf.d/lcd-legacy.conf&amp;quot;:&lt;br /&gt;
{{{&lt;br /&gt;
&amp;lt;fontconfig&amp;gt;&lt;br /&gt;
  &amp;lt;edit name=&amp;quot;lcdfilter&amp;quot; mode=&amp;quot;assign&amp;quot;&amp;gt;&amp;lt;const&amp;gt;legacy&amp;lt;/const&amp;gt;&amp;lt;/edit&amp;gt;&lt;br /&gt;
&amp;lt;/fontconfig&amp;gt;&lt;br /&gt;
}}}&lt;br /&gt;
3. Install any fonts you commonly use on Mac OS X. (Note: the Microsoft Core Fonts - which are commonly used in Office documents and online - can be installed using Add/Remove Programs).&lt;br /&gt;
4. Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Anchor(touchpadtweaks)]]&lt;br /&gt;
== More touchpad tweaks ==&lt;br /&gt;
&lt;br /&gt;
To enable touchpad scrolling/tapping/right-click:&lt;br /&gt;
&lt;br /&gt;
You will need to edit the xorg.conf file (in /etc/X11/xorg.conf)&lt;br /&gt;
&lt;br /&gt;
'''For more information than is available below, read {{{man synaptics}}}!'''&lt;br /&gt;
&lt;br /&gt;
Replace the Synaptics Touchpad InputDevice section with the following:&lt;br /&gt;
 * Basic device definition layout:&lt;br /&gt;
 {{{&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
        Identifier      &amp;quot;Synaptics Touchpad&amp;quot;&lt;br /&gt;
        Driver          &amp;quot;synaptics&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SendCoreEvents&amp;quot;        &amp;quot;true&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Device&amp;quot;                &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Protocol&amp;quot;              &amp;quot;auto-dev&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SHMConfig&amp;quot;             &amp;quot;true&amp;quot;&lt;br /&gt;
'''...insert other options from below here...'''&lt;br /&gt;
EndSection&lt;br /&gt;
}}}&lt;br /&gt;
 * General options affecting the touchpad edge areas, speed, touch sensitivity, etc. Note that if not using edge scrolling, the edge boundaries can probably be decreased but the edge offsets will need to be reasonable (as below?) if edge scrolling is being used.:&lt;br /&gt;
 {{{&lt;br /&gt;
        Option          &amp;quot;LeftEdge&amp;quot;              &amp;quot;150&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RightEdge&amp;quot;             &amp;quot;1070&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TopEdge&amp;quot;               &amp;quot;100&amp;quot;&lt;br /&gt;
        Option          &amp;quot;BottomEdge&amp;quot;            &amp;quot;310&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerLow&amp;quot;             &amp;quot;25&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerHigh&amp;quot;            &amp;quot;30&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapTime&amp;quot;            &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapMove&amp;quot;            &amp;quot;220&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SingleTapTimeout&amp;quot;      &amp;quot;100&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxDoubleTapTime&amp;quot;      &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LockedDrags&amp;quot;           &amp;quot;off&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MinSpeed&amp;quot;              &amp;quot;1.10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxSpeed&amp;quot;              &amp;quot;1.30&amp;quot;&lt;br /&gt;
        Option          &amp;quot;AccelFactor&amp;quot;           &amp;quot;0.08&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
 * Options affecting taps for button clicks:&lt;br /&gt;
  Buttons 1, 2 and 3 correspond to the left, middle and right mouse buttons respectively. If you set the values to 0, the method will be disabled. The ''TapButton'' options are for one, two or three finger taps. The ''CornerButton'' options are for one finger taps in the right-top (''RT''), right-bottom (''RB''), left-top (''LT'') and left-bottom (''LB'') corners of the touchpad. Generally you will want to use either corner taps or multi-finger taps, not both.&lt;br /&gt;
  * Multi-finger taps&lt;br /&gt;
   The following example uses a one-finger tap for left-click, a two-finger tap for right-click and a three-finger tap for middle-click (and the physical button can still used for left-click):&lt;br /&gt;
   {{{&lt;br /&gt;
        Option          &amp;quot;TapButton1&amp;quot;            &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton2&amp;quot;            &amp;quot;3&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton3&amp;quot;            &amp;quot;2&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
  * One-finger corner taps&lt;br /&gt;
   The following example uses the right-bottom corner for middle-click and left-bottom corner for right-click (and the physical button is still used for left-click):&lt;br /&gt;
   {{{&lt;br /&gt;
        Option          &amp;quot;RTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RBCornerButton&amp;quot;        &amp;quot;2&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LBCornerButton&amp;quot;        &amp;quot;3&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
 * Options affecting scrolling:&lt;br /&gt;
 You can either use edge scrolling or two-finger scrolling (as in Mac OS X) but you won't generally want to use both.&lt;br /&gt;
  * Scrolling speed&lt;br /&gt;
  The following options affect how far you have to move your finger across the touchpad to affect a scroll. Smaller values should make scrolling faster.&lt;br /&gt;
  {{{&lt;br /&gt;
        Option          &amp;quot;VertScrollDelta&amp;quot;       &amp;quot;20&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizScrollDelta&amp;quot;      &amp;quot;50&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
  * Edge scrolling&lt;br /&gt;
  The following options toggle whether moving a finger along an edge of the touchpad invokes scrolling. Set to 0 to disable.&lt;br /&gt;
  {{{&lt;br /&gt;
        Option          &amp;quot;HorizEdgeScroll&amp;quot;       &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertEdgeScroll&amp;quot;        &amp;quot;1&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
  * Two-finger scrolling&lt;br /&gt;
  The following options toggle whether moving two fingers horizontally or vertically over the touchpad invokes scrolling. Set to 0 to disable.&lt;br /&gt;
  {{{&lt;br /&gt;
        Option          &amp;quot;VertTwoFingerScroll&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizTwoFingerScroll&amp;quot;  &amp;quot;1&amp;quot;&lt;br /&gt;
}}}&lt;br /&gt;
 * Additional useful information&lt;br /&gt;
  * Firefox horizontal scrolling behavior&lt;br /&gt;
  With two finger scrolling enabled, you will probably want to change Firefox's horizontal scrolling behavior.  To do so, open Firefox, go to the URL &amp;quot;about:config&amp;quot;, and change the following settings:&lt;br /&gt;
  {{{&lt;br /&gt;
mousewheel.horizscroll.withnokey.action from 2 to 0&lt;br /&gt;
mousewheel.horizscroll.withnokey.numlines from -1 to 1&lt;br /&gt;
}}}&lt;br /&gt;
  * Disable the touchpad temporarily while typing&lt;br /&gt;
  It is useful to have the touchpad not use click or scroll events while you are typing. The information for this was found [http://ubuntu.wordpress.com/2006/09/20/disable-touchpad-temporarily-when-typing/ here]. Make syndaemon start up by default each time you login, add it to the list of Startup Programs in System-&amp;gt;Preferences-&amp;gt;Sessions. Add the following command:&lt;br /&gt;
  {{{&lt;br /&gt;
syndaemon -t -d&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
'''Restart X for changes to take effect with Ctrl-Alt-Backspace'''&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
 * Example 1&lt;br /&gt;
 With the following settings, two finger scrolling is enabled as in Mac OS X. Right-click is done by tapping the bottom-left corner of the touchpad, and middle-click is done by tapping the bottom-right corner of the touchpad.&lt;br /&gt;
 {{{&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
        Identifier      &amp;quot;Synaptics Touchpad&amp;quot;&lt;br /&gt;
        Driver          &amp;quot;synaptics&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SendCoreEvents&amp;quot;        &amp;quot;true&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Device&amp;quot;                &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Protocol&amp;quot;              &amp;quot;auto-dev&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SHMConfig&amp;quot;             &amp;quot;true&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LeftEdge&amp;quot;              &amp;quot;150&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RightEdge&amp;quot;             &amp;quot;1070&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TopEdge&amp;quot;               &amp;quot;100&amp;quot;&lt;br /&gt;
        Option          &amp;quot;BottomEdge&amp;quot;            &amp;quot;310&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerLow&amp;quot;             &amp;quot;25&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerHigh&amp;quot;            &amp;quot;30&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapTime&amp;quot;            &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapMove&amp;quot;            &amp;quot;220&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxDoubleTapTime&amp;quot;      &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LockedDrags&amp;quot;           &amp;quot;off&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MinSpeed&amp;quot;              &amp;quot;1.10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxSpeed&amp;quot;              &amp;quot;1.30&amp;quot;&lt;br /&gt;
        Option          &amp;quot;AccelFactor&amp;quot;           &amp;quot;0.08&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton1&amp;quot;            &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton2&amp;quot;            &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton3&amp;quot;            &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RBCornerButton&amp;quot;        &amp;quot;2&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LBCornerButton&amp;quot;        &amp;quot;3&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertScrollDelta&amp;quot;       &amp;quot;20&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizScrollDelta&amp;quot;      &amp;quot;50&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizEdgeScroll&amp;quot;       &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertEdgeScroll&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertTwoFingerScroll&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizTwoFingerScroll&amp;quot;  &amp;quot;1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
}}}&lt;br /&gt;
 * Example 2&lt;br /&gt;
 With the following settings the Synaptics Touchpad configuration should be closer to Mac OS X. Right-click using a two-finger tap and scroll by moving two fingers across the touchpad.&lt;br /&gt;
 {{{&lt;br /&gt;
Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
        Identifier      &amp;quot;Synaptics Touchpad&amp;quot;&lt;br /&gt;
        Driver          &amp;quot;synaptics&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SendCoreEvents&amp;quot;        &amp;quot;true&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Device&amp;quot;                &amp;quot;/dev/psaux&amp;quot;&lt;br /&gt;
        Option          &amp;quot;Protocol&amp;quot;              &amp;quot;auto-dev&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SHMConfig&amp;quot;             &amp;quot;true&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LeftEdge&amp;quot;              &amp;quot;10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RightEdge&amp;quot;             &amp;quot;1200&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TopEdge&amp;quot;               &amp;quot;10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;BottomEdge&amp;quot;            &amp;quot;370&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerLow&amp;quot;             &amp;quot;10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;FingerHigh&amp;quot;            &amp;quot;20&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapTime&amp;quot;            &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxTapMove&amp;quot;            &amp;quot;220&amp;quot;&lt;br /&gt;
        Option          &amp;quot;SingleTapTimeout&amp;quot;      &amp;quot;100&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxDoubleTapTime&amp;quot;      &amp;quot;180&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LockedDrags&amp;quot;           &amp;quot;off&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MinSpeed&amp;quot;              &amp;quot;1.10&amp;quot;&lt;br /&gt;
        Option          &amp;quot;MaxSpeed&amp;quot;              &amp;quot;1.30&amp;quot;&lt;br /&gt;
        Option          &amp;quot;AccelFactor&amp;quot;           &amp;quot;0.08&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton1&amp;quot;            &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton2&amp;quot;            &amp;quot;3&amp;quot;&lt;br /&gt;
        Option          &amp;quot;TapButton3&amp;quot;            &amp;quot;2&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;RBCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LTCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;LBCornerButton&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertScrollDelta&amp;quot;       &amp;quot;20&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizScrollDelta&amp;quot;      &amp;quot;50&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizEdgeScroll&amp;quot;       &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertEdgeScroll&amp;quot;        &amp;quot;0&amp;quot;&lt;br /&gt;
        Option          &amp;quot;VertTwoFingerScroll&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
        Option          &amp;quot;HorizTwoFingerScroll&amp;quot;  &amp;quot;1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
== DVI Output (gutsy) ==&lt;br /&gt;
 [http://www.thinkwiki.org/wiki/Installing_Ubuntu_6.06.1_on_a_ThinkPad_R60e#Ubuntu_7.10_with_Intel_Graphics_Media_Accelerator_950 These instructions] worked perfectly for setting DVI output on my MacBook.&lt;br /&gt;
 &lt;br /&gt;
 [http://ubuntu-tutorials.com/2007/11/25/extended-video-on-the-macbook-xrandr-ftw/ extended display] - These instructions worked for me. A little more to the point than the above link.&lt;br /&gt;
&lt;br /&gt;
 Warning: Screen and Graphics Preferences is currently dangerous. It completely broke my /etc/X11/xorg.conf on my first reconfiguration attempt.&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
This is useful if you already have too many partitions on your macbook and want to put the swap file directly on the main / partition.&lt;br /&gt;
 {{{&lt;br /&gt;
dd if=/dev/zero of=/swapfile bs=1024 count=2048000&lt;br /&gt;
mkswap /swapfile&lt;br /&gt;
swapon /swapfile&lt;br /&gt;
edit fstab:&lt;br /&gt;
 /swapfile               swap                    swap    defaults        0 0&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
Note: You can use suspend on disk with a swapfile. To do that we have to add an option passed to the kernel. Add the resume=/dev/&amp;lt;partition&amp;gt; resume_offset=&amp;lt;offset to the swapfile in blocks&amp;gt; :&lt;br /&gt;
 {{{&lt;br /&gt;
sudo filefrag -v /swapfile&lt;br /&gt;
#output : First block: 102300&lt;br /&gt;
}}}&lt;br /&gt;
Copy the first block number of the swapfile (ex:102300) and edit the defoptions line of /boot/grub/menu.lst :&lt;br /&gt;
  {{{&lt;br /&gt;
# defoptions=quiet splash resume=/dev/sda3 resume_offset=102300&lt;br /&gt;
}}}&lt;br /&gt;
The update your grub configuration :&lt;br /&gt;
  {{{&lt;br /&gt;
sudo update-grub&lt;br /&gt;
}}}&lt;br /&gt;
On this example, the swapfile is on partition /dev/sda3.&lt;br /&gt;
You are now able to use suspend on disk (hibernate).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
References:&lt;br /&gt;
 * [http://www.apple.com/macbook/ Apple - MacBook]&lt;br /&gt;
 * [http://doc.gwos.org/index.php/UbuntuOnApple Ubuntu on Apple - Mac Mini]&lt;br /&gt;
 * [http://bin-false.org/?p=17 /bin/false –help » Installing Ubuntu Linux on a MacBook (Dual Boot)]&lt;br /&gt;
 * [http://modular.math.washington.edu/macbook/ Mactel: Linux on the MacBook Pro]&lt;br /&gt;
 * [http://ubuntuforums.org/showthread.php?t=198453 Ubuntu on MacBook Pro - Ubuntu Forums]&lt;br /&gt;
 * [https://wiki.ubuntu.com/MacBookProFeisty (k)ubuntu fiesty 7.04 on a MacBookPro]&lt;br /&gt;
 * [http://www.mactel-linux.org/wiki/Dual_Booting Dual Booting - Mactel-Linux]&lt;br /&gt;
 * [http://ubuntuforums.org/showthread.php?t=225621 Built-in iSight Howto, Intel Mac ( iMac, Macbook ) - Ubuntu Forums]&lt;br /&gt;
 * [http://ubuntu-tutorials.com/2007/08/02/installing-ubuntu-on-a-macbook-tutorial-beta/ Nearly Complete Installation Tutorial]&lt;br /&gt;
&lt;br /&gt;
 * [http://modular.math.washington.edu/macbook/suspend2/ suspend2]&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Instalación avanzada]]&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T14:39:58Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
Si no tienes una clave GPG configurada en el sistema recibirás un error del debuild. Puedes crear e instalar una clave GPG o usar las variables -us -uc con debuild para no firmar digitalmente el paquete. Sin embargo, no serás capaz de subir tus paquetes a Ubuntu sin firmarlos.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T10:45:59Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Construyendo el paquete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *deb&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete fuente ====&lt;br /&gt;
&lt;br /&gt;
Ahora, una vez que hemos analizado los archivos del directorio debian en profundidad, podemos construir el paquete fuente (y también los paquetes binarios). Primero vamos a movernos al directorio principal en el que extrajimos el código fuente para construir el paquete usando debuild:&lt;br /&gt;
&lt;br /&gt;
 debuild -S&lt;br /&gt;
&lt;br /&gt;
Este comando hace que el sistema tome como referencia el .orig.tar.gz para crear un archivo .dsc que contiene la descripción y el md5sum para el paquete funete y un archivo .diff.gz en el cual se compara el código fuente comprimido (.orig.tar.gz) con el descomprimido en donde se haya la carpeta debian/. Los archivos .dsc y *_source.changes ) usados para subir el paquete fuente serán firmados usando tu llave GPG.&lt;br /&gt;
&lt;br /&gt;
La variable -S le dice al debuild que construya el paquete fuente usando los scripts dpkg-buildpackage y fakeroot para poder simular privilegios de administrador (root) cuando se construye el paquete.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T10:05:36Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
Hay otro archivo, compat el cual contiene el número de la versión de los scripts debhelper. De vez en cuando se publican nuevas versiones del debhelper, la versión actual es la 6 (en Ubuntu 8.04). Si se introduce una versión más antigua entonces los scripts debhelper puede que funcionen ligeramente diferente.&lt;br /&gt;
&lt;br /&gt;
==== Construyendo el paquete ====&lt;br /&gt;
&lt;br /&gt;
Ya estas listo para construir le paquete. Para ello simplemente ejecutaremos el comando:&lt;br /&gt;
&lt;br /&gt;
 debuild&lt;br /&gt;
&lt;br /&gt;
Debuild comprobará primero si el paquete build-depends está instalado, luego usará dpkg-buildpackage para compilar, instalar y construir el o los paquetes deb usando las indicaciones del archivo debian/rules. Si todo está bien debuild intentará firmar digitalmente el/los paquete/s con GPG, si te da un error de que no ha encontrado ninguna llave GPG significa que se ha creado correctamente el paquete deb pero tu no tienes una llave GPG con el mismo nombre y e-mail que el que usaste en el archivo debian/changelog.&lt;br /&gt;
&lt;br /&gt;
Tu nuevo paquete debería estar en el direcotorio superior al código fuente. Échale un vistazo e instalalo:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 lesspipe *deb&lt;br /&gt;
 sudo dpkg --install *deb&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T06:49:55Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
Vamos a analizar el archivo con más detalle. La primera parte que puedes ver es la declaración de algunas variables:&lt;br /&gt;
&lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
&lt;br /&gt;
En esta sección se exponen las banderas para el compilador y también se indica las opciones noopt para la información de depuración (debugging).&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a ver la sección build&lt;br /&gt;
&lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
&lt;br /&gt;
Estos comandos ejecutan el famoso ./configure con las variables adecuadas, luego ejecutan make y luego hacen un registro de la construcción para prevenir compilaciones múltiples erróneas.&lt;br /&gt;
&lt;br /&gt;
Las siguientes instrucciones corresponden a la sección clean en la cual se ejecuta make -i distclean eliminando todos los archivos que se crean durante la construcción del paquete:&lt;br /&gt;
&lt;br /&gt;
 clean: &lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
&lt;br /&gt;
Lo próximo que veremos será unas instrucciones binary-indep vacías. Algunos paquetes se crean independientes de una arquitectura especifica (como 32 o 64 bits) si no contienen archivos que necesiten de un compilador. La mayoría de los programas python o de temas de escritorio son ejemplos de esto, sus paquetes terminan siempre en _all.deb.&lt;br /&gt;
&lt;br /&gt;
hello es un programa escrito en C por lo que necesita de un compilador para funcionar y el resultado será un código binario diferente para cada plataforma, sus paquetes pueden terminar en _i386.deb o _amd64.deb principalmente. Para estos paquetes dependientes de una arquitectura se usa el campo binary-arch:&lt;br /&gt;
&lt;br /&gt;
 binary-arch: install &lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
&lt;br /&gt;
Aquí se ponen en funcionamiento una serie de scripts debhelper que crean nuestros paquetes deb. dh_testdir y dh_testroot hacen algunas comprobaciones de la estructura. dh_installdocs y dh_installchangelogs instala los archivos que especifiques en los archivos *.doc y *.changelog. dh_strip tomará la información de depuración (debugging symbols) y la apartará de la aplicación reduciendo drásticamente su tamaño. dh_compress ejecuta gzip (un compresor de consola) para comprimir alguna documentación. dh_shlibdeps añade las librerías dependientes al campo &amp;quot;Depends: ${shlibs:Depends}&amp;quot; en el archivo debian/control. Finalmente dh_builddeb construye nuestro archivo .deb. Tranquilo, no te debes preocupar mucho acerca de estos scripts, normalmente crean el paquete sin problemas.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-26T05:37:34Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.  Este, prácticamente, hace todo el trabajo para crear nuestro paquete deb. Es un Makefile con instrucciones para compilar e instalar la aplicación, luego crear el archivo .deb a partir de los archivos instalados. También tiene instrucciones para reevertir la compilación&amp;amp;instalación eliminando todos los archivos originales y así poder volver a disponer solo del código fuente.&lt;br /&gt;
&lt;br /&gt;
Aquí tenemos una versión simplificada del rules creado por dh-make:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/make -f (-)&lt;br /&gt;
 &lt;br /&gt;
 package = hello&lt;br /&gt;
 &lt;br /&gt;
 CC = gcc&lt;br /&gt;
 CFLAGS = -g -Wall&lt;br /&gt;
 &lt;br /&gt;
 ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))&lt;br /&gt;
   CFLAGS += -O2&lt;br /&gt;
 endif&lt;br /&gt;
 &lt;br /&gt;
 #export DH_VERBOSE=1&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
         dh_testdir&lt;br /&gt;
         dh_clean&lt;br /&gt;
         rm -f build&lt;br /&gt;
         -$(MAKE) -i distclean&lt;br /&gt;
 &lt;br /&gt;
 install: build&lt;br /&gt;
         dh_clean&lt;br /&gt;
         dh_installdirs&lt;br /&gt;
         $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \&lt;br /&gt;
                 mandir=$(CURDIR)/debian/$(package)/usr/share/man \&lt;br /&gt;
                 infodir=$(CURDIR)/debian/$(package)/usr/share/info \&lt;br /&gt;
                 install&lt;br /&gt;
 &lt;br /&gt;
 build:&lt;br /&gt;
          ./configure --prefix=/usr&lt;br /&gt;
          $(MAKE) CC=&amp;quot;$(CC)&amp;quot; CFLAGS=&amp;quot;$(CFLAGS)&amp;quot;&lt;br /&gt;
          touch build&lt;br /&gt;
 &lt;br /&gt;
 binary-indep: install&lt;br /&gt;
 # There are no architecture-independent files to be uploaded&lt;br /&gt;
 # generated by this package.  If there were any they would be&lt;br /&gt;
 # made here.&lt;br /&gt;
 &lt;br /&gt;
 binary-arch: install&lt;br /&gt;
         dh_testdir -a&lt;br /&gt;
         dh_testroot -a&lt;br /&gt;
         dh_installdocs -a NEWS&lt;br /&gt;
         dh_installchangelogs -a ChangeLog&lt;br /&gt;
         dh_strip -a&lt;br /&gt;
         dh_compress -a&lt;br /&gt;
         dh_fixperms -a&lt;br /&gt;
         dh_installdeb -a&lt;br /&gt;
         dh_shlibdeps -a&lt;br /&gt;
         dh_gencontrol -a&lt;br /&gt;
         dh_md5sums -a&lt;br /&gt;
         dh_builddeb -a&lt;br /&gt;
 &lt;br /&gt;
 binary: binary-indep binary-arch&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: binary binary-arch binary-indep clean checkroot&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-25T21:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* Empaquetando desde el código fuente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor -f ../archivo_comprimido_que_contiene_el_código_fuente &lt;br /&gt;
&lt;br /&gt;
El parámetro ''-f'' seguido del ''../archivo_comprimido_que_contiene_el_código_fuente'' se utiliza para generar una copia de respaldo del código fuente con la etiqueta '''orig''' si disponemos de un tarball con el código fuente original.&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
Nos preguntara que tipo de paquete queremos crear:&lt;br /&gt;
&lt;br /&gt;
* La opción &amp;quot;s&amp;quot; para programas que generen un sólo paquete deb. Normalmente es la opción más utilizada.&lt;br /&gt;
* La opción &amp;quot;m&amp;quot; genera más de un paquete deb (por ejemplo los juegos que tienen 2 paquetes juego.deb y juego-data.deb)&lt;br /&gt;
* La opción &amp;quot;l&amp;quot; para librerías&lt;br /&gt;
* La opción &amp;quot;k&amp;quot; se utiliza para módulos del kernel linux (algo que un empaquetador común no suele usar)&lt;br /&gt;
* La opción &amp;quot;b&amp;quot; utiliza el programa cdbs para generar el archivo rules del paquete deb. Es una opción normalmente indicada para gente con experiencia en la empaquetamiento, aunque puede ser muy util para la que no quiera complicarse la vida.&lt;br /&gt;
&lt;br /&gt;
Se pueden añadir las opciones &amp;quot;-s&amp;quot;, &amp;quot;-m&amp;quot;, &amp;quot;-l&amp;quot;, &amp;quot;-k&amp;quot; &amp;quot;-b&amp;quot; detrás del email para responder directamente a esta pregunta.&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-25T21:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
&lt;br /&gt;
Una vez ejecutado dh_make este te preguntará varios aspectos sobre tu futuro paquete:&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
Como ya puedes imaginar hello se libera bajo la licencia GPL. En este caso es muy sencillo copiar el archivo copyright del paquete hello de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 cp ../../ubuntu/hello-debhelper-2.2/debian/copyright .&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que el archivo copyright del paquete hello de Ubuntu incluye la declaración de la licencia para el manual. Es importante que todos los archivos del código fuente estén declarados bajo una licencia.&lt;br /&gt;
&lt;br /&gt;
Más información, consejos y soluciones están disponibles en la sección Copyright.&lt;br /&gt;
&lt;br /&gt;
==== rules ====&lt;br /&gt;
&lt;br /&gt;
El último archivo que vamos a necesitar es el rules.&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-25T20:56:44Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
&lt;br /&gt;
Una vez ejecutado dh_make este te preguntará varios aspectos sobre tu futuro paquete:&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright: Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License: (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-25T20:56:26Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de archivo en el parche. La opción -p0 significa que deja el parche intacto.&lt;br /&gt;
&lt;br /&gt;
== Empezando ==&lt;br /&gt;
&lt;br /&gt;
=== Paquetes binarios y paquetes fuente ===&lt;br /&gt;
&lt;br /&gt;
La mayoría de los usuarios de una distribución basada en Debian como Ubuntu nunca van a tener que tratar con el código fuente que se usa para crear todos los programas que usen en sus ordenadores. En vez de eso, el código fuente se compila en paquetes binarios a partir de un paquete fuente que contiene ambos: el código fuente en sí mismo y las instrucciones para crear el paquete binario. Los mantenedores de paquetes suben el código fuente con los cambios a sistemas de empaquetado que compilan los paquetes binarios para cada arquitectura. Un sistema independiente distribuye los archivos binarios .deb generados y el código fuente con las instrucciones a cada repositorios espejo.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de empaquetado ===&lt;br /&gt;
&lt;br /&gt;
Hay muchas herramientas escritas específicamente para empaquetar en sistemas basados en Debian. Muchas de ellas no fueron creadas con la intención de empaquetar programas pero son realmente útiles y suelen automatizar tareas repetitivas. Sus páginas man e info son buenas fuentes de información. Sin embargo, la lista de paquetes son extremadamente necesarios para comenzar a empaquetar.&lt;br /&gt;
&lt;br /&gt;
* '''build-essential''' es un metapaquete que depende de &amp;lt;code&amp;gt;libc6-dev&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|gcc]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[GCC|g++]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Uno de los paquetes con los que podrías no estar familiarizado es &amp;lt;code&amp;gt;dpkg-dev&amp;lt;/code&amp;gt;. Este contiene herramientas de la talla de &amp;lt;code&amp;gt;dpkg-buildpackage&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dpkg-source&amp;lt;/code&amp;gt; que se usan para crear, desempaquetar y construir paquetes binarios o fuentes.&lt;br /&gt;
&lt;br /&gt;
* '''devscripts''' contiene muchos scripts que facilitan considerablemente la tareas de un mantenedor de paquetes. Algunos de los más usados son &amp;lt;code&amp;gt;debdiff&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debuild&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;debsing&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''ubuntu-dev-tools''' también contiene una colección de scripts (al igual que devscripts), pero específicos para Ubuntu. Contiene herramientas como &amp;lt;code&amp;gt;update-maintainer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dgetlp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;what-patch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder-dist&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
* '''debhelper''' son un conjunto de scripts que realizan tareas comunes de empaquetado.&lt;br /&gt;
&lt;br /&gt;
* '''dh-make''' se usa para crear una plantilla para tu futuro paquete.&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''' se usan para crear y aplicar parches, respectivamente. Su uso está muy extendido ya que son faciles de usar, limpios y más eficientes que modificar el código fuente a lo bruto.&lt;br /&gt;
&lt;br /&gt;
* '''quilt''' administra los parches.&lt;br /&gt;
&lt;br /&gt;
* '''gnupg''' es un completo y libre reemplazo para PGP usado para firmar digitalmente archivos (incluyendo paquetes).&lt;br /&gt;
&lt;br /&gt;
* '''fakeroot''' simula ejecutar comandos con privilegios de root. Es útil para crear paquetes binarios para uso personal.&lt;br /&gt;
&lt;br /&gt;
* '''lintian''' y '''linda''' diseccionan paquetes Debian y avisan de errores y violaciones de la normativa. Contienen autómatas que revisan muchos aspectos de la Normativa Debian así como otros errores comunes. linda no está disponible desde los repositorios de Ubuntu 8.04, pero aún está disponible en repositorios de lanzamientos anteriores.&lt;br /&gt;
&lt;br /&gt;
* '''pbuilder''' crea un sistema chroot y construye un paquete en el mismo. Es un sistema ideal para comprobar si un paquete se realiza correctamente, revisar sus dependencias y construir paquetes para probar y distribuir.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetador personal: pbuilder ===&lt;br /&gt;
&lt;br /&gt;
Usar '''pbuilder''' como un constructor de paquetes te permitirá crear paquetes sin necesidad de un entorno chroot. Puedes construir paquetes sin usar pbuilder, pero tendrás todas las dependencias instaladas en tu sistema muchas de las cuales no necesitarías (librerías de desarrollo y similares). Sin embargo, pbuilder permite al empaqeutador comprobar las dependencias de constucción ya que el paquete se construye con una instalación mínima de Ubuntu, y las dependencias de construcción serán descargadas de acuerdo con el archivo debian/control.&lt;br /&gt;
&lt;br /&gt;
Un manual de uso rápido:&lt;br /&gt;
&lt;br /&gt;
* Para crear un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder create --distribution &amp;lt;versión de ubuntu&amp;gt; \&lt;br /&gt;
 --othermirror &amp;quot;deb http://archive.ubuntu.com/ubuntu &amp;lt;versión de ubuntu&amp;gt; main restricted ubiverse multiverse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Para construir un paquete usando pbuidler, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder build *.dsc&lt;br /&gt;
&lt;br /&gt;
* Para actualizar un entorno pbuilder, ejecuta:&lt;br /&gt;
&lt;br /&gt;
 sudo pbuilder update&lt;br /&gt;
&lt;br /&gt;
* Usa ''pbuidler-dist'' (del paquete &amp;lt;code&amp;gt;ubuntu-dev-tools&amp;lt;/code&amp;gt;) para tener distintas instalaciones de pbuidler para las diferentes lanzamientos de Ubuntu.&lt;br /&gt;
&lt;br /&gt;
== Empaquetado básico ==&lt;br /&gt;
&lt;br /&gt;
Dos de los problemas a los que se enfrentan la mayoría de los nuevos empaquetadores son las múltiples formas de crear paquetes deb y el hecho de que existan diversas herramientas para hacer lo mismo.&lt;br /&gt;
&lt;br /&gt;
El desarrollo de un paquete suele necesitar de la instalación de muchos otros paquetes (especialmente paquetes ''-dev'' que contiene las cabeceras (headers) y otros archivos comunes de desarrollo) que no forman parte de una instalación normal de escritorio de Ubuntu. Si quieres evitar la instalación de paquetes extra o deseas desarrollar para una versión de Ubuntu distinta a la que usas (la versión en desarrollo por ejemplo) el uso de un entorno chroot es altamente recomendable.&lt;br /&gt;
&lt;br /&gt;
Vamos a exponer dos ejemplos de sistemas de construcción comunes. Usaremos debhelper, el sistema de construcción más popular en Debian. Este ayuda al empaquetador automatizando tareas repetitivas. Luego vamos a cubrir brevemente el Sistema de Construcción Común para Debian (''Common Debian Build System'', CDBS) un sistema más automatizado que utiliza debhelper.&lt;br /&gt;
&lt;br /&gt;
=== Empaquetando desde el código fuente ===&lt;br /&gt;
&lt;br /&gt;
Requerimientos: &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;automake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gnupg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lintian&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fakeroot&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pbuilder&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;debhelper&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;dh-make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Usaremos el programa GNU hello como ejemplo. Puedes descargarte el tarball del código fuente desde ftp.gnu.org. Para el propósito de este ejemplo, usaremos el directorio &amp;lt;code&amp;gt;~/hello/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 mkdir ~/hello/&lt;br /&gt;
 cd ~/hello/&lt;br /&gt;
 wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz&lt;br /&gt;
&lt;br /&gt;
Si estás empaquetando tu propio código fuente o el programa no está disponible en un archivo .tar.gz, puedes crear el archivo .tar.gz necesario desde el directorio que lo contenga con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
 tar czf hello-2.1.1.tar.gz hello-2.1.1&lt;br /&gt;
&lt;br /&gt;
Para el propósito de este ejemplo, también compararemos nuestro paquete (&amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;) con uno que ya está empaquetado en el repositorio de ubuntu (bajo el nombre &amp;lt;code&amp;gt;hello-debhelper&amp;lt;/code&amp;gt;). Por ahora nos centraremos en el directorio &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; así que podremos mirar el paquete de los repositorios despues. Para conseguir el código fuente, asegúrate de tener una línea «deb-src» del repositorio principal en tu &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt;. Entonces simplemente ejecuta:&lt;br /&gt;
&lt;br /&gt;
 mkdir ubuntu/&lt;br /&gt;
 cd ubuntu/&lt;br /&gt;
 apt-get source hello-debhelper&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
A diferencia de la mayoría de los comandos apt-get, no necesitaras privilegios de administrador (root) para conseguir el paquete fuente, ya que se descarga en el directorio actual. De echo, es recomendable que sólo uses &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; como usuario normal, ya que de esta forma puedes editar archivos en el paquete fuente sin necesidad de privilegios de administrador. El comando &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Descarga el paquete fuente. Un paquete fuente normalmente contiene un archivo &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt; que describe el paquete y proporciona el md5sums para el paquete fuente, un archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; que contiene el código fuente del autor/es del programa, un archivo &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; que contiene las instrucciones de empaquetado (en el directorio &amp;lt;code&amp;gt;debian/&amp;lt;/code&amp;gt;) y los parches que se aplicarán en el código fuente.&lt;br /&gt;
&lt;br /&gt;
* Descomprime el archivo &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
* Aplica el &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt; al directorio del código fuente.&lt;br /&gt;
&lt;br /&gt;
Si te has descargado manualmente el paquete fuente (los archivos &amp;lt;code&amp;gt;.dsc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;.diff.gz&amp;lt;/code&amp;gt;) puedes desempaquetarlos de la misma manera que el &amp;lt;code&amp;gt;apt-get source&amp;lt;/code&amp;gt; con el comando:&lt;br /&gt;
&lt;br /&gt;
 dpkg-source -x *.dsc&lt;br /&gt;
&lt;br /&gt;
Nosotros queremos recrear lo anterior desde el código fuente. Lo primero que necesitaras es hacer una copia (algunas veces llamado «upstream») del tarball de forma que quede con el siguiente formato: &amp;lt;code&amp;gt;&amp;lt;paquete&amp;gt;_&amp;lt;versión&amp;gt;.orig.tar.gz&amp;lt;/code&amp;gt;. Con esto conseguir crear una copia del código fuente por si accidentalmente cambias o eliminas algo en el que estas trabajando. También debemos tener en cuenta que se considera una forma de actuar no muy aceptada modificar el código fuente original a menos que sea absolutamente necesario.&lt;br /&gt;
&lt;br /&gt;
 cp hello-2.1.1.tar.gz hello_2.1.1.orig.tar.gz&lt;br /&gt;
 tar -xzvf hello_2.1.1.orig.tar.gz&lt;br /&gt;
&lt;br /&gt;
La línea baja «_». entre el nombre del paquete (''hello'') y la versión (''2.1.1''), como opuesto de la línea alta «-», es muy importante. Las herramientas de empaquetado buscarán un archivo con ese nombre exacto. Si Si te equivocas, las herramientas asumirán incorrectamente que no hay código fuente original y el código fuente será construido como un paquete nativo de Debian.&lt;br /&gt;
&lt;br /&gt;
Ahora tenemos un directorio hello que contiene los archivos del código fuente. Ahora necesitamos crear un directorio debian donde almacenaremos toda la información para construir el paquete, permitiendo serpara los archivos del paquete de los archivos del código fuente del programa. Usaremos dh_make para que cree el directorio debian con todos los archivos:&lt;br /&gt;
&lt;br /&gt;
 cd hello-2.1.1&lt;br /&gt;
 dh_make -e tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
&lt;br /&gt;
Una vez ejecutado dh_make este te preguntará varios aspectos sobre tu futuro paquete:&lt;br /&gt;
&lt;br /&gt;
 Type of packager single binary, multiple binary, libreary, kernel module or cdbs? [s/m/l/b] s&lt;br /&gt;
&lt;br /&gt;
 Maintainer name : Tu nombre&lt;br /&gt;
 Email-Address : tu.dirección.de.correo.electrónico.como@mantenedor&lt;br /&gt;
 Date: Thu, 6 Aprt 2008 10:07:19 -0700&lt;br /&gt;
 Package Name : hello&lt;br /&gt;
 Version : 2.1.1&lt;br /&gt;
 License : blank&lt;br /&gt;
 Type of Package : Single&lt;br /&gt;
 Hit &amp;lt;enter&amp;gt; to confirm: Enter&lt;br /&gt;
&lt;br /&gt;
El comando dh_make sólo se debe ejecutar una única vez. Si lo ejecutas más de una vez en el mismo directorio no funcionará correctamente. Si quieres cambiar o cometiste un error, elimina el directorio fuente y descomprime el tarball original de nuevo. Luego repite el proceso en el nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar dh_make este crear los archivos básicos en el directorio debian/ y algunos archivos plantilla (.ex) que quizas puedan ser necesarios o no. El programa Hello no es muy complicado, y una vez vista la sección &amp;quot;Empaquetar desde la fuente&amp;quot;, sus requerimientos no pasan de los archivos básicos. Por ello, procederemos a eliminar los archivos .ex:&lt;br /&gt;
&lt;br /&gt;
 cd debian&lt;br /&gt;
 rm *.ex *.EX&lt;br /&gt;
&lt;br /&gt;
Para hello, tampoco necesitaras algunos archivos del directorio debian:&lt;br /&gt;
&lt;br /&gt;
*README.Deban: El archivo README concreta aspectos del paquete Debian, NO es el archivo README del programa.&lt;br /&gt;
*dirs : Usado por dh_installdirs para crear los directorios necesarios.&lt;br /&gt;
*docs : Usado por dh_installdocs para instalar la documentación del programa.&lt;br /&gt;
*info : Usado por dh_installinfo para instalar el archivo info.&lt;br /&gt;
&lt;br /&gt;
Ten en cuenta que para la mayor parte de los paquetes estos archivos son necesarios. Para más información sobre ellos consulta la sección llamada &amp;quot;archivos de ejemplo dh_make&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Llegados a este pinto deberías tener en el directorio debian/ sólo los archivos changelog, compat, copyright y rules.&lt;br /&gt;
&lt;br /&gt;
==== changelog ====&lt;br /&gt;
&lt;br /&gt;
El archivo changelog, como su nombre indica, es una lista de cambios que se hacen en cada versión. Tiene un formato específico que proporciona el nombre del paquete, la versión, la distribución, los cambios, quien hizo el paquete y cuando lo hizo. Si tienes una llave GPG, asegúrate de usar el mismo nombre y e-mail en el changelog respecto al de tu llave. Lo siguiente es un ejemplo del contenido de un archivo changelog:&lt;br /&gt;
&lt;br /&gt;
 nombre_del_paquete (versión) distribución; urgency=prioridad/urgencia&lt;br /&gt;
 &lt;br /&gt;
  * Detalles sobre los cambios&lt;br /&gt;
    Más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
  * Aún más detalles sobre los cambios&lt;br /&gt;
 &lt;br /&gt;
 -- Nombre del mantenedor &amp;lt;correo.electrónico&amp;gt;  fecha_de_creación_del_paquete&lt;br /&gt;
&lt;br /&gt;
El formato (especialmente el de la fecha) es importante. la fecha debe estar en formato RFC822 el cual se puede obtener usando el comando date -R . Tal y como veremos más adelante, el script dch te evitar preocuparte por la fecha.&lt;br /&gt;
&lt;br /&gt;
Aquí tenéis un ejemplo del archivo changelog para hello:&lt;br /&gt;
&lt;br /&gt;
 hello (2.1.1-0ubuntu1) hardy; urgency=low&lt;br /&gt;
 &lt;br /&gt;
  * Nueva versión con muchos errores corregidos&lt;br /&gt;
 &lt;br /&gt;
 -- Capki Lerrenl Fontain &amp;lt;packager@coolness.com&amp;gt;  Wed, 5 Apr 2006&lt;br /&gt;
&lt;br /&gt;
Fíjate que la versión tiene un apéndice -0ubuntu1, esta es la revisión de la distribución la cual se usa para que un paquete pueda ser actualizado (para corregir errores, por ejemplo) con nuevas versiones usando la misma versión publicada del código fuente.&lt;br /&gt;
&lt;br /&gt;
Ubuntu y Debian tiene cambios ligeramente diferentes en los esquemas de versiones para evitar conflictos con paquetes de la misma versión del código fuente. Si un paquete Debian ha sido cambiado en Ubuntu, este tiene ubuntuX (donde X es la revisión de Ubuntu) añadido al final de la versión de Debian. Así si el paquete Debian hello 2.1.1-1 se modifica para Ubuntu la línea de versión será 2.1.1-1ubuntu1. Si un paquete de Ubuntu no existe en Debian, la revisión Debian es 0 (por ejemplo, 2.1.1-0ubuntu1)&lt;br /&gt;
&lt;br /&gt;
Ahora vemos el changelog para el paquete fuente que nos hemos descargado antes:&lt;br /&gt;
&lt;br /&gt;
 less ../../ubuntu/hello-debhelper-2.2/debian/changelog&lt;br /&gt;
&lt;br /&gt;
Dese cuenta que en este caso la distribución a la que hace referencia es unstable (una rama de Debian), porque el paquete no ha sido cambiado por Ubuntu. Recuerda introducir el nombre de la distribución de tu elección.&lt;br /&gt;
&lt;br /&gt;
==== control ====&lt;br /&gt;
&lt;br /&gt;
El archivo control contiene la información que el administrador de paquetes (como dpkg, apt-get, aptitude, synaptic y adept) usa: dependencias necesarias, información del mantenedor y muchas cosas más.&lt;br /&gt;
&lt;br /&gt;
Para el paquete hello de Ubuntu, el archivo control verás algo así:&lt;br /&gt;
&lt;br /&gt;
 Section: devel&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: Ubuntu MOTU Developers &amp;lt;ubuntu-motu@lists.ubuntu.com&amp;gt;&lt;br /&gt;
 XSBC-Original-Maintainer: Captain Packager &amp;lt;packager@coolness.com&amp;gt;&lt;br /&gt;
 Standards-Version: 3.7.3&lt;br /&gt;
 Build-Depends: debhelper (&amp;gt;= 5)&lt;br /&gt;
 Homepage: http://www.gnu.org/software/hello/&lt;br /&gt;
 &lt;br /&gt;
 Package: hello&lt;br /&gt;
 Architecture: any&lt;br /&gt;
 Depends: ${shlibs:Depends}&lt;br /&gt;
 Description: The classic greeting, and a good example&lt;br /&gt;
  The GNU hello program produces a familiar, friendly greeting. It&lt;br /&gt;
  allows non-programmers to use a classic computer science tool which&lt;br /&gt;
  would otherwise be unavailable to them. . Seriously, though: this is&lt;br /&gt;
  an example of how to do a Debian package. It is the Debian version of&lt;br /&gt;
  the GNU Project's `hello world' program (which is itself an example&lt;br /&gt;
  for the GNU Project).&lt;br /&gt;
&lt;br /&gt;
En Ubuntu se introduce en el campo de Maintainer (Mantenedor) normalmente un nombre y e-mail general ya que cualquiera puede contribuir modificando el paquete, previa revisión de los MOTU (esta es una diferencia respecto a Debian donde las modificaciones de los paquetes normalmente se asignan a equipos o personas individuales).&lt;br /&gt;
&lt;br /&gt;
Edita el archivo control usando la información de arriba (asegúrate de proporcionar la información del empaquetador original de Debian para el campo XSBC-Original-Maintainer). &lt;br /&gt;
&lt;br /&gt;
Ok, vamos a empezar a describir línea por línea el primer párrafo que describe el paquete fuente.&lt;br /&gt;
&lt;br /&gt;
* '''Source:''' Indica el nombre del código fuente. Simplemente no tocar a menos que sepas lo que estas haciendo.&lt;br /&gt;
* '''Section:''' Indica la categoría del paquete dentro de un repositorio apt que es reconocida por gestores de paquetes como Synaptic o Adept, pero esto no tiene nada que ver con la categoría del menú de Gnome o KDE.&lt;br /&gt;
&lt;br /&gt;
Las categorías disponibles son (puede faltar alguna):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
|- style=&amp;quot;background: #E0C58B; font-size: 130%; text-align: left;&amp;quot;&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
! Nombre&lt;br /&gt;
! width=&amp;quot;130px&amp;quot; | Descripción&lt;br /&gt;
|-&lt;br /&gt;
| '''admin'''&lt;br /&gt;
| Administración del sistema&lt;br /&gt;
| '''kde'''&lt;br /&gt;
| Escritorio KDE&lt;br /&gt;
| '''shells'''&lt;br /&gt;
| Shells&lt;br /&gt;
| '''graphics'''&lt;br /&gt;
| Gráficos&lt;br /&gt;
|-&lt;br /&gt;
| '''base'''&lt;br /&gt;
| Sistema base&lt;br /&gt;
| '''libs'''&lt;br /&gt;
| Librerías&lt;br /&gt;
| '''sound'''&lt;br /&gt;
| Sonido y vídeo&lt;br /&gt;
| '''comm'''&lt;br /&gt;
| Comunicación&lt;br /&gt;
|-&lt;br /&gt;
| '''libdevel'''&lt;br /&gt;
| Librerías de desarrollo&lt;br /&gt;
| '''tex'''&lt;br /&gt;
| TeX, autoría&lt;br /&gt;
| '''contrib'''&lt;br /&gt;
| Contrib&lt;br /&gt;
| '''mail'''&lt;br /&gt;
| Correo electrónico&lt;br /&gt;
|-&lt;br /&gt;
| '''utils'''&lt;br /&gt;
| Utilidades/Herramientas&lt;br /&gt;
| '''devel'''&lt;br /&gt;
| Desarrollo&lt;br /&gt;
| '''math'''&lt;br /&gt;
| Matemáticas&lt;br /&gt;
| '''web'''&lt;br /&gt;
| Web (World Wide Web)&lt;br /&gt;
|-&lt;br /&gt;
| '''doc'''&lt;br /&gt;
| Documentación&lt;br /&gt;
| '''misc'''&lt;br /&gt;
| Miscelaneaos - Basados en texto&lt;br /&gt;
| '''x11'''&lt;br /&gt;
| Misceláneos - Gráficos&lt;br /&gt;
| '''editors'''&lt;br /&gt;
| Editores&lt;br /&gt;
|-&lt;br /&gt;
| '''net'''&lt;br /&gt;
| Redes&lt;br /&gt;
| '''interpreters'''&lt;br /&gt;
| Lenguajes de ordenador interpretados&lt;br /&gt;
| '''electronics'''&lt;br /&gt;
| Electrónica&lt;br /&gt;
| '''news'''&lt;br /&gt;
| Grupos de noticias&lt;br /&gt;
|-&lt;br /&gt;
| '''science'''&lt;br /&gt;
| Ciencia&lt;br /&gt;
| '''embedded'''&lt;br /&gt;
| Dispositivos integrados&lt;br /&gt;
| '''non-free'''&lt;br /&gt;
| No libre&lt;br /&gt;
| '''hamradio'''&lt;br /&gt;
| Radio&lt;br /&gt;
|-&lt;br /&gt;
| '''games'''&lt;br /&gt;
| Juegos&lt;br /&gt;
| '''oldlibs'''&lt;br /&gt;
| Librerías antiguas&lt;br /&gt;
| '''python'''&lt;br /&gt;
| Lenguaje de programación Python&lt;br /&gt;
| '''gnome'''&lt;br /&gt;
| Escritorio Gnome&lt;br /&gt;
|-&lt;br /&gt;
| '''otherosfs'''&lt;br /&gt;
| Plataformas cruzadas&lt;br /&gt;
| '''perl'''&lt;br /&gt;
| Lenguaje de programación Perl&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Priority:''' Indica la prioridad del paquete en el sistema. Hay las siguientes opciones:&lt;br /&gt;
** '''Required''' : paquetes esenciales para que el sistema trabaje adecuadamente. Si son eliminados hay un alto riesgo de que el sistema quede inutilizarle o se rompa.&lt;br /&gt;
** '''Important''' : Un conjunto mínimo de paquetes para que un sistema sea usable. Eliminar estos paquetes no produce un quiebro irrecuperable de tu sistema, pero generalmente se consideran herramientas importantes sin las cuales la instalación de Linux sería incompleta. Nota: Esto no incluye cosas como Emacs o incluso el servidor X.&lt;br /&gt;
** '''Standard''' : Poca explicación hay sobre ella.&lt;br /&gt;
** '''Optional''' : en esencia esta categoría es para los paquetes no-requeridos, o la mayor parte de los paquetes. Sin embargo, estos paquetes no deberían presentar ningún conflicto con otros.&lt;br /&gt;
** '''Extra''' : paquetes que pueden presentar conflictos con otros paquetes en alguna de las categorías anteriores. También se usa para paquetes especializados que deberían ser únicamente útiles para aquellos quienes ya saben de ante mano el propósito del paquete/programa.&lt;br /&gt;
&lt;br /&gt;
* '''Maintainer:''' Muestra el nombre del empaquetador y su correo electrónico de contacto en caso de algún problema con el paquete u otras cosas. El correo electrónico no tiene porque ser uno personal, es más si no se quiere dar basta con modificarlo con algo como email@email.com.&lt;br /&gt;
&lt;br /&gt;
Eso sí, a la hora de firmar los paquetes con claves GPG (no es siempre necesario) el correo electrónico sirve entre otras cosas para identificar la clave con la que se va a firmar.&lt;br /&gt;
&lt;br /&gt;
* '''Standards-Version:''' Especifica la versión de la [http://www.debian.org/doc/debian-policy/ Normativa de Debian (Debian policy)] que sigue el paquete. Esta es propia de cada versión de Ubuntu y por ello los paquetes deb deben seguirla.&lt;br /&gt;
&lt;br /&gt;
Para más información visitar esta web:&lt;br /&gt;
&lt;br /&gt;
http://www.debian.org/doc/debian-policy/&lt;br /&gt;
&lt;br /&gt;
Este manual describe los requisitos de la política para la distribución Debian/Ubuntu GNU/Linux. Esto incluye la estructura y contenidos del archivo de Debian y varios temas de diseño del sistema operativo, así como los requisitos técnicos que cada paquete debe satisfacer para ser incluidos en la distribución&lt;br /&gt;
&lt;br /&gt;
Puedes averiguar la versión del Debian policy que usa tu versión de Ubuntu ejecutando este comando en una terminal:&lt;br /&gt;
&lt;br /&gt;
 apt-cache show debian-policy | grep Version&lt;br /&gt;
&lt;br /&gt;
Por lo general no debes preocuparte por ver si la versión está bien o no ya que el dh-make lo hace automáticamente, pero si estas portando un paquete de los backports de Ubuntu o Debian a otra versión de Ubuntu es probable que necesites comprobar este campo.&lt;br /&gt;
&lt;br /&gt;
*  '''Build-Depends:''' Está es una parte esencial del empaquetamiento del deb y quizás una de las que pueden llegar a ser un embrollo si no sabes las dependencias del paquete.&lt;br /&gt;
&lt;br /&gt;
*  '''Homepage:''' Una URL donde se puede encontrar más información acerca del software.&lt;br /&gt;
&lt;br /&gt;
El siguiente párrafo es para el paquete binario que será construido a partir del código fuente. Si hay más de un paquete binario que se genere del código fuente debe haber un párrafo como el que describiremos a continuación para cada uno. De nuevo, vamos a ir línea por línea:&lt;br /&gt;
&lt;br /&gt;
* '''Package:''' Esto especifica el nombre del paquete deb pero no la firma ni la etiqueta de la arquitectura. Los nombres que aparezcan en Package y Source deben ser el mismo.&lt;br /&gt;
&lt;br /&gt;
* '''Architecture:''' La arquitectura para la cual será construido el paquete/s. Algunos ejemplos son:&lt;br /&gt;
** all - El programa a empaquetar no depende de la arquitectura del sistema. Me refiero a programas hechos en Python o otros lenguajes interpretados como java. El resultado será un paquete binario cuyo nombre acabará en _all.deb.&lt;br /&gt;
** any - El programa a empaquetar depende de la arquitectura del sistema y debe ser compilado en todas las arquitecturas soportadas. Habrá un archivo .deb para cada arquitectura ( _i386.deb por ejemplo)&lt;br /&gt;
&lt;br /&gt;
Se puede optar por una o más de un subconjunto de arquitecturas (i386, amd64, ppc, etc.) para indicar que el programa a empaquetar depende de una arquitectura concreta y no funciona para todas las arquitecturas soportadas por Ubuntu&lt;br /&gt;
&lt;br /&gt;
* '''Depends:''' Esto indica al sistema las dependencias del paquete deb resultante de todo el proceso, normalmente se resuelven basándose en las dependencias de construcción (''Build-Depends'') de modo que si por ejemplo indicamos allí ''programa-dev'' automáticamente el sistema sustituirá las variables ''${shlibs:Depends}'' y/o ''${misc:Depends}'' por ''programa'' (sin el -dev).&lt;br /&gt;
&lt;br /&gt;
En algunas ocasiones (empaquetamiento de programas hechos en python, java y raras excepciones) es necesario indicar manualmente las dependencias del programa. Si se diera este caso lo más normal es añadirlas después de ''${misc:Depends}'' respetando la estructura de comas.&lt;br /&gt;
&lt;br /&gt;
* '''Recommends:''' Se usa para apquetes altamente recomendados y que normalmente se instalan junto al paquete. Algunos administradores de paquetes, por ejemplo aptitude, instalan automáticamente los paquetes que pongas en este campo.&lt;br /&gt;
&lt;br /&gt;
* '''Suggests:''' Se usa para paquetes que son similares o útiles cuando el paquete (que crearemos) esté instalado&lt;br /&gt;
&lt;br /&gt;
* '''Conflicts:''' Se usa para paquetes que presentarán problemas con este paquete. Ambos no pueden estar instalados en un mismo sistema. Si uno se instala el otro se desinstalará y viceversa.&lt;br /&gt;
&lt;br /&gt;
* '''Description:''' Aquí describiremos el programa, esto es lo que se verá cuando abrás el archivo .deb con un programa como [[GDebi]] La descripción de un paquete deb se basa en dos partes:&lt;br /&gt;
** Un &amp;quot;título&amp;quot; de 60 letras que va directamente después de ''Description:''&lt;br /&gt;
** Un texto ...de unas 47 letras (no estoy seguro si se pueden más) de largo con un espacio antes de cada linea. Los espacios entre párrafos se hacen mediante un punto.&lt;br /&gt;
&lt;br /&gt;
==== copyright ====&lt;br /&gt;
&lt;br /&gt;
Este archivo proporciona la información de derechos de autor. Generalmente, la información de copyright se encuentra en el archivo COPYING en el directorio principal del código fuente. Este archivo se debe incluir información como el nombre del empaquetador y del creador del paquete, la URL de donde conseguimos el código fuente, la licencia con el año del Copyright. Un plantilla del archivo podría ser:&lt;br /&gt;
&lt;br /&gt;
 This package was debianized by (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
 &lt;br /&gt;
 It was downloaded from: (URL de la web de descarga del programa)&lt;br /&gt;
 &lt;br /&gt;
 Upstream Author(s): (Nombre(s) y e-mail(s) del (los) autor(es) del programa)&lt;br /&gt;
 &lt;br /&gt;
 Copyright:&lt;br /&gt;
        Copyright (C) {año(s)} por {autor(es)} {correo(s) electrónico(s)}&lt;br /&gt;
 &lt;br /&gt;
 License:&lt;br /&gt;
 (Añade el texto de la licencia aquí. Para las licencias GNU basta con añadir la cabecera y&lt;br /&gt;
  enlazar al texto completo normalmente alojado en /usr/share/common-licenses.)&lt;br /&gt;
 &lt;br /&gt;
 the Ubuntu packaging:&lt;br /&gt;
      Copyright (C) (año(s)) por (Tu nombre) &amp;lt;tu_correo_electrónico&amp;gt; (Fecha)&lt;br /&gt;
      released under {la licencia que quieras para tu paquete}&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.ubuntu.com/PackagingGuide/Complete.&lt;/div&gt;</summary>
		<author><name>Festor</name></author>	</entry>

	<entry>
		<id>http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa</id>
		<title>Guía de empaquetamiento/Completa</title>
		<link rel="alternate" type="text/html" href="http://doc.ubuntu-es.org/Gu%C3%ADa_de_empaquetamiento/Completa"/>
				<updated>2008-06-25T20:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Festor: /* copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Esto es una traducción a la velocidad del sonido por lo que es más probable que tenga faltas de todo tipo... :/ --&amp;gt;&lt;br /&gt;
{{en desarrollo|Festor}}&lt;br /&gt;
&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
¡Bienvenido a la '''Guía de Empaquetamiento para Ubuntu'''! Esta guía pretende ser un de las principales referencias para aquellos que deseen construir y mantener paquetes Deb para [[Ubuntu]]. Asimismo muchos de los conceptos de esta guía podrían ser usados para hacer paquetes binarios para uso personal, está diseñada para aquellos que quieran distribuir sus paquetes. Aunque está orientada a la distribución GNU/Linux Ubuntu, debería ser al menos útil para cualquier distribución basada en [[Debian]].&lt;br /&gt;
&lt;br /&gt;
Hay varias razones por las que querrías aprender a empaquetar para Ubuntu. La primera, crear y arreglar paquetes *buntu es una gran forma de contribuir a la comunidad Ubuntu. También un buen camino para aprender cómo funciona Ubuntu y las aplicaciones que tienes instaladas. Quiźas quieras instalar un programa que no esté en los repositorios de Ubuntu. Ojalá después de que completes está guía tengas los suficientes conocimientos y herramientas para realizar todas estas cosas.&lt;br /&gt;
&lt;br /&gt;
=== Por dónde empezar ===&lt;br /&gt;
&lt;br /&gt;
Si eres completamente nuevo en la creación de paquetes deb entonces deberías leerte esta guía de principio a fin, prestando especial atención a las secciones '''[[#Requisitos|Requisitos]]''' y '''[[#Empaquetado básico|Empaquetado básico]]'''. Gente con cierta experiencia en el tema encontrará cosas más útiles en la secciones '''[[#Empaquetado|Empaquetado]]''' y '''[[#Errores comunes|Errores comunes]]'''.&lt;br /&gt;
&lt;br /&gt;
=== Requisitos ===&lt;br /&gt;
&lt;br /&gt;
Esta guía asume que el lector tiene un conocimiento razonable a cerca de la construcción y la instalación de software desde su código fuente en distribuciones GNU/Linux. Además usaremos la [[Interfaz de Línea de Comandos]] (CLI en inglés) así que deberías defenderte bastante bien usando una [[terminal]]. Deberías ser capaz de usar al menos las siguientes herramientas:&lt;br /&gt;
&lt;br /&gt;
* '''make''': GNU Make es una herramienta de construcción de software muy importante. Se usa para transformar una tarea de compilación compleja en algo trivial. Es muy importante que sepas usarlo, ya que desviaremos mucha de la información del proceso de empaquetamiento en un Makefile. La documentación está disponible en la web de GNU.&lt;br /&gt;
&lt;br /&gt;
* '''./configure''': Este script se incluye en casi todos los códigos fuente de programas para GNU/Linux, especialmente en programas escritos en lenguajes de programación compilados tales como C y C++. Se usa para generar un Makefile (archivo usado por make) adaptado a su sistema. Las herramientas estándar de empaquetamiento de Debian lo usan, así que es importante que sepas qué hace el script '''configure'''. Información sobre ./configure puede consultarse en la documentación del make.&lt;br /&gt;
&lt;br /&gt;
* '''[[apt]]/[[dpkg]]''': Más allá del uso básico de instalar programas, apt y dpkg tienen muchas características que los hacen muy útiles para empaquetar.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache dump&amp;lt;/code&amp;gt; - lista cada paquete en el cache. Este comando es especialmente util en combinación con grep. Un ejemplo apt-cache dump |grep foo buscará aquelos paqetes cuyos nombres o dependencias incluyan la palabra foo.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache policy&amp;lt;/code&amp;gt; - lista el repositorio (main/restricted/universe/multiverse) en cual existe el paquete.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache show&amp;lt;/code&amp;gt; - mostrar información acerca de un paquete binario&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache showsrc&amp;lt;/code&amp;gt; - mostrar información acerca de un código fuente&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;apt-cache rdepends&amp;lt;/code&amp;gt; - muestra las dependencias invertidas para un paquete&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -S&amp;lt;/code&amp;gt; - lista el/los paquete/s binario/s al cual/es pertenece un archivo en particular&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -l&amp;lt;/code&amp;gt; - lista los paquetes que tengas instalados en el sistema&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -c&amp;lt;/code&amp;gt; -lista el contenido de un paquete binario. Es util para asegurarse de que los archivos se instalan en los lugares correctos.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;dpkg -f&amp;lt;/code&amp;gt; muestra el archivo control de un paquete binario. Es útil para asegurarse de que las dependencias son correctas.&lt;br /&gt;
&lt;br /&gt;
:* &amp;lt;code&amp;gt;grep-dctrl&amp;lt;/code&amp;gt; - busca información especializada en los paquetes. Es un uso específico de la herramienta grep (pero no instalado por defecto)&lt;br /&gt;
&lt;br /&gt;
* '''diff''' y '''patch''':&lt;br /&gt;
&lt;br /&gt;
:* El programa diff se puede usar para comparar 2 archivos y de este modo crear parches. Un ejemplo típico podría ser:&lt;br /&gt;
&lt;br /&gt;
 diff -ruN archivo.antiguo archivo.nuevo &amp;gt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
Este comando creará un archivo &amp;lt;code&amp;gt;.diff&amp;lt;/code&amp;gt; que mostrará los cambios entre 2 archivos.&lt;br /&gt;
&lt;br /&gt;
:* El programa patch es usado para aplicar un parche (normalmente creado por diff o otro programa similar). Para aplicar el parche utiliza el comando:&lt;br /&gt;
&lt;br /&gt;
 patch -p0 &amp;lt; archivo.diff&lt;br /&gt;
&lt;br /&gt;
El parámetro &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; le dice a patch cómo debe formatear los nombres de