# [HOWTO] Paludis et squashfs

## Bapt

Paludis utilisant le même arbre que portage, il dispose des même problème d'espace disque utilisé. Tout comme pour portage nous pouvons compresser l'arborescence portage dans une archive squashfs.

Activer le module squashfs dans le noyau

installer les utilitaires squashfs et unionfs

```
paludis -i squashfs-tools unionfs
```

Charger le modules squashfs et unionfs

```
modprobe squashfs

modprobe unionfs
```

Créer un répertoire gentoo dans le ram disque

```
mkdir /dev/shm/gentoo
```

Déplacer le répertoire distfiles pour qu'il ne soit plus dans l'arborescence des ebuilds et penser à changer dans le fichier de configuration des répertoire : /etc/paludis/repositories/*.conf les références distdir pour qu'elles pointent vers le nouveau répertoire.

Supprimer les cache et les mettre ailleurs, /var/cache/paludis par exemple, penser à modificier les fichiers de configuration en conséquence : 

```

names_cache = /var/cache/paludis/gentoocache/names

```

Compresser l'arborescence gentoo

```
mksquashfs /var/paludis/repositories/gentoo /var/paludis/repositories/gentoo.sqfs -check_data
```

Faire une sauvegarde de l'arborescence gentoo : 

```
mv /var/paludis/repositories/gentoo /var/paludis/repositories/gentoo-old

mkdir /var/paludis/repositories/gentoo
```

Faire un hook qui va recréer le squashfs à la prochaine mise à jour 

Créer le répertoire /etc/paludis/hooks/sync_all_post :

```
mkdir -p /etc/paludis/hooks/sync_all_post
```

créer un fichier update_squahfs.bash :

```
#!/bin/bash

source ${PALUDIS_EBUILD_DIR}/echo_functions.bash

einfo "Updating squashfs"

mksquashfs /var/paludis/repositories/gentoo /var/paludis/repositories/gentoo-new.sqfs >/dev/null

einfo "Remounting squashfs"

umount /var/paludis/repositories/gentoo

umount /var/paludis/repositories/gentoo

mv /var/paludis/repositories/gentoo-new.sqfs /var/paludis/repositories/gentoo.sqfs

mount /var/paludis/repositories/gentoo

mount -t unionfs -o dirs=/dev/shm/gentoo=rw:/var/paludis/repositories/gentoo=ro unionfs /var/paludis/repositories/gentoo

```

Charger les modules au démarrage : 

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

echo unionfs >> /etc/modules.autoload.d/kernel-2.6

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

Renseigner la fstab : 

```
echo "/var/paludis/repositories/gentoo.sqfs /var/paludis/repositories/gentoo squashfs loop 0 0" >> /etc/fstab
```

Rajouter le montage unionfs au démarrage :

```
echo "mkdir -p /dev/shm/paludis" >> /etc/conf.d/local.start

echo "mount -t unionfs -o dirs=/dev/shm/gentoo=rw:/var/paludis/repositories/gentoo=ro unionfs /var/paludis/repositories/gentoo" >> /dev/local.start
```

ajouter local au démarrage :

```
rc-update add local default
```

tout utiliser : 

```
mount /var/paludis/repositories/gentoo

/etc/init.d/local start

```

Désormais chaques synchronisation fera une mise à jour de l'archive.

Mon arborescence gentoo est passé de 573Mo à 41Mo  :Smile: 

TODO: rendre le hook plus propre, faire en sorte qu'il ne se déclenche que pour le répertoire gentoo.

----------

