[makepkg] optimisation de l'espace

Mise à jour / Création /debug de paquetages
Répondre
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

[makepkg] optimisation de l'espace

Message par gyo »

Il y a un truc que l'on pourrait améliorer dans makepkg c'est d'éviter que ça bouffe trop d'espace disque quand celui-ci se met au travail.
Je m'explique, quand on lance makepkg pour créer un paquet, il créé, entre autre, un répertoire src/ dans lequel il copie la ou les sources des fichiers compris dans la directive source du PKGBUILD et qui se trouvent dans le répertoire $startdir. Puis il se met extraire ce ou ces fichiers (sauf contrindication avec la directive noextract), donc la taille occupée avant l'appel de la fonction build() est d'au moins égal à 2 fois la taille cumulée les sources et au plus plus de 3 fois cette taille cumulée et cela peut devenir problématique quand on se trouve avec de petits disques (mon cas) ou quand il ne reste plus beaucoup de place sur nos disques. Et cela devient infernal quand on se trouve avec de gros fichiers sources comme le jeu vdrift qui fait plus 200mo non décompressé et je ne parle pas de la duplication effectuée à l'installation dans le répertoire pkg/ (passage obligé) et de la création du paquet (passage obligé).

Donc moi ce que je propose, c'est de modifier le comportement de makepkg pour qu'au lieu de copier les fichiers sources dans le src/, c'est de faire des liens symbolique ou mieux des liens durs vers ces fichiers depuis le src/.. En d'autre termes, pourquoi ne pas utiliser pleinement ce qu'offre les systèmes de fichiers linux pour faire des économies de place ?

Qu'est-ce que vous en pensez ?

/me va envoyer un patch :bosse:
Dernière modification par gyo le ven. 25 mai 2007, 13:35, modifié 1 fois.
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

Je suis tout à fait d'accord :D

En revanche, il faut prendre garde à ce que la fonction build ne vienne pas modifier les sources. Il faut donc prévoir d'interdir la modification des sources (je pense aux sources autres que des archives).

Sinon je dis go !
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

As-tu déjà envoyé le patch ? si oui as-tu des nouvelles ?

Il faudrait prendre en compte également le fait que le fichier source téléchargé est peut-être EN PLUS présent dans le répertoire SRCDEST déclaré dans /etc/makepkg.conf
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

À vrai dire, je n'ai rien fait du tout ni même étudier quoi que ce soit :oops: . Sinon pour le SRCDEST, si il n'est pas renseigné c'est quel répertoire par défaut ou alors aucun cache ne se fait ? Comment ça marche ?
commentaire rédigé à l’aide d’un clavier ergonomique bépo
KISS MY ARCH
Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)

Message par marc[i1] »

hop hop hop
http://wiki.archlinux.fr/howto:archlinu ... akepkgconf

Code : Tout sélectionner

    * SRCDEST=/path/to/folder
Si cette valeur n’est pas renseignée, les sources téléchargés seront stockés dans le répertoire courant. Beaucoup de gens aime centraliser la localisation des sources pour simplifier leur nettoyage et cette option offre cette possibilité. 
8)
Ne vous emmerdez plus, emmerdez les autres.
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

Ah le sacro-saint Wiki de Archlinux.fr :onmeritepas:
On a tendance à l'oublier celui-là !
commentaire rédigé à l’aide d’un clavier ergonomique bépo
KISS MY ARCH
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

Bon voilà, finalement j'ai étudié la question. En fait voilà comment fonctionne makepkg pour gérer les sources (quand je parle de sources, je parle des fichiers contenus dans la directive source=() du PKBUILD).

Les sources sont soit situées localement (fourni avec le PKGBUILD) soit téléchargeable via ftp ou http
1) Les sources locales (qui se trouvent dans $startdir/) sont recopiées vers le répertoire src/ de $startdir/ ;
2) Les sources distantes sont téléchargées d'abord dans $startdir/src puis recopiées vers $SRCDEST (qui est $startdir/ si SRCDEST n'est pas défini dans makepkg.conf) et ce dernier représente le cache à proprement parlé.

Une solution pour éviter de « gaspiller » de la place, c'est d'enrayer ce qui se passe au 2) : à savoir la copie des sources téléchargées vers le cache.
Et pour ce qui est du 1), les fichiers sont en principes de petites tailles (pas plus de 10ko en général) donc on peut négliger la duplication de ces fichiers.

Donc voilà, c'est plus compliqué que ça et voici donc un chtit patch qui ajoute une autre fonctionnalité via une option pour gérer le cache, à savoir le bazarder complètement :

Code : Tout sélectionner

@@ -46,2 +46,3 @@
 NOBUILD=0
+NOCACHE=0
 NODEPS=0
@@ -379,2 +380,3 @@
        echo "  -C, --cleancache Clean up source files from the cache"
+       echo "  -H, --nocache    Do not use cache"
        echo "  -d, --nodeps     Skip all dependency checks"
@@ -437,2 +439,3 @@
                --cleancache) CLEANCACHE=1 ;;
+               --nocache)              NOCACHE=1 ;;
                --syncdeps)   DEP_BIN=1 ;;
@@ -459,3 +462,3 @@
                -*)
-               while getopts "bcCdefghiLmop:rRsS-" opt; do
+               while getopts "bcCdefghHiLmop:rRsS-" opt; do
                        case $opt in
