Deploying on Ubuntu 22.04

Version 4.1 by D Tim Cummings on 2023/09/28 05:15

Set environment variables for your configuration to be used in following scripts

For example

export SERVER_NAME=woserver.example.com
export SERVER_IP=172.5.4.3
export WEBOBJECTS_GROUP=webobjects
export WEBOBJECTS_USER=webobjects
export NEXT_ROOT=/opt/webobjects
export URL_PART=apps

The default URL_PART is "cgi-bin". I prefer to use "apps" in my WebObjects URLs.

Install Java 17

sudo apt install openjdk-17-jdk-headless

At time of writing this was build 17.0.8.1+1-Ubuntu-0ubuntu122.04.

Add user and group

sudo groupadd $WEBOBJECTS_GROUP
sudo useradd -m -g $WEBOBJECTS_GROUP -s /bin/bash $WEBOBJECTS_USER
echo -e "export NEXT_ROOT=$NEXT_ROOT" | sudo tee /home/$WEBOBJECTS_USER/.bash_profile

Create directories

sudo mkdir -p /var/log/webobjects
sudo mkdir -p /etc/WebObjects/wotaskd
sudo mkdir -p /etc/WebObjects/JavaMonitor

Create configuration files

echo -e "\
WEBOBJECTS_GROUP=$WEBOBJECTS_GROUP\n\
WEBOBJECTS_USER=$WEBOBJECTS_USER\n\
NEXT_ROOT=$NEXT_ROOT\n\
JAVA_MONITOR_ARGS=\"
-WOPort 56789\"\n\
WEBOBJECTS_URL=\n\
"
| sudo tee /etc/default/webobjects

echo -e "\
er.extensions.WOHostUtilities.localhostips=($SERVER_IP)\n\
WOHost=$SERVER_IP\n\
"
| sudo tee /etc/WebObjects/Properties

echo -e "WOHost=$SERVER_IP" | sudo tee /etc/WebObjects/wotaskd
echo -e "WOHost=$SERVER_IP" | sudo tee /etc/WebObjects/JavaMonitor

Set permissions

sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /var/log/webobjects
sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /etc/WebObjects

Install wotaskd and javamonitor

sudo mkdir -p $NEXT_ROOT/Local/Library/WebObjects/JavaApplications
cd $NEXT_ROOT/Local/Library/WebObjects/JavaApplications

sudo wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/wotaskd.tar.gz
sudo tar zpxf wotaskd.tar.gz
sudo rm wotaskd.tar.gz

sudo wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/JavaMonitor.tar.gz
sudo tar zpxf JavaMonitor.tar.gz
sudo rm JavaMonitor.tar.gz

sudo chown -R $WEBOBJECTS_USER:$WEBOBJECTS_GROUP $NEXT_ROOT/Local
sudo mkdir -p $NEXT_ROOT/bin
cd $NEXT_ROOT/bin
sudo ln -s $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd
sudo ln -s $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor javamonitor

# Fix wotaskd and javamonitor to work with Java 17 if not already
sudo sed -i '2s/= $/= --add-exports=java.base/sun.security.action=ALL-UNNAMED/' $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/Contents/UNIX/UNIXClassPath.txt
sudo sed -i '2s/= $/= --add-exports=java.base/sun.security.action=ALL-UNNAMED/' $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/javamonitor.woa/Contents/UNIX/UNIXClassPath.txt

Create services for wotaskd and javamonitor

echo -e "\
[Unit]\n\
Description=WebObjects/Wonder wotaskd\n\
Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd\n\
AssertPathExists=/var/log/webobjects\n\
AssertPathExists=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa\n\
After=network.target\n\
[Service]\n\
User=$WEBOBJECTS_USER\n\
Group=$WEBOBJECTS_GROUP\n\
Environment=NEXT_ROOT=$NEXT_ROOT\n\
Environment="
JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"\n\
ExecStart=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd -WOPort 1085 -Xms32m -Xmx64m >> /var/log/webobjects/wotaskd.log 2>&1\n\
Restart=on-failure\n\
RestartSec=5\n\
[Install]\n\
WantedBy=multi-user.target\n\
"
 | sudo tee /lib/systemd/system/wotaskd.service

