[LON-CAPA-cvs] cvs: doc /install/fedora LON-CAPA_fedora_install.html install.pl

matthew lon-capa-cvs@mail.lon-capa.org
Thu, 04 Dec 2003 21:58:35 -0000


This is a MIME encoded message

--matthew1070575115
Content-Type: text/plain

matthew		Thu Dec  4 16:58:35 2003 EDT

  Added files:                 
    /doc/install/fedora	LON-CAPA_fedora_install.html install.pl 
  Log:
  Added LON-CAPA_fedora_install.html and install.pl.
  
  
--matthew1070575115
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20031204165835.txt"


Index: doc/install/fedora/LON-CAPA_fedora_install.html
+++ doc/install/fedora/LON-CAPA_fedora_install.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<title>Installing LON-CAPA on a Fedora Linux System</title>
</head>

<body>
<!-- $Id: LON-CAPA_fedora_install.html,v 1.1 2003/12/04 21:58:35 matthew Exp $ -->
<h1>Installing LON-CAPA on a Fedora Linux System</h1>
<p>
This document guides you through the process of setting up a new LON-CAPA
server running Fedora Linux.  The computer will be configured solely as
a LON-CAPA server and will be expected to have no other services running
on it.
</p><p>
More information is available at <a href="http://install.lon-capa.org/">
http://install.lon-capa.org/</a>.
</p>

<h2>Before you begin</h2>
<p>
Installing Linux is getting easier and easier.  However, it is still a
non-trivial undertaking and experience with Red Hat Linux will make this 
process easier.  You will be required to log in to the machine and execute
some routine Unix commands.  Some familiarity with Linux is assumed.  
Familiarity with the Apache web server, mod_perl, perl, and MySQL are not 
required to install and run LON-CAPA.
</p>

<h2>Installation Overview</h2>
<p>
The installation process takes the following steps:
</p>
<ol>
  <li> Obtain Fedora Linux </li>
  <li> Determine Network Settings</li>
  <li> Install Fedora </li>
  <li> Install LON-CAPA Dependencies </li>
  <li> Determine your LON-CAPA Settings </li>
  <li> Install LON-CAPA </li>
  <li> Configure LON-CAPA </li>
  <li> Pick a hosts.tab file </li>
  <li> Create a Domain Coordinator </li>
  <li> Start/Restart services </li>
  <li> Log in to LON-CAPA </li>
</ol>

<h2>Obtain Fedora Linux</h2>
<p>
Fedora linux ISO files can be obtained from the projects main site,
<a href="http://fedora.redhat.com/">http://fedora.redhat.com/</a>.
</p>

<h2>Determine Network Settings</h2>
<p>
You will need to know the following network settings for your installation.  
<b>Note:</b>You must have a static IP address to use LON-CAPA.
DHCP is <em>not</em> supported.
</p>
<ul>
  <li>ip address </li>
  <li>netmask </li>
  <li>hostname </li>
  <li>gateway </li>
  <li>domain name server(s) </li>
</ul>

<h2>Gather needed information</h2>



<h2>Install Fedora</h2>
<p>
Installing Fedora is quite easy if you've installed any of the Red Hat products
before.  Some documentation is available from 
<a href="http://fedora.redhat.com/projects/anaconda-installer/">
http://fedora.redhat.com/projects/anaconda-installer/</a>.
There are a few sections that require comment.
</p>
<dl style="list-style:square outside none">
   <dt>Installation Type</dt>
   <dd>You should do a "Server" install.  We do not recommend
       trying to install LON-CAPA with a different installation type.</dd>
   <dt>Partitioning your Drive</dt>
   <dd>You may want to use the automatic partitioning feature of the installer,
       however you should review the results and be prepared to modify them.
       LON-CAPA resource files are stored in the /home directory, so the
       lion's share of the drive should be allocated here.  If you have 20 GB 
       of space for Fedora, /home should receive 16 gigs.  Be sure to 
       include adequate swap space.  A minimum is 512 Megs, but you should
       typically have 1 or 2x as much swap space as you do physical RAM.</dd>
   <dt>Network Configuration</dt>
   <dd>LON-CAPA will <b>not</b> work with a machine set up to use a dynamic 
       IP address.  When configuring your network card, be sure to unselect
       the DHCP option and enter in your network information.</dd>
   <dt>Firewall Configuration</dt>
   <dd>The firewall should be customized to allow incoming ssh and www.  
       Additional ports used by LON-CAPA are 5663 and 8080.  
       Enter these in the entry box as <nobr>"5663:tcp, 8080:tcp"</nobr>.</dd>
   <dt>Package Group Selection</dt>
   <dd>
       <b>Do not</b> install a web server.  It is intentially omitted from
       this list.  Installing packages not listed below is not recommended.
       If you install packages not listed below you should expect difficulties
       when installing the LON-CAPA dependencies.
      <ul>
         <li>Editors</li>
         <li>Text Based Internet</li>
         <li>Authoring and Publishing</li>
         <li>Development Tools
         <li>Administration Tools
         <li>Printing Support
      </ul>
   </dd>
