Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] Compresser l'arbre portage avec squashfs
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
bibi.skuk
Guru
Guru


Joined: 01 Aug 2005
Posts: 425

PostPosted: Fri Dec 09, 2005 9:10 pm    Post subject: [TIP] Compresser l'arbre portage avec squashfs Reply with quote

Voici la traduction (approximative) d'une petite astuce pour les petits disques
durs, traduit a la demande de yoyo.

Le topic original est ici.

Voici un petit tutoriel pour compresser l'arbre portage avec squashfs.
Je ne vais pas couvrir tous les petits details, comme j'estime que vous
savez configurer/compiler votre noyau, utiliser emerge, et écrire des scripts
bash simples.

Pourquoi ?
Et bien, l'arbre portage est énorme ! Il fait environ 500Mb, ce qui est
une énorme perte de place sur certaines machines.
Maintenant, (a moins que vous ne soyez malade), vous pouvez seulement
synchroniser votre arbre 1 fois par semaine. Par la même occasion, c'est
essentiellement un systeme de fichiers en lecture seule.

Donc, nous avons eu l'idée de le mettre sur une image compressée.
squashfs (http://squashfs.sf.net) nous permet cela.
En suivant cet Howto, vous obtiendrez un arbre portage qui prendra seulement
25Mb, et qui est aussi rapide.

Comment ?

Installer SquashFS

Kernel
Vous aurez besoin du support de squashfs dans le noyau ansi que des loop-back
file systems, compilés en dur, ou bien en modules.
Configuration du noyau:
Code:

Device Drivers -> Block Devices -> Loopback device support <M>
File systems  ->  Miscellaneous Filesystems  -> SquashFS <M>

NOTE: Squashfs n'est pas encore dans le kernel vanilla, mais le patch
est simple a appliquer soit-même. Autrement, les gentoo-sources contiennent
déjà ce patch, donc vous pouvez utiliser celles-ci.
Bien sur, recompilez les noyau, ajustez grub/lilo, et redemarrez dessus.

Outils
Vous aurez aussi besoin des squashfs tools:
Code:

emerge squashfs-tools


Configuration de portage
Comme squashfs est un systeme en lecture seule, nous devrons mettre les distfiles
autre part. Ici, j'ai choisi /var/tmp/distfiles (Ndt: idéalement, dans une
partition NFS):

/etc/make.conf
Code:

DISTDIR="/var/tmp/distfiles"
PKGDIR="/var/tmp/packages"


