This page last modified: Apr 13 2011
keywords:tufts,taper,submission,agreement,builder,tool,catalyst,framework,perl,mysql description:Installing and configuring the original Tufts TAPER Submission Agreement Builder Tool title:Tufts TAPER SABT install todo: add a section about editing wrapper to clean up hard coded tufts.edu URLs How to install Tufts TAPER SABT ------------------------------- http://sourceforge.net/projects/tutaper/ http://tutaper.svn.sourceforge.net/viewvc/tutaper/ # Forgot to record the original install command. Probably: svn co https://tutaper.svn.sourceforge.net/svnroot/tutaper tutaper # To run the web site, I only used the code in the production # branch. I copied ./tutaper/production/TAPER/ to ~/public_html/ # although any web accessible directory should work. # Catalyst is huge and it should be installed via yum and/or some # bundle if possible. Installing via cpan is very time consuming, but # if the Makefile.PL script works at least it is more or less # automatic. Unfortunately, Makefile.PL does *not* work under Centos # 5. The instructions below are for Fedora Linux (FC12). At one point # during a lengthy cpan install I discovered Task::Catalyst which seems # to include most of what Catalyst needs. sudo su -l root grep -i cpan yum_list.txt yum -y install perl-CPAN cd /home/mst3k/tutaper/production/TAPER/ perl Makefile.PL ls make cpan # After installing Fedora Linux, I always runt a # "yum list all > yum_list.txt" # because yum is sooo sloooow in checking the repo databases. When I # need to know a package name, I grep the yum_list.txt. grep -i catal yum_list.txt yum -y install perl-Catalyst-Model-DBIC-Schema.noarch # as mst3k script/taper_server.pl # an error Base class package "Catalyst::Model::DBIC::Schema" is empty. # You can run a command with an environment variable prefixing the # command. I think taper_server.pl also understands -p 3030 TAPER_PORT=3030 script/taper_server.pl # Don't edit Auth.pm, but the idea is amusing, and it sort of # works. You could force the authentication conditional to true with 1 # || $c->authentication, but don't do that. Instead add # userid/password combos to the taper.conf as shown below. cd /home/mst3k/tutaper/production/TAPER emacs lib/TAPER/Controller/Auth.pm # Opps. No MySQL db. I wonder how we create that? [error] DBIx::Class::ResultSet::search(): DBI Connection failed: DBI connect('taper','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at /usr/local/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/DBI.pm line 1257 # yum install mysql (or whatever). Before using mysql we have to set # or reset the mysql root password. By default TAPER connects as root # with no password. You'll have to edit one of the TAPER source files # to set a password. Yes, you can set up mysql with no root password, # and the TAPER mysql login is actually 'root', but don't go # there. Just do the extra steps and add some proper security. # The steps below also include building the TAPER sql database. You'll # need the taper.sql file which I got from the original directory # where I unpacked TAPER. > cd tutaper > find . -name 'taper*.sql' -ls 1221515 8 -rw-r--r-- 1 mst3k users 4921 Nov 29 15:35 ./trunk/sql/taper.sql 1336815 8 -rw-r--r-- 1 mst3k users 4921 Nov 29 15:35 ./production/sql/taper.sql > # No password yet, so -p is not needed. Every account needs a # password, especially root. You must "flush privileges" for the new # password to take effect. I quit the mysql shell and start again # just to make sure the privs changed. mysql -u root update mysql.user set password=password('foo') where user='root'; flush privileges; quit; mysql -u root -p create database taper; use taper; source taper.sql; show tables; # The output: +-----------------+ | Tables_in_taper | +-----------------+ | office | | role | | rsa | | ssa | | user | | user_office | | user_role | +-----------------+ 7 rows in set (0.00 sec) # While we are in the db, we need to do some mysql admin tasks. # The non-root user *must* have two mysql accounts as you'll see # below. Postgres handles this much better. # http://dev.mysql.com/doc/refman/5.1/en/adding-users.html # It is necessary to have both accounts for monty to be able to # connect from anywhere as monty. Without the localhost account, the # anonymous-user account for localhost that is created by # mysql_install_db would take precedence when monty connects from the # local host. As a result, monty would be treated as an anonymous # user. The reason for this is that the anonymous-user account has a # more specific Host column value than the 'monty'@'%' account and # thus comes earlier in the user table sort order. (user table sorting # is discussed in Section 5.4.4, \u201cAccess Control, Stage 1: # Connection Verification\u201d.) create user 'taper'@'localhost' identified by 'foobarbaz'; grant all privileges on *.* to 'taper'@'localhost' with grant option; create user 'taper'@'%' identified by 'foobarbaz'; grant all privileges on *.* to 'taper'@'%' with grant option; select host,user,password from mysql.user; # The output: +-----------------------+-------+------------------+ | host | user | password | +-----------------------+-------+------------------+ | localhost | root | 7a8cd9854ef31c3c | | aims.lib.example.edu | root | 7a8cd9854ef31c3c | | 127.0.0.1 | root | 7a8cd9854ef31c3c | | localhost | | | | aims.lib.example.edu | | | | % | taper | 0654d346211e7caf | +-----------------------+-------+------------------+ 6 rows in set (0.00 sec) flush privileges; quit; mysql -u taper taper -p select * from user; # The output: Empty set (0.00 sec) # Insert one user to be the first TAPER admin. insert into user (username,first_name,last_name,is_dca) values ('mst3k','Merry', 'Terry',1); quit; # Go fix the TAPER source to use a non-root user and password. cd ./lib/TAPER/Model/ emacs -nw TAPERDB.pm __PACKAGE__->config( schema_class => 'TAPER::Schema', connect_info => [ 'dbi:mysql:taper', 'taper', 'foobarbaz' ], ); # Test any mysql userid and privilege changes by adding a new TAPER # user from the TAPER web pages, which reads and writes the db. (At # least I'm fairly certain it reads and writes the db.) # After this, login to taper as mst3k, "DCA TAPER Tools", "Manage # Users", "Click here to add a new user." This adds the new user to # the database. If you don't do this, a user can login, but they get # the "You are logged in but you aren't approved" or something like # that. # Edit taper.conf and change ldap stuff to use a user auth store in # the conf file. This is based on the Catalyst authentication CPAN docs. <authentication> default_realm local <realms> <local> <credential> class Password password_field password password_type clear </credential> <store> class Minimal <users> <mst3k> password="foobarbaz" </mst3k> </users> </store> </local> </realms> </authentication> # quick command line test for TAPER. (No. Catalyst apps require # mod_perl or mod_fastcgi.) taper w/apache or at command line. HTTP_HOST=localhost REMOTE_ADDR=aims.lib.example.edu SERVER_PORT=80 script/taper_cgi.pl REQUEST_METHOD=GET HTTP_HOST=localhost REMOTE_ADDR=aims.lib.example.edu SERVER_PORT=80 script/taper_cgi.pl # If you have Apache httpd running with UserDir enabled and user # public_html is allowed to ExecCGI, then you can probably use a URL # like the one below to run TAPER. I've only got one virtual host and # it is devoted to a Rails application. I suppose I should ask our # hostmaster for another hostname, but for now I'm perfectly happy # hosting out of a public_html directory. The script taper_cgi.pl is # very, very slow apparently due to the Catalyst overhead. Yes, the # second URL has a trailing / (slash). http://aims.lib.example.edu/~mst3k/TAPER/script/taper_cgi.pl/auth/login http://aims.lib.example.edu/~mst3k/TAPER/script/taper_cgi.pl/ # If you get "Page not found" then you probably forgot the trailing # slash. This interesting URL format is due to Catalyst. # The line below probably runs the server with verbose debugging # output. Probably useful if your installation isn't quite running # right. perl -MCarp=verbose script/taper_server.pl -p 3030 # I don't think I did any of the stuff below. This probably comes from # some web page on how to reset the root password for mysql. [root@tull ~]# man mysqld_safe [root@tull ~]# mysqld_safe --init-file=mysql_reset.sql 101201 11:29:44 mysqld_safe Logging to '/var/log/mysqld.log'. 101201 11:29:44 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 101201 11:29:49 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended [root@tull ~]# /etc/init.d/mysqld start Starting MySQL: [ OK ] [root@tull ~]# cat mysql_reset.sql UPDATE mysql.user SET Password=PASSWORD('foo') WHERE User='root'; FLUSH PRIVILEGES; [root@tull ~]# # Now that TAPER runs with the taper_script.pl script it is time to # get it running under Apache httpd with mod_fcgid. TAPER was not # intended to use mod_perl and it works very poorly. There are rumors # that mod_fastcgi is deprecated. Since I have to run TAPER on both a # Fedora Core Linux server and a Centos Linux server I chose mod_fcgid # which has yum packages. # On Centos I installed the fcgi package. I didn't install this on # Fedora Linux and I'm pretty sure fcgi is not required. sudo su -l root yum -y install mod_fcgid # Now you'll have a file /etc/httpd/conf.d/fcgid.conf. If you have # Centos, then you have the old version of this file. It works fine, # but the commant should read: # Use FastCGI to process .fcg .fcgi & .fpl scripts as long as # mod_fastcgi is not already doing this. mod_fcgid and mod_fastcgi # conflict with each other. # If not mod_fastcgi then use fcgid-script for various fastcgi related # file extensions. cd /etc/httpd/conf/ # make a backup of httpd.conf emacs httpd.conf # Add the lines below, modified for your server. Note that I'm running # Rubymatica via mod_passenger and that config is here as well. This # should be everything you need in httpd.conf for Rubymatica, TAPER, # and the donor survey. # ... clip ... # Use name-based virtual hosting. # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. # The modern way is each vhost is :80 with a different ServerName. # http://httpd.apache.org/docs/current/vhosts/name-based.html NameVirtualHost *:80 LoadModule passenger_module /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.5/ext/apache2/mod_passenger.so PassengerRoot /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/passenger-3.0.5 PassengerRuby /opt/ruby-enterprise-1.8.7-2011.03/bin/ruby <VirtualHost *:80 > ServerName aims.lib.virginia.edu # be sure to point to 'public'! DocumentRoot /home/mst3k/am_ruby/public # setenv RailsEnv production # Based on config/environment.rb the var is all caps, with underscore setenv RAILS_ENV production # default is 3 setenv PassengerLogLevel 5 setenv PassengerUseGlobalQueue on setenv RailsFrameworkSpawnerIdleTime 0 setenv RailsAppSpawnerIdleTime 0 <Directory /home/mst3k/am_ruby/public > # relax Apache security settings AllowOverride all # MultiViews must be turned off Options -MultiViews AuthUserFile /home/mst3k/.htpasswd AuthGroupFile /dev/null AuthName Rubymatica AuthType Basic require valid-user </Directory> </VirtualHost> # Settings for TAPER. Must have mod_fcgid. See also conf.d/fcgid.conf # http://blog.hjksolutions.com/articles/2007/07/19/catalyst-deployment-with-apache-2-and-mod_fcgid <IfModule mod_fcgid.c> Alias /taper/static /home/mst3k/public_html/TAPER/root/static <Location /taper/static> # http://hostname/taper/static/images/leftside_photo_34x342.jpg SetHandler default-handler </Location> Alias /taper /home/mst3k/public_html/TAPER/script/taper_fastcgi.pl/ <Location /taper> Options ExecCGI Order allow,deny Allow from all AddHandler fcgid-script .pl </Location> </IfModule> # end of httpd.conf # as root /etc/init.d/httpd restart exit # Access TAPER via a URL that has /taper as the apparent document root. # http://aims.lib.virginia.edu/taper/ # mod_fcgid knows to run taper_fastcgi.pl due to the Alias above # combined with the "AddHandler fcgid-script .pl" in the Location # directive for /taper. # On the other hand /taper/static is using the default handler, aka # whatever Apache httpd would normally do. This is good because things # like images are simply loaded via httpd without the Catalyst overhead. # The script is running from /home/mst3k/public_html/TAPER/script (the # dir containing taper_fastcgi.pl) and it tried to mkdir run/session/b # in that dir. However, suexec apparently doesn't work with mod_fcgid, # so it fails. "chmod -R go+w ./run" [Tue Apr 12 15:36:16 2011] [warn] [client 128.143.166.245] mod_fcgid: stderr: [error] Caught exception in engine "mkdir run/session/b: Permission denied at /usr/local/lib/perl5/site_perl/5.10.0/Cache/FileBackend.pm line 222", referer: http://aims.lib.virginia.edu/taper/auth/login # Do the chmod as a normal user, not root. See output of id: > id uid=522(mst3k) gid=100(users) groups=100(users) cd ~/public_html/TAPER/script chmod -R go+w ./run # Or put this in your VirtualHost directive: # This works to run scripts from anywhere in document root as a # non-apache user. Coexists fine with mod_passenger and # mod_fcgi. If you want a Rails or Catalyst app to run as a # non-apache user, you'll probably have to use a directory in /var/www. Alias /test /var/www/html/test SuexecUserGroup mst3k users <Directory /var/www/html/test > Options ExecCGI </Directory> # This version of TAPER is essentially a beta release, and has a # couple of small issues. The images are hard coded to come from a # server at tufts.edu. # I copied ./TAPER/root/lib/wrapper to ./TAPER/root/lib/wrapper.dist # and then changed the img src in wrapper.dist to something that is # easy to search and replace like %%images/yadayada.jpg. To make a # "working" version simply copy wrapper.dist to wrapper and do the # substitutions. Here is an example # src="/taper/static/images/tufts_logo_226x78.jpg". You'll need to # download the images with wget or curl. I put my images in # ./TAPER/root/static/images > pwd /home/mst3k/public_html/TAPER/root/static/images > ls -l total 132 -rw-r--r-- 1 mst3k users 341 2011-04-07 15:53 bg_190x15.jpg -rw-r--r-- 1 mst3k users 3826 2011-03-28 16:39 btn_120x50_built.png -rw-r--r-- 1 mst3k users 3681 2011-03-28 16:39 btn_120x50_built_shadow.png -rw-r--r-- 1 mst3k users 3862 2011-03-28 16:39 btn_120x50_powered.png -rw-r--r-- 1 mst3k users 3673 2011-03-28 16:39 btn_120x50_powered_shadow.png -rw-r--r-- 1 mst3k users 2517 2011-03-28 16:39 btn_88x31_built.png -rw-r--r-- 1 mst3k users 2274 2011-03-28 16:39 btn_88x31_built_shadow.png -rw-r--r-- 1 mst3k users 2542 2011-03-28 16:39 btn_88x31_powered.png -rw-r--r-- 1 mst3k users 2304 2011-03-28 16:39 btn_88x31_powered_shadow.png -rw-r--r-- 1 mst3k users 13710 2011-03-28 16:39 catalyst_logo.png -rw-r--r-- 1 mst3k users 43032 2011-04-07 15:53 dca__17.jpg -rw-r--r-- 1 mst3k users 10573 2011-04-07 15:53 leftside_photo_34x342.jpg -rw-r--r-- 1 mst3k users 817 2011-04-07 15:53 logo_bottom_226x26.jpg -rw-r--r-- 1 mst3k users 488 2011-04-07 15:53 site_header_bottom.jpg -rw-r--r-- 1 mst3k users 6653 2011-04-07 15:53 site_header_top.jpg -rw-r--r-- 1 mst3k users 7110 2011-04-07 15:53 tufts_logo_226x78.jpg >