Як додати двійковий файл до наявного пакету 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-пакет]

На кроці 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

Підтверджено, що це правильно натискає та будує fossfreedom Launchpad


1
Скекси, брато! <fistbump> Час встановити ці ууенкодери прямо? ;)
Останній

5

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

Ось ще один простіший спосіб зробити це: ви в основному скажете dpkg-джерело ігнорувати те, що він не може зрозуміти (тобто, бінарні файли), і пам’ятати про власний бізнес;)

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

Наприклад, припустимо, що ви вставляєте в llyricsкаталог купу PNG , а потім змінюєте деякі текстові файли. Правильний виклик фіксації:

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

Дотримуйтесь цього за допомогою:

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

щоб завантажити PPA.


Давайте перевіримо це за допомогою rhythmbox-plugin-llyricsпакету з PPA "playground" fossfreedom:

  1. Отримати джерело: apt-get source rhythmbox-plugin-llyrics

  2. Змініть текстовий файл та додайте PNG:

    $ cdhythmbox-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 = "(^ | /) (лірика /.* \. png) $"
    dpkg-source: інформація: виявлені локальні зміни, змінені файли:
    ritbox-plugin-llyrics-0,1 / лірика / README
    Введіть потрібну назву виправлення: PPABinaryTest
    dpkg-source: info: локальні зміни були записані в новому патчі: ritambox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Збірка джерела / зміни:

    $ debuild -S --source-option = - включає бінарні файли
    ...
    dpkg-джерело: інформація: побудова ритмбокса-плагіна-лірики з використанням існуючих ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: info: додавання лірики / dancemonkeyboy.png до debian / source / include-binaries
    ...
    

І ... вуаля! ( Дебют, побудований на стартовій панелі - врахуйте різницю розміру ~ 200 кб ... )


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 / файли в orig.tar.gz), ви додасте debian/changelogзапис, змінивши версію, щоб збільшити її так, як ви це робили до orig.tar. гз.

Потім відновіть вихідний пакет ( 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 G. Drange

Ви завжди можете запропонувати редагувати відповідь Йонас і прокоментувати, чому ви вважаєте, що редакція корисна, і я та інші могли б розглянути її та розглянути.
Thomas Ward

На жаль, я не знайомий із системою упаковки Debian, тому саме те, чому вона вибухає, - поза мною. Зроблена власною редакцією була б болісно неадекватною.
Jonas G. Drange
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.