David Ghedini

Linux, Java, Oracle, and PostgreSQL


David Ghedini

Sunday Mar 06, 2011

Install GlassFish 3.1 on CentOS or RHEL

This post will cover installing GlassFish 3.1 on CentOS or RHEL.

We'll also see how to run GlassFish as a service, how to access the Admin Console, and how to run GlassFish under a minimally privileged user.

GlassFish 3.1 is the latest release and is available as GlassFish Server Open Source Edition 3.1 (free) and Oracle GlassFish Server 3.1 (supported and requires paid subscription).

I installed both using the same process below.

The procedure is the same as with 3.0.1 with some minor changes.

If you do not already have the Java Development Kit (JDK) installed on your machine, you will need to download and install the required JDK for your platform.

If you do have the JDK installed, you can skip to: Step 2: Download and Install the GlassFish 3.1 Server:

Step 1: Install the JDK


You can download the JDK here: http://www.oracle.com/technetwork/java/javase/downloads/index.html

I'm using the latest, which is JDK 6, update 24. The JDK is specific to 32 and 64 bit versions.

My CentOS box is 64 bit, so I'll need: jdk-6u24-linux-x64.bin.

If you are on 32 bit, you'll need: jdk-6u24-linux-i586.bin

Download the appropriate JDK and save it to a directory. I'm saving it to /root.

Move (mv) or copy (cp) the file to the /opt directory:

[root@sv2 ~]# mv jdk-6u24-linux-x64.bin /opt/jdk-6u24-linux-x64.bin


Create the directory /usr/java.

[root@sv2 ~]# mkdir /usr/java


Change to the /usr/java directory we created and install the JDK using 'sh /opt/jdk-6u24-linux-x64.bin'

[root@sv2 ~]# cd /usr/java
[root@sv2 java]# sh /opt/jdk-6u24-linux-x64.bin


Set the JAVA_HOME path. This is where we installed the JDK above.

To do this for your current session, you can issue the following:

[root@sv2 java]# JAVA_HOME=/usr/java/jdk1.6.0_24
[root@sv2 java]# export JAVA_HOME
[root@sv2 java]# PATH=$JAVA_HOME/bin:$PATH
[root@sv2 java]# export PATH


To set the JAVA_HOME for users, we add this to the user ~/.bashrc or ~/.bash_profile of the user. We can also add it /etc/profile and then source it to give to all users.

JAVA_HOME=/usr/java/jdk1.6.0_24 
export JAVA_HOME 
PATH=$JAVA_HOME/bin:$PATH 
export PATH


Once you have added the above to ~/.bash_profile or ~/.bashrc, you should log out, then log back in and check that the JAVA_HOME is set correctly.

[root@sv2 ~]#  echo $JAVA_HOME
/usr/java/jdk1.6.0_24


Step 2: Download and Install the GlassFish 3.1 Server:


You can download both the GlassFish Server Open Source Edition 3.1 and Oracle GlassFish Server 3.1 at http://glassfish.java.net/

Once you have downloaded the desired file, move (mv) or copy (cp) the file to /usr/share/glassfish-3.1.zip (or /usr/share/ogs-3.1.zip for Oracle GlassFish).

[root@sv2 ~]# mv glassfish-3.1.zip /usr/share/glassfish-3.1.zip


Change to the /usr/share directory and unzip the file:

[root@sv2 ~]# cd /usr/share
[root@sv2 share]# unzip -q glassfish-3.1.zip


The unzip will create the following directory: /usr/share/glassfish3

Note: Both GlassFish editions will create the same directory when unzipped: glassfish3

Step 3: Running GlassFish as a Service.


To run GlassFish as a service and enable start up at boot, we'll now create a Start/Stop/Restart script.

We'll create the script as /etc/init.d/glassfish, make the script executable, and then add our new glassfish service to chkconfig.

Create our glassfish script:

[root@sv2 ~]# cd /etc/init.d
[root@sv2 init.d]# vi glassfish
#!/bin/bash
# description: Glassfish Start Stop Restart
# processname: glassfish
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_24
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
GLASSFISH_HOME=/usr/share/glassfish3/glassfish

