Annotation of doc/loncapafiles/updatequery.piml, revision 1.84.2.1
1.2 harris41 1: <!-- updatequery.piml -->
1.1 harris41 2:
1.84.2.1! raeburn 3: <!-- $Id: updatequery.piml,v 1.84 2016/07/30 00:38:14 raeburn Exp $ -->
1.1 harris41 4:
5: <!--
6:
7: This file is part of the LearningOnline Network with CAPA (LON-CAPA).
8:
9: LON-CAPA is free software; you can redistribute it and/or modify
10: it under the terms of the GNU General Public License as published by
11: the Free Software Foundation; either version 2 of the License, or
12: (at your option) any later version.
13:
14: LON-CAPA is distributed in the hope that it will be useful,
15: but WITHOUT ANY WARRANTY; without even the implied warranty of
16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: GNU General Public License for more details.
18:
19: You should have received a copy of the GNU General Public License
20: along with LON-CAPA; if not, write to the Free Software
21: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22:
23: /home/httpd/html/adm/gpl.txt
24:
25: http://www.lon-capa.org/
26:
27: -->
28:
29: <piml>
30: <targetroot>/</targetroot>
31: <files>
32: <file>
1.4 harris41 33: <target dist='default'>/</target>
1.1 harris41 34: <perlscript mode='fg'>
1.4 harris41 35: $|=1;
1.84 raeburn 36: use strict;
37:
1.1 harris41 38: print(<<END);
39:
40:
41: *********************************************
42: *********************************************
43: **** ****
44: **** LON-CAPA SYSTEM INFORMATION REQUEST ****
45: **** ****
46: **** Please respond to the choices below ****
47: **** ****
48: *********************************************
49: *********************************************
50:
51: END
1.54 albertel 52: #sleep(3);
1.1 harris41 53: </perlscript>
54: </file>
55: <file>
1.22 albertel 56: <target dist='default'>loncom/hosts.tab</target>
57: <perlscript mode='fg'>
1.82 raeburn 58: my $lonCluster;
1.22 albertel 59: unless (-l "<TARGET />") {
60: print(<<END);
61:
62: ===============================================================================
1.30 www 63: Which cluster option would you like to have installed?
64: IMPORTANT: to take advantage of the cluster options 1) and 3),
1.83 raeburn 65: you must contact loncapa\@loncapa.org.
1.30 www 66:
67: 1) PRODUCTION - you want to eventually connect this machine to the
68: LON-CAPA content sharing network. This setting is for
69: schools, colleges, and universities, that currently
1.83 raeburn 70: are running - or in the future will run - courses.
1.22 albertel 71: 2) STAND-ALONE - you want this machine to run in 'stand-alone' mode and
1.83 raeburn 72: not be connected to other LON-CAPA machines for now.
1.30 www 73: 3) DEVELOPMENT - you want to do software (not content!) development with
74: this workstation and eventually link it with the
75: workstations of other LON-CAPA software developers.
1.40 albertel 76: 4) RUNNING YOUR OWN CLUSTER - this machine is not in the standard LON-CAPA
77: clusters and won't be in the future and you want the existing
78: hosts.tab and domain.tab files to be left alone.
79: (This choice is unlikely what you want to select.)
1.22 albertel 80: END
81: # Option number 26 will install rawhide_hosts.tab, but
82: # the typical user does not want to be part of an intensive
83: # machine test cluster.
84:
85: # get input
86: # if valid then process, otherwise loop
1.82 raeburn 87: my $flag=0;
1.22 albertel 88: while (!$flag) {
89: print "ENTER 1, 2, 3, or 4:\n";
90: my $choice=<>;
91: chomp($choice);
92: if ($choice==1) {
93: $lonCluster='production'; $flag=1;
94: }
95: elsif ($choice==2) {
96: $lonCluster='standalone'; $flag=1;
97: }
98: elsif ($choice==3) {
99: $lonCluster='development'; $flag=1;
100: }
101: elsif ($choice==4) {
102: $lonCluster='existing'; $flag=1;
1.52 albertel 103: foreach my $file ('hosts.tab','dns_hosts.tab',
104: 'domain.tab','dns_domain.tab') {
105: if (-e '/home/httpd/lonTabs/'.$file) {
106: `cp /home/httpd/lonTabs/$file ../existing_$file`;
107: }
108: else {
109: print <<END;
110: There is no existing /home/httpd/lonTabs/$file
1.22 albertel 111: END
1.52 albertel 112: die('');
113: }
1.27 albertel 114: }
1.22 albertel 115: }
116: elsif ($choice==26) {
117: $lonCluster='rawhide'; $flag=1;
118: }
119: }
120: }
121: </perlscript>
122: </file>
123: <file>
1.10 harris41 124: <target dist='default'>/home/httpd/lonTabs/hosts.tab</target>
1.1 harris41 125: <perlscript mode='fg'>
1.4 harris41 126: $|=1;
1.20 albertel 127: my $domainDescription;
1.29 albertel 128: my $domainTabExtras;
1.43 raeburn 129: my $primaryLibServer;
1.60 raeburn 130: my $protocol;
1.65 raeburn 131: my $intdom;
1.84 raeburn 132: my $desiredhostname;
1.43 raeburn 133: my @libservers = ();
1.1 harris41 134: unless (-e "<TARGET />") {
135: print(<<END);
136: WELCOME TO LON-CAPA!
137:
1.83 raeburn 138: If you have questions, please visit http://install.loncapa.org
139: or contact helpdesk\@loncapa.org.
1.1 harris41 140:
141: ===============================================================================
1.84 raeburn 142: The following 8 values are needed to configure LON-CAPA:
1.4 harris41 143: * Machine Role
1.8 harris41 144: * LON-CAPA Domain Name
1.82 raeburn 145: * LON-CAPA Machine ID Name
146: * Server Administration E-mail Address
1.68 raeburn 147: * LON-CAPA Domain's Primary Library Server Machine ID
148: * Web Server Protocol
149: * Internet Domain Name of Your Institution
1.84 raeburn 150: * Hostname
1.32 raeburn 151: ===============================================================================
152:
153: In addition, a Support E-mail Address can also be included. If
154: an address is included then one of the options in the LON-CAPA
155: help menu will be a link to a form that a user will complete to
156: request LON-CAPA help.
157:
1.1 harris41 158: END
1.3 harris41 159:
1.4 harris41 160: open(OUT,'>/tmp/loncapa_updatequery.out');
161: close(OUT);
162:
1.3 harris41 163: # query for Machine Role
164: print(<<END);
165: **** Machine Role ****
166: Library server (recommended if first-time installation of LON-CAPA):
167: Servers that are repositories of authoritative educational resources.
1.83 raeburn 168: These servers also provide the authoring spaces in which content
169: creators (e.g., faculty instructors) create their learning content.
1.3 harris41 170: Access server:
171: Servers that load-balance high-traffic delivery of educational resources
172: over the world-wide web.
1.4 harris41 173: 1) Will this be a library server? (recommended if this is your first install)
1.3 harris41 174: 2) Or, will this be an access server?
175: END
1.4 harris41 176: my $flag=0;
177: my $r='';
178: my $lonRole;
179: while (!$flag) {
180: print "ENTER A CHOICE OF 1 or 2:\n";
181: my $choice=<>;
182: chomp($choice);
183: if ($choice==1) {
184: open(OUT,'>>/tmp/loncapa_updatequery.out');
185: print(OUT 'lonRole'."\t".'library'."\n");
186: close(OUT);
187: $lonRole='library';
188: $r='l';
189: $flag=1;
190: }
191: elsif ($choice==2) {
192: open(OUT,'>>/tmp/loncapa_updatequery.out');
193: print(OUT 'lonRole'."\t".'access'."\n");
194: close(OUT);
195: $lonRole='access';
196: $r='a';
197: $flag=2;
198: }
199: else {
200:
201: }
202: }
1.3 harris41 203:
204: # need to recommend a machine ID name (ipdomain.l.somenumber)
1.36 albertel 205: my $hostname=`hostname -f`; chomp($hostname);
1.4 harris41 206: my $ipdomain='';
207: if ($hostname=~/([^\.]*)\.([^\.]*)$/) {
208: $ipdomain=$1;
209: }
1.1 harris41 210:
211: print(<<END);
212:
1.8 harris41 213: **** Domain ****
1.83 raeburn 214: [This does NOT need to correspond to an internet address domain.
1.45 www 215: Please make this name short AND descriptive of your organization.
216: Domain names are close to impossible to change later!!!
217: Good examples might be "msu" or "bionet" or "vermontcc".
218: Bad examples are "physics" (too general)
1.37 www 219: or "michiganstateuniversity" (too long)
1.83 raeburn 220: or "msuedu" (just make it "msu", or else make it msu.edu)
1.45 www 221: or "msuphysics" (only if there is a good reason to limit to department
222: - we don't know of one)
1.37 www 223: or "mydomain" (what is that?)
1.45 www 224: Avoid multiple domains at the same institution, even if it means that you
225: have to actually work together with your colleagues. You can still run
226: multiple library servers within the same domain.
227: If this domain is eventually going to be part of the main production
1.82 raeburn 228: cluster, you MUST contact the LON-CAPA group at MSU (loncapa\@loncapa.org)
1.45 www 229: to have a domain name assigned, and then use it exactly as given. This is
230: also true for test installs that might eventually turn into production setups.
1.83 raeburn 231: The short domain name needs to be unique, if your aim is to join a cluster
232: containing existing domains. Stop now if you have not yet contacted the
233: MSU LON-CAPA group.]
1.1 harris41 234: END
1.8 harris41 235:
236: # get domain name
1.1 harris41 237: # accept if valid, if not valid, tell user and repeat
1.4 harris41 238: $flag=0;
1.8 harris41 239: my $lonDefDomain;
1.4 harris41 240: while (!$flag) {
241: if ($ipdomain) {
242: print(<<END);
1.8 harris41 243: ENTER LONCAPA DOMAIN [$ipdomain]:
1.4 harris41 244: END
245: }
246: else {
247: print(<<END);
1.8 harris41 248: ENTER LONCAPA DOMAIN:
1.4 harris41 249: END
250: }
251: my $choice=<>;
252: chomp($choice);
1.18 harris41 253: my $bad_domain_flag=0;
1.41 albertel 254: my @bad_domain_names=('res','raw','userfiles','priv','adm','uploaded',
255: 'editupload');
1.18 harris41 256: foreach my $bad (@bad_domain_names) {
257: $bad_domain_flag=1 if $choice eq $bad;
258: }
1.37 www 259: if ($choice=~/capa/i) {
260: $bad_domain_flag=1;
261: }
1.8 harris41 262: if ($ipdomain and $choice=~/^\s*$/) {
263: $choice=$ipdomain;
1.4 harris41 264: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.8 harris41 265: print(OUT 'lonDefDomain'."\t".$choice."\n");
1.4 harris41 266: close(OUT);
1.8 harris41 267: $lonDefDomain=$choice;
1.4 harris41 268: $flag=1;
1.51 albertel 269: } elsif (length($choice)>35) {
1.37 www 270: print "Name too long\n";
271: } elsif (length($choice)<2) {
272: print "Name too short\n";
1.38 www 273: } elsif ($bad_domain_flag) {
274: print "Invalid input ('$choice' conflicts with LON-CAPA namespace).\n";
275: print "Please try something different than '$choice'\n";
1.51 albertel 276: } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
1.4 harris41 277: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.8 harris41 278: print(OUT 'lonDefDomain'."\t".$choice."\n");
1.4 harris41 279: close(OUT);
1.8 harris41 280: $lonDefDomain=$choice;
281: $r='l';
1.4 harris41 282: $flag=1;
1.37 www 283: } else {
1.51 albertel 284: print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
1.4 harris41 285: }
286: }
1.1 harris41 287:
1.20 albertel 288: # get domain description
289: # accept if valid, if not valid, tell user and repeat
290: $flag=0;
291:
292: while (!$flag) {
293: print(<<END);
294:
295: **** Domain Description ****
296: String describing the domain, to be shown to users.
297: [Example, msu is Michigan State University]
298: ENTER DOMAIN DESCRIPTION:
299: END
300:
301: my $choice=<>;
302: chomp($choice);
303: if ($choice!~/:/) {
304: open(OUT,'>>/tmp/loncapa_updatequery.out');
305: print(OUT 'domainDescription'."\t".$choice."\n");
306: close(OUT);
307: $domainDescription=$choice;
308: $flag=1;
309: }
310: else {
311: print "Invalid input (no ':' allowed).\n";
312: }
313: }
314:
1.8 harris41 315: my $lonHostID;
316: if ($lonDefDomain) {
317: $lonHostID=$lonDefDomain.$r.int(1+rand(9)); # should be probably also detect
318: # against the hosts.tab
319: }
320:
1.1 harris41 321: print(<<END);
322:
1.8 harris41 323: **** Machine ID Name ****
1.45 www 324: [This does NOT need to correspond to internet address names;
1.8 harris41 325: this name MUST be unique to the whole LON-CAPA network;
1.45 www 326: we recommend that you use a name based off of your institution.
327: Good examples: "msul1" or "bioneta2".
328: Bad examples: "loncapabox" or "studentsinside".
1.37 www 329: Note that machine names are very hard to change later.]
1.1 harris41 330: END
1.8 harris41 331: # get machine name
1.1 harris41 332: # accept if valid, if not valid, tell user and repeat
1.4 harris41 333: $flag=0;
334: while (!$flag) {
335: if ($ipdomain) {
336: print(<<END);
1.8 harris41 337: ENTER LONCAPA MACHINE ID [$lonHostID]:
1.4 harris41 338: END
339: }
340: else {
341: print(<<END);
1.8 harris41 342: ENTER LONCAPA MACHINE ID:
1.4 harris41 343: END
344: }
345: my $choice=<>;
346: chomp($choice);
1.37 www 347: if ($choice=~/capa/i) {
348: print "Invalid input (names containing 'capa' are reserved).\n";
349: } elsif ($lonHostID and $choice=~/^\s*$/) {
1.8 harris41 350: $choice=$lonHostID;
1.4 harris41 351: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.8 harris41 352: print(OUT 'lonHostID'."\t".$choice."\n");
1.4 harris41 353: close(OUT);
1.8 harris41 354: $lonHostID=$choice;
1.4 harris41 355: $flag=1;
1.51 albertel 356: } elsif (length($choice)>45) {
1.37 www 357: print "Name too long\n";
358: } elsif (length($choice)<4) {
359: print "Name too short\n";
1.51 albertel 360: } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
1.4 harris41 361: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.8 harris41 362: print(OUT 'lonHostID'."\t".$choice."\n");
1.4 harris41 363: close(OUT);
1.8 harris41 364: $lonHostID=$choice;
1.4 harris41 365: $flag=1;
1.37 www 366: } else {
1.51 albertel 367: print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
1.4 harris41 368: }
369: }
1.1 harris41 370:
1.43 raeburn 371: # get primary library server in domain
372: if ($lonRole eq 'library') {
373: if (!grep/^\Q$lonHostID\E$/,@libservers) {
374: push(@libservers,$lonHostID);
375: }
376: if (@libservers == 1) {
377: $primaryLibServer = $libservers[0];
378: }
379: }
1.68 raeburn 380:
381: $flag=0;
1.43 raeburn 382: while (!$flag) {
383: print(<<END);
384: **** Domain's Primary Library Server ID ****
385: This should be the LON-CAPA machine ID of a library server in your
386: domain. If you only have a single library server in your domain, then
387: the Primary Library server ID will be the machine ID of that server.
388: This server will be where domain data which are not associated with any
1.83 raeburn 389: specific home library server will be stored (e.g., configurations that
390: apply to all nodes in the domain).
1.43 raeburn 391: END
392: if (defined($primaryLibServer)) {
393: print(<<END);
394: ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$primaryLibServer]:
395: END
396: } elsif (@libservers > 0) {
397: print(<<END);
398: ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$libservers[0]]
399: END
400: } else {
401: print (<<END);
402: 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.
403: END
404: }
405:
406: my $choice=<>;
407: chomp($choice);
408: if ($primaryLibServer and $choice=~/^\s*$/) {
409: $choice=$primaryLibServer;
410: open(OUT,'>>/tmp/loncapa_updatequery.out');
411: print(OUT 'primaryLibServer'."\t".$choice."\n");
412: close(OUT);
413: $flag=1;
1.51 albertel 414: } elsif (length($choice)>35) {
1.43 raeburn 415: print "Name too long\n";
416: } elsif (length($choice)<4) {
417: print "Name too short\n";
1.51 albertel 418: } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
1.43 raeburn 419: open(OUT,'>>/tmp/loncapa_updatequery.out');
420: print(OUT 'primaryLibServer'."\t".$choice."\n");
421: close(OUT);
422: $primaryLibServer=$choice;
423: $flag=1;
424: } else {
1.51 albertel 425: print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
1.43 raeburn 426: }
427: }
428:
429:
1.32 raeburn 430: # get admin e-mail address
1.4 harris41 431: # accept if valid, if not valid, tell user and repeat
432: $flag=0;
1.9 harris41 433: my $lonAdmEMail;
1.4 harris41 434: while (!$flag) {
1.1 harris41 435: print(<<END);
436:
1.55 albertel 437: **** Server Administrators E-mail ****
1.1 harris41 438: E-mail address of the person who will manage this machine
1.4 harris41 439: [should be in the form somebody\@somewhere]
1.32 raeburn 440: ENTER ADMIN E-MAIL ADDRESS:
1.1 harris41 441: END
442:
1.4 harris41 443: my $choice=<>;
444: chomp($choice);
445: if ($choice=~/\@/) {
446: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.9 harris41 447: print(OUT 'lonAdmEMail'."\t".$choice."\n");
1.4 harris41 448: close(OUT);
1.9 harris41 449: $lonAdmEMail=$choice;
1.4 harris41 450: $flag=1;
451: }
452: else {
453: print "Invalid input (this needs to look like an e-mail address!).\n";
454: }
455: }
456:
1.32 raeburn 457:
458: # get support e-mail address
459: # accept if valid, if not valid, tell user and repeat
460: $flag=0;
461: my $lonSupportEMail;
462: while (!$flag) {
463: print(<<END);
464:
465: **** Support E-mail ****
466: E-mail address of the person who will receive
467: help requests from LON-CAPA users who access
468: the system via this server. If the address is left blank,
469: then a help support form will not be displayed
470: as part of the help menu.
471: [should be in the form somebody\@somewhere]
472: ENTER SUPPORT E-MAIL ADDRESS:
473: END
474:
475: my $choice=<>;
476: chomp($choice);
477: $choice =~ s/\s//g;
1.33 albertel 478: if ( ($choice=~/\@/) || $choice eq '') {
1.32 raeburn 479: open(OUT,'>>/tmp/loncapa_updatequery.out');
480: print(OUT 'lonSupportEMail'."\t".$choice."\n");
481: close(OUT);
482: $lonSupportEMail=$choice;
483: $flag=1;
484: }
485: else {
486: print "Invalid input (this either needs to be blank, or look like an e-mail address!).\n";
487: }
488: }
489:
1.68 raeburn 490: # get protocol
491: # accept if valid, if not valid, tell user and repeat
492: $flag=0;
1.60 raeburn 493: while (!$flag) {
494: print(<<END);
495:
496: **** Web Server Protocol ****
497: If you plan to run the Apache server with SSL enabled,
498: the protocol should be: https; otherwise it should be http.
1.68 raeburn 499: ENTER WEB SERVER PROTOCOL [http]:
1.60 raeburn 500: END
501:
502: my $choice=<>;
503: chomp($choice);
1.65 raeburn 504: if ($choice =~ /^https?$/) {
1.60 raeburn 505: open(OUT,'>>/tmp/loncapa_updatequery.out');
506: print(OUT 'protocol'."\t".$choice."\n");
507: close(OUT);
508: $protocol=$choice;
509: $flag=1;
1.68 raeburn 510: } elsif ($choice eq '') {
511: open(OUT,'>>/tmp/loncapa_updatequery.out');
512: print(OUT 'protocol'."\t".'http'."\n");
513: close(OUT);
514: $protocol = 'http';
515: $flag = 1;
516: } else {
1.60 raeburn 517: print "Invalid input (only http or https allowed).\n";
518: }
519: }
1.32 raeburn 520:
1.68 raeburn 521: # get internet domain
522: # accept if valid, if not valid, tell user and repeat
523: $flag=0;
1.65 raeburn 524: while (!$flag) {
525: print(<<END);
526:
527: **** Internet Domain Name of Your Institution ****
528:
529: The internet domain name used for servers at your institution
530: should be provided. This will be similar to: ustate.edu or
1.83 raeburn 531: topcollege.ac.uk or myhostingcompany.com, i.e., the part of
1.65 raeburn 532: a server hostname which indicates to which organization the
533: server belongs.
534:
535: ENTER INTERNET DOMAIN NAME:
536: END
537:
538: my $choice=<>;
539: chomp($choice);
540: if ($choice =~/[^.]+\.[^.]+/) {
541: open(OUT,'>>/tmp/loncapa_updatequery.out');
1.68 raeburn 542: print(OUT 'internet domain'."\t".$choice."\n");
1.65 raeburn 543: close(OUT);
544: $intdom=$choice;
545: $flag=1;
546: }
547: else {
548: print "Invalid input (must be at least two levels separated by . - e.g., ustate.edu).\n";
549: }
550: }
551:
1.84 raeburn 552: # get hostname
553: # accept if valid, if not valid, tell user and repeat
554: $flag=0;
555: my $posshostname;
556: if (($hostname =~ /^[A-Za-z0-9\-]+$/) && ($intdom ne '')) {
557: $posshostname = $hostname.'.'.$intdom;
558: }
559: if (($hostname =~ /^[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/) &&
560: ($hostname =~ /^[A-Za-z0-9.\-]+$/)) {
561: $posshostname = $hostname;
562: }
563: while (!$flag) {
564: print(<<END);
565:
566: ****** Hostname of the server/VM *****
567:
568: The hostname of the server/VM is required. This will be similar to:
569: somename.ustate.edu or somename.department.ustate.edu, and would be
570: the web address which users would point their web browsers at to
571: access the server.
572:
573: END
574:
575: if ($posshostname) {
576: print "ENTER HOSTNAME OF SERVER [$posshostname]:\n";
577: } else {
578: print "ENTER HOSTNAME OF SERVER:\n";
579: }
580:
581: my $choice=<>;
582: chomp($choice);
583: if (($choice =~ /^[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/) &&
584: ($choice =~ /^[A-Za-z0-9.\-]+$/)) {
585: open(OUT,'>>/tmp/loncapa_updatequery.out');
586: print(OUT 'hostname'."\t".$choice."\n");
587: close(OUT);
588: $desiredhostname=$choice;
589: $flag=1;
590: } elsif (($choice eq '') && ($posshostname ne '')) {
591: open(OUT,'>>/tmp/loncapa_updatequery.out');
592: print(OUT 'hostname'."\t$posshostname\n");
593: close(OUT);
594: $desiredhostname = $posshostname;
595: $flag = 1;
596: } else {
597: print "Invalid input (only letters, numbers, - and . allowed, with at least one .).\n";
598: }
599: }
1.65 raeburn 600:
1.1 harris41 601: # update loncapa.conf
1.49 raeburn 602: my $confdir = '/etc/httpd/conf/';
1.84.2.1! raeburn 603: if ('<DIST />' eq 'sles10' || '<DIST />' eq 'sles11' || '<DIST />' eq 'sles12' || '<DIST />' eq 'suse10.1' || '<DIST />' eq 'suse10.2' || '<DIST />' eq 'suse10.3' || '<DIST />' eq 'suse11.1' || '<DIST />' eq 'suse11.2' || '<DIST />' eq 'suse11.3' || '<DIST />' eq 'suse11.4' || '<DIST />' eq 'suse12.1' || '<DIST />' eq 'suse12.2' || '<DIST />' eq 'suse12.3' || '<DIST />' eq 'suse13.1' || '<DIST />' eq 'suse13.2' || '<DIST />' eq 'debian5' || '<DIST />' eq 'debian6' || '<DIST />' eq 'ubuntu6' || '<DIST />' eq 'ubuntu8' || '<DIST />' eq 'ubuntu10' || '<DIST />' eq 'ubuntu12' || '<DIST />' eq 'ubuntu14' || '<DIST />' eq 'ubuntu16' || '<DIST />' eq 'ubuntu18') {
1.49 raeburn 604: $confdir = '/etc/apache2/';
605: }
1.5 harris41 606: my $filename='loncapa.conf';
607: my %perlvar;
608: if (-e "$confdir$filename") {
609: open(CONFIG,'<'.$confdir.$filename) or die("Can't read $confdir$filename");
610: while (my $configline=<CONFIG>) {
611: if ($configline =~ /^[^\#]*PerlSetVar/) {
612: my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
613: chomp($varvalue);
1.12 harris41 614: $perlvar{$varname}=$varvalue if $varvalue!~/^\{\[\[\[\[/;
1.5 harris41 615: }
616: }
617: close(CONFIG);
618: }
619: $perlvar{'lonHostID'}=$lonHostID;
620: $perlvar{'lonDefDomain'}=$lonDefDomain;
1.9 harris41 621: $perlvar{'lonAdmEMail'}=$lonAdmEMail;
1.32 raeburn 622: $perlvar{'lonSupportEMail'}=$lonSupportEMail;
1.5 harris41 623: $perlvar{'lonRole'}=$lonRole;
1.16 harris41 624: unless ($perlvar{'lonLoadLim'} and $perlvar{'lonLoadLim'}!~/\{\[\[\[\[/) {
1.5 harris41 625: $perlvar{'lonLoadLim'}='2.00';
626: }
1.25 albertel 627: unless ($perlvar{'lonUserLoadLim'} and $perlvar{'lonUserLoadLim'}!~/\{\[\[\[\[/) {
628: $perlvar{'lonUserLoadLim'}='0';
629: }
1.16 harris41 630: unless ($perlvar{'lonExpire'} and $perlvar{'lonExpire'}!~/\{\[\[\[\[/) {
1.5 harris41 631: $perlvar{'lonExpire'}='86400';
632: }
1.16 harris41 633: unless ($perlvar{'lonReceipt'} and $perlvar{'lonReceipt'}!~/\{\[\[\[\[/) {
1.5 harris41 634: my $lonReceipt='';
1.11 harris41 635: srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
1.82 raeburn 636: my @alnum=(0..9,"a".."z");
1.5 harris41 637: foreach my $i (1..20) {
638: $lonReceipt.=$alnum[int(rand(36))];
639: }
640: $perlvar{'lonReceipt'}=$lonReceipt;
641: }
642: open(OUT,">$confdir$filename") or
643: die("Cannot output to $confdir$filename\n");
644: foreach my $key (keys %perlvar) {
645: my $value=$perlvar{$key};
1.49 raeburn 646: my $line = "PerlSetVar $key $value";
647: if ($value eq '') {
648: $line = '#'.$line;
649: }
1.5 harris41 650: print(OUT <<END);
1.49 raeburn 651: $line
1.5 harris41 652: END
653: }
654: close(OUT);
1.1 harris41 655: }
656: </perlscript>
657: </file>
658: <file>
1.49 raeburn 659: <target dist='default'>/etc/httpd/conf/</target>
1.84.2.1! raeburn 660: <target dist='sles10 sles11 sles12 suse10.1 suse10.2 suse10.3 suse11.1 suse11.2 suse11.3 suse11.4 suse12.1 suse12.2 suse12.3 suse13.1 suse13.2 debian5 debian6 ubuntu6 ubuntu8 ubuntu10 ubuntu12 ubuntu14 ubuntu16 ubuntu18'>/etc/apache2/</target>
1.1 harris41 661: <perlscript mode='fg'>
1.31 albertel 662: sub securesetting {
663: my (%perlvar)=@_;
664: my $securestatus='unknown';
665: my $securenum='';
666: if ( $perlvar{'loncAllowInsecure'}&& $perlvar{'londAllowInsecure'}) {
667: $securestatus='no'; $securenum='4';
668: } elsif ( $perlvar{'loncAllowInsecure'}&& !$perlvar{'londAllowInsecure'}) {
669: $securestatus='lond'; $securenum='3';
670: } elsif (!$perlvar{'loncAllowInsecure'}&& $perlvar{'londAllowInsecure'}) {
671: $securestatus='lonc'; $securenum='2';
672: } elsif (!$perlvar{'loncAllowInsecure'}&& !$perlvar{'londAllowInsecure'}) {
673: $securestatus='yes (lond and lonc)'; $securenum='1';
674: }
675: return ($securestatus,$securenum);
676: }
1.1 harris41 677: # read values from loncapa.conf
1.49 raeburn 678: my $confdir = "<TARGET />";
1.5 harris41 679: my $filename='loncapa.conf';
680: my %perlvar;
1.31 albertel 681: my ($securestatus,$securenum);
1.5 harris41 682: if (-e "$confdir$filename") {
683: open(CONFIG,'<'.$confdir.$filename) or
684: die("Can't read $confdir$filename");
685: while (my $configline=<CONFIG>) {
686: if ($configline =~ /^[^\#]*PerlSetVar/) {
687: my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
688: chomp($varvalue);
689: $perlvar{$varname}=$varvalue;
690: }
691: }
692: close(CONFIG);
693: }
1.16 harris41 694: unless ($perlvar{'lonLoadLim'} and $perlvar{'lonLoadLim'}!~/\{\[\[\[\[/) {
695: $perlvar{'lonLoadLim'}='2.00';
696: }
1.25 albertel 697: unless ($perlvar{'lonUserLoadLim'} and $perlvar{'lonUserLoadLim'}!~/\{\[\[\[\[/) {
698: $perlvar{'lonUserLoadLim'}='0';
699: }
1.16 harris41 700: unless ($perlvar{'lonExpire'} and $perlvar{'lonExpire'}!~/\{\[\[\[\[/) {
701: $perlvar{'lonExpire'}='86400';
702: }
1.31 albertel 703: unless ($perlvar{'londAllowInsecure'} and $perlvar{'londAllowInsecure'}!~/\{\[\[\[\[/) {
704: $perlvar{'londAllowInsecure'}='1';
705: }
706: unless ($perlvar{'loncAllowInsecure'} and $perlvar{'loncAllowInsecure'}!~/\{\[\[\[\[/) {
707: $perlvar{'loncAllowInsecure'}='1';
708: }
709: ($securestatus,$securenum)=&securesetting(%perlvar);
1.16 harris41 710: unless ($perlvar{'lonReceipt'} and $perlvar{'lonReceipt'}!~/\{\[\[\[\[/) {
711: my $lonReceipt='';
712: srand(time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
1.82 raeburn 713: my @alnum=(0..9,"a".."z");
1.16 harris41 714: foreach my $i (1..20) {
715: $lonReceipt.=$alnum[int(rand(36))];
716: }
717: $perlvar{'lonReceipt'}=$lonReceipt;
718: }
1.7 harris41 719: my %perlvarstatic;
720: if (-e "${confdir}loncapa_apache.conf") {
721: open(CONFIG,'<'.$confdir.'loncapa_apache.conf') or
722: die("Can't read ${confdir}loncapa_apache.conf");
723: while (my $configline=<CONFIG>) {
724: if ($configline =~ /^[^\#]*PerlSetVar/) {
725: my ($unused,$varname,$varvalue)=split(/\s+/,$configline);
726: chomp($varvalue);
727: $perlvarstatic{$varname}=$varvalue;
728: }
729: }
730: close(CONFIG);
731: }
1.55 albertel 732:
733: my (@hosts_files, @domain_files);
734: if ( $lonCluster ne 'existing') {
735: push(@domain_files,'../'.$lonCluster.'_domain.tab',
736: '../'.$lonCluster.'_dns_domain.tab');
737: push(@hosts_files,'../'.$lonCluster.'_hosts.tab',
738: '../'.$lonCluster.'_dns_hosts.tab');
739: }
740: push(@domain_files,'/home/httpd/lonTabs/domain.tab',
741: '/home/httpd/lonTabs/dns_domain.tab');
742: push(@hosts_files,'/home/httpd/lonTabs/hosts.tab',
743: '/home/httpd/lonTabs/dns_hosts.tab');
744:
1.23 albertel 745: if (!$domainDescription) {
1.55 albertel 746: foreach my $file (@domain_files) {
747: open(IN,'<'.$file);
748: while(my $line = <IN>) {
749: if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
750: (undef,$domainDescription,$domainTabExtras)=split(/:/,$line,3);
751: chomp($domainDescription);
752: chomp($domainTabExtras);
1.60 raeburn 753: # the remaining field (primary lib server) is handled later
1.55 albertel 754: $domainTabExtras = join(':',(split(/:/,$domainTabExtras))[0..5]);
755: last;
756: }
757: }
758: close(IN);
759: last if ($domainDescription);
760: }
1.23 albertel 761: }
1.55 albertel 762:
1.84 raeburn 763: if ((!$protocol) || (!$desiredhostname)) {
1.60 raeburn 764: foreach my $file (@hosts_files) {
765: open(IN,'<'.$file);
766: while(my $line = <IN>) {
1.84 raeburn 767: if ($line =~ /^\Q$perlvar{'lonHostID'}\E:\Q$perlvar{'lonDefDomain'}\E\:(?:access|library)\:([^:]+)\:(https?)/) {
768: if (!$desiredhostname) {
769: $desiredhostname = $1;
770: }
771: if (!$protocol) {
772: $protocol = $2;
773: chomp($protocol);
774: }
1.60 raeburn 775: last;
776: }
777: }
778: }
779: }
780:
781: if (!$protocol) {
782: $protocol = 'http';
783: }
784:
1.65 raeburn 785: if (!$intdom) {
786: foreach my $file (@hosts_files) {
787: open(IN,'<'.$file);
788: while(my $line = <IN>) {
1.66 raeburn 789: if ($line =~ /^\Q$perlvar{'lonHostID'}\E:\Q$perlvar{'lonDefDomain'}\E\:(?:access|library)\:[^:]+\:https?\:([^:]+)/) {
1.65 raeburn 790: $intdom = $1;
1.66 raeburn 791: chomp($intdom);
1.65 raeburn 792: last;
793: }
794: }
795: }
796: }
797:
1.82 raeburn 798: while(!$primaryLibServer && (@hosts_files || @domain_files)) {
1.55 albertel 799: my $file = shift(@domain_files);
800: open(IN,'<'.$file);
801: while(my $line = <IN>) {
802: if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
803: $primaryLibServer=(split(/:/,$line))[8];
1.43 raeburn 804: chomp($primaryLibServer);
805: }
806: }
807: close(IN);
1.55 albertel 808: last if ($primaryLibServer);
809: $file = shift(@hosts_files);
810: open(IN,'<'.$file);
811: while(my $line = <IN>) {
812: if ($line =~ /^([^\:]+)\:\Q$perlvar{'lonDefDomain'}\E\:library\:/) {
813: push(@libservers,$1);
814: }
815: }
1.58 albertel 816: # make list unique
817: @libservers = keys(%{{ map { $_ => 1 } (@libservers) }});
1.55 albertel 818: close(IN);
819: if (@libservers == 1) {
820: $primaryLibServer = $libservers[0];
821: }
1.43 raeburn 822: }
1.23 albertel 823:
1.6 harris41 824: # implement editing logic below, interactively
1.84 raeburn 825: # update loncapa.conf until 15 is entered
1.6 harris41 826:
1.82 raeburn 827: my $flag=0;
1.17 harris41 828:
1.6 harris41 829: while (!$flag) {
1.1 harris41 830: print(<<END);
831:
832: ===============================================================================
833: This is now the current configuration of your machine.
1.31 albertel 834: 1) Domain Name: $perlvar{'lonDefDomain'}
835: 2) Domain Description: $domainDescription
836: 3) Machine Name: $perlvar{'lonHostID'}
1.43 raeburn 837: 4) ID of primary library server for domain: $primaryLibServer
1.47 albertel 838: 5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
1.43 raeburn 839: 6) Support E-mail Address: $perlvar{'lonSupportEMail'}
1.60 raeburn 840: 7) Web Server Protocol (http or https): $protocol
1.65 raeburn 841: 8) Internet Domain Name: $intdom
1.84 raeburn 842: 9) Hostname: $desiredhostname
843: 10) Role: $perlvar{'lonRole'}
844: 11) Cache Expiration Time: $perlvar{'lonExpire'}
845: 12) Server Load: $perlvar{'lonLoadLim'}
846: 13) User Load: $perlvar{'lonUserLoadLim'}
847: 14) Allow only secure connections: $securestatus
848: 15) Everything is correct up above
1.6 harris41 849: END
1.38 www 850:
1.54 albertel 851: my @error;
1.38 www 852: foreach my $v ($perlvar{'lonDefDomain'},$perlvar{'lonHostID'}) {
1.82 raeburn 853: if (length($v)>35) { push(@error,"Name $v too long"); }
854: if (length($v)<2) { push(@error,"Name $v too short"); }
1.39 albertel 855: if ($v=~/capa/i) {
856: if ($v!~/^oucapa\d+$/ &&
857: ($v!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) {
1.54 albertel 858: push(@error,"Name $v contains 'capa'");
1.39 albertel 859: }
860: }
1.41 albertel 861: foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
862: 'editupload') {
1.54 albertel 863: push(@error,"\nName $v reserved.") if $v eq $bad;
1.38 www 864: }
1.54 albertel 865: if ($v=~/[^\w\-.]/) { push(@error,"Name $v contains special characters"); }
1.38 www 866: }
1.53 albertel 867: if ($domainDescription =~ /^\s*$/) {
1.54 albertel 868: push(@error,"Domain Description is blank.");
1.53 albertel 869: } elsif ($domainDescription!~/^[\(\)\-\w\s,]+$/) {
1.54 albertel 870: push(@error,"Domain Description contains special characters.");
1.38 www 871: }
872: foreach my $v ($perlvar{'lonExpire'},$perlvar{'lonLoadLim'}) {
1.54 albertel 873: unless ($v=~/^[\d+\.]+$/) { push(@error,"Number expected instead of $v"); }
1.38 www 874: }
875: unless (($perlvar{'lonRole'} eq 'library') || ($perlvar{'lonRole'} eq 'access')) {
1.54 albertel 876: push(@error,"Invalid Role");
1.17 harris41 877: }
1.43 raeburn 878:
1.60 raeburn 879: unless (($protocol eq 'http') || ($protocol eq 'https')) {
880: push(@error,"Invalid Protocol (must be http or https");
881: }
882:
1.65 raeburn 883: if (!defined($intdom)) {
884: push(@error,"No internet domain name designated. Enter something like ustate.edu");
1.71 raeburn 885: } elsif ($intdom !~ /[^.]+\.\w{2,6}$/) {
1.65 raeburn 886: push(@error,"Invalid Internet domain name (must be at least two levels separated by . - e.g., ustate.edu");
887: }
888:
1.43 raeburn 889: if (!defined($primaryLibServer)) {
890: if (@libservers > 0) {
1.54 albertel 891: push(@error,"No primary library server ID designated. Choose from: ".join(',',sort(@libservers)));
1.43 raeburn 892: } else {
1.54 albertel 893: push(@error,"No library servers in this domain (including current server)");
1.43 raeburn 894: }
895: } else {
1.54 albertel 896: if (length($primaryLibServer)>35) { push(@error,"Primary Library Server ID: $primaryLibServer too long"); }
897: if (length($primaryLibServer)<2) { push(@error,"Primary Library Server ID: $primaryLibServer too short"); }
1.43 raeburn 898: if ($primaryLibServer =~/capa/i) {
899: if ($primaryLibServer!~/^oucapa\d+$/ &&
900: ($primaryLibServer!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) {
1.54 albertel 901: push(@error,"Primary library server ID $primaryLibServer contains 'capa'")
1.43 raeburn 902: }
903: }
904: foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
905: 'editupload') {
1.54 albertel 906: push(@error,"Primary library server ID $primaryLibServer reserved.") if $primaryLibServer eq $bad;
1.43 raeburn 907: }
1.54 albertel 908: if ($primaryLibServer=~/[^\w\-.]/) { push(@error,"Primary library server ID $primaryLibServer contains special characters"); }
1.43 raeburn 909: }
910:
911:
1.54 albertel 912: if (@error) { print "\n*** ERRORS: \n\t".join("\n\t",@error)."\n"; }
1.6 harris41 913: print(<<END);
1.84 raeburn 914: ENTER A CHOICE OF 1-14 TO CHANGE, otherwise ENTER 15:
1.1 harris41 915: END
1.5 harris41 916: my $choice=<>;
917: chomp($choice);
1.6 harris41 918: if ($choice==1) {
919: print(<<END);
1.16 harris41 920: 1) Domain Name: $perlvar{'lonDefDomain'}
1.20 albertel 921: ENTER NEW VALUE (this is an internal value used to identify a group of
922: LON-CAPA machines, it must be alphanumerical, we suggest
923: using a part of your actual DNS domain. For example, for
924: the machine loncapa.msu.edu, we set the Domain to msu):
1.6 harris41 925: END
926: my $choice2=<>;
927: chomp($choice2);
1.8 harris41 928: $perlvar{'lonDefDomain'}=$choice2;
1.6 harris41 929: }
930: elsif ($choice==2) {
931: print(<<END);
1.20 albertel 932: 2) Domain Description: $domainDescription
933: ENTER NEW VALUE (this should be a string that describes your domain, spaces
934: and punctuation are fine except for ':'):
935: END
936: my $choice2=<>;
937: chomp($choice2);
938: $domainDescription=$choice2;
939: }
940: elsif ($choice==3) {
941: print(<<END);
942: 3) Machine Name: $perlvar{'lonHostID'}
943: ENTER NEW VALUE (this will be the name of the machine in the LON-CAPA network
944: it cannot contain any of '_' '-' '.' or ':'. We suggest that
945: if you are in the domain 'example' and are the first library
946: server you enter 'examplel1') :
1.6 harris41 947: END
948: my $choice2=<>;
949: chomp($choice2);
1.8 harris41 950: $perlvar{'lonHostID'}=$choice2;
1.6 harris41 951: }
1.20 albertel 952: elsif ($choice==4) {
1.6 harris41 953: print(<<END);
1.43 raeburn 954: 4) ID of primary library server for domain: $primaryLibServer
955: ENTER NEW VALUE (this will be the LON-CAPA Machine ID of a library server in
956: your domain; it cannot contain any of '_' '-' '.' or ':'.
957: This server will be where domain data which are not
958: associated with any specific home library server
959: will be stored (e.g., e-mail broadcast by Domain Coordinators
960: to users in the domain).
961: END
962: my $choice2=<>;
963: chomp($choice2);
964: $primaryLibServer=$choice2;
965: }
966: elsif ($choice==5) {
967: print(<<END);
1.47 albertel 968: 5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
1.6 harris41 969: ENTER NEW VALUE:
970: END
971: my $choice2=<>;
972: chomp($choice2);
1.9 harris41 973: $perlvar{'lonAdmEMail'}=$choice2;
1.6 harris41 974: }
1.43 raeburn 975: elsif ($choice==6) {
1.6 harris41 976: print(<<END);
1.43 raeburn 977: 6) Support E-mail Address: $perlvar{'lonSupportEMail'}
1.32 raeburn 978: ENTER NEW VALUE:
979: END
980: my $choice2=<>;
981: chomp($choice2);
982: $perlvar{'lonSupportEMail'}=$choice2;
983: }
1.43 raeburn 984: elsif ($choice==7) {
1.32 raeburn 985: print(<<END);
1.60 raeburn 986: 7) Server Protocol (http or https):
987: ENTER NEW VALUE: (this should be either 'http' or 'https'
988: if in doubt set to 'http'):
989: END
990: my $choice2=<>;
991: chomp($choice2);
992: $protocol=$choice2;
993: }
994: elsif ($choice==8) {
995: print(<<END);
1.65 raeburn 996: 8) Internet Domain Name of Institution
997: ENTER NEW VALUE:
998:
999: END
1000: my $choice2=<>;
1001: chomp($choice2);
1002: $intdom=$choice2;
1003: }
1004: elsif ($choice==9) {
1005: print(<<END);
1.84 raeburn 1006: 9) Hostname of Server/VM
1007: ENTER NEW VALUE:
1008:
1009: END
1010: my $choice2=<>;
1011: chomp($choice2);
1012: $desiredhostname=$choice2;
1013: }
1014:
1015: elsif ($choice==10) {
1016: print(<<END);
1017: 10) Role: $perlvar{'lonRole'}
1.20 albertel 1018: ENTER NEW VALUE (this should be either 'access' or 'library'
1019: if in doubt select 'library'):
1.6 harris41 1020: END
1021: my $choice2=<>;
1022: chomp($choice2);
1023: $perlvar{'lonRole'}=$choice2;
1024: }
1.84 raeburn 1025: elsif ($choice==11) {
1.6 harris41 1026: print(<<END);
1.84 raeburn 1027: 11) Cache Expiration Time: $perlvar{'lonExpire'}
1.20 albertel 1028: ENTER NEW VALUE (in seconds, 86400 is a reasonable value):
1.6 harris41 1029: END
1030: my $choice2=<>;
1031: chomp($choice2);
1032: $perlvar{'lonExpire'}=$choice2;
1033: }
1.84 raeburn 1034: elsif ($choice==12) {
1.6 harris41 1035: print(<<END);
1.84 raeburn 1036: 12) Server Load: $perlvar{'lonLoadLim'}
1.6 harris41 1037: ENTER NEW VALUE:
1038: END
1039: my $choice2=<>;
1040: chomp($choice2);
1041: $perlvar{'lonLoadLim'}=$choice2;
1042: }
1.84 raeburn 1043: elsif ($choice==13) {
1.25 albertel 1044: print(<<END);
1.84 raeburn 1045: 13) User Load: $perlvar{'lonUserLoadLim'}
1.25 albertel 1046: Numer of users that can login before machine is 'overloaded'
1.26 albertel 1047: ENTER NEW VALUE (integer value, 0 means there is no limit):
1.25 albertel 1048: END
1049: my $choice2=<>;
1050: chomp($choice2);
1051: $perlvar{'lonUserLoadLim'}=$choice2;
1052: }
1.84 raeburn 1053: elsif ($choice==14) {
1.31 albertel 1054: print(<<END);
1.84 raeburn 1055: 14) Allow only secure connections: $securestatus
1.31 albertel 1056: The Lon-CAPA communication daemons lonc and lond can be configured to
1057: allow only secure connections by default.
1058:
1059: POSSIBLE CHOICES:
1060: 1) allow only secure connections and don't connect to machines that
1061: can not be connected to securely
1062: 2) allow only secure connections but allow this machine to connect to
1063: machines that don't support secure connections
1064: 3) allow insecure connections to this machine but only allow connections
1065: to machines that support secure connections
1066: 4) allow insecure connections
1.83 raeburn 1067: ENTER NEW VALUE (currently $securenum):
1.31 albertel 1068: END
1069: my $choice2=<>;
1070: chomp($choice2);
1071: if ($choice2 eq '1') {
1072: $perlvar{'loncAllowInsecure'}=0;$perlvar{'londAllowInsecure'}=0;
1073: } elsif ($choice2 eq '2') {
1074: $perlvar{'loncAllowInsecure'}=0;$perlvar{'londAllowInsecure'}=1;
1075: } elsif ($choice2 eq '3') {
1076: $perlvar{'loncAllowInsecure'}=1;$perlvar{'londAllowInsecure'}=0;
1077: } elsif ($choice2 eq '4') {
1078: $perlvar{'loncAllowInsecure'}=1;$perlvar{'londAllowInsecure'}=1;
1079: }
1080: ($securestatus,$securenum)=&securesetting(%perlvar);
1081: }
1.84 raeburn 1082: elsif (($choice==15) && (!@error)) {
1.6 harris41 1083: $flag=1;
1084: }
1085: else {
1.38 www 1086: print "Invalid input.\n";
1.6 harris41 1087: }
1088: }
1.84 raeburn 1089:
1.7 harris41 1090: open(OUT,">$confdir$filename") or
1091: die("Cannot output to $confdir$filename\n");
1092: foreach my $key (keys %perlvar) {
1093: my $value=$perlvar{$key};
1.49 raeburn 1094: my $line = "PerlSetVar $key $value";
1095: if ($value eq '') {
1096: $line = '#'.$line;
1097: }
1.8 harris41 1098: print(OUT <<END) unless $perlvarstatic{$key};
1.49 raeburn 1099: $line
1.7 harris41 1100: END
1101: }
1102: close(OUT);
1.1 harris41 1103: </perlscript>
1104: </file>
1105: <file>
1106: <target dist='default'>loncom/hosts.tab</target>
1107: <perlscript mode='fg'>
1108: unless (-l "<TARGET />") {
1.84 raeburn 1109: if ($desiredhostname eq '') {
1110: my $hostname=`hostname -f`;chomp($hostname);
1111: $desiredhostname = $hostname;
1112: }
1.82 raeburn 1113: my $date=`date -I`; chomp($date);
1114: my $lonHostID=$perlvar{'lonHostID'};
1.51 albertel 1115: $lonHostID=~s/[^\w\-.]//g;
1.82 raeburn 1116: my $lineexistflag=0;
1117: my $hostidexistflag=0;
1118: my $line2insert=<<END;
1.84 raeburn 1119: $perlvar{'lonHostID'}:$perlvar{'lonDefDomain'}:$perlvar{'lonRole'}:$desiredhostname:$protocol:$intdom
1.15 harris41 1120: END
1.57 albertel 1121: if (!$domainTabExtras) {
1122: $domainTabExtras=':::::';
1123: }
1.82 raeburn 1124: my $domaininsert="$perlvar{'lonDefDomain'}:$domainDescription:$domainTabExtras:$primaryLibServer\n";
1.23 albertel 1125: if ($lonCluster eq 'standalone') {
1126: open(OUT,'>../'.$lonCluster.'_hosts.tab') or
1127: die('file generation error');
1128: print(OUT $line2insert);
1.84 raeburn 1129: print OUT ("^$desiredhostname:$protocol\n");
1.52 albertel 1130: close(OUT);
1131: open(OUT,'>../'.$lonCluster.'_dns_hosts.tab') or
1132: die('file generation error');
1133: print(OUT $line2insert);
1.23 albertel 1134: close(OUT);
1.27 albertel 1135: open(OUT,'>../'.$lonCluster.'_domain.tab') or
1136: die('file generation error');
1137: print(OUT $domaininsert);
1138: close(OUT);
1.52 albertel 1139: open(OUT,'>../'.$lonCluster.'_dns_domain.tab') or
1140: die('file generation error');
1141: print(OUT $domaininsert);
1142: close(OUT);
1.23 albertel 1143: }
1.15 harris41 1144: if ($flag==1) {
1.6 harris41 1145: `rm -f ../hosts.tab`;
1.52 albertel 1146: `rm -f ../dns_hosts.tab`;
1147: `ln -s ${lonCluster}_dns_hosts.tab ../dns_hosts.tab`;
1148: open(IN,'<../'.$lonCluster.'_dns_hosts.tab');
1149: while(my $line = <IN>) {
1150: if ($line =~ /^\Q$line2insert\E$/) {
1.13 harris41 1151: $lineexistflag=1;
1152: }
1.52 albertel 1153: if ($line =~ /^\Q$lonHostID\E\:/) {
1.13 harris41 1154: $hostidexistflag=1;
1155: }
1156: }
1157: close(IN);
1158: if ($hostidexistflag and !$lineexistflag) {
1159: print <<END;
1160: WARNING: $lonHostID already exists inside
1.52 albertel 1161: loncapa/loncom/${lonCluster}_dns_hosts.tab. The entry inside
1162: ${lonCluster}_dns_hosts.tab does not match your settings.
1163: An entry inside ${lonCluster}_hosts.tab will be made
1.13 harris41 1164: with your new values.
1165: END
1.15 harris41 1166: `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab > ../new_${lonCluster}_hosts.tab`;
1167: open(OUT,'>>../new_'.$lonCluster.'_hosts.tab') or
1168: die("cannot open loncom/${lonCluster}_hosts.tab for output\n");
1.14 harris41 1169: print(OUT $line2insert);
1.13 harris41 1170: close(OUT);
1.15 harris41 1171: `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
1.13 harris41 1172: # email appropriate message
1.65 raeburn 1173: `echo "REPLACE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "REPLACE:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
1.13 harris41 1174: }
1175: elsif ($hostidexistflag and $lineexistflag) {
1.15 harris41 1176: print <<END;
1.52 albertel 1177: Entry exists in ${lonCluster}_dns_hosts.tab. Making duplicate entry in ${lonCluster}_hosts.tab
1.15 harris41 1178: END
1.52 albertel 1179: `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab > ../new_${lonCluster}_hosts.tab`;
1180: open(OUT,'>>../new_'.$lonCluster.'_hosts.tab') or
1181: die("cannot open loncom/${lonCluster}_hosts.tab for output\n");
1182: print(OUT $line2insert);
1183: close(OUT);
1184: `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
1.15 harris41 1185: # email appropriate message
1.65 raeburn 1186: `echo "STABLEUPDATE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "STABLEUPDATE:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
1.13 harris41 1187: }
1.15 harris41 1188: elsif (!$hostidexistflag and !$lineexistflag) {
1189: print <<END;
1190: New entry for $lonCluster.
1.6 harris41 1191: END
1.15 harris41 1192: `cat ../${lonCluster}_hosts.tab > ../new_${lonCluster}_hosts.tab`;
1.21 albertel 1193: open(OUT,'>>../new_'.$lonCluster.'_hosts.tab') or
1194: die("cannot open loncom/new_${lonCluster}_hosts.tab for output\n");
1.15 harris41 1195: print(OUT $line2insert);
1196: close(OUT);
1197: `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
1198: # email appropriate message
1.65 raeburn 1199: `echo "INSERT:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "INSERT:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
1.27 albertel 1200: }
1201: }
1202: $lineexistflag=0;
1.82 raeburn 1203: my $domainexistflag=0;
1.27 albertel 1204: if ($flag==1) {
1205: `rm -f ../domain.tab`;
1.52 albertel 1206: `rm -f ../dns_domain.tab`;
1207: `ln -s ${lonCluster}_dns_domain.tab ../dns_domain.tab`;
1208: open(IN,'<../'.$lonCluster.'_dns_domain.tab');
1209: while(my $line = <IN>) {
1210: if ($line =~/^\Q$domaininsert\E$/) {
1.27 albertel 1211: $lineexistflag=1;
1212: }
1.52 albertel 1213: if ($line =~/^\Q$perlvar{'lonDefDomain'}\E\:/) {
1.27 albertel 1214: $domainexistflag=1;
1215: }
1216: }
1217: close(IN);
1218: if ($domainexistflag and !$lineexistflag) {
1219: print <<END;
1220: WARNING: $perlvar{'lonDefDomain'} already exists inside
1.52 albertel 1221: loncapa/loncom/${lonCluster}_dns_domain.tab. The entry inside
1222: ${lonCluster}_dns_domain.tab does not match your settings.
1223: An entry will be made in inside ${lonCluster}_domain.tab
1.27 albertel 1224: with your new values.
1225: END
1226: `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab > ../new_${lonCluster}_domain.tab`;
1227: open(OUT,'>>../new_'.$lonCluster.'_domain.tab') or
1228: die("cannot open loncom/${lonCluster}_domain.tab for output\n");
1229: print(OUT $domaininsert);
1230: close(OUT);
1231: `ln -s new_${lonCluster}_domain.tab ../domain.tab`;
1232: # email appropriate message
1.82 raeburn 1233: `echo "REPLACEdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "REPLACEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;
1.27 albertel 1234: }
1235: elsif ($domainexistflag and $lineexistflag) {
1.52 albertel 1236: `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab > ../new_${lonCluster}_domain.tab`;
1237: open(OUT,'>>../new_'.$lonCluster.'_domain.tab') or
1238: die("cannot open loncom/${lonCluster}_domain.tab for output\n");
1239: print(OUT $domaininsert);
1240: close(OUT);
1.27 albertel 1241: print <<END;
1.52 albertel 1242: Entry exists in ${lonCluster}_dns_domain.tab. Making duplicate entry in ${lonCluster}_domain.tab
1.27 albertel 1243: END
1.52 albertel 1244: `ln -s new_${lonCluster}_domain.tab ../domain.tab`;
1.27 albertel 1245: # email appropriate message
1246: `echo "STABLEUPDATEdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "STABLEUPDATEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;
1247: }
1248: elsif (!$domainexistflag and !$lineexistflag) {
1249: print <<END;
1250: New entry for $lonCluster.
1251: END
1252: `cat ../${lonCluster}_domain.tab > ../new_${lonCluster}_domain.tab`;
1253: open(OUT,'>>../new_'.$lonCluster.'_domain.tab') or
1254: die("cannot open loncom/new_${lonCluster}_domain.tab for output\n");
1255: print(OUT $domaininsert);
1256: close(OUT);
1257: `ln -s new_${lonCluster}_domain.tab ../domain.tab`;
1258: # email appropriate message
1259: `echo "INSERTdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "INSERTdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;
1.6 harris41 1260: }
1261: }
1.1 harris41 1262: }
1263: </perlscript>
1264: </file>
1265: </files>
1266: </piml>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>