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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
|
#!/bin/sh -e
init_error ()
{
exit 1
}
# Source debconf library
. /usr/share/debconf/confmodule
DEBUG=false
db_get mldonkey-server/launch_at_startup
launch_at_startup="$RET"
case "$1" in
configure)
CONF=/etc/default/mldonkey-server
if [ "$launch_at_startup" = "true" ]; then
###########################
# Handling debconf values #
###########################
mldonkey_umask=0022
umask $mldonkey_umask
db_get mldonkey-server/run_as_user
run_as_user=$RET
db_get mldonkey-server/mldonkey_group
mldonkey_group=$RET
db_get mldonkey-server/mldonkey_dir
new_mldonkey_dir="$RET"
db_get mldonkey-server/mldonkey_niceness
mldonkey_niceness="$RET"
client_name=`/bin/hostname`
enable_directconnect=false
enable_opennap=false
enable_overnet=false
enable_soulseek=false
enable_bittorrent=false
enable_gnutella=false
enable_fasttrack=false
OLD_IFS=$IFS
IFS=", "
for i in $RET; do
case $i in
Directconnect*)
enable_directconnect=true
;;
Opennap*)
enable_opennap=true
;;
Overnet*)
enable_overnet=true
;;
Soulseek*)
enable_soulseek=true
;;
Bittorrent*)
enable_bittorrent=true
;;
Gnutella*)
enable_gnutella=true
;;
Fasttrack*)
enable_fasttrack=true
;;
esac
done
IFS=$OLD_IFS
db_get mldonkey-server/max_hard_upload_rate
max_hard_upload_rate="$RET"
db_get mldonkey-server/max_hard_download_rate
max_hard_download_rate="$RET"
db_get mldonkey-server/password
password="$RET"
db_get mldonkey-server/max_alive
max_alive="$RET"
###################
# User management #
###################
# Creating MLDonkey group if he isn't already there
if ! getent group $mldonkey_group > /dev/null ; then
$DEBUG && echo -n "Creating mldonkey group: "
addgroup --system --quiet $mldonkey_group
$DEBUG && echo "done."
fi
# Creating MLDonkey user if he isn't already there
if ! getent passwd $run_as_user > /dev/null ; then
$DEBUG && echo -n "Creating mldonkey user: "
adduser --quiet --system --ingroup $mldonkey_group \
--home "$new_mldonkey_dir" --no-create-home $run_as_user
$DEBUG && echo "done."
fi
run_as_useruid=`/usr/bin/id -u $run_as_user`
if [ ! -d $new_mldonkey_dir ]; then
$DEBUG && echo -n "Creating mldonkey home directory: "
mkdir "$new_mldonkey_dir"
$DEBUG && echo "done."
fi
#########################
# Relocation management #
#########################
if [ -e "$CONF" ]; then
. "$CONF"
if [ -n "$MLDONKEY_DIR" ] && [ -f "$MLDONKEY_DIR/downloads.ini" ]; then
db_get mldonkey-server/reown_file
if [ "$RET" = "true" ] && ! dpkg-statoverride --list "$MLDONKEY_DIR" >/dev/null; then
$DEBUG && echo -n "Reowning file of $MLDONKEY_DIR: "
# BUG: should not use chown, should use dpkg-statoverride itself, but the owner is not always
# the same. If i use the method suggested in the Debian Policy 10.9.1, i need to dynamically
# create a user, but this user should never be changed. The DP method will inject a new rules
# in dpkg-statoverride which will made the above test always false for any further
# upgrade/configure. With my method, only the user can set dpkg-statoverride rules to stop the
# reowning of a file... However i am not sure this is the best method to do so.
/bin/chown -R $run_as_user:$mldonkey_group "$MLDONKEY_DIR"
$DEBUG && echo "done."
fi
db_get mldonkey-server/mldonkey_move
if [ "$RET" = "true" ] && [ "$new_mldonkey_dir" != "$MLDONKEY_DIR" ]; then
$DEBUG && echo -n "Moving file of $MLDONKEY_DIR to $new_mldonkey_dir: "
/bin/mv "--target-directory=$new_mldonkey_dir" "$MLDONKEY_DIR/*"
$DEBUG && echo "done."
fi
fi
fi
#################
# Downloads.ini #
#################
if [ -e "$new_mldonkey_dir/downloads.ini" ]; then
$DEBUG && echo -n "Creating backup of $new_mldonkey_dir/downloads.ini: "
/bin/cp -p -f "$new_mldonkey_dir/downloads.ini" "$new_mldonkey_dir/downloads.ini.dpkg"
$DEBUG && echo "done."
else
$DEBUG && echo -n "Creating empty $new_mldonkey_dir/downloads.ini: "
/bin/touch "$new_mldonkey_dir/downloads.ini"
$DEBUG && echo "done."
fi
$DEBUG && echo -n "Writing new values to $new_mldonkey_dir/downloads.ini: "
/usr/bin/mldonkey_options -f "$new_mldonkey_dir/downloads.ini" <<EOF
run_as_useruid=$run_as_useruid
run_as_user="$run_as_user"
client_name="$client_name"
enable_directconnect=$enable_directconnect
enable_opennap=$enable_opennap
enable_overnet=$enable_overnet
enable_soulseek=$enable_soulseek
enable_bittorrent=$enable_bittorrent
enable_gnutella=$enable_gnutella
enable_fasttrack=$enable_fasttrack
max_hard_upload_rate=$max_hard_upload_rate
max_hard_download_rate=$max_hard_download_rate
EOF
$DEBUG && echo "done."
#############
# Files.ini #
#############
# Handling fasttrack file split here, better than in the mldonkey-server.init
if [ -e "$new_mldonkey_dir/files.ini" ] \
&& [ ! -e "$new_mldonkey_dir/files.ini.fasttrack" ] \
&& /usr/bin/mldonkey_files --test Fasttrack -q -f0 "$new_mldonkey_dir/files.ini"; then
echo "Correction of the Fasttrack problem (see /usr/share/doc/mldonkey-server/README.Debian)"
echo -n "Splitting $new_mldonkey_dir/files.ini (backup in $new_mldonkey_dir/files.ini.fasttrack): "
/usr/bin/mldonkey_files --split Fasttrack -f0 "$new_mldonkey_dir/files.ini" \
-f1 "$new_mldonkey_dir/files.ini.fasttrack" \
-f2 "$new_mldonkey_dir/files.ini"
echo "done."
fi
#############
# Users.ini #
#############
if [ -e "$new_mldonkey_dir/downloads.ini" ] && \
/usr/bin/mldonkey_users --test-users-section -q -f "$new_mldonkey_dir/downloads.ini"; then
if [ -e "$new_mldonkey_dir/users.ini" ]; then
echo "File $new_mldonkey_dir/users.ini exists and $new_mldonkey_dir/downloads.ini contains a \"users\" section, this is inconstitent."
echo "Please user mldonkey_users(1) to strip the \"users\" section of $new_mldonkey_dir/downloads.ini."
else
# OK we have downloads.ini containing a "users" section, this is pre 2.5.28.1
# configuration, lets split it...
$DEBUG && echo -n "Transferring \"users\" section from file $new_mldonkey_dir/downloads.ini to $new_mldonkey_dir/users.ini: "
/usr/bin/mldonkey_users --dump-users-section -q -f "$new_mldonkey_dir/downloads.ini" > "$new_mldonkey_dir/users.ini"
/usr/bin/mldonkey_users --strip-users-section -q -f "$new_mldonkey_dir/downloads.ini" > "$new_mldonkey_dir/downloads.ini.tmp"
mv -f "$new_mldonkey_dir/downloads.ini.tmp" "$new_mldonkey_dir/downloads.ini"
$DEBUG && echo "done."
fi
fi
if [ -n "$password" ]; then
if [ -e "$new_mldonkey_dir/users.ini" ]; then
$DEBUG && echo -n "Creating backup of $new_mldonkey_dir/users.ini: "
/bin/cp -p -f "$new_mldonkey_dir/users.ini" "$new_mldonkey_dir/users.ini.dpkg"
$DEBUG && echo "done."
else
$DEBUG && echo -n "Creating empty $new_mldonkey_dir/users.ini: "
/bin/touch "$new_mldonkey_dir/users.ini"
$DEBUG && echo "done."
fi
$DEBUG && echo -n "Registering admin password in $new_mldonkey_dir/users.ini: "
/usr/bin/mldonkey_users --add admin -q -f "$new_mldonkey_dir/users.ini" -p $password
$DEBUG && echo "done."
fi
####################
# Files permission #
####################
for file in \
"$new_mldonkey_dir" \
"/var/run/mldonkey" \
"/var/log/mldonkey" \
"$new_mldonkey_dir/downloads.ini" \
"$new_mldonkey_dir/downloads.ini.dpkg" \
"$new_mldonkey_dir/downloads.ini.old" \
"$new_mldonkey_dir/downloads.ini.tmp" \
"$new_mldonkey_dir/files.ini" \
"$new_mldonkey_dir/files.ini.fasttrack"; do
$DEBUG && echo -n "Changing owner and file permission of $file: "
if ! dpkg-statoverride --list "$file" >/dev/null; then
# BUG: cf dpkg-statoverride above
if [ -e "$file" ]; then
/bin/chown $run_as_user:$mldonkey_group $file
$DEBUG && echo "done."
else
$DEBUG && echo "$file doesn't exist."
fi
else
$DEBUG && echo "$file is listed in dpkg-statoverride."
fi
done
for file in \
"$new_mldonkey_dir/users.ini" \
"$new_mldonkey_dir/users.ini.dpkg" \
"$new_mldonkey_dir/users.ini.old" \
"$new_mldonkey_dir/users.ini.tmp"; do
$DEBUG && echo -n "Changing owner and file permission of $file: "
if ! dpkg-statoverride --list "$file" >/dev/null; then
# BUG: cf dpkg-statoverride above
if [ -e "$file" ]; then
/bin/chown $run_as_user:$mldonkey_group "$file"
/bin/chmod 0600 "$file"
$DEBUG && echo "done."
else
$DEBUG && echo "$file doesn't exist."
fi
else
$DEBUG && echo "$file is listed in dpkg-statoverride."
fi
done
fi
################################
# /etc/default/mldonkey-server #
################################
CONF_NEW=`/bin/tempfile`
$DEBUG && echo -n "Writing new values to $CONF_NEW: "
cat > "$CONF_NEW" <<EOF
# MLDonkey configuration
# This file is loaded by /etc/init.d/mldonkey-server
# This file is managed using ucf(1)
MLDONKEY_DIR=$new_mldonkey_dir
MLDONKEY_USER=$run_as_user
MLDONKEY_GROUP=$mldonkey_group
MLDONKEY_UMASK=$mldonkey_umask
MAX_ALIVE=$max_alive
LAUNCH_AT_STARTUP=$launch_at_startup
MLDONKEY_NICENESS=$mldonkey_niceness
EOF
ucf "$CONF_NEW" "$CONF"
$DEBUG && echo "done."
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
db_stop
# For the rest
#DEBHELPER#
|