case $1 in
start)
sh $GLASSFISH_HOME/bin/asadmin start-domain domain1
;;
stop)
sh $GLASSFISH_HOME/bin/asadmin stop-domain domain1
;;
restart)
sh $GLASSFISH_HOME/bin/asadmin stop-domain domain1
sh $GLASSFISH_HOME/bin/asadmin start-domain domain1
;;
esac
exit 0


If you do not set the JAVA_HOME and PATH in the GlassFish script, when you attempt to start the GlassFish server it will complain it cannot find Java with the following:

error: /usr/share/glassfish3/glassfish/bin/asadmin: line 19: exec: java: not found

Now, make the script executable and add it to our chkconfig so it starts at boot.

[root@sv2 init.d]# chmod 755 glassfish
[root@sv2 init.d]# chkconfig --add glassfish
[root@sv2 init.d]# chkconfig --level 234 glassfish on


We should now be able to Start, Stop, and Restart GlassFish as a service.

Start GlassFish:

[root@sv2 init.d]# service glassfish start
Waiting for domain1 to start .........
Successfully started the domain : domain1
domain  Location: /usr/share/glassfish3/glassfish/domains/domain1
Log File: /usr/share/glassfish3/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.


Stop GlassFish:

[root@sv2 init.d]# service glassfish stop
Waiting for the domain to stop ....
Command stop-domain executed successfully.


Step 4: Check Homepage.


You should now see the GlassFish default home page at http://youdomain.com:8080 or http://YourIP:8080



If you do not see the home page, check the logs and insure that port 8080 is open and available.

Step 5: Access GlassFish Admin Console.


You should now be able to access the GlassFish Admin Console at:

http://yourdomain.com:4848 or http://yourip:4848



On accessing the GlassFish Admin Console for the first time, you will find that no user name or password is required.

Previous to 3.1, a default password 'adminadmin' was used.

You can set (or change) the admin password within the GlassFish Admin console.

1. Click "Domain" on the tree.

2. Click the Administrator Password tab.

3. Enter and confirm your password and click Save.

4. Note that the "Logout" button now appears at top right.



The first password save will create a file,.asadminpass, in the home directory of the user you are running the service under.

Alternatively, you can set the admin password via the CLI using.

[root@sv2 bin]# $GLASSFISH_HOME/bin/asadmin change-admin-password
Enter admin user name [default: admin]>
Enter admin password>
Enter new admin password>
Enter new admin password again>

Command change-admin-password executed successfully.
[root@sv2 bin]#
Step 6: Running GlassFish with Minimally Privileged (non-root) User.


Since I am installing this on my development machine, I am running GlassFish as root above.

In production, you will want to run GlassFish as a non-root user with minimal privileges.

To do this, we can need to the following.

1. Create the user, glassfish, who will own the files.

Create the new group, glassfish, and add the user glassfish to the group:

[root@sv2 ~]# groupadd glassfish
[root@sv2 ~]# useradd -s /bin/bash -g glassfish glassfish


2. Change ownership of the GlassFish files to the user glassfish we created.

We'll change ownership of the files under /usr/share/glassfish3 from root to the user glassfish we created above:

[root@sv2 ~]# chown -Rf glassfish.glassfish /usr/share/glassfish3/


3. Update our glassfish script.

Finally, we update the glassfish start/stop/restart script we created above so we su to user glassfish:

#!/bin/bash
# description: Glassfish Start Stop Restart
# processname: glassfish
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_24
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
GLASSFISH_HOME=/usr/share/glassfish3/glassfish
GLASSFISH_USER=glassfish

case $1 in
start)
su $GLASSFISH_USER -c "$GLASSFISH_HOME/bin/asadmin start-domain domain1"
;;
stop)
su $GLASSFISH_USER -c "$GLASSFISH_HOME/bin/asadmin stop-domain domain1"
;;
restart)
su $GLASSFISH_USER -c "$GLASSFISH_HOME/bin/asadmin stop-domain domain1"
su $GLASSFISH_USER -c "$GLASSFISH_HOME/bin/asadmin start-domain domain1"
;;
esac
exit 0


Step 7: Running GlassFish on Port 80 as Non-Root User.


To run services below port 1024 as user other than root, you will need to use port forwarding.

