Page 1 sur 1
[PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 18:50
par salorium
Bonjour,
J'ai fait un PKGBUILD avec le bon dépot pour djmount :
Code : Tout sélectionner
pkgname=djmount
pkgver=0.71
pkgrel=5
_debpatch=7
pkgdesc="A UPnP AV client that mounts media server contents as a filesystem."
arch=('i686' 'x86_64')
url="http://djmount.sourceforge.net/"
license=('GPL')
depends=('fuse')
makedepends=('libupnp'
'talloc')
source=(
"$pkgname::git+https://github.com/Boxee/djmount.git"
"http://ftp.de.debian.org/debian/pool/main/d/$pkgname/${pkgname}_$pkgver-$_debpatch.debian.tar.xz"
djmount.confd djmount.service djmount.tmpfilesd djmount.install
)
install='djmount.install'
prepare() {
cd "$srcdir/$pkgname"
patch -p1 < "$srcdir/debian/patches/000_djmount.1.diff"
# patch -p1 < "$srcdir/debian/patches/001-libupnp-1.6.6.diff"
# patch -p1 < "$srcdir/debian/patches/002-libupnp-1.6.13.diff"
# patch -p1 < "$srcdir/debian/patches/003-support-fstab-mounting.diff"
# patch -p1 < "$srcdir/debian/patches/004-avoid-crash-by-using-size_t.diff"
# patch -p1 < "$srcdir/../djfs.patch"
}
build() {
cd "$srcdir/$pkgname"
./configure --prefix=/usr
make
}
package() {
cd "$srcdir/$pkgname"
make DESTDIR=$pkgdir install
install -D -m644 $srcdir/djmount.confd $pkgdir/etc/conf.d/djmount
install -D -m644 $srcdir/djmount.service $pkgdir/usr/lib/systemd/system/djmount.service
install -D -m644 $srcdir/djmount.tmpfilesd $pkgdir/usr/lib/tmpfiles.d/djmount.conf
install -D -m644 "$srcdir/$pkgname/djmount.1" ${pkgdir}/usr/share/man/man1/djmount.1
}
md5sums=(
'SKIP'
'cee9b3cbf9dbea62afef72be3a631fd7'
'3464de7af2e7e9adfb69fe33b7685a4c'
'SKIP'
'd214e88bb3f8b58a9ab709455e8b4ee0'
'SKIP'
)
La compilation se passe bien.
Sauf que lors de la compilation de djmount, la bibliothèque qui est présente (
https://github.com/Boxee/djmount/tree/master/libupnp) n'est pas prise en compte lors de la compilation de djmount
Quand je lance le build() à la main, mon executable djmount pèse 1,2M
Quand je le fais avec makepkg -si l'executable djmount pèse 271K
Avez vous des idées ?
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 19:07
par Xorg
Pourquoi réinventer la roue ? Le paquet
djmount existe sur AUR.
Je dirais que ça vient du manque de
--with-external-libupnp --with-libupnp-prefix=/usr
.
Et pour information, le fichier
.install ne se met pas dans les fichiers sources, regarde la section
install.
Mettre une bibliothèque (libupnp) en makedepends, c'est rarement censé. Tu vas compiler, mais si tu la désinstalles ton paquet ne pourra plus se lancer.
Il faudrait juste remettre une fonction
prepare()
et une fonction
package()
au paquet sur AUR.

Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 20:10
par salorium
Je réinvente la roue car j'ai besoin de ce support :
https://github.com/Boxee/djmount/commit ... 1504e0fe18
Et comme on peut le voir, ce commit modifie la librairie libupnp. Donc je suis obligé d'avoir la librairie incluse dans l'exécutable djmount
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 20:20
par benjarobin
La différence de taille entre une compilation à la "main" et avec makepkg c'est juste le strip des informations de debug
@Xorg au contraire il ne faut pas spécifier ces options car on veut utiliser libupnp en interne
Sinon moi j'ai ceci avec ton PKGBUILD, donc apparement il utilise bien le libupnp interne
Code : Tout sélectionner
checking whether to use external libupnp... no (build bundled library)
De plus il m'a bien créé la lib static de libupnp ici
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 20:48
par salorium
Ton exécutable pèse combien ?
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 20:50
par benjarobin
Code : Tout sélectionner
ls -l pkg/djmount/usr/bin/djmount
283K 20 sept. 20:30 pkg/djmount/usr/bin/djmount
ldd pkg/djmount/usr/bin/djmount
Code : Tout sélectionner
linux-vdso.so.1 (0x00007ffd8b1a6000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0x00007f17a3086000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f17a2e69000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f17a2ac5000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f17a28c1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f17a32c4000)
La commande ldd indique bien que la lib externe libupnp n'est pas utilisé
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:07
par salorium
Oki je ne comprend pas alors pourquoi quand je le compile à la main l'éxecutable est plus gros et que quand je le lance, il me monte directement les devices dlna alors que la je n'ai tjs pas mon device avec le djmount compilé avec makepkg :/
Version makepkg
Code : Tout sélectionner
salorium@ArchlinuxGeek /tmp/makepkg/djmount/pkg/djmount/usr/bin % ldd djmount
linux-vdso.so.1 (0x00007fffed7a6000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0x00007fd52d7e1000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fd52d5c4000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fd52d220000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fd52d01c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd52da1f000)
Version à la main
Code : Tout sélectionner
salorium@ArchlinuxGeek ~ % ldd /usr/bin/djmount
linux-vdso.so.1 (0x00007fff9b719000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0x00007f9bd65cd000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f9bd63b0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f9bd600c000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f9bd5e08000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9bd680b000)
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:16
par benjarobin
salorium a écrit :Oki je ne comprend pas alors pourquoi quand je le compile à la main l'éxecutable est plus gros
Euh, je t'ai indiqué pourquoi ! Car les symboles de debug sont strippés
Les 2 binaires que tu montres sont identiques (une fois strippé).
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:20
par Xorg
Désolé, j'avais sans doute mal compris ton problème.
Je n'ai pas de différence avec
options=(!strip)
:
Code : Tout sélectionner
# Avec strip
$ ls -l /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
-rwxr-xr-x 1 xorg users 326k 20 sept. 21:08 /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
$ ldd /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
linux-vdso.so.1 (0x00007ffed78df000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0x00007f41fac09000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f41fa9ec000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f41fa648000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f41fa444000)
/lib64/ld-linux-x86-64.so.2 (0x00007f41fae47000)
# Sans strip
$ ls -l /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
-rwxr-xr-x 1 xorg users 326k 20 sept. 21:14 /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
$ ldd /tmp/makepkg/djmount/pkg/djmount/usr/bin/djmount
linux-vdso.so.1 (0x00007ffef11ec000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0x00007f3e15b32000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f3e15915000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f3e15571000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f3e1536d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3e15d70000)
Utilise la commande
readelf -Ws djmount | awk '{print $8}'
pour voir les symboles présents dans ton exécutable.
EDIT : 953Ko avec les symboles de debug.
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:29
par salorium
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:35
par benjarobin
Je ne vois même pas pourquoi vous regarder ceci, bien sûr qu'il embarque les symboles de libupnp.
Après tu compiles une version git donc en développement et c'est très courant que certaine chose ne fonctionne pas...
Bref si tu as besoin d'une modification particulière, je te conseil de te baser sur le paquet d'origine et de lui appliquer un simple patch
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:39
par salorium
Pourquoi alors quand je compile à la main, cela fonctionne...
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 20 sept. 2015, 21:50
par benjarobin
La seule raison que je vois, ce sont les options de compilations qui mettent en évidence un bug.
Ou alors tu ne réalises pas exactement les mêmes opérations qu'avec makepkg
Avant de compiler à la main, pour reproduire ce que fait makepkg, tu dois sourcer /etc/makepkg.conf et mettre dans env certaines variables
En gros makepkg faire quelque chose de ce genre :
Code : Tout sélectionner
. /etc/makepkg.conf
export CARCH CHOST CPPFLAGS CFLAGS CXXFLAGS LDFLAGS
git clone https://github.com/Boxee/djmount.git
cd djmount
patch -p1 < chemin-vers/000_djmount.1.diff
./configure --prefix=/usr
make
mkdir ../bin
cp ./djmount/djmount ../bin
cd ../bin
strip djmount
Le binaire final étant dans le dossier bin... A toi de voir comment tu compiles "à la main", car tu devrais faire quelque chose comme cela. Tu verras bien quelle étape tu ne fais pas et qui produit le souci.
Le binaire que je produit avec cette méthode est exactement le même qu'avec la méthode makepkg
Re: [PKGBUILD] djmount avec librairie embarquée
Publié : dim. 11 oct. 2015, 17:28
par salorium
Merci, pour toutes ces solutions.
Mon problème est résolu, je l'ai patché en prenant pour base le dépot officiel merci
