|
1 #!@l_bash@ |
|
2 ## |
|
3 ## drupal-setup.sh -- Drupal RDBMS Setup Utility |
|
4 ## |
|
5 |
|
6 # command line argument sanity check |
|
7 prg="$0" |
|
8 if [ $# -eq 0 ]; then |
|
9 echo "$prg:ERROR: invalid command line" 1>&2 |
|
10 echo "$prg:USAGE: $prg install [<database-directory>]" 1>&2 |
|
11 echo "$prg:USAGE: $prg uninstall" 1>&2 |
|
12 echo "$prg:USAGE: $prg backup [<dump-file>]" 1>&2 |
|
13 echo "$prg:USAGE: $prg restore [<dump-file>|<dump-number>]" 1>&2 |
|
14 echo "$prg:USAGE: $prg edit" 1>&2 |
|
15 exit 1 |
|
16 fi |
|
17 |
|
18 # database configuration |
|
19 db_dir="@l_prefix@/var/drupal/db" |
|
20 db_dump="@l_prefix@/var/drupal/dump" |
|
21 db_type="@l_dbtype@" |
|
22 db_name="drupal" |
|
23 db_user="drupal" |
|
24 db_pass="drupal" |
|
25 |
|
26 # determine RDBMS-specific details |
|
27 if [ ".$db_type" = .mysql ]; then |
|
28 db_sname="mysql" |
|
29 db_suser=`grep "^user" @l_prefix@/etc/mysql/my.pwd |\ |
|
30 sed -e 's;^user[^=]*= *;;' -e 's; *$;;'` |
|
31 db_spass=`grep "^password" @l_prefix@/etc/mysql/my.pwd |\ |
|
32 sed -e 's;^password[^=]*= *;;' -e 's; *$;;'` |
|
33 elif [ ".$db_type" = .pgsql ]; then |
|
34 db_sname=`grep "^superuser_database" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
|
35 sed -e 's;^ *superuser_database="\(.*\)".*;\1;'` |
|
36 db_suser=`grep "^superuser_username" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
|
37 sed -e 's;^ *superuser_username="\(.*\)".*;\1;'` |
|
38 db_spass=`grep "^superuser_password" @l_prefix@/var/postgresql/db/pg_superuser.conf |\ |
|
39 sed -e 's;^ *superuser_password="\(.*\)".*;\1;'` |
|
40 fi |
|
41 |
|
42 # dispatch operation |
|
43 cmd="${1:-"install"}" |
|
44 shift |
|
45 case "$cmd" in |
|
46 install ) |
|
47 ## |
|
48 ## create the database |
|
49 ## |
|
50 |
|
51 if [ $# -gt 0 ]; then |
|
52 db_dir="$1" |
|
53 shift |
|
54 fi |
|
55 if [ ".$db_type" = .mysql ]; then |
|
56 # FIXME: MySQL 5.0 still doesn't allow easy relocation of tablespaces |
|
57 @l_prefix@/bin/mysqladmin --user="$db_suser" --password="$db_spass" create "$db_name" |
|
58 ( echo "GRANT ALL PRIVILEGES ON $db_name.* TO $db_user@localhost IDENTIFIED BY '$db_pass';" |
|
59 echo "FLUSH PRIVILEGES;" |
|
60 ) | @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" "$db_sname" |
|
61 elif [ ".$db_type" = .pgsql ]; then |
|
62 ( echo "CREATE ROLE $db_user LOGIN ENCRYPTED PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;" |
|
63 echo "CREATE TABLESPACE $db_name OWNER $db_user LOCATION '$db_dir';" |
|
64 echo "CREATE DATABASE $db_name OWNER $db_user TABLESPACE $db_name ENCODING 'UTF8' TEMPLATE template0;" |
|
65 ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- |
|
66 fi |
|
67 |
|
68 # activate configuration directory |
|
69 # (is automatically deactivated by installer afterwards) |
|
70 if [ ".$DRUPAL_SETUP_RESTORE" = . ]; then |
|
71 chmod 777 @l_prefix@/share/drupal/sites/default |
|
72 fi |
|
73 ;; |
|
74 |
|
75 uninstall ) |
|
76 ## |
|
77 ## remove the database |
|
78 ## |
|
79 |
|
80 if [ ".$db_type" = .mysql ]; then |
|
81 ( echo "DROP DATABASE $db_name;" |
|
82 ) | @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" "$db_sname" |
|
83 elif [ ".$db_type" = .pgsql ]; then |
|
84 ( echo "DROP DATABASE $db_name;" |
|
85 echo "DROP TABLESPACE $db_name;" |
|
86 echo "DROP ROLE $db_user;" |
|
87 ) | PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_sname" -f- |
|
88 fi |
|
89 |
|
90 # remove the generated configuration |
|
91 if [ ".$DRUPAL_SETUP_RESTORE" = . ]; then |
|
92 rm -f @l_prefix@/share/drupal/sites/default/settings.php |
|
93 fi |
|
94 ;; |
|
95 |
|
96 backup ) |
|
97 ## |
|
98 ## backup the database |
|
99 ## |
|
100 |
|
101 # determine dumpfile |
|
102 if [ $# -gt 0 ]; then |
|
103 # manually managed dumpfile |
|
104 dumpfile="$1" |
|
105 else |
|
106 # automatically managed (rotated) dumpfile |
|
107 rm -f $db_dump/drupal-dump-9.sql.gz >/dev/null 2>&1 || true |
|
108 i=8 |
|
109 while [ $i -ge 0 ]; do |
|
110 if [ -f $db_dump/drupal-dump-$i.sql.bz2 ]; then |
|
111 mv $db_dump/drupal-dump-$i.sql.bz2 $db_dump/drupal-dump-`expr $i + 1`.sql.bz2 |
|
112 fi |
|
113 i=`expr $i - 1` |
|
114 done |
|
115 dumpfile="$db_dump/drupal-dump-0.sql.bz2" |
|
116 fi |
|
117 |
|
118 # dump database content to dumpfile (compressed plain SQL format) |
|
119 umask 007 |
|
120 if [ ".$db_type" = .mysql ]; then |
|
121 @l_prefix@/bin/mysqldump --user="$db_suser" --password="$db_spass" "$db_name" | \ |
|
122 @l_prefix@/lib/openpkg/bzip2 -9 >$dumpfile |
|
123 elif [ ".$db_type" = .pgsql ]; then |
|
124 PGPASSWORD="$db_spass" @l_prefix@/bin/pg_dump -U "$db_suser" -S "$db_suser" "$db_name" | \ |
|
125 @l_prefix@/lib/openpkg/bzip2 -9 >$dumpfile |
|
126 fi |
|
127 chown @l_rusr@:@l_rgrp@ $dumpfile >/dev/null 2>&1 || true |
|
128 chmod 640 $dumpfile >/dev/null 2>&1 || true |
|
129 ;; |
|
130 |
|
131 restore ) |
|
132 ## |
|
133 ## restore the database |
|
134 ## |
|
135 |
|
136 # determine dumpfile |
|
137 if [ $# -gt 0 ]; then |
|
138 dumpfile="$1" |
|
139 else |
|
140 dumpfile="0" |
|
141 fi |
|
142 case "$dumpfile" in |
|
143 [0-9] ) dumpfile="$db_dump/drupal-dump-$dumpfile.sql.bz2" ;; |
|
144 esac |
|
145 if [ ! -f $dumpfile ]; then |
|
146 echo "drupal-setup:restore:ERROR: no such dump file: $dumpfile" 1>&2 |
|
147 exit 1 |
|
148 fi |
|
149 |
|
150 # optionally stop Drupal |
|
151 eval `@l_prefix@/bin/openpkg rc drupal status 2>/dev/null || true` |
|
152 if [ ".$drupal_active" = .yes ]; then |
|
153 @l_prefix@/bin/openpkg rc drupal stop >/dev/null 2>&1 || true |
|
154 fi |
|
155 |
|
156 # drop old and initialize new database |
|
157 DRUPAL_SETUP_RESTORE=1 |
|
158 export DRUPAL_SETUP_RESTORE |
|
159 $prg uninstall || exit $? |
|
160 $prg install || exit $? |
|
161 |
|
162 # restore database content from dumpfile (compressed plain SQL format) |
|
163 if [ ".$db_type" = .mysql ]; then |
|
164 @l_prefix@/lib/openpkg/bzip2 -d -c $dumpfile | \ |
|
165 @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" "$db_name" >/dev/null |
|
166 elif [ ".$db_type" = .pgsql ]; then |
|
167 @l_prefix@/lib/openpkg/bzip2 -d -c $dumpfile | \ |
|
168 PGPASSWORD="$db_spass" @l_prefix@/bin/psql -q -U "$db_suser" -d "$db_name" -f- >/dev/null |
|
169 fi |
|
170 |
|
171 # optionally restart Drupal |
|
172 if [ ".$drupal_active" = .yes ]; then |
|
173 @l_prefix@/bin/openpkg rc drupal start >/dev/null 2>&1 || true |
|
174 fi |
|
175 ;; |
|
176 |
|
177 edit ) |
|
178 ## |
|
179 ## interactively edit the database |
|
180 ## |
|
181 |
|
182 if [ ".$db_type" = .mysql ]; then |
|
183 @l_prefix@/bin/mysql --user="$db_suser" --password="$db_spass" "$db_name" |
|
184 elif [ ".$db_type" = .pgsql ]; then |
|
185 PGPASSWORD="$db_spass" @l_prefix@/bin/psql -U "$db_suser" -d "$db_name" |
|
186 fi |
|
187 ;; |
|
188 esac |
|
189 |