Edit : petit ajout de yoyo (proviens du topic d'origine) a propos de PKGDIR

Créer le système de fichiers
Supposons que vous avez un arbre portage dans /usr/portage, et que vous avez
déjà deplacé les distfiles dans $DISTDIR configuré précédement.
Les commandes basiques pour créer un "squash portage" sont celles-ci:
Code:

rm /usr/portage.sqsh
mksquashfs /usr/portage /usr/portage.sqsh -check_data


Apres avoir éxécuté cette commande, vous avez une copie squashé de votre arbre
dans /usr/portage.sqsh.
Maintenant, qu'est ce qu'on en fait ?
Et bien, on va le monter dans /usr/portage.

Pour preparer la prochaine étape, vous avec besoin de déplacer votre arbre actuel
autre part. Je vous suggère de la faire comme ceci, pour avoir un backup dans le
cas ou vous decideriez de ne pas utiliser cette methode.
Code:

tar cvzf /usr/portage-backup.tar.gz /usr/portage
rm -rf /usr/portage/*



Configuration du système
Si vous avec loop et squashfs en modules, vous aurez besoin de les charger
au demarrage.

Code:

echo "loop" >> /etc/modules.autoload.d/kernel-2.6
echo "squashfs" >> /etc/modules.autoload.d/kernel-2.6

pour l'instant, un `modprobe` suffira.

Vous aurez aussi besoin d'editer votre /etc/fstab pour que votre nouveau
filesystem se monte correctement.

/etc/fstab
Code:

/usr/portage.sqsh    /usr/portage     squashfs     ro,loop     0 0


Pour finir, pour monter votre nouvel arbre portage compressé, faire :
Code:

mount /usr/portage


Voici en gros le principe.

Updates ??

Et oui, votre arbre portage ne restera pas a jour eternellement! De temps en
temps, vous aurez besoin de le mettre a jour ! Commen faire ?
Evidemment, comme /usr/portage est en lecture seule, un simple
`emerge --sync` ne marchera pas. :(

Il y a plusieurs methodes pour faire ceci.

Mettre a jour avec emerge
Voici un script qui vous permettra de faire les mises a jour. Il y a un serieu
defaut avec cette methode, vous devez avoir vos 500Mb de libre pour le temps de
la mise à jour, car on ne peut mettre a jour qu'une copie non compressée.
Voici un simple script qui resume ces étapes. Je suis sur que cela peut etre
amélioré, mais l'idée de base est là.

/usr/local/sbin/emerge-sync-squash.sh
Code:

#!/bin/bash

## Where things go:
PORTDIR=/usr/portage
PORTSQSH=/usr/portage.sqsh
PORTTMP=/var/tmp/portage-tmpcopy

## First, make sure the squashed protage is mounted
mount -o remount $PORTDIR &> /dev/null || mount $PORTDIR

## make sure there is no old tmp copy in the way
rm -rf $PORTTMP

## Make an uncompressed copy
cp -ra $PORTDIR $PORTTMP

## sync to the uncompressed copy
FEATURES="-fixpackages" PORTDIR="$PORTTMP" emerge --nospinner --sync

## uncomment re-make the "q" database, if you use it.  (portage-utils)
#PORTDIR=$PORTTMP  q -r

## squash! and remount
umount $PORTDIR
rm -f $PORTSQSH
mksquashfs $PORTTMP $PORTSQSH -check_data
mount $PORTDIR

## cleanup
rm -rf $PORTTMP

##  Make sure local databases are up to date
emerge --nospinner --metadata
update-eix


Voila. Comme vous pouvez le voir, vous aurez besoin de tout l'espace quelque part
même si c'est seulement pour 5 minutes.


Mettre a jour pour quelqu'un d'autre
SI vous n'avez pas 500Mb de libre, (si vous les avez, alors ce ne serait
pas un exercice très utile!), la seule option est de recuperer des copies
compressées. Il est peut etre possible de faire un squashfs directement depuis
une archive, mais ca n'est pas possible pour le moment (Ndt: ou alors l'auteur
n'a pas trouvé comment). Vous aurez donc donc besoin de recuperer directement les
images squash.

Pour le moment, l'auteur fourni des images deja suqashées, mises a jour tous les
1 ou 2 jours, sur
http://www.math.duke.edu/~adsmith/portage.sqsh
Mais cela ne durera pas eternellement. (pour des problemes de bande passante.)

pour mettre a jour ces copies, voici un petit script :
/usr/local/sbin/emerge-sync-squash2.sh
Code:

#!/bin/bash

umount /usr/portage
wget http://www.math.duke.edu/~adsmith/portage.sqsh -O /usr/portage.sqsh
mount /usr/portage
emerge --metadata
update-eix

]

Je pense aussi distribuer ceci en utilisant des diffs binaires, mais pour le
moment, etant donné que cela fait seulement 25Mb, ce n'est pas très gros.


Partager l'arbre ??
Si vous voulez partager cet arbre par le reseau, il va falloir faire un peut
attention. NFS ne peut pas utiliser squashfs, donc vous devrez utiliser
network block devices (configurer le kernel et `emerge nbd`) pour exporter
le /usr/portage.sqsh sur les autres machines.

Voici une config simple:

serveur:
Code:

nbd-server <port> /usr/portage.sqsh


client:
Code:

modprobe nbd
nbd-client <server> <port> /dev/ndb0
mount /dev/nbd0 /usr/portage


Ou trouver un arbre deja squashé ?
[ndt] j'ajoute cette section, car elle me parait important, et etant donné
qu'il y a plusieurs personnes qui fournissent des images squash de portage,
autant en profiter.




Amusez-vous bien!!

Edit : j'ai realisé qu'il ne me manquait que 3 lignes a traduire... alors j'ai fini...

Edit : TODO
Quote:

Ajouter la methode pour utiliser unionfs


Corrections, suggestions, encouragements bienvenus.


Last edited by bibi.skuk on Fri Jan 06, 2006 6:35 am; edited 3 times in total
Back to top
View user's profile Send private message
bong
Apprentice
Apprentice


Joined: 26 Oct 2004
Posts: 276
Location: Brest / Metz

PostPosted: Fri Dec 09, 2005 10:22 pm    Post subject: Reply with quote

bien bien, pourquoi j'y ai pas pensé avant!
j'ai tres envie de tester mais j'ai un doute quand aux performances des recherches et des synchros...
je verrai bien :lol:
Back to top
View user's profile Send private message
bibi.skuk
Guru
Guru


Joined: 01 Aug 2005
Posts: 425

PostPosted: Fri Dec 09, 2005 10:35 pm    Post subject: Reply with quote

Moi j'ai pas tester encore, mais je vais le faire...

Je suis en train de lire la suite du topic pour essayer d'en tirer encore des infos a ajouter... (deja le coup du PKGDIR)
Back to top
View user's profile Send private message
bong
Apprentice
Apprentice


Joined: 26 Oct 2004
Posts: 276
Location: Brest / Metz

PostPosted: Sat Dec 10, 2005 1:09 am    Post subject: Reply with quote

Résultat: c'est excellent!

J'ai juste adapté la chose, je m'explique:
J'ai un vieux celeron500 qui me sert de routeur/firewall qui, via une tache cron, synchroniser son arbre puis creer l'image squashfs
Depuis mon poste, j'ai un script qui va synchroniser l'image avec celle de la passerelle, remonter le tout et mettre a jour les metadata.

Ce qui fait que je n'ai plus a me soucier d'avoir la place suffisante pour stocker un arbre de portage décompressé... en plus, la vitesse de recherche est a des annes lumieres de ce que j'avais avant, c'est presque instantané :D
Back to top
View user's profile Send private message
ghoti
Advocate
Advocate


Joined: 30 Dec 2002
Posts: 3623
Location: Belgium

PostPosted: Sat Dec 10, 2005 1:49 pm    Post subject: Reply with quote

bong wrote:
J'ai juste adapté la chose, je m'explique:
J'ai un vieux celeron500 qui me sert de routeur/firewall qui, via une tache cron, synchroniser son arbre puis creer l'image squashfs

Corrige-moi si je me trompe mais il me semble que tu ne fais que déplacer le problème : tu as quand même besoin de 500 + 25 mégas sur ton cel500, non ? (plus 25 Mo sur ton desktop !)
Un partage en nfs ne serait-il pas plus indiqué ? Ce serait plus économique puisque tu n'aurais pas besoin des 2 images en squashfs ...
Back to top
View user's profile Send private message
bibi.skuk
Guru
Guru


Joined: 01 Aug 2005
Posts: 425

PostPosted: Sat Dec 10, 2005 2:04 pm    Post subject: Reply with quote

ghoti wrote:
bong wrote:
J'ai juste adapté la chose, je m'explique:
J'ai un vieux celeron500 qui me sert de routeur/firewall qui, via une tache cron, synchroniser son arbre puis creer l'image squashfs

Corrige-moi si je me trompe mais il me semble que tu ne fais que déplacer le problème : tu as quand même besoin de 500 + 25 mégas sur ton cel500, non ? (plus 25 Mo sur ton desktop !)
Un partage en nfs ne serait-il pas plus indiqué ? Ce serait plus économique puisque tu n'aurais pas besoin des 2 images en squashfs ...


on ne deplace pas le probleme...

tes 500Mo de portage, tu les as de toute maniere sur ton poste non ??


Last edited by bibi.skuk on Sat Dec 10, 2005 3:01 pm; edited 1 time in total
Back to top
View user's profile Send private message
bong
Apprentice
Apprentice


Joined: 26 Oct 2004
Posts: 276
Location: Brest / Metz

PostPosted: Sat Dec 10, 2005 2:47 pm    Post subject: Reply with quote

j'y ai pensé mais le celeron n'a qu'un vieux dd de 2Go qui offre de bien pietres performances... ca n'aurait fait qu'allonger mes temps d'acces...
Back to top
View user's profile Send private message
bibi.skuk
Guru
Guru


Joined: 01 Aug 2005
Posts: 425

PostPosted: Fri Jan 06, 2006 6:35 am    Post subject: Reply with quote

petites mises à jour.
Back to top
View user's profile Send private message
adrienleroy
n00b
n00b


Joined: 02 Dec 2004
Posts: 74
Location: Lille,France

PostPosted: Sun Apr 08, 2007 12:22 pm    Post subject: Reply with quote

Chaque jour vers 5h20, je met a jour une image de portage au format squashfs `a l'adresse suivante :
http://gentoosquash.free.fr/portage.sqsh
ainsi que la somme md5 associee
http://gentoosquash.free.fr/portage.sqsh.md5

Un petit script pour automatiser la mise `a jour :
Code:

#!/bin/bash

case $1 in

home)
        URL=192.168.1.100;;
away)
        URL="gentoosquash.free.fr";;
esac

PORTDIR="/usr/portage"

wget -c http://${URL}/portage.sqsh
wget -c http://${URL}/portage.sqsh.md5

if [ "`md5sum -c portage.sqsh.md5 |cut -d' ' -f2`" = "OK" ]; then
        echo "Archive is valid"
        umount ${PORTDIR}
        mv portage.sqsh /usr/portage.sqsh
        mount ${PORTDIR}
        emerge --metadata
        rm portage.sqsh.md5
else
        echo "File corruption !"
fi
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum