Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] compresser l'arborescence portage
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
synss
Apprentice
Apprentice


Joined: 08 Mar 2006
Posts: 280
Location: Dijon (F) > Berlin > Tokyo > Nürnberg (D)

PostPosted: Thu Jun 08, 2006 8:43 pm    Post subject: [HOWTO] compresser l'arborescence portage Reply with quote

dans la serie, et je me traduis 8)

L'arborescence portage (le contenu de /usr/portage, par defaut) peut prendre jusqu'a 600Mo. Cependant, sur mon ordinateur, elle ne depasse pas 35M... et voici comment : l'idee est de compresser l'arborescence et de la monter en loopback. Et comme les systemes de fichiers compresses sont en lecture seule, on utilisera un repertoire cree dans /dev/shm (autrement dit, le memoire vive) qu'on montera avec unionfs sur l'image en lecture seule.
Note que cette technique est utilisee sur de nombreux live-cds (y Knoppix et autres) et que j'ai passe une journee extenuante alors mon francais en souffre.

Tout d'abord,
Code:
emerge sys-fs/unionfs sys-fs/squashfs-tools
unionfs est masque par ~x86, tu connais la chanson pour l'installer quand meme (j'utilise sys-fs/unionfs-1.1.4-r2 et sys-fs/squashfs-tools-3.0 sans probleme sur x86 : un portable centrino)

  • pour union:
    Code:
    echo "unionfs" >> /etc/modules.autoload.d/kernel-2.6

  • pour squashfs, tu dois le compiler en tant que module dans le kernel (enfin si jamais tu l'as en "build-in" comment qu'on dit ca en francais? ca marche aussi,) mais sinon, il faut aussi
    Code:
    echo "squashfs" >> /etc/modules.autoload.d/kernel-2.6

  • et evidemment, tu veux le loopback, mais tu l'as deja, hein ?
soit:
Kernel config:
CONFIG_SQUASHFS=m
CONFIG_SHMEM=y

