Bug 25464: Adjust occurrence in debian/koha-core.postinst
[koha.git] / debian / scripts / koha-dump
1 #!/bin/sh
2 #
3 # koha-dump: dump all contents and configs for a Koha site
4 # Copyright 2010  Catalyst IT, Ltd
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 # include helper functions
23 if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
24     . "/usr/share/koha/bin/koha-functions.sh"
25 else
26     echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
27     exit 1
28 fi
29
30 # Make sure the files we create are not accessible by anyone else.
31 umask 0077
32
33 usage()
34 {
35     local scriptname=$(basename $0)
36
37     cat <<EOF
38 $scriptname
39
40 This script dumps your Koha instance data for backup or migration.
41
42 The schema only option can be used to compare your existing database schema
43 to the expected Koha structure.
44
45 Usage:
46 $scriptname [--quiet|-q] [--exclude-indexes] instancename1 [instancename2...]
47 $scriptname -h|--help
48
49     --schema-only         Dump only the database schema
50     --exclude-indexes     Include Zebra indexes on the backup
51     --quiet|-q            Make the script avoid printing to STDOUT
52                           (useful for calling from another scripts)
53     --help|-h             Display this help message
54     --without-db-name     Do not include database name
55
56 EOF
57 }
58
59 dump_instance()
60 {
61     local name=$1
62
63     kohaconfig="/etc/koha/sites/$name/koha-conf.xml"
64     date="$(date +%Y-%m-%d)"
65
66     [ "$quiet" = "no" ] && echo "Dumping Koha site $name:"
67
68     # Dump database.
69     mysqlhost="$( xmlstarlet sel -t -v 'yazgfs/config/hostname' $kohaconfig )"
70     mysqldb="$( xmlstarlet sel -t -v 'yazgfs/config/database' $kohaconfig )"
71     mysqluser="$( xmlstarlet sel -t -v 'yazgfs/config/user' $kohaconfig )"
72     mysqlpass="$( xmlstarlet sel -t -v 'yazgfs/config/pass' $kohaconfig )"
73     backupdir="$( xmlstarlet sel -t -v 'yazgfs/config/backupdir' $kohaconfig || true )"
74     [ -z "$backupdir" ] && backupdir="/var/spool/koha/$name"
75     dbdump="$backupdir/$name-$date.sql.gz"
76     [ "$without_db_name" = "yes" ] && dbflag=""
77     if [ "$schema_only" = "yes" ]
78     then
79         schemadump="$backupdir/$name-schema-$date.sql"
80         [ "$quiet" = "no" ] && echo "* schema to $schemadump"
81         mysqldump $dbflag -d --host="$mysqlhost" \
82             --user="$mysqluser" --password="$mysqlpass" "$mysqldb" | sed --expression='s/ AUTO_INCREMENT=[0-9]\+//' > "$schemadump"
83         chown "root:$name-koha" "$schemadump"
84         chmod g+r "$schemadump"
85     else
86         [ "$quiet" = "no" ] && echo "* DB to $dbdump"
87         mysqldump $dbflag --host="$mysqlhost" \
88             --user="$mysqluser" --password="$mysqlpass" "$mysqldb" |
89             gzip > "$dbdump"
90         chown "root:$name-koha" "$dbdump"
91         chmod g+r "$dbdump"
92
93         instancefile="$name.conf"
94
95         # Dump configs, logs, etc.
96         metadump="$backupdir/$name-$date.tar.gz"
97         [ "$quiet" = "no" ] && echo "* configs, logs to $metadump"
98
99         if [ "$exclude_indexes" = "yes" ]; then
100             excludes="--exclude=var/lib/koha/$name/biblios \
101                       --exclude=var/lib/koha/$name/authorities"
102         fi
103
104         tar -czf "$metadump" -C / $excludes \
105             "etc/koha/sites/$name" \
106             "etc/apache2/sites-available/$instancefile" \
107             "etc/apache2/sites-enabled/$instancefile" \
108             "var/lib/koha/$name" \
109             "var/log/koha/$name"
110
111         chown "root:$name-koha" "$metadump"
112         chmod g+r "$metadump"
113
114         [ "$quiet" = "no" ] && echo "Done."
115
116     fi
117 }
118
119 # Default values
120 quiet="no"
121 exclude_indexes="no"
122 without_db_name="no"
123 schema_only="no"
124
125 while [ $# -gt 0 ]; do
126
127     case "$1" in
128         --schema-only)
129             schema_only="yes"
130             shift ;;
131         --exclude-indexes)
132             exclude_indexes="yes"
133             shift ;;
134         --without-db-name)
135             without_db_name="yes"
136             shift ;;
137         -h|--help)
138             usage ; exit 0 ;;
139         -q|--quiet)
140             quiet="yes"
141             shift ;;
142         -*)
143             die "Error: invalid option switch ($1)" ;;
144         *)
145             # We expect the remaining stuff are the instance names
146             break ;;
147     esac
148
149 done
150
151 # Read instance names
152 if [ $# -gt 0 ]; then
153     # We have at least one instance name
154     for name in "$@"; do
155
156         if is_instance $name; then
157
158             dump_instance $name
159
160         else
161             if [ "$quiet" = "no" ]; then
162                 die "Error: Invalid instance name $name"
163             else
164                 exit 1
165             fi
166         fi
167
168     done
169 else
170     if [ "$quiet" = "no" ]; then
171         die "Error: you must provide at least one instance name"
172     else
173         exit 1
174     fi
175 fi
176
177 exit 0