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
|
# -*- mode: sh -*-
###
### some global variables etc
###
dbc_go(){
local need_admin_pw dumpfile nowtime rmscript rmsql purgescript purgesql tsubstfile
. /usr/share/dbconfig-common/dpkg/common
_dbc_debug "(prerm) dbc_go() $@"
## With dbconfig-no-thanks installed we don't need to do anything.
if dbc_no_thanks ; then
return 0
fi
dbc_config "$@" || return $?
###
### get all the settings we need
###
dbc_read_package_config || return $?
# and re-run config for db-specific settings
dbc_set_dbtype_defaults $dbc_dbtype || return $?
if echo "$dbc_authenticated_dbtypes" | grep -q "$dbc_dbtype"; then
if [ "$dbc_dbtype" = "pgsql" ] && \
[ "$dbc_authmethod_admin" = "ident" ];
then
need_admin_pw=""
else
need_admin_pw="yup"
# Note: dpkg/config has the same code
if [ "$dbc_dbtype" = mysql ] && _dbc_mysql_get_debian_sys_maint ; then
db_set $dbc_package/$dbc_dbtype/admin-user "$dbc_dbadmin"
db_fset $dbc_package/$dbc_dbtype/admin-user seen true
db_set $dbc_package/$dbc_dbtype/admin-pass "$dbc_dbadmpass"
db_fset $dbc_package/$dbc_dbtype/admin-pass seen true
fi
fi
else
need_admin_pw=""
fi
if [ "$dbc_command" = "remove" ] && [ ! "$dbc_frontend" ]; then
###
### if they didn't want our help installing, we should assume
### they don't want our help removing either
###
if [ "$dbc_install" != "true" ]; then return 0; fi
###
### ask the admin if we should help with removal
### but only if they didn't see the question before
### or if we are here after an error
###
if [ "$dbc_remove" ]; then
db_set $dbc_package/dbconfig-remove "$dbc_remove"
fi
db_input $dbc_prio_high $dbc_package/dbconfig-remove || true
db_go || true
db_get $dbc_package/dbconfig-remove && dbc_remove="$RET"
if [ "$dbc_remove" != "true" ]; then
return 0;
fi
###
### package removal hooks
###
rmscript=/usr/share/dbconfig-common/scripts/$dbc_package/remove/$dbc_dbtype
rmsql=/usr/share/dbconfig-common/data/$dbc_package/remove/$dbc_dbtype
# run the script if it exists
if [ -f "$rmscript" ]; then
# get the admin user password; required by documentation
if [ "$need_admin_pw" ]; then
dbc_get_admin_pass || return $?
fi
dbc_logpart "running maintainer removal script hook... "
if ! sh -c "$rmscript $*"; then
dbc_error="$rmscript exited with non-zero status"
dbc_remove_error "running maintainer removal hook" || return $?
[ "$dbc_tried_again" ] && return 0
fi
dbc_logline "done"
fi
# run the sql if it exists
if [ -f "$rmsql" ]; then
# get the admin user password; required by documentation
if [ "$need_admin_pw" ]; then
dbc_get_admin_pass || return $?
fi
dbc_logpart "running maintainer removal sql hook... "
if [ ! "$dbc_sql_substitutions" ]; then
$dbc_sqlfile_cmd $rmsql || \
dbc_remove_error "running maintainer removal sql hook" || \
return $?
[ "$dbc_tried_again" ] && return 0
else
tsubstfile=$(dbc_mktemp)
/usr/sbin/dbconfig-generate-include -f template -o template_infile=$rmsql $dbc_packageconfig > $tsubstfile
$dbc_sqlfile_cmd $tsubstfile || \
dbc_remove_error "running maintainer removal sql hook" || \
return $?
rm -f $tsubstfile
[ "$dbc_tried_again" ] && return 0
fi
dbc_logline "done"
fi
###
### ask the admin if the database should be purged
### but only if they didn't see the question before
### or if we are here after an error
###
db_input $dbc_prio_high $dbc_package/purge || true
db_go || true
db_get $dbc_package/purge
dbc_purge="$RET"
if [ "$dbc_purge" = "true" ]; then
# get the admin user password
if [ "$need_admin_pw" ]; then
dbc_get_admin_pass || return $?
fi
# dump the database into a temporary file
# Note: nearly equal logic exists in postinst; probably
# should stay in sync
nowtime=$(date +%Y-%m-%d-%H.%M)
if [ ! $(dirname /var/tmp/$dbc_package) = /var/tmp ]; then
mkdir -p $(dirname /var/tmp/$dbc_package)
fi
dumpfile=$(mktemp /var/tmp/$dbc_package.$dbc_dbname.$nowtime.$dbc_dbtype.XXXXXX)
if [ ! -f $dumpfile ]; then
dbc_remove_error "creating temporary file for database dump" || \
return $?
[ "$dbc_tried_again" ] && return 0
fi
dbc_logline "dbconfig-common: dumping $dbc_dbtype database $dbc_dbname to $dumpfile"
$dbc_dump_cmd $dumpfile || dbc_remove_error "dumping database" || \
return $?
[ "$dbc_tried_again" ] && return 0
dbc_logline "dbconfig-common: dropping $dbc_dbtype database $dbc_dbname"
$dbc_dropdb_cmd || dbc_remove_error "dropping database" || return $?
[ "$dbc_tried_again" ] && return 0
dbc_logline "dbconfig-common: revoking privileges for user $dbc_dbuser on $dbc_dbname"
$dbc_dropuser_cmd
fi
fi
}
|