loopback (je trouve plus ou c'est) et emerge unionfs

si tu viens de compiler ces modules, il faut les charger avec modprobe, genre
Code:
modprobe loop unionfs squashfs
quelque chose comme ca.

Tu dois deja avoir deplace ton repertoire distfiles et/ou packages : sinon edite
/etc/make.conf:
DISTDIR="/var/tmp/distfiles"
PKGDIR="/var/tmp/packages"
et bien sur
Code:
mv /usr/portage/distfiles /var/tmp
mv /usr/portage/packages /var/tmp
env-update && source /etc/profile


Ensuite, tu peux creer ton image squashfs et effacer le contenu de /usr/portage (ou sauvegarde le au cas ou)
Code:
mksquashfs /usr/portage /var/tmp/portage-1.sqfs -check_data
ln -s /var/tmp/portage-1.sqfs /var/tmp/portage.sqfs
du -s /var/tmp/portage-1.sqfs
j'obtiens entre 30M et 40M, ca ne devrait pas etre different chez toi
Code:
tar czvf /tmp/portage-0.tgz /usr/portage/*
rm -rf /usr/portage/*
c'est bon?

Ben maintenant, t'as plus trop besoin de tes doigts, parce qu'a partir de la, j'ai mon script d'initialisation qui va faire le boulot pour toi. Avant de les couper, copie-colle:
/etc/init.d/squash_portage:
#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
   need localmount
}


start() {
   ebegin "Mounting squashfs'ed portage tree"
   [ -d $PORTAGE_RO ] || mkdir -p $PORTAGE_RO
   mount -t squashfs -o loop,ro $PORTAGE_SQFS $PORTAGE_RO
   [ -d $PORTAGE_RW ] || mkdir -p $PORTAGE_RW
   mount -t unionfs -o dirs=$PORTAGE_RW=rw:$PORTAGE_RO=ro unionfs $PORTDIR   
   eend 0
}

stop() {
   ebegin "Updating portage tree"   
   if [ "$(du -s $PORTAGE_RW | cut -f 1)" -gt 1 ]; then       
      einfo "Syncing the tree"
      [ -f $PORTAGE_NEW ] && rm -f $PORTAGE_NEW
      mksquashfs $PORTDIR $PORTAGE_NEW -check_data
      [ -L $PORTAGE_SQFS ] && rm -f $PORTAGE_SQFS
      ln -sf $PORTAGE_NEW $PORTAGE_SQFS
   else
      einfo "Nothing to do"
   fi
   eend 0   
   ebegin "Unmounting the tree"   
   umount $PORTDIR
   umount $PORTAGE_RO
   rm -rf $PORTAGE_RW
   eend 0
}


/etc/conf.d/squash_portage:
source /etc/make.conf

PORTAGE_BASENAME="/var/tmp/portage"
PORTAGE_SQFS="$PORTAGE_BASENAME.sqfs"
PORTAGE_NEW="$PORTAGE_BASENAME-$(date +%F).sqfs"
PORTAGE_RO=$PORTDIR
PORTAGE_RW="/dev/shm/portage"


Si tous les modules sont charges et si tu es arrive jusque la :
Code:
/etc/init.d/squash_portage start
et verifie ton
/etc/mtab:
[...]
/var/tmp/portage-1.sqfs /usr/portage squashfs ro,loop=/dev/loop0 0 0
unionfs /usr/portage unionfs rw,dirs=/dev/shm/portage=rw:/usr/portage=ro 0 0
[...]
pas trop different ? alors ca marche
Code:
rc-update add squash_portage default
C'est tout, maintenant, une nouvelle image sera creee a chaque fois que tu quites linux (en cas de mise a jour) et chargee a chaque demarrage. N'oublie pas de recompiler les modules a chaque mise a jour du kernel. Tu peux bidouiller mon code ou demander des explications. Je tourne avec ca depuis un moment et j'ai pas de probleme.

Et puis note que je n'ecrase pas les sauvegardes de l'arbre (seulement si tu as mis l'arbre a jour) et que tu dois donc les effacer de temps en temps, un cron job est parfait pour cela, par exemple.

Bien sur, j'ai pense a le mettre en merciware ou beerware ou topsecret-though-expensive-ware, mais GPL ira... enfin tu peux me payer une biere si tu me croises.
_________________
Compress portage tree
Elog viewer
Autodetect swap


Last edited by synss on Sun Jun 11, 2006 5:54 pm; edited 1 time in total
Back to top
View user's profile Send private message
boozo
Advocate
Advocate


Joined: 01 Jul 2004
Posts: 3137

PostPosted: Fri Jun 09, 2006 5:25 pm    Post subject: Reply with quote

'alute

c'est une variante avec rc script donc... peut-être voir pour merger les deux topics non ? :roll:
_________________
" Un psychotique, c'est quelqu'un qui croit dur comme fer que 2 et 2 font 5, et qui en est pleinement satisfait.
Un névrosé, c'est quelqu'un qui sait pertinemment que 2 et 2 font 4, et ça le rend malade ! "
Back to top
View user's profile Send private message
synss
Apprentice
Apprentice


Joined: 08 Mar 2006
Posts: 280
Location: Dijon (F) > Berlin > Tokyo > Nürnberg (D)

PostPosted: Fri Jun 09, 2006 6:33 pm    Post subject: Reply with quote

boozo wrote:
'alute

c'est une variante avec rc script donc... peut-être voir pour merger les deux topics non ? :roll:


je sais pas... dans le forum original en anglais ou il y avait beaucoup de scripts differents, j'ai fait un nouveau post apres que quelqu'un c'est plaint que ca devenait un peu bordelique... Ici, c'est vrais qu'il y en a moins...
_________________
Compress portage tree
Elog viewer
Autodetect swap
Back to top
View user's profile Send private message
adrienleroy
n00b
n00b


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

PostPosted: Mon Mar 19, 2007 2:24 pm    Post subject: Reply with quote

Salut

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

Un petit script pour automatiser la mise à jour :
Code:

#!/bin/bash
URL="gentoosquash.free.fr"
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 ${PORTDIR}/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