Как добавить двоичный файл в существующий пакет PPA

10

Добавление измененных или новых текстовых файлов в мой пакет PPA достаточно просто:

Шаг 1:

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

Шаг 2: добавлять или изменять новые текстовые файлы, содержащие изменения

Шаг 3 - обновите журнал изменений:

dch -i

Шаг 4 - создайте патч

dpkg-source --commit

Шаг 5 - создайте исходный пакет

debuild -S 

Шаг 6 - загрузка на панель запуска

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

Однако теперь мне нужно добавить новый файл значка (файл .png) в существующий пакет.

Итак, на шаг 2 - просто скопирован в [foo-package]

В шаг 4 - я получаю следующие ошибки:

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

Если я попытаюсь перейти к шагу 5, я получаю следующие дополнительные ошибки выше:

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

Любые идеи, как добавить бинарный файл значка в существующий пакет PPA?

Дополнительная информация

Запустив:

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

Затем это позволяет создать исходный пакет и шаг 6 .

Однако на самом деле это не ответ - потому что впоследствии я не могу выполнить дальнейшие изменения кода ( step 2 ), потому что я все еще получаю те же ошибки.

Не похоже, что я могу сделать dpkg-source --commit --source-option=--include-binaries , потому что это просто дает ошибки:

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 17.07.2012 в 10:36
источник

3 ответа

8

Что я сделал:

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

Подтверждено, что он правильно толкает и строит на Launchpad <Суб> fossfreedom

    
ответ дан RobotHumans 18.07.2012 в 12:09
источник
5

Просто получите dpkg-source --commit , чтобы игнорировать двоичные файлы с помощью переключателя extend-diff-ignore

Вот еще один простой способ сделать это: вы в основном говорите dpkg-source , чтобы игнорировать то, что он не может понять (т. е. двоичные файлы), и учитывать его собственный бизнес;)

После добавления двоичного файла (ов) в первый раз ключ должен использовать dpkg-source --commit с переключателем --extend-diff-ignore вместе с соответствующими путями / именами файлов для игнорирования (формат регулярного выражения Perl).

Например, предположим, что вы вложили кучу PNG в каталог llyrics , а затем измените некоторые текстовые файлы. Правильный вызов фиксации:

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

Следуйте этому:

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

, чтобы загрузить ваш PPA.

Давайте проверим это с пакетом rhythmbox-plugin-llyrics от «игровой площадки» fossfreedom:

  1. Получить исходный код: apt-get source rhythmbox-plugin-llyrics

  2. Измените текстовый файл и добавьте 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. Добавить в список изменений и увеличить версию с помощью dch -v 0.1-3ubuntu6~izx1

  4. Зафиксируйте изменения текста, игнорируя PNG с помощью:

    $ 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. Сборка источника / изменений:

    $ 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
    ...
    

и ... вуаля! ( Launchpad-built deb- -отметить разницу в размере 200 тыс. пикселей ... )

    
ответ дан izx 19.07.2012 в 06:51
2

Это немного сложнее, чем просто добавить файл.

Во-первых, вам нужно будет перестроить файл .orig.tar.gz с включенными двоичными файлами в новом исходном пакете и, вероятно, потребуется увеличить версию программного обеспечения ( package_1.0.0.orig.tar.gz - gt; package_1.0.1.orig.tar.gz или что-то еще) в tar, и в debian/changelog .

После изменения файла orig.tar.gz с новыми файлами (НЕ включайте debian / files в orig.tar.gz), вы затем добавите запись debian/changelog , изменив версию, чтобы увеличить ее, как вы это делали к orig.tar.gz.

Затем перестройте исходный пакет ( debuild -S ) и загрузите новый исходный пакет в PPA. Этот новый исходный пакет перезапишет «более старый» в PPA.

Из чата:

@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 18.07.2012 в 11:59