[PKGBUILD] djmount avec librairie embarquée

Mise à jour / Création /debug de paquetages
Répondre
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

[PKGBUILD] djmount avec librairie embarquée

Message 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 ?
Avatar de l’utilisateur
Xorg
Maître du Kyudo
Messages : 1933
Inscription : dim. 22 janv. 2012, 19:25
Localisation : Entre le clavier et la chaise.

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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. :)
Arch Linux x86_64 - Sway
AMD Ryzen 5 3600X - 32 Go de DDR4 - SSD NVMe 1 To + SSD SATA 250 Go - Sapphire NITRO+ Radeon RX 580
Image AUR___Image Wiki___Image GitHub
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message par salorium »

Ton exécutable pèse combien ?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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é
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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)
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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é).
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
Xorg
Maître du Kyudo
Messages : 1933
Inscription : dim. 22 janv. 2012, 19:25
Localisation : Entre le clavier et la chaise.

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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.
Arch Linux x86_64 - Sway
AMD Ryzen 5 3600X - 32 Go de DDR4 - SSD NVMe 1 To + SSD SATA 250 Go - Sapphire NITRO+ Radeon RX 580
Image AUR___Image Wiki___Image GitHub
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message par salorium »

Voila le retour de la commande :

Code : Tout sélectionner

readelf -Ws djmount | awk '{print $8}'
http://demo.ovh.eu/fr/e3fd735a8339aa8f8305ec749b1e138d/
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message par salorium »

Pourquoi alors quand je compile à la main, cela fonctionne...
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17569
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
salorium
newbie
Messages : 9
Inscription : dim. 18 janv. 2015, 16:05

Re: [PKGBUILD] djmount avec librairie embarquée

Message 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 :)
Répondre