Wiki source code of Deploying on Linux

Version 285.1 by Maik Musall on 2019/03/27 08:36

Show last authors
1 {{warning}}
2 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.
3
4 Guess what? If you are using Debian or Ubuntu, [[packages>>doc:Installing a deployment environment on Debian or Ubuntu]] are also available for your platform (although not yet for Xenial)!
5 {{/warning}}
6
7 === Install Sun Java JDK ===
8
9 ~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.
10
11 {{warning}}
12 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:
13
14 {{code}}
15 uname -p
16 {{/code}}
17
18 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.
19 {{/warning}}
20
21 Creating symbolic links as follows is useful (alternatively use the 'alternatives' command to manage JVMs):
22
23 {{code}}
24 ln -s /usr/java/jdk1.6.0_27 /usr/java/jdk1.6
25 ln -s /usr/java/jdk1.6/bin/java /usr/bin/java
26
27 {{/code}}
28
29 and you need to change your path in your bash profile (_~~/.bash_profile) to have this path :
30
31 {{code}}
32 PATH=$PATH:/usr/java/jdk1.6/bin:$HOME/bin
33
34 {{/code}}
35
36 === Optional: Install the WebObjects frameworks ===
37
38 {{info}}
39 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.
40 {{/info}}
41
42 2. Get the WebObjects installer from the wocommunity's Web site :
43
44 {{code}}
45 curl -C - -O https://jenkins.wocommunity.org/job/WOInstaller/lastSuccessfulBuild/artifact/Utilities/WOInstall/WOInstaller.jar
46
47 OR
48
49 wget https://jenkins.wocommunity.org/job/WOInstaller/lastSuccessfulBuild/artifact/Utilities/WOInstall/WOInstaller.jar
50
51 {{/code}}
52
53 and install it like this :
54
55 {{code}}
56 sudo /usr/java/latest/bin/java -jar WOInstaller.jar 5.4.3 /opt
57
58 {{/code}}
59
60 WebObjects frameworks are now installed in ///opt//
61
62 {{code}}
63 [root@ ~]# ls -l /opt
64 total 12
65 drwxr-xr-x 3 root root 4096 Nov 9 08:19 Developer
66 drwxr-xr-x 4 root root 4096 Nov 9 08:19 Library
67 drwxr-xr-x 3 root root 4096 Nov 9 08:20 Local
68
69 {{/code}}
70
71 === Creating the //appserver// user and starting wotaskd/JavaMonitor ===
72
73 To follow the conventions from Mac OS X, we will create two users to run wotaskd and Monitor under this user :
74
75 {{code}}
76 sudo groupadd appserveradm
77 sudo useradd -g appserveradm appserver
78
79 {{/code}}
80
81 Edit the bash profile of the appserver
82
83 {{code}}
84 #sudo su - appserver
85 % vi .bash_profile
86
87 {{/code}}
88
89 and add this line :
90
91 {{code}}
92 export NEXT_ROOT=/opt
93
94 {{/code}}
95
96 and run it manually in your current shell :
97
98 {{code}}
99 [appserver@ ~]$ . .bash_profile
100
101 {{/code}}
102
103 3. Next, we need to install the Wonder version **wotaskd** and **JavaMonitor**.
104
105 {{code}}
106 mkdir -p /opt/Local/Library/WebObjects/JavaApplications
107 cd /opt/Local/Library/WebObjects/JavaApplications
108
109 wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/wotaskd.tar.gz
110 tar zpxf wotaskd.tar.gz
111 rm wotaskd.tar.gz
112 wget https://jenkins.wocommunity.org/job/Wonder7/lastSuccessfulBuild/artifact/Root/Roots/JavaMonitor.tar.gz
113 tar zpxf JavaMonitor.tar.gz
114 rm JavaMonitor.tar.gz
115
116 {{/code}}
117
118 4. Now we need to change some permissions:
119
120 {{code}}
121 sudo chown -R appserver:appserveradm /opt/Local
122 sudo chown -R appserver:appserveradm /opt/Library
123
124 {{/code}}
125
126 5. Now we can start wotask and Monitor
127
128 {{code}}
129 [root@ ~]# sudo su - appserver
130
131 {{/code}}
132
133 You can start wotaskd and Monitor to make sure that they run without any problems :
134
135 {{code}}
136 [appserver@ ~]$ $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd &
137 [appserver@ ~]$ $NEXT_ROOT/Local/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 &
138
139 {{/code}}
140
141 === Apache ===
142
143 If your Linux installation don't already have Apache httpd running or installed, you need to install it:
144
145 ===== For Ubuntu distributions : =====
146
147 {{code}}
148 sudo apt-get install apache2 apache2.2-common apache2-mpm-prefork apache2-utils apache2-threaded-dev ssl-cert
149
150 {{/code}}
151
152 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).
153
154 (you will need httpd-devel and gcc)
155
156 ===== For CentOS, RedHat or Fedora distributions : =====
157
158 {{code}}
159 I found on AWS for apache 2.4 I had to change the yum to:
160 yum install httpd24 httpd24-devel
161  
162 yum install httpd mod_ssl httpd-devel
163 chkconfig httpd on
164 /etc/init.d/httpd start
165
166 {{/code}}
167
168 .. default install location is then /etc/httpd
169
170 === HTTP Adaptor ===
171
172 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.
173
174 Once you have downloaded the module, you can install it with:
175
176 {{code}}
177 sudo apxs -i -a -n WebObjects mod_WebObjects.so
178 {{/code}}
179
180 If you can't find a adaptor for your Linux platform, you [[will have to build it>>doc:Compiling the HTTP adaptor on Linux]]
181
182 === Apache Configuration ===
183
184 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 :
185
186 {{code}}
187 Alias /WebObjects "/opt/Local/Library/WebServer/Documents/WebObjects"
188
189 {{/code}}
190
191 and add a directive to allow fetching files in this directory:
192
193 {{code}}
194 <Directory "/opt/Local/Library/WebServer/Documents/WebObjects">
195 AllowOverride All
196 Order allow,deny
197 Allow from all
198 </Directory>
199
200 {{/code}}
201
202 Or (depending on your Apache configuration) you could use a symbolic link.
203
204 You also need, as explained by the adaptor's README file, to add this directive in //httpd.conf// :
205
206 {{code}}
207 <LocationMatch /apps/WebObjects/.*>
208 Order allow,deny
209 Allow from all
210 </LocationMatch>
211
212 {{/code}}
213
214 If you don't add it, you will get 403s (Forbidden) HTTP errors.
215
216 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.
217
218 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):
219
220 {{code}}
221 Include conf/extra/webobjects.conf
222
223 {{/code}}
224
225 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.
226
227 Jerome Chan told me that you can check if the Apache module is loaded by doing this :
228
229 {{code}}
230 /usr/local/apache/bin/apachectl -M
231
232 {{/code}}
233
234 On my installation on OpenSuse 11.1, I had to change the path to the lib64 directory where Apache contains the modules.
235
236 {{code}}
237 LoadModule WebObjects_module /usr/lib64/apache2/mod_WebObjects.so
238
239 {{/code}}
240
241 === Auto Start WOTaskd and WOMonitor ===
242
243 One last thing, you need a init script to start wotaskd and Monitor at boot time.
244
245 ==== Systems using upstart (Ubuntu and maybe others) ====
246
247 If you are running Ubuntu that have support for [[upstart>>url:http://upstart.ubuntu.com/||shape="rect"]], you can grab the two startup scripts for upstart on [[GitHub>>url:https://github.com/wocommunity/wonder/tree/master/Utilities/Linux/StartupScripts/Ubuntu||shape="rect"]]. Grab the two files (womonitor.conf and wotaskd.conf) and copy them in ///etc/init///. Once they are in this directory, run:
248
249 {{code}}
250 sudo service wotaskd start
251 sudo service womonitor start
252 {{/code}}
253
254 {{info}}
255 Don't forget to change the permissions on the startup file so that the owner is root and that everyone have execution rights!
256
257 {{code}}
258 chown root /etc/init/wotaskd.conf
259 chown root /etc/init/womonitor.conf
260 chmod 755 /etc/init/wotaskd.conf
261 chmod 755 /etc/init/womonitor.conf
262
263 {{/code}}
264 {{/info}}
265
266 ==== Systems not using upstart (CentOS, RedHat, Fedora and others) ====
267
268 If you are running a system not capable of running upstart, like CentOS, RedHat or older versions of Ubuntu, you need to use the old-style init.d startup script. Again, 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 in ///etc/init.d///.
269
270 Once the scripts are in ///etc/init.d///, you can start them:
271
272 {{code}}
273 sudo service wotaskd start
274 sudo service womonitor start
275 {{/code}}
276
277 Last step: add the startup scripts under chkconfig control with:
278
279 {{code}}
280 sudo /sbin/chkconfig --add webobjects
281 sudo /sbin/chkconfig webobjects on
282 {{/code}}
283
284 If you are using Ubuntu or Debian without upstart support, you need to use //update-rc.d// instead of //chkconfig//:
285
286 {{code}}
287 sudo update-rc.d wotaskd defaults 90 20
288 sudo update-rc.d womonitor defaults 90 20
289 {{/code}}
290
291 {{info}}
292 Don't forget to change the permissions on the startup file so that the owner is root and that everyone have execution rights!
293
294 {{code}}
295 chown root /etc/init.d/wotaskd
296 chown root /etc/init.d/womonitor
297 chmod 755 /etc/init.d/wotaskd
298 chmod 755 /etc/init.d/womonitor
299
300 {{/code}}
301 {{/info}}
302
303 (% style="font-weight: bold;" %)
304
305
306 (% style="font-weight: bold;" %)Systems using systemd instead of upstart (like Ubuntu 16.04 LTS)
307
308 Here's a systemd unit to put into {{code language="none"}}/lib/systemd/system/wotaskd.service{{/code}}
309
310 {{code}}
311 # systemd unit for wotaskd to run on Ubuntu 16.04 LTS
312 # Maik Musall <maik@selbstdenker.ag>, Aug 2016
313 [Unit]
314 Description=WebObjects/Wonder wotaskd
315 Documentation=https://wiki.wocommunity.org/display/documentation/Wonder+JavaMonitor+and+wotaskd
316 AssertPathExists=/var/log/webobjects
317 AssertPathExists=/opt/Local/Library/WebObjects/JavaApplications/wotaskd.woa
318 [Service]
319 User=appserver
320 Group=appserveradm
321 Environment=NEXT_ROOT=/opt
322 Environment="JVM_OPTIONS=-Xms32m -Xmx64m -XX:NewSize=2m"
323 Environment=WOTASKD_LOG=/var/log/webobjects/wotaskd.log
324 ExecStart=/opt/Local/Library/WebObjects/JavaApplications/wotaskd.woa/wotaskd -WOPort 1085 -Xms32m -Xmx64m >> $WOTASKD_LOG 2>&1
325 Restart=on-failure
326 RestartSec=5
327 [Install]
328 WantedBy=multi-user.target
329 {{/code}}
330
331 Start it with {{code language="none"}}systemctl start wotaskd.service{{/code}}
332
333 Start it at runtime by doing {{code language="none"}}systemctl enable wotaskd.service{{/code}}
334
335 == Problems with Application Responding to WOMonitor/WOTaskd ==
336
337 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):
338
339 {{code}}
340 /etc/WebObjects/Properties
341
342 {{/code}}
343
344 And inside that file, add an array property that defines all the IP addresses assigned to your host, for example:
345
346 {{code}}
347 er.extensions.WOHostUtilities.localhostips=(192.168.3.168,192.168.1.168)
348
349 {{/code}}
350
351 {{info}}
352 To learn more, see the class named WOHostUtilities in ERExtensions framework
353 {{/info}}
354
355 == SELinux ==
356
357 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:
358
359 {{code}}
360 sudo setsebool -P httpd_can_network_connect=1
361
362 {{/code}}
363
364 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.
365
366 {{warning}}
367 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"]]
368 {{/warning}}
369
370 == Additional Resources ==
371
372 [[Jonathon Rentzsch WOPlat Project 'WOInstaller + Wonder Web Server Adaptor + OS Support Files'>>url:http://github.com/rentzsch/woplat||shape="rect"]]
373 [[http:~~/~~/vmadmin.nt.com.au/?p=47>>url:http://vmadmin.nt.com.au/?p=47||shape="rect"]]
374 [[http:~~/~~/www.watermarkstudios.com/blog/?p=48>>url:http://www.watermarkstudios.com/blog/?p=48||shape="rect"]]