/ / $|=1; print(<<END); ********************************************* ********************************************* **** **** **** LON-CAPA SYSTEM INFORMATION REQUEST **** **** **** **** Please respond to the choices below **** **** **** ********************************************* ********************************************* END sleep(3); loncom/hosts.tab unless (-l "") { print(<<END); =============================================================================== Which cluster option would you like to have installed? IMPORTANT: to take advantage of the cluster options 1) and 3), you must contact lon-capa\@lon-capa.org. 1) PRODUCTION - you want to eventually connect this machine to the LON-CAPA content sharing network. This setting is for schools, colleges, and universities, that currently are running - or in the future will run - courses 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 do software (not content!) development with this workstation and eventually link it with the workstations of other LON-CAPA software developers. 4) RUNNING YOUR OWN CLUSTER - this machine is not in the standard LON-CAPA clusters and won't be in the future and you want the existing hosts.tab and domain.tab files to be left alone. (This choice is unlikely what you want to select.) 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 $flag=0; while (!$flag) { print "ENTER 1, 2, 3, or 4:\n"; my $choice=<>; chomp($choice); if ($choice==1) { $lonCluster='production'; $flag=1; } elsif ($choice==2) { $lonCluster='standalone'; $flag=1; } elsif ($choice==3) { $lonCluster='development'; $flag=1; } elsif ($choice==4) { $lonCluster='existing'; $flag=1; if (-e '/home/httpd/lonTabs/hosts.tab') { `cp /home/httpd/lonTabs/hosts.tab ../existing_hosts.tab`; } else { print <<END; There is no existing /home/httpd/lonTabs/hosts.tab END die(''); } if (-e '/home/httpd/lonTabs/domain.tab') { `cp /home/httpd/lonTabs/domain.tab ../existing_domain.tab`; } else { print <<END; There is no existing /home/httpd/lonTabs/domain.tab END die(''); } } elsif ($choice==26) { $lonCluster='rawhide'; $flag=1; } } } /home/httpd/lonTabs/hosts.tab $|=1; my $domainDescription; my $domainTabExtras; unless (-e "") { print(<<END); WELCOME TO LON-CAPA! If you have questions, please visit http://install.lon-capa.org or contact helpdesk\@lon-capa.org. =============================================================================== The following 4 values are needed to configure LON-CAPA: * Machine Role * LON-CAPA Domain Name * LON-CAPA Machine ID Name, and * System Administration E-mail Address. =============================================================================== In addition, a Support E-mail Address can also be included. If an address is included then one of the options in the LON-CAPA help menu will be a link to a form that a user will complete to request LON-CAPA help. 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 -f`; chomp($hostname); my $ipdomain=''; if ($hostname=~/([^\.]*)\.([^\.]*)$/) { $ipdomain=$1; } print(<<END); **** Domain **** [this does NOT need to correspond to internet address domains, good examples might be "msu" or "bionet" or "vermontcc", bad examples are "physics" (too general) or "michiganstateuniversity" (too long) or "msuedu" (internet domain, just make it "msu") or "msuphysics" (only if there is a good reason to limit) or "mydomain" (what is that?) Please make this name short AND descriptive of your organization. Note that the domain is very hard to change later. Double-check with the LON-CAPA group at MSU if this domain is going to be part of the main production cluster, since it needs to be unique.] 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); my $bad_domain_flag=0; my @bad_domain_names=('res','raw','userfiles','priv','adm','uploaded'); foreach my $bad (@bad_domain_names) { $bad_domain_flag=1 if $choice eq $bad; } if ($choice=~/capa/i) { $bad_domain_flag=1; } 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 (length($choice)>12) { print "Name too long\n"; } elsif (length($choice)<2) { print "Name too short\n"; } elsif ($bad_domain_flag) { print "Invalid input ('$choice' conflicts with LON-CAPA namespace).\n"; print "Please try something different than '$choice'\n"; } 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 domain description # accept if valid, if not valid, tell user and repeat $flag=0; while (!$flag) { print(<<END); **** Domain Description **** String describing the domain, to be shown to users. [Example, msu is Michigan State University] ENTER DOMAIN DESCRIPTION: END my $choice=<>; chomp($choice); if ($choice!~/:/) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'domainDescription'."\t".$choice."\n"); close(OUT); $domainDescription=$choice; $flag=1; } else { print "Invalid input (no ':' allowed).\n"; } } my $lonHostID; if ($lonDefDomain) { $lonHostID=$lonDefDomain.$r.int(1+rand(9)); # should be probably also 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 "bioneta2"; bad examples: "loncapabox" or "studentsinside". Note that machine names are very hard to change later.] 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 ($choice=~/capa/i) { print "Invalid input (names containing 'capa' are reserved).\n"; } elsif ($lonHostID and $choice=~/^\s*$/) { $choice=$lonHostID; open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonHostID'."\t".$choice."\n"); close(OUT); $lonHostID=$choice; $flag=1; } elsif (length($choice)>15) { print "Name too long\n"; } elsif (length($choice)<4) { print "Name too short\n"; } elsif ($choice!~/\_/ and $choice=~/^\w+$/) { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonHostID'."\t".$choice."\n"); close(OUT); $lonHostID=$choice; $flag=1; } else { print "Invalid input (only alphanumeric characters supported).\n"; } } # get admin 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 ADMIN 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"; } } # get support e-mail address # accept if valid, if not valid, tell user and repeat $flag=0; my $lonSupportEMail; while (!$flag) { print(<<END); **** Support E-mail **** E-mail address of the person who will receive help requests from LON-CAPA users who access the system via this server. If the address is left blank, then a help support form will not be displayed as part of the help menu. [should be in the form somebody\@somewhere] ENTER SUPPORT E-MAIL ADDRESS: END my $choice=<>; chomp($choice); $choice =~ s/\s//g; if ( ($choice=~/\@/) || $choice eq '') { open(OUT,'>>/tmp/loncapa_updatequery.out'); print(OUT 'lonSupportEMail'."\t".$choice."\n"); close(OUT); $lonSupportEMail=$choice; $flag=1; } else { print "Invalid input (this either needs to be blank, or 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 if $varvalue!~/^\{\[\[\[\[/; } } close(CONFIG); } $perlvar{'lonHostID'}=$lonHostID; $perlvar{'lonDefDomain'}=$lonDefDomain; $perlvar{'lonAdmEMail'}=$lonAdmEMail; $perlvar{'lonSupportEMail'}=$lonSupportEMail; $perlvar{'lonRole'}=$lonRole; unless ($perlvar{'lonLoadLim'} and $perlvar{'lonLoadLim'}!~/\{\[\[\[\[/) { $perlvar{'lonLoadLim'}='2.00'; } unless ($perlvar{'lonUserLoadLim'} and $perlvar{'lonUserLoadLim'}!~/\{\[\[\[\[/) { $perlvar{'lonUserLoadLim'}='0'; } unless ($perlvar{'lonExpire'} and $perlvar{'lonExpire'}!~/\{\[\[\[\[/) { $perlvar{'lonExpire'}='86400'; } unless ($perlvar{'lonReceipt'} and $perlvar{'lonReceipt'}!~/\{\[\[\[\[/) { my $lonReceipt=''; srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`); 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); } / sub securesetting { my (%perlvar)=@_; my $securestatus='unknown'; my $securenum=''; if ( $perlvar{'loncAllowInsecure'}&& $perlvar{'londAllowInsecure'}) { $securestatus='no'; $securenum='4'; } elsif ( $perlvar{'loncAllowInsecure'}&& !$perlvar{'londAllowInsecure'}) { $securestatus='lond'; $securenum='3'; } elsif (!$perlvar{'loncAllowInsecure'}&& $perlvar{'londAllowInsecure'}) { $securestatus='lonc'; $securenum='2'; } elsif (!$perlvar{'loncAllowInsecure'}&& !$perlvar{'londAllowInsecure'}) { $securestatus='yes (lond and lonc)'; $securenum='1'; } return ($securestatus,$securenum); } # read values from loncapa.conf my $confdir='/etc/httpd/conf/'; my $filename='loncapa.conf'; my %perlvar; my ($securestatus,$securenum); 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); } unless ($perlvar{'lonLoadLim'} and $perlvar{'lonLoadLim'}!~/\{\[\[\[\[/) { $perlvar{'lonLoadLim'}='2.00'; } unless ($perlvar{'lonUserLoadLim'} and $perlvar{'lonUserLoadLim'}!~/\{\[\[\[\[/) { $perlvar{'lonUserLoadLim'}='0'; } unless ($perlvar{'lonExpire'} and $perlvar{'lonExpire'}!~/\{\[\[\[\[/) { $perlvar{'lonExpire'}='86400'; } unless ($perlvar{'londAllowInsecure'} and $perlvar{'londAllowInsecure'}!~/\{\[\[\[\[/) { $perlvar{'londAllowInsecure'}='1'; } unless ($perlvar{'loncAllowInsecure'} and $perlvar{'loncAllowInsecure'}!~/\{\[\[\[\[/) { $perlvar{'loncAllowInsecure'}='1'; } ($securestatus,$securenum)=&securesetting(%perlvar); unless ($perlvar{'lonReceipt'} and $perlvar{'lonReceipt'}!~/\{\[\[\[\[/) { my $lonReceipt=''; srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`); my @alnum=(0..9,a..z); foreach my $i (1..20) { $lonReceipt.=$alnum[int(rand(36))]; } $perlvar{'lonReceipt'}=$lonReceipt; } my %perlvarstatic; if (-e "${confdir}loncapa_apache.conf") { open(CONFIG,'<'.$confdir.'loncapa_apache.conf') or die("Can't read ${confdir}loncapa_apache.conf"); while (my $configline=<CONFIG>) { if ($configline =~ /^[^\#]*PerlSetVar/) { my ($unused,$varname,$varvalue)=split(/\s+/,$configline); chomp($varvalue); $perlvarstatic{$varname}=$varvalue; } } close(CONFIG); } if (!$domainDescription && $lonCluster ne 'existing') { open(IN,'<../'.$lonCluster.'_domain.tab'); while(<IN>) { if (/^$perlvar{'lonDefDomain'}\:/) { (undef,$domainDescription,$domainTabExtras)=split(/:/,$_,3); chomp($domainDescription); chomp($domainTabExtras); last; } } close(IN); } if (!$domainDescription) { open(IN,'</home/httpd/lonTabs/domain.tab'); while(<IN>) { if (/^$perlvar{'lonDefDomain'}\:/) { (undef,$domainDescription,$domainTabExtras)=split(/:/,$_,3); chomp($domainDescription); chomp($domainTabExtras); last; } } close(IN); } # implement editing logic below, interactively # update loncapa.conf until 8 is entered $flag=0; while (!$flag) { print(<<END); =============================================================================== This is now the current configuration of your machine. 1) Domain Name: $perlvar{'lonDefDomain'} 2) Domain Description: $domainDescription 3) Machine Name: $perlvar{'lonHostID'} 4) System Administrator's E-mail Address: $perlvar{'lonAdmEMail'} 5) Support E-mail Address: $perlvar{'lonSupportEMail'} 6) Role: $perlvar{'lonRole'} 7) Cache Expiration Time: $perlvar{'lonExpire'} 8) Server Load: $perlvar{'lonLoadLim'} 9) User Load: $perlvar{'lonUserLoadLim'} 10) Allow only secure connections: $securestatus 11) Everything is correct up above END my $error=''; foreach my $v ($perlvar{'lonDefDomain'},$perlvar{'lonHostID'}) { if (length($v)>16) { $error.="\nName $v too long"; } if (length($v)<2) { $error.="\nName $v too short"; } if ($v=~/capa/i) { if ($v!~/^oucapa\d+$/ && ($v!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) { $error.="\nName $v contains 'capa'"; } } foreach my $bad ('res','raw','userfiles','priv','adm','uploaded') { $error.="\nName $v reserved." if $v eq $bad; } if ($v=~/\W/) { $error.="\nName $v contains special characters"; } } if ($domainDescription!~/^[\w\s]+$/) { $error.="\nDomain Description contains special characters"; } foreach my $v ($perlvar{'lonExpire'},$perlvar{'lonLoadLim'}) { unless ($v=~/^[\d+\.]+$/) { $error.="\nNumber expected instead of $v"; } } unless (($perlvar{'lonRole'} eq 'library') || ($perlvar{'lonRole'} eq 'access')) { $error.="\nInvalid Role"; } if ($error) { print "\n*** ERRORS: $error\n"; } print(<<END); ENTER A CHOICE OF 1-10 TO CHANGE, otherwise ENTER 11: END my $choice=<>; chomp($choice); if ($choice==1) { print(<<END); 1) Domain Name: $perlvar{'lonDefDomain'} ENTER NEW VALUE (this is an internal value used to identify a group of LON-CAPA machines, it must be alphanumerical, we suggest using a part of your actual DNS domain. For example, for the machine loncapa.msu.edu, we set the Domain to msu): END my $choice2=<>; chomp($choice2); $perlvar{'lonDefDomain'}=$choice2; } elsif ($choice==2) { print(<<END); 2) Domain Description: $domainDescription ENTER NEW VALUE (this should be a string that describes your domain, spaces and punctuation are fine except for ':'): END my $choice2=<>; chomp($choice2); $domainDescription=$choice2; } elsif ($choice==3) { print(<<END); 3) Machine Name: $perlvar{'lonHostID'} ENTER NEW VALUE (this will be the name of the machine in the LON-CAPA network it cannot contain any of '_' '-' '.' or ':'. We suggest that if you are in the domain 'example' and are the first library server you enter 'examplel1') : END my $choice2=<>; chomp($choice2); $perlvar{'lonHostID'}=$choice2; } elsif ($choice==4) { print(<<END); 4) System Administrator's E-mail Address: $perlvar{'lonAdmEMail'} ENTER NEW VALUE: END my $choice2=<>; chomp($choice2); $perlvar{'lonAdmEMail'}=$choice2; } elsif ($choice==5) { print(<<END); 5) Support E-mail Address: $perlvar{'lonSupportEMail'} ENTER NEW VALUE: END my $choice2=<>; chomp($choice2); $perlvar{'lonSupportEMail'}=$choice2; } elsif ($choice==6) { print(<<END); 6) Role: $perlvar{'lonRole'} ENTER NEW VALUE (this should be either 'access' or 'library' if in doubt select 'library'): END my $choice2=<>; chomp($choice2); $perlvar{'lonRole'}=$choice2; } elsif ($choice==7) { print(<<END); 7) Cache Expiration Time: $perlvar{'lonExpire'} ENTER NEW VALUE (in seconds, 86400 is a reasonable value): END my $choice2=<>; chomp($choice2); $perlvar{'lonExpire'}=$choice2; } elsif ($choice==8) { print(<<END); 8) Server Load: $perlvar{'lonLoadLim'} ENTER NEW VALUE: END my $choice2=<>; chomp($choice2); $perlvar{'lonLoadLim'}=$choice2; } elsif ($choice==9) { print(<<END); 9) User Load: $perlvar{'lonUserLoadLim'} Numer of users that can login before machine is 'overloaded' ENTER NEW VALUE (integer value, 0 means there is no limit): END my $choice2=<>; chomp($choice2); $perlvar{'lonUserLoadLim'}=$choice2; } elsif ($choice==10) { print(<<END); 10) Allow only secure connections: $securestatus The Lon-CAPA communication daemons lonc and lond can be configured to allow only secure connections by default. POSSIBLE CHOICES: 1) allow only secure connections and don't connect to machines that can not be connected to securely 2) allow only secure connections but allow this machine to connect to machines that don't support secure connections 3) allow insecure connections to this machine but only allow connections to machines that support secure connections 4) allow insecure connections ENTER NEW VALUE (currenly $securenum): END my $choice2=<>; chomp($choice2); if ($choice2 eq '1') { $perlvar{'loncAllowInsecure'}=0;$perlvar{'londAllowInsecure'}=0; } elsif ($choice2 eq '2') { $perlvar{'loncAllowInsecure'}=0;$perlvar{'londAllowInsecure'}=1; } elsif ($choice2 eq '3') { $perlvar{'loncAllowInsecure'}=1;$perlvar{'londAllowInsecure'}=0; } elsif ($choice2 eq '4') { $perlvar{'loncAllowInsecure'}=1;$perlvar{'londAllowInsecure'}=1; } ($securestatus,$securenum)=&securesetting(%perlvar); } elsif (($choice==11) && (!$error)) { $flag=1; } else { print "Invalid input.\n"; } } open(OUT,">$confdir$filename") or die("Cannot output to $confdir$filename\n"); foreach my $key (keys %perlvar) { my $value=$perlvar{$key}; print(OUT <<END) unless $perlvarstatic{$key}; PerlSetVar $key $value END } close(OUT); loncom/hosts.tab unless (-l "") { my $hostname=`hostname -f`;chomp($hostname); $date=`date -I`; chomp($date); $lonHostID=$perlvar{'lonHostID'}; $lonHostID=~s/\W//g; $lineexistflag=0; $hostidexistflag=0; $line2insert=<<END; $perlvar{'lonHostID'}:$perlvar{'lonDefDomain'}:$perlvar{'lonRole'}:$hostname END $domaininsert="$perlvar{'lonDefDomain'}:$domainDescription:$domainTabExtras\n"; if ($lonCluster eq 'standalone') { open(OUT,'>../'.$lonCluster.'_hosts.tab') or die('file generation error'); print(OUT $line2insert); close(OUT); open(OUT,'>../'.$lonCluster.'_domain.tab') or die('file generation error'); print(OUT $domaininsert); close(OUT); } if ($flag==1) { `rm -f ../hosts.tab`; open(IN,'<../'.$lonCluster.'_hosts.tab'); while(<IN>) { if (/^$line2insert$/) { $lineexistflag=1; } if (/^$lonHostID\:/) { $hostidexistflag=1; } } close(IN); if ($hostidexistflag and !$lineexistflag) { print <<END; WARNING: $lonHostID already exists inside loncapa/loncom/${lonCluster}_hosts.tab. The entry inside ${lonCluster}_hosts.tab does not match your settings. The entry inside ${lonCluster}_hosts.tab is being replaced with your new values. END `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab > ../new_${lonCluster}_hosts.tab`; open(OUT,'>>../new_'.$lonCluster.'_hosts.tab') or die("cannot open loncom/${lonCluster}_hosts.tab for output\n"); print(OUT $line2insert); close(OUT); `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`; # email appropriate message `echo "REPLACE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "REPLACE:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } elsif ($hostidexistflag and $lineexistflag) { print <<END; Entry exists in ${lonCluster}_hosts.tab. END `ln -s ${lonCluster}_hosts.tab ../hosts.tab`; # email appropriate message `echo "STABLEUPDATE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "STABLEUPDATE:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } elsif (!$hostidexistflag and !$lineexistflag) { print <<END; New entry for $lonCluster. END `cat ../${lonCluster}_hosts.tab > ../new_${lonCluster}_hosts.tab`; open(OUT,'>>../new_'.$lonCluster.'_hosts.tab') or die("cannot open loncom/new_${lonCluster}_hosts.tab for output\n"); print(OUT $line2insert); close(OUT); `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`; # email appropriate message `echo "INSERT:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "INSERT:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } } $lineexistflag=0; if ($flag==1) { `rm -f ../domain.tab`; open(IN,'<../'.$lonCluster.'_domain.tab'); while(<IN>) { if (/^$domaininsert$/) { $lineexistflag=1; } if (/^$perlvar{'lonDefDomain'}\:/) { $domainexistflag=1; } } close(IN); if ($domainexistflag and !$lineexistflag) { print <<END; WARNING: $perlvar{'lonDefDomain'} already exists inside loncapa/loncom/${lonCluster}_domain.tab. The entry inside ${lonCluster}_domain.tab does not match your settings. The entry inside ${lonCluster}_domain.tab is being replaced with your new values. END `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab > ../new_${lonCluster}_domain.tab`; open(OUT,'>>../new_'.$lonCluster.'_domain.tab') or die("cannot open loncom/${lonCluster}_domain.tab for output\n"); print(OUT $domaininsert); close(OUT); `ln -s new_${lonCluster}_domain.tab ../domain.tab`; # email appropriate message `echo "REPLACEdom:$lonCluster:$lonHostID:$date:$domaninsert" | mail -s "REPLACEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } elsif ($domainexistflag and $lineexistflag) { print <<END; Entry exists in ${lonCluster}_domain.tab. END `ln -s ${lonCluster}_domain.tab ../domain.tab`; # email appropriate message `echo "STABLEUPDATEdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "STABLEUPDATEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } elsif (!$domainexistflag and !$lineexistflag) { print <<END; New entry for $lonCluster. END `cat ../${lonCluster}_domain.tab > ../new_${lonCluster}_domain.tab`; open(OUT,'>>../new_'.$lonCluster.'_domain.tab') or die("cannot open loncom/new_${lonCluster}_domain.tab for output\n"); print(OUT $domaininsert); close(OUT); `ln -s new_${lonCluster}_domain.tab ../domain.tab`; # email appropriate message `echo "INSERTdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "INSERTdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`; } } }