Parent Directory
|
Revision Log
Revision 168 - (view) (download) (as text)
| 1 : | sh002i | 168 | #!/usr/local/bin/perl |
| 2 : | |||
| 3 : | ################################################################################ | ||
| 4 : | # WeBWorK | ||
| 5 : | # | ||
| 6 : | # Copyright (c) 1995-2001 WeBWorK Team, University of Rochester | ||
| 7 : | # All rights reserved | ||
| 8 : | # | ||
| 9 : | # $Id$ | ||
| 10 : | ################################################################################ | ||
| 11 : | |||
| 12 : | #################### initialization | ||
| 13 : | |||
| 14 : | require 5.000; | ||
| 15 : | use Cwd; | ||
| 16 : | use File::Copy; | ||
| 17 : | use File::Find; | ||
| 18 : | use FindBin; | ||
| 19 : | |||
| 20 : | # get the base (webwork/) directory | ||
| 21 : | my $BASE_DIR = $FindBin::Bin; | ||
| 22 : | |||
| 23 : | # define built-in defaults | ||
| 24 : | my $DEFAULT_PERL_PATH = '/usr/bin/perl'; | ||
| 25 : | my $DEFAULT_CGI_URL = '/cgi-bin/webwork/system/'; | ||
| 26 : | my $DEFAULT_HTML_URL = '/webwork_system_html/'; | ||
| 27 : | my $DEFAULT_ADMIN_GROUP = 'wwadmin'; | ||
| 28 : | |||
| 29 : | # define code strings | ||
| 30 : | my $CGI_DEBUG_TAG = 'WeBWorKCGIDebugURL'; | ||
| 31 : | my $CGI_NODEBUG_TAG = 'WeBWorKCGINoDebugURL'; | ||
| 32 : | my $LIB_INIT_LINE_TAG = 'WeBWorKInitLine'; | ||
| 33 : | |||
| 34 : | # scope and undefine setup variables | ||
| 35 : | $no_prompts = undef; | ||
| 36 : | $system_setup_mode = undef; | ||
| 37 : | $mainDir = undef; | ||
| 38 : | $perlPath = undef; | ||
| 39 : | $cgiURL = undef; | ||
| 40 : | $htmlURL = undef; | ||
| 41 : | $groupName = undef; | ||
| 42 : | $update_stuff_in_courses = undef; | ||
| 43 : | $chgrp_files_and_dirs = undef; | ||
| 44 : | $chmod_files_and_dirs = undef; | ||
| 45 : | $local_preprocessor = undef; | ||
| 46 : | $local_postprocessor = undef; | ||
| 47 : | |||
| 48 : | # read defaults in from defaults file | ||
| 49 : | my $DEFAULTS_FILE; | ||
| 50 : | if($ARGV[0] and $ARGV[0] eq '-d') { | ||
| 51 : | if($ARGV[1]) { $DEFAULTS_FILE = $ARGV[1]; } | ||
| 52 : | else { $DEFAULTS_FILE = ((getpwuid $<)[7]) . '/system_webwork_setup.defaults'; } | ||
| 53 : | if(-e $DEFAULTS_FILE) { | ||
| 54 : | print "Reading defaults file..."; | ||
| 55 : | require $DEFAULTS_FILE; | ||
| 56 : | print " done.\n"; | ||
| 57 : | } | ||
| 58 : | } | ||
| 59 : | |||
| 60 : | #################### text strings | ||
| 61 : | |||
| 62 : | my $INTRO_TEXT = q{ | ||
| 63 : | +----------------------+ | ||
| 64 : | | System Webwork Setup | | ||
| 65 : | +----------------------+ | ||
| 66 : | |||
| 67 : | This script is used to setup the main WeBWorK system. It will create | ||
| 68 : | initialization files, set groups and permissions for files and directories, | ||
| 69 : | and modify files. A "demo" or "working" version of the system can be setup. | ||
| 70 : | |||
| 71 : | You will need the following information: | ||
| 72 : | |||
| 73 : | 1) The path to perl on your system. Usually this is something like | ||
| 74 : | /usr/bin/perl or /usr/local/bin/perl | ||
| 75 : | |||
| 76 : | 2) The group (e.g. wwadmin) containing the user names of anyone who has the | ||
| 77 : | authority to modify the webwork system files. Who ever runs this script must | ||
| 78 : | be a member of this group. This should be set up by your system | ||
| 79 : | administrator before running this script. (Note: This is not required for a | ||
| 80 : | demo version.) | ||
| 81 : | |||
| 82 : | 3) The cgi WeBWorK URL. Usually this is something like | ||
| 83 : | http://webwork.math.rochester.edu/cgi-bin/webwork/system. In the above | ||
| 84 : | cases, you can just enter /cgi-bin/webwork/system which is prefered but | ||
| 85 : | if you do, don't forget the initial / . | ||
| 86 : | |||
| 87 : | 4) The html WeBWorK URL. Usually this is something like | ||
| 88 : | http://webwork.math.rochester.edu/webwork_system_html. Again in this | ||
| 89 : | case /webwork_system_html is prefered. | ||
| 90 : | |||
| 91 : | }; | ||
| 92 : | |||
| 93 : | my $MODE_TEXT = q{ | ||
| 94 : | |||
| 95 : | You can set up a "working" or a "demo" WeBWorK system. A "demo" system | ||
| 96 : | should only be used as a sample system, never for a system that will be used | ||
| 97 : | with actual courses with real students. The main difference between a | ||
| 98 : | "working" version and a "demo" version is that in a "working" version you | ||
| 99 : | will be promped to enter a group (e.g. wwadmin) where as in a "demo" | ||
| 100 : | version, the group will be set yo your own default group (e.g. fac). Anyone | ||
| 101 : | in the group will have permission to modify all webwork files. You can set | ||
| 102 : | up "working" and "demo" courses under either a "working" or a "demo" system, | ||
| 103 : | but normally you would not set up a "working" course under a "demo" system. | ||
| 104 : | |||
| 105 : | }; | ||
| 106 : | |||
| 107 : | my $MAIN_DIR_TEXT = q{ | ||
| 108 : | |||
| 109 : | The directory containing the WeBWorK system files (as well as this | ||
| 110 : | script) is known as the system directory. In order to modify system | ||
| 111 : | files, I need to know the location of the system directory for this | ||
| 112 : | installation. | ||
| 113 : | |||
| 114 : | }; | ||
| 115 : | |||
| 116 : | my $PERL_TEXT = q{ | ||
| 117 : | |||
| 118 : | WeBWorK needs to know the path of your perl binary, so that this | ||
| 119 : | information can be used in the headers of cgi scripts. Please make sure | ||
| 120 : | that the version of perl you specify is 5.004 or later. | ||
| 121 : | |||
| 122 : | }; | ||
| 123 : | |||
| 124 : | my $CGI_URL_TEXT = q{ | ||
| 125 : | |||
| 126 : | In order for generated HTML to be able to invoke CGI scripts, WeBWorK | ||
| 127 : | needs to know the URL which points to the main WeBWorK system cgi | ||
| 128 : | subdirectory. For example, | ||
| 129 : | http://webwork.math.rochester.edu.edu/cgi-bin/webwork/system might be a | ||
| 130 : | valid CGI URL. If both static HTML and CGIs reside on the same host | ||
| 131 : | (which is true in most cases), you can omit the | ||
| 132 : | http://webwork.math.rochester.edu section of the URL. Make sure to | ||
| 133 : | include a leading slash in this case. | ||
| 134 : | |||
| 135 : | }; | ||
| 136 : | |||
| 137 : | my $HTML_URL_TEXT = q{ | ||
| 138 : | |||
| 139 : | WeBWorK also needs to know the URL of the main HTML directory, the | ||
| 140 : | system html subdirectory. For example, | ||
| 141 : | http://webwork.math.rochester.edu/webwork_system_html or | ||
| 142 : | /webwork_system_html. | ||
| 143 : | |||
| 144 : | }; | ||
| 145 : | |||
| 146 : | my $GROUP_TEXT = q{ | ||
| 147 : | |||
| 148 : | WeBWorK needs to know what the admin group is. This group should have been | ||
| 149 : | set up by your system administrator and must contain at least your user ID. | ||
| 150 : | All files and directories created will have this as their group. | ||
| 151 : | |||
| 152 : | }; | ||
| 153 : | |||
| 154 : | my $COURSE_PERMS_TEXT = q{ | ||
| 155 : | |||
| 156 : | You have the option to set permissions for the courses directory. If this is | ||
| 157 : | an inital setup, you should probably do so. If this is not an initial setup, | ||
| 158 : | the courses directory is already set up, or the courses directory is shared | ||
| 159 : | between WeBWorK installations, your probably shouldn't. | ||
| 160 : | |||
| 161 : | }; | ||
| 162 : | |||
| 163 : | my $CHGRP_TEXT = q{ | ||
| 164 : | |||
| 165 : | You have to option to set the group for all system files and directories. If | ||
| 166 : | this is an initial setup, you should probably do this. If this is not an | ||
| 167 : | initial setup, or you have customized the way system files should be | ||
| 168 : | grouped, you probably shoudn't. | ||
| 169 : | |||
| 170 : | }; | ||
| 171 : | |||
| 172 : | my $CHMOD_TEXT = q{ | ||
| 173 : | |||
| 174 : | You have to option to set the permissions for all system files and | ||
| 175 : | directories. If this is an initial setup, you should probably do this. If | ||
| 176 : | this is not an initial setup, or you have customized the permissions for the | ||
| 177 : | system files, you probably shoudn't. | ||
| 178 : | |||
| 179 : | }; | ||
| 180 : | |||
| 181 : | my $CONFIRM_TEXT = q{ | ||
| 182 : | |||
| 183 : | Now that I have the necessary information, I can begin modifying the WeBWorK | ||
| 184 : | system files. | ||
| 185 : | |||
| 186 : | }; | ||
| 187 : | |||
| 188 : | my $DONE_TEXT = q{ | ||
| 189 : | |||
| 190 : | The system setup script is done. Please read the above messages | ||
| 191 : | carefully to determine if there have been any errors. If so, correct the | ||
| 192 : | problem (usually a permissions problem) and run this script again. | ||
| 193 : | |||
| 194 : | }; | ||
| 195 : | |||
| 196 : | |||
| 197 : | |||
| 198 : | |||
| 199 : | |||
| 200 : | ################################################################################ | ||
| 201 : | ########## Ask some questions, perform some logic. ############################# | ||
| 202 : | ################################################################################ | ||
| 203 : | |||
| 204 : | |||
| 205 : | |||
| 206 : | |||
| 207 : | |||
| 208 : | #################### introduction | ||
| 209 : | |||
| 210 : | my $temp; | ||
| 211 : | |||
| 212 : | unless($no_prompts) { | ||
| 213 : | page($INTRO_TEXT); | ||
| 214 : | $temp = questionChar("Do you want to continue with setup?", 'y', 'y', 'n'); | ||
| 215 : | exit unless $temp eq 'y'; | ||
| 216 : | } | ||
| 217 : | print "Okay, here we go...\n"; | ||
| 218 : | |||
| 219 : | #################### working or demo? | ||
| 220 : | |||
| 221 : | unless(defined $system_setup_mode) { | ||
| 222 : | page($MODE_TEXT); | ||
| 223 : | $temp = questionChar("Shall we set up a working version or a demo version?", 'w', 'w', 'd'); | ||
| 224 : | $system_setup_mode = "working" if $temp eq 'w'; | ||
| 225 : | $system_setup_mode = "demo" if $temp eq 'd'; | ||
| 226 : | } | ||
| 227 : | print "System setup mode is: $system_setup_mode\n"; | ||
| 228 : | |||
| 229 : | #################### main directory | ||
| 230 : | |||
| 231 : | unless(defined $mainDir) { | ||
| 232 : | page($MAIN_DIR_TEXT); | ||
| 233 : | $mainDir = questionString("Where is the WeBWorK system directory?", "$BASE_DIR/system/"); | ||
| 234 : | $mainDir .= '/' unless $mainDir =~ m|/$|; # ensure trailing slash | ||
| 235 : | } | ||
| 236 : | print "We'll use $mainDir as WeBWorK's system directory.\n"; | ||
| 237 : | |||
| 238 : | #################### perl path | ||
| 239 : | |||
| 240 : | unless(defined $perlPath) { | ||
| 241 : | page($PERL_TEXT); | ||
| 242 : | $perlPath = questionString("What is the full path to PERL?", $DEFAULT_PERL_PATH); | ||
| 243 : | } | ||
| 244 : | print "Path to PERL binary is: $perlPath\n"; | ||
| 245 : | |||
| 246 : | #################### CGI URL | ||
| 247 : | |||
| 248 : | unless(defined $cgiURL) { | ||
| 249 : | page($CGI_URL_TEXT); | ||
| 250 : | while (1) { | ||
| 251 : | $cgiURL = questionString("What is the CGI URL?", $DEFAULT_CGI_URL); | ||
| 252 : | if( ($cgiURL =~ m|^/|) or ($cgiURL =~ m|^http://|) ) { | ||
| 253 : | last; | ||
| 254 : | } else { | ||
| 255 : | $temp = questionChar("That doesn't look like a valid URL. Would you like to use it anyway?", 'n', 'y', 'n'); | ||
| 256 : | last if $temp eq 'y'; | ||
| 257 : | } | ||
| 258 : | } | ||
| 259 : | $cgiURL .= "/" unless $cgiURL =~ m"/$"; # ensure trailing slash | ||
| 260 : | } | ||
| 261 : | print "CGI URL is: $cgiURL\n"; | ||
| 262 : | |||
| 263 : | #################### HTML URL | ||
| 264 : | |||
| 265 : | unless(defined $htmlURL) { | ||
| 266 : | page($HTML_URL_TEXT); | ||
| 267 : | while (1) { | ||
| 268 : | $htmlURL = questionString("What is the HTML URL?", $DEFAULT_HTML_URL); | ||
| 269 : | if( ($htmlURL =~ m|^/|) or ($htmlURL =~ m|^http://|) ) { | ||
| 270 : | last; | ||
| 271 : | } else { | ||
| 272 : | $temp = questionChar("That doesn't look like a valid URL. Would you like to use it anyway?", 'n', 'y', 'n'); | ||
| 273 : | last if $temp eq 'y'; | ||
| 274 : | } | ||
| 275 : | } | ||
| 276 : | $htmlURL .= "/" unless $htmlURL =~ m"/$" ; | ||
| 277 : | } | ||
| 278 : | print "HTML URL is: $htmlURL\n"; | ||
| 279 : | |||
| 280 : | #################### admin group | ||
| 281 : | |||
| 282 : | unless(defined $groupName) { | ||
| 283 : | my ($userName, $userGID) = (getpwuid $<)[0,3]; | ||
| 284 : | my $userGroupName = (getgrgid $userGID)[0]; | ||
| 285 : | |||
| 286 : | if ($system_setup_mode eq 'demo') { | ||
| 287 : | # in demo mode, the group is set to the user's primary group | ||
| 288 : | $groupName = $userGroupName; | ||
| 289 : | } else { | ||
| 290 : | # in working mode, we get to chose | ||
| 291 : | page($GROUP_TEXT); | ||
| 292 : | my $validGroup = 0; | ||
| 293 : | while(1) { | ||
| 294 : | $groupName = questionString("What is the admin group name?", $DEFAULT_ADMIN_GROUP); | ||
| 295 : | my @members = split / /, (getgrnam $groupName)[3]; | ||
| 296 : | if($groupName eq $userGroupName) { | ||
| 297 : | print "$groupName is ${userName}'s primary group. Good.\n"; | ||
| 298 : | } elsif(grep /$userName/, @members) { | ||
| 299 : | print "$userName is a member of $groupName. Good.\n"; | ||
| 300 : | last; | ||
| 301 : | } elsif($< == 0) { # we're root! | ||
| 302 : | print "$userName isn't a member of $groupName, but you're root, so who cares?\n"; | ||
| 303 : | last; | ||
| 304 : | } else { | ||
| 305 : | print "That group is not valid. Please make sure the group exists and you are a member.\n"; | ||
| 306 : | } | ||
| 307 : | } | ||
| 308 : | } | ||
| 309 : | } | ||
| 310 : | print "Admin group is: $groupName\n"; | ||
| 311 : | |||
| 312 : | #################### chmod courses directory | ||
| 313 : | |||
| 314 : | unless(defined $update_stuff_in_courses) { | ||
| 315 : | page($COURSE_PERMS_TEXT); | ||
| 316 : | $temp = questionChar("Do you want to set default $system_setup_mode permissions for the courses directory?", 'y', 'y', 'n'); | ||
| 317 : | $update_stuff_in_courses = ($temp eq 'y'); | ||
| 318 : | } | ||
| 319 : | print "Permissions ", ($update_stuff_in_courses ? "will" : "will not"), " be set for the courses directory.\n"; | ||
| 320 : | |||
| 321 : | |||
| 322 : | #################### chgrp files/directories | ||
| 323 : | |||
| 324 : | $system_setup_mode eq "demo" and $chgrp_files_and_dirs = 1; | ||
| 325 : | unless(defined $chgrp_files_and_dirs) { | ||
| 326 : | page($CHGRP_TEXT); | ||
| 327 : | $temp = questionChar("Do you want to set the group for system files and directories?", 'y', 'y', 'n'); | ||
| 328 : | $chgrp_files_and_dirs = ($temp eq 'y'); | ||
| 329 : | } | ||
| 330 : | print "Group ", ($chgrp_files_and_dirs ? "will" : "will not"), " be set for system files and directories.\n"; | ||
| 331 : | |||
| 332 : | #################### chmod files/directories | ||
| 333 : | |||
| 334 : | $system_setup_mode eq "demo" and $chmod_files_and_dirs = 1; | ||
| 335 : | unless(defined $chmod_files_and_dirs) { | ||
| 336 : | page($CHMOD_TEXT); | ||
| 337 : | $temp = questionChar("Do you want to set the permissions for system files and directories?", 'y', 'y', 'n'); | ||
| 338 : | $chmod_files_and_dirs = ($temp eq 'y'); | ||
| 339 : | } | ||
| 340 : | print "Permissions ", ($chmod_files_and_dirs ? "will" : "will not"), " be set for system files and directories.\n"; | ||
| 341 : | |||
| 342 : | #################### make sure we want to actually do this | ||
| 343 : | |||
| 344 : | unless($no_prompts) { | ||
| 345 : | print $CONFIRM_TEXT; | ||
| 346 : | $temp = questionChar("Do you want to continue with setup?", 'y', 'y', 'n'); | ||
| 347 : | exit unless $temp eq 'y'; | ||
| 348 : | } | ||
| 349 : | print "\Going to make changes now...\n\n"; | ||
| 350 : | |||
| 351 : | |||
| 352 : | |||
| 353 : | |||
| 354 : | |||
| 355 : | ################################################################################ | ||
| 356 : | ########## Now we start changing things... ##################################### | ||
| 357 : | ################################################################################ | ||
| 358 : | |||
| 359 : | |||
| 360 : | |||
| 361 : | |||
| 362 : | |||
| 363 : | #################### run local preprocessor | ||
| 364 : | |||
| 365 : | if(defined $local_preprocessor) { | ||
| 366 : | print "Executing local preprocessor...\n"; | ||
| 367 : | &$local_preprocessor; | ||
| 368 : | print "Done with local preprocessor.\n"; | ||
| 369 : | } | ||
| 370 : | |||
| 371 : | #################### update #! and use lines | ||
| 372 : | # uses: $mainDir, $perlPath | ||
| 373 : | |||
| 374 : | print "Fixing #! lines...\n"; | ||
| 375 : | |||
| 376 : | foreach my $dir ("${mainDir}cgi/cgi-scripts", "${mainDir}scripts", "${mainDir}courseScripts") { | ||
| 377 : | foreach my $file (<${dir}/*.pl>) { | ||
| 378 : | fixFile($file); | ||
| 379 : | } | ||
| 380 : | } | ||
| 381 : | |||
| 382 : | sub fixFile | ||
| 383 : | { | ||
| 384 : | my ($file) = @_; | ||
| 385 : | |||
| 386 : | # read the file | ||
| 387 : | open FILE, $file || die "Couldn't open $file for reading."; | ||
| 388 : | my @lines = <FILE>; | ||
| 389 : | close FILE || die "Couldn't close $file after reading."; | ||
| 390 : | |||
| 391 : | # fix perl path | ||
| 392 : | $lines[0] =~ m/^#!(\S*)/; | ||
| 393 : | if($1 ne $perlPath) { | ||
| 394 : | $lines[0] =~ s/^#!\S*/#!$perlPath/; | ||
| 395 : | open FILE, ">$file" || die "Couldn't open $file for writing."; | ||
| 396 : | print FILE @lines; | ||
| 397 : | close FILE || die "Couldn't close $file for writing."; | ||
| 398 : | } | ||
| 399 : | } | ||
| 400 : | |||
| 401 : | print "done fixing #! and \"use\" lines.\n\n"; | ||
| 402 : | |||
| 403 : | #################### write webworkConfig.pm file | ||
| 404 : | # uses: $mainDir, $cgiURL, $htmlURL | ||
| 405 : | |||
| 406 : | print "Writing lib/webworkConfig.pm file...\n"; | ||
| 407 : | open CONFIG_FILE, ">${mainDir}lib/webworkConfig.pm"; | ||
| 408 : | print CONFIG_FILE<<END_OF_CONFIG_FILE; | ||
| 409 : | package Global; | ||
| 410 : | |||
| 411 : | ################################################################################ | ||
| 412 : | # WeBWorK | ||
| 413 : | # | ||
| 414 : | # Copyright (c) 1995-2001 WeBWorK Team, University of Rochester | ||
| 415 : | # All rights reserved | ||
| 416 : | ################################################################################ | ||
| 417 : | |||
| 418 : | \$mainDirectory = "$mainDir"; | ||
| 419 : | \$htmlWebworkURL = "$htmlURL"; | ||
| 420 : | \$cgiWebworkURL = "${cgiURL}"; | ||
| 421 : | \$cgiWebworkURL .= "cgi-scripts/" unless \$cgiDebugMode; | ||
| 422 : | |||
| 423 : | 1; | ||
| 424 : | END_OF_CONFIG_FILE | ||
| 425 : | close CONFIG_FILE; | ||
| 426 : | print "Done writing lib/webworkConfig.pm file.\n\n"; | ||
| 427 : | |||
| 428 : | #################### write webworkInit.pm files | ||
| 429 : | # uses: $mainDir | ||
| 430 : | |||
| 431 : | print "Writing webworkInit.pm files...\n"; | ||
| 432 : | foreach my $dir ('cgi/', 'cgi/cgi-scripts/', 'scripts/', 'courseScripts/') { | ||
| 433 : | open INIT_FILE, ">$mainDir${dir}webworkInit.pm"; | ||
| 434 : | print INIT_FILE<<END_OF_INIT_FILE; | ||
| 435 : | ################################################################################ | ||
| 436 : | # WeBWorK | ||
| 437 : | # | ||
| 438 : | # Copyright (c) 1995-2001 WeBWorK Team, University of Rochester | ||
| 439 : | # All rights reserved | ||
| 440 : | ################################################################################ | ||
| 441 : | |||
| 442 : | use lib '${mainDir}lib/'; | ||
| 443 : | |||
| 444 : | 1; | ||
| 445 : | END_OF_INIT_FILE | ||
| 446 : | close INIT_FILE; | ||
| 447 : | } | ||
| 448 : | print "Done writing webworkInit.pm files.\n\n"; | ||
| 449 : | |||
| 450 : | #################### chgrp system stuff | ||
| 451 : | # uses: $chgrp_files_and_dirs, $groupName | ||
| 452 : | |||
| 453 : | if($chgrp_files_and_dirs) { | ||
| 454 : | print "Setting group on system files and directories...\n"; | ||
| 455 : | system "chgrp -R $groupName $mainDir"; | ||
| 456 : | system "chgrp -R $groupName $BASE_DIR/system_html"; | ||
| 457 : | print "Done setting group.\n\n"; | ||
| 458 : | } | ||
| 459 : | |||
| 460 : | #################### chmod system stuff | ||
| 461 : | # uses: $chmod_files_and_dirs | ||
| 462 : | |||
| 463 : | if($chmod_files_and_dirs) { | ||
| 464 : | print "Setting permissions on system files and directories for $system_setup_mode mode...\n"; | ||
| 465 : | if ($system_setup_mode eq "demo") { | ||
| 466 : | # get some general permissions for files and directories | ||
| 467 : | system "find $mainDir $BASE_DIR/system_html -type d -print0 | xargs -0 chmod 0755"; | ||
| 468 : | system "find $mainDir $BASE_DIR/system_html -type f -print0 | xargs -0 chmod 0644"; | ||
| 469 : | # add executable privs to scripts | ||
| 470 : | system "find ${mainDir}cgi ${mainDir}scripts -type f -print0 | xargs -0 chmod 0755"; | ||
| 471 : | } else { | ||
| 472 : | # get some general permissions for files and directories | ||
| 473 : | system "find $mainDir $BASE_DIR/system_html -type d -print0 | xargs -0 chmod 0775"; | ||
| 474 : | system "find $mainDir $BASE_DIR/system_html -type f -print0 | xargs -0 chmod 0664"; | ||
| 475 : | # add executable privs to scripts | ||
| 476 : | system "find ${mainDir}cgi ${mainDir}scripts -type f -print0 | xargs -0 chmod 0775"; | ||
| 477 : | } | ||
| 478 : | print "done setting permissions.\n\n"; | ||
| 479 : | } | ||
| 480 : | |||
| 481 : | #################### update couses stuff | ||
| 482 : | # uses: $update_stuff_in_courses | ||
| 483 : | |||
| 484 : | if($update_stuff_in_courses) { | ||
| 485 : | print "Setting permissions for ../courses directory.\n\n"; | ||
| 486 : | chmod(0755, "$BASE_DIR/courses") or warn "Warning: I can't set permissions for ../courses directory. It's possible that the directory doesn't exist or you don't have permission to change it.\n"; | ||
| 487 : | } | ||
| 488 : | |||
| 489 : | #################### run local postprocessor | ||
| 490 : | |||
| 491 : | if(defined $local_postprocessor) { | ||
| 492 : | print "Executing local postprocessor...\n"; | ||
| 493 : | &$local_postprocessor; | ||
| 494 : | print "Done with local postprocessor.\n"; | ||
| 495 : | } | ||
| 496 : | |||
| 497 : | #################### finish up | ||
| 498 : | |||
| 499 : | page($DONE_TEXT); | ||
| 500 : | |||
| 501 : | ################################################################################ | ||
| 502 : | |||
| 503 : | sub page | ||
| 504 : | { | ||
| 505 : | my @string_lines = split /^/, shift; #/ | ||
| 506 : | # not really optimal, but we're going to assume a constant screen height. | ||
| 507 : | my $SCREEN_HEIGHT = 20; | ||
| 508 : | while(@string_lines) { | ||
| 509 : | print join "", @string_lines[0..($SCREEN_HEIGHT>scalar @string_lines ? (scalar @string_lines)-1 : $SCREEN_HEIGHT-1)]; | ||
| 510 : | if(scalar @string_lines >= $SCREEN_HEIGHT) { | ||
| 511 : | print "\n[Press ENTER to continues...]"; | ||
| 512 : | <STDIN>; | ||
| 513 : | print "\n"; | ||
| 514 : | } | ||
| 515 : | @string_lines = @string_lines[$SCREEN_HEIGHT..$#string_lines]; | ||
| 516 : | } | ||
| 517 : | } | ||
| 518 : | |||
| 519 : | sub questionChar | ||
| 520 : | { | ||
| 521 : | my ($question, $default, @valid) = @_; | ||
| 522 : | my $answer; | ||
| 523 : | do { | ||
| 524 : | print $question, " "; | ||
| 525 : | foreach (@valid) { | ||
| 526 : | $_ eq $default and print "["; | ||
| 527 : | print $_; | ||
| 528 : | $_ eq $default and print "]"; | ||
| 529 : | } | ||
| 530 : | print " "; | ||
| 531 : | $answer = <STDIN>; | ||
| 532 : | $answer =~ s/^\s*//; | ||
| 533 : | $answer = substr $answer, 0, 1; | ||
| 534 : | $answer = lc $answer; | ||
| 535 : | $answer or $answer = $default; | ||
| 536 : | } while (not grep(/$answer/, @valid)); | ||
| 537 : | return $answer; | ||
| 538 : | } | ||
| 539 : | |||
| 540 : | sub questionString | ||
| 541 : | { | ||
| 542 : | my ($question, $default, $emptyOK) = @_; | ||
| 543 : | my $answer; | ||
| 544 : | print $question, " [", $default, "] "; | ||
| 545 : | $answer = <STDIN>; | ||
| 546 : | chomp $answer; | ||
| 547 : | $answer =~ s/^\s*//; | ||
| 548 : | $answer or $answer = $default; | ||
| 549 : | return $answer; | ||
| 550 : | } | ||
| 551 : | |||
| 552 : | __END__ | ||
| 553 : | |||
| 554 : | =head1 NAME | ||
| 555 : | |||
| 556 : | system_webwork_setup.pl - set up the WeBWorK system | ||
| 557 : | |||
| 558 : | =head1 SYNOPSIS | ||
| 559 : | |||
| 560 : | system_webwork_setup.pl [B<-d> [defaults-file]] | ||
| 561 : | |||
| 562 : | =head1 DESCRIPTION | ||
| 563 : | |||
| 564 : | B<system_webwork_setup.pl> gathers the information necessary for configuration of the WeBWorK system. It then edits several WeBWorK system files, and creates F<webworkInit.pm> modules and the F<webworkConfig.pm> module based on the information gathered. It can optionally read defaults from a file specified on the command line or from the file F<$HOME/system_webwork_setup.defaults>. | ||
| 565 : | |||
| 566 : | =head1 OPTIONS | ||
| 567 : | |||
| 568 : | =over 4 | ||
| 569 : | |||
| 570 : | =item B<-d> | ||
| 571 : | |||
| 572 : | enables defaults-file processing. If no defaults-file is specified, the file F<$HOME/system_webwork_setup.defaults> will be used. | ||
| 573 : | |||
| 574 : | =head1 DEFAULTS | ||
| 575 : | |||
| 576 : | The F<system_webwork_setup.defaults> file is intended to be used in a situation where B<system_webwork_setup.pl> must be executed frequently, such as in the case of use with CVS, in which the it must be executed after a checkout and some updates. The defaults file is a perl script that will be require'd by B<system_webwork_setup.pl>. It can set any of the following variables in the usual way: | ||
| 577 : | |||
| 578 : | =over 4 | ||
| 579 : | |||
| 580 : | =item $no_prompts | ||
| 581 : | |||
| 582 : | Refrain from prompting at the beginning of the script and before making changes. Also supresses the introductory text. | ||
| 583 : | |||
| 584 : | =item $system_setup_mode | ||
| 585 : | |||
| 586 : | Can be set to "working" or "demo". This affects how system file permissions and group ownership are set. In "working" mode, system files are group owned by a webwork admin group (see I<$groupName>) and group writeable while in "demo" mode files are group owned by the current user's default group and are not group writeable. | ||
| 587 : | |||
| 588 : | =item $mainDir | ||
| 589 : | |||
| 590 : | Specify WeBWorK's main directory, which should contain the directories cgi/ scripts/ courseScripts/ and lib/. | ||
| 591 : | |||
| 592 : | =item $perlPath | ||
| 593 : | |||
| 594 : | Specify the path to the perl interpreter which should be used. This is used to set the shebang line in cgi-scripts and scripts. | ||
| 595 : | |||
| 596 : | =item $cgiURL | ||
| 597 : | |||
| 598 : | Specify the externally visible URL to the CGI directory (typically cgi/cgi-scripts/). This will be used when scripts call other scripts. | ||
| 599 : | |||
| 600 : | =item $htmlURL | ||
| 601 : | |||
| 602 : | Specify the externally visible URL to the HTML directory (typically system_html/). This will be used when scripts refer to static graphics and text. | ||
| 603 : | |||
| 604 : | =item $groupName | ||
| 605 : | |||
| 606 : | When in "working" mode, I<$groupName> is the name of the WeBWorK admin group, members of which should have write access to the system files. (The web server should not be in this group!) | ||
| 607 : | |||
| 608 : | =item $update_stuff_in_courses | ||
| 609 : | |||
| 610 : | If true, B<system_webwork_setup.pl> will set permissions in the courses directory and prepare the B<course_webwork_setup.pl> script for execution. | ||
| 611 : | |||
| 612 : | =item $chgrp_files_and_dirs, $chmod_files_and_dirs | ||
| 613 : | |||
| 614 : | If true, the group and/or permissions on system files will be set according to I<$system_setup_mode>. | ||
| 615 : | |||
| 616 : | =item $local_preprocessor, $local_postprocessor | ||
| 617 : | |||
| 618 : | If set, these variables will be called as subroutine references. I<$local_preprocessor> is called before any changes take place, while I<$local_postprocessor> is called after all changes have taken place. | ||
| 619 : | |||
| 620 : | =back | ||
| 621 : | |||
| 622 : | =head1 FILES | ||
| 623 : | |||
| 624 : | $HOME/system_webwork_setup.defaults | ||
| 625 : | |||
| 626 : | =head1 AUTHOR | ||
| 627 : | |||
| 628 : | Samuel Hathaway <sh002i@math.rochester.edu> |
| aubreyja at gmail dot com | ViewVC Help |
| Powered by ViewVC 1.0.9 |