Jak dodać plik binarny do mojego istniejącego pakietu PPA

10

Dodanie zmodyfikowanych lub nowych plików tekstowych do mojego pakietu PPA jest dość proste:

Krok 1:

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

Krok 2: dodaj lub zmodyfikuj nowe pliki tekstowe zawierające zmiany

Krok 3 - Zaktualizuj dziennik zmian:

dch -i

Krok 4 - utwórz łatkę

dpkg-source --commit

Krok 5 - utwórz pakiet źródłowy

debuild -S 

Krok 6 - prześlij do startera

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

Jednak teraz muszę dodać nowy plik ikony (plik .png) do istniejącego pakietu.

Więc w kroku 2 - właśnie skopiowałem do [pakietu foo]

W kroku 4 - otrzymuję następujące błędy:

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

Jeśli spróbuję przejść do kroku 5, otrzymuję następujące dodatkowe błędy do powyższego:

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

Wszelkie pomysły, jak dodać plik ikony binarnej do mojego istniejącego pakietu PPA?


Więcej informacji

Biegiem:

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

Pozwala to następnie na zbudowanie pakietu źródłowego i możliwy jest krok 6 .

Jednak tak naprawdę nie jest to odpowiedź - ponieważ później nie mogę dokonać dalszych zmian kodu ( krok 2 ), ponieważ wciąż pojawiają się te same błędy.

Nie wygląda na to, że mogę to zrobić, dpkg-source --commit --source-option=--include-binariesponieważ to tylko daje błędy:

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
źródło

Odpowiedzi:

8

Co ja zrobiłem:

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

Potwierdzono, że poprawnie wypycha i opiera się na fossfreedom w Launchpad

RobotHumans
źródło
1
Skeksi, stary! <fistbump> Czas, aby ustawić uuencodery prosto? ;)
ish
5

Wystarczy pobrać dpkg-source --commit, aby zignorować pliki binarne za pomocą extend-diff-ignoreprzełącznika

Oto inny prostszy sposób: po prostu powiedz dpkg-source, aby ignorował to, czego nie może zrozumieć (tj. Pliki binarne), i miał na uwadze własny biznes;)

Po dodaniu pliku binarnego (y) po raz pierwszy, klucz jest do korzystania dpkg-source --commitz --extend-diff-ignoreprzełącznika, wraz z odpowiednimi Ścieżki / nazw plików do formatu regex Ignoruj (Perl).

Załóżmy na przykład, że umieściłeś kilka plików PNG w llyricskatalogu, a następnie zmodyfikujesz niektóre pliki tekstowe. Prawidłowe wywołanie zatwierdzenia to:

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

Śledź to za pomocą:

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

aby otrzymać plik PPA.


Przetestujmy to z rhythmbox-plugin-llyricspakietem z PPA „placu zabaw” fossfreedom:

  1. Uzyskaj źródło: apt-get source rhythmbox-plugin-llyrics

  2. Zmodyfikuj plik tekstowy i dodaj 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
    ... zapisano „llyrics / dancemonkeyboy.png” [243304/243304]
    
  3. Dodaj do dziennika zmian i wersji przyrostowej za pomocą dch -v 0.1-3ubuntu6~izx1

  4. Zatwierdź zmiany tekstu, ignorując PNG za pomocą:

    $ dpkg-source --commit --extend-diff-ignore = "(^ | /) (llyrics /.* \. png) $"
    dpkg-source: info: wykryto zmiany lokalne, zmodyfikowane pliki to:
    rhythmbox-plugin-llyrics-0.1 / llyrics / README
    Wprowadź żądaną nazwę poprawki: PPABinaryTest
    dpkg-source: info: lokalne zmiany zostały zarejestrowane w nowej łatce: rhythmbox-plugin-llyrics-0.1 / debian / patches / PPABinaryTest
    
  5. Kompiluj źródło / zmiany:

    $ debuild -S --source-option = - include-binaria
    ...
    dpkg-source: info: budowanie rhythmbox-plugin-llyrics przy użyciu istniejących ./rhythmbox-plugin-llyrics_0.1.orig.tar.gz
    dpkg-source: informacje: dodawanie llyrics / dancemonkeyboy.png do debian / source / include-binaries
    ...
    

I ... voila! ( Deb wbudowany w Launchpad - zauważ różnicę wielkości ~ 200k ... )

ish
źródło
2

Jest to trochę trudniejsze niż zwykłe dodanie pliku.

Najpierw musisz przebudować .orig.tar.gz z dołączonymi plikami binarnymi w nowym pakiecie źródłowym, i prawdopodobnie będziesz musiał zwiększyć wersję oprogramowania ( package_1.0.0.orig.tar.gz-> package_1.0.1.orig.tar.gzlub coś) zarówno w tar, jak i w debian/changelog.

Po zmodyfikowaniu pliku orig.tar.gz nowymi plikami (NIE dołączaj plików debian / do pliku orig.tar.gz), należy dodać debian/changelogwpis, zmieniając wersję, aby zwiększyć ją tak, jak w przypadku pliku orig.tar. gz.

Następnie przebuduj pakiet źródłowy ( debuild -S) i prześlij nowy pakiet źródłowy do PPA. Ten nowy pakiet źródłowy zastąpi „starszy” pakiet PPA.


Z czatu:

@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
źródło
Może ta odpowiedź przydałaby się po edycji „tylko jeśli nie zwiększysz wersji, to wybuchnie”?
Jonas G. Drange
Zawsze możesz zaproponować edycję odpowiedzi Jonasowi i skomentować, dlaczego uważasz, że edycja jest przydatna, a ja i inni możemy na to spojrzeć i rozważyć.
Thomas Ward
Niestety, nie jestem obeznany z systemem pakietów Debiana, więc nie wiem, dlaczego tak się dzieje. Dokonana przeze mnie edycja byłaby boleśnie nieodpowiednia.
Jonas G. Drange