chiark / gitweb /
Merge latest work from uniform audio branch. The only functional change
[disorder] / debian / postinst.disorder-server
CommitLineData
460b9539 1#! /bin/sh
2#
3# This file is part of DisOrder
1c934d2a 4# Copyright (C) 2004, 2007, 2008 Richard Kettlewell
460b9539 5#
e7eb3a27 6# This program is free software: you can redistribute it and/or modify
460b9539 7# it under the terms of the GNU General Public License as published by
e7eb3a27 8# the Free Software Foundation, either version 3 of the License, or
460b9539 9# (at your option) any later version.
10#
e7eb3a27
RK
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#
460b9539 16# You should have received a copy of the GNU General Public License
e7eb3a27 17# along with this program. If not, see <http://www.gnu.org/licenses/>.
460b9539 18#
19
20set -e
21
22. /usr/share/debconf/confmodule
23
24add_jukebox_user() {
25 adduser --quiet --system --group --shell /bin/sh --home /var/lib/disorder \
26 --no-create-home jukebox
ed4ad25d
RK
27 # If it happens that there's no audio group we don't fail; perhaps only
28 # network play was required.
f7fdb123 29 adduser jukebox audio || true
460b9539 30}
31
32configure_init_d() {
33 update-rc.d disorder defaults 92 19 > /dev/null
34}
35
36restart_server() {
cd94baee 37 invoke-rc.d disorder restart
f2c185d6
RK
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
43setup_guest() {
1c934d2a 44 echo "Checking whether guest user exists..." >&2
f2c185d6
RK
45 TMPFILE="$(mktemp -t)"
46 if disorder users > "$TMPFILE"; then
47 if grep -q '^guest$' "$TMPFILE"; then
1c934d2a 48 echo "Guest user has already been set up." >&2
f2c185d6 49 else
1c934d2a 50 echo "Attempting to set up guest user..." >&2
f2c185d6 51 if disorder setup-guest; then
1c934d2a 52 echo "Created guest user." >&2
f2c185d6 53 else
1c934d2a
RK
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
f2c185d6
RK
57 fi
58 fi
59 else
1c934d2a
RK
60 echo "Cannot determine whether guest user has been set up." >&2
61 echo >&2
f2c185d6
RK
62 fi
63 rm -f "$TMPFILE"
64}
65
66fix_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
1c934d2a 70 echo "Removing obsolete 'trust' directive from /etc/disorder/config" >&2
f2c185d6
RK
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
1c934d2a 78 echo "Removing obsolete 'allow' directive(s) from /etc/disorder/config.private" >&2
f2c185d6
RK
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
460b9539 88}
89
1c934d2a
RK
90# Create configuration from debconf answers
91create_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"
1c934d2a
RK
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
116EOF
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
1c934d2a
RK
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
460b9539 151case "$1" in
152configure )
153 if grep -q ^jukebox: /etc/passwd; then
154 :
155 else
156 add_jukebox_user
157 fi
460b9539 158 chown jukebox:jukebox /var/lib/disorder
159 configure_init_d
1c934d2a 160 create_config
460b9539 161 restart_server
f2c185d6
RK
162 fix_configuration
163 setup_guest
1c934d2a
RK
164 ;;
165reconfigure )
166 create_config
460b9539 167 ;;
168abort-upgrade )
cd94baee 169 invoke-rc.d disorder restart
460b9539 170 ;;
171reconfigure )
cd94baee 172 invoke-rc.d disorder reload
460b9539 173 ;;
174esac
1c934d2a
RK
175
176db_stop