blob: 6d91ef706029be6172d78b3a7df316acf4256068 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#!/sbin/runscript
opts="save load"
depend() {
need localmount
after bootmisc
}
MOZ_MOUNT=${MOZ_MOUNT:-/tmp/moztmp/}
MOZ_DIR=${MOZ_DIR:-.mozilla}
MOZ_SAVEDIR=${MOZ_SAVEDIR:-.mozilla_save}
homedir() {
echo $(eval echo ~$1)
}
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
}
set_folder() {
local user=$1
local mdir=$(homedir $u)/$MOZ_DIR
local sdir=$(homedir $u)/$MOZ_SAVEDIR
local mntdir=$MOZ_MOUNT/$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)/$MOZ_DIR
local sdir=$(homedir $u)/$MOZ_SAVEDIR
local mntdir=$MOZ_MOUNT/$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 $MOZ_USERS; do
ebegin "Deleting moztmp for user $u"
eindent
get_folder $u
eoutdent
eend $?
done
if yesno $(service_get_value mnted); then
ebegin "Unmounting ${MOZ_MOUNT}"
umount ${MOZ_MOUNT}
eend $?
fi
}
load() {
local size=$(get_size)
if ! mountinfo -q ${MOZ_MOUNT}; then
ebegin "Mounting ${MOZ_MOUNT}"
checkpath -d ${MOZ_MOUNT}
mount -t tmpfs -o size=${size}k tmpfs ${MOZ_MOUNT}
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
set_folder $u
eoutdent
eend $?
done
return 0
}
start() {
load
}
stop() {
save
}
# vim:ft=gentoo-init-d
|