install.hostmaster.inc 7.58 KB
Newer Older
1 2 3
<?php

/**
4
 * @file install the hostmaster system
5 6
 */

7
function drush_provision_hostmaster_install_validate($site = NULL) {
8 9
  // set defaults for this whole script
  // those are settings that are not prompted to the user but still overridable
10 11
  drush_set_default('version', provision_version());
  $version = drush_get_option('version');
12 13 14 15 16 17
  $aegir_root = drush_set_default('aegir_root', drush_server_home());
  drush_set_default('root', $aegir_root . '/' . 'hostmaster-' . $version);
  drush_set_default('r', drush_get_option('root'));
  drush_set_default('script_user', provision_current_user());
  drush_set_default('web_group', _provision_default_web_group());
  drush_set_default('http_service_type', 'apache');
mig5's avatar
mig5 committed
18
  drush_set_default('drush_make_version', '6.x-2.1');
anarcat's avatar
anarcat committed
19 20
  drush_set_default('aegir_db_user', 'root');
  $aegir_db_user = drush_get_option('aegir_db_user');
anarcat's avatar
anarcat committed
21
  drush_set_default('makefile', $aegir_root . '/.drush/provision/aegir.make');
22

23
  drush_print("Aegir $version automated install script");
24
  drush_print("==============================================================================");
25

26
  if (!$site || !drush_get_option('aegir_host', NULL) || !drush_get_option('aegir_db_pass', NULL) || filter_var(drush_get_option('client_email'), FILTER_VALIDATE_EMAIL)) {
27
    drush_print("Some settings have not been provided and will now be prompted.
28 29 30 31
Don't worry: you will get to review those settings after the final install");
  }
  // now we prompt the user for settings if not provided or not sane
  if (!$site) {
32
    $site = drush_prompt(dt("Aegir frontend URL"), provision_fqdn());
33
  }
34
  drush_set_option('site', $site);
35

36
  drush_set_default('aegir_host', provision_fqdn());
37
  drush_set_default('aegir_db_host', 'localhost');
38 39 40 41 42 43 44 45 46

  if (is_null(drush_get_option('aegir_db_pass', NULL))) {
    // XXX: may not be portable everywhere?
    system('stty -echo');
    drush_set_option('aegir_db_pass', drush_prompt(dt('MySQL privileged user ("!root") password', array('!root' => $aegir_db_user))));
    system('stty echo');
    print "\n"; // add a newline since the user's didn't print    
  }

47
  if (drush_get_option('aegir_host') == 'localhost') {
48 49
    $default_email = 'webmaster@example.com';
  } else {
50
    $default_email = 'webmaster@' . drush_get_option('aegir_host');
51
  }
52
  while (!filter_var(drush_get_option('client_email'), FILTER_VALIDATE_EMAIL)) {
53
   $client_email = drush_prompt(dt("Admin user e-mail"), $default_email);
54 55 56
   drush_set_option('client_email', $client_email);
  }

57
  drush_print(dt('
58 59 60 61 62 63 64 65 66 67
This script will operate the following changes in your system:

1. Create server-level configuration directories
2. Download drush_make
3. Create the Hostmaster frontend platform
4. Install the frontend site
5. Setup the dispatcher (a user cron job)

We are making the following assumptions:
 * you have read INSTALL.txt and prepared the platform accordingly
68
 * the FQDN of this machine is valid and resolves
69
 * you are executing this script as your "aegir" user
70

71 72
The following settings will be used:
 Aegir frontend URL: !site
anarcat's avatar
anarcat committed
73
 Master server FQDN: !fqdn
74 75 76 77
 Aegir root: !home
 Aegir user: !user
 Web group: !web
 Web server: !web_server
78
 Aegir DB host: !db_host
79 80 81 82 83
 Aegir DB user: !db_user
 Aegir DB password: !db_pass
 Drush make version: !drush_make
 Aegir version: !version
 Aegir platform path: !root
anarcat's avatar
anarcat committed
84
 Aegir makefile: !makefile
85
 Client email: !email
86
', array('!site' => $site,
87 88 89 90 91
         '!fqdn' => drush_get_option('aegir_host'),
         '!home' => drush_get_option('aegir_root'),
         '!user' => drush_get_option('script_user'),
         '!web' => drush_get_option('web_group'),
         '!web_server' => drush_get_option('http_service_type'),
92
         '!db_host' => drush_get_option('aegir_db_host'),
93
         '!db_user' => drush_get_option('aegir_db_user'),
anarcat's avatar
anarcat committed
94
         '!db_pass' => is_null(drush_get_option('aegir_db_pass', NULL, 'process')) ? '<previously set>' : '<prompted>',
95 96 97
         '!drush_make' => drush_get_option('drush_make_version'),
         '!version' => drush_get_option('version'),
         '!root' => drush_get_option(array('r', 'root')),
anarcat's avatar
anarcat committed
98
         '!makefile' => drush_get_option('makefile'),
99
         '!email' => drush_get_option('client_email'),
100
         )));
101

102 103
  if (!drush_confirm(dt('Do you really want to proceed with the install'))) {
    return drush_set_error('PROVISION_CANCEL_INSTALL', dt('Installation aborted by user'));
104
  }
105

106 107 108
  return TRUE;
}

