debian csomag módosítása

Fórumok

Hali,

Tapasztaltabb Debianos guruktól kérdezném, hogy hogyan lehet egy debian forrásból meglévő csomagot módosítani? (Konkrétan az rtpproxy-ba hackelem éppen bele a mysql logolást.)

Addig rendben van, hogy

apt-get source rtpproxy
apt-get build-dep rtppxy
apt-get install devscripts
dch -l local 'add mysql log'

Ezen a ponton debuild gyönyörű szépen el is készíti a .deb filet a forrásból, a saját verziómat.
Csakhogy, nekem nem csak a verziószámot kellene megváltoztatnom, hanem bele is kellene nyúlnom a forráskódba. Márpedig amikor ezt megtettem, onnantól nem hajlandó fordulni:


$ debuild 
dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: set CFLAGS to default value: -g -O2
dpkg-buildpackage: set CPPFLAGS to default value: 
dpkg-buildpackage: set LDFLAGS to default value: 
dpkg-buildpackage: set FFLAGS to default value: -g -O2
dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
dpkg-buildpackage: source package rtpproxy
dpkg-buildpackage: source version 1.1-2local1
dpkg-buildpackage: source changed by X Y <x@y>
dpkg-buildpackage: host architecture amd64
 fakeroot debian/rules clean
QUILT_PATCHES=debian/patches quilt --quiltrc /dev/null pop -a -R || test $? = 2 
Patch set-ctrl-socket-owner does not remove cleanly (refresh it or enforce with -f)
make: *** [unpatch] Error 1
dpkg-buildpackage: failure: fakeroot debian/rules clean gave error exit status 2
debuild: fatal error at line 1319:
dpkg-buildpackage -rfakeroot -D -us -uc failed

Ha jól selytem az a baj, hogy mivel belenyúltam a kódba, a debian/ alatt lévő quilt patcheket nem tudja applikálni. Na de akkor kérdezem, mi a debianos de egyszerű módja, hogy mégis belenyúljak de a saját patchei is felmenjenek? Azaz hogyan tudom a legegyszerűbben hozzáadni saját változtatásaimat?

UPDATE: fenti probléma megoldva, de vannak újabbak lentebb :)

Hozzászólások

Plusz infó: a csomag a quilt-et használja a patchek kezelésére.

--
The Net is indeed vast and infinite...
http://gablog.eu

http://pkg-perl.alioth.debian.org/howto/quilt.html


apt-get source rtpproxy

cd rtpproxy-1.1

export QUILT_PATCHES=debian/patches
quilt push -a -v

quilt new mysql-log

export EDITOR=joe
quilt edit file1.c
quilt edit file2.c
quilt edit file3.c

quilt refresh
quilt pop -a -v -R

dch -l local 'add mysql log'

További problémákba ütköztem, és sok-sok googli után sem lettem okosabb:

1. Hogyan tudok egy shared library dependency-t hozzáadni? Ha jól sejtem ezt a Makefile.am-hez kellene, meg is tettem:


(...)
rtpproxy_SOURCES=main.c rtp.h rtp_server.c rtp_server.h \
  rtpp_defines.h rtpp_log.h rtpp_record.c rtpp_record.h rtpp_session.h \
  rtpp_util.c rtpp_util.h rtp.c rtp_resizer.c rtp_resizer.h rtpp_session.c \
  rtpp_command.c rtpp_command.h log.h log.c
rtpproxy_LDADD=mysqlclient
(...)

Próbáltam "-l" előtagot is, de ugyanez az eredmény: "make[2]: *** No rule to make target `mysqlclient', needed by `rtpproxy'. Stop."
Pedig minden autoconf howto szerint ez a módja. Miért lesz itt ebből target?!

2. Gondoltam rendesen editálom a control filet is, beleírva a dependencyket:

Build-Depends: (...), libmysqlclient-dev (>= 5)

Erre:

dpkg-checkbuilddeps: Unmet build dependencies: libmysqlclient-dev (>= 5)

Pedig a függőség ki van elégítve, mert ez egy teljesen virtuális csomag amit a libmysqlclient15-dev provideol, ami viszont fent van (5.0.51a-24+lenny2). Nem hiszem el, hogy a virtuális csomagokat nem kezeli a debian build rendszer.

Előre is köszi a tippeket!

--
The Net is indeed vast and infinite...
http://gablog.eu

Pedig a függőség ki van elégítve, mert ez egy teljesen virtuális csomag amit a libmysqlclient15-dev provideol, ami viszont fent van (5.0.51a-24+lenny2). Nem hiszem el, hogy a virtuális csomagokat nem kezeli a debian build rendszer.

Pedig... (és itt próbálom csendesen feltartani az RTFM feliratú táblát :))

If a relationship field has a version number attached then only real packages will be considered to see whether the relationship is satisfied (or the prohibition violated, for a conflict or breakage) - it is assumed that a real package which provides the virtual package is not of the "right" version. So, a Provides field may not contain version numbers, and the version number of the concrete package which provides a particular virtual package will not be looked at when considering a dependency on or conflict with the virtual package name.

It is likely that the ability will be added in a future release of dpkg to specify a version number for each virtual package it provides. This feature is not yet present, however, and is expected to be used only infrequently.

If you want to specify which of a set of real packages should be the default to satisfy a particular dependency on a virtual package, you should list the real package as an alternative before the virtual one.

http://people.debian.org/~mpalmer/debian-mentors_FAQ.html
http://www.debian.org/doc/debian-policy/
http://lists.debian.org/debian-mentors/

"Ha jól selytem"
Ez még a tegnap elkövetett muszályomnál is szebb. :) Mostanában nagyon rááll a kezem a Z-re és az Y-ra, folyton (fojton?) kavarok velük, pedig semmi közük a j-hez.

A művelet eredményes volt. Ha valakinek szüksége volna arra, hogy az rtpproxy logoljon, sőt mysqlbe logoljon, itt a patch: http://www.gablog.eu/online/node/86
Sőt, még a timeout értéket is lehet állítani configból.

(Ez akkor jön jól, ha például számlázáshoz pontos CDR kell, és bizony a SIP szerverek nem logolnak semmit, ha a hívás csak úgy megszakad, vagy elmarad a BYE.)

--
The Net is indeed vast and infinite...
http://gablog.eu