<!-- updatequery.piml -->
<!-- $Id: updatequery.piml,v 1.30 2004/05/21 20:40:53 www Exp $ -->
<!--
This file is part of the LearningOnline Network with CAPA (LON-CAPA).
LON-CAPA is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
LON-CAPA is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LON-CAPA; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
/home/httpd/html/adm/gpl.txt
http://www.lon-capa.org/
-->
<piml>
<targetroot>/</targetroot>
<files>
<file>
<target dist='default'>/</target>
<perlscript mode='fg'>
$|=1;
print(<<END);
*********************************************
*********************************************
**** ****
**** LON-CAPA SYSTEM INFORMATION REQUEST ****
**** ****
**** Please respond to the choices below ****
**** ****
*********************************************
*********************************************
END
sleep(3);
</perlscript>
</file>
<file>
<target dist='default'>loncom/hosts.tab</target>
<perlscript mode='fg'>
unless (-l "<TARGET />") {
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) PRESERVE the existing hosts.tab and domain.tab
(/home/httpd/lonTabs/hosts.tab and
/home/httpd/lonTabs/domain.tab)
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;
}
}
}
</perlscript>
</file>
<file>
<target dist='default'>/home/httpd/lonTabs/hosts.tab</target>
<perlscript mode='fg'>
$|=1;
my $domainDescription;
my $domainTabExtras;
unless (-e "<TARGET />") {
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
* LON-CAPA Domain Name
* LON-CAPA Machine ID 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;
}
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);
my $bad_domain_flag=0;
my @bad_domain_names=('raw','userfiles','priv','adm','uploaded');
foreach my $bad (@bad_domain_names) {
$bad_domain_flag=1 if $choice eq $bad;
}
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;
}
elsif ($bad_domain_flag) {
print "Invalid input ('$choice' conflicts with LON-CAPA namespace).\n";
print "Please try something different than '$choice'\n";
}
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 "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);
$lonHostID=$choice;
$flag=1;
}
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 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 if $varvalue!~/^\{\[\[\[\[/;
}
}
close(CONFIG);
}
$perlvar{'lonHostID'}=$lonHostID;
$perlvar{'lonDefDomain'}=$lonDefDomain;
$perlvar{'lonAdmEMail'}=$lonAdmEMail;
$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);
}
</perlscript>
</file>
<file>
<target dist='default'>/</target>
<perlscript mode='fg'>
# read values from loncapa.conf
my $confdir='/etc/httpd/conf/';
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);
}
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;
}
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) Role: $perlvar{'lonRole'}
6) Cache Expiration Time: $perlvar{'lonExpire'}
7) Server Load: $perlvar{'lonLoadLim'}
8) User Load: $perlvar{'lonUserLoadLim'}
9) Everything is correct up above
END
my $hbug=-1;
my $dbug=-1;
{
my $v=$perlvar{'lonHostID'};
$hbug=0;
$hbug=1 if $v=~/\W/;
$hbug=1 if $v=~/\_/;
}
{
my $v=$1;
$dbug=0;
$dbug=1 if $v=~/\W/;
$dbug=1 if $v=~/\_/;
}
if ($hbug) {
print "**** ERROR **** ".
"Invalid lonHostID (should only be letters and/or digits)\n";
}
if ($dbug) {
print "**** ERROR **** ".
"Invalid lonDefDomain (should only be letters and/or digits)\n";
}
print(<<END);
ENTER A CHOICE OF 1-8 TO CHANGE, otherwise ENTER 9:
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) 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==6) {
print(<<END);
6) 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==7) {
print(<<END);
7) Server Load: $perlvar{'lonLoadLim'}
ENTER NEW VALUE:
END
my $choice2=<>;
chomp($choice2);
$perlvar{'lonLoadLim'}=$choice2;
}
elsif ($choice==8) {
print(<<END);
8) 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==9) {
$flag=1;
}
else {
}
}
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);
</perlscript>
</file>
<file>
<target dist='default'>loncom/hosts.tab</target>
<perlscript mode='fg'>
unless (-l "<TARGET />") {
my $hostname=`hostname`;chomp($hostname);
my $hostaddress=`hostname -i $hostname`;chomp($hostaddress);
$hostaddress=~s/\s//;
$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:$hostaddress
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
system('ping -c 1 -W 5 www.lon-capa.org > /dev/null || ping -c 1 -W 5 www.msu.edu > /dev/null || ping -c 1 -W 5 www.mit.edu > /dev/null');
`echo "REPLACE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "REPLACE:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org` unless $?;
}
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
system('ping -c 1 -W 5 www.lon-capa.org > /dev/null || ping -c 1 -W 5 www.msu.edu > /dev/null || ping -c 1 -W 5 www.mit.edu > /dev/null');
`echo "REPLACEdom:$lonCluster:$lonHostID:$date:$domaninsert" | mail -s "REPLACEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org` unless $?;
}
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`;
}
}
}
</perlscript>
</file>
</files>
</piml>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>