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

Code : Tout sélectionner

djmount/src/djmount/libupnp/upnp/.libs/libupnp.a

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
Voila le retour de la commande :

Code : Tout sélectionner

readelf -Ws djmount | awk '{print $8}'
http://demo.ovh.eu/fr/e3fd735a8339aa8f8305ec749b1e138d/

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 :)