Как добавить бинарный файл в мой существующий пакет PPA
Добавить измененные или новые текстовые файлы в мой пакет 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
3 ответа
Что я сделал:
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
Просто получите 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":
Получить источник:
apt-get source rhythmbox-plugin-llyricsИзмените текстовый файл и добавьте 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]
Добавить в список изменений и увеличить версию с
dch -v 0.1-3ubuntu6~izx1Примите изменения текста, игнорируя 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
Источник сборки / изменения:
$ 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...)
Это немного сложнее, чем просто добавить файл.
Во-первых, вам нужно будет перекомпилировать.orig.tar.gz с включенными двоичными файлами в новый пакет с исходным кодом, и, вероятно, потребуется увеличить версию программного обеспечения (package_1.0.0.orig.tar.gz -> package_1.0.1.orig.tar.gz или что-то) и в смоле, и в 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