#!/sbin/runscript depend() { need localmount after bootmisc } MOZ_MOUNT=${MOZ_MOUNT:-YES} MOZ_MKDIR=${MOZ_MKDIR:-YES} MOZ_MOUNTDIR=${MOZ_MOUNTDIR:-/tmp/moztmp/} MOZ_DIR=${MOZ_DIR:-.mozilla} MOZ_SAVEDIR=${MOZ_SAVEDIR:-.mozilla_save} # Return the homedir of a user homedir() { echo $(eval echo ~$1) } # Return the size needed for the ramdisk # Adds up the size of the .mozilla dir for each user - or takes 50MB if it does not exist # Finally doubles the size - just to be on the safe side ;) get_size() { local size=0 for u in ${MOZ_USERS}; do local dir=$(homedir $u)/${MOZ_DIR} if [ -d $dir ]; then s=$(du -s $dir | cut -f 1) size=$(( size + s )) else if [ -e $dir ]; then echo "$home is not a directory!" else # save default: 50 MB size=$(( size + 51200 )) fi fi done size=$(( size * 2 )) veinfo "Taking ${size}k as the size." echo $size } # Move folder to mounted dir for one user folder_to_mnt() { local user=$1 local mdir=$(homedir $u)/${MOZ_DIR} local sdir=$(homedir $u)/${MOZ_SAVEDIR} local mntdir=${MOZ_MOUNTDIR}/${user} if [ -e $sdir ]; then eerror "$sdir already existing. Skipping user $user." return 1 else checkpath -d -o $user $mntdir || return 1 if [ -e $mdir ]; then mv $mdir $sdir || return 1 fi if ! ln -s $mntdir $mdir; then rm -f $mdir [ -e $sdir ] && mv $sdir $mdir eerror "Linking failed" return 1 fi einfo "Rsyncing" if ! rsync -qai --delete $sdir/ $mntdir ; then rm -f $mdir [ -e $sdir ] && mv $sdir $mdir eerror "RSync failed" return 1 fi fi return 0 } # Moves folder from mnt back to the home dir folder_to_home() { local user=$1 local mdir=$(homedir $u)/${MOZ_DIR} local sdir=$(homedir $u)/${MOZ_SAVEDIR} local mntdir=${MOZ_MOUNTDIR}/${user} if [ ! -L $mdir ]; then eerror "$mdir is not a link. Skipping user $user." return 1 else rm $mdir einfo "Rsyncing" rsync -aiq --delete $mntdir/ $sdir/ || return 1 mv $sdir $mdir fi return 0 } stop() { for u in ${MOZ_USERS}; do ebegin "Deleting moztmp for user $u" eindent folder_to_home $u eoutdent eend $? done if yesno $(service_get_value mnted); then ebegin "Unmounting ${MOZ_MOUNTDIR}" umount ${MOZ_MOUNTDIR} eend $? fi if yesno $(service_get_value dirmk); then rmdir ${MOZ_MOUNTDIR} fi } start() { if yesno ${MOZ_MKDIR}; then checkpath -d ${MOZ_MOUNTDIR} service_set_value dirmk YES else service_set_value dirmk NO fi if yesno ${MOZ_MOUNT} && ! mountinfo -q ${MOZ_MOUNTDIR}; then local size=$(get_size) ebegin "Mounting ${MOZ_MOUNTDIR}" mount -t tmpfs -o size=${size}k tmpfs ${MOZ_MOUNTDIR} eend $? service_set_value mnted YES else service_set_value mnted NO fi for u in ${MOZ_USERS}; do ebegin "Setting moztmp for user $u" eindent folder_to_mnt $u eoutdent eend $? done return 0 } # vim:ft=gentoo-init-d