Page 1 sur 1

[makepkg] optimisation de l'espace

Publié : dim. 06 mai 2007, 11:04
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:

Publié : dim. 06 mai 2007, 20:31
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 !

Publié : dim. 20 mai 2007, 22:53
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

Publié : lun. 21 mai 2007, 11:56
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 ?

Publié : lun. 21 mai 2007, 12:05
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)

Publié : lun. 21 mai 2007, 12:15
par gyo
Ah le sacro-saint Wiki de Archlinux.fr :onmeritepas:
On a tendance à l'oublier celui-là !

Publié : ven. 25 mai 2007, 14:02
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

Publié : ven. 25 mai 2007, 15:10
par marc[i1]
ÉNORMEEUUUUHH !

:prosterne:

PS : entends-tu le cri du wiki ?
http://wiki.archlinux.fr/howto:archlinux:makepkg_plus

Publié : ven. 25 mai 2007, 15:37
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...

Publié : ven. 25 mai 2007, 18:26
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

Publié : ven. 25 mai 2007, 18:33
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

Publié : mer. 30 mai 2007, 23:05
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

Publié : jeu. 31 mai 2007, 11:42
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...

Publié : jeu. 31 mai 2007, 19:43
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:

Publié : ven. 01 juin 2007, 10:59
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 ?

Publié : ven. 01 juin 2007, 18:49
par wain
Bravo gyo, ils ont compris cette fois ! :D
Au prochain patch, ils seront plus attentifs :wink: