Ja, ich hab wieder was zum Maulen gefunden, als ich auf meiner Workstation versucht hatte, Platz zu schaffen:
pavilion ~ # cd /usr/portage
pavilion portage # du-sh
531M .
Der Portage wird mit der Zeit, ohne Distfiles gerechnet etwas fett und ich sehe nicht ein, deshalb Platz von meiner Musiksammlung abzwacken zu müssen.
Die Suche nach Lösungen brachte mich auf die Idee, den Portage auf eine eigene Partition zu verlagern, um zumindest die Fragmentierung gering zu halten. Warum also nicht in ein File quetschen?
Die Suche geht weiter und ich stolpere über SquashFS, welches von den Entwicklern wie folgt beschrieben wird:
Squashfs is a compressed read-only filesystem for Linux. Squashfs is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed. The filesystem is currently stable, and has been tested on PowerPC, i586, Sparc and ARM architectures.
Unter Gentoo sollte ja dank dem Motto 'It is all about the choices' möglich sein, dies zu implementieren. Als ersten Schritt wird dazu der Kernel angepasst:
Device Drivers -> Block Devices -> Loopback device support
File systems -> Miscellaneous Filesystems -> SquashFS
Es folgt das Emergen der squashfs-tools und die Modifikation meiner make.conf:
PORTAGE_TMPDIR=/var/tmp
PORTDIR=/usr/portage
DISTDIR=/usr/local/portage/distfiles
PKGDIR=/usr/local/portage/packages
PORT_LOGDIR=/var/log/portagePORTDIR_OVERLAY="/usr/local/portage"
Da SquashFS Read-Only ist, also ein Filesystem ist habe ich die 'beweglichen Teile' des Portages, Packages und Distfiles in ein anderes Verzeichnis bewegt. Nun legen wir das Filesystem an:
mksquashfs /usr/portage /usr/portage.sqsh -check_data
tar cvzf /usr/portage-backup.tar.gz /usr/portage
rm -rf /usr/portage/*
modprobe loop squashfs
Ein Update der fstab ermöglicht das Einbinden des 'neuen' Portage:
/usr/portage.sqsh /usr/portage squashfs ro,loop 0 0
Ist das erledigt, können wir durch den Befehl "mount /usr/portage" den Portage wieder mounten. Um ein Update durchführen zu können, brauchen wir jedoch wieder einen Portage in Fileform um die ganze Prozedur wiederholen zu können.