¿Cómo agrego un archivo binario a mi paquete PPA existente?

10

Agregar archivos de texto modificados o nuevos a mi paquete PPA es bastante simple:

Paso 1:

apt-get source [foo-package]
cd [foo-package]

Paso 2: agregue o modifique nuevos archivos de texto que contengan los cambios

Paso 3: actualiza el registro de cambios:

dch -i

Paso 4: crea un parche

dpkg-source --commit

Paso 5: crea un paquete fuente

debuild -S 

Paso 6: subir a la plataforma de lanzamiento

cd ..
dput [myppa]/[foo_source.changes]

Sin embargo, ahora necesito agregar un nuevo archivo de icono (un archivo .png) al paquete existente.

Entonces, en el paso 2 : solo se copió en el [paquete-foo]

En el paso 4 , obtengo los siguientes errores:

dpkg-source: error: cannot represent change to foo-package/foo-icon.png: binary file contents changed
dpkg-source: error: unrepresentable changes to source

Si intento pasar al paso 5, obtengo los siguientes errores adicionales a los anteriores:

dpkg-source: error: add foo-package/foo-icon.png in debian/source/include-binaries if you want to store the modified binary in the Debian tar-ball
...
dpkg-buildpackage -rfakeroot -d -us -uc -S failed

¿Alguna idea de cómo agrego un archivo de icono binario a mi paquete PPA existente?


Más información

Mediante la ejecución:

debuild -S --source-option=--include-binaries

Esto permite que se construya el paquete fuente y es posible el paso 6 .

Sin embargo, esta no es realmente la respuesta, porque posteriormente no puedo hacer más cambios en el código ( paso 2 ) porque sigo recibiendo los mismos errores.

No parece que pueda hacerlo dpkg-source --commit --source-option=--include-binariesporque esto solo da errores:

dpkg-source --commit --source-option=--include-binaries
dpkg-source: warning: --source-option=--include-binaries is not a valid option for Dpkg::Source::Package::V3::quilt
dpkg-source: error: cannot represent change to foo-package/foo-icon.png: binary file contents changed
dpkg-source: error: unrepresentable changes to source
fossfreedom
fuente

Respuestas:

8

Lo que hice:

apt-get source rhythmbox-plugin-llyrics
cd rhythmbox-plugin-llyrics-0.1/
echo '#Junk commit' >> llyrics/ChartlyricsParser.py
sed -i 's/Maintainer: fossfreedom <[email protected]>/Maintainer: Andrew King (No comment) <[email protected]>/g' debian/control
sed -i 's/fossfreedom <[email protected]>/Andrew King (No comment) <[email protected]>/g' debian/changelog
dpkg-source --commit

debuild -S -sa
mkdir debian/icons
cp ~/Pictures/awesome-cat.jpg ./debian/icons/
echo 'debian/icons/awesome-cat.jpg' > debian/source/include-binaries
cd ..
dpkg-source --include-binaries -b rhythmbox-plugin-llyrics-0.1
cd -
debuild -S

echo '#Junk commit' >> llyrics/ChartlyricsParser.py
dpkg-source --commit

#so now it's still allowing commits and in the deb-src...add it to install
echo 'debian/icons/* /usr/share/icons/hicolor/' >> debian/install
echo '' >> debian/install
debuild -S

#note that you should have the proper subfolders here e.g. 32x32/myicon.png or whatever
#also note that per packaging guidelines it should be one entry per file, not a wildcard

Confirmó que empuja correctamente y se basa en Launchpad fossfreedom

RobotHumanos
fuente
1
Skeksi, hermano! <fistbump> ¿Es hora de poner en orden esos uuencoders? ;)
ish
5

Simplemente obtenga dpkg-source: comprométase a ignorar los archivos binarios con el extend-diff-ignoreinterruptor

Aquí hay otra forma más simple de hacerlo: básicamente le dice a dpkg-source que ignore lo que no puede comprender (es decir, archivos binarios) y que se ocupe de sus propios asuntos;)