You can do this by adding the following to your IP tables:

[root@sv2 ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
[root@sv2 ~]# iptables -t nat -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080


Bookmark and Share



Comments:

I'm from Brazil, The tutorial helped me a lot. Thank you, thank you!

Posted by Leandro on March 14, 2011 at 05:27 PM CDT #

To save the rules of iptables: Type the following: /sbin/service iptables save

Posted by Leandro on March 17, 2011 at 08:30 PM CDT #

Great tutorial! Thank you!

Posted by Austin on July 13, 2011 at 06:27 PM CDT #

this is a great guide to get you started

Posted by larry on July 22, 2011 at 04:48 PM CDT #

Excellent tutorial, thanks!!

Posted by JL Cetina on August 18, 2011 at 03:36 PM CDT #

Any specific reason to choose the Sun version, and not the openjdk or something that is provided by CentOS or RHEL out of the box?

Posted by Maarten on August 29, 2011 at 11:58 AM CDT #

@ Maarten - No, no reason. I've always worked with Sun/Oracle so it's what I'm used to.

Posted by David Ghedini on August 29, 2011 at 01:35 PM CDT #

Many thanks. I will pay this forward =)

Posted by Rick on September 06, 2011 at 07:52 PM CDT #

Hi David,

From v3.1 onwards the remote console cannot be started before user admin has been given a password.

You should modify your description of step 5 accordingly: first setthe password, then run the console.

Thank you very much for this great post!

Cheers,
Thomas

Posted by Thomas Gutzmann on April 23, 2012 at 04:09 PM CDT #

Hi Thomas,

I didn't run into this behavior when I did the install, but that was some time ago.

I'll take a look and, if needed, move the bit about setting the password via the shell to the top of Step 5.

Glad you found the article useful and thank you for pointing out the password issue.

Thanks,
David

Posted by David Ghedini on April 27, 2012 at 05:08 AM CDT #

I found this to work when accessing glassfish from remote server.
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

Posted by Josh on June 22, 2012 at 01:56 PM CDT #

Hi David,

Thank you very much for your post. It was helpful.

I join to post Thomas, when I try launch Admin console, I get a error message.
When I set password for admin, then run the console successfully.
GlassFish Open Source 3.1.2
Best regards,
Mikhail

Posted by Mikhail Horelov on July 13, 2012 at 04:52 AM CDT #

Thanks.
I have successfully installed Glass fish Oracle Application Server.
Thanks again this is very helpful Tutorial.

Posted by Shahid Hussain Abro on August 17, 2012 at 12:25 AM CDT #

Hi David,
some more hints:
- in the chkconfig commands is a typo: it should read "2345" instead of "244" and "2445".
- in CentOS, you can use the default Java installation, but then JAVA_HOME should point to /etc/alternatives/java_sdk_openjdk.
- and finally there is a typo in you last init script: you omitted a slash in line 1: "#!/bin/bash".
More comments can be found here; feel free to incorporate them in your blog:<br /> https://wiki.gutzmann.com/twiki/bin/view/HowTo/GlassFishInstallation
Cheers,
Thomas

Posted by Thomas Gutzmann on October 22, 2012 at 02:58 AM CDT #

Nice article! Really nice one!!
Can you also explain how to integrate Glassfish with Apache ?
there are many articles on net but that are not as clear as your articles , particularly this one?

Posted by ssp on January 10, 2013 at 08:55 PM CST #

Hi Thomas,

Thanks for catching the typos and for the link.

I'm hoping to do an updated post soon.

Thanks,
David

Posted by David Ghedini on January 11, 2013 at 04:31 AM CST #

@ssp,

Glad you found it useful.

For running behind Apache, please see: http://www.davidghedini.com/pg/entry/install_tomcat_7_on_centos

"Step 8 (Optional): Running Tomcat behind Apache" contains some different strategies.

I'll try to update this post soon to include Apache

Thanks, David

Posted by David Ghedini on January 11, 2013 at 04:35 AM CST #

Post a Comment:
  • HTML Syntax: Allowed

Main Menu

Built With

Pages

LinkedIn

Tag Cloud

Hosted by:

Navigation

Visitors

Sponsors

petiole Cloud

Feeds