</dl>
<p>
Finish installing your server, reboot it, and log in as root.
</p>

<h2>Retrieving the LON-CAPA Installation Archive</h2>
<p>
Execute the following command:
</p>
<pre>
wget http://install.loncapa.org/versions/fedora/fedora_install.tar
</pre>
<p>
This will retrieve from the LON-CAPA website all the packages needed to get
LON-CAPA running on your system, except for the LON-CAPA source itself.
</p>
<p>
Extract the archive with the following command:
</p>
<pre>
tar xf fedora_install.tar
</pre>
<p>
This creates a directory named <tt>installation</tt>.
</p>

<h2>Installing LON-CAPA Dependencies</h2>
<p>
This section walks you through installing the packages which LON-CAPA requires.
There are a lot of dependencies to deal with.  They have been grouped in a
somewhat logical fashion to make them easier to deal with.  When installing
the rpms you should watch for errors.
</p><p>
The quick instructions are:
</p>
<pre>
cd installation
cd mysql
rpm -Uvh *rpm
cd ../apache
rpm -Uvh *rpm
cd ../mod_perl
rpm -Uvh *rpm
cd ../perl_dependencies
rpm -Uvh *rpm
cd ../GD
rpm -Uvh *rpm
cd ../gnuplot
rpm --install --oldpackage readline-2.2.1-6.i386.rpm
rpm --install --oldpackage --excludedocs libpng-1.0.12-2.i386.rpm
rpm -Uvh gnuplot-3.7.1-5.i386.rpm libgd-1.3-4.i386.rpm ncurses4-5.0-5.i386.rpm
cd ../misc
rpm -Uvh *rpm
cd ..
</pre>
<p>
<b>Notes:</b>
<ul>
    <li>MySQL is used to store caches of data, not original copies.  
        Administering LON-CAPA machines does not yet mean becoming a 
        database administrator.</li>
    <li>Apache 1.3 and mod_perl 1.x are required by LON-CAPA.  These are
        provided in the installation package.
    <li>A specific version of Gnuplot is required by LON-CAPA.  Do not
        install a version different from the one included in the LON-CAPA
        installation package.</li>
</ul>
</p>

<h2>Configuring LON-CAPA Dependencies</h2>
<p>
We have prepared a script which takes care of most of the configuration that
must be done to get the newly installed packages working with LON-CAPA.  
This script will retrieve the latest LON-CAPA release from
<a href="http://install.loncapa.org">http://install.loncapa.org</a>.
You will be prompted for a root password for your MySQL server.  You 
will need to remember this password in case you should ever need to make
changes the the server.
</p><p>
Execute the script as follows:
</p>
<pre>
cd setup;
./install.pl
</pre>

<h2>Determine LON-CAPA Settings</h2>
<p>
LON-CAPA requires a number of identifying parameters be set in order
for it to function at all.  Below is a list with descriptions.
</p>
<dl>
  <dt>Host Type (library or access)</dt>
  <dd>The server must be designated a 'library' or an 'access' server.  In
      general you should have a library server for your instructors to create
      their course content on and run their courses.  Students should connect
      to access servers.  If you are doing the first install of LON-CAPA at 
      your site, or if you are playing with it for your own edification you
      should make your machine a 'library' server.</dd>
  <dt>LON-CAPA domain</dt>
  <dd>Each site or school which installs LON-CAPA needs its own domain.
      Here at MSU we use 'msu'.  You should choose something short but
      meaningful.  <i>Restriction: One word, no hyphens, underscores, or 
      special characters.</i>
  </dd>
  <dt>LON-CAPA host id</dt>
  <dd>Each LON-CAPA server requires a unique internal name.  We use names
      such as "msul1" for the first library server. <i>Restriction: One word, 
      no hyphens, underscores, or special characters.</i>
  </dd>
  <dt>Host administrator email</dt>
  <dd>The amount of email sent to this address is relatively minimal.  Messages
      are sent every time the system starts up, or if the system is in 
      serious trouble. On a laptop, make this <tt>root@localhost</tt>.
  </dd>
</dl>

