Deploying on Linux
Install Sun Java JDK
1. You should install a Sun/Oracle Java SDK. Use Oracle's installation instructions. Choose the appropriate 32-bit or 64-bit Linux installer, for example jdk-6u27-linux-x64-rpm.bin, and install it.
Creating symbolic links as follows is useful (alternatively use the 'alternatives' command to manage JVMs):
ln -s /usr/java/jdk1.6/bin/java /usr/bin/java
and you need to change your path in your bash profile (_~/.bash_profile) to have this path :
Install the WebObjects frameworks (Optional)
2. Get the WebObjects installer from the wocommunity's Web site :
OR
wget https://jenkins.wocommunity.org/job/WOInstaller/lastSuccessfulBuild/artifact/Utilities/WOInstall/WOInstaller.jar
and install it like this :
wget sudo java -jar WOInstaller.jar dev54 /opt
You may see an error as the command above finishes, but WO may still be installed.
This command below is what you could do if you did not need the dmg above. Unfortunately there is a bug having to do with downloading via HTTPS and you do not get the WebObjects543.dmg automatically and you need the command above.
/opt
sudo /usr/java/latest/bin/java -jar WOInstaller.jar 5.4.3 /optWebObjects frameworks are now installed in
total 12
drwxr-xr-x 3 root root 4096 Nov 9 08:19 Developer
drwxr-xr-x 4 root root 4096 Nov 9 08:19 Library
drwxr-xr-x 3 root root 4096 Nov 9 08:20 Local
Creating the appserver user and starting wotaskd/JavaMonitor
To follow the conventions from Mac OS X, we will create two users to run wotaskd and Monitor under this user :
sudo useradd -g appserveradm appserver
Edit the bash profile of the appserver
% vi .bash_profile
and add this line :
and run it manually in your current shell :
3. Next, we need to install the Wonder version wotaskd and JavaMonitor.
$ cd /opt/Local/Library/WebObjects/JavaApplications
$ wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/wotaskd.tar.gz
$ tar zpxf wotaskd.tar.gz
$ rm wotaskd.tar.gz
$ wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/JavaMonitor.tar.gz
$ tar zpxf JavaMonitor.tar.gz
$ rm JavaMonitor.tar.gz
4. Now we need to change some permissions:
sudo chown -R appserver:appserveradm /opt/Library
5. Now we can start wotask and Monitor
You can start wotaskd and Monitor, manually, to make sure that they run without any problems :
[appserver@ ~]$ $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 &
Apache
(Should info on properly installing and configuring Apache be its own page? Is it its own page somewhere else already? -rrk)
If your Linux installation don't already have Apache httpd running or installed, you need to install it:
For Ubuntu distributions :
On that system the relevant command names are apache2ctl and apxs2, and the document root is /var/www (not /usr/local/apache/htdocs as in the example below).
(you will need httpd-devel and gcc)
For CentOS, RedHat or Fedora distributions :
.. default install location is then /etc/httpd
HTTP Adaptor
First, check if a pre-built module already exists at wocommunity.org. If you are running CentOS 6.x, you can use the module for CentOS 5.5, it works fine.
Once you have downloaded the module, you can install it with:
If you can't find a adaptor for your Linux platform, you will have to build it
Apache Configuration
Instead of copying the WebObjects directory, you can use a alias to point to the folder inside NEXT_ROOT. In your Apache configuration, add something like :
and add a directive to allow fetching files in this directory:
Or (depending on your Apache configuration) you could use a symbolic link.
You also need, as explained by the adaptor's README file, to add this directive in httpd.conf :
If you don't add it, you will get 403s (Forbidden) HTTP errors.
If you want to keep /cgi-bin/WebObjects as the base URL, you will need to remove a line in httpd.conf. Find the line that starts with ScriptAlias /cgi-bin and comment it out, or else Apache will try to find a WebObjects CGI in /cgi-bin instead of loading the adaptor from the Apache module.
And edit /usr/local/apache/conf/extra/webobjects.conf to comment the LoadModule WebObjects_module line. You can also change the WebObjectsAlias property, in my case I use /apps/WebObjects. Last step : add the following line in httpd.conf (near the end):
Check for any errors with apachectl configtest, and if everything's ok, you are good to go. You can install your first app, don't forget that your app must be accessible by the appserver user or the appserveradm group. If your app don't start or if Monitor complains about a path, it might be a permission problem.
Jerome Chan told me that you can check if the Apache module is loaded by doing this :
On my installation on OpenSuse 11.1, I had to change the path to the lib64 directory where Apache contains the modules.
Auto Start WOTaskd and WOMonitor
One last thing, you need a init script to start wotaskd and Monitor at boot time.
The scripts are available on GitHub. Grab the two files (womonitor and wotaskd) and copy them into the proper directory.
You will be able to see where the services files should go by searching for others.
Once a wotaskd.service and womonitor.servcie file are in the proper location, you can start them:
sudo service start womonitor
You should be deploying as the user "appserver" and, if you have done this, make sure that all files and directories referred to in the service files exist and that the permissions are as they should be and that they are owned by or accessible to the appserver user. All files must be readable, all directories must be readable and executable and scripts must the executable. Make sure to check log file locations as well.
Any errors in these files may make the service fail to start in non-obvious ways. The resulting error messages may not be helpful. The best strategy is to be very careful with the contents of the files. An example service file is below. Running "systemctl status" on the services and carefully examining everything in the output may help you with deployment problems.
Enabling the services will ensure that the services restart after a reboot.
sudo service enable womonitor
Here's a systemd unit to put into /lib/systemd/system/wotaskd.service
# Maik Musall <maik@selbstdenker.ag>, Aug 2016 [Unit]
Description=WebObjects/Wonder wotaskd
Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd
AssertPathExists=/var/log/webobjects
AssertPathExists=/opt/Local/Library/WebObjects/JavaApplications/wotaskd.woa
[Service]
User=appserver
Group=appserveradm
Environment=NEXT_ROOT=/opt
Environment="JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"
Environment=WOTASKD_LOG=/var/log/webobjects/wotaskd.log
ExecStart=/opt/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd -WOPort 1085 -Xms32m -Xmx64m >> $WOTASKD_LOG 2>&1 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Problems with Application Responding to WOMonitor/WOTaskd
If your Linux server is a virtual machine or if it has multiple IP addresses, you may find that clicking 'Stop' in WOMonitor has no effect on instances, or that the applications never start (the level just go up and down non-stop). This can usually be solved for all Wonder-based applications running on hosts with such a problem by simply creating the following file (known as the 'Machine Properties' file in Wonder's ERXProperties):
And inside that file, add an array property that defines all the IP addresses assigned to your host, for example:
SELinux
If SELinux is enabled on your system, wotaskd won't be reachable due to its preventing Apache from opening TCP connections. If you're comfortable with allowing Apache to connect to any TCP ports (including external hosts), you can run the following:
Alternatively, Steven Klassen has written a blog post (Custom SELinux Port Access) that outlines how to create and install a wotaskd SELinux module that specifically allows connections to port 1085.
Additional Resources
Jonathon Rentzsch WOPlat Project 'WOInstaller + Wonder Web Server Adaptor + OS Support Files'
http://vmadmin.nt.com.au/?p=47
http://www.watermarkstudios.com/blog/?p=48