1178 lines
36 KiB
Plaintext
1178 lines
36 KiB
Plaintext
Tango 2000 HOWTO
|
||
Shayne Lebrun
|
||
July 2000
|
||
|
||
This document describes the installation, configuration, and basic
|
||
troubleshooting of Pervasive Software's Tango Application Server on
|
||
Sun Solaris and various flavours of Linux.
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
|
||
1. Introduction
|
||
|
||
1.1 Contributors and Contacts
|
||
1.2 Acknowledgements
|
||
1.3 Revision History
|
||
1.4 New Versions
|
||
1.5 Copyrights and Trademarks
|
||
1.6 Feedback
|
||
|
||
2. The Basics
|
||
|
||
2.1 Tango Application Sever
|
||
2.2 TAS, Web Server and Web Client
|
||
2.3 TAS Life Cycle
|
||
|
||
3. System Configuration / Requirements
|
||
|
||
3.1 Solaris
|
||
3.1.1 System Requirements
|
||
3.1.2 System Configuration
|
||
3.2 Linux
|
||
|
||
4. Tango Installation and Configuration
|
||
|
||
4.1 Installation - Tango 3.x
|
||
4.1.1 Solaris
|
||
4.1.1.1 Installing the Files
|
||
4.1.1.2 Setting up the Tango user account
|
||
4.1.2 Linux
|
||
4.2 Tango 2000
|
||
4.2.1 Solaris
|
||
4.2.2 Linux
|
||
4.3 Tango 2000 Service Pack 1
|
||
4.3.1 Solaris
|
||
4.3.2 Linux
|
||
4.4 tXserver.ini - TAS Settings
|
||
4.4.1 Cache
|
||
4.4.2 CacheIncludeFiles
|
||
4.4.2.1 CacheSize
|
||
4.4.3 ConfigPasswd
|
||
4.4.4 DataSourceLife
|
||
4.4.5 DebugMode
|
||
4.4.6 DSConfigFile
|
||
4.4.7 ItemBufferSize
|
||
4.4.8 License
|
||
4.4.9 ListenerPort
|
||
4.4.10 LoggingLevel
|
||
4.4.11 MaxActions
|
||
4.4.12 MaxHeapSize
|
||
4.4.13 QueryTimeOut
|
||
4.4.14 RequestQueueLimit
|
||
4.4.15 ThreadPoolSize
|
||
4.4.16 ValidHosts
|
||
|
||
5. TAS and Web Servers
|
||
|
||
5.1 Netscape Server Configuration
|
||
5.1.1 Tango 3.x
|
||
5.1.2 Tango 2000
|
||
5.1.3 Tango 2000 Service Pack 1
|
||
5.2 Apache Server Configuration
|
||
5.2.1 Tango 2000
|
||
5.2.2 Tango 2000 Service Pack 1
|
||
5.3 tXclient.ini - CGI/Plugin configuration
|
||
5.4 Load Splitting/Load Balancing
|
||
5.4.1 Tango Load Splitting
|
||
5.4.2 Load Balancing - Hardware Load Balancers
|
||
|
||
6. TAS and Oracle
|
||
|
||
6.1 Oracle Support
|
||
|
||
7. TAS and ODBC
|
||
|
||
7.1 Solaris
|
||
7.2 Linux
|
||
7.3 The odbc.ini Configuration File
|
||
7.4 Solaris, ODBC and Oracle
|
||
|
||
8. Handy TAF Files
|
||
|
||
8.1 CGI_OR_PLUGIN.taf
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Introduction
|
||
|
||
|
||
This is the Tango for Linux and Solaris HOWTO, designed to be a quick
|
||
reference to the installation and configuration of various versions of
|
||
Tango on supported UNIX and UNIX-like platforms. This guide is valid
|
||
for Solaris 2.6 and 7 on the SPARC architecture, and for Red Hat 5.2
|
||
and 6, S.U.S.E 6.2+ and Caldera OpenLinux 2.2+, all running on Intel.
|
||
|
||
1.1. Contributors and Contacts
|
||
|
||
|
||
This HOWTO was created by Shayne Lebrun <mailto:slebrun@home.com> and
|
||
is currently maintained by the same. Pervasive Software technical
|
||
support can be reached at 1-800-287-4383 or techsupport@pervasive.com
|
||
<mailto:techsupport@pervasive.com>
|
||
|
||
1.2. Acknowledgements
|
||
|
||
|
||
Many thanks to the fine HOWTO HOWTO by Mark F. Komarinski. You should
|
||
be able to find it at the LDP homepage at http://www.linuxdoc.org
|
||
<http://www.linuxdoc.org>
|
||
|
||
The Tango Documentation Team makes a damn fine set of manuals; don't
|
||
let your MTCV book out of sight!
|
||
|
||
1.3. Revision History
|
||
|
||
|
||
This is the first attempt at laying this all down.
|
||
|
||
1.4. New Versions
|
||
|
||
|
||
The latest version is always available at
|
||
http://www.members.home.net/slebrun/howto/TangoHOWTO.html
|
||
|
||
1.5. Copyrights and Trademarks
|
||
|
||
|
||
(c) 2000 Shayne Lebrun
|
||
|
||
This manual may be reproduced in whole or in part, without fee,
|
||
subject to the following restrictions:
|
||
|
||
<20> The copyright notice above and this permission notice, and the
|
||
trademark notice below, must be preserved complete on all complete
|
||
or partial copies
|
||
|
||
<20> Any translation or derived work must be approved by the author in
|
||
writing before distribution
|
||
|
||
<20> If you distribute this work in part, instructions for obtaining the
|
||
complete version of this manual must be included, and a means for
|
||
obtaining a complete version provided
|
||
|
||
<20> Small portions may be reproduced as illustrations for reviews or
|
||
quotes in other works without this permission notice if proper
|
||
citation is given
|
||
|
||
Exceptions to these rules may be granted for academic purposes: Write
|
||
to the author and ask. These restrictions are here to protect us as
|
||
authors, not to restrict you as learners and educators.
|
||
|
||
1.6. Feedback
|
||
|
||
|
||
Suggestions, flames, corrections, requests for a dinner date, etc etc,
|
||
should be sent to slebrun@home.com with a subject of 'HOWTO'
|
||
<mailto:slebrun@home.com?subject=HOWTO> and they'll be looked at.
|
||
Remember, it's you who knows what needs to be in that document that
|
||
currently isn't. And it won't get there if you don't tell me about it.
|
||
|
||
2. The Basics
|
||
|
||
|
||
2.1. Tango Application Sever
|
||
|
||
|
||
Tango Application Server, aka TAS, runs as a daemon process. Tango 3.x
|
||
is 'tangod' and Tango 2000 is 'tango4d'. Tango 2000 also runs a
|
||
seperate Server Watcher process. Tango is a 'green threaded'
|
||
application; it spawns a series of threads, but manages the threads
|
||
itself. This means that a single TAS will not take advantage of
|
||
multiple processors. However, Tango 3.6 and Tango 2000 include load
|
||
splitting capabilities which allow you to run multiple TAS daemons on
|
||
one box.
|
||
|
||
2.2. TAS, Web Server and Web Client
|
||
|
||
|
||
The Tango Application Server is never contacted directly by the web
|
||
browser; nor does it ever send information directly to the web
|
||
browser. The browser only ever makes requests of the web server, which
|
||
then forwards the request to the TAS through either a CGI or a web-
|
||
server specific plugin. There are several advantages to this scheme.
|
||
First, nothing on the browser side needs to be updated; no plugins,
|
||
Active-X objects, client side Java, or anything are required. Second,
|
||
the CGI/Plugin allows the Tango Server to be on a machine other than
|
||
the web server, or indeed on several machines other than the
|
||
webserver.
|
||
|
||
2.3. TAS Life Cycle
|
||
|
||
|
||
Born
|
||
Tango Server is instanced, and loads it's configuration files
|
||
and what not. No user requests are accepted.
|
||
|
||
Startup
|
||
Tango Server first looks for a StartupURL. If one is specified,
|
||
a request is generated. A successful return will allow Tango to
|
||
move to the next stage. If the request cannot be sent, or if
|
||
there is no URL specified, Tango Server moves on to the
|
||
'Running' stage.
|
||
|
||
StartupURL-Response
|
||
Tango Server stays in this stage until a response is received
|
||
from the StartupURL, or until the request times out.
|
||
|
||
Running
|
||
This is the normal operating state for Tango Server; user
|
||
requests are accepted, Tango Cron jobs are run, and so on.
|
||
|
||
Shutdown
|
||
When a shutdown request is received, or generated by Tango
|
||
itself on a fatal exception, a ShutdownURL is looked for, and
|
||
run if it exists. Otherwise, it moves on to the Waiting for
|
||
Running Threads stage.
|
||
|
||
ShutdownURL-Response
|
||
Tango stays in this stage until either a response is received
|
||
from the URL requested, or it times out.
|
||
|
||
Waiting
|
||
Tango Server waits for threads already running to finish, but no
|
||
longer than the specified waiting period.
|
||
|
||
Dead
|
||
Tango Server kills all still running threads, cleans up, and
|
||
exits.
|
||
|
||
3. System Configuration / Requirements
|
||
|
||
|
||
3.1. Solaris
|
||
|
||
|
||
3.1.1. System Requirements
|
||
|
||
|
||
Tango for Solaris requires Solaris 2.6 or Solaris 7, SPARC
|
||
architecture, approximately 30 megabytes of disk space, and
|
||
approximately 2 megabytes of memory per user, given what Pervasive
|
||
considers to be 'average' memory use.
|
||
|
||
Tango 2000 requires Solaris system patches. 105591 for Solaris 2.6.
|
||
106300 and 106327 on Solaris 7. Note that 105591 revision 08 causes
|
||
Tango to core dump, as does 106327 revision 07. Not all the crashes
|
||
are Tango's fault. :-) Solaris patches are available at
|
||
http://access1.sun.com <http://access1.sun.com>
|
||
|
||
3.1.2. System Configuration
|
||
|
||
|
||
There are a series of changes which can be made to your /etc/system
|
||
file to increase various resources. These changes will often increase
|
||
Tango performance, as well as preventing resource related crashes. The
|
||
changes will require a reboot. Be very careful when making such
|
||
changes.
|
||
|
||
These are generic values which are nevertheless better than defaults.
|
||
|
||
|
||
|
||
*** New Settings
|
||
set shmsys:shminfo_shmmax=4294967295
|
||
set shmsys:shminfo_shmmin=1
|
||
set
|
||
shmsys:shminfo_shmmni=100
|
||
set shmsys:shminfo_shmseg=10
|
||
set semsys:seminfo_semmni=100
|
||
set
|
||
semsys:seminfo_semmsl=100
|
||
set semsys:seminfo_semmns=200
|
||
set semsys:seminfo_semopm=100
|
||
set
|
||
semsys:seminfo_semvmx=32767
|
||
*** New Settings End
|
||
|
||
|
||
|
||
Take a look at your Solaris documentation, or http://docs.sun.com
|
||
<http://docs.sun.com> for further information.
|
||
|
||
Also, add the following line to the login script of the Tango user
|
||
after installation:
|
||
|
||
ulimit -n 1024
|
||
|
||
|
||
|
||
3.2. Linux
|
||
|
||
|
||
Tango for Linux requires the appropriate flavour for the version you
|
||
downloaded or purchased. Pervasive will NOT support running a version
|
||
of Tango for Linux on a different Linux flavour; Tango for Red Hat
|
||
Linux might not run on Caldera 2.2, let alone on Debian.
|
||
|
||
Tango for Linux currently only supports the x86 architecture.
|
||
|
||
If you're using Red Hat 5.2, you'll need to upgrade your kernel. The
|
||
Tango for Linux documentation has the details.
|
||
|
||
4. Tango Installation and Configuration
|
||
|
||
|
||
4.1. Installation - Tango 3.x
|
||
|
||
|
||
4.1.1. Solaris
|
||
|
||
|
||
4.1.1.1. Installing the Files
|
||
|
||
|
||
The current version of Tango 3.x for Solaris is Tango 3.62. There is
|
||
not expected to be any further updates to the 3.x codebase. The
|
||
installation path is designed for incremental upgrades, so is a bit
|
||
tricky.
|
||
|
||
First, you'll need the Tango 3.6 version. This is a compressed
|
||
tarball, and will untar itself into /var/opt/EDI/. You'll need to be
|
||
superuser to install this.
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
$su -
|
||
Password: ********
|
||
# uncompress tango36sol.tar.Z
|
||
# tar -xvf tango36sol.tar
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
Next, you'll need to grab the Tango 3.62 patch file. This too is a
|
||
compressed tarball. This one will uncompress to whatever directory
|
||
it's in, so make a temp directory somewhere and use that.
|
||
|
||
______________________________________________________________________
|
||
$su -
|
||
Password: ********
|
||
# mkdir Tango362
|
||
# cp ./tangoSol362.tar.Z ./Tango362/
|
||
# cd Tango362
|
||
# uncompress tangoSol362.tar.Z
|
||
# tar -xvf tangoSol362.tar
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
What you'll wind up with are three binary files, a Readme.txt, and an
|
||
'odbc' directory. Move the TangoNS_ep3.so to /var/opt/EDI/lib and the
|
||
t3.cgi and tangod files to /var/opt/EDI/bin. Finally, remove your
|
||
/var/opt/EDI/odbc directory and replace it with this one.
|
||
|
||
______________________________________________________________________
|
||
# mv./TangoNS_ep3.so /var/opt/EDI/lib/TangoNS_ep3.so
|
||
#mv ./t3.cgi /var/opt/EDI/bin/t3.cgi
|
||
#mv ./tangod /var/opt/EDI/bin/tangod
|
||
# rm -rf /var/opt/EDI/odbc
|
||
#mv ./odbc /var/opt/EDI/
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.1.1.2. Setting up the Tango user account
|
||
|
||
|
||
Next, you'll need to use your favourite method to create a user
|
||
account to run Tango. You can use the graphical 'admintool' program,
|
||
or command line programs such as 'adduser' or 'useradd' depending on
|
||
your installation.
|
||
|
||
Generally, you'll want to call the account 'tango' and also perhaps
|
||
make a group called 'pvsw'. The user should be given ownership of
|
||
everything in the /var/opt/EDI directory tree. If deploying in a
|
||
production environment, especially on something outside of a firewall
|
||
or the like, set the account to have no password, no login
|
||
capabilities.
|
||
|
||
4.1.2. Linux
|
||
|
||
|
||
There is no version of Tango 3.x for Linux. Had you going, though.
|
||
|
||
4.2. Tango 2000
|
||
|
||
|
||
|
||
4.2.1. Solaris
|
||
|
||
|
||
Tango 2000 is shipped in the form of a Solaris Package Archive. You'll
|
||
need to login as root, and using either the 'admintool' graphical
|
||
utility, or run the pkgadd command. If you have a CD-ROM copy,mount
|
||
the CD. The automounter will generally mount it in /cdrom. Copy the
|
||
/cdrom/tango_as-2000/tango2000/T2000Install.tar file to a temporary
|
||
directory. If you downloaded Tango 2000, it will be a compressed tar
|
||
file, and you'll need to uncompress it first. If it's already
|
||
uncompressed, skip the first step below.
|
||
|
||
______________________________________________________________________
|
||
# uncompress T2000Install.tar.Z
|
||
# tar -xvf T2000Install.tar
|
||
# cd T2000Install
|
||
# pkgadd -d. PVSWtango
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
and follow the prompts.
|
||
|
||
Warning: the shipping Tango 2000 installer sometimes rejects
|
||
valid CD-keys as being invalid. If this occurs, leave the
|
||
CD-Key blank, and manually add your key later (see section
|
||
x.x).
|
||
|
||
|
||
4.2.2. Linux
|
||
|
||
|
||
Tango 2000 for Linux is distributed as an RPM. On a distribution CD,
|
||
you'll find the file in the tango2000 directory. Copy the appropriate
|
||
file to a temp directory; Tango2000-server-4-Linux_i386.rpm if you're
|
||
using Red Hat 6, Caldera 2.2 or S.U.S.E 6.2 or later.
|
||
Tango2000-server-4-RedHat52_i386.rpm if you're using Red Hat 5.2.
|
||
Either way, you'll need to be root.
|
||
|
||
Note that to use Red Hat 5.2, you'll need to manually
|
||
upgrade your kernel to version 2.2 or higher.
|
||
|
||
|
||
|
||
______________________________________________________________________
|
||
#rpm -Uvh Tango2000-server-4-Linux_i386.rpm
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
4.3. Tango 2000 Service Pack 1
|
||
|
||
|
||
4.3.1. Solaris
|
||
|
||
|
||
Tango 2000 SP1 for Solaris is a Solaris Package Archive, designed to
|
||
replace/update the existing installation. It is, however, a full
|
||
install, so if you don't have Tango installed already, you'll get a
|
||
working install. Otherwise, the procedure to install is the same as
|
||
Tango 2000, only the archive is T2000InstallSP1.tar.Z
|
||
|
||
You'll probably want to back up your t4client.ini and t4server.ini
|
||
files, as well as your web server configuration files.
|
||
|
||
|
||
4.3.2. Linux
|
||
|
||
|
||
Tango 2000 SP1 for Linux is an RPM designed to replace/update the
|
||
existing installation. It is, however, a full install, so if you don't
|
||
have Tango installed already, you'll get a working install. Otherwise,
|
||
the procedure to install is the same as Tango 2000, only the RPM is
|
||
Tango2000-server-4.05.i386.rpm, or
|
||
Tango2000-server-4.05.RedHat52.i386.rpm if you're using Red Hat 5.2.
|
||
|
||
4.4. tXserver.ini - TAS Settings
|
||
|
||
|
||
Tango uses a file called 't3server.ini' or 't4server.ini' to control
|
||
many of it's behaviors and functions. For Tango 3.x, this file is
|
||
/var/opt/EDI/t3server.ini and for Tango 2000, it's
|
||
$TANGO_HOME/configuration/t4server.ini. You can find a complete
|
||
description of all entries in your Metatags and Configuration
|
||
Variables book, but the most important/commonly used ones are listed
|
||
here.
|
||
|
||
4.4.1. Cache
|
||
|
||
|
||
Possible entries: TRUE, FALSE
|
||
|
||
This controls weather or not Tango caches TAF files. Caching will
|
||
reduce disk access, speeding up TAF execution.
|
||
|
||
4.4.2. CacheIncludeFiles
|
||
|
||
|
||
Possible entries: TRUE, FALSE
|
||
|
||
This controls weather or not Tango caches included files. Caching will
|
||
prevent repeated disk access, speeding up TAF execution.
|
||
|
||
4.4.2.1. CacheSize
|
||
|
||
|
||
Possible entries: Numeric, measured in bytes
|
||
|
||
This measures the size of the cache for TAFs and included files. If
|
||
cache grows to near this size, older documents will be flushed.
|
||
|
||
4.4.3. ConfigPasswd
|
||
|
||
|
||
Possible entries: text
|
||
|
||
This is the password of the config.taf online configuration
|
||
application.
|
||
|
||
4.4.4. DataSourceLife
|
||
|
||
|
||
Possible entries: numeric, measured in minutes.
|
||
|
||
This controls how long an unused datasource connection will live. A
|
||
setting of 0 will cause a datasource connection to be closed as soon
|
||
as it's query is finished.
|
||
|
||
4.4.5. DebugMode
|
||
|
||
|
||
|
||
Possible entries: ForceOn, ForceOff, appFileSetting
|
||
|
||
This controls how the TAS handles placing debug information on the
|
||
bottom of each page created; always, never, or per file settings.
|
||
|
||
4.4.6. DSConfigFile
|
||
|
||
|
||
Possible entries: path to file
|
||
|
||
This points to the Data Source configuration file, which gives you
|
||
some finer control over how Tango uses data sources. See the Data
|
||
Sources section for more details.
|
||
|
||
4.4.7. ItemBufferSize
|
||
|
||
|
||
Possible entires: numeric, measured in bytes
|
||
|
||
This is the maximum size of any given field that can be returned in a
|
||
database action. It's main function is to prevent Tango from becoming
|
||
bogged down while downloading an unusually large piece of data from a
|
||
database.
|
||
|
||
4.4.8. License
|
||
|
||
|
||
Possible entries: alphanumeric CD-Key
|
||
|
||
This is the Tango license. The CD-Key contains the licensing
|
||
information which tells Tango how to configure itself in terms of
|
||
licenses and behavior.
|
||
|
||
4.4.9. ListenerPort
|
||
|
||
|
||
Possible entries: TCP/IP Port number
|
||
|
||
This tells Tango what port to monitor for incoming connections from
|
||
the Tango CGI or Plugins. Ports cannot be shared between server
|
||
software, so multiple servers running on one machine will need their
|
||
own ports.
|
||
|
||
4.4.10. LoggingLevel
|
||
|
||
|
||
Possible entries: NoLogging, LogLevel1, LogLevel2, LogLevel3,
|
||
LogLevel4
|
||
|
||
This controls how much logging Tango does. The log, "Tango.log", is
|
||
written to the location specified in the LOGDIR config variable.
|
||
LogLevel 3 is the best to use if you're trying to debug a Tango
|
||
problem, but will slow Tango down, and will eat disk space.
|
||
|
||
4.4.11. MaxActions
|
||
|
||
|
||
Possible entires: numeric, 0 for no limit
|
||
|
||
This controls how many actions Tango will allow in a TAF file. This
|
||
guards against things like infinite loops and overly large programs;
|
||
most often used in development environments.
|
||
|
||
|
||
|
||
4.4.12. MaxHeapSize
|
||
|
||
|
||
Possible entries: numeric, measured in bytes
|
||
|
||
This controls how much memory the Tango Daemon process will allow
|
||
itself to consume. Memory is consumed by variables, datasource
|
||
connections, and cache. If Tango exceeds this number, it will shut
|
||
itself down with a 'process size exceeded' message and attempt to
|
||
restart itself normally. This number should be changed to provide 20%
|
||
more than what you record Tango as generally using during peak use.
|
||
|
||
4.4.13. QueryTimeOut
|
||
|
||
|
||
Possible entries: numeric, measured in seconds
|
||
|
||
This controls how long Tango will wait for a response from a database
|
||
call before timing out. Note that not all databases and drivers
|
||
support this functionality.
|
||
|
||
4.4.14. RequestQueueLimit
|
||
|
||
|
||
Possible entries: numeric
|
||
|
||
This controls how many requests from a CGI Tango will allow to
|
||
'queue'. A very busy site can sometimes have so many CGIs stacked,
|
||
waiting for Tango to service them, that some will get lost and
|
||
orphaned. This helps prevent that situation.
|
||
|
||
4.4.15. ThreadPoolSize
|
||
|
||
|
||
Possible entries: numeric
|
||
|
||
This controls how many simultaneous threads Tango will run with. On
|
||
Solaris, it is generally better to have several Tango servers running
|
||
a few threads apiece than to have one Tango server running the same
|
||
number of threads.
|
||
|
||
4.4.16. ValidHosts
|
||
|
||
|
||
Possible entries: TCP/IP addresses, colon delimited.
|
||
|
||
This is a list of what IP addresses Tango will allow incoming requests
|
||
from. On a machine where the web server and Tango server are both
|
||
running, this should be set to 127.0.0.1, the localhost.
|
||
|
||
5. TAS and Web Servers
|
||
|
||
|
||
The Tango Application Server runs as it's own process, where it
|
||
services requests from a web server. This allows for some
|
||
functionality such as load splitting and direction, as well as freedom
|
||
of choice in web server and platform. The TAS need not be on the same
|
||
machine as the web server, nor is it limited to being even on one
|
||
machine.
|
||
|
||
The preferred way of having a web server talk to Tango is through a
|
||
plugin. The plugin is written in the web server's API, or Application
|
||
Programming Interface, to take advantage of specific features of that
|
||
web server, as well as the advantage of having the code execute as
|
||
part of the web server, instead of as a separate CGI process. On
|
||
Solaris, Tango has a plugin for Netscape Server and for Apache in
|
||
later versions of Tango 2000. Tango for Linux has a plugin for Apache.
|
||
|
||
5.1. Netscape Server Configuration
|
||
|
||
|
||
5.1.1. Tango 3.x
|
||
|
||
|
||
Locate your Netscape configuration files in
|
||
/whatever/netscape/suitespot/https-MYSERVER/config generally. To the
|
||
mime.types file, add this line:
|
||
|
||
type=magnus-internal/taf exts=taf
|
||
|
||
|
||
|
||
Add these two lines to the top of the obj.conf file (no line breaks;
|
||
each line which starts with 'init' is a full line. Thus, there are two
|
||
lines total)
|
||
|
||
Init fn=load-modules shlib=/var/opt/EDI/lib/TangoNS_ep3.so funcs="Tango_main,Tango_main_init"
|
||
|
||
|
||
|
||
Init fn=Tango_main_init stanza="TangoNS_ep3.so"
|
||
|
||
|
||
|
||
Add this line to the obj.conf file inside of the <Object name=default>
|
||
area, with the other services.
|
||
|
||
Service fn="Tango_main" method="(GET|HEAD|POST)" type="magnus-internal/taf"
|
||
|
||
|
||
|
||
You'll then need to use your Netscape Administration Server to restart
|
||
the server, telling it to load the configuration files when it informs
|
||
you that they've been hand-edited. Then, try hitting a TAF file. If it
|
||
works, great! If not, go through your configuration file again. Most
|
||
of the time, a misconfiguration is the reason for it not working. One
|
||
space or quotation mark out of place will destroy the entire setup.
|
||
|
||
5.1.2. Tango 2000
|
||
|
||
|
||
Locate your Netscape configuration files in
|
||
/whatever/netscape/suitespot/https-MYSERVER/config, generally. To the
|
||
mime.types file, add this line:
|
||
|
||
type=magnus-internal/taf exts=taf,tcf
|
||
|
||
|
||
|
||
Then, add these two lines to the beginning of the obj.conf file. Note
|
||
that there are no line breaks in each line.
|
||
|
||
Init fn=load-modules shlib=/opt/PVSWtango/lib/libtango4ns.so funcs="Tango_main,Tango_main_init"
|
||
|
||
|
||
|
||
Init fn=Tango_main_init stanza="libtango4ap.so" tangoconfigpath=/opt/PVSWtango/configuration
|
||
|
||
|
||
|
||
Add this line to the obj.conf file inside of the <Object name=default>
|
||
area, with the other services.
|
||
Service fn="Tango_main" method="(GET|HEAD|POST)" type="magnus-internal/taf"
|
||
|
||
|
||
|
||
You'll then need to use your Netscape Administration Server to restart
|
||
the server, telling it to load the configuration files when it informs
|
||
you that they've been hand-edited. Then, try hitting a TAF file. If it
|
||
works, great! If not, go through your configuration file again. Most
|
||
of the time, a misconfiguration is the reason for it not working. One
|
||
space or quotation mark out of place will destroy the entire setup.
|
||
|
||
5.1.3. Tango 2000 Service Pack 1
|
||
|
||
|
||
Installation is the same as for Tango 2000, but with this extra line
|
||
added to the services in the <Object name=default> area of the
|
||
obj.conf file:
|
||
|
||
Service fn="Tango_main" method="(GET|HEAD|POST)" type="magnus-internal/tml"
|
||
|
||
|
||
|
||
Also, the mime.types file should have this line used instead of the
|
||
one for Tango 2000:
|
||
|
||
______________________________________________________________________
|
||
type=magnus-internal/taf exts=taf,tcf,tml
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
5.2. Apache Server Configuration
|
||
|
||
|
||
Tango 2000 for Linux, and Tango 2000 Service Pack 1 for Solaris both
|
||
support the Apache webserver through an Apache plugin. Apache will
|
||
require mod_so support for all of these. The documentation states that
|
||
you must custom build your Apache; this is misleading. You must build
|
||
your Apache only if the pre-built version you're using doesn't have
|
||
mod_so support. There are two places to check for this:
|
||
|
||
First, try running your Apache server with a '-l' argument. If mod_so
|
||
is listed, you're fine.
|
||
|
||
______________________________________________________________________
|
||
# httpd -l
|
||
Compiled-in modules:
|
||
http-core.c
|
||
mod_so.c
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
Second, try looking in your httpd.conf file for an 'AddModule
|
||
mod_so.o' line. If you don't have mod_so support (also known as DSO
|
||
support) in some way, you'll need to compile a version that does.
|
||
|
||
5.2.1. Tango 2000
|
||
|
||
|
||
At the end of your httpd.conf file, add these lines:
|
||
|
||
LoadModule t4_module /usr/local/tango/lib/libtango4ap.so
|
||
TangoModule t4_module
|
||
/usr/local/tango/configuration/t4client.ini
|
||
|
||
Modify the paths to the .so and .ini files as appropriate on your
|
||
setup.
|
||
|
||
Your t4client.ini will then need a stanza for t4_module. See the
|
||
t4client.ini section for examples.
|
||
|
||
5.2.2. Tango 2000 Service Pack 1
|
||
|
||
|
||
At the end of your httpd.conf file, add these lines:
|
||
|
||
LoadModule t4_apache /usr/local/tango/lib/libtango4ap.so
|
||
TangoModule t4_apache
|
||
/usr/local/tango/configuration/t4client.ini
|
||
|
||
|
||
|
||
Modify the paths to the files as appropriate; Solaris defaults to
|
||
/opt/PVSWtango/ for the Tango home.
|
||
|
||
Your t4client.ini will then need a stanza for t4_apache. See the
|
||
t4client.ini section for examples.
|
||
|
||
5.3. tXclient.ini - CGI/Plugin configuration
|
||
|
||
|
||
Tango uses a client configuration file to tell the CGI or Plugins
|
||
where to send Tango requests. The file consists of two sections; a
|
||
declaration section and an information section. Here is an example for
|
||
a file controlling a CGI:
|
||
|
||
[Tango Client Definitions]
|
||
t4.cgi=Put A Description Here
|
||
|
||
|
||
|
||
[t4.cgi]
|
||
TANGO_SERVER=127.0.0.1,18100
|
||
|
||
|
||
|
||
And an example of a file with both a CGI and an Apache plugin:
|
||
|
||
[Tango Client Definitions]
|
||
t4.cgi=My Tango CGI
|
||
t4_apache=My Apache
|
||
Plugin
|
||
|
||
|
||
|
||
[t4.cgi]
|
||
TANGO_SERVER=127.0.0.1,18100
|
||
|
||
|
||
|
||
[t4_apache]
|
||
TANGO_SERVER=127.0.0.1,18100
|
||
|
||
|
||
|
||
Further entries can be made as appropriate. Use this list to find what
|
||
|
||
CGI
|
||
Use the name of the CGI. For example, you could have two CGIs,
|
||
t4.cgi and t4private.cgi, each pointing to a different Tango
|
||
server.
|
||
Netscape Plugin (Tango 2000)
|
||
Use 'libtango4ns.so' as the name. You shouldn't try to load
|
||
multiple plugins.
|
||
|
||
Netscape Plugin (Tango 3.x)
|
||
Use 'TangoNS_ep3.so'
|
||
|
||
Apache Plugin
|
||
Use 't4_module' for Tango 2000 and 't4_apache' for Tango 2000
|
||
Service Pack 1. You shouldn't try to load multiple modules.
|
||
|
||
Tango 3 versions earlier than 3.6 use a slightly different format.
|
||
TANGO_SERVER is broken into two lines; TANGO_HOST and TANGO_PORT.
|
||
Here's an example:
|
||
|
||
[Tango Client Definitions]
|
||
t3.cgi
|
||
|
||
|
||
|
||
[t3.cgi]
|
||
TANGO_HOST=127.0.0.1
|
||
TANGO_PORT=18000
|
||
|
||
|
||
|
||
5.4. Load Splitting/Load Balancing
|
||
|
||
|
||
All versions of Tango starting with 3.6 have allowed Load Splitting.
|
||
You can define a series of Tango servers that a plugin can use, and it
|
||
will distribute new requests between the servers. Users who make
|
||
subsequent requests are directed back to the server they were at
|
||
previously via the UserReference search argument or cookie. Users
|
||
cannot move between servers without losing their variables and what
|
||
not. Also, what Tango currently does is not load balancing; that is
|
||
expected for a future release of Tango.
|
||
|
||
Tango does not need to be running on the same machine as the web
|
||
server in any event. You need only run configure Tango's VALIDHOST
|
||
configuration variable to include the IP address of the web server
|
||
machine. Then, in the web server machine's t4client.ini file, put in
|
||
the IP address and port number as usual.
|
||
|
||
5.4.1. Tango Load Splitting
|
||
|
||
|
||
To add multiple Tango servers, add an entry to the t4server.ini file
|
||
with the new name of the server, and add a new stanza for it,
|
||
generally by copying an existing stanza. Then, change all directory
|
||
names to be unique, such as LOGDIR. Make sure that it's running on a
|
||
unique port. Tango defaults to port 18100. Here is an abbreviated
|
||
example of a t4server.ini file with two Tango Application Server
|
||
instances:
|
||
|
||
[Tango Definitions]
|
||
TAS_1=MyFirstServer
|
||
TAS_2=MySecondServer
|
||
|
||
|
||
|
||
[TAS_1]
|
||
...
|
||
LISTENERPORT=18100
|
||
...
|
||
LOGDIR=/usr/local/tango/log.TAS_1
|
||
|
||
...
|
||
|
||
|
||
|
||
[TAS_2]
|
||
...
|
||
LISTENERPORT=18101
|
||
...
|
||
LOGDIR=/usr/local/tango/log.TAS_2
|
||
...
|
||
|
||
|
||
|
||
All other configuration variables would be filled in as appropriate.
|
||
|
||
To run Tango with a specific configuration definition, use the -c
|
||
switch.
|
||
|
||
______________________________________________________________________
|
||
$ ./tango4d -c TAS_1
|
||
$ ./tango4d -c TAS_2
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
The -c switch can be used in conjunction with the -k switch to kill
|
||
servers as well.
|
||
|
||
Note that you'll need the appropriate licenses, either one Corporate
|
||
or Professional license, or as many Standard licenses as you want
|
||
Tango servers.
|
||
|
||
In the t4client.ini file, simply add the IP address and port of each
|
||
server to the TANGO_SERVER line of the appropriate CGI or Plugin,
|
||
colon delimited. Here is an example t4client.ini file, using the CGI,
|
||
pointing to three separate Tango servers running on the same machine,
|
||
on ports 18100, 18101 and 18102.
|
||
|
||
[Tango Client Definitions]
|
||
t4.cgi=My CGI
|
||
|
||
|
||
|
||
[t4.cgi]
|
||
TANGO_SERVER=127.0.0.1,18100:127.0.0.1,18101:127.0.0,1,18102
|
||
|
||
|
||
|
||
5.4.2. Load Balancing - Hardware Load Balancers
|
||
|
||
|
||
You can use a hardware load balancing device with Tango so long as
|
||
your webserver farm is behind the load splitting device, and each
|
||
webserver is using an exact copy of the same t4client.ini file. The
|
||
t4client.ini file should be configured to use every Tango machine you
|
||
want available. The UserReference based Tango redirection should
|
||
function normally.
|
||
|
||
|
||
|
||
6. TAS and Oracle
|
||
|
||
|
||
6.1. Oracle Support
|
||
|
||
|
||
Tango 3.x for Solaris does not have native Oracle support. Tango 2000
|
||
for Solaris supports Oracle 8 and 8i, and generally works with Oracle
|
||
7.3.4 and above. Tango 2000 Service Pack 1 was not tested with Oracle
|
||
7.x however, and there have been reports of problems. The Oracle 8
|
||
client can connect quite happily to the Oracle 7 server, however, so
|
||
that is an option.
|
||
|
||
To use Oracle with Tango, first you require the Oracle Client to be
|
||
correctly installed on the machine. Generally, a good way to check for
|
||
this is to:
|
||
|
||
<20> check to see if there is an 'oracle' account on the machine
|
||
|
||
<20> try to run the Oracle program 'sqlplus'
|
||
|
||
If you can successfully run sqlplus, you should be fine. If not, well,
|
||
go install Oracle.
|
||
|
||
Next, you need to make sure that the client has the appropriate
|
||
entries for the datasource in question to your TNS service; generally
|
||
a tnsnames.ora file. You accomplish this with your Oracle software;
|
||
there are programs such as net8config and what not that do it for you.
|
||
The thing to remember here is that the name of the datasource needs to
|
||
be the same as the name of the datasource you're using in Tango.
|
||
|
||
Finally, to allow Tango to use the Oracle software, you need to add
|
||
this path to the LD_LIBRARY_PATH environment variable of the tango
|
||
user account.
|
||
|
||
______________________________________________________________________
|
||
$ORACLE_HOME/lib
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
You'll also need to define what $ORACLE_HOME is; this, of course, is
|
||
the root directory of Oracle, and will be some forboding path such as,
|
||
for example, /u01/software/products/8.1.5/oracle or something similar.
|
||
|
||
If you're using Oracle 7.x or 8.0.x you'll probably need to create a
|
||
new client library. Instructions for this are in
|
||
$TANGO_HOME/odbc/src/oracle in the readme.ora file. You can check to
|
||
see if you require this patch by attempting to load the Oracle ODBC
|
||
driver (see section 6). If it fails with an 'unresolved symbol' error,
|
||
then you need the patch.
|
||
|
||
As the readme file says, this newly created library must appear in
|
||
your LD_LIBRARY_PATH before the reference to $ORACLE_HOME/lib does. If
|
||
there are no other programs running, it's generally easiest to replace
|
||
the old library with the new.
|
||
|
||
Some shells seem to have trouble with the LD_LIBRARY_PATH ordering;
|
||
I've seen ksh fail to correctly load the new library, and switching to
|
||
sh or bash solve it.
|
||
|
||
7. TAS and ODBC
|
||
|
||
|
||
|
||
7.1. Solaris
|
||
|
||
|
||
Tango for Solaris includes the Merant ODBC driver pack, which Tango
|
||
can use to connect to a wide array of databases, such as Informix,
|
||
Sybase, Oracle, and now Microsoft SQL Server.
|
||
|
||
The .odbc.ini file (see below) should be located in the home directory
|
||
of the Tango user account. It can be stored elsewhere, for
|
||
centralization or what not, and located using an environment variable
|
||
called ODBCINI.
|
||
|
||
7.2. Linux
|
||
|
||
|
||
Tango 2000 for Linux includes the iODBC driver manager, and a
|
||
Pervasive.SQL driver is included with Pervasive.SQL for Linux. It will
|
||
also work with Postgres SQL and MySQL drivers. Other drivers are
|
||
available at http://www.unixodbc.com <http://www.unixodbc.com> and
|
||
http://www.iodbc.org <http://www.iodbc.org>
|
||
|
||
The .odbc.ini file (see below) should be located in
|
||
/usr/local/tango/etc/odbc.ini which can be symlinked to
|
||
/usr/local/psql/etc/odbc.ini if both are installed.
|
||
|
||
7.3. The odbc.ini Configuration File
|
||
|
||
|
||
The drivers are controlled by an ini file called .odbc.ini (note the
|
||
leading period; it's a hidden file on Solaris.)
|
||
|
||
The file contains a list of Data Source Names followed by a definition
|
||
section. It is a standard INI file format. So long as the DSN name
|
||
used by a TAF is listed in this file, and the database schema is the
|
||
same as the one on the development machine, the database access will
|
||
work transparently.
|
||
|
||
Here is an example of a .odbc.ini file containing a single DSN called
|
||
MyOracleDatabase, which is pointing to an Oracle database with a TNS
|
||
name of 'LocalOracleDatabase'.
|
||
|
||
[ODBC Data Sources]
|
||
MyOracleDatabase=
|
||
|
||
|
||
|
||
[MyOracleDatabase]
|
||
Driver=/opt/PVSWtango/odbc/lib/VQor815.so
|
||
ServerName=LocalOracleDatabase
|
||
|
||
|
||
|
||
All entries will have, at minimum, a Driver line; this points to a .so
|
||
shared object which is the actual ODBC driver. There will be other
|
||
lines dependant on the driver itself; server configuration, special
|
||
flags, that sort of thing. Refer to the readmes and to the
|
||
odbchelp.pdf file (on Solaris) or to specific driver documentation for
|
||
those settings, as well as any environment settings required.
|
||
|
||
Note that ODBC drivers still often require database specific Client
|
||
software; for example, the ODBC Oracle drivers require the same Oracle
|
||
OCI client software that Tango requires for a native Oracle
|
||
connection. Sybase client software must be installed for the Sybase
|
||
ODBC driver to function, and so on. Again, see the odbchelp.pdf file,
|
||
or driver documentation for specifics.
|
||
|
||
Anybody who would like to write small crib notes on configuring
|
||
specific databases to work with Tango for Solaris or Linux through
|
||
ODBC, feel free and send them to me and they'll be included in this
|
||
HOWTO, with full credit of course.
|
||
|
||
7.4. Solaris, ODBC and Oracle
|
||
|
||
|
||
Certain versions of the Oracle client are missing key functionality
|
||
that the Oracle ODBC drivers require, as well as the Tango native
|
||
Oracle drivers.
|
||
|
||
The easiest way to check for this condition is to use the 'ivtestlib'
|
||
program to attempt to load the Oracle ODBC driver. Become the Tango
|
||
user, and move to $TANGO_HOME/lib. Look for a driver with 'or7' for
|
||
Oracle 7, or 'or8' for Oracle 8. Depending on your version of Tango,
|
||
the full name might be 'IVor714.so' or 'VQor714.so'. The last number
|
||
before the .so is the ODBC version.
|
||
|
||
Once you have this file name, move one directory up, and then go into
|
||
the as an argument.
|
||
|
||
______________________________________________________________________
|
||
$ cd $TANGO_HOME/odbc/lib
|
||
$ ls *or8*
|
||
VQor814.so
|
||
$ cd ../bin
|
||
$ ./ivtestlib ../lib/VQor814.so
|
||
Load of ../lib/VQor814.so successful, qehandle is 0xFF24120
|
||
______________________________________________________________________
|
||
|
||
|
||
|
||
If the Oracle drivers need to be patched, you'll see a long message
|
||
ending in the fact that there is an 'undefined symbol slpmprodstab'.
|
||
This will prevent Tango Oracle Native connections from working as well
|
||
as ODBC. In the $TANGO_HOME/odbc/src/oracle directory is a readme.ora
|
||
file and two scripts, one for Oracle 7 and the other for Oracle 8. The
|
||
readme file details the creation of a new 'libclntsh.so' file, which
|
||
is the main Oracle client library. In a nutshell, make sure you have
|
||
ORACLE_HOME defined, and run the appropriate script for your version
|
||
of Oracle. This will create the .so file and place it, by default,
|
||
into $TANGO_HOME/odbc/lib. Then, make sure that that path appears in
|
||
your LD_LIBRARY_PATH before any references to $ORACLE_HOME/lib does.
|
||
You can also move the libclntsh.so file to your $ORACLE_HOME/lib
|
||
directory, or create a link between $ORACLE_HOME/lib/libclntsh.so and
|
||
the one you just created; the preexisting libclntsh.so is a link to
|
||
another library anyway.
|
||
|
||
8. Handy TAF Files
|
||
|
||
|
||
8.1. CGI_OR_PLUGIN.taf
|
||
|
||
|
||
|