File:
[LON-CAPA] /
doc /
loncapafiles /
updatequery.piml
Revision
1.58:
download - view:
text,
annotated -
select for diffs
Tue May 22 23:16:47 2007 UTC (17 years, 3 months ago) by
albertel
Branches:
MAIN
CVS tags:
version_2_5_X,
version_2_5_99_0,
version_2_5_2,
version_2_5_1,
version_2_5_0,
version_2_4_X,
version_2_4_99_0,
version_2_4_2,
version_2_4_1,
version_2_4_0,
HEAD
- better handling of primary library server in multi domained hosts
<!-- updatequery.piml -->
<!-- $Id: updatequery.piml,v 1.58 2007/05/22 23:16:47 albertel 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) 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;
foreach my $file ('hosts.tab','dns_hosts.tab',
'domain.tab','dns_domain.tab') {
if (-e '/home/httpd/lonTabs/'.$file) {
`cp /home/httpd/lonTabs/$file ../existing_$file`;
}
else {
print <<END;
There is no existing /home/httpd/lonTabs/$file
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;
my $primaryLibServer;
my @libservers = ();
unless (-e "<TARGET />") {
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
* Server 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.
Please make this name short AND descriptive of your organization.
Domain names are close to impossible to change later!!!
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 to department
- we don't know of one)
or "mydomain" (what is that?)
Avoid multiple domains at the same institution, even if it means that you
have to actually work together with your colleagues. You can still run
multiple library servers within the same domain.
If this domain is eventually going to be part of the main production
cluster, you MUST contact the LON-CAPA group at MSU (loncapa@loncapa.org)
to have a domain name assigned, and then use it exactly as given. This is
also true for test installs that might eventually turn into production setups.
Stop now if you didn't do so.]
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',
'editupload');
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)>35) {
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, '-', and '.' 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)>45) {
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, '-', and '.' supported).\n";
}
}
# get primary library server in domain
if ($lonRole eq 'library') {
if (!grep/^\Q$lonHostID\E$/,@libservers) {
push(@libservers,$lonHostID);
}
if (@libservers == 1) {
$primaryLibServer = $libservers[0];
}
}
while (!$flag) {
print(<<END);
**** Domain's Primary Library Server ID ****
This should be the LON-CAPA machine ID of a library server in your
domain. If you only have a single library server in your domain, then
the Primary Library server ID will be the machine ID of that server.
This server will be where domain data which are not associated with any
specific home library server will be stored (e.g., e-mail broadcast by
administrators to users in the domain).
END
if (defined($primaryLibServer)) {
print(<<END);
ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$primaryLibServer]:
END
} elsif (@libservers > 0) {
print(<<END);
ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$libservers[0]]
END
} else {
print (<<END);
No library servers could be identified for this domain. If you have already installed LON-CAPA on a different server (designated as a library server) in this domain, please enter the LONCAPA MACHINE ID of that server. If not, you will need to install a LON-CAPA library server. Enter the MACHINE ID of the server you plan to designate as a library server.
END
}
my $choice=<>;
chomp($choice);
if ($primaryLibServer and $choice=~/^\s*$/) {
$choice=$primaryLibServer;
open(OUT,'>>/tmp/loncapa_updatequery.out');
print(OUT 'primaryLibServer'."\t".$choice."\n");
close(OUT);
$flag=1;
} elsif (length($choice)>35) {
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 'primaryLibServer'."\t".$choice."\n");
close(OUT);
$primaryLibServer=$choice;
$flag=1;
} else {
print "Invalid input (only alphanumeric characters, '-', and '.' 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);
**** Server Administrators 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/';
if ('<DIST />' eq 'sles10' || '<DIST />' eq 'suse10.1' || '<DIST />' eq 'suse10.2') {
$confdir = '/etc/apache2/';
}
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};
my $line = "PerlSetVar $key $value";
if ($value eq '') {
$line = '#'.$line;
}
print(OUT <<END);
$line
END
}
close(OUT);
}
</perlscript>
</file>
<file>
<target dist='default'>/etc/httpd/conf/</target>
<target dist='sles10 suse10.1 suse10.2'>/etc/apache2/</target>
<perlscript mode='fg'>
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 = "<TARGET />";
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);
}
my (@hosts_files, @domain_files);
if ( $lonCluster ne 'existing') {
push(@domain_files,'../'.$lonCluster.'_domain.tab',
'../'.$lonCluster.'_dns_domain.tab');
push(@hosts_files,'../'.$lonCluster.'_hosts.tab',
'../'.$lonCluster.'_dns_hosts.tab');
}
push(@domain_files,'/home/httpd/lonTabs/domain.tab',
'/home/httpd/lonTabs/dns_domain.tab');
push(@hosts_files,'/home/httpd/lonTabs/hosts.tab',
'/home/httpd/lonTabs/dns_hosts.tab');
if (!$domainDescription) {
foreach my $file (@domain_files) {
open(IN,'<'.$file);
while(my $line = <IN>) {
if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
(undef,$domainDescription,$domainTabExtras)=split(/:/,$line,3);
chomp($domainDescription);
chomp($domainTabExtras);
# the remianing field (primary lib server) is handled later
$domainTabExtras = join(':',(split(/:/,$domainTabExtras))[0..5]);
last;
}
}
close(IN);
last if ($domainDescription);
}
}
while(!$primaryLibServ && (@hosts_file || @domain_files)) {
my $file = shift(@domain_files);
open(IN,'<'.$file);
while(my $line = <IN>) {
if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
$primaryLibServer=(split(/:/,$line))[8];
chomp($primaryLibServer);
}
}
close(IN);
last if ($primaryLibServer);
$file = shift(@hosts_files);
open(IN,'<'.$file);
while(my $line = <IN>) {
if ($line =~ /^([^\:]+)\:\Q$perlvar{'lonDefDomain'}\E\:library\:/) {
push(@libservers,$1);
}
}
# make list unique
@libservers = keys(%{{ map { $_ => 1 } (@libservers) }});
close(IN);
if (@libservers == 1) {
$primaryLibServer = $libservers[0];
}
}
# implement editing logic below, interactively
# update loncapa.conf until 12 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) ID of primary library server for domain: $primaryLibServer
5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
6) Support E-mail Address: $perlvar{'lonSupportEMail'}
7) Role: $perlvar{'lonRole'}
8) Cache Expiration Time: $perlvar{'lonExpire'}
9) Server Load: $perlvar{'lonLoadLim'}
10) User Load: $perlvar{'lonUserLoadLim'}
11) Allow only secure connections: $securestatus
12) Everything is correct up above
END
my @error;
foreach my $v ($perlvar{'lonDefDomain'},$perlvar{'lonHostID'}) {
if (length($v)>35) { $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')) {
push(@error,"Name $v contains 'capa'");
}
}
foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
'editupload') {
push(@error,"\nName $v reserved.") if $v eq $bad;
}
if ($v=~/[^\w\-.]/) { push(@error,"Name $v contains special characters"); }
}
if ($domainDescription =~ /^\s*$/) {
push(@error,"Domain Description is blank.");
} elsif ($domainDescription!~/^[\(\)\-\w\s,]+$/) {
push(@error,"Domain Description contains special characters.");
}
foreach my $v ($perlvar{'lonExpire'},$perlvar{'lonLoadLim'}) {
unless ($v=~/^[\d+\.]+$/) { push(@error,"Number expected instead of $v"); }
}
unless (($perlvar{'lonRole'} eq 'library') || ($perlvar{'lonRole'} eq 'access')) {
push(@error,"Invalid Role");
}
if (!defined($primaryLibServer)) {
if (@libservers > 0) {
push(@error,"No primary library server ID designated. Choose from: ".join(',',sort(@libservers)));
} else {
push(@error,"No library servers in this domain (including current server)");
}
} else {
if (length($primaryLibServer)>35) { push(@error,"Primary Library Server ID: $primaryLibServer too long"); }
if (length($primaryLibServer)<2) { push(@error,"Primary Library Server ID: $primaryLibServer too short"); }
if ($primaryLibServer =~/capa/i) {
if ($primaryLibServer!~/^oucapa\d+$/ &&
($primaryLibServer!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) {
push(@error,"Primary library server ID $primaryLibServer contains 'capa'")
}
}
foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
'editupload') {
push(@error,"Primary library server ID $primaryLibServer reserved.") if $primaryLibServer eq $bad;
}
if ($primaryLibServer=~/[^\w\-.]/) { push(@error,"Primary library server ID $primaryLibServer contains special characters"); }
}
if (@error) { print "\n*** ERRORS: \n\t".join("\n\t",@error)."\n"; }
print(<<END);
ENTER A CHOICE OF 1-11 TO CHANGE, otherwise ENTER 12:
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) ID of primary library server for domain: $primaryLibServer
ENTER NEW VALUE (this will be the LON-CAPA Machine ID of a library server in
your domain; it cannot contain any of '_' '-' '.' or ':'.
This server will be where domain data which are not
associated with any specific home library server
will be stored (e.g., e-mail broadcast by Domain Coordinators
to users in the domain).
END
my $choice2=<>;
chomp($choice2);
$primaryLibServer=$choice2;
}
elsif ($choice==5) {
print(<<END);
5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
ENTER NEW VALUE:
END
my $choice2=<>;
chomp($choice2);
$perlvar{'lonAdmEMail'}=$choice2;
}
elsif ($choice==6) {
print(<<END);
6) Support E-mail Address: $perlvar{'lonSupportEMail'}
ENTER NEW VALUE:
END
my $choice2=<>;
chomp($choice2);
$perlvar{'lonSupportEMail'}=$choice2;
}
elsif ($choice==7) {
print(<<END);
7) 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==8) {
print(<<END);
8) 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==9) {
print(<<END);
9) Server Load: $perlvar{'lonLoadLim'}
ENTER NEW VALUE:
END
my $choice2=<>;
chomp($choice2);
$perlvar{'lonLoadLim'}=$choice2;
}
elsif ($choice==10) {
print(<<END);
10) 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==11) {
print(<<END);
11) 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==12) && (!$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};
my $line = "PerlSetVar $key $value";
if ($value eq '') {
$line = '#'.$line;
}
print(OUT <<END) unless $perlvarstatic{$key};
$line
END
}
close(OUT);
</perlscript>
</file>
<file>
<target dist='default'>loncom/hosts.tab</target>
<perlscript mode='fg'>
unless (-l "<TARGET />") {
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
if (!$domainTabExtras) {
$domainTabExtras=':::::';
}
$domaininsert="$perlvar{'lonDefDomain'}:$domainDescription:$domainTabExtras:$primaryLibServer\n";
if ($lonCluster eq 'standalone') {
open(OUT,'>../'.$lonCluster.'_hosts.tab') or
die('file generation error');
print(OUT $line2insert);
print OUT ("^$hostname\n");
close(OUT);
open(OUT,'>../'.$lonCluster.'_dns_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);
open(OUT,'>../'.$lonCluster.'_dns_domain.tab') or
die('file generation error');
print(OUT $domaininsert);
close(OUT);
}
if ($flag==1) {
`rm -f ../hosts.tab`;
`rm -f ../dns_hosts.tab`;
`ln -s ${lonCluster}_dns_hosts.tab ../dns_hosts.tab`;
open(IN,'<../'.$lonCluster.'_dns_hosts.tab');
while(my $line = <IN>) {
if ($line =~ /^\Q$line2insert\E$/) {
$lineexistflag=1;
}
if ($line =~ /^\Q$lonHostID\E\:/) {
$hostidexistflag=1;
}
}
close(IN);
if ($hostidexistflag and !$lineexistflag) {
print <<END;
WARNING: $lonHostID already exists inside
loncapa/loncom/${lonCluster}_dns_hosts.tab. The entry inside
${lonCluster}_dns_hosts.tab does not match your settings.
An entry inside ${lonCluster}_hosts.tab will be made
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}_dns_hosts.tab. Making duplicate entry in ${lonCluster}_hosts.tab
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 "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`;
`rm -f ../dns_domain.tab`;
`ln -s ${lonCluster}_dns_domain.tab ../dns_domain.tab`;
open(IN,'<../'.$lonCluster.'_dns_domain.tab');
while(my $line = <IN>) {
if ($line =~/^\Q$domaininsert\E$/) {
$lineexistflag=1;
}
if ($line =~/^\Q$perlvar{'lonDefDomain'}\E\:/) {
$domainexistflag=1;
}
}
close(IN);
if ($domainexistflag and !$lineexistflag) {
print <<END;
WARNING: $perlvar{'lonDefDomain'} already exists inside
loncapa/loncom/${lonCluster}_dns_domain.tab. The entry inside
${lonCluster}_dns_domain.tab does not match your settings.
An entry will be made in inside ${lonCluster}_domain.tab
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) {
`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);
print <<END;
Entry exists in ${lonCluster}_dns_domain.tab. Making duplicate entry in ${lonCluster}_domain.tab
END
`ln -s new_${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>