<h2>Configuring LON-CAPA</h2>
<p>
To configure and install LON-CAPA, execute the following commands:
</p>
<pre>
cd /root/loncapa-N.N     (N.N should correspond to a version number like '1.1')
./UPDATE
</pre>
<p>
You will need to enter the LON-CAPA configuration information you determined 
in the previous section.  
</p>

<h2>Creating a Domain Coordinator</h2>
<p>
You will need at least one user at your site who has the role of
'domain coordinator'.  This user creates accounts for other users and
grants them additional privileges.  The make_domain_coordinator.pl script
invoked below requires that you enter the users password.  The password will
show in plaintext as you type it.  Feel free to use the "passwd username"
command to change it later.  Replace USERNAME and DOMAIN with an 
appropriate user name and your domain.
</p>
<pre>
cd /root/loncapa-N.N/loncom/build
perl make_domain_coordinator.pl USERNAME DOMAIN
(WILL PROMPT FOR PASSWORD HERE)
</pre>

<h2>Start/Restart Services</h2>
<p>
The LON-CAPA network services take a moment to start.  Most misconfigurations
will be appearant at this step.
</p>
<pre>
/etc/init.d/loncontrol start
/etc/init.d/httpd start
</pre>

<h2>Log in to your LON-CAPA Machine</h2>
<p>
Point a web browser at your new machine and log in as the domain
coordinator.  Congratulations!
</p>

</body>
</html>

Index: doc/install/fedora/install.pl
+++ doc/install/fedora/install.pl
#!/usr/bin/perl -w
# The LearningOnline Network 
# Red Hat 7.3 installation script
#
# $Id: install.pl,v 1.1 2003/12/04 21:58:35 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
# 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
#
# http://www.lon-capa.org/
#

use strict;
use File::Copy;
use Getopt::Long;

my $result; 
my $test;

# note: The filehandle LOG is global.
open LOG,">>loncapa_install.log" || die "Unable to open log file.\n";

print LOG '$Id: install.pl,v 1.1 2003/12/04 21:58:35 matthew Exp $'."\n";

# Some friendly subroutines
sub die_if_nonempty {
    my ($string,$error)=@_;
    return if (! defined($error));
    chomp($string);chomp($error);
    if ($string ne '') {
        print_and_log("$error\nHalting.\n");
        die;
    }
}

sub make_link_or_die {
    my ($source,$dest)=@_;
    &die_if_nonempty
        (`ln -fs $source $dest`,"Unable to link $source to $dest.");
    print LOG "Link from $source to $dest made successfully\n";
}

sub writelog {
    while ($_ = shift) {
        chomp;
        print LOG "$_\n";
    }
}

sub print_and_log {
    while ($_=shift) {
        chomp;
        print "$_\n";
        print LOG "$_\n";
    }
}

###############################
#                             #
#  Define default behaviour   #
#                             #
###############################
my $make_www       = 1;
my $install_pwauth = 1;
my $setup_mysql    = 1;
my $setup_mysql_permissions = 1;
my $stop_services     = 0;
my $install_httpd_conf = 1;
my $download_loncapa  = 1;
my $showhelp          = 0;

###################################
#
#  Deal with command line options
#
###################################
GetOptions(
	   "make_www!"                => \$make_www,
	   "install_pwauth!"          => \$install_pwauth,
	   "setup_mysql!"             => \$setup_mysql,
	   "setup_mysql_permissions!" => \$setup_mysql_permissions,
	   "stop_services!"           => \$stop_services,
	   "install_httpd_conf!"      => \$install_httpd_conf,
	   "download_loncapa!"        => \$download_loncapa,
           "help"                     => \$showhelp,
	   );

if ($showhelp) {
    print <<END;
$0: The following options are available:

  Option               Default  Description
---------------------------------------------
make_www                 yes    Create the www user
install_pwauth           yes    Install pwauth
setup_mysql              yes    Configure MySQL
setup_mysql_permissions  yes    Configure MySQL Permissions
stop_services            no     Stop unneeded services
install_httpd_conf       yes    Install LON-CAPA provided httpd.conf
download_loncapa         yes    Download LON-CAPA sources code
help                            Show this help

Examples:

Default behaviour is the same as:

  $0 --make_www --install_pwauth --setup_mysql \
     --setup_mysql_permissions --install_httpd_conf \
     --download_loncapa 

Do everything as normal but do not configure MySQL database:

  $0 --nosetup_mysql

END
    exit;
}

print <<"END";
********************************************************************

                    Welcome to LON-CAPA 

This script will configure the base software that LON-CAPA needs to
run properly. 

********************************************************************
END

my $instdir = `pwd`;
chomp($instdir);

if ($make_www) {
    &setup_www();
} else {
    &print_and_log("Skipping creation of user 'www'.\n");
}

