summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2009-05-06 01:56:05 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2009-05-06 01:56:05 +0200
commitc2cd147883aabf3ad825f9bd8d0e0c5347a77856 (patch)
tree662dae197aa2fee823edcd4f0463566df924ad97
downloadmoztmp-c2cd147883aabf3ad825f9bd8d0e0c5347a77856.tar.gz
moztmp-c2cd147883aabf3ad825f9bd8d0e0c5347a77856.tar.bz2
moztmp-c2cd147883aabf3ad825f9bd8d0e0c5347a77856.zip
First running version of moztmp
-rwxr-xr-xmoztmp146
1 files changed, 146 insertions, 0 deletions
diff --git a/moztmp b/moztmp
new file mode 100755
index 0000000..79e74b1
--- /dev/null
+++ b/moztmp
@@ -0,0 +1,146 @@
+#!/sbin/runscript
+
+opts="save load"
+
+depend() {
+ need localmount
+ after bootmisc
+}
+
+MOZMOUNT=${MOZMOUNT:-/tmp/moztmp/}
+MOZDIR=${MOZDIR:-.mozilla}
+MOZSAVEDIR=${MOZSAVEDIR:-.mozilla_save}
+
+homedir() {
+ echo $(eval echo ~$1)
+}
+
+get_size() {
+ local size=0
+ for u in $USERS; do
+ local dir=$(homedir $u)/${MOZDIR}
+ 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
+}
+
+set_folder() {
+ local user=$1
+ local mdir=$(homedir $u)/$MOZDIR
+ local sdir=$(homedir $u)/$MOZSAVEDIR
+ local mntdir=$MOZMOUNT/$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
+}
+
+get_folder() {
+ local user=$1
+ local mdir=$(homedir $u)/$MOZDIR
+ local sdir=$(homedir $u)/$MOZSAVEDIR
+ local mntdir=$MOZMOUNT/$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
+}
+
+save() {
+ for u in $USERS; do
+ ebegin "Deleting moztmp for user $u"
+ eindent
+ get_folder $u
+ eoutdent
+ eend $?
+ done
+
+ if yesno $(service_get_value mnted); then
+ ebegin "Unmounting ${MOZMOUNT}"
+ umount ${MOZMOUNT}
+ eend $?
+ fi
+}
+
+load() {
+ local size=$(get_size)
+
+ if ! mountinfo -q ${MOZMOUNT}; then
+ ebegin "Mounting ${MOZMOUNT}"
+ checkpath -d ${MOZMOUNT}
+ mount -t tmpfs -o size=${size}k tmpfs ${MOZMOUNT}
+ eend $?
+
+ service_set_value mnted YES
+ else
+ service_set_value mnted NO
+ fi
+
+ for u in $USERS; do
+ ebegin "Setting moztmp for user $u"
+ eindent
+ set_folder $u
+ eoutdent
+ eend $?
+ done
+
+ return 0
+}
+
+start() {
+ load
+}
+
+stop() {
+ save
+}
+
+# vim:ft=gentoo-init-d