chiark / gitweb /
Cope with missing mtab better.
[disorder] / debian / postinst.disorder-server
1 #! /bin/sh
2 #
3 # This file is part of DisOrder
4 # Copyright (C) 2004, 2007-2009 Richard Kettlewell
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 #
19
20 set -e
21
22 . /usr/share/debconf/confmodule
23
24 add_jukebox_user() {
25   adduser --quiet --system --group --shell /bin/sh --home /var/lib/disorder \
26     --no-create-home jukebox
27   # If it happens that there's no audio group we don't fail; perhaps only
28   # network play was required.
29   adduser jukebox audio || true
30 }
31
32 configure_init_d() {
33   update-rc.d disorder defaults 92 19 > /dev/null
34 }
35
36 restart_server() {
37   local first
38   local time
39   invoke-rc.d disorder restart
40   # Wait for the server to start
41   first=true
42   time=0
43   while :; do
44     if disorder version >/dev/null 2>&1; then
45       break
46     else
47       if [ $time -gt 30 ]; then
48         echo
49         echo "Server did not stabilise in a reasonable amount of time"
50         exit 1
51       fi
52       if $first; then
53         printf "Waiting for server to stabilise"
54         first=false
55       fi
56       printf "."
57       sleep 1
58     fi
59     time=`expr $time + 1`
60   done
61   echo
62 }
63
64 setup_guest() {
65   echo "Checking whether guest user exists..." >&2
66   TMPFILE="$(mktemp -t)"
67   if disorder users > "$TMPFILE"; then
68     if grep -q '^guest$' "$TMPFILE"; then
69       echo "Guest user has already been set up." >&2
70     else
71       echo "Attempting to set up guest user..." >&2
72       if disorder setup-guest; then
73         echo "Created guest user." >&2
74       else
75         echo "Failed to create guest user." >&2
76         echo "You can use 'disorder setup-guest' to do this step manually." >&2
77         echo >&2
78       fi
79     fi
80   else
81     echo "Cannot determine whether guest user has been set up." >&2
82     echo >&2
83   fi
84   rm -f "$TMPFILE"
85 }
86
87 fix_configuration() {
88   # Once the server has started up, we can remove some of the obsolete
89   # directives from the config file.
90   if grep -q ^trust /etc/disorder/config; then
91     echo "Removing obsolete 'trust' directive from /etc/disorder/config" >&2
92     sed < /etc/disorder/config > /etc/disorder/config.new \
93         's/^trust/#trust/'
94     chmod 644 /etc/disorder/config.new
95     mv /etc/disorder/config.new /etc/disorder/config
96   fi
97   if test -e /etc/disorder/config.private \
98       && grep -q ^allow /etc/disorder/config.private; then
99     echo "Removing obsolete 'allow' directive(s) from /etc/disorder/config.private" >&2
100     u=$(umask)
101     umask 077
102     sed < /etc/disorder/config.private > /etc/disorder/config.private.new \
103         's/^allow/#allow/'
104     umask $u
105     chmod 640 /etc/disorder/config.private.new
106     chown root:jukebox /etc/disorder/config.private.new
107     mv /etc/disorder/config.private.new /etc/disorder/config.private
108   fi
109 }
110
111 # Create configuration from debconf answers
112 create_config() {
113   db_get disorder/roots || true
114   roots="$RET"
115   db_get disorder/scratches || true
116   scratches="$RET"
117   db_get disorder/encoding || true
118   encoding="$RET"
119   db_get disorder/port || true
120   port="$RET"
121   db_get disorder/mail_sender || true
122   mail_sender="$RET"
123   db_get disorder/interface || true
124   interface="$RET"
125   if test "x$interface" = xnetwork; then
126     db_get disorder/mcast_address || true
127     mcast_address="$RET"
128     db_get disorder/mcast_port || true
129     mcast_port="$RET"
130   fi
131
132   mkdir -p /etc/disorder
133   cat > /etc/disorder/conf.debconf.new <<EOF
134 # created automatically from debconf information
135 # do not edit manually
136 # run 'dpkg-reconfigure disorder' instead
137 EOF
138
139   echo >> /etc/disorder/conf.debconf.new
140   echo "# Collection roots"  >> /etc/disorder/conf.debconf.new
141   for r in $roots; do
142     echo "collection fs $encoding $r" >> /etc/disorder/conf.debconf.new
143   done
144
145   echo >> /etc/disorder/conf.debconf.new
146   echo "# Scratches" >> /etc/disorder/conf.debconf.new
147   for s in $scratches; do
148     echo "scratch $s" >> /etc/disorder/conf.debconf.new
149   done
150
151   if test "$mail_sender" != ""; then
152     echo "" >> /etc/disorder/conf.debconf.new
153     echo "# Source mail address" >> /etc/disorder/conf.debconf.new
154     echo "mail_sender $mail_sender" >> /etc/disorder/conf.debconf.new
155   fi
156
157   if test "$port" != none && test "$port" != ""; then
158     echo >> /etc/disorder/conf.debconf.new
159     echo "# Listen for remote clients" >> /etc/disorder/conf.debconf.new
160     echo "listen 0.0.0.0 $port" >> /etc/disorder/conf.debconf.new
161   fi
162
163   if test "x$interface" = xnetwork; then
164     echo "" >> /etc/disorder/conf.debconf.new
165     echo "# Target address for RTP frames" >> /etc/disorder/conf.debconf.new
166     echo "broadcast $mcast_address $mcast_port" >> /etc/disorder/conf.debconf.new
167   fi
168
169   mv /etc/disorder/conf.debconf.new /etc/disorder/conf.debconf
170 }
171
172 case "$1" in
173 configure )
174   if grep -q ^jukebox: /etc/passwd; then
175     :
176   else
177     add_jukebox_user
178   fi
179   chown jukebox:jukebox /var/lib/disorder
180   configure_init_d
181   create_config
182   restart_server
183   fix_configuration
184   setup_guest
185   ;;
186 reconfigure )
187   create_config
188   ;;
189 abort-upgrade )
190   invoke-rc.d disorder restart
191   ;;
192 reconfigure )
193   invoke-rc.d disorder reload
194   ;;
195 esac
196
197 db_stop