if ($install_pwauth) {
    &build_and_install_mod_auth_external();
} else {
    &print_and_log("Skipping pwauth installation.\n");
}

if ($stop_services) {
    &kill_extra_services();
} else {
    # No message as not stopping the services is the default
}

if ($setup_mysql) {
    &setup_mysql();
} else {
    &print_and_log("Skipping configuration of MySQL.\n");
}

##
## Set up httpd 
##
print_and_log("Setting httpd to start on boot up.\n");
system("/sbin/chkconfig httpd on");

if ($install_httpd_conf) {
    &copy_httpd_conf();
}

my $lctarball = 'loncapa-current.tar.gz';
if ($download_loncapa) {
    &download_loncapa($lctarball);
} else {
    print_and_log(<<"END");

You have requested not to have the LON-CAPA source downloaded from 
install.loncapa.org.

LON-CAPA is not yet installed on your system.

You may retrieve the source for LON-CAPA by executing :
wget http://install.loncapa.org/versions/$lctarball
END
}

exit;

####################################################################
####################################################################

###############################################
###############################################
sub setup_www {
    ##
    ## Set up www
    ##
    print_and_log("Creating user 'www'\n");
    $result = `/usr/sbin/useradd www`;
    if (! (($result eq '') || ($result =~ /user www exists/))) {
	die "Unable to add user www.  Halting.\n";
    }
    writelog ($result);
}

###############################################
###############################################
sub uid_of_www {
    my $num = `grep ^www /etc/passwd | cut -d':' -f3`;
    chomp $num;
    if (int($num) == $num) {
	writelog ("uid of www = $num\n");
    } else {
	die "Unable to determine UID of user www\n  Halting.\n";
    }
    print_and_log("\n");
    return $num;
}

###############################################
##
## mod_auth_external
##
###############################################
sub build_and_install_mod_auth_external {
    my $num = &uid_of_www();
    # Patch mod_auth_external
    print_and_log("Building authentication system for LON-CAPA users.\n");
    my $patch = <<"ENDPATCH";
148c148
< #define SERVER_UIDS 99		/* user "nobody" */
---
> #define SERVER_UIDS $num		/* user "www" */
ENDPATCH

    if (! -e "/usr/bin/patch") {
	print_and_log("You must install the software development tools package ".
		      "when installing RedHat.\n");
	die;
    }
    &die_if_nonempty(`cd /tmp; tar zxf $instdir/mod_auth_external-2.1.13.tar.gz`,
		     "Unable to extract mod_auth_external\n");
    my $dir = "/tmp/mod_auth_external-2.1.13/pwauth";
    open PATCH, "| patch $dir/config.h" || 
	die "Unable to start patch for mod_auth_external.  Halting\n";
    print PATCH $patch;
    close PATCH;
    print_and_log("\n");
    ##
    ## Compile patched pwauth
    ##
    print_and_log("Compiling pwauth\n");
    $result = `cd $dir/; make`;
    my $expected = <<"END";
gcc -g    -c -o pwauth.o pwauth.c
gcc -o pwauth -g  pwauth.o -lcrypt
END
    if ($result ne $expected) {
	die "Unable to compile patched pwauth.  Halting.\n";
    }    
    print_and_log( "appearant success compiling pwauth:\n".$result );
    # Install patched pwauth
    print_and_log("Copying pwauth to /usr/local/sbin\n");
    if (! copy "$dir/pwauth","/usr/local/sbin/pwauth") {
	die "Unable to copy $dir/pwauth to /usr/local/sbin/pwauth.\n$!\nHalting\n";
    }
    if (! chmod (06755, "/usr/local/sbin/pwauth")) {
	die "Unable to set permissions on /usr/local/sbin/pwauth.\n";
    }
    print_and_log("\n");
}

###############################################
##
## Kill some services
##
###############################################
sub kill_extra_services {
    &print_and_log("\nKilling unneccessary services.\n");
    foreach my $service ('cups','sendmail') {
	&print_and_log(`/etc/init.d/$service stop`);
	&print_and_log("removing $service from startup.\n");
	&print_and_log(`chkconfig --del $service`);
    }
}

