2009-09-05 12 views
41

Necesito escribir, o encontrar, un script para crear un paquete Debian, usando python-support, desde un paquete de Python. El paquete de Python será puro Python sin extensiones C.¿Cómo hago el paquete de Debian de un paquete de Python?

El paquete de Python para fines de prueba solo será un directorio con un archivo __init__.py vacío y un solo módulo de Python, package_test.py.

El script de empaque debe usar python-support para proporcionar el bytecode correcto para posibles instalaciones múltiples de Python en una plataforma de destino, es decir, v2.5 y v2.6 en Ubuntu Jaunty.

La mayoría de los consejos que encuentro al buscar en Google son solo ejemplos de hacks desagradables que ni siquiera usan python-support o python-central.

He pasado horas investigando esto, y lo mejor que se me ocurre es hackear el script de un proyecto de código abierto existente, pero no sé qué bits son necesarios para lo que estoy haciendo.

¿Alguien aquí hizo un paquete Debian de un paquete de Python de una manera razonablemente no hacky?

Estoy empezando a pensar que me llevará más de una semana pasar de no tener conocimientos de empaquetado de Debian y soporte de Python a obtener un script en funcionamiento. ¿Cuánto tiempo han tardado otros?

Respuesta

18

Me gustaría tener las fuentes de un paquete Debian existente, y reemplace el paquete real con usted paquete r Para encontrar una lista de paquetes que dependen de python-support, hacer

apt-cache rdepends python-support 

elegir el paquete que es Architecture: all, por lo que es un paquete puro en Python. Repasando esta lista, encontré que p. python-flup podría ser un buen punto de partida. Para obtener el código fuente de un tal paquete, hacer

apt-get source <package> 

Para construirlo, hacer

cd <packagesrc> 
dpkg-buildpackage -rfakeroot 

Cuando editarlo, esperan que sólo necesita los archivos de la carpeta debian; reemplace todas las referencias a flup con su propio nombre de paquete.

Una vez que empiece, le llevará un día completarlo.

+3

Nota: dado que esta respuesta fue escrito, 'python-support' está desfasada y en favor de' dh_python2 '. [Transición a dh_python2] (http://wiki.debian.org/Python/TransitionToDHPython2) se describe brevemente en la wiki de Debian. – drdaeman

+0

@drdaeman @Martin: dh_python2 ahora se envía directamente en el paquete 'python', por lo que esta receta ya no funciona tan bien. ¿Cómo lo actualizarías? – bukzor

19

Creo que lo que quiere es http://pypi.python.org/pypi/stdeb:

stdeb produce paquetes fuente de Debian de paquetes de Python a través de un nuevo comando distutils, sdist_dsc. Se proporcionan los valores predeterminados automáticos para el paquete Debian, pero muchos aspectos del paquete resultante pueden ser personalizados (consulte la sección de personalización , más adelante). Un comando adicional , bdist_deb, crea un paquete binario Debian , un archivo .deb.

14

La mayoría de las respuestas incluidas en este documento son obsoletas, afortunadamente, un gran post wiki de Debian recientemente se ha hecho, lo que explica las mejores prácticas actuales y describe cómo construir paquetes Debian de los módulos Python y aplicaciones.

15

La forma correcta de construir un paquete deb está utilizando dpkg-buildpackage pero a veces es un poco complicado. En su lugar, puede usar dpkg -b <folder> y creará su paquete Debian.

Estos son los elementos básicos para la creación de un paquete Debian con dpkg -b <folder> con cualquier binario o con cualquier tipo de secuencia de comandos que se ejecuta automáticamente sin necesidad de compilación manual (Python, Bash, Pearl, Ruby):

  1. Cree el archivos y carpetas con el fin de recrear la siguiente estructura:

    ProgramName-Version/ 
    ProgramName-Version/DEBIAN 
    ProgramName-Version/DEBIAN/control 
    ProgramName-Version/usr/ 
    ProgramName-Version/usr/bin/ 
    ProgramName-Version/usr/bin/your_script 
    

    los scripts colocados en /usr/bin/ son llamados directamente desde el terminal, tenga en cuenta que yo no agregar una extensión a la secuencia de comandos. También puede observar que la estructura del paquete deb será la estructura del programa una vez que esté instalado. Por lo tanto, si sigue esta lógica si su programa tiene un único archivo, puede colocarlo directamente en ProgramName-Version/usr/bin/your_script, pero si tiene varios archivos, debe colocarlos en ProgramName-Version/usr/share/ProgramName/all your files y colocar solo un archivo en /usr/bin/ que llamará a sus scripts desde /usr/share/ProgramName/

  2. cambian todo el permiso de carpeta a la raíz:

    chown root:root -R /path/to/ProgramName-Version 
    
  3. cambiar los permisos del guión:

    chmod 0755 /path/to/the/script 
    
  4. Finalmente, puede ejecutar: dpkg -b /path/to/the/ProgramName-Version y se creará su paquete Deb. (También puede agregar los scripts inst correos/pre y todo lo que desee, funciona como un paquete normal de Debian)


Aquí se muestra un ejemplo del archivo control.Sólo tiene que copiar y pegar en un archivo vacío llamado "control" y ponerlo en la carpeta DEBIAN

Package: ProgramName 
Version: VERSION 
Architecture: all 
Maintainer: YOUR NAME <EMAIL> 
Depends: python2.7, etc , etc, 
Installed-Size: in_kb 
Homepage: http://foo.com 
Description: Here you can put a one line description. This is the short Description. 
Here you put the long description, indented by 1 space. 
+0

gracias, por la guía. ¿Cómo puedo agregar scripts pre/post inst? – Gleb

+3

@Gleb los scripts previos/posteriores deben colocarse dentro de la carpeta 'DEBIAN'. Simplemente agregue su secuencia de comandos con el nombre correcto 'preinst',' postinst', 'prerm' [etc ..] (https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html). Estoy feliz de que te haya ayudado :) – rsm

Cuestiones relacionadas