Как добавить бинарный файл в существующий пакет 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 .

Однако это на самом деле не ответ - потому что впоследствии я не могу вносить дальнейшие изменения в код ( шаг 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
свобода ископаемых
источник

Ответы:

8

Что я сделал:

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

Подтвердил, что правильно запускает и запускает на Launchpad fossfreedom

RobotHumans
источник
1
Скекси, братан! <fistbump> Время установить эти uuencoders? ;)
Иш
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пакетом из PPA "fossfreedom":

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

  2. Измените текстовый файл и добавьте PNG:

    $ cd rhythmbox-plugin-llyrics-0.1
    $ echo FORCE-A-DIFF >> Тексты песен / README 
    $ wget -Ollyrics / dancemonkeyboy.png \
       http://www.samrethsingh.com/wp-content/uploads/2009/02/untitled-image.png
    ... `llyrics / dancemonkeyboy.png 'сохранено [243304/243304]
    
  3. Добавить в список изменений и увеличить версию с dch -v 0.1-3ubuntu6~izx1

  4. Примите изменения текста, игнорируя PNG с:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: обнаружены локальные изменения, измененные файлы:
    Rhythmbox-плагин-llyrics-0,1 / llyrics / README
    Введите желаемое название патча: PPABinaryTest
    dpkg-source: info: локальные изменения были записаны в новом патче: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Источник сборки / изменения:

    $ debuild -S --source-option = - include-binaries
    ...
    dpkg-source: info: создание rhythmbox-plugin-llyrics с использованием существующих ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: добавление llyrics / dancemonkeyboy.png в debian / source / include-binaries
    ...
    

И ... вуаля! ( Deb-сборка на Launchpad - обратите внимание на разницу в размере ~ 200k ... )

иш
источник
2

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

Во-первых, вам нужно перестроить файл .orig.tar.gz с включенными двоичными файлами в новый пакет с исходным кодом, и, вероятно, потребуется увеличить версию программного обеспечения ( package_1.0.0.orig.tar.gz-> 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
Томас Уорд
источник
Может быть, этот ответ выиграет, если его отредактировать, чтобы просто «если вы не увеличите версию, она взорвется»?
Джонас Г. Дрейндж
Вы всегда можете предложить изменить ответ Jonas и прокомментировать, почему вы считаете, что редактирование полезно, и я и другие могут посмотреть на него и рассмотреть его.
Томас Уорд
К сожалению, я незнаком с системой упаковки Debian, поэтому я не знаю, почему она взорвалась. Редактирование, сделанное мной, было бы крайне неадекватным.
Джонас Г. Дрейндж