@@ -464,2 +467,3 @@
+                               H) NOCACHE=1 ;;
                                d) NODEPS=1 ;;
@@ -701,10 +705,12 @@
                fi
-               if [ -n "$SRCDEST" ]; then
-                       mkdir -p $SRCDEST && cp "$file" $SRCDEST
-                       if [ $? -ne 0 ]; then
-                               warning "You do not have correct permissions to cache source in $SRCDEST"
+               if [ "$NOCACHE" = "0" ]; then
+                       if [ -n "$SRCDEST" ]; then
+                               mkdir -p $SRCDEST && cp "$file" $SRCDEST
+                               if [ $? -ne 0 ]; then
+                                       warning "You do not have correct permissions to cache source in $SRCDEST"
+                                       cp "$file" ..
+                               fi
+                       else
                                cp "$file" ..
                        fi
-               else
-                       cp "$file" ..
                fi
Ce patch doit être appliqué sur makepkg v3.0.3.
Et voici comment on utilise l'option :
- soit en ajoutant l'option -H à ligne de commande makepkg,
- soit en rajoutant la directive NOCACHE=1 dans /etc/makepkg.conf.

Voilà, c'est tout bête et ça marche ! :666:

[EDIT]
maj de l'explication
Dernière modification par gyo le ven. 25 mai 2007, 15:45, modifié 1 fois.
Avatar de l’utilisateur
marc[i1]
Maître du Kyudo
Messages : 1753
Inscription : ven. 27 oct. 2006, 10:48
Localisation : Nantes (44)

Message par marc[i1] »

ÉNORMEEUUUUHH !

:prosterne:

PS : entends-tu le cri du wiki ?
http://wiki.archlinux.fr/howto:archlinux:makepkg_plus
Ne vous emmerdez plus, emmerdez les autres.
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

marc[i1] a écrit :PS : entends-tu le cri du wiki ?
http://wiki.archlinux.fr/howto:archlinux:makepkg_plus
« GRUIIIIKI » ?
Oui je l'entends, il a faim ce wiki ! Mais avant de lui faire avaler ça, je voudrai savoir comment ça mer^Wmarche chez les autres...
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

Rien à redire !
C'est une solution KISS et qui fonctionne parfaitement pour moi.
Pour ceux qui veulent tester, voici le du fichier makepkg modifié:
http://pastebin.archlinux.fr/pastebin.php?dl=1246
(à enregistrer sous /usr/bin/makepkg)

gyo, il faut absoluement envoyer ce patch aux devs ! :D
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

wain a écrit :Rien à redire !
C'est une solution KISS et qui fonctionne parfaitement pour moi.
Pour ceux qui veulent tester, voici le du fichier makepkg modifié:
http://pastebin.archlinux.fr/pastebin.php?dl=1246
(à enregistrer sous /usr/bin/makepkg)

gyo, il faut absoluement envoyer ce patch aux devs ! :D
Cool ! Bon, ben on peut dire que mon truc marche !
Sinon, tu as bien de refiler le makepkg, car je m'apprêtais à faire un autre post avec un vrai patch dedans (ou via le pastebin).
Et pour l'envoyer aux devs je vais m'y mettre (à moi le baygon vert :P).
[EDIT]
Hop ! Le reucouest friture est envoyé : http://bugs.archlinux.org/task/7271
[EDIT2]
sur le wiki saymieux : http://wiki.archlinux.fr/howto:archlinu ... on_nocache
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

ça se présente mal.... :roll:
http://bugs.archlinux.org/task/7271#comment16782

J'espère qu'ils vont changer d'avis et implémenter ce superbe patch
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

J'ai concocté un petit commentaire pour expliquer un tel patch :
http://bugs.archlinux.org/task/7271#comment16808
Faut penser aux « pauvres » :surrender:

[EDIT]
on peut pas dire que je suis pauvre, c'était une façon de parler, mais la flemme de me racheter des disques et de revoir ma conf des disques...
Dernière modification par gyo le ven. 01 juin 2007, 11:01, modifié 1 fois.
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

Pas facile pour les pauvres. Pour eux les disques dur ne sont pas chers aujourd'hui... Mais pas cher c'est toujours plus cher que gratuit bon sang ! :cheveux:
Avatar de l’utilisateur
gyo
Maître du Kyudo
Messages : 1049
Inscription : jeu. 19 avr. 2007, 10:40
Localisation : Nantes (44)

Message par gyo »

Bon, un ultime commentaire de ma part : http://bugs.archlinux.org/task/7271#comment16840

...On verra bien :roll:

En même temps ça m'a fait penser à un autre truc : lors d'un update du système avec -Syu, par exemple, ce serait bien qu'il y ait une possibilité avec pacman de télécharger et d'installer au fur et à mesure les paquets tout en les virant du cache au lieu de tout télécharger d'un coup et d'installer puis ensuite à la main virer le cache... Hein ? Pourquoi pas ?
Avatar de l’utilisateur
wain
Maître du Kyudo
Messages : 1854
Inscription : ven. 11 août 2006, 19:15
Localisation : Nancy (54)

Message par wain »

Bravo gyo, ils ont compris cette fois ! :D
Au prochain patch, ils seront plus attentifs :wink:
Répondre