Después de agregar un archivo (s) binario la primera vez, la clave es usarlo dpkg-source --commitcon el --extend-diff-ignoreinterruptor, junto con las rutas / nombres de archivo apropiados para ignorar (formato Perl regex).

Por ejemplo, suponga que pega un montón de PNG en el llyricsdirectorio y luego modifica algunos archivos de texto. La llamada de confirmación correcta es:

dpkg-source --commit --extend-diff-ignore="(^|/)(llyrics/.*\.png)$"

Sigue eso con:

debuild -S --source-option=--include-binaries

para subir tu PPA.


Probemos esto con el rhythmbox-plugin-llyricspaquete del PPA "patio de recreo" de fossfreedom:

  1. Obtener fuente: apt-get source rhythmbox-plugin-llyrics

  2. Modifique un archivo de texto y agregue un PNG:

    $ cd rhythmbox-plugin-llyrics-0.1
    $ echo FORCE-A-DIFF >> liricos / README 
    $ wget -Ollyrics / dancemonkeyboy.png \
       http://www.samrethsingh.com/wp-content/uploads/2009/02/untitled-image.png
    ... `llyrics / dancemonkeyboy.png 'guardado [243304/243304]
    
  3. Agregar al registro de cambios e incrementar la versión con dch -v 0.1-3ubuntu6~izx1

  4. Confirma los cambios de texto mientras ignoras el PNG con:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: cambios locales detectados, los archivos modificados son:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Ingrese el nombre del parche deseado: PPABinaryTest
    dpkg-source: info: los cambios locales se registraron en un nuevo parche: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Generar fuente / cambios:

    $ debuild -S --source-option = - include-binaries
    ...
    dpkg-source: info: compilación de rhythmbox-plugin-llyrics usando ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: agregar llyrics / dancemonkeyboy.png a debian / source / include-binaries
    ...
    

¡Y voilá! ( Deb construido por Launchpad - tenga en cuenta la diferencia de tamaño ~ 200k ... )

ish
fuente
2

Esto es un poco más difícil que simplemente agregar un archivo.

Primero, necesitaría reconstruir el .orig.tar.gz con los binarios incluidos en el nuevo paquete fuente, y probablemente necesitaría incrementar la versión del software ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzo algo) tanto en el tar como en el debian/changelog.

Después de modificar orig.tar.gz con los nuevos archivos (NO incluya debian / files en orig.tar.gz), entonces agregaría una debian/changelogentrada, cambiando la versión para incrementarla como lo hizo con orig.tar. gz.

Luego reconstruya el paquete fuente ( debuild -S) y cargue el nuevo paquete fuente al PPA. Ese nuevo paquete fuente sobrescribirá el "más antiguo" en el PPA.


Desde el chat:

@LordofTime ... wouldnt launchpad complain that its just received a different original source file


@fossfreedom not if you increment the version
new version, new source
@fossfreedom if you don't increment the version it'll explode
so you must increment the version
also, make individual debian packages for each release of ubuntu
and it'll not yell as much (it'll still enforce original version)
i.e.
"I am updating the NGINX PPA from 1.2.2 to 1.2.3. I need to get the 1.2.3 source, and work from that."
"I change the package, and the .orig.tar.gz, and upload the new package to Launchpad."
"If there are no build errors, then i'm done. If there is a build error, then I damned well better fix that error."
(then reupload with 1.2.3-2 or something)
but generally i do build testing in a staging repo
Thomas Ward
fuente
¿Quizás esta respuesta se beneficiaría si se editara solo "si no incrementa la versión explotará"?
Jonas G. Drange
Siempre puede proponer una edición a la respuesta Jonas, y comentar por qué cree que la edición es útil y yo y otros podríamos mirarla y considerarla.
Thomas Ward
Lamentablemente, no estoy familiarizado con el sistema de empaquetado de Debian, así que no sé por qué explota exactamente. Una edición hecha por mí sería dolorosamente inadecuada.
Jonas G. Drange