chiark / gitweb /
Merge from uaudio branch.
[disorder] / debian / postinst.disorder-server
1 #! /bin/sh
2 #
3 # This file is part of DisOrder
4 # Copyright (C) 2004, 2007, 2008 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   invoke-rc.d disorder restart
38   # Wait for the server to get going.  This is a horrid bodge and ought
39   # to be done away with, but is required for the time being.  Sorry.
40   sleep 5
41 }
42
43 setup_guest() {
44   echo "Checking whether guest user exists..." >&2
45   TMPFILE="$(mktemp -t)"
46   if disorder users > "$TMPFILE"; then
47     if grep -q '^guest$' "$TMPFILE"; then
48       echo "Guest user has already been set up." >&2
49     else
50       echo "Attempting to set up guest user..." >&2
51       if disorder setup-guest; then
52         echo "Created guest user." >&2
53       else
54         echo "Failed to create guest user." >&2
55         echo "You can use 'disorder setup-guest' to do this step manually." >&2
56         echo >&2
57       fi
58     fi
59   else
60     echo "Cannot determine whether guest user has been set up." >&2
61     echo >&2
62   fi
63   rm -f "$TMPFILE"
64 }
65
66 fix_configuration() {
67   # Once the server has started up, we can remove some of the obsolete
68   # directives from the config file.
69   if grep -q ^trust /etc/disorder/config; then
70     echo "Removing obsolete 'trust' directive from /etc/disorder/config" >&2
71     sed < /etc/disorder/config > /etc/disorder/config.new \
72         's/^trust/#trust/'
73     chmod 644 /etc/disorder/config.new
74     mv /etc/disorder/config.new /etc/disorder/config
75   fi
76   if test -e /etc/disorder/config.private \
77       && grep -q ^allow /etc/disorder/config.private; then
78     echo "Removing obsolete 'allow' directive(s) from /etc/disorder/config.private" >&2
79     u=$(umask)
80     umask 077
81     sed < /etc/disorder/config.private > /etc/disorder/config.private.new \
82         's/^allow/#allow/'
83     umask $u
84     chmod 640 /etc/disorder/config.private.new
85     chown root:jukebox /etc/disorder/config.private.new
86     mv /etc/disorder/config.private.new /etc/disorder/config.private
87   fi
88 }
89
90 # Create configuration from debconf answers
91 create_config() {
92   db_get disorder/roots || true
93   roots="$RET"
94   db_get disorder/scratches || true
95   scratches="$RET"
96   db_get disorder/encoding || true
97   encoding="$RET"
98   db_get disorder/port || true
99   port="$RET"
100   db_get disorder/mail_sender || true
101   mail_sender="$RET"
102   db_get disorder/interface || true
103   interface="$RET"
104   if test "x$interface" = xnetwork; then
105     db_get disorder/mcast_address || true
106     mcast_address="$RET"
107     db_get disorder/mcast_port || true
108     mcast_port="$RET"
109   fi
110
111   mkdir -p /etc/disorder
112   cat > /etc/disorder/conf.debconf.new <<EOF
113 # created automatically from debconf information
114 # do not edit manually
115 # run 'dpkg-reconfigure disorder' instead
116 EOF
117
118   echo >> /etc/disorder/conf.debconf.new
119   echo "# Collection roots"  >> /etc/disorder/conf.debconf.new
120   for r in $roots; do
121     echo "collection fs $encoding $r" >> /etc/disorder/conf.debconf.new
122   done
123
124   echo >> /etc/disorder/conf.debconf.new
125   echo "# Scratches" >> /etc/disorder/conf.debconf.new
126   for s in $scratches; do
127     echo "scratch $s" >> /etc/disorder/conf.debconf.new
128   done
129
130   if test "$mail_sender" != ""; then
131     echo "" >> /etc/disorder/conf.debconf.new
132     echo "# Source mail address" >> /etc/disorder/conf.debconf.new
133     echo "mail_sender $mail_sender" >> /etc/disorder/conf.debconf.new
134   fi
135
136   if test "$port" != none && test "$port" != ""; then
137     echo >> /etc/disorder/conf.debconf.new
138     echo "# Listen for remote clients" >> /etc/disorder/conf.debconf.new
139     echo "listen 0.0.0.0 $port" >> /etc/disorder/conf.debconf.new
140   fi
141
142   if test "x$interface" = xnetwork; then
143     echo "" >> /etc/disorder/conf.debconf.new
144     echo "# Target address for RTP frames" >> /etc/disorder/conf.debconf.new
145     echo "broadcast $mcast_address $mcast_port" >> /etc/disorder/conf.debconf.new
146   fi
147
148   mv /etc/disorder/conf.debconf.new /etc/disorder/conf.debconf
149 }
150
151 case "$1" in
152 configure )
153   if grep -q ^jukebox: /etc/passwd; then
154     :
155   else
156     add_jukebox_user
157   fi
158   chown jukebox:jukebox /var/lib/disorder
159   configure_init_d
160   create_config
161   restart_server
162   fix_configuration
163   setup_guest
164   ;;
165 reconfigure )
166   create_config
167   ;;
168 abort-upgrade )
169   invoke-rc.d disorder restart
170   ;;
171 reconfigure )
172   invoke-rc.d disorder reload
173   ;;
174 esac
175
176 db_stop