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


10

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

Passo 1:

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

Etapa 2: adicionar ou modificar novos arquivos de texto que contêm as alterações

Etapa 3 - atualize o changelog:

dch -i

Etapa 4 - crie um patch

dpkg-source --commit

Etapa 5 - criar um pacote de origem

debuild -S 

Etapa 6 - fazer upload para a barra de ativação

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

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

Então, na etapa 2 - apenas copiei para o [foo-package]

Na etapa 4 - eu 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 avançar para a etapa 5, obtenho os seguintes erros adicionais para o 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 adiciono um arquivo de ícone binário ao meu pacote PPA existente?


Mais Informações

Correndo:

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

Isso permite que o pacote de origem seja criado e a etapa 6 é possível.

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

Não parece que eu posso fazer, dpkg-source --commit --source-option=--include-binariesporque isso apenas 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

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 <somewhere@xmail.com>/Maintainer: Andrew King (No comment) <newplace@ymail.com>/g' debian/control
sed -i 's/fossfreedom <somewhere@xmail.com>/Andrew King (No comment) <newplace@ymail.com>/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 empurra e constrói corretamente o fossfreedom da Barra de ativação


1
Skeksi, mano! <fistbump> Hora de acertar esses codificadores? ;)
ish

5

Basta obter o dpkg-source --commit para ignorar arquivos binários com o extend-diff-ignoreswitch

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

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

Por exemplo, suponha que você cole um monte de PNGs no llyricsdiretório 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 rhythmbox-plugin-llyricspacote do PPA "playground" do 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 >> letra / README 
    $ wget -Ollyrics / dancemonkeyboy.png \
       http://www.samrethsingh.com/wp-content/uploads/2009/02/untitled-image.png
    ... `llyrics / dancemonkeyboy.png 'salvo [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: alterações locais detectadas, os arquivos modificados são:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Digite o nome do patch desejado: PPABinaryTest
    dpkg-source: info: as alterações locais foram registradas em um novo patch: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Origem / alterações da compilação:

    $ debuild -S --source-option = - binários de inclusão
    ...
    dpkg-source: info: construindo rhythmbox-plugin-llyrics usando ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz existente
    dpkg-source: info: adicionando llyrics / dancemonkeyboy.png ao debian / source / include-binaries
    ...
    

E ... voila! ( Deb criada pelo Launchpad - observe a diferença de tamanho de ~ 200k ... )


2

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

Primeiro, você precisaria recriar o arquivo .orig.tar.gz com os binários incluídos no novo pacote de código-fonte e provavelmente precisaria incrementar a versão do software ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzou algo), tanto no tar quanto 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 debian/changelogentrada, alterando a versão para incrementá-la, como você fez no orig.tar. gz.

Em seguida, recrie o pacote de origem ( debuild -S) e faça o upload do novo pacote de origem no PPA. Esse novo pacote de origem substituirá 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

Talvez essa resposta se beneficie sendo editada para apenas "se você não incrementar a versão, ela explodirá"?
Jonas G. Drange

Você sempre pode propor uma edição para a resposta Jonas e comentar por que você acha que a edição é útil, e eu e outras pessoas podemos examiná-la e considerá-la.
Thomas Ward

Infelizmente, eu não estou familiarizado com o sistema de empacotamento Debian, então exatamente por que ele explode está além de mim. Uma edição feita por mim seria dolorosamente inadequada.
Jonas G. Drange
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.