109
function drush_provision_hostmaster_install($site = NULL) {
110
  $version = drush_get_option('version');
111
  $site = drush_get_option('site', provision_fqdn());
112 113
  $aegir_root = drush_get_option('aegir_root');
  $platform = drush_get_option(array('r', 'root'));
114

115 116
  $aegir_db_user = drush_get_option('aegir_db_user');
  $aegir_db_pass = drush_get_option('aegir_db_pass');
117
  
118
  $server = '@server_master';
119
  $master_context = array(
120
    'context_type' => 'server',
121
    // files
anarcat's avatar
anarcat committed
122
    'remote_host' => drush_get_option('aegir_host'),
123
    'aegir_root' => $aegir_root,
124
    'script_user' => drush_get_option('script_user'),
125
   // apache or nginx or..
126 127
    'http_service_type' => drush_get_option('http_service_type'),
    'web_group' => drush_get_option('web_group'),
128
    'master_url' => "http://" . $site,
129 130 131 132 133 134 135 136 137 138
  );

  $master_db = sprintf("mysql://%s:%s@%s",$aegir_db_user, $aegir_db_pass, drush_get_option('aegir_db_host'));
  if (drush_get_option('aegir_host') == drush_get_option('aegir_db_host')) {
    $master_context['db_service_type'] = 'mysql';
    $master_context['master_db'] = $master_db;
    $dbserver = $server;
  } else {
    $dbserver = '@server_' . drush_get_option('aegir_db_host');
    $dbserver_context = array(
139
      'remote_host' => drush_get_option('aegir_db_host'),
140 141 142 143 144 145 146 147
      'context_type' => 'server',
      'db_service_type' => 'mysql',
      'master_db' => $master_db,
    );
    drush_backend_invoke_args("provision-save", array($dbserver), $dbserver_context);
    provision_backend_invoke($dbserver, 'provision-verify');
  }
  drush_backend_invoke_args("provision-save", array($server), $master_context);
148
  provision_backend_invoke($server, 'provision-verify');
149

150 151 152 153 154
  // exit if an error has occured. 
  if (drush_get_error()) {
    return false;
  }

155 156 157 158
  if (drush_get_option('backend-only')) {
    return;
  }

159
  if (!function_exists('drush_make_drush_command')) {
160
    drush_backend_invoke('dl', array('drush_make-' . drush_get_option('drush_make_version'), 'destination' => $aegir_root . '/.drush/'));
161 162
  }

163 164 165 166 167
  $platform_name = '@platform_hostmaster';
  drush_backend_invoke_args("provision-save", array($platform_name), array(
    'context_type' => 'platform',
    'server' => $server,
    'web_server' => $server,
168
    'root' => $platform,
anarcat's avatar
anarcat committed
169
    'makefile' => drush_get_option('makefile'),
170
  ));
171 172 173 174 175 176
  // propagate working-copy args downward
  $options = array();
  if (drush_get_option('working-copy')) {
    $options['working-copy'] = 1;
  }
  provision_backend_invoke($platform_name, 'provision-verify', array(), $options);
177

178 179 180 181 182
  // exit if an error has occured. 
  if (drush_get_error()) {
    return false;
  }

183 184 185 186
  $site_name = '@hostmaster';
  drush_backend_invoke_args("provision-save", array($site_name), array(
    'context_type' => 'site',
    'platform' => $platform_name,
187
    'db_server' => $dbserver,
188
    'uri' => $site,
189
    'client_email' => drush_get_option('client_email'),
190 191
    'profile' => 'hostmaster',
  ));
192
  $data = provision_backend_invoke($site_name, 'provision-install');
193
  provision_backend_invoke($site_name, 'provision-verify');
194

195 196 197 198 199 200
  // exit if an error has occured. 
  if (drush_get_error()) {
    return false;
  }


mig5's avatar
mig5 committed
201
  drush_print(dt("Initializing the hosting system"));
202
  provision_backend_invoke($site_name, 'hosting-setup');
203

204
  drush_print(dt("Aegir is now installed. You can visit it at @link", array('@link' => $data['context']['login_link'])));
205 206
}