Sorry Paul but I didn't get it. Should I use the above line once I set the
environment JAVA_HOME
Remember, if sudo gets dropped into the mix:
"Defaults env_reset"
is part of the standard entry in visudo. You can specify to keep certain
environment variables if you need to by adding this to an appropriate place:
"Defaults env_keep += JAVA_HOME"
Paul
On 5/12/2013 5:51 AM, Sascha Bates wrote:
Let's deal with getting your stuff working first, then we can worry about
making it pretty with chef.
I am guessing this is your problem:
export JAVA_HOME=/home/ubuntu/jdk1.6.0_45
sudo /home/ubuntu/scripts/apps_stop.sh > /home/ubuntu/scripts/stop.txt
You are exporting your JAVA home as the ubuntu user and then running the
script as root.
Look: As the vagrant user I export my JAVA_HOME and I can see it in my
environment variables, but if I then check with sudo, it's not there.
vagrant@saschabX-vagrant:~$ env|grep JAVA
vagrant@saschabX-vagrant:~$ export JAVA_HOME=/opt/java/myjava
vagrant@saschabX-vagrant:~$ env|grep JAVA
JAVA_HOME=/opt/java/myjava <<<<--------------
vagrant@saschabX-vagrant:~$ sudo env|grep JAVA
vagrant@saschabX-vagrant:~$
Chandan Maheshwari wrote:
Hi Sascha,
Thanks for the great elaboration, but I still needs some clarification,
So Sorry for this.
The execute block will start your process as that user, but I'm not
positive that it will source the user environment files. You are much
better off putting the JAVA_HOME, etc into your custom script.
I have exported JAVA_HOME, etc in the script I am running.
(where I am extracting war and then starting the tomcat). Is this what you
asked me to do.
If you are going to make your script the authority, don't depend on Chef
to do half the work, but ensure your script sources the files you need or
contains the environment variables it requires
OR
You might consider reconstructing your script into a chef recipe/def that
will 1) download a remote file, 2) stop the tomcat app 3) deploy the file
4) start the tomcat app
That is exactly what I need and am doing the same,
through my default recipe I am running a script.sh(which I have downloaded
from remote location) Inside this script basically I am extracting the war
and then starting the tomcat, I have also exported the variables in this
script. Here is the snippet:
execute "redeploy_apps" do
cwd "#{extract_path_scripts}"
user "ubuntu"
#environment 'JAVA_HOME' => "#{extract_path_java}/jdk1.6.0_45"
command "sh #{extract_path_scripts}/#{redeploy_apps_script}"
end
NOTE I tried with root user also.
In the redeploy_apps_script I have :
export JAVA_HOME=/home/ubuntu/jdk1.6.0_45
sudo /home/ubuntu/scripts/apps_stop.sh > /home/ubuntu/scripts/stop.txt
echo "Stopping APP Please Wait"
sleep 30
rm -rf /home/ubuntu/tomcat/logs/*
rm -rf /home/ubuntu/tomcat/work/*
rm -rf /home/ubuntu/tomcat/webapps/apps
mkdir /home/ubuntu/tomcat/webapps/apps
rm -rf /home/ubuntu/tomcat/webapps/static
mkdir /home/ubuntu/tomcat/webapps/static
cd /home/ubuntu/tomcat/webapps/apps
echo "Extracting War"
/home/ubuntu/jdk1.6.0_45/bin/jar -xf /home/ubuntu/war/apps.war
cd /home/ubuntu/tomcat/webapps/static
/home/ubuntu/jdk1.6.0_45/bin/jar -xf /home/ubuntu/war/apps.war
*sudo /home/ubuntu/scripts/apps_start.sh > /home/ubuntu/scripts/start.sh
*
Except the lines in bold everything works.
You might consider reconstructing your script into a chef recipe/def that
will 1) download a remote file, 2) stop the tomcat app 3)
deploy the file 4) start the tomcat app
Would appreciate a lot if you can help me in this.
Here is an example of the pattern I'm talking about:
deploy_tomcat_app.rb · GitHub
As I dont have that much experience so may be I
don't find where and how the service will start from this. [Just to make a
note here I an not downloading/installing tomcat using the community
"tomcat cookbook". In my recipe I am downloading the tar of tomcat and
extracting it.
Sorry If the above queries are too basic, please bare it.
On Sun, May 12, 2013 at 7:15 PM, Sascha Bates sascha.bates@gmail.comwrote:
The execute block will start your process as that user, but I'm not
positive that it will source the user environment files. You are much
better off putting the JAVA_HOME, etc into your custom script.
I'd put it like this:
If you are going to make your script the authority, don't depend on Chef
to do half the work, but ensure your script sources the files you need or
contains the environment variables it requires
OR
You might consider reconstructing your script into a chef recipe/def that
will 1) download a remote file, 2) stop the tomcat app 3) deploy the file
4) start the tomcat app
In this fashion, you can set up tomcat as a service and trigger service
start stops from Chef.
Many of us in the community have wrestled with Java apps and would be
happy to help you refactor your recipe into something that takes better
advantage of Chef's primitives.
tl;dr discussion about tomcat deploy strategies:
Here is an example of the pattern I'm talking about:
deploy_tomcat_app.rb · GitHub
This is a link to a definition I threw together for deploying Tomcat apps
in a dev env from Artifactory. Note that this is not a production-ready
pattern. It just runs, notices if there's a new war to deploy and then
stops the service, deletes the old war, and notifies the "deploy" to run
which basically copies in the new war and restarts the service.
The important part of this to look at is notifications to stop, delete
and deploy. That pattern is really what you're looking to manage with Chef
or your deploy script.
You can also manage your war file manipulations with tools like Bryan
Berry's Ark resource (http://community.opscode.com/cookbooks/ark) or the
Riot Games Artifact cookbook (
GitHub - RiotGamesCookbooks/artifact-cookbook: Provides your cookbooks with the Artifact Deploy LWRP) if you have complex
needs. I can also elaborate on why I wrote some separate code instead of
re-using community code in a separate email if anyone wants.
Bryan has also written a library for managing JVM Args:
GitHub - bryanwb/jvmargs: sane parser of java command-line arguments
I hope some of this helps and doesn't further confuse.
Sascha
Morgan Blackthorne wrote:
I would log in as the user and check to make sure that those values are
set. Also, if it's in .bashrc and startup.sh is using /bin/sh, then they
likely won't get loaded-- you might need to move it to something like
.profile (I forget exactly what startup file(s) sh loads but I believe
.bashrc / .bash_profile isn't included).
--
~~ StormeRider ~~
"Every world needs its heroes [...] They inspire us to be better than we
are. And they protect from the darkness that's just around the corner."
(from Smallville Season 6x1: "Zod")
On why I hate the phrase "that's so lame"... http://bit.ly/Ps3uSS
On Sun, May 12, 2013 at 4:43 AM, Chandan Maheshwari <
cmaheshwari16@gmail.com> wrote:
Thanks Morgan,
I am afraid, but it doesn't give any error. The chef-client runs
successfully and creates node and client onto my chef-server. Any other
location where I can check logs after logging into the newly created
instance.
Also there are no logs for tomcat also.
I did some troubleshooting initially to redirect output of command
..../tomcat/bin/startup.sh in a .txt file and saw that it says:
"Neither JAVA_HOME nor JRE_HOME is set, need at least one to set" But
now I am setting those in ~/.bashrc file also.
Can you guide me what other trouble shooting I can do.
On Sun, May 12, 2013 at 5:00 PM, Morgan Blackthorne <
stormerider@gmail.com> wrote:
Specifying what error it runs I to will probably help folks help you.
It's standard troubleshooting question number one: what happens when you
try?
On Sunday, May 12, 2013, Chandan Maheshwari wrote:
To be more specific, here is what all I have tried:
I have my cookbook: where in my recipe, I am downloading
tomcat.tar (this I have placed somewhere in my other machine). After
downloading I extract the same tomcat.tar (suppose in location
/home/ubuntu/tomcat). Now I am simply trying to start tomcat. I tried the
below mentioned ways, but is not able to start/stop.
- Modified the ~/.bashrc file from my recipe to export JAVA_HOME,
CATALINA_HOME,
What I did is:
In a recipe inside bash script simply added the environment variables
at the end of ~/.bashrc and then ran source ~/.bashrc [ this works I can
verify from ~/.bashrc file)
Now using "execute" resource, ran
"/home/ubuntu/tomcat/bin/startup.sh" BUT IT DO NOT START.
- Modified the ~/.bashrc file from my recipe to export JAVA_HOME,
CATALINA_HOME,
What I did is:
ran a bash script inside recipe to simply add the environment
variables at the end of ~/.bashrc and then ran source ~/.bashrc
Inside bash script resource, ran "/home/ubuntu/tomcat/bin/startup.sh"
BUT IT DO NOT START.
-
Wrote a shell script and kept at the same location from where I am
downloading tomcat.tar, downloaded the run_tomcat.sh on to the chef-client
(using resource remote_file) and then using the "execute" resource running
the run_tomcat.sh.
Inside this run_tomcat.sh, I am exporting the environment variables
and then running the "/home/ubuntu/tomcat/bin/startup.sh"
BUT IT DO NOT START.
-
Wrote a shell script and kept at the same location from where I am
downloading tomcat.tar, downloaded the run_tomcat.sh on to the chef-client
(using resource remote_file). Set environment variables using "environment
resource" and run script using "execute" resource.
Inside this run_tomcat.sh, running the
"/home/ubuntu/tomcat/bin/startup.sh"
*BUT IT DO NOT START.
For point 3 and 4 above the strange thing is that other commands
inside run_tomcat.sh, like extracting war, deleting some directory from the
extracted war executes. BUT TOMCAT DOESN'T START UP.
I tried couple of other things also, but is not able to start or
stop the tomcat.
On Fri, May 10, 2013 at 11:00 PM, Chandan Maheshwari <
cmaheshwari16@gmail.com> wrote:
Hi All,
This may be a stupid or a silly question. But I am finding issues in
getting it done.
Basically I have wrote a cookbook, where I am simply downloading a
tar file of tomcat with other stuff related to my app from some location.
Then I am using some resources to untar it to define a specific
folder structure onto my new instance created using knife ec2 plugin. (to
be specific ubuntu)
Now I have one shell script which basically stops the tomcat,
extracts my application war in particular location, removes some unwanted
files from the extracted war and then starts the tomcat back.
I am executing this script using "execute" and in command passing
the full path of the script. The script does everything (extracts my
application war in particular location, removes some unwanted files from
the extracted war), but it do not stops the tomcat and then starts it back.
The chef-client runs successfully.
Now when I login to the newly created instance, I can't see any
tomcat logs. Moreover when I run the shell script manually (which I ran
with cookbook also), it does everything and I can hit the URL to access my
app.
Any help is greatly appreciated.
I don't want to use the existing tomcat cookbook, as I want to try
it from my location(where I have kept the tomcat.tar) also I want to use
tomcat7.
--
Thanks and Regards,
Chandan
--
Regards,
Chandan
--
~~ StormeRider ~~
"Every world needs its heroes [...] They inspire us to be better than
we are. And they protect from the darkness that's just around the corner."
(from Smallville Season 6x1: "Zod")
On why I hate the phrase "that's so lame"... http://bit.ly/Ps3uSS
--
Regards,
Chandan
--
Regards,
Chandan