View previous topic :: View next topic |
Author |
Message |
synss Apprentice
Joined: 08 Mar 2006 Posts: 282 Location: Dijon > Berlin > Tokyo > Nürnberg > München
|
Posted: Thu Jun 08, 2006 8:43 pm Post subject: [HOWTO] compresser l'arborescence portage |
|
|
dans la serie, et je me traduis
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)
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 |
|
|
boozo Advocate
Joined: 01 Jul 2004 Posts: 3193
|
|
Back to top |
|
|
synss Apprentice
Joined: 08 Mar 2006 Posts: 282 Location: Dijon > Berlin > Tokyo > Nürnberg > München
|
Posted: Fri Jun 09, 2006 6:33 pm Post subject: |
|
|
boozo wrote: | 'alute
c'est une variante avec rc script donc... peut-être voir pour merger les deux topics non ? |
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 |
|
|
adrienleroy n00b
Joined: 02 Dec 2004 Posts: 74 Location: Lille,France
|
Posted: Mon Mar 19, 2007 2:24 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|