drin.rst: change title of NOTES section to reflect it's about the database
[drupal-init-tools.git] / libexec / bootstrap.sh
index 8b92f97..1f3b160 100755 (executable)
@@ -26,7 +26,8 @@ Bootstrap a Drupal project, using settings from a 'bootstrap.conf' file.
 
 Options:
   --devel              install drupal/devel and use a settings.local.php file
 
 Options:
   --devel              install drupal/devel and use a settings.local.php file
-  --overwrite-profile  allow overwriting the current installation profile
+  --overwrite-profile  allow overwriting the installation profile of the site
+                       with a profile copied from the current working directory
   -h, --help           display this usage message and exit
 
 EOF
   -h, --help           display this usage message and exit
 
 EOF
@@ -75,12 +76,36 @@ declare -p WEB_SERVER_GROUP
 
 [ "x$INSTALLATION_PROFILE" = "x" ] && { echo "INSTALLATION_PROFILE not specified, using the \"standard\" profile!"; INSTALLATION_PROFILE="standard"; }
 
 
 [ "x$INSTALLATION_PROFILE" = "x" ] && { echo "INSTALLATION_PROFILE not specified, using the \"standard\" profile!"; INSTALLATION_PROFILE="standard"; }
 
-if [ "x$MYSQL_ROOT_PASSWORD" = "x" ];
+if [ "$MYSQL_PASSWORDLESS_ACCESS" = true ];
 then
 then
-  read -r -s -p "MySQL root password: " MYSQL_ROOT_PASSWORD
-  echo
+  MYSQL_SU_USER="${USER}"
+else
+  # XXX Deprecate MYSQL_ROOT_PASSWORD, it will be removed eventually,
+  # but for now add some backwards compatibility mapping.
+  if [ "x$MYSQL_ROOT_PASSWORD" != "x" ];
+  then
+    echo "WARN: MYSQL_ROOT_PASSWORD is deprecated, use MYSQL_SU_USER and MYSQL_SU_PASSWORD" 1>&2
+    MYSQL_SU_USER="root"
+    MYSQL_SU_PASSWORD="$MYSQL_ROOT_PASSWORD"
+  fi
+
+  if [ "x$MYSQL_SU_USER" = "x" ];
+  then
+    echo "Aborting, for password regulated access specify MYSQL_SU_USER in bootstrap.conf" 1>&2
+    exit 1
+  fi
+
+  if [ "x$MYSQL_SU_PASSWORD" = "x" ];
+  then
+    read -r -s -p "MySQL password for \"${MYSQL_SU_USER}\": " MYSQL_SU_PASSWORD
+    echo
+  fi
+
+  DRUSH_DB_SU_CREDENTIALS=(--db-su-pw'='"${MYSQL_SU_PASSWORD}")
 fi
 
 fi
 
+DRUSH_DB_SU_CREDENTIALS+=(--db-su'='"${MYSQL_SU_USER}")
+
 WEB_ROOT="${PWD}/web"
 
 command -v composer &> /dev/null || { echo "Aborting, 'composer' not available." 1>&2; exit 1; }
 WEB_ROOT="${PWD}/web"
 
 command -v composer &> /dev/null || { echo "Aborting, 'composer' not available." 1>&2; exit 1; }
@@ -94,8 +119,8 @@ DRUPAL_CONSOLE="${PWD}/vendor/bin/drupal"
 [ -x "$DRUSH" ] || { echo "Aborting, '$DRUSH' not available." 1>&2; exit 1; }
 [ -x "$DRUPAL_CONSOLE" ] || { echo "Aborting, '$DRUPAL_CONSOLE' not available." 1>&2; exit 1; }
 
 [ -x "$DRUSH" ] || { echo "Aborting, '$DRUSH' not available." 1>&2; exit 1; }
 [ -x "$DRUPAL_CONSOLE" ] || { echo "Aborting, '$DRUPAL_CONSOLE' not available." 1>&2; exit 1; }
 
-# This becomes unnecessary if the installation profile gets pulled in by
-# composer.json, like suggested in
+# The following becomes unnecessary if the installation profile gets pulled in
+# by composer.json, like suggested in
 # https://github.com/drupal-composer/drupal-project/issues/249
 if ! echo "$INSTALLATION_PROFILE" | grep -q -E "^(minimal|standard)$";
 then
 # https://github.com/drupal-composer/drupal-project/issues/249
 if ! echo "$INSTALLATION_PROFILE" | grep -q -E "^(minimal|standard)$";
 then
@@ -105,13 +130,19 @@ then
     echo "Use --overwrite-profile to copy over it." 1>&2
     exit 1
   else
     echo "Use --overwrite-profile to copy over it." 1>&2
     exit 1
   else
-    cp -a "$INSTALLATION_PROFILE" "${WEB_ROOT}/profiles"
+    if [ -d "$INSTALLATION_PROFILE" ];
+    then
+      cp -a "$INSTALLATION_PROFILE" "${WEB_ROOT}/profiles"
+    else
+      echo "Local installation profile '$INSTALLATION_PROFILE' not found." 1>&2
+      echo "Cannot honour the --overwrite-profile option." 1>&2
+    fi
   fi
 fi
 
 pushd "$WEB_ROOT"
 
   fi
 fi
 
 pushd "$WEB_ROOT"
 
-# Update the install_profile if it's already there
+# Update the install_profile setting if it's already there
 if grep -q "^\\\$settings\['install_profile'\] =" sites/default/settings.php;
 then
   chmod 755 sites/default
 if grep -q "^\\\$settings\['install_profile'\] =" sites/default/settings.php;
 then
   chmod 755 sites/default
@@ -123,17 +154,17 @@ fi
 
 $DRUSH --verbose --yes \
   site-install \
 
 $DRUSH --verbose --yes \
   site-install \
-  --db-su=root \
-  --db-su-pw="$MYSQL_ROOT_PASSWORD" \
+  "${DRUSH_DB_SU_CREDENTIALS[@]}" \
   --db-url="mysql://${DB_USER}:${DB_PASS}@localhost/${DB_NAME}" \
   --site-name="$SITE_NAME" \
   --site-mail="$SITE_MAIL" \
   --db-url="mysql://${DB_USER}:${DB_PASS}@localhost/${DB_NAME}" \
   --site-name="$SITE_NAME" \
   --site-mail="$SITE_MAIL" \
+  --sites-subdir="default" \
   --account-name="$ACCOUNT_NAME" \
   --account-pass="$ACCOUNT_PASS" \
   --account-mail="$ACCOUNT_MAIL" \
   "$INSTALLATION_PROFILE"
 
   --account-name="$ACCOUNT_NAME" \
   --account-pass="$ACCOUNT_PASS" \
   --account-mail="$ACCOUNT_MAIL" \
   "$INSTALLATION_PROFILE"
 
-if $DRUSH pm-info --fields=status locale | grep -q enabled;
+if $DRUSH pm-list --type=module --field=name --status=enabled --pipe | grep -q "^locale$";
 then
   # This is necessary for multi-language sites, it fixes some issues like:
   #   "The Translation source field needs to be installed."
 then
   # This is necessary for multi-language sites, it fixes some issues like:
   #   "The Translation source field needs to be installed."