Tue, 28 Aug 2012 18:29:00 +0200
Massively update modules from Drupal 6.x to 7.x, and add diverse OpenID modules.
Unfortunately many modules available to Drupal 6.x installations have not been
since maintained or ported to 7.x causing this package to diminish in both size
and utility.
1 #!@l_bash@
2 ##
3 ## drupal-setup.sh -- Drupal RDBMS Setup Utility
4 ##
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
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"
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
42 # dispatch operation
43 cmd="${1:-"install"}"
44 shift
45 case "$cmd" in
46 install )
47 ##
48 ## create the database
49 ##
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
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 ;;
75 uninstall )
76 ##
77 ## remove the database
78 ##
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
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 ;;
96 backup )
97 ##
98 ## backup the database
99 ##
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
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 ;;
131 restore )
132 ##
133 ## restore the database
134 ##
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
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
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 $?
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
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 ;;
177 edit )
178 ##
179 ## interactively edit the database
180 ##
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