           Virtual Computing Laboratory
   North Carolina State University, Raleigh, NC 27695, USA
   2004-2007 by NC State University. All Rights Reserved.
                  http://vcl.ncsu.edu

                INSTALLATION: V3/Jun07

Please read the README file.
For use license and copyright information see LICENSE and COPYRIGHT files.


3 directories web, mysql, managementnode

prerequisites:
for single server environment.
Linux Host - tested RH Enterprise/Advanced Server 4
 - apache httpd with SSL configured
 - mysql 5.X with SSL configured
 - PHP 5.X with php-mcrypt module
 - Perl 5.8

 - DHCP (The dhcp service is should be running on a private network.
   This is needed to statically assign addresses to the machines.)
        
         
 NOTE: from the redhat install CD it's easiest to select the install everything
 option. With RH package selection, select "Custom", then scroll down to
 the bottom and select "Everything".

 If using xCAT <xcat.org>
 - see install documentation http://xcat.org/doc

VCL is orginally developed in a blade environment using IBM blades and
xcat.
 
The blade configuration is using:
BladeCenter chassis
two network Layer 2/3 Copper GigE switch modules
HS21 blades

The blades have two network adapters, eth0,eth1
eth0 ideally should be on private network so as to not allow pxe booting
on public or internal campus network.
 
In a single blade chassis environment a public switch is needed. For
multiple chassis's two switches are needed:
one public
one for interconnecting chassis on private network.

******* WARNING *********
Detailed documentation is still in progress, the below steps should be enough to
get started.
************************


Importing/configuring database and web application:

1) create a database in mysql named vcl
   (CREATE DATABASE vcl;)
2) create a user with SELECT, INSERT, UPDATE, and DELETE privileges on the database from #1
   (GRANT SELECT,INSERT,UPDATE,DELETE ON vcl.* TO '<insert user here>'@'localhost' IDENTIFIED BY '<insert pwd here>';)
3) import mysql/vcl.sql file into database
   (mysql vcl < vcl.sql)
4) copy web somewhere under webroot
   (cp -R web /var/www/html/vcl)
5) modify vcl/.ht-inc/secrets.php to match your database setup; also create random passwords for $mcryptkey, $mcryptiv, and $pemkey
6) run the genkeys.sh script from within vcl/.ht-inc and give it $pemkey from secrets.php as the passphrase (3 times)
7) modify vcl/.ht-inc/conf.php to match your site
8) download jpgraph from http://www.aditus.nu/jpgraph/jpdownload.php
	if you are using PHP5, download the 2.x series, extract it, and copy the src directory from it to vcl/.ht-inc/jpgraph
	if you are using PHP4, download the 1.x series, extract it, and copy the src directory from it to vcl/.ht-inc/jpgraph.old
9) download version 0.4.0 of Dojo Toolkit: http://download.dojotoolkit.org/release-0.4.0/dojo-0.4.0-ajax.tar.gz
	extract it under the vcl directory and rename "dojo-0.4.0-ajax" to "dojoAjax"
10) download version 1.1.0 of Dojo Toolkit: http://download.dojotoolkit.org/release-1.1.0/dojo-release-1.1.0.tar.gz
	extract it under the vcl directory and rename "dojo-release-1.1.0" to "dojo"
11) if you want to be able to edit any of the documentation that comes bundled with the vcl web code, download fckeditor from http://www.fckeditor.net/download
	extract it under the vcl directory
12) open a browser and go to the URL you set up; use 'admin' as the user and 'adminVc1passw0rd' as the password
13) click the "Management Nodes" link
14) enter the hostname and IP of your management node
15) click Add
16) click Submit
17) click the "Management Nodes" link
18) select "Edit Management Node Grouping"
19) click Submit
20) select the checkbox for your management node
21) click Submit
22) click "Manage Computers"
23) click the 'Add' button
24) fill in Hostname, IP Address, RAM, Proc Speed, Network Speed, select "blade" for Type, select "xCAT 1.x Provisioning" for "Provisioning Engine", and click the checkbox under "allcomputers", and "newimages"
	Note: if using using vmware, select "virtualmachine" for Type and "VMWare Server Provisioning" for "Provisioning Engine"
25) click Confirm
26) click Submit (don't worry about the fact that the computer you just added isn't listed)
27) after you've configured your image library and your management node has started checking in, you should be able to make a reservations

Management node - vcld
28) To install the perl code extract the vcl.tar.gz , any
location should be fine (/usr/local/, /root, ... etc)
29) cd to the lib directory /PATH/vcl/lib/VCL
30) copy configuration directory file to /etc: cp -r <PATH>/vcl/etc/vcl /etc
31) modify /etc/vcl/vcld.conf
    at a minimum you'll need to add the database information:
    database,server,User,user's password
32) Modify the startup script. S99vcld.linux to include the installation
path.
33) run the S99vcld.linux script i.e. S99vcld.linux start
34) drivers for loading Windows images onto different hardware than they were created on can be extracted under the Drivers directory of each Sysprep type under the tools directory


Image creation:
The images listed in the VCL menu are only placeholders.
Images/Environments need to be created.
For information on creating images, please visit:
http://vcl.ncsu.edu/node/16


Adding extra local accounts
There's not currently a tool for this.  You will need to add entries directly to the database.
1) add entry to user table
INSERT INTO user (unityid, firstname, lastname, email, lastupdated) VALUES ('myusername', 'myfirstname', 'mylastname', 'myemailaddr', NOW());
2) find out the id generated for that user
SELECT id, unityid FROM user WHERE unityid = 'myusername';
3) add entry to the localauth table
INSERT INTO localauth (userid, salt, passhash, lastupdated) VALUES ('place1', 'place2', 'place3', NOW())
with place1 = id from step 2
     place2 = an 8 char random string
	  place3 = sha1sum( desired password with place2 stuck on the end )
	           this can be generated under linux like this (using 'thedog' as the password and 11111111 as place2):
				     echo -n 'thedog11111111' | sha1sum

Adding LDAP authentication
1) fill in the necessary information in vcl/.ht-inc/conf.php
2) modify the user table in the vcl database and change the 'vcladmin' user's information to match information of the main site admin
3) uncomment the 'require_once(".ht-inc/authmethods/ldapauth.php");' line in in vcl/.ht-inc/cconf.php