###############################################
##
## Set up mysql
##
###############################################
sub setup_mysql {
    print_and_log("Setting mysqld to start on boot up.\n");
    system("/sbin/chkconfig --add mysqld");
    system("/sbin/chkconfig mysqld on");
    &writelog(`/sbin/chkconfig --list mysqld`);
    #
    writelog("mysql will start automatically on boot.\n");
    writelog(`/etc/rc.d/init.d/mysqld start`);
    print_and_log("Waiting for mysql daemon to start.\n");
    sleep 5;
    my $status = system("/etc/rc.d/init.d/mysqld status");
    if ($status != 0) {
	die "Unable to start mysql daemon\nHalting\n";
    } else {
	print_and_log("Mysql daemon is running.\n");
    }
    print_and_log("\n");
    #
    my $mysql_commands = "CREATE DATABASE loncapa;\n";
    if ($setup_mysql_permissions) {
	##
	## Get root password for mysql client
	##
	print <<END;
Please enter a root password for the mysql database.
It does not have to match your root account password, but you will need
to remember it.
END
        my $rootpass = <>;
	chomp $rootpass;
	$mysql_commands .= <<"END";
INSERT INTO user (Host, User, Password)
VALUES ('localhost','www',password('localhostkey'));
INSERT INTO db VALUES ('localhost','loncapa','www',
'Y','Y','Y','Y','Y','Y','N','Y','Y','Y');
SET PASSWORD FOR root\@localhost=PASSWORD('$rootpass');
DELETE FROM user WHERE host<>'localhost';
FLUSH PRIVILEGES;
END
        print_and_log("Retrieved MySQL root password.\n");
    } else {
	print_and_log("Skipping mysql permissions setup.\n");
    }
    $mysql_commands .= <<"ENDMYSQL";
USE loncapa;
CREATE TABLE IF NOT EXISTS metadata (title TEXT, author TEXT, subject TEXT, url TEXT, keywords TEXT, version TEXT, notes TEXT, abstract TEXT, mime TEXT, language TEXT, creationdate DATETIME, lastrevisiondate DATETIME, owner TEXT, copyright TEXT, FULLTEXT idx_title (title), FULLTEXT idx_author (author), FULLTEXT idx_subject (subject), FULLTEXT idx_url (url), FULLTEXT idx_keywords (keywords), FULLTEXT idx_version (version), FULLTEXT idx_notes (notes), FULLTEXT idx_abstract (abstract), FULLTEXT idx_mime (mime), FULLTEXT idx_language (language), FULLTEXT idx_owner (owner), FULLTEXT idx_copyright (copyright)) TYPE=MYISAM;
EXIT
ENDMYSQL
    ##
    ## Execute the MySQL commands
    ##
    print_and_log("Starting mysql client.\n");
    open MYSQL, "|mysql -u root mysql" || die "Unable to start mysql\n";
    print MYSQL $mysql_commands;

    close MYSQL;
    print_and_log("\n");
}


###############################################
##
## Copy our (probably lousy) httpd.conf to its rightful place
##
###############################################
sub copy_httpd_conf {
    print_and_log("Copying our httpd.conf to /etc/httpd/conf/httpd.conf\n");
    copy "/etc/httpd/conf/httpd.conf","/etc/httpd/conf/httpd.conf.original";
    copy "$instdir/httpd.conf","/etc/httpd/conf/httpd.conf";
    chmod 0444,"/etc/httpd/conf/httpd.conf";
    print_and_log("\n");
}


###############################################
##
## Retrieve the latest LON-CAPA release
##
###############################################
sub download_loncapa {
    my ($lctarball) = @_;
    if (! -e "$instdir/$lctarball") {
	print_and_log("Retrieving LON-CAPA source files from ".
		      "http://install.loncapa.org\n");
	system("wget http://install.loncapa.org/versions/$lctarball ".
	       "2>/dev/null 1>/dev/null");
	if (! -e "./$lctarball") {
	    die("Unable to retrieve LON-CAPA source files from\n".
		"http://install.loncapa.org/versions/$lctarball\n");
	}
	print_and_log("\n");
    } else {
	print_and_log(<<"END");
------------------------------------------------------------------------

You seem to have a version of loncapa-current.tar.gz in $instdir.  
This copy will be used and a new version will NOT be downloaded.  
If you wish, you may download a new version by executing:

wget http://install.loncapa.org/versions/loncapa-current.tar.gz

------------------------------------------------------------------------
END
    }

    ##
    ## untar loncapa.tar.gz
    ##
    print_and_log("Extracting LON-CAPA source files\n");
    writelog(`cd ~root; tar zxf $instdir/loncapa-current.tar.gz`);
    print_and_log("\n");
    print <<"ENDMSG";
All of the extra files seem to have been installed correctly.  It remains for 
you to execute the following commands:

cd /root/loncapa-N.N     (N.N should correspond to a version number like '0.4')
./UPDATE

If you have any trouble, please see http://install.loncapa.org/ and 
http://help.loncapa.org/.  
ENDMSG
}

close LOG;


--matthew1070575115--