Gracias a las herramientas y la filosofía de GNU crear paquetes para Arch Linux es mucho más fácil de lo que parece ( que en otras distribuciones). Tratare de explicar como pueden hacer ustedes para contribuir a la causa del desarrollo de aplicaciones en el software libre.
¿El formato de paquetes de Arch
Por ejemplo en esta linea tratare de explicar a interpretar un paquete.
Nombre-del-paquete-versión-release-arquitectura.pkg.tar.gz
Por ejemplo:
firefox-2.0.0.14-1-i686.pkg.tar.gz
El primer campo es para el nombre del paquete que en el caso, firefox;
* La segunda es la versión del software. En el ejemplo anterior el firefox la versión de este paquete es 2.0.0.14;
* El tercer campo es la release o liberación del paquete. Sirve para indicar la “versión” del paquete (no el software). Si el paquete, por ejemplo, presentar un problema, la persona responsable de mantener pueden liberar una nueva versión del paquete para la misma versión del software. Para ello, deberá hacer cambios en el paquete y aumentar el valor de este campo en la tercera 1. El paquete se crearía, entonces firefox-2.0.0.14-2-i686.pkg.tar.gz;
* El cuarto ámbito es la arquitectura para que el paquete se ha creado. Oficialmente Arch está disponible para el i686 y x86_64 , pero compatibilidad para i586 y ppc se encuentran en el camino;
*. Pkg.tar.gz es la extensión del paquete que esta asociada al formato de compresión.
En este artículo se utiliza el billreminder como ejemplo para mostrar la creación de un paquete.
Para crear un paquete usted necesita dos cosas. PKGBUILD y el makepkg. El PKGBUILD es un archivo de texto que contiene toda la información necesaria para crear el paquete. Allí tiene usted el nombre del programa , la versión, la URL de la fuente, la licencia, las instrucciones de compilación.
El makepkg es responsable de la captura de todas estas instrucciones de la PKGBUILD y convertirlos en un paquete.
La estructura de PKGBUILD es el siguiente:
# Colaborador: Tu nombre
pkgname = nombre-paquete
pkgver = versión
pkgrel = liberación
pkgdesc = “Descripción del paquete”
arch = ( “arquitectura”)
url = “url software”
depende = ( “dependencias”)
licencia = ( “Licencia”)
fuente = (url de la fuente)
md5sums = ( “md5sum de la fuente”) recuerden que esta opción es para asegurar de que los paquetes descargados por el usuario concuerden con el origen
build() ( instrucciones para compilar )
El archivo es bastante simple y fácil de entender. Es básicamente la asignación de la variable. En cualquier caso, voy a hacer una mejor descripción de cada campo.
# Colaborador: La primera línea de PKGBUILD no es obligatoria. Se utiliza sólo para mostrar que creó el PKGBUILD y su dirección de correo electrónico (que se utiliza para el intercambio de información, sugerencias, preguntas, etc.) Aunque no es vinculante, este campo es prácticamente un patrón entre el paquete. Ejemplo:
# Contributor: Capach_xxx <capach at archlinux-pa.org>
pkgname: Coloca aquí el nombre del paquete. El estándar para Archlinux es que sean todas las letras minúsculas. También ayuda si el nombre del paquete es igual al nombre del directorio en que se encuentra, al igual que el nombre del tar.gz que contiene el código fuente de tu programa que vas a descargar.
pkgname = billreminder
pkgver: Coloca aquí la versión del paquete. Esta puede contener letras, números,puntos pero NO PUEDE contener guiones. Eso depende del modo de versionamiento que usa el programa que estas haciendo el paquete (major.minor.bugfix, major.date, etc). Sin embargo, en muchos casos es mejor apegarse al numero de version que es parte del nombre del archivo fuente (.tar.gz) para luego hacer los siguientes pasos mas sencillos. Nota: si el paquete fuente trae un guión reemplázalo por un piso (underscore) (’0.99-10′ => ‘0.99_10′)
pkgver = versión 0.3.1 de billreminder
pkgrel: Esto debería ser incrementado cada vez que lanzas el paquete, empezando por 1. Su propósito es diferenciar los distintos lanzamientos de misma versión de un paquete, ya que generalmente el primer lanzamiento contiene errores y problemas. Cuando haces el segundo lanzamiento (corrección de bugs, etc) aumentas la variable pkgrel para que Pacman sepa que debe reinstalarlo. Cuando una nueva versión del paquete es lanzada, reinicias la variable pkgrel a 1.
pkgdesc: He aquí la descripción del software.
Ejemplo de billreminder:
pkgdesc = “pequeña y rápida aplicación de contabilidad diseñado para permitir el fácil seguimiento de los proyectos de ley”Sólo dos observaciones:
* Tiene que ser en Inglés.
* Y usted no debe poner el nombre del paquete en la descripción, también sería un error poner la Descripción de esta manera:
pkgdesc = “Billreminder es un pequeño y rápido programa de contabilidad diseñado para permitir el fácil seguimiento de los proyectos de ley.”
Se decidió que el nombre del paquete no entrar en la descripción del mismo para facilitar la visualización en pacman y no causa la duplicidad.
arch: Debe contener una lista de arquitecturas, generalmente ‘i686′ ‘x86_64′, que describe donde el archivo PKGBUILD puede ser usado. Puedes acceder a este valor con la variable $arch durante la compilación
Ejemplo:
arch=(”i686″ “x86_64″)
url: Aquí puede poner la dirección de la página del programa que son los paquetes .
URL = “http://billreminder.sourceforge.net/”
depends: Aquí debería contener la lista de todos los paquetes que deben ser instalados para que este programa pueda correr, separado por espacios. Los nombres pueden ser encerrados por apostrofes para prevenir posibles problemas del shell, y la lista debe ser encerrada por paréntesis. A veces un programa requiere una versión mínima de una dependencia; en este caso, puedes usar el operador matemático de “mayor o igual”, y encerrar la sentencia entre comillas.Aquí hay un ejemplo de una dependencia del paquete glibc, ya que requiere que la librería slang tenga al menos versión 1.8.0: depends
(’glibc’ ’slang>1.8.0′)
Asumiendo que usted va a crear un paquete para un programa que se basa en el python, firefox, thunderbird y la variable sería la siguiente:
depende = ( “python” “firefox” “Thunderbird”)
Y en el caso de billreminder:
depende = ( “python-pysqlite” “python-notify” “dbus-python” “setuptools” “escritorio-file-utils” “pygobject” “PyGTK” “pil” “perlxml”)
Para saber lo que es un programa en particular tiene dependencias se puede visitar el sitio de la misma, utilizando el comando ldd o la namcap (una herramienta propia del Arch para ello).
Licencia: Aquí es colocado el tipo de licencia del programa. Arch se preocupe mucho sobre esto y usted debe prestar la máxima atención.
Ejemplos:
license= ( “MIT”)
license=(”GPL”)
source: Debe ser una lista con los archivos necesarios para construir el paquete, conteniendo al menos el lugar del paquete fuente, el cual en la mayoría de casos es un URL de FTP o HTTP encerrado en doble comillas. El PKGBUILD prototipo muestra como puedes usar las variables previas del nombre de paquete y versión en esta parte. Si quieres suministrar archivos que no se pueden descargar en el momento,por ejemplo, parches creados por si mismo, simplemente puedes ponerlos en el mismo directorio del PKGBUILD , y agregar el nombre del archivo a la lista. Cualquier ruta que coloques, será referente a la ubicación del PKGBUILD. Antes de empezar a construir el paquete, todos los archivos referenciados aquí serán descargados, comprobados y Makepkg no seguirá si alguno no se encuentra.
Ejemplo:
md5sums: Una lista de comprobación de errores de los archivos fuentes por medio de md5,separado por espacios y comillas. Una vez que se han descargados/encontrado todos los archivos necesarios,se hace una operación de suma md5 a cada archivo y se comprueba con los valores en esta lista, en el mismo orden que en la lista source. Es muy importante respetar el orden los archivos para quemakepkgconozca a que archivo le corresponde el valor de md5sum. Se puede generar rápidamente esta lista usando el comandomakepkg -g(después que la lista source se haya hecho) en el directorio que contiene elPKGBUILD.makepkg -g >>PKGBUILDgenerará las sumas y las agregará al final del archivoPKGBUILD, donde podrás mover la línea al lugar que corresponda.
build(): Aquí están escritos todos los comandos necesarios para compilar el paquete. Por lo general son los mismos comandos que utilizan para compilar paquete normalmente.
Ejemplo ./ Configure, make, make install entonces eso es lo que le coloca dentro de el build().
El billreminder, por ejemplo, utiliza el famoso configure, make, make install. Ejemplo:
build() {
cd ${startdir}/src/${pkgname}-${pkgver}
/configure –prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
}
Si presta atención, hay más información y por lo tanto, voy a explicar un poco de este paso.
* La primera línea es para usted para entrar en el directorio donde se encuentra la fuente del archivo o paquete que están comprimidos (por lo general a. Tar.gz o. Tar.bz2) para luego descomprimirlos, recordando de que dichos archivos con anterioridad fueron descargados .
${startdir}, ${pkgname} e {pkgver} son variables alteradas por el valor inicial de la guía (¿dónde está el PKGBUILD), el nombre del paquete y versión del mismo, respectivamente.
La segunda línea es ./configure normal con un –prefix=/usr recuerden que este ultimo sirve para indicar la ruta de instalación. El parámetro por defecto es /usr/local, pero Arch usa /usr por omisión
Se ejecuta make para compilar los paquetes (esto sirve para indicar si hubo o no error en la fase del make).
La última línea es quizás muy diferente a la demás . Es simplemente make install, pero con cierto nivel de seguridad para que a la hora de compilar e instalar el paquete no ocurra un error que dañe el sistema, esto se logra mediante la instrucción DESTDIR. Este DESTDIR=$startdir/pkg hace que la compilación / instalación / creación del paquete que se haga dentro de un sub-directorio pkg. Esto permite evitar daños a su sistema mientras está la construcción de millones de paquetes. =)
# Contributor: Capach_xxx <capach at archlinux-pa.org>pkgname=billreminder
pkgver=0.3.1
pkgrel=1
pkgdesc=”small and quick accounting application designed to allow for easy tracking of bills”
arch=(”i686″ “x86_64″)
url=”http://billreminder.sourceforge.net/”
depends=(”python-pysqlite” “python-notify” “dbus-python” “setuptools” “desktop-file-utils” “pygobject” “pygtk” “pil” “perlxml”)
license=(”MIT”)
source=(http://billreminder.googlecode.com/files/${pkgname}-${pkgver}.tar.bz2)
md5sums=(”d2ee06635ae8fc1f5746634c28e48858″)build() {
cd ${startdir}/src/${pkgname}-${pkgver}
./configure –prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
}
Ahora que usted tiene un PKGBUILD listo a creado su primer paquete de Arch/Linux
Hemos credo el paquete pero te preguntaras como carajo lo instalo bueno es muy simple, este archivo de texto PKGBUILD lo colocas dentro de un directorio de trabajo, por lo general el nombre del directorio esta asociado al nombre del programa que se va instalar por medio de este
PKGBUILD. Pongan atención no olviden que cuando están instalado este tipo de paquete en Arch es recomendable que el directorio madre o raíz donde converjan todos directorios de los programas que van a ser instalados se llame abs es por simple formalidad para mi criterio, ejemplo /home/user/abs/billreminder/ PKGBUILD.
Y en el caso de billreminder dentro de este subdirectorio ejecutaremos desde consola de usuario
Makepkg, esta ultima instrucción es para crear el paquete en base a las directrices que se encuentran dentro del archivo de texto PKGBUILD.
Todo esto generara un paquete que es compatible con pacman el gestor de paquetes de Arch,
dicho paquete creado tiene que se instalado con la siguiente instrucción:
Pacman -U paquete.pkg.tar.gz.
Recordando que necesitamos ejecutar esta instrucción con cierto nivel de privilegio por medio de sudo o instalándolo como super-administrador root
$sudo Pacman-U paquete.pkg.tar.gz
Muchas gracias soy Capach_xxx y espero seguir contribuyendo a la causa del software libre y los invito para la conferencia que tendremos en la provincia de Chiriquì República de Panamá en la Universidad Tecnológica sobre el Software libre, los invitamos 22 de agosto 2008
free6 gnu linux panama
Leave a Reply
You must be logged in to post a comment.





























