Bugzilla – Attachment 12451 Details for
Bug 459
No uninstall script
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Revised partially tested, but still a bit buggy non-patch file
Uninstall.sh (text/plain), 11.17 KB, created by
Mark Tompsett
on 2012-09-22 12:27:25 UTC
(
hide
)
Description:
Revised partially tested, but still a bit buggy non-patch file
Filename:
MIME Type:
Creator:
Mark Tompsett
Created:
2012-09-22 12:27:25 UTC
Size:
11.17 KB
patch
obsolete
>#!/bin/bash > ># There are three ways to install: ># - tarball ># - git ># - packages ># So we need to figure out what type, where it was installed, and what to uninstall. > > ># Don't run this as a koha user! >if [[ "$USER" =~ "koha" ]]; then > echo "Do not run this script as a koha user." > exit 1 >fi > ># So they shouldn't have to keep typing the sudo password. >echo "Please be prepared to type in your password." >CHKSUDO=`sudo dpkg -l | grep perl | wc -l` >RESULT=$? >if [[ "$RESULT" -ne "0" || "$CHKSUDO" -eq "0" ]]; then > echo "There is an unexplainable lack of sudo capability or perl. Aborting." > exit 1 >fi > ># using mktemp to generate a temporary file for our XML_READ helper script. >CHKMKTEMP=`which mktemp` >if [[ "${#CHKMKTEMP}" -eq "0" || ! -e $CHKMKTEMP ]]; then > echo "Unable to find mktemp. Aborting!" > exit 1 >fi > ># The script uses perl, so it better exist. >PERL=`which perl` >if [[ "${#PERL}" -eq "0" || ! -e $PERL ]]; then > echo "Unable to find perl. Aborting!" > exit 1 >fi > ># Okay, let's go looking for /etc/koha ># packages and tarball installations have it. >PKG_HARD=0 >GIT_HARD=0 >TARBALL_HARD=0 >PKG=0 >GIT=0 >TARBALL=0 >echo "Looking for /etc/koha. This is typically for package installations or tarball installations." >if [ -d /etc/koha ]; then > echo "Checking for the /etc/koha/sites directory. Package installations use this for each instance." > if [ -d /etc/koha/sites ]; then > CHKPKG=`ls /etc/koha/sites 2> /dev/null | wc -l` > if [ "$CHKPKG" -gt "0" ]; then > PKG_HARD=1 > if [ "$CHKPKG" -gt "1" ]; then > echo "You have more than once instance and are likely running a packages installation." > echo "Please use sudo koha-remove <instance> for each instance instead." > echo "And then sudo apt-get remove koha-common. Aborting!" > exit 1 > else > if [ "X$KOHA_CONF" == "X" ]; then > KOHA_CONF=`find /etc/koha/sites -name "koha-conf.xml"` > echo "\$KOHA_CONF set to $KOHA_CONF" > fi > fi > else > TARBALL_HARD=1 > if [ "X$KOHA_CONF" == "X" ]; then > KOHA_CONF=`find /etc/koha -name "koha-conf.xml"` > echo "\$KOHA_CONF set to $KOHA_CONF" > fi > fi > else > TARBALL_HARD=1 > if [ "X$KOHA_CONF" == "X" ]; then > KOHA_CONF=`find /etc/koha -name "koha-conf.xml"` > echo "\$KOHA_CONF set to $KOHA_CONF" > fi > fi >else > GIT_HARD=1 > if [ "X$KOHA_CONF" == "X" ]; then > CHKCOUNT=0 > while read CHKDIR; do > if [ -d $CHKDIR/.git ]; then > echo "Found a git directory." > else > CHKCOUNT=$(($CHKCOUNT + 1)) > fi > done < <(find ~ -name "koha-conf.xml" | cut -f1-4 -d"/" | sort -u) > if [ "$CHKCOUNT" -ne "1" ]; then > echo "I found $CHKCOUNT possible koha-conf.xml directories. Aborting!" > exit 1 > fi > while read CHKDIR; do > if [ ! -d $CHKDIR/.git ]; then > if [ "X$KOHA_CONF" == "X" ]; then > KOHA_CONF=`find $CHKDIR -name "koha-conf.xml"` > echo "\$KOHA_CONF set to $KOHA_CONF" > fi > fi > done < <(find ~ -name "koha-conf.xml" | cut -f1-4 -d"/" | sort -u) > fi >fi > ># MUST HAVE $KOHA_CONF DEFINED! >if [ "X$KOHA_CONF" == "X" ]; then > echo "\$KOHA_CONF is not defined. Unable to uninstall." > exit 1 >fi > ># The general installation is based on MySQL, if they don't have MySQL, we'll abort. >MYSQL=`which mysql 2> /dev/null` >MYSQLDUMP=`which mysqldump 2> /dev/null` > >if [[ "${#MYSQL}" -eq "0" || ! -e $MYSQL ]]; then > echo "MySQL is not in an expected location. Aborting!" > exit 1 >fi > >if [[ "${#MYSQLDUMP}" -eq "0" || ! -e $MYSQLDUMP ]]; then > echo "MySQL dump is not in an expected location. Aborting!" > exit 1 >fi > ># Create a nice temporary script to read our XML configuration file. >XML_READ=`mktemp` >echo "#!$PERL" >> $XML_READ >echo >> $XML_READ >echo "use XML::LibXML;" >> $XML_READ >echo >> $XML_READ >echo "my (\$parse," >> $XML_READ >echo " \$xmldoc," >> $XML_READ >echo " \$sample," >> $XML_READ >echo " );" >> $XML_READ >echo >> $XML_READ >echo "\$parse = XML::LibXML->new();" >> $XML_READ >echo "\$xmldoc = \$parse->parse_file(\"$KOHA_CONF\");" >> $XML_READ >echo "for \$sample (\$xmldoc->findnodes(\"\$ARGV[0]\")) {" >> $XML_READ >echo " print \$sample->textContent();" >> $XML_READ >echo "}" >> $XML_READ >chmod 755 $XML_READ > ># Where is the install log? >INSTALL_LOG=`sudo $XML_READ yazgfs/config/install_log` > ># Grab the database user name >DB_USER=`sudo $XML_READ yazgfs/config/user` > ># Grab the database password >DB_PASS=`sudo $XML_READ yazgfs/config/pass` > ># So where are the biblio and authories config files for Zebra? >BIBZEBIDX=`sudo $XML_READ yazgfs/server/config | sort -u | grep bib` >AUTHZEBIDX=`sudo $XML_READ yazgfs/server/config | sort -u | grep auth` > ># Are we running packages? >PKG=`sudo dpkg -l | grep koha-common | wc -l` > ># Are we running git/dev? the INTRANETDIR will have a .git subdirectory. ># Determine the INTRANETDIR. >INTRANETDIR=`sudo $XML_READ yazgfs/config/intranetdir` > ># Is there a .git subdirectory? >sudo ls $INTRANETDIR/.git &> /dev/null >RESULT=$? >if [ "$RESULT" -eq "0" ]; then > GIT=1 >else > GIT=0 >fi > ># If it isn't packages or git, it is likely a tarball. >if [[ "$PKG" -eq "0" && "$GIT" -eq "0" ]]; then > TARBALL=1 >else > TARBALL=0 >fi > ># No sense keeping it if we aren't using it now. >rm $XML_READ > ># We should only try uninstalling if we know there is one kind of installation. ># so let's do some sanity checks. >SANITY=$(($PKG + $GIT + $TARBALL)) >if [ "$SANITY" -ne "1" ]; then > echo "Unable to determine what kind of installation you have. Aborting." > exit 1 >fi > >SANITY=$(($PKG_HARD + $GIT_HARD + $TARBALL_HARD)) >if [ "$SANITY" -ne "1" ]; then > echo "Unable to determine what kind of installation you have. Aborting." > exit 1 >fi > >if [[ "$PKG" -ne "$PKG_HARD" || "$TARBALL" -ne "$TARBALL_HARD" || "$GIT" -ne "$GIT_HARD" ]]; then > echo "Unable to determine what kind of installation you have. Aborting." > exit 1 >fi > ># Tell the user what kind of installation they have. >if [ "$PKG" -eq "1" ]; then > echo "You likely have a packages installation." >elif [ "$GIT" -eq "1" ]; then > echo "You likely have a git installation." >else > echo "You likely have a tarball installation." >fi > ># Check if there are koha databases. >LOGIN="--user=$DB_USER --password=$DB_PASS" >CHKDBS=`$MYSQL -B -N -e "show databases;" $LOGIN | grep koha | wc -l` >if [ "$CHKDBS" -eq "0" ]; then > echo "Unable to find koha related databases. Aborting!" > exit 1 >fi > ># Dump backups of the instances/database. >echo "We will dump copies of the database(s), in case you make a mistake." >while read DB2dump; do > $MYSQLDUMP $LOGIN --databases $DB2dump > ~/${DB2dump}.sql > RESULT=$? > if [ "$RESULT" -ne "0" ]; then > rm ~/${DB2dump}.sql > echo "Problem dumping ~/${DB2dump}.sql" > else > echo "Dumped ~/${DB2dump}.sql" > fi >done < <($MYSQL -B -N -e "show databases;" $LOGIN | grep koha) > ># Prompt for confirmation TWICE. >echo >echo -n "Directories and files will be irrecoverably deleted. Are you sure (y/n)? " >FLAG=0 >while [ "$FLAG" -eq "0" ]; do > read ANSWER > if [[ "${ANSWER:0:1}" =~ [yYnN] ]]; then > FLAG=1 > else > echo "Please type 'y' or 'n' followed by enter/return" > fi >done > >if [[ "$ANSWER" =~ [nN] ]]; then > echo "Aborting!" > exit 1 >else > echo -n "There is no turning back. Are you sure (y/n)? " >fi > >FLAG=0 >while [ "$FLAG" -eq "0" ]; do > read ANSWER > if [[ "${ANSWER:0:1}" =~ [yYnN] ]]; then > FLAG=1 > else > echo "Please type 'y' or 'n' followed by enter/return" > fi >done > >if [[ "$ANSWER" =~ [nN] ]]; then > echo "Aborting!" > exit 1 >else > echo "Processing will continue." >fi > >if [ ! -d /etc/apache2/sites-enabled ]; then > echo "Apache2 sites-enabled is not configured as expected. Aborting!" > exit 1 >fi > >if [ ! -d /etc/apache2/sites-available ]; then > echo "Apache2 sites-available is not configured as expected. Aborting!" > exit 1 >fi > >DAEMONCOUNT=`ls /etc/init.d/*koha* 2> /dev/null | wc -l` >if [ "$DAEMONCOUNT" -eq "0" ]; then > echo "Missing expected Zebra daemon files. Aborting!" > exit 1 >fi > >if [ "${#BIBZEBIDX}" -eq "0" ]; then > echo "Unable to find zebra biblio indexing configuration files. Aborting!" > exit 1 >fi > >if [ "${#AUTHZEBIDX}" -eq "0" ]; then > echo "Unable to find zebra authorities indexing configuration files. Aborting!" > exit 1 >fi > >CHKCROND=`sudo ls /etc/cron.d/*koha* 2> /dev/null | wc -l` >if [ "$CHKCROND" -eq "0" ]; then > echo "Unable to find koha crontab files. Aborting!" > exit 1 >fi > >CHKDIRS=`grep koha $INSTALL_LOG | cut -f2 -d'=' | cut -f1-4 -d'/' | grep ^\/ | sort -u | wc -l` >if [ "$CHKDIRS" -eq "0" ]; then > echo "Unable to determine typical directories to delete. Aborting!" > exit 1 >fi > ># For packages, we better remove instances. >if [ "$PKG" -eq "1" ]; then > echo "koha instances being removed..." > while read INSTANCE; do > echo "Removing $INSTANCE" > sudo koha-remove $INSTANCE &> /dev/null > done < <(koha-list) > sudo apt-get -y remove koha-common &> /dev/null >fi > ># This shouldn't hurt for packages now, since it should all be blanked. ># and if it isn't, then it probably needs help. ;) > ># First we'll handle apache. >echo "Disabling and removing koha apache site(s)." >while read SITE2DIS; do > sudo a2dissite `basename $SITE2DIS` &> /dev/null > sudo rm /etc/apache2/sites-available/`basename $SITE2DIS` &> /dev/null >done < <(sudo grep -l koha /etc/apache2/sites-enabled/*) >echo "Restarting apache2." >sudo /etc/init.d/apache2 restart &> /dev/null > ># Next we'll work on the koha-zebra-daemon. >echo "Removing koha-zebra-daemon." >while read DAEMON; do > sudo $DAEMON stop > sudo update-rc.d `basename $DAEMON` remove > sudo rm $DAEMON >done < <(ls /etc/init.d/*koha* 2> /dev/null) > ># Next we'll drop the database >echo "koha databases being removed..." >while read DB2dump; do > mysql $LOGIN -e "drop database $DB2dump;" &> /dev/null > RESULT=$? > if [ "$RESULT" -ne "0" ]; then > echo "Problem dropping ${DB2dump}" > else > echo "Dropped ${DB2dump}" > fi >done < <($MYSQL -B -N -e "show databases;" $LOGIN 2> /dev/null | grep koha) > ># Cleaning up the Zebra Indexes >echo "Cleaning up the Zebra Indexes" >echo "Biblios..." >sudo zebraidx -c $BIBZEBIDX -g iso2709 -d biblios init &> /dev/null >echo "Authorities..." >sudo zebraidx -c $AUTHZEBIDX -g iso2709 -d authorities init &> /dev/null > ># remove the crontab job >echo "Removing Crontab jobs..." >sudo rm `ls /etc/cron.d/*koha*` &> /dev/null > ># a whole bunch of installation directories. >echo "Directories being deleted." >while read DIR2DEL; do > echo "$DIR2DEL being deleted..." > sudo rm -rf $DIR2DEL &> /dev/null >done < <(grep koha $INSTALL_LOG 2> /dev/null | cut -f2 -d'=' | cut -f1-4 -d'/' | grep ^\/ | sort -u) > ># attempting to delete koha users >echo -n "Removing koha users" >while read KOHAUSER; do > echo "Removing $KOHAUSER" > sudo deluser $KOHAUSER &> /dev/null >done < <(sudo cat /etc/passwd | cut -f1 -d: | grep koha) > >echo "Uninstall complete."
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 459
:
12435
|
12451
|
12606