#!/sbin/runscript depend() { # yes - we need 'swap' here # if this is omitted, swap will unmount our tmpfs -.-' need localmount swap 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 eerror "$dir 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 if [ -e "$mdir" ]; then [ ! -d "$mdir" ] && return 1 mv "$mdir" "$sdir" || return 1 fi if ! checkpath -d -o $user "$mntdir"; then [ -e "$sdir" ] && mv "$sdir" "$mdir" eerror "Creating moztmp directory failed." 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)/$(service_get_value mozdir)" local sdir="$(homedir $u)/$(service_get_value mozsavedir)" local mntdir="$(service_get_value mountdir)/${user}" if [ ! -e "$mdir" ]; then eerror "$mdir is not existing. Skipping user $user". return 1 fi 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() { local mountdir="$(service_get_value mountdir)" local ret= for u in $(service_get_value users); do ebegin "Deleting moztmp for user $u" eindent folder_to_home $u ret=$? eoutdent eend $ret done if yesno $(service_get_value mounted); then ebegin "Unmounting $mountdir" umount "${mountdir}" eend $? fi if yesno $(service_get_value mkdir); then rmdir "${mountdir}" fi } start() { local ret= # save values to have them during shutdown service_set_value users "$MOZ_USERS" service_set_value mountdir "$MOZ_MOUNTDIR" service_set_value mozdir "$MOZ_DIR" service_set_value mozsavedir "$MOZ_SAVEDIR" if yesno ${MOZ_MKDIR}; then checkpath -d "${MOZ_MOUNTDIR}" service_set_value mkdir YES else service_set_value mkdir 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 mounted YES else service_set_value mounted NO fi for u in ${MOZ_USERS}; do ebegin "Setting moztmp for user $u" eindent folder_to_mnt $u ret=$? eoutdent eend $ret done return 0 } # vim:ft=gentoo-init-d