6
|
1 #!/usr/bin/perl
|
|
2
|
|
3 use Getopt::Long;
|
|
4 use Socket;
|
|
5 use File::Copy;
|
|
6
|
|
7 my( %opts ) = ( );
|
|
8 my( $rez ) = GetOptions( \%opts, "pg_only!");
|
|
9
|
|
10 my $postgresonly = 0;
|
|
11
|
|
12 my @CONFIG_VARIABLES = ();
|
|
13
|
|
14 unless ($opts{pg_only})
|
|
15 {
|
|
16 @CONFIG_VARIABLES = (
|
|
17 'HOST_DNS_ADDRESS',
|
|
18 'GLASSFISH_DIRECTORY',
|
|
19 'MAIL_SERVER',
|
|
20
|
|
21 'POSTGRES_SERVER',
|
|
22 'POSTGRES_PORT',
|
|
23 'POSTGRES_DATABASE',
|
|
24 'POSTGRES_USER',
|
|
25 'POSTGRES_PASSWORD',
|
|
26
|
|
27 'RSERVE_HOST',
|
|
28 'RSERVE_PORT',
|
|
29 'RSERVE_USER',
|
|
30 'RSERVE_PASSWORD'
|
|
31
|
|
32 );
|
|
33 }
|
|
34 else
|
|
35 {
|
|
36 @CONFIG_VARIABLES = (
|
|
37 'POSTGRES_SERVER',
|
|
38 'POSTGRES_PORT',
|
|
39 'POSTGRES_DATABASE',
|
|
40 'POSTGRES_USER',
|
|
41 'POSTGRES_PASSWORD'
|
|
42 );
|
|
43
|
|
44 $postgresonly = 1;
|
|
45 }
|
|
46
|
|
47 my %CONFIG_DEFAULTS =
|
|
48 (
|
|
49 'HOST_DNS_ADDRESS', '',
|
|
50 'GLASSFISH_DIRECTORY', '/home/glassfish/glassfish',
|
|
51 'MAIL_SERVER', 'localhost',
|
|
52
|
|
53 'POSTGRES_SERVER', 'localhost',
|
|
54 'POSTGRES_PORT', 5432,
|
|
55 'POSTGRES_DATABASE','dvnDb',
|
|
56 'POSTGRES_USER', 'postgres',
|
|
57 'POSTGRES_PASSWORD','admin',
|
|
58
|
|
59 'RSERVE_HOST', 'localhost',
|
|
60 'RSERVE_PORT', 6311,
|
|
61 'RSERVE_USER', 'rserve',
|
|
62 'RSERVE_PASSWORD', 'rserve'
|
|
63
|
|
64 );
|
|
65
|
|
66
|
|
67 my %CONFIG_PROMPTS =
|
|
68 (
|
|
69 'HOST_DNS_ADDRESS', 'Internet Address of your host',
|
|
70 'GLASSFISH_DIRECTORY', 'Glassfish Directory',
|
|
71 'MAIL_SERVER', 'SMTP (mail) server to relay notification messages',
|
|
72
|
|
73 'POSTGRES_SERVER', 'Postgres Server',
|
|
74 'POSTGRES_PORT', 'Postgres Server Port',
|
|
75 'POSTGRES_DATABASE','Name of the Postgres Database',
|
|
76 'POSTGRES_USER', 'Name of the Postgres User',
|
|
77 'POSTGRES_PASSWORD','Postgres user password',
|
|
78
|
|
79 'RSERVE_HOST', 'Rserve Server',
|
|
80 'RSERVE_PORT', 'Rserve Server Port',
|
|
81 'RSERVE_USER', 'Rserve User Name',
|
|
82 'RSERVE_PASSWORD', 'Rserve User Password'
|
|
83
|
|
84 );
|
|
85
|
|
86 # Supported Posstgres JDBC drivers:
|
|
87 # (have to be configured explicitely, so that Perl "taint" (security) mode
|
|
88 # doesn't get paranoid)
|
|
89
|
|
90 my $POSTGRES_DRIVER_8_3 = "postgresql-8.3-603.jdbc4.jar";
|
|
91 #my $POSTGRES_DRIVER_8_4 = "postgresql-8.4-703.jdbc4.jar";
|
|
92 my $POSTGRES_DRIVER_8_4 = "postgresql-8.3-603.jdbc4.jar";
|
|
93 my $POSTGRES_DRIVER_9_0 = "postgresql-9.0-802.jdbc4.jar";
|
|
94 my $POSTGRES_DRIVER_9_1 = "postgresql-9.1-902.jdbc4.jar";
|
|
95
|
|
96
|
|
97 # A few preliminary checks:
|
|
98
|
|
99 # user -- must be root:
|
|
100
|
|
101 $user_real = `who am i`;
|
|
102 chop $user_real;
|
|
103 $user_real =~s/ .*$//;
|
|
104
|
|
105 if ( $< != 0 )
|
|
106 {
|
|
107 print STDERR "\nERROR: You must be logged in as root to run the installer.\n\n";
|
|
108 exit 1;
|
|
109 }
|
|
110
|
|
111 # OS:
|
|
112
|
|
113 my $uname_out = `uname -a`;
|
|
114
|
|
115 # hostname:
|
|
116
|
|
117 my $hostname_from_cmdline = `hostname`;
|
|
118 chop $hostname_from_cmdline;
|
|
119
|
|
120 $CONFIG_DEFAULTS{'HOST_DNS_ADDRESS'} = $hostname_from_cmdline;
|
|
121
|
|
122
|
|
123 print "\nWelcome to the DVN installer.\n";
|
|
124 unless ($opts{pg_only})
|
|
125 {
|
|
126 print "You will be guided through the process of setting up a NEW\n";
|
|
127 print "instance of the DVN application\n";
|
|
128 }
|
|
129 else
|
|
130 {
|
|
131 print "You will be guided through the process of configuring the\n";
|
|
132 print "LOCAL instance of PostgreSQL database for use by the DVN\n";
|
|
133 print "application.\n";
|
|
134 }
|
|
135
|
|
136 my @uname_tokens = split (" ", $uname_out);
|
|
137
|
|
138 if ( $uname_tokens[0] eq "Darwin" )
|
|
139 {
|
|
140 print "\nThis appears to be a MacOS X system; good.\n";
|
|
141 # TODO: check the OS version
|
|
142
|
|
143 $WORKING_OS = "MacOSX";
|
|
144 }
|
|
145 elsif ( $uname_tokens[0] eq "Linux" )
|
|
146 {
|
|
147 if ( -f "/etc/redhat-release" )
|
|
148 {
|
|
149 print "\nThis appears to be a RedHat system; good.\n";
|
|
150 $WORKING_OS = "RedHat";
|
|
151 # TODO: check the distro version
|
|
152 }
|
|
153 else
|
|
154 {
|
|
155 print "\nThis appears to be a non-RedHat Linux system;\n";
|
|
156 print "this installation *may* succeed; but we're not making any promises!\n";
|
|
157 $WORKING_OS = "Linux";
|
|
158 }
|
|
159 }
|
|
160 else
|
|
161 {
|
|
162 print "\nWARNING: This appears to be neither a Linux or MacOS X system!\n";
|
|
163 print "This installer script will most likely fail. Please refer to the\n";
|
|
164 print "DVN Installers Guide for more information.\n\n";
|
|
165
|
|
166 $WORKING_OS = "Unknown";
|
|
167
|
|
168 print "Do you wish to continue?\n [y/n] ";
|
|
169
|
|
170
|
|
171 my $yesnocont = <>; chop $yesnocont;
|
|
172
|
|
173 while ( $yesnocont ne "y" && $yesnocont ne "n" )
|
|
174 {
|
|
175 print "Please enter 'y' or 'n'!\n";
|
|
176 print "(or ctrl-C to exit the installer)\n";
|
|
177 $yesnocont = <>; chop $yesnocont;
|
|
178 }
|
|
179
|
|
180 if ( $yesnocont eq "n" )
|
|
181 {
|
|
182 exit 0;
|
|
183 }
|
|
184
|
|
185 }
|
|
186
|
|
187 ENTERCONFIG:
|
|
188
|
|
189 print "\n";
|
|
190 print "Please enter the following configuration values:\n";
|
|
191 print "(hit [RETURN] to accept the default value)\n";
|
|
192 print "\n";
|
|
193
|
|
194 for $ENTRY (@CONFIG_VARIABLES)
|
|
195 {
|
|
196 print $CONFIG_PROMPTS{$ENTRY} . ": ";
|
|
197 print "[" . $CONFIG_DEFAULTS{$ENTRY} . "] ";
|
|
198
|
|
199 $user_entry = <>;
|
|
200 chop $user_entry;
|
|
201
|
|
202 if ($user_entry ne "")
|
|
203 {
|
|
204 $CONFIG_DEFAULTS{$ENTRY} = $user_entry;
|
|
205 }
|
|
206
|
|
207 print "\n";
|
|
208 }
|
|
209
|
|
210 # CONFIRM VALUES ENTERED:
|
|
211
|
|
212
|
|
213 print "\nOK, please confirm what you've entered:\n\n";
|
|
214
|
|
215 for $ENTRY (@CONFIG_VARIABLES)
|
|
216 {
|
|
217 print $CONFIG_PROMPTS{$ENTRY} . ": " . $CONFIG_DEFAULTS{$ENTRY} . "\n";
|
|
218 }
|
|
219
|
|
220 print "\nIs this correct? [y/n] ";
|
|
221
|
|
222
|
|
223 my $yesno = <>; chop $yesno;
|
|
224
|
|
225 while ( $yesno ne "y" && $yesno ne "n" )
|
|
226 {
|
|
227 print "Please enter 'y' or 'n'!\n";
|
|
228 print "(or ctrl-C to exit the installer)\n";
|
|
229 $yesno = <>; chop $yesno;
|
|
230 }
|
|
231
|
|
232 if ( $yesno eq "n" )
|
|
233 {
|
|
234 goto ENTERCONFIG;
|
|
235 }
|
|
236
|
|
237 # VALIDATION/VERIFICATION OF THE CONFIGURATION VALUES:
|
|
238 # 1. VERIFY MAIL SERVER THEY CONFIGURED:
|
|
239
|
|
240 =pod
|
|
241
|
|
242 unless ( $postgresonly )
|
|
243 {
|
|
244
|
|
245 my ( $mail_server_iaddr, $mail_server__paddr, $mail_server_proto, $mail_server_status );
|
|
246
|
|
247 $mail_server_status = 1;
|
|
248
|
|
249 unless ( $mail_server_iaddr = inet_aton($CONFIG_DEFAULTS{'MAIL_SERVER'}) )
|
|
250 {
|
|
251 print STDERR "Could not look up $CONFIG_DEFAULTS{'MAIL_SERVER'},\n";
|
|
252 print STDERR "the host you specified as your mail server.\n";
|
|
253 $mail_server_status = 0;
|
|
254 }
|
|
255
|
|
256 if ($mail_server_status) {
|
|
257 $mail_server_paddr = sockaddr_in(25, $mail_server_iaddr);
|
|
258 $mail_server_proto = getprotobyname('tcp');
|
|
259
|
|
260 unless ( socket(SOCK, PF_INET, SOCK_STREAM, $mail_server_proto) &&
|
|
261 connect(SOCK, $mail_server_paddr) )
|
|
262 {
|
|
263 print STDERR "Could not establish connection to $CONFIG_DEFAULTS{'MAIL_SERVER'},\n";
|
|
264 print STDERR "the address you provided for your Mail server.\n";
|
|
265 print STDERR "Please select a valid mail server, and try again.\n\n";
|
|
266
|
|
267 $mail_server_status = 0;
|
|
268 }
|
|
269
|
|
270 }
|
|
271
|
|
272 close (SOCK);
|
|
273
|
|
274 unless ($mail_server_status)
|
|
275 {
|
|
276 goto ENTERCONFIG;
|
|
277 }
|
|
278 }
|
|
279 =cut
|
|
280
|
|
281 # 2. CHECK IF THE WAR FILE IS AVAILABLE:
|
|
282 unless ( -f "appdeploy/dist/DVN-web.war" )
|
|
283 {
|
|
284 print "\nWARNING: Can't find the project .war file in appdeploy/dist/!\n";
|
|
285 print "\tAre you running the installer in the right directory?\n";
|
|
286 print "\tHave you built the war file?\n";
|
|
287 print "\t(if not, build the project and run the installer again)\n";
|
|
288
|
|
289 exit 0;
|
|
290 }
|
|
291
|
|
292 # check the working (installer) dir:
|
|
293 my $cwd;
|
|
294 chomp($cwd = `pwd`);
|
|
295
|
|
296 # 2b. CHECK IF THE SQL TEMPLATE IS IN PLACE AND CREATE THE SQL FILE
|
|
297
|
|
298 $SQL_REFERENCE_DATA = "referenceData.sql";
|
|
299 $SQL_REFERENCE_TEMPLATE = "referenceData.sql.TEMPLATE";
|
|
300
|
|
301 unless ( -f $SQL_REFERENCE_TEMPLATE )
|
|
302 {
|
|
303 print "\nWARNING: Can't find .sql data template!\n";
|
|
304 print "(are you running the installer in the right directory?)\n";
|
|
305
|
|
306 exit 0;
|
|
307 }
|
|
308
|
|
309 open DATATEMPLATEIN, $SQL_REFERENCE_TEMPLATE || die $@;
|
|
310 open SQLDATAOUT, '>'.$SQL_REFERENCE_DATA || die $@;
|
|
311
|
|
312 while( <DATATEMPLATEIN> )
|
|
313 {
|
|
314 s/%POSTGRES_USER%/$CONFIG_DEFAULTS{'POSTGRES_USER'}/g;
|
|
315 print SQLDATAOUT $_;
|
|
316 }
|
|
317
|
|
318
|
|
319 close DATATEMPLATEIN;
|
|
320 close SQLDATAOUT;
|
|
321
|
|
322 # 3. CHECK POSTGRES AVAILABILITY:
|
|
323
|
|
324 my $pg_local_connection = 0;
|
|
325
|
|
326 if ( $CONFIG_DEFAULTS{'POSTGRES_SERVER'} eq 'localhost' )
|
|
327 {
|
|
328 $pg_local_connection = 1;
|
|
329
|
|
330 # 3a. CHECK FOR USER postgres:
|
|
331
|
|
332 print "\nChecking system user \"postgres\"... ";
|
|
333
|
|
334 $POSTGRES_SYS_NAME = "postgres";
|
|
335 $POSTGRES_SYS_UID = (getpwnam ("postgres"))[2];
|
|
336
|
|
337 if ($POSTGRES_SYS_UID == undef) {
|
|
338 print STDERR "\nERROR: I haven't been able to find user \"postgres\" on the system!\n";
|
|
339 print STDERR "(TODO: prompt the user instead to supply an alternative username, if\n";
|
|
340 print STDERR "available)\n";
|
|
341
|
|
342 exit 1;
|
|
343 }
|
|
344
|
|
345 print "OK.\n";
|
|
346
|
|
347 # 3b. LOCATE THE EXECUTABLE:
|
|
348
|
|
349 $sys_path = $ENV{'PATH'};
|
|
350 @sys_path_dirs = split ( ":", $sys_path );
|
|
351
|
|
352 $psql_exec = "";
|
|
353
|
|
354 for $sys_path_dir ( @sys_path_dirs )
|
|
355 {
|
|
356 if ( -x $sys_path_dir . "/psql" )
|
|
357 {
|
|
358 $psql_exec = $sys_path_dir;
|
|
359 last;
|
|
360 }
|
|
361 }
|
|
362
|
|
363 $pg_major_version = 0;
|
|
364 $pg_minor_version = 0;
|
|
365
|
|
366 if ( $psql_exec eq "" && $WORKING_OS eq "MacOSX" )
|
|
367 {
|
|
368 for $pg_minor_version ( "1", "0" )
|
|
369 {
|
|
370 if ( -x "/Library/PostgreSQL/9." . $pg_minor_version . "/bin/psql" )
|
|
371 {
|
|
372 $pg_major_version = 9;
|
|
373 $psql_exec = "/Library/PostgreSQL/9." . $pg_minor_version . "/bin";
|
|
374 last;
|
|
375 }
|
|
376 }
|
|
377 if (!$pg_major_version)
|
|
378 {
|
|
379 for $pg_minor_version ( "4", "3" )
|
|
380 {
|
|
381 if ( -x "/Library/PostgreSQL/8." . $pg_minor_version . "/bin/psql" )
|
|
382 {
|
|
383 $pg_major_version = 8;
|
|
384 $psql_exec = "/Library/PostgreSQL/8." . $pg_minor_version . "/bin";
|
|
385 last;
|
|
386 }
|
|
387 }
|
|
388 }
|
|
389 }
|
|
390
|
|
391 if ( $psql_exec eq "" )
|
|
392 {
|
|
393 print STDERR "\nERROR: I haven't been able to find the psql command in your PATH!\n";
|
|
394 print STDERR "Please make sure PostgresQL is properly installed and try again.\n\n";
|
|
395
|
|
396 exit 1;
|
|
397 }
|
|
398
|
|
399
|
|
400
|
|
401 # 3c. CHECK POSTGRES VERSION:
|
|
402
|
|
403 open (PSQLOUT, $psql_exec . "/psql --version|");
|
|
404
|
|
405 $psql_version_line = <PSQLOUT>;
|
|
406 chop $psql_version_line;
|
|
407 close PSQLOUT;
|
|
408
|
|
409 my ($postgresName, $postgresNameLong, $postgresVersion) = split ( " ", $psql_version_line );
|
|
410
|
|
411 unless ( $postgresName eq "psql" && $postgresVersion =~ /^[0-9][0-9\.]*$/ )
|
|
412 {
|
|
413 print STDERR "\nERROR: Unexpected output from psql command!\n";
|
|
414 print STDERR "Please make sure PostgresQL is properly installed and try again.\n\n";
|
|
415
|
|
416 exit 1;
|
|
417 }
|
|
418
|
|
419
|
|
420 my (@postgres_version_tokens) = split ( '\.', $postgresVersion );
|
|
421
|
|
422 unless ( ($postgres_version_tokens[0] == 8 && $postgres_version_tokens[1] >= 3) || ($postgres_version_tokens[0] >= 9) )
|
|
423 {
|
|
424 print STDERR "\nERROR: PostgresQL version 8.3, or newer, is required!\n";
|
|
425 print STDERR "Found a copy of psql ($psql_exec/psql) that belongs to version $postgresVersion.\n\n";
|
|
426 print STDERR "Please make sure the right version of PostgresQL is properly installed,\n";
|
|
427 print STDERR "and the right version of psql comes first in the PATH,\n";
|
|
428 print STDERR "then try again.\n";
|
|
429
|
|
430 exit 1;
|
|
431 }
|
|
432
|
|
433 print "\n\nFound Postgres psql command, version $postgresVersion. Good.\n\n";
|
|
434
|
|
435 $pg_major_version = $postgres_version_tokens[0];
|
|
436 $pg_minor_version = $postgres_version_tokens[1];
|
|
437
|
|
438 # 4. CONFIGURE POSTGRES:
|
|
439
|
|
440 print "\nConfiguring Postgres Database:\n";
|
|
441
|
|
442
|
|
443
|
|
444 $< = $POSTGRES_SYS_UID;
|
|
445 $> = $POSTGRES_SYS_UID;
|
|
446
|
|
447 # 4a. CHECK IF POSTGRES IS RUNNING:
|
|
448 print "Checking if a local instance of Postgres is running and accessible...\n";
|
|
449
|
|
450 # (change to /tmp before executing the command below -
|
|
451 # we are trying to do it as user postgres, and it may not have
|
|
452 # access to the current, installer directory; the command would still
|
|
453 # work, but there would be an error message from the shell init on screen
|
|
454 # - potentially confusing)
|
|
455 chdir ("/tmp");
|
|
456
|
|
457 if (!system ($psql_exec . "/psql -c 'SELECT * FROM pg_roles' > /dev/null 2>&1"))
|
|
458 {
|
|
459 print "Yes, it is.\n";
|
|
460 }
|
|
461 else
|
|
462 {
|
|
463 print "Nope, I haven't been able to connect to the local instance of PostgresQL.\n";
|
|
464 print "daemon. Is postgresql running? \n";
|
|
465 print "On a RedHat system, you can check the status of the daemon with\n\n";
|
|
466 print " service postgresql status\n\n";
|
|
467 print "and, if it's not running, start the daemon with\n\n";
|
|
468 print " service postgresql start\n\n";
|
|
469 print "On MacOSX, use Applications -> PostgresQL -> Start Server.\n";
|
|
470 print "Also, please make sure that the daemon is listening to network connections,\n";
|
|
471 print "at leaset on the localhost interface. (See \"Installing Postgres\" section\n";
|
|
472 print "of the installation manual).\n";
|
|
473 print "Finally, please make sure that the postgres user can make localhost \n";
|
|
474 print "connections without supplying a password. (That's controlled by the \n";
|
|
475 print "\"localhost ... ident\" line in pg_hba.conf; again, please consult the \n";
|
|
476 print "installation manual).\n";
|
|
477
|
|
478
|
|
479 exit 1;
|
|
480 }
|
|
481
|
|
482
|
|
483 # 4c. CHECK IF THIS DB ALREADY EXISTS:
|
|
484
|
|
485 $psql_command_dbcheck = $psql_exec . "/psql -c \"\" -d " . $CONFIG_DEFAULTS{'POSTGRES_DATABASE'} . ">/dev/null 2>&1";
|
|
486 if ( ($exitcode = system($psql_command_dbcheck)) == 0 )
|
|
487 {
|
|
488 # switch back to root uid:
|
|
489 $> = 0;
|
|
490 $< = 0;
|
|
491 chdir ($cwd);
|
|
492
|
|
493 print "WARNING! Database " . $CONFIG_DEFAULTS{'POSTGRES_DATABASE'} . " already exists!\n";
|
|
494 print "\nPlease note that you can only use this installer to create a blank, \n";
|
|
495 print "new and shiny DVN database. I.e., you cannot install on top of an \n";
|
|
496 print "existing database. Please enter a different name for the DVN database.\n";
|
|
497 print "\nPress any key to continue, or ctrl-C to exit the installer...\n\n";
|
|
498
|
|
499 system "stty cbreak </dev/tty >/dev/tty 2>&1";
|
|
500 my $key = getc(STDIN);
|
|
501 system "stty -cbreak </dev/tty >/dev/tty 2>&1";
|
|
502 print "\n";
|
|
503
|
|
504 goto ENTERCONFIG;
|
|
505
|
|
506 }
|
|
507
|
|
508 # 4d. CHECK IF THIS USER ALREADY EXISTS:
|
|
509
|
|
510 $psql_command_rolecheck = $psql_exec . "/psql -c \"\" -d postgres " . $CONFIG_DEFAULTS{'POSTGRES_USER'} . " >/dev/null 2>&1";
|
|
511 if ( ($exitcode = system($psql_command_rolecheck)) == 0 )
|
|
512 {
|
|
513 print "User (role) . " . $CONFIG_DEFAULTS{'POSTGRES_USER'} . " already exists;\n";
|
|
514 print "Proceeding.";
|
|
515 }
|
|
516 else
|
|
517 {
|
|
518 # 4e. CREATE DVN DB USER:
|
|
519
|
|
520 print "\nCreating Postgres user (role) for the DVN:\n";
|
|
521
|
|
522 open TMPCMD, ">/tmp/pgcmd.$$.tmp";
|
|
523
|
|
524 # with unencrypted password:
|
|
525 #print TMPCMD "CREATE ROLE ".$CONFIG_DEFAULTS{'POSTGRES_USER'}." UNENCRYPTED PASSWORD '".$CONFIG_DEFAULTS{'POSTGRES_PASSWORD'}."' NOSUPERUSER CREATEDB CREATEROLE NOINHERIT LOGIN";
|
|
526
|
|
527 # with md5-encrypted password:
|
|
528 $pg_password_md5 = &create_pg_hash ($CONFIG_DEFAULTS{'POSTGRES_USER'},$CONFIG_DEFAULTS{'POSTGRES_PASSWORD'});
|
|
529 my $sql_command = "CREATE ROLE \"".$CONFIG_DEFAULTS{'POSTGRES_USER'}."\" PASSWORD 'md5". $pg_password_md5 ."' NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN";
|
|
530
|
|
531 print TMPCMD $sql_command;
|
|
532 close TMPCMD;
|
|
533
|
|
534 my $psql_commandline = $psql_exec . "/psql -f /tmp/pgcmd.$$.tmp";
|
|
535
|
|
536 unless ( ($exitcode = system($psql_commandline)) == 0 )
|
|
537 {
|
|
538 print STDERR "Could not create the DVN Postgres user role!\n";
|
|
539 print STDERR "(SQL: " . $sql_command . ")\n";
|
|
540 print STDERR "(psql exit code: " . $exitcode . ")\n";
|
|
541 exit 1;
|
|
542 }
|
|
543
|
|
544 unlink "/tmp/pgcmd.$$.tmp";
|
|
545 print "done.\n";
|
|
546 }
|
|
547
|
|
548 # 4f. CREATE DVN DB:
|
|
549
|
|
550 print "\nCreating Postgres database:\n";
|
|
551
|
|
552 $psql_command = $psql_exec . "/createdb ".$CONFIG_DEFAULTS{'POSTGRES_DATABASE'}." --owner=".$CONFIG_DEFAULTS{'POSTGRES_USER'};
|
|
553
|
|
554 unless ( ($exitcode = system("$psql_command")) == 0 )
|
|
555 {
|
|
556 print STDERR "Could not create Postgres database for the DVN app!\n";
|
|
557 print STDERR "(command: " . $psql_command . ")\n";
|
|
558 print STDERR "(psql exit code: " . $exitcode . ")\n";
|
|
559 print STDERR "\naborting the installation (sorry!)\n\n";
|
|
560 exit 1;
|
|
561 }
|
|
562
|
|
563
|
|
564 # Changing back to root UID:
|
|
565
|
|
566 $> = 0;
|
|
567 $< = 0;
|
|
568
|
|
569 chdir ($cwd);
|
|
570
|
|
571 }
|
|
572 else
|
|
573 {
|
|
574 if (0) # DEV. INSTALLER ONLY:
|
|
575 {
|
|
576 print "\nIt is strongly recommended that you use a local PostgresQL server,\n";
|
|
577 print "running on localhost, in your development environment!\n\n";
|
|
578
|
|
579 print "Do you wish to continue?\n [y/n] ";
|
|
580
|
|
581
|
|
582 my $yesnocont = <>; chop $yesnocont;
|
|
583
|
|
584 while ( $yesnocont ne "y" && $yesnocont ne "n" )
|
|
585 {
|
|
586 print "Please enter 'y' or 'n'!\n";
|
|
587 print "(or ctrl-C to exit the installer)\n";
|
|
588 $yesnocont = <>; chop $yesnocont;
|
|
589 }
|
|
590
|
|
591 if ( $yesnocont eq "n" )
|
|
592 {
|
|
593 print "(aborting the installation)\n".
|
|
594 exit 0;
|
|
595 }
|
|
596 }
|
|
597
|
|
598 if ( $opts{$pg_only} )
|
|
599 {
|
|
600 print "The script must be run in the --pg_only mode ONLY locally,\n";
|
|
601 print "i.e., on the server where PostgresQL is running.\n";
|
|
602
|
|
603 exit 1;
|
|
604 }
|
|
605
|
|
606 print "In order to use a PostgresQL database running on a remote server,\n";
|
|
607 print "Please run this installer on that host with the \"--pg_only\" option:\n\n";
|
|
608 print "./install --pg_only\n\n";
|
|
609
|
|
610 print "Press any key to continue the installation process once that has been\n";
|
|
611 print "done. Or press ctrl-C to exit the installer.\n\n";
|
|
612
|
|
613 chdir ("/tmp");
|
|
614 system "stty cbreak </dev/tty >/dev/tty 2>&1";
|
|
615 my $key = getc(STDIN);
|
|
616 system "stty -cbreak </dev/tty >/dev/tty 2>&1";
|
|
617 print "\n";
|
|
618 chdir ($cwd);
|
|
619
|
|
620 # Check if the role and database have been created on the remote server:
|
|
621 # -- TODO;
|
|
622
|
|
623 # Find out what Postgres version is running remotely:
|
|
624
|
|
625 $pg_major_version = 9;
|
|
626 $pg_minor_version = 1;
|
|
627
|
|
628 print "What version of PostgresQL is installed on the remote server?\n [" . $pg_major_version . "." . $pg_minor_version . "] ";
|
|
629
|
|
630
|
|
631 my $postgresVersion = <>; chop $postgresVersion;
|
|
632
|
|
633 while ( $postgresVersion ne "" && !($postgresVersion =~/^[0-9]+\.[0-9]+$/) )
|
|
634 {
|
|
635 print "Please enter valid Postgres version!\n";
|
|
636 print "(or ctrl-C to exit the installer)\n";
|
|
637 $postgresVersion = <>; chop $postgresVersion;
|
|
638 }
|
|
639
|
|
640 unless ( $postgresVersion eq "" )
|
|
641 {
|
|
642 my (@postgres_version_tokens) = split ( '\.', $postgresVersion );
|
|
643
|
|
644 unless ( ($postgres_version_tokens[0] == 8 && $postgres_version_tokens[1] >= 3) || ($postgres_version_tokens[0] >= 9) )
|
|
645 {
|
|
646 print STDERR "\nERROR: PostgresQL version 8.3, or newer, is required!\n";
|
|
647 print STDERR "Please make sure the right version of PostgresQL is properly installed\n";
|
|
648 print STDERR "on the remote server, then try again.\n";
|
|
649
|
|
650 exit 1;
|
|
651 }
|
|
652
|
|
653 $pg_major_version = $postgres_version_tokens[0];
|
|
654 $pg_minor_version = $postgres_version_tokens[1];
|
|
655 }
|
|
656
|
|
657 }
|
|
658
|
|
659
|
|
660 if ( $postgresonly )
|
|
661 {
|
|
662 print "\nOK, done.\n";
|
|
663 print "You can now resume the installation on the main DVN host.\n\n";
|
|
664
|
|
665 exit 0;
|
|
666 }
|
|
667
|
|
668
|
|
669 # 5. CONFIGURE GLASSFISH
|
|
670
|
|
671 print "\nProceeding with the Glassfish setup.\n";
|
|
672 print "\nChecking your Glassfish installation...";
|
|
673
|
|
674 my $glassfish_dir = $CONFIG_DEFAULTS{'GLASSFISH_DIRECTORY'};
|
|
675
|
|
676 # 5a. CHECK IF GLASSFISH DIR LOOKS OK:
|
|
677
|
|
678 print $glassfish_dir."/glassfish/domains/domain1";
|
|
679
|
|
680 unless ( -d $glassfish_dir."/glassfish/domains/domain1" )
|
|
681 {
|
|
682 # TODO: need better check than this
|
|
683
|
|
684 while ( ! ( -d $glassfish_dir."/glassfish/domains/domain1" ) )
|
|
685 {
|
|
686 print "\nInvalid Glassfish directory " . $glassfish_dir . "!\n";
|
|
687 print "Enter the root directory of your Glassfish installation:\n";
|
|
688 print "(Or ctrl-C to exit the installer): ";
|
|
689
|
|
690 $glassfish_dir = <>;
|
|
691 chop $glassfish_dir;
|
|
692 }
|
|
693 }
|
|
694
|
|
695 print "OK!\n";
|
|
696
|
|
697 # 5b. DETERMINE HOW MUCH MEMORY TO GIVE TO GLASSFISH AS HEAP:
|
|
698
|
|
699 $gf_heap_default = "2048m";
|
|
700 $sys_mem_total = 0;
|
|
701
|
|
702 if ( -e "/proc/meminfo" && open MEMINFO, "/proc/meminfo" )
|
|
703 {
|
|
704 # Linux
|
|
705
|
|
706 while ( $mline = <MEMINFO> )
|
|
707 {
|
|
708 if ( $mline =~ /MemTotal:[ \t]*([0-9]*) kB/ )
|
|
709 {
|
|
710 $sys_mem_total = $1;
|
|
711 }
|
|
712 }
|
|
713
|
|
714 close MEMINFO;
|
|
715
|
|
716 }
|
|
717 elsif ( -x "/usr/sbin/sysctl" )
|
|
718 {
|
|
719 # MacOS X, probably...
|
|
720
|
|
721 $sys_mem_total = `/usr/sbin/sysctl -n hw.memsize`;
|
|
722 chop $sys_mem_total;
|
|
723 if ($sys_mem_total > 0)
|
|
724 {
|
|
725 $sys_mem_total = int ($sys_mem_total / 1024);
|
|
726 # size in kb
|
|
727 }
|
|
728 }
|
|
729
|
|
730 if ( $sys_mem_total > 0 )
|
|
731 {
|
|
732 # setting the default heap size limit to 3/8 of the available
|
|
733 # amount of memory:
|
|
734 $gf_heap_default = ( int ($sys_mem_total / (8 / 3 * 1024) ) );
|
|
735
|
|
736 print "\nSetting the heap limit for Glassfish to " . $gf_heap_default . "MB. \n";
|
|
737 print "You may need to adjust this setting to better suit \n";
|
|
738 print "your system.\n\n";
|
|
739
|
|
740 $gf_heap_default .= "m";
|
|
741
|
|
742 }
|
|
743 else
|
|
744 {
|
|
745 print "\nCould not determine the amount of memory on your system.\n";
|
|
746 print "Setting the heap limit for Glassfish to 2GB. You may need \n";
|
|
747 print "to adjust the value to better suit your system.\n\n";
|
|
748 }
|
|
749
|
|
750 push @CONFIG_VARIABLES, "DEF_MEM_SIZE";
|
|
751 $CONFIG_DEFAULTS{"DEF_MEM_SIZE"} = $gf_heap_default;
|
|
752
|
|
753 print "\nPress any key to continue...\n\n";
|
|
754
|
|
755 system "stty cbreak </dev/tty >/dev/tty 2>&1";
|
|
756 my $key = getc(STDIN);
|
|
757 system "stty -cbreak </dev/tty >/dev/tty 2>&1";
|
|
758 print "\n";
|
|
759
|
|
760 # 5c. GENERATE GLASSFISH CONFIGURATION FILE:
|
|
761
|
|
762 print "\nWriting glassfish configuration file (domain.xml)... ";
|
|
763
|
|
764 # 5cc. FIND THE "special-admin-indicator" IN THE ORIGINAL GLASSFISH CONFIG:
|
|
765
|
|
766 open ( GFCNFG, $glassfish_dir."/glassfish/domains/domain1/config/domain.xml") || die $@;
|
|
767
|
|
768 while ( <GFCNFG> )
|
|
769 {
|
|
770 if (/<secure-admin special-admin-indicator=\"([^\"]*)\"/)
|
|
771 {
|
|
772 $CONFIG_DEFAULTS{'GF_SPEC_INDICATOR'} = $1;
|
|
773 }
|
|
774 }
|
|
775
|
|
776 # (is it really a problem if we haven't found it?)
|
|
777
|
|
778 close GFCNFG;
|
|
779
|
|
780 open TEMPLATEIN, 'domain.xml.TEMPLATE';
|
|
781 open CONFIGOUT, '>domain.xml';
|
|
782
|
|
783 while( <TEMPLATEIN> )
|
|
784 {
|
|
785 for $ENTRY (@CONFIG_VARIABLES)
|
|
786 {
|
|
787 $patin = '%' . $ENTRY . '%';
|
|
788 $patout = $CONFIG_DEFAULTS{$ENTRY};
|
|
789
|
|
790 s/$patin/$patout/g;
|
|
791 }
|
|
792
|
|
793 print CONFIGOUT $_;
|
|
794
|
|
795 }
|
|
796
|
|
797 close TEMPLATEIN;
|
|
798 close CONFIGOUT;
|
|
799
|
|
800 print "done.\n";
|
|
801
|
|
802 system ("/bin/cp -f domain.xml ".$glassfish_dir."/glassfish/domains/domain1/config");
|
|
803 #diagnostics needed!
|
|
804
|
|
805 # check if the supllied config files are in the right place:
|
|
806
|
|
807 unless ( -f "config/logging.properties" )
|
|
808 {
|
|
809 print "\nERROR! Configuration files not found in config dir!\n";
|
|
810 print "(are you running the installer in the right directory?\n";
|
|
811 print "Aborting...\n";
|
|
812 exit 1;
|
|
813 }
|
|
814
|
|
815 print "\nCopying additional configuration files... ";
|
|
816
|
|
817 system ( "/bin/cp -Rf config/* ".$glassfish_dir."/glassfish/domains/domain1/config");
|
|
818 #diagnostics needed!
|
|
819
|
|
820 # install pre-configured robots.txt blocking bot crawlers:
|
|
821 system ( "/bin/cp -f robots.txt ".$glassfish_dir."/glassfish/domains/domain1/docroot");
|
|
822
|
|
823 # install the DVN guides (HTML) into the application docroot:
|
|
824 system ( "/bin/cp -Rf doc/guides/* ".$glassfish_dir."/glassfish/domains/domain1/docroot/guides");
|
|
825
|
|
826
|
|
827 print "done!\n";
|
|
828
|
|
829 print "\nInstalling the Glassfish PostgresQL driver... ";
|
|
830
|
|
831 my $install_driver_jar = "";
|
|
832
|
|
833 if ( $pg_major_version == 8 )
|
|
834 {
|
|
835 if ( $pg_minor_version == 3 )
|
|
836 {
|
|
837 $install_driver_jar = $POSTGRES_DRIVER_8_3;
|
|
838 }
|
|
839 elsif ( $pg_minor_version == 4 )
|
|
840 {
|
|
841 $install_driver_jar = $POSTGRES_DRIVER_8_4;
|
|
842 }
|
|
843 }
|
|
844 elsif ( $pg_major_version == 9 )
|
|
845 {
|
|
846 if ( $pg_minor_version == 0 )
|
|
847 {
|
|
848 $install_driver_jar = $POSTGRES_DRIVER_9_0;
|
|
849 }
|
|
850 elsif ( $pg_minor_version == 1 )
|
|
851 {
|
|
852 $install_driver_jar = $POSTGRES_DRIVER_9_1;
|
|
853 }
|
|
854 }
|
|
855
|
|
856 =poc
|
|
857 unless ( $install_driver_jar )
|
|
858 {
|
|
859 die "Installer could not find POSTGRES JDBC driver for your version of PostgresQL!\n";
|
|
860
|
|
861 }
|
|
862 =cut
|
|
863
|
|
864 system ( "/bin/cp", "pgdriver/" . $install_driver_jar, $glassfish_dir."/glassfish/lib");
|
|
865 #diagnostics needed!
|
|
866
|
|
867 print "done!\n";
|
|
868
|
|
869 # 5d. STOP GLASSFISH (OK IF NOT RUNNING):
|
|
870 print "\nStopping glassfish...\n";
|
|
871
|
|
872 unless ( ($exit_code=system ($glassfish_dir."/bin/asadmin stop-domain domain1")) == 0 )
|
|
873 {
|
|
874 print STDERR "(that's OK!)\n";
|
|
875 }
|
|
876
|
|
877 # 5dd. INSTALL PATCHED WEBCORE GLASSFISH MODULE:
|
|
878
|
|
879 $gf_webcore_jar = $glassfish_dir."/glassfish/modules/web-core.jar";
|
|
880
|
|
881 system ("/bin/mv -f ".$gf_webcore_jar . " " . $gf_webcore_jar.".PRESERVED");
|
|
882 system ("/bin/cp web-core.jar ".$gf_webcore_jar);
|
|
883
|
|
884 # 5ddd. DELETE EJB TIMER APP LOCK FILE, if exists (just in case!):
|
|
885
|
|
886 system ( "/bin/rm -f ".$glassfish_dir."/glassfish/domains/domain1/generated/ejb-timer-service-app" );
|
|
887
|
|
888 # 5e. START GLASSFISH:
|
|
889 print "\nStarting glassfish.\n";
|
|
890
|
|
891 unless ( ($exit_code=system ($glassfish_dir."/bin/asadmin start-domain domain1")) == 0 )
|
|
892 {
|
|
893 print STDERR "Could not start glassfish!\n";
|
|
894 print STDERR "(exit code: " . $exitcode . ")\n";
|
|
895 exit 1;
|
|
896 }
|
|
897
|
|
898
|
|
899 # check if glassfish is running:
|
|
900 # TODO.
|
|
901
|
|
902 # 6. DEPLOY APPLICATION:
|
|
903 # 6a. DO WE HAVE ANT?
|
|
904 # (we are no longer using ant to deply -- L.A.)
|
|
905 #
|
|
906 #$sys_path = $ENV{'PATH'};
|
|
907 #@sys_path_dirs = split ( ":", $sys_path );
|
|
908
|
|
909 #$ant_exec = "";
|
|
910 #
|
|
911 #for $sys_path_dir ( @sys_path_dirs )
|
|
912 #{
|
|
913 # if ( -x $sys_path_dir . "/ant" )
|
|
914 # {
|
|
915 # $ant_exec = $sys_path_dir . "/ant";
|
|
916 # last;
|
|
917 # }
|
|
918 #}
|
|
919 #
|
|
920 #if ( $ant_exec eq "" )
|
|
921 #{
|
|
922 # print STDERR "\nERROR: I haven't been able to find ant command in your PATH!\n";
|
|
923 # print STDERR "Please make sure and is installed and in your PATH; then try again.\n\n";
|
|
924 #
|
|
925 # exit 1;
|
|
926 #}
|
|
927 # 6b. TRY TO DEPLOY:
|
|
928
|
|
929 print "\nAttempting to deploy the application:\n\n";
|
|
930
|
|
931 $CONFIG_DEFAULTS{'GLASSFISH_ADMIN_PASSWORD'} = 'adminadmin';
|
|
932 # TODO: ask for password! -- in case they have already changed it
|
|
933 # (update: chances are we don't even need the password anymore, as
|
|
934 # long as we are deploying locally (?))
|
|
935
|
|
936 my $glassfish_password = $CONFIG_DEFAULTS{'GLASSFISH_ADMIN_PASSWORD'};
|
|
937
|
|
938 # create deployment properties files:
|
|
939 # (these properties files are no longer used, because we are no longer
|
|
940 # using ant to deploy the app. -- L.A.)
|
|
941
|
|
942 #for $prop_file ('AS', 'glassfish')
|
|
943 #{
|
|
944 # open ( TEMPLIN, "appdeploy/" . $prop_file . ".properties.TEMPLATE" )
|
|
945 # || die "failed to open appdeploy/" . $prop_file . ".properties.TEMPLATE";
|
|
946 # open ( PROPOUT, ">appdeploy/" . $prop_file . ".properties" )
|
|
947 # || die "failed to open appdeploy/" . $prop_file . ".properties for writing";
|
|
948 #
|
|
949 # while( <TEMPLIN> )
|
|
950 # {
|
|
951 # s/%GF_ADMIN_PASSWORD%/$glassfish_password/g;
|
|
952 # s/%GF_ROOT_DIR%/$glassfish_dir/g;
|
|
953 # print PROPOUT $_;
|
|
954 # }
|
|
955 #
|
|
956 # close TEMPLIN;
|
|
957 # close PROPOUT;
|
|
958 #}
|
|
959
|
|
960 # Create the .asadminpass file, or replace it, if exists:
|
|
961
|
|
962 $asadminpass_file = $ENV{'HOME'} . "/.asadminpass";
|
|
963
|
|
964 if ( -e $asadminpass_file )
|
|
965 {
|
|
966 system ("/bin/mv -f " . $asadminpass_file . " " . $asadminpass_file . ".PRESERVED");
|
|
967 }
|
|
968
|
|
969 system ("echo 'asadmin://admin@localhost:4848 ' > " . $asadminpass_file);
|
|
970
|
|
971 $deploy_command = $glassfish_dir."/bin/asadmin deploy --force=true --name=DVN-web dist/DVN-web.war";
|
|
972
|
|
973 unless ( ($exit_code = system ("cd appdeploy; " . $deploy_command)) == 0 )
|
|
974 {
|
|
975 print STDERR "Could not deploy DVN application!\n";
|
|
976 print STDERR "(exit code: " . $exitcode . ")\n";
|
|
977 exit 1;
|
|
978 }
|
|
979
|
|
980 if ( $pg_local_connection )
|
|
981 {
|
|
982 print "\nOK; now we are going to stop glassfish and populate the database with\n";
|
|
983 print "some initial content, then start glassfish again.\n";
|
|
984 }
|
|
985 else
|
|
986 {
|
|
987 print "\nOK; stopping glasfish.\n";
|
|
988 }
|
|
989
|
|
990
|
|
991 # 6c. SHUT DOWN:
|
|
992
|
|
993 $gf_stop_command = $glassfish_dir."/bin/asadmin stop-domain domain1";
|
|
994
|
|
995 unless ( ($exit_code = system ($gf_stop_command)) == 0 )
|
|
996 {
|
|
997 print STDERR "Could not stop glassfish!\n";
|
|
998 print STDERR "(command line: " . $gf_stop_command . ")\n";
|
|
999 print STDERR "(exit code: " . $exitcode . ")\n";
|
|
1000 print STDERR "\nPlease finish the installation process manually: \n";
|
|
1001 print STDERR "stop/kill glassfish; then populate the database with \n";
|
|
1002 print STDERR "the supplied initial content, by executing the following \n";
|
|
1003 print STDERR "command, *as Unix user postgres*: \n\n";
|
|
1004
|
|
1005 $psql_command = $psql_exec . "/psql -d $CONFIG_DEFAULTS{'POSTGRES_DATABASE'} -f " . $SQL_REFERENCE_DATA;
|
|
1006
|
|
1007 print STDERR $psql_command . "\n\n";
|
|
1008 print STDERR "Then start glassfish again... Voila, you should then have \n";
|
|
1009 print STDERR "a running DVN instance at the following URL:\n\n";
|
|
1010 print STDERR " http://" . $CONFIG_DEFAULTS{'HOST_DNS_ADDRESS'} . "/dvn\n";
|
|
1011
|
|
1012 print STDERR "\naborting the installer... (sorry!)\n";
|
|
1013
|
|
1014 exit 1;
|
|
1015 }
|
|
1016
|
|
1017 # 7. POPULATE DATABASE:
|
|
1018
|
|
1019 if ( $pg_local_connection )
|
|
1020 {
|
|
1021 # 7a. POPULATE LOCALLY:
|
|
1022 print "\nPopulating the database (local PostgresQL instance):\n\n";
|
|
1023
|
|
1024 # Copy the SQL file to /tmp, where user postgres will definitely
|
|
1025 # have read access to it:
|
|
1026
|
|
1027 copy("referenceData.sql","/tmp") or die "Could not copy referenceData.sql to /tmp: $!";
|
|
1028
|
|
1029 $< = $POSTGRES_SYS_UID;
|
|
1030 $> = $POSTGRES_SYS_UID;
|
|
1031 chdir ("/tmp");
|
|
1032 $psql_command = $psql_exec . "/psql -d $CONFIG_DEFAULTS{'POSTGRES_DATABASE'} -f referenceData.sql";
|
|
1033
|
|
1034 unless ( ($exitcode = system("$psql_command")) == 0 )
|
|
1035 {
|
|
1036 print STDERR "Could not populate Postgres database for the DVN app!\n";
|
|
1037 print STDERR "(command: " . $psql_command . ")\n";
|
|
1038 print STDERR "(psql exit code: " . $exitcode . ")\n";
|
|
1039 print STDERR "\nYou must populate the database before you can use your new\n";
|
|
1040 print STDERR "DVN instance. Please consult the installation manual and/or\n";
|
|
1041 print STDERR "seek support from the DVN team.\n\n";
|
|
1042 exit 1;
|
|
1043
|
|
1044 }
|
|
1045
|
|
1046 chdir ($cwd);
|
|
1047 print "\nOK, done!\n";
|
|
1048
|
|
1049 }
|
|
1050 else
|
|
1051 {
|
|
1052 # 7b. INSTRUCT THE USER TO POPULATE THE DB ON THE REMOTE SERVER:
|
|
1053 # NOT SUPPORTED YET -- TODO
|
|
1054 print "The database needs to be populated with some intial content \n";
|
|
1055 print "before we restart the DVN one last time. \n";
|
|
1056 print "However, populating a database on a remote PostgresQL server ";
|
|
1057 print "is not supported yet!\n";
|
|
1058 print "Please copy the file referenceData.sql (found in this directory)\n";
|
|
1059 print "onto the remote server and populate the database manually,\n";
|
|
1060 print "as user postgres, with the following command:\n\n";
|
|
1061 print " psql -d $CONFIG_DEFAULTS{'POSTGRES_DATABASE'} -f referenceData.sql\n";
|
|
1062 print "then start glassfish again on this server with \n\n";
|
|
1063 print " " . $glassfish_dir."/bin/asadmin start-domain domain1\n\n";
|
|
1064
|
|
1065 $> = 0;
|
|
1066 $< = 0;
|
|
1067
|
|
1068 exit 0;
|
|
1069
|
|
1070 }
|
|
1071
|
|
1072 # back to root:
|
|
1073
|
|
1074 $> = 0;
|
|
1075 $< = 0;
|
|
1076
|
|
1077 # 8. START GLASSFISH AGAIN:
|
|
1078 print "\nStarting glassfish, again:\n\n";
|
|
1079
|
|
1080 $gf_start_command = $glassfish_dir."/bin/asadmin start-domain domain1";
|
|
1081
|
|
1082 # delete the EJB TIMER app lock file, if exists (just in case!):
|
|
1083 system ( "/bin/rm -f ".$glassfish_dir."/glassfish/domains/domain1/generated/ejb-timer-service-app" );
|
|
1084
|
|
1085 unless ( ($exit_code = system ($gf_start_command)) == 0 )
|
|
1086 {
|
|
1087 print STDERR "Could not start glassfish!\n";
|
|
1088 print STDERR "(command line: " . $gf_start_command . ")\n";
|
|
1089 print STDERR "(exit code: " . $exit_code . ")\n";
|
|
1090 exit 1;
|
|
1091 }
|
|
1092
|
|
1093
|
|
1094 print "\nYou should now have a running DVN instance;\n";
|
|
1095 print "Please go to the application at the following URL:\n\n";
|
|
1096 print " http://" . $CONFIG_DEFAULTS{'HOST_DNS_ADDRESS'} . "/dvn\n";
|
|
1097 print "\nand log in by using \"networkAdmin\" as both the user name\n";
|
|
1098 print "and password. Click the \"networkAdmin\" link on the right side\n";
|
|
1099 print "Of the main screen, then click \"Update Account\". Change this\n";
|
|
1100 print "default password and default e-mail address.\n";
|
|
1101
|
|
1102 # 9. FINALLY, CHECK IF RSERVE IS RUNNING:
|
|
1103 print "\n\nFinally, checking if Rserve is running and accessible...\n";
|
|
1104
|
|
1105 unless ( $CONFIG_DEFAULTS{'RSERVE_PORT'}=~/^[0-9][0-9]*$/ )
|
|
1106 {
|
|
1107 print $CONFIG_DEFAULTS{'RSERVE_HOST'} . " does not look like a valid port number,\n";
|
|
1108 print "defaulting to 6311.\n\n";
|
|
1109
|
|
1110 $CONFIG_DEFAULTS{'RSERVE_PORT'} = 6311;
|
|
1111 }
|
|
1112
|
|
1113 my ( $rserve_iaddr, $rserve_paddr, $rserve_proto );
|
|
1114
|
|
1115 unless ( $rserve_iaddr = inet_aton($CONFIG_DEFAULTS{'RSERVE_HOST'}) )
|
|
1116 {
|
|
1117 print STDERR "Could not look up $CONFIG_DEFAULTS{'RSERVE_HOST'},\n";
|
|
1118 print STDERR "the host you specified as your R server.\n";
|
|
1119 print STDERR "\nDVN can function without a working R server, but\n";
|
|
1120 print STDERR "much of the functionality concerning running statistics\n";
|
|
1121 print STDERR "and analysis on quantitative data will not be available.\n";
|
|
1122 print STDERR "Please consult the Installers guide for more info.\n";
|
|
1123
|
|
1124 exit 0;
|
|
1125 }
|
|
1126
|
|
1127 $rserve_paddr = sockaddr_in($CONFIG_DEFAULTS{'RSERVE_PORT'}, $rserve_iaddr);
|
|
1128 $rserve_proto = getprotobyname('tcp');
|
|
1129
|
|
1130 unless ( socket(SOCK, PF_INET, SOCK_STREAM, $rserve_proto) &&
|
|
1131 connect(SOCK, $rserve_paddr) )
|
|
1132 {
|
|
1133 print STDERR "Could not establish connection to $CONFIG_DEFAULTS{'RSERVE_HOST'}\n";
|
|
1134 print STDERR "on port $CONFIG_DEFAULTS{'RSERVE_PORT'}, the address you provided\n";
|
|
1135 print STDERR "for your R server.\n";
|
|
1136 print STDERR "DVN can function without a working R server, but\n";
|
|
1137 print STDERR "much of the functionality concerning running statistics\n";
|
|
1138 print STDERR "and analysis on quantitative data will not be available.\n";
|
|
1139 print STDERR "Please consult the \"Installing R\" section in the Installers guide\n";
|
|
1140 print STDERR "for more info.\n";
|
|
1141
|
|
1142 exit 0;
|
|
1143
|
|
1144 }
|
|
1145
|
|
1146 close (SOCK);
|
|
1147 print "\nOK!\n";
|
|
1148
|
|
1149 exit 0;
|
|
1150
|
|
1151
|
|
1152 sub create_pg_hash {
|
|
1153 local $pg_username = shift @_;
|
|
1154 local $pg_password = shift @_;
|
|
1155
|
|
1156 $encode_line = $pg_password . $pg_username;
|
|
1157
|
|
1158 # for Redhat:
|
|
1159
|
|
1160 ##print STDERR "executing /bin/echo -n $encode_line | md5sum\n";
|
|
1161
|
|
1162 if ( $WORKING_OS eq "MacOSX" )
|
|
1163 {
|
|
1164 $hash = `/bin/echo -n $encode_line | md5`;
|
|
1165 }
|
|
1166 else
|
|
1167 {
|
|
1168 $hash = `/bin/echo -n $encode_line | md5sum`;
|
|
1169 }
|
|
1170
|
|
1171 chop $hash;
|
|
1172
|
|
1173 $hash =~s/ \-$//;
|
|
1174
|
|
1175 if ( (length($hash) != 32) || ($hash !~ /^[0-9a-f]*$/) )
|
|
1176 {
|
|
1177 print STDERR "Failed to generate a MD5-encrypted password hash for the Postgres database.\n";
|
|
1178 exit 1;
|
|
1179 }
|
|
1180
|
|
1181
|
|
1182 return $hash;
|
|
1183 }
|