View previous topic :: View next topic |
Author |
Message |
bibi.skuk Guru
Joined: 01 Aug 2005 Posts: 425
|
Posted: Fri Dec 09, 2005 9:10 pm Post subject: [TIP] Compresser l'arbre portage avec squashfs |
|
|
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 :
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 |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
Posted: Fri Dec 09, 2005 10:22 pm Post subject: |
|
|
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 |
|
Back to top |
|
|
bibi.skuk Guru
Joined: 01 Aug 2005 Posts: 425
|
Posted: Fri Dec 09, 2005 10:35 pm Post subject: |
|
|
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 |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
Posted: Sat Dec 10, 2005 1:09 am Post subject: |
|
|
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é |
|
Back to top |
|
|
ghoti Advocate
Joined: 30 Dec 2002 Posts: 3634 Location: Belgium
|
Posted: Sat Dec 10, 2005 1:49 pm Post subject: |
|
|
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 |
|
|
bibi.skuk Guru
Joined: 01 Aug 2005 Posts: 425
|
Posted: Sat Dec 10, 2005 2:04 pm Post subject: |
|
|
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 |
|
|
bong Apprentice
Joined: 26 Oct 2004 Posts: 276 Location: Brest / Metz
|
Posted: Sat Dec 10, 2005 2:47 pm Post subject: |
|
|
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 |
|
|
bibi.skuk Guru
Joined: 01 Aug 2005 Posts: 425
|
Posted: Fri Jan 06, 2006 6:35 am Post subject: |
|
|
petites mises à jour. |
|
Back to top |
|
|
adrienleroy n00b
Joined: 02 Dec 2004 Posts: 74 Location: Lille,France
|
Posted: Sun Apr 08, 2007 12:22 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|