Add Debian directory
[mspang/vmailman.git] / debian / postinst
1 #! /bin/sh -e
2 #
3 # postinst script for Debian python packages
4 # Written 1998 by Gregor Hoffleit <flight@debian.org>.
5 # Updated 2001 by Tollef Fog Heen <tfheen@debian.org>
6 # mailman modifications 2004 by Bernd S. Brentrup <bsb@debian.org>
7 # Other modifications 2004-2007 by other maintainers of the Debian package:
8 #      Lionel Elie Mamane, Thijs Kinkhorst, Riccardo Setti, Matej Vela, Hector Garcia, László Böszörményi, Bernd S. Brentrup, ...
9 #
10 # $URL: svn+ssh://lmamane@svn.debian.org/svn/pkg-mailman/trunk/debian/postinst $
11 # $Id: postinst 486 2007-02-27 22:16:39Z thijs $
12 #
13 . /usr/share/debconf/confmodule
14
15 PACKAGE=mailman
16 DIRLIST="/usr/lib/mailman/Mailman /usr/lib/mailman/bin /usr/lib/mailman/cron /usr/lib/mailman/scripts"
17 PYLIBDIR="/usr/lib/python`python -c 'import sys; print sys.version[:3]'`"
18
19 if md5sum -c /dev/null 2>/dev/null; [ "$?" = 3 ]; then
20     # We are using dpkg's md5sum
21     md5sum="md5sum -v"
22 else
23     # We are using coreutils' md5sum (hopefully)
24     md5sum=md5sum
25 fi
26
27 if [ "$1" = "configure" ]; then
28
29     ## Special magick to upgrade from versions between 1:2.1.8-3 and 1:2.1.9-2
30     if [ -d /var/lib/mailman/pythonlib ] && [ ! -h /var/lib/mailman/pythonlib ]; then
31         # It had better already be empty!
32         rmdir /var/lib/mailman/pythonlib
33     fi
34     if [ ! -h /var/lib/mailman/pythonlib ]; then
35         ln -s /usr/lib/mailman/pythonlib /var/lib/mailman/pythonlib
36     fi
37     ## End special magick to upgrade
38
39     mm_etc=/etc/mailman
40     mm_dist=/usr/share/mailman
41
42     # Install only languages selected by the administrator
43     # forcing used languages to be always available.
44     db_get mailman/site_languages
45     site_languages="$(echo $RET | sed -e 's/, */ /g' | sed -r 's/ \([^\)]*\)//g')"
46     need_languages="${site_languages}"
47     db_get  mailman/used_languages
48     db_fset mailman/used_languages seen true
49     db_fset mailman/used_languages scanned false
50     for lang in ${used_languages} ; do
51       if echo " ${site_languages} " | grep -v -q " ${lang} " ; then
52         need_languages="${need_languages:+${need_languages} }${lang}"
53       fi
54     done
55     if [ "${need_languages}" != "${site_languages}" ]; then
56       db_set mailman/site_languages "$(echo ${need_languages} | sed -e 's/  */, /g')"
57     fi
58
59     # At present ALL directories in /etc/mailman are language directories
60     # but this may change in the future, better check.
61     # Furthermore, the administrator may have have added other directories
62     for dir in $(find ${mm_etc} -maxdepth 1 -mindepth 1 -type d -printf '%P\n'); do
63       if [ -f ${mm_dist}/${dir}/options.html ]; then
64         old_languages="${old_languages} ${dir}"
65       fi
66     done
67
68     # Remove languages no longer used, but purging modified files
69     # is a bad thing[TM].
70     leftover=/etc/mailman/leftover
71     : >${leftover}
72     for lang in ${old_languages}; do
73       if  echo " ${site_languages} " | grep -v -q " ${lang} " ; then
74         echo -n "Removing unmodified files from ${mm_etc}/${lang} " >&2
75         # UGLY HACK: Since ucf doesn't support conditional removal
76         #            we access its hashfile directly
77         md5sums=$(tempfile --prefix=mm_${lang})
78         grep "^[[:xdigit:]]{32}[[:space:]]\+${mm_etc}/$lang/" /var/lib/ucf/hashfile >${md5sums} || true
79           # Language files are under ucf control, check md5sums
80           # LEM: The ":\?" is there to accomodate both md5sum from dpkg (in sarge)
81           #      and md5sum from coreutils (in etch and onwards).
82           #      It breaks with md5sum-from-dpkg if a filename ends with ":",
83           #      but this is not expected to happen.
84           for file in $(${md5sum} -c ${md5sums} 2>&1 | sed -n 's/:\? *OK$//p'); do 
85             ucf --debconf-ok --purge ${file}
86             rm -f ${file} ${file}.dpkg-dist
87             echo -n . >&2
88           done
89           # For modified files remove corresponding .dpkg-dist
90           for file in $(grep "^[[:xdigit:]]{32}[[:space:]]\+${mm_etc}/$lang/" /var/lib/ucf/hashfile | awk '{ print $2 }'); do
91             rm -f ${file}.dpkg-dist
92             echo -n . >&2
93           done
94         echo " done." >&2
95         rmdir ${mm_etc}/${lang} 2>/dev/null \
96           || echo "Directory ${mm_etc}/${lang} not empty, not removed." >&2
97         rm -f ${md5sums}
98       fi
99     done
100
101     for lang in ${site_languages}; do
102       echo -n "Installing site language ${lang} " >&2
103       mkdir -p ${mm_etc}/${lang}
104       for file in $(ls ${mm_dist}/${lang}); do
105         echo -n . >&2
106         langfile=${lang}/${file}
107         ucf --debconf-ok --three-way ${mm_dist}/${langfile} ${mm_etc}/${langfile} 2>/dev/null
108         # Upon install ucf leaves a duplicate in .dpkg-dist (Bug #238730), remove it
109         cmp -s ${mm_etc}/${langfile} ${mm_etc}/${langfile}.dpkg-dist \
110           && rm ${mm_etc}/${langfile}.dpkg-dist
111       done
112       echo " done." >&2
113     done
114     # Done with site language stuff
115
116     # Don't forget the qmail specific stuff
117     ucf --debconf-ok --three-way ${mm_dist}/qmail-to-mailman.py ${mm_etc}/qmail-to-mailman.py 2>/dev/null
118     # Install postfix-to-mailman.py as well
119     ucf --debconf-ok --three-way ${mm_dist}/postfix-to-mailman.py ${mm_etc}/postfix-to-mailman.py 2>/dev/null
120     # Upon install ucf leaves a duplicate in .dpkg-dist (Bug #238730), remove it
121     for file in qmail-to-mailman.py postfix-to-mailman.py; do
122       cmp -s ${mm_etc}/${file} ${mm_etc}/${file}.dpkg-dist \
123         && rm ${mm_etc}/${file}.dpkg-dist
124     done
125
126     # Configure Mailman crontab
127
128     # Ensure the file exists before we awk it.
129     if [ ! -f /etc/cron.d/mailman ]; then
130     cat > /etc/cron.d/mailman <<EOF
131 # At 8AM every day, mail reminders to admins as to pending requests.
132 # They are less likely to ignore these reminders if they're mailed
133 # early in the morning, but of course, this is local time... ;)
134 0 8 * * * list [ -x /usr/lib/mailman/cron/checkdbs ] && /usr/lib/mailman/cron/checkdbs
135 #
136 # At 9AM, send notifications to disabled members that are due to be
137 # reminded to re-enable their accounts.
138 0 9 * * * list [ -x /usr/lib/mailman/cron/disabled ] && /usr/lib/mailman/cron/disabled
139 #
140 # Noon, mail digests for lists that do periodic as well as threshold delivery.
141 0 12 * * * list [ -x /usr/lib/mailman/cron/senddigests ] && /usr/lib/mailman/cron/senddigests
142 #
143 # 5 AM on the first of each month, mail out password reminders.
144 0 5 1 * * list [ -x /usr/lib/mailman/cron/mailpasswds ] && /usr/lib/mailman/cron/mailpasswds
145 #
146 # Every 5 mins, try to gate news to mail.  You can comment this one out
147 # if you don't want to allow gating, or don't have any going on right now,
148 # or want to exclusively use a callback strategy instead of polling.
149 # */5 * * * * list [ -x /usr/lib/mailman/cron/gate_news ] && /usr/lib/mailman/cron/gate_news
150 #
151 # At 3:27am every night, regenerate the gzip'd archive file.  Only
152 # turn this on if the internal archiver is used and
153 # GZIP_ARCHIVE_TXT_FILES is false in mm_cfg.py
154 27 3 * * * list [ -x /usr/lib/mailman/cron/nightly_gzip ] && /usr/lib/mailman/cron/nightly_gzip
155 EOF
156     fi
157
158     # This should be removed after etch is released, it crept in in 2.1.5-1
159     if grep -q "gate_news]" /etc/cron.d/mailman; then
160         sed -e 's/gate_news]/gate_news ]/' < /etc/cron.d/mailman > /etc/cron.d/mailman.$$
161         mv -f /etc/cron.d/mailman.$$ /etc/cron.d/mailman
162     fi
163
164     db_get mailman/gate_news || true
165     if [ "$RET" = "false" ]; then
166         # Comment out any lines containing the words "gate_news"
167         awk '/^[^#]*gate_news/ { print "# " $LINE;next }; //' < /etc/cron.d/mailman > /etc/cron.d/mailman.$$
168     else
169         # Remove commenting of any lines containing gate_news
170         awk '/^[ \t]*#.*gate_news/ { sub(/^[ \t]*#[ \t]*/, ""); print; next }; //' < /etc/cron.d/mailman > /etc/cron.d/mailman.$$
171     fi
172     mv -f /etc/cron.d/mailman.$$ /etc/cron.d/mailman
173
174     if [ -e /etc/mailman/mm_cfg.py ]; then
175         db_get mailman/default_server_language || true
176         if [ -n "$RET" ]; then
177             default_server_language="$(echo $RET | sed -r 's/ \([^\)]*\)//g')"
178             sed -e s/DEFAULT_SERVER_LANGUAGE.*=.*\'..\'/DEFAULT_SERVER_LANGUAGE\ =\ \'${default_server_language}\'/ ${mm_etc}/mm_cfg.py > ${mm_etc}/mm_cfg.py.$$
179             mv -f ${mm_etc}/mm_cfg.py.$$ ${mm_etc}/mm_cfg.py
180         fi
181     fi
182 fi
183
184 db_stop || true
185
186 case "$1" in
187     configure|abort-upgrade|abort-remove|abort-deconfigure)
188         if [ -e /etc/mailname ]
189             then 
190             DOMAIN=$(head -n 1 /etc/mailname)
191             # fixme - should we look for a dot in the domainname?
192         else
193             DOMAIN=localhost.localdomain
194         fi
195         if [ ! -e /etc/$PACKAGE/mm_cfg.py ]; then
196             echo "Configuring $PACKAGE for domain $DOMAIN ..."
197             sed s/thunderchild.aszi.sztaki.hu/$DOMAIN/g /usr/lib/mailman/Mailman/mm_cfg.py.dist \
198                 > /etc/$PACKAGE/mm_cfg.py
199         fi
200
201         if grep -q mm_defaults /etc/mailman/mm_cfg.py; then
202                 echo "Changing mm_defaults to Defaults in mm_cfg.py"
203                 echo "Fixing host name in /etc/mm_cfg.py"
204                 sed s/mm_defaults/Defaults/ "s/'localhost'/$DOMAIN/g" "s#http://localhost#http://$DOMAIN#g" </etc/mailman/mm_cfg.py >/etc/mailman/mm_cfg.py.new
205                 mv /etc/mailman/mm_cfg.py /etc/mailman/mm_cfg.py.old
206                 mv /etc/mailman/mm_cfg.py.new /etc/mailman/mm_cfg.py
207         fi
208         sg list -c "umask 002; /usr/lib/mailman/bin/update;"
209
210         # fix permissions
211         find /var/lib/mailman/ -type d -exec chmod g+s \{\} \;
212         chmod o-rx /var/lib/mailman/archives/private
213         chown www-data /var/lib/mailman/archives/private
214     ;;
215
216     *)
217         echo "postinst called with unknown argument \`$1'" >&2
218         exit 1
219     ;;
220 esac
221
222 if [ "$1" = "configure" ] && dpkg --compare-versions "$2" lt-nl "1:2.1.9-7"; then
223     /var/lib/mailman/bin/withlist --all -q -r unicodify_archives
224 fi
225
226
227 #DEBHELPER#