Wiki source code of Deploying on Linux

Version 287.1 by Ray Kiddy on 2021/04/21 21:44

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