/ / $|=1; print(<<END); ********************************************* ********************************************* **** **** **** LON-CAPA SYSTEM INFORMATION REQUEST **** **** **** **** Please respond to the choices below **** **** **** ********************************************* ********************************************* END sleep(3); /home/httpd/lonUsers2/ $|=1; unless (-e "") { print(<<END); WELCOME TO LON-CAPA! If you have questions, please visit http://install.lon-capa.org or contact sharrison\@mail.lon-capa.org. =============================================================================== The following 4 values are needed to configure LON-CAPA: * Machine Role * Machine ID Name * LON-CAPA Domain Name, and * System Administration E-mail Address. END open(OUT,'>/tmp/loncapa_updatequery.out'); close(OUT); # query for Machine Role print(<<END); **** Machine Role **** Library server (recommended if first-time installation of LON-CAPA): Servers that are repositories of authoritative educational resources. These servers also provide the construction space by which instructors assemble their classroom online material. Access server: Servers that load-balance high-traffic delivery of educational resources over the world-wide web. 1) Will this be a library server? (recommended if this is your first install) 2) Or, will this be an access server? END my $flag=0; my $r=''; my $lonRole; while (!$flag) { print "ENTER A CHOICE OF 1 or 2:\n"; my $choice=<>; chomp($choice); if ($choice==1) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonRole'."\t".'library'."\n"); close(OUT); $lonRole='library'; $r='l'; $flag=1; } elsif ($choice==2) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonRole'."\t".'access'."\n"); close(OUT); $lonRole='access'; $r='a'; $flag=2; } else { } } # need to recommend a machine ID name (ipdomain.l.somenumber) my $hostname=`hostname`; chomp($hostname); my $ipdomain=''; if ($hostname=~/([^\.]*)\.([^\.]*)$/) { $ipdomain=$1; } my $lonHostID; if ($ipdomain) { $lonHostID=$ipdomain.$r.int(1+rand(9)); # should be probably detect against # the hosts.tab } print(<<END); **** Machine ID Name **** [this does NOT need to correspond to internet address names; this name MUST be unique to the whole LON-CAPA network; we recommend that you use a name based off of your institution; good examples: "msul1" or "bionetl1"; bad examples: "loncapabox" or "studentsinside"] END # get machine name # accept if valid, if not valid, tell user and repeat $flag=0; while (!$flag) { if ($ipdomain) { print(<<END); ENTER LONCAPA MACHINE ID [$lonHostID]: END } else { print(<<END); ENTER LONCAPA MACHINE ID: END } my $choice=<>; chomp($choice); if ($lonHostID and $choice=~/^\s*$/) { $choice=$lonHostID; open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonHostID'."\t".$choice."\n"); close(OUT); $flag=1; } elsif ($choice!~/\_/ and $choice=~/^\w+$/) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonHostID'."\t".$choice."\n"); close(OUT); $flag=1; } else { print "Invalid input (only alphanumeric characters supported).\n"; } } print(<<END); **** Domain **** [this does NOT need to correspond to internet address domains, examples might be "msu" or "bionet" or "vermontcc"] END # get domain name # accept if valid, if not valid, tell user and repeat $flag=0; my $lonDefDomain; while (!$flag) { if ($ipdomain) { print(<<END); ENTER LONCAPA DOMAIN [$ipdomain]: END } else { print(<<END); ENTER LONCAPA DOMAIN: END } my $choice=<>; chomp($choice); if ($ipdomain and $choice=~/^\s*$/) { $choice=$ipdomain; open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonDefDomain'."\t".$choice."\n"); close(OUT); $lonDefDomain=$choice; $flag=1; } elsif ($choice!~/\_/ and $choice=~/^\w+$/) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonDefDomain'."\t".$choice."\n"); close(OUT); $lonDefDomain=$choice; $r='l'; $flag=1; } else { print "Invalid input (only alphanumeric characters supported).\n"; } } # get e-mail address # accept if valid, if not valid, tell user and repeat $flag=0; my $lonAdmEmail; while (!$flag) { print(<<END); **** System Administrator's E-mail **** E-mail address of the person who will manage this machine [should be in the form somebody\@somewhere] ENTER E-MAIL ADDRESS: END my $choice=<>; chomp($choice); if ($choice=~/\@/) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonAdmEmail'."\t".$choice."\n"); close(OUT); $lonAdmEmail=$choice; $flag=1; } else { print "Invalid input (this needs to look like an e-mail address!).\n"; } } # update loncapa.conf #my $confdir='/etc/httpd/conf/'; my $confdir=''; my $filename='loncapa.conf'; my %perlvar; if (-e "$confdir$filename") { open(CONFIG,'<'.$confdir.$filename) or die("Can't read $confdir$filename"); while (my $configline=<CONFIG>) { if ($configline =~ /^[^\#]*PerlSetVar/) { my ($unused,$varname,$varvalue)=split(/\s+/,$configline); chomp($varvalue); $perlvar{$varname}=$varvalue; } } close(CONFIG); } $perlvar{'lonHostID'}=$lonHostID; $perlvar{'lonDefDomain'}=$lonDefDomain; $perlvar{'lonAdmEmail'}=$lonAdmEmail; $perlvar{'lonRole'}=$lonRole; unless ($perlvar{'lonSqlAccess'}) { $perlvar{'lonSqlAccess'}='localhostkey'; } unless ($perlvar{'lonLoadLim'}) { $perlvar{'lonLoadLim'}='2.00'; } unless ($perlvar{'lonExpire'}) { $perlvar{'lonExpire'}='86400'; } unless ($perlvar{'lonReceipt'}) { my $lonReceipt=''; srand($$.time); my @alnum=(0..9,a..z); foreach my $i (1..20) { $lonReceipt.=$alnum[int(rand(36))]; } $perlvar{'lonReceipt'}=$lonReceipt; } open(OUT,">$confdir$filename") or die("Cannot output to $confdir$filename\n"); foreach my $key (keys %perlvar) { my $value=$perlvar{$key}; print(OUT <<END); PerlSetVar $key $value END } close(OUT); } / # read values from loncapa.conf #my $confdir='/etc/httpd/conf/'; my $confdir=''; my $filename='loncapa.conf'; my %perlvar; if (-e "$confdir$filename") { open(CONFIG,'<'.$confdir.$filename) or die("Can't read $confdir$filename"); while (my $configline=<CONFIG>) { if ($configline =~ /^[^\#]*PerlSetVar/) { my ($unused,$varname,$varvalue)=split(/\s+/,$configline); chomp($varvalue); $perlvar{$varname}=$varvalue; } } close(CONFIG); } print(<<END); =============================================================================== This is now the current configuration of your machine. 1) Machine Name: $perlvar{'lonHostID'} 2) Domain Name: $perlvar{'lonDefDomain'} 3) System Administrator's E-mail Address: $perlvar{'lonAdmEmail'} 4) Role: $perlvar{'lonRole'} 5) Cache Expiration Time: $perlvar{'lonExpire'} 6) Server Load: $perlvar{'lonLoadLim'} 7) Everything is correct up above ENTER A CHOICE OF 1-6 TO CHANGE, otherwise ENTER 7: END # implement editing logic below, interactively # update loncapa.conf until 7 is entered my $choice=<>; chomp($choice); loncom/hosts.tab unless (-l "") { print(<<END); =============================================================================== What hosts.tab would you like to have installed? (hosts.tab is a listing of all other internet machines that a server system considers to be valid server systems on the LON-CAPA network) 1) PRODUCTION - you want to deliver courses today or sometime very soon on this machine 2) STAND-ALONE - you want this machine to run in 'stand-alone' mode and not be connected to other LON-CAPA machines for now 3) DEVELOPMENT - you want to play with or explore LON-CAPA 4) Do not install hosts.tab right now ENTER 1, 2, 3, or 4: END # Option number 26 will install rawhide_hosts.tab, but # the typical user does not want to be part of an intensive # machine test cluster. # get input # if valid then process, otherwise loop my $choice=<>; chomp($choice); }