Como eu adiciono um arquivo binário ao meu pacote PPA existente

10

Adicionar arquivos de texto modificados ou novos ao meu pacote PPA é bastante simples:

Etapa 1:

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

Etapa 2: adicionar ou modificar novos arquivos de texto contendo as alterações

Passo 3 - atualize o changelog:

dch -i

Etapa 4 - criar um patch

dpkg-source --commit

Passo 5 - criar um pacote fonte

debuild -S 

Etapa 6 - fazer o upload para o launchpad

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

No entanto, agora preciso adicionar um novo arquivo de ícone (um arquivo .png) ao pacote existente.

Então, no passo 2 - acabou de ser copiado para o [foo-package]

No passo 4 - recebo os seguintes erros:

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

Se eu tentar mudar para o passo 5, recebo os seguintes erros adicionais ao acima:

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

Alguma idéia de como adicionar um arquivo de ícone binário ao meu pacote de PPA existente?

Mais informações

Ao executar:

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

Isso permite que o pacote fonte seja construído e o passo 6 seja possível.

No entanto, esta não é realmente a resposta - porque subsequentemente não posso fazer mais alterações de código ( etapa 2 ) porque ainda estou recebendo os mesmos erros.

Não parece que eu possa fazer dpkg-source --commit --source-option=--include-binaries porque isso só dá erros:

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
    
por fossfreedom 17.07.2012 / 12:36

3 respostas

8

O que eu fiz:

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

Confirmado que ele envia e constrói corretamente no Launchpad fossfreedom

    
por RobotHumans 18.07.2012 / 14:09
5

É só pegar dpkg-source --commit para ignorar os arquivos binários com a extend-diff-ignore switch

Aqui está outra forma mais simples de fazê-lo: você basicamente diz ao dpkg-source para ignorar o que ele não pode compreender (isto é, arquivos binários) e para cuidar de seus próprios negócios;)

Após adicionar um arquivo (s) binário pela primeira vez, a chave é usar dpkg-source --commit com a opção --extend-diff-ignore , juntamente com os caminhos / nomes de arquivos apropriados a serem ignorados (formato regex Perl).

Por exemplo, suponha que você coloque vários PNGs no diretório llyrics e modifique alguns arquivos de texto. A chamada de confirmação correta é:

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

Siga isso com:

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

para fazer o upload do seu PPA.

Vamos testar isso com o pacote rhythmbox-plugin-llyrics do PPA "playground" da fossfreedom:

  1. Obter fonte: apt-get source rhythmbox-plugin-llyrics

  2. Modifique um arquivo de texto e adicione um PNG:

    $ cd rhythmbox-plugin-llyrics-0.1
    $ echo FORCE-A-DIFF >> llyrics/README 
    $ wget -Ollyrics/dancemonkeyboy.png \
       http://www.samrethsingh.com/wp-content/uploads/2009/02/untitled-image.png
    ... 'llyrics/dancemonkeyboy.png' saved [243304/243304]
    
  3. Adicione ao changelog e incremente a versão com dch -v 0.1-3ubuntu6~izx1

  4. Confirme as alterações de texto enquanto ignora o PNG com:

    $ dpkg-source --commit --extend-diff-ignore="(^|/)(llyrics/.*\.png)$"
    dpkg-source: info: local changes detected, the modified files are:
    rhythmbox-plugin-llyrics-0.1/llyrics/README
    Enter the desired patch name: PPABinaryTest
    dpkg-source: info: local changes have been recorded in a new patch: rhythmbox-plugin-llyrics-0.1/debian/patches/PPABinaryTest
    
  5. Criar fonte / alterações:

    $ debuild -S --source-option=--include-binaries
    ...
    dpkg-source: info: building rhythmbox-plugin-llyrics using existing ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: adding llyrics/dancemonkeyboy.png to debian/source/include-binaries
    ...
    

E ... voila! ( Debate construído pelo Launchpad - observe a diferença de tamanho de ~ 200k ... )

    
por ish 19.07.2012 / 08:51
2

Isso é um pouco mais difícil do que apenas adicionar um arquivo.

Primeiro, você precisaria reconstruir o .orig.tar.gz com os binários incluídos no novo pacote de origem, e provavelmente precisaria incrementar a versão do software ( package_1.0.0.orig.tar.gz - > package_1.0.1.orig.tar.gz ou algo assim) ambos no tar e no debian/changelog .

Depois de modificar o orig.tar.gz com os novos arquivos (NÃO inclua debian / files no orig.tar.gz), você adicionaria uma entrada debian/changelog , alterando a versão para incrementá-la como fez para o orig.tar.gz.

Em seguida, recrie o pacote de origem ( debuild -S ) e faça o upload do novo pacote de origem para o PPA. Esse novo pacote de fontes irá sobrescrever o "mais antigo" no PPA.

Do bate-papo:

@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
    
por Thomas Ward 18.07.2012 / 13:59