File:  [LON-CAPA] / doc / loncapafiles / updatequery.piml
Revision 1.6: download - view: text, annotated - select for diffs
Mon May 13 02:24:44 2002 UTC (21 years, 10 months ago) by harris41
Branches: MAIN
CVS tags: HEAD
the power of Roxette music;
BUG 327 fixed... this should completely query
the user for information for loncapa.conf...
also adaptively has a 'new install' mode
also queries for hosts.tab settings

<!-- updatequery.piml -->
<!-- Scott Harrison -->

<!-- $Id: updatequery.piml,v 1.6 2002/05/13 02:24:44 harris41 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(&lt;&lt;END);


*********************************************
*********************************************
****                                     ****
**** LON-CAPA SYSTEM INFORMATION REQUEST ****
****                                     ****
**** Please respond to the choices below ****
****                                     ****
*********************************************
*********************************************

END
sleep(3);
</perlscript>
</file>
<file>
<target dist='default'>/home/httpd/lonUsers2/</target>
<perlscript mode='fg'>
$|=1;
unless (-e "<TARGET />") {
  print(&lt;&lt;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,'&gt;/tmp/loncapa_updatequery.out');
close(OUT);

# query for Machine Role
  print(&lt;&lt;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=&lt;&gt;;
  chomp($choice);
  if ($choice==1) {
    open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
    print(OUT 'lonRole'."\t".'library'."\n");
    close(OUT);
    $lonRole='library';
    $r='l';
    $flag=1;
  }
  elsif ($choice==2) {
    open(OUT,'&gt;&gt;/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(&lt;&lt;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(&lt;&lt;END);
ENTER LONCAPA MACHINE ID [$lonHostID]:
END
}
else {
  print(&lt;&lt;END);
ENTER LONCAPA MACHINE ID:
END
}
  my $choice=&lt;&gt;;
  chomp($choice);
  if ($lonHostID and $choice=~/^\s*$/) {
    $choice=$lonHostID;
    open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
    print(OUT 'lonHostID'."\t".$choice."\n");
    close(OUT);
    $flag=1;
  }
  elsif ($choice!~/\_/ and $choice=~/^\w+$/) {
    open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
    print(OUT 'lonHostID'."\t".$choice."\n");
    close(OUT);
    $flag=1;
  }
  else {
    print "Invalid input (only alphanumeric characters supported).\n";
  }
}

  print(&lt;&lt;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(&lt;&lt;END);
ENTER LONCAPA DOMAIN [$ipdomain]:
END
}
else {
  print(&lt;&lt;END);
ENTER LONCAPA DOMAIN:
END
}
  my $choice=&lt;&gt;;
  chomp($choice);
  if ($ipdomain and $choice=~/^\s*$/) {
    $choice=$ipdomain;
    open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
    print(OUT 'lonDefDomain'."\t".$choice."\n");
    close(OUT);
    $lonDefDomain=$choice;
    $flag=1;
  }
  elsif ($choice!~/\_/ and $choice=~/^\w+$/) {
    open(OUT,'&gt;&gt;/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(&lt;&lt;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=&lt;&gt;;
  chomp($choice);
  if ($choice=~/\@/) {
    open(OUT,'&gt;&gt;/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,'&lt;'.$confdir.$filename) or die("Can't read $confdir$filename");
	while (my $configline=&lt;CONFIG&gt;) {
	    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,"&gt;$confdir$filename") or
      die("Cannot output to $confdir$filename\n");
    foreach my $key (keys %perlvar) {
      my $value=$perlvar{$key};
      print(OUT &lt;&lt;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 $confdir='';
my $filename='loncapa.conf';
my %perlvar;
    if (-e "$confdir$filename") {
	open(CONFIG,'&lt;'.$confdir.$filename) or 
          die("Can't read $confdir$filename");
	while (my $configline=&lt;CONFIG&gt;) {
	    if ($configline =~ /^[^\#]*PerlSetVar/) {
		my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
		chomp($varvalue);
		$perlvar{$varname}=$varvalue;
	    }
	}
	close(CONFIG);
    }
# implement editing logic below, interactively
# update loncapa.conf until 7 is entered

$flag=0;
while (!$flag) {
  print(&lt;&lt;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
END
  print(&lt;&lt;END);
ENTER A CHOICE OF 1-6 TO CHANGE, otherwise ENTER 7:
END
my $choice=&lt;&gt;;
chomp($choice);
  if ($choice==1) {
  print(&lt;&lt;END);
1) Machine Name: $perlvar{'lonHostID'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonHostID'}=$choice2;
  }
  elsif ($choice==2) {
  print(&lt;&lt;END);
2) Domain Name: $perlvar{'lonDefDomain'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonDefDomain'}=$choice2;
  }
  elsif ($choice==3) {
  print(&lt;&lt;END);
3) System Administrator's E-mail Address: $perlvar{'lonAdmEmail'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonAdmEmail'}=$choice2;
  }
  elsif ($choice==4) {
  print(&lt;&lt;END);
4) Role: $perlvar{'lonRole'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonRole'}=$choice2;
  }
  elsif ($choice==5) {
  print(&lt;&lt;END);
5) Cache Expiration Time: $perlvar{'lonExpire'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonExpire'}=$choice2;
  }
  elsif ($choice==6) {
  print(&lt;&lt;END);
6) Server Load: $perlvar{'lonLoadLim'}
ENTER NEW VALUE:
END
    my $choice2=&lt;&gt;;
    chomp($choice2);
    $perlvar{'lonLoadLim'}=$choice2;
  }
  elsif ($choice==7) {
    $flag=1;
  }
  else {

  }
}
</perlscript>
</file>
<file>
<target dist='default'>loncom/hosts.tab</target>
<perlscript mode='fg'>
unless (-l "<TARGET />") {
  print(&lt;&lt;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) PRESERVE the existing hosts.tab (/home/httpd/lonTabs/hosts.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
my $hostname=`hostname`;chomp($hostname);
my $hostaddress=`hostname -i $hostname`;chomp($hostaddress);
$flag=0;
while (!$flag) {
  print "ENTER 1, 2, 3, or 4:\n";
  my $choice=&lt;&gt;;
  chomp($choice);
  if ($choice==1) {
    $lonCluster='production';
    `rm -f ../hosts.tab`;
    `ln -s production_hosts.tab ../hosts.tab`;
    $flag=1;
  }
  elsif ($choice==2) {
    $lonCluster='standalone';
    open(OUT,'&gt;../standalone_hosts.tab') or
      die("cannot open loncom/standalone_hosts.tab for output\n");
    print(OUT &lt;&lt;END);
$perlvar{'lonHostID'}:$perlvar{'lonDefDomain'}:$perlvar{'lonRole'}:$hostname:$hostaddress
END
    close(OUT);
    `rm -f ../hosts.tab`;
    `ln -s standalone_hosts.tab ../hosts.tab`;
    $flag=1;
  }
  elsif ($choice==3) {
    $lonCluster='development';
    `rm -f loncom/hosts.tab`;
    `ln -s development_hosts.tab ../hosts.tab`;
    $flag=1;
  }
  elsif ($choice==4) {
    $lonCluster='existing';
    `rm -f ../hosts.tab`;
    `touch existing_hosts.tab`;
    if (-e '/home/httpd/lonTabs/hosts.tab') {
      `cp /home/httpd/lonTabs/hosts.tab ../existing_hosts.tab`;
    }
    `ln -s existing_hosts.tab ../hosts.tab`;
    $flag=1;
  }
  elsif ($choice==26) {
    $lonCluster='rawhide';
    `rm -f ../hosts.tab`;
    `ln -s rawhide_hosts.tab ../hosts.tab`;
    $flag=1;
  }
  else {

  }
}

}
</perlscript>
</file>
</files>
</piml>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>