„Dpkg-source: niereprezentatywne zmiany w źródle” podczas próby debuilda zmodyfikowanego pakietu

8

Pobrałem źródło do pakietu, używając:

$ apt-get source gkrellweather

Upewniłem się również, że mam zależności kompilacji:

$ sudo apt-get build-dep gkrellweather

I przetestowałem, że może dobrze zbudować:

$ cd gkrellweather-2.0.8
$ debuild

Zbudował .debpakiet w powyższym folderze, który mogłem zainstalować za pomocą:

$ sudo dpkg -i ../gkrellweather*.deb

OK, więc wszystko jest na swoim miejscu. Zacznijmy!

Otworzyłem kod źródłowy w Vimie i wprowadziłem pewne zmiany, których chciałem. Następnie próbowałem odbudować:

$ debuild

Ale dostałem następujący błąd:

...
dh_clean: Compatibility levels before 5 are deprecated (level 4 in use)
 dpkg-source -b gkrellweather-2.0.8
dpkg-source: warning: no source format specified in debian/source/format, see dpkg-source(1)
dpkg-source: info: using source format `1.0'
dpkg-source: info: building gkrellweather using existing gkrellweather_2.0.8.orig.tar.gz
dpkg-source: info: building gkrellweather in gkrellweather_2.0.8-2.diff.gz
dpkg-source: error: cannot represent change to gkrellweather-2.0.8/.gkrellweather.c.swp: binary file contents changed
dpkg-source: warning: the diff modifies the following upstream files: 
 GrabWeather
 Makefile
 gkrellweather.c
dpkg-source: info: use the '3.0 (quilt)' format to have separate and documented changes to upstream files, see dpkg-source(1)
dpkg-source: unrepresentable changes to source
dpkg-buildpackage: error: dpkg-source -b gkrellweather-2.0.8 gave error exit status 1
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

Dlaczego?

joeytwiddle
źródło

Odpowiedzi:

5

Dzięki odpowiedzi joeytwiddle, która dała mi świetne miejsce do rozpoczęcia mojego rozwiązania tego problemu.

W moim projekcie Python, dla którego próbowałem utworzyć pakiet debian, używam:

  • pybuild, aby przygotować pakiet debian przed uruchomieniem debuild
  • git do kontroli wersji
  • PyCharm IDE dla rozwoju Pythona

git tworzy .gitkatalog, pybuild tworzy .pybuildkatalog, a PyCharm tworzy .ideakatalog w katalogu głównym mojego projektu.

Ponieważ joeytwiddle wspomniał, że debuild nie lubił określonego pliku (w jego przypadku pliku SWP), to czułem, że prawdopodobnie pasuje do ukrytych katalogów. Dowiedziałem się, że w przypadku git można to zrobić: debuild -iignoruje katalogi kontroli wersji, ponieważ w przypadku katalogów pybuild i pomysłów nie znalazłem jeszcze innej opcji. Więc dla mojego rozwiązania, mam skopiowane mojego projektu do pustego katalogu, usunięte .git, .ideaoraz .pybuildkatalogi i sukces!

lewibostian
źródło
3
-iprzechodzi debuilddo, dpkg-buildpackagea następnie do dpkg-source, którego strona podręcznika mówi, że można podać wyrażenie regularne. Myślę, że bez testowania -i'(^|/)\.(git|idea|pybuild)($|/)'może Ci pomóc.
joeytwiddle
3

To mnie zaskoczyło więcej niż raz. Czasami myślałem, że przyczyną błędów debugowania po zmianie źródła było to, że po zmianie źródła podpis sygnatariuszy pakietu (wylogowanie) nie jest już ważny dla tego źródła.

Ale tak naprawdę w tym przypadku odpowiedź była prosta:

dpkg-source: error: cannot represent change to gkrellweather-2.0.8/.gkrellweather.c.swp: binary file contents changed

Problem polega na tym, że Vim stworzył swafile i debuildnie podobało mu się to!

Rozwiązanie było proste: usuń plik wymiany, a następnie budowanie może działać:

$ rm ./.gkrellweather.c.swp
$ debuild
joeytwiddle
źródło