install.hostmaster.inc 7.54 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
  $version = drush_set_default('version', drush_get_option('version', 'HEAD'));
11 12 13 14 15 16 17 18
  $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');
  drush_set_default('drush_make_version', '6.x-2.0-beta9');
  $aegir_db_user = drush_set_default('aegir_db_user', 'root');
anarcat's avatar
anarcat committed
19
  drush_set_default('makefile', $aegir_root . '/.drush/provision/aegir.make');
20

21
  drush_print("Aegir $version automated install script");
22
  drush_print("==============================================================================");
23

24 25 26 27 28 29
  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)) {
    drush_print("Some settings have not been guessed and will now be prompted.
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) {
30
    $site = drush_prompt(dt("Aegir frontend URL"), provision_fqdn());
31
  }
32
  drush_set_option('site', $site);
33

anarcat's avatar
anarcat committed
34 35
  drush_set_default('aegir_host', $site);
  $aegir_host = drush_get_option('aegir_host');
36
  drush_set_default('aegir_db_host', $aegir_host);
37 38 39 40 41 42 43 44 45

  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    
  }

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

56
  drush_print(dt('
57 58 59 60 61 62 63 64 65 66
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
67
 * the FQDN of this machine is valid and resolves
68
 * you are executing this script as your "aegir" user
69

70 71
The following settings will be used:
 Aegir frontend URL: !site
anarcat's avatar
anarcat committed
72
 Master server FQDN: !fqdn
73 74 75 76
 Aegir root: !home
 Aegir user: !user
 Web group: !web
 Web server: !web_server
77
 Aegir DB host: !db_host
78 79 80 81 82
 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
83
 Aegir makefile: !makefile
84
 Client email: !email
85
', array('!site' => $site,
86 87 88 89 90
         '!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'),
91
         '!db_host' => drush_get_option('aegir_db_host'),
92
         '!db_user' => drush_get_option('aegir_db_user'),
anarcat's avatar
anarcat committed
93
         '!db_pass' => is_null(drush_get_option('aegir_db_pass', NULL, 'process')) ? '<previously set>' : '<prompted>',
94 95 96
         '!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
97
         '!makefile' => drush_get_option('makefile'),
98
         '!email' => drush_get_option('client_email'),
99
         )));
100

101 102
  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'));
103
  }
104

105 106 107
  return TRUE;
}

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

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

  $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(
138
      'remote_host' => drush_get_option('aegir_db_host'),
139 140 141 142 143 144 145 146
      '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);
147
  provision_backend_invoke($server, 'provision-verify');
148

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

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

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

162 163 164 165 166
  $platform_name = '@platform_hostmaster';
  drush_backend_invoke_args("provision-save", array($platform_name), array(
    'context_type' => 'platform',
    'server' => $server,
    'web_server' => $server,
167
    'root' => $platform,
anarcat's avatar
anarcat committed
168
    'makefile' => drush_get_option('makefile'),
169
  ));
170 171 172 173 174 175
  // 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);
176

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

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

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


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

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