]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - maintenance/install.php
MediaWiki 1.30.2-scripts
[autoinstalls/mediawiki.git] / maintenance / install.php
1 <?php
2 /**
3  * CLI-based MediaWiki installation and configuration.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  * http://www.gnu.org/copyleft/gpl.html
19  *
20  * @file
21  * @ingroup Maintenance
22  */
23
24 require_once __DIR__ . '/Maintenance.php';
25
26 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
27 define( 'MEDIAWIKI_INSTALL', true );
28
29 /**
30  * Maintenance script to install and configure MediaWiki
31  *
32  * Default values for the options are defined in DefaultSettings.php
33  * (see the mapping in CliInstaller.php)
34  * Default for --dbpath (SQLite-specific) is defined in SqliteInstaller::getGlobalDefaults
35  *
36  * @ingroup Maintenance
37  */
38 class CommandLineInstaller extends Maintenance {
39         function __construct() {
40                 parent::__construct();
41                 global $IP;
42
43                 $this->addDescription( "CLI-based MediaWiki installation and configuration.\n" .
44                         "Default options are indicated in parentheses." );
45
46                 $this->addArg( 'name', 'The name of the wiki (MediaWiki)', false );
47
48                 $this->addArg( 'admin', 'The username of the wiki administrator.' );
49                 $this->addOption( 'pass', 'The password for the wiki administrator.', false, true );
50                 $this->addOption(
51                         'passfile',
52                         'An alternative way to provide pass option, as the contents of this file',
53                         false,
54                         true
55                 );
56                 /* $this->addOption( 'email', 'The email for the wiki administrator', false, true ); */
57                 $this->addOption(
58                         'scriptpath',
59                         'The relative path of the wiki in the web server (/wiki)',
60                         false,
61                         true
62                 );
63
64                 $this->addOption( 'lang', 'The language to use (en)', false, true );
65                 /* $this->addOption( 'cont-lang', 'The content language (en)', false, true ); */
66
67                 $this->addOption( 'dbtype', 'The type of database (mysql)', false, true );
68                 $this->addOption( 'dbserver', 'The database host (localhost)', false, true );
69                 $this->addOption( 'dbport', 'The database port; only for PostgreSQL (5432)', false, true );
70                 $this->addOption( 'dbname', 'The database name (my_wiki)', false, true );
71                 $this->addOption( 'dbpath', 'The path for the SQLite DB ($IP/data)', false, true );
72                 $this->addOption( 'dbprefix', 'Optional database table name prefix', false, true );
73                 $this->addOption( 'installdbuser', 'The user to use for installing (root)', false, true );
74                 $this->addOption( 'installdbpass', 'The password for the DB user to install as.', false, true );
75                 $this->addOption( 'dbuser', 'The user to use for normal operations (wikiuser)', false, true );
76                 $this->addOption( 'dbpass', 'The password for the DB user for normal operations', false, true );
77                 $this->addOption(
78                         'dbpassfile',
79                         'An alternative way to provide dbpass option, as the contents of this file',
80                         false,
81                         true
82                 );
83                 $this->addOption( 'confpath', "Path to write LocalSettings.php to ($IP)", false, true );
84                 $this->addOption( 'dbschema', 'The schema for the MediaWiki DB in '
85                         . 'PostgreSQL/Microsoft SQL Server (mediawiki)', false, true );
86                 /*
87                 $this->addOption( 'namespace', 'The project namespace (same as the "name" argument)',
88                         false, true );
89                 */
90                 $this->addOption( 'env-checks', "Run environment checks only, don't change anything" );
91
92                 $this->addOption( 'with-extensions', "Detect and include extensions" );
93         }
94
95         public function getDbType() {
96                 if ( $this->hasOption( 'env-checks' ) ) {
97                         return Maintenance::DB_NONE;
98                 }
99                 return parent::getDbType();
100         }
101
102         function execute() {
103                 global $IP;
104
105                 $siteName = $this->getArg( 0, 'MediaWiki' ); // Will not be set if used with --env-checks
106                 $adminName = $this->getArg( 1 );
107                 $envChecksOnly = $this->hasOption( 'env-checks' );
108
109                 $this->setDbPassOption();
110                 if ( !$envChecksOnly ) {
111                         $this->setPassOption();
112                 }
113
114                 $installer = InstallerOverrides::getCliInstaller( $siteName, $adminName, $this->mOptions );
115
116                 $status = $installer->doEnvironmentChecks();
117                 if ( $status->isGood() ) {
118                         $installer->showMessage( 'config-env-good' );
119                 } else {
120                         $installer->showStatusMessage( $status );
121
122                         return;
123                 }
124                 if ( !$envChecksOnly ) {
125                         $installer->execute();
126                         $installer->writeConfigurationFile( $this->getOption( 'confpath', $IP ) );
127                 }
128         }
129
130         private function setDbPassOption() {
131                 $dbpassfile = $this->getOption( 'dbpassfile' );
132                 if ( $dbpassfile !== null ) {
133                         if ( $this->getOption( 'dbpass' ) !== null ) {
134                                 $this->error( 'WARNING: You have provided the options "dbpass" and "dbpassfile". '
135                                         . 'The content of "dbpassfile" overrides "dbpass".' );
136                         }
137                         MediaWiki\suppressWarnings();
138                         $dbpass = file_get_contents( $dbpassfile ); // returns false on failure
139                         MediaWiki\restoreWarnings();
140                         if ( $dbpass === false ) {
141                                 $this->error( "Couldn't open $dbpassfile", true );
142                         }
143                         $this->mOptions['dbpass'] = trim( $dbpass, "\r\n" );
144                 }
145         }
146
147         private function setPassOption() {
148                 $passfile = $this->getOption( 'passfile' );
149                 if ( $passfile !== null ) {
150                         if ( $this->getOption( 'pass' ) !== null ) {
151                                 $this->error( 'WARNING: You have provided the options "pass" and "passfile". '
152                                         . 'The content of "passfile" overrides "pass".' );
153                         }
154                         MediaWiki\suppressWarnings();
155                         $pass = file_get_contents( $passfile ); // returns false on failure
156                         MediaWiki\restoreWarnings();
157                         if ( $pass === false ) {
158                                 $this->error( "Couldn't open $passfile", true );
159                         }
160                         $this->mOptions['pass'] = trim( $pass, "\r\n" );
161                 } elseif ( $this->getOption( 'pass' ) === null ) {
162                         $this->error( 'You need to provide the option "pass" or "passfile"', true );
163                 }
164         }
165
166         function validateParamsAndArgs() {
167                 if ( !$this->hasOption( 'env-checks' ) ) {
168                         parent::validateParamsAndArgs();
169                 }
170         }
171 }
172
173 $maintClass = 'CommandLineInstaller';
174
175 require_once RUN_MAINTENANCE_IF_MAIN;