echo -e "\
[Unit]\n\
Description=WebObjects/Wonder JavaMonitor\n\
Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd\n\
AssertPathExists=/var/log/webobjects\n\
AssertPathExists=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa\n\
After=wotaskd.service\n\
[Service]\n\
User=$WEBOBJECTS_USER\n\
Group=$WEBOBJECTS_GROUP\n\
Environment=NEXT_ROOT=$NEXT_ROOT\n\
Environment="
JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"\n\
ExecStart=$NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 -Xms32m -Xmx64m >> /var/log/webobjects/javamonitor.log 2>&1\n\
Restart=on-failure\n\
RestartSec=5\n\
[Install]\n\
WantedBy=multi-user.target\n\
"
 | sudo tee /lib/systemd/system/javamonitor.service

sudo systemctl daemon-reload

sudo systemctl enable wotaskd
sudo systemctl start wotaskd
sudo systemctl status wotaskd

sudo systemctl start javamonitor
sudo systemctl status javamonitor

Install Apache HTTP Server (MPM prefork)

sudo apt install apache2 make apache2-dev
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo a2enmod expires
sudo a2enmod ssl
sudo a2enmod rewrite

# Add ServerName to conf to avoid configtest errors
echo "ServerName $SERVER_NAME" | sudo tee /etc/apache2/conf-available/server-name.conf
sudo a2enconf server-name

# Install WebObjects adaptor
git clone https://github.com/wocommunity/wonder.git
cd wonder/Utilities/Adaptors
sed -i '107s/CGI Apache2.2/Apache2.4/' make.config
sed -i '9s/MACOS/LINUX/' make.config
make
cd Apache2.4
sudo apxs -i -a -n WebObjects mod_WebObjects.la
sudo cp apache.conf /etc/apache2/mods-available/WebObjects.conf
sudo sed -i "7s/^LoadModule/# LoadModule/" /etc/apache2/mods-available/WebObjects.conf
sudo sed -i "15,18s/cgi-bin/$URL_PART/" /etc/apache2/mods-available/WebObjects.conf
sudo sed -i "38s/cgi-bin/$URL_PART/" /etc/apache2/mods-available/WebObjects.conf
sudo a2enmod WebObjects

# Create Apache virtual host
sudo mkdir -p /var/www/$SERVER_NAME
sudo ln -s $NEXT_ROOT/Local/Library/WebServer/Documents/WebObjects /var/www/$SERVER_NAME/WebObjects

echo -e "\
<VirtualHost *:80>\n\
ServerName $SERVER_NAME\n\
DocumentRoot /var/www/$SERVER_NAME\n\
<Directory />\n\
Require all denied\n\
</Directory>\n\
<Directory /var/www/$SERVER_NAME/>\n\
Options Indexes FollowSymLinks MultiViews\n\
AllowOverride None\n\
Require all granted\n\
</Directory>\n\
<IfModule mod_expires.c>\n\
ExpiresActive On\n\
ExpiresByType text/html "access 5 minutes"\n\
</IfModule>\n\
ErrorLog ${APACHE_LOG_DIR}/error_apps_$SERVER_NAME.log\n\
CustomLog ${APACHE_LOG_DIR}/access_apps_$SERVER_NAME.log combined\n\
</VirtualHost>\n\
" | sudo tee /etc/apache2/sites-available/$SERVER_NAME.conf

sudo a2ensite $SERVER_NAME.conf

sudo apachectl configtest
sudo systemctl restart apache2

Troubleshooting

# To test WOAdaptorInfo edit /etc/apache2/mods-available/WebObjects.conf and uncomment
WebObjectsAdminUsername public

#restart apache2
sudo systemctl restart apache2

#check in browser
http://woserver.example.com/apps/WebObjects/WOAdaptorInfo

#to turn on woadaptor logging
touch /tmp/logWebObjects

#might need to mkdir for adaptor logging
mkdir /Library
chown $WEBOBJECTS_USER:$WEBOBJECTS_GROUP /Library