Wiki source code of Deploying on Linux

Version 289.1 by Ray Kiddy on 2022/02/11 21:35

Show last authors
1 (% class="auto-cursor-target" %)
2 \\
3
4 {{warning}}
5 If you are using RedHat Enterprise Linux, CentOS or Amazon Linux, stop right there! We now have RPM packages for CentOS and RedHat 5.x/6.x, and Amazon Linux. [[Read the following instructions>>doc:Installing a deployment environment on RedHat, CentOS or Amazon Linux]] instead of this document.
6
7 Guess what? If you are using Debian or Ubuntu, [[packages>>doc:Installing a deployment environment on Debian or Ubuntu releases from 2008 to 2016]] are also available for your platform (although not yet for Xenial)!
8 {{/warning}}
9
10 === Install Sun Java JDK ===
11
12 ~1. You should install a [[Sun/Oracle Java SDK>>url:http://www.oracle.com/technetwork/java/javase/downloads/index.html||shape="rect"]]. Use Oracle's [[installation instructions>>url:http://www.oracle.com/technetwork/java/javase/index-137561.html#linux||shape="rect"]]. Choose the appropriate 32-bit or 64-bit Linux installer, for example jdk-6u27-linux-x64-rpm.bin, and install it.
13
14 {{warning}}
15 Make sure to install the correct "bit" version for the OS, e.g. install 64 bit JVM on a 64 bit installation, and a 32 bit JVM on a 32 bit installation! To find that information, do:
16
17 {{code}}
18 uname -p
19 {{/code}}
20
21 If the response is //x86_64//, it's a 64 bit system. If the response is //i386// or //i686//, it's a 32 bit system.
22 {{/warning}}
23
24 Creating symbolic links as follows is useful (alternatively use the 'alternatives' command to manage JVMs):
25
26 {{code}}
27 ln -s /usr/java/jdk1.6.0_27 /usr/java/jdk1.6
28 ln -s /usr/java/jdk1.6/bin/java /usr/bin/java
29 {{/code}}
30
31 and you need to change your path in your bash profile (_~~/.bash_profile) to have this path :
32
33 {{code}}
34 PATH=$PATH:/usr/java/jdk1.6/bin:$HOME/bin
35 {{/code}}
36
37 === Install the WebObjects frameworks (Optional) ===
38
39 {{info}}
40 If you embed the frameworks into your applications, you don't need to install the core frameworks on the deployment system. Install them only if your applications don't have the frameworks inside their bundles.
41 {{/info}}
42
43 2. Get the WebObjects installer from the wocommunity's Web site :
44
45 {{code}}
46 curl -C - -O https://jenkins.wocommunity.org/job/WOInstaller/lastSuccessfulBuild/artifact/Utilities/WOInstall/WOInstaller.jar
47
48 OR
49
50 wget https://jenkins.wocommunity.org/job/WOInstaller/lastSuccessfulBuild/artifact/Utilities/WOInstall/WOInstaller.jar
51 {{/code}}
52
53 and install it like this :
54
55
56 [[https:~~/~~/download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/061-4634.20080915.3ijd0/WebObjects543.dmg>>url:https://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/Mac_OS_X/downloads/061-4634.20080915.3ijd0/WebObjects543.dmg||shape="rect"]]\\
57
58 {{{ wget sudo java -jar WOInstaller.jar dev54 /opt}}}
59
60 You may see an error as the command above finishes, but WO may still be installed.
61
62 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.
63
64 \\
65
66
67 \\///opt
68 \\//
69
70 {{{ sudo /usr/java/latest/bin/java -jar WOInstaller.jar 5.4.3 /optWebObjects frameworks are now installed in }}}
71
72 {{code}}
73 [root@ ~]# ls -l /opt
74 total 12
75 drwxr-xr-x 3 root root 4096 Nov 9 08:19 Developer
76 drwxr-xr-x 4 root root 4096 Nov 9 08:19 Library
77 drwxr-xr-x 3 root root 4096 Nov 9 08:20 Local
78 {{/code}}
79
80 === Creating the //appserver// user and starting wotaskd/JavaMonitor ===
81
82 To follow the conventions from Mac OS X, we will create two users to run wotaskd and Monitor under this user :
83
84 {{code}}
85 sudo groupadd appserveradm
86 sudo useradd -g appserveradm appserver
87 {{/code}}
88
89 Edit the bash profile of the appserver
90
91 {{code}}
92 # sudo su - appserver
93 % vi .bash_profile
94 {{/code}}
95
96 and add this line :
97
98 {{code}}
99 export NEXT_ROOT=/opt
100 {{/code}}
101
102 and run it manually in your current shell :
103
104 {{code}}
105 [appserver@ ~]$ . .bash_profile
106 {{/code}}
107
108 3. Next, we need to install the Wonder version **wotaskd** and **JavaMonitor**.
109
110 {{code}}
111 $ mkdir -p /opt/Local/Library/WebObjects/JavaApplications
112 $ cd /opt/Local/Library/WebObjects/JavaApplications
113 $ wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/wotaskd.tar.gz
114 $ tar zpxf wotaskd.tar.gz
115 $ rm wotaskd.tar.gz
116 $ wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/JavaMonitor.tar.gz
117 $ tar zpxf JavaMonitor.tar.gz
118 $ rm JavaMonitor.tar.gz
119 {{/code}}
120
121 4. Now we need to change some permissions:
122
123 {{code}}
124 sudo chown -R appserver:appserveradm /opt/Local
125 sudo chown -R appserver:appserveradm /opt/Library
126 {{/code}}
127
128 5. Now we can start wotask and Monitor
129
130 {{code}}
131 [root@ ~]# sudo su - appserver
132 {{/code}}
133
134 You can start wotaskd and Monitor, manually, to make sure that they run without any problems :
135
136 {{code}}
137 [appserver@ ~]$ $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd &
138 [appserver@ ~]$ $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 &
139 {{/code}}
140
141 === Apache ===
142
143 //(Should info on properly installing and configuring Apache be its own page? Is it its own page somewhere else already? -rrk)//
144
145 If your Linux installation don't already have Apache httpd running or installed, you need to install it:
146
147 For Ubuntu distributions :
148
149 {{code}}
150 sudo apt-get install apache2 apache2.2-common apache2-mpm-prefork apache2-utils apache2-threaded-dev ssl-cert
151 {{/code}}
152
153 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).
154
155 (you will need httpd-devel and gcc)
156
157 For CentOS, RedHat or Fedora distributions :
158
159 {{code}}
160 I found on AWS for apache 2.4 I had to change the yum to: yum install httpd24 httpd24-devel   yum install httpd mod_ssl httpd-devel chkconfig httpd on /etc/init.d/httpd start
161 {{/code}}
162
163 .. default install location is then /etc/httpd
164
165 === HTTP Adaptor ===
166
167 First, check if a pre-built module already exists at [[wocommunity.org>>url:http://wocommunity.org/documents/tools/mod_WebObjects/||shape="rect"]]. If you are running CentOS 6.x, you can use the module for CentOS 5.5, it works fine.
168
169 Once you have downloaded the module, you can install it with:
170
171 {{code}}
172 sudo apxs -i -a -n WebObjects mod_WebObjects.so
173 {{/code}}
174
175 If you can't find a adaptor for your Linux platform, you [[will have to build it>>doc:Compiling the HTTP adaptor on Linux]]
176
177 === Apache Configuration ===
178
179 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 :
180
181 {{code}}
182 Alias /WebObjects "/opt/Local/Library/WebServer/Documents/WebObjects"
183 {{/code}}
184
185 and add a directive to allow fetching files in this directory:
186
187 {{code}}
188 <Directory "/opt/Local/Library/WebServer/Documents/WebObjects"> AllowOverride All Order allow,deny Allow from all </Directory>
189 {{/code}}
190
191 Or (depending on your Apache configuration) you could use a symbolic link.
192
193 You also need, as explained by the adaptor's README file, to add this directive in //httpd.conf// :
194
195 {{code}}
196 <LocationMatch /apps/WebObjects/.*> Order allow,deny Allow from all </LocationMatch>
197 {{/code}}
198
199 If you don't add it, you will get 403s (Forbidden) HTTP errors.
200
201 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.
202
203 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):
204
205 {{code}}
206 Include conf/extra/webobjects.conf
207 {{/code}}
208
209 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.
210
211 Jerome Chan told me that you can check if the Apache module is loaded by doing this :
212
213 {{code}}
214 /usr/local/apache/bin/apachectl -M
215 {{/code}}
216
217 On my installation on OpenSuse 11.1, I had to change the path to the lib64 directory where Apache contains the modules.
218
219 {{code}}
220 LoadModule WebObjects_module /usr/lib64/apache2/mod_WebObjects.so
221 {{/code}}
222
223 === Auto Start WOTaskd and WOMonitor ===
224
225 One last thing, you need a init script to start wotaskd and Monitor at boot time.
226
227 The scripts are [[available>>url:https://github.com/wocommunity/wonder/tree/integration/Utilities/Linux/StartupScripts/RedHat||shape="rect"]] on GitHub. Grab the two files (//womonitor// and //wotaskd//) and copy them into the proper directory.
228
229 You will be able to see where the services files should go by searching for others.
230
231 {{code}}
232 find /etc /lib -name \*.service
233 {{/code}}
234
235 Once a wotaskd.service and womonitor.servcie file are in the proper location, you can start them:
236
237 {{code}}
238 sudo service start wotaskd
239 sudo service start womonitor
240 {{/code}}
241
242 (% class="auto-cursor-target" %)
243 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.
244
245 (% class="auto-cursor-target" %)
246 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.
247
248 (% class="auto-cursor-target" %)
249 Enabling the services will ensure that the services restart after a reboot.
250
251 {{code}}
252 sudo service enable wotaskd
253 sudo service enable womonitor
254 {{/code}}
255
256 \\
257
258 Here's a systemd unit to put into {{code language="none"}}/lib/systemd/system/wotaskd.service{{/code}}
259
260 {{code}}
261 # systemd unit for wotaskd to run on Ubuntu 16.04 LTS
262 # Maik Musall <maik@selbstdenker.ag>, Aug 2016 [Unit]
263 Description=WebObjects/Wonder wotaskd
264 Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd
265 AssertPathExists=/var/log/webobjects
266 AssertPathExists=/opt/Local/Library/WebObjects/JavaApplications/wotaskd.woa
267 [Service]
268 User=appserver
269 Group=appserveradm
270 Environment=NEXT_ROOT=/opt
271 Environment="JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"
272 Environment=WOTASKD_LOG=/var/log/webobjects/wotaskd.log
273 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
274 {{/code}}
275
276 \\
277
278 === Problems with Application Responding to WOMonitor/WOTaskd ===
279
280 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):
281
282 {{code}}
283 /etc/WebObjects/Properties
284 {{/code}}
285
286 And inside that file, add an array property that defines all the IP addresses assigned to your host, for example:
287
288 {{code}}
289 er.extensions.WOHostUtilities.localhostips=(192.168.3.168,192.168.1.168)
290 {{/code}}
291
292 (% class="auto-cursor-target" %)
293 \\
294
295 {{info}}
296 To learn more, see the class named WOHostUtilities in ERExtensions framework
297 {{/info}}
298
299 SELinux
300
301 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:
302
303 {{code}}
304 sudo setsebool -P httpd_can_network_connect=1
305 {{/code}}
306
307 Alternatively, [[Steven Klassen>>url:http://www.mrxinu.com/||shape="rect"]] has written a blog post ([[Custom SELinux Port Access>>url:http://www.mrxinu.com/2013/06/07/custom-selinux-port-access/||shape="rect"]]) that outlines how to create and install a wotaskd SELinux module that specifically allows connections to port 1085.
308
309 {{warning}}
310 Be aware that SELinux is enabled by default on CentOS 6.x, you will need to either call the //setsebool// command or to [[disable SELinux>>url:http://www.how2centos.com/disable-selinux-centos-6/||shape="rect"]]
311 {{/warning}}
312
313 Additional Resources
314
315 [[Jonathon Rentzsch WOPlat Project 'WOInstaller + Wonder Web Server Adaptor + OS Support Files'>>url:http://github.com/rentzsch/woplat||shape="rect"]]
316 [[http:~~/~~/vmadmin.nt.com.au/?p=47>>url:http://vmadmin.nt.com.au/?p=47||shape="rect"]]
317 [[http:~~/~~/www.watermarkstudios.com/blog/?p=48>>url:http://www.watermarkstudios.com/blog/?p=48||shape="rect"]]