From d75c77a8a4c47f443712c69f748973937f57c301 Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 14:04:07 -0300 Subject: [PATCH 1/7] prepend location to generated script so chmod works --- lib/foreman/export/initscript.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foreman/export/initscript.rb b/lib/foreman/export/initscript.rb index 6006b79..372edc4 100644 --- a/lib/foreman/export/initscript.rb +++ b/lib/foreman/export/initscript.rb @@ -24,7 +24,7 @@ def export path = File.read(matchers.detect { |m| File.exists?(m) }) compiled = ERB.new(path).result(binding) write_file "#{app}", compiled - FileUtils.chmod(755, "#{app}") + FileUtils.chmod(755, "#{File.join location, app}") # path = export_template name # write_template "initscript/master.erb", "#{app}", binding end From b0e456101086c8503d5995bde60a65d08220806b Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 14:05:21 -0300 Subject: [PATCH 2/7] change gem version --- foreman-export-initscript.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foreman-export-initscript.gemspec b/foreman-export-initscript.gemspec index 2f84532..69f5d26 100644 --- a/foreman-export-initscript.gemspec +++ b/foreman-export-initscript.gemspec @@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__) Gem::Specification.new do |s| s.name = "foreman-export-initscript" - s.version = "0.0.1" + s.version = "0.0.2" s.authors = ["Emile Cantin"] s.email = ["emile.cantin@gmail.com"] s.homepage = "" From 3017a43df2264b6830ba7dbb8de24ee7b0263aeb Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 14:23:51 -0300 Subject: [PATCH 3/7] chmod expects octal value --- lib/foreman/export/initscript.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/foreman/export/initscript.rb b/lib/foreman/export/initscript.rb index 372edc4..e58c8fa 100644 --- a/lib/foreman/export/initscript.rb +++ b/lib/foreman/export/initscript.rb @@ -24,7 +24,7 @@ def export path = File.read(matchers.detect { |m| File.exists?(m) }) compiled = ERB.new(path).result(binding) write_file "#{app}", compiled - FileUtils.chmod(755, "#{File.join location, app}") + FileUtils.chmod(0755, "#{File.join location, app}") # path = export_template name # write_template "initscript/master.erb", "#{app}", binding end From 3278e42840c3585939a7fac0017466342fc75925 Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 14:42:50 -0300 Subject: [PATCH 4/7] Use export#super so every configuration is updated by base class when -r parameter is set --- data/export/initscript/master.erb | 2 +- lib/foreman/export/initscript.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data/export/initscript/master.erb b/data/export/initscript/master.erb index bde3963..b8534c9 100644 --- a/data/export/initscript/master.erb +++ b/data/export/initscript/master.erb @@ -18,7 +18,7 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Runs <%= app %>" NAME=<%= app %> -PIDDIR=/var/run/$NAME +PIDDIR=<%= run %>/pid/$NAME SCRIPTNAME=/etc/init.d/$NAME USERNAME=<%= user %> diff --git a/lib/foreman/export/initscript.rb b/lib/foreman/export/initscript.rb index e58c8fa..56d866a 100644 --- a/lib/foreman/export/initscript.rb +++ b/lib/foreman/export/initscript.rb @@ -5,10 +5,10 @@ class Foreman::Export::Initscript < Foreman::Export::Base def export - #super - error("Must specify a location") unless location - FileUtils.mkdir_p(location) rescue error("Could not create: #{location}") - FileUtils.mkdir_p(log) rescue error("Could not create: #{log}") + super +# error("Must specify a location") unless location +# FileUtils.mkdir_p(location) rescue error("Could not create: #{location}") +# FileUtils.mkdir_p(log) rescue error("Could not create: #{log}") # begin # FileUtils.chown(user, nil, log) # rescue Exception => e From 4f1c3af1f0914c66d66052861ae278ec9c69286a Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 15:04:12 -0300 Subject: [PATCH 5/7] update script to allow run from normal users --- data/export/initscript/master.erb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/data/export/initscript/master.erb b/data/export/initscript/master.erb index b8534c9..c285142 100644 --- a/data/export/initscript/master.erb +++ b/data/export/initscript/master.erb @@ -48,8 +48,14 @@ do_start() # START CONCURRENT: <%= num %> # Start: <%= app %>.<%= name %>.<%= num %> # Create $PIDDIR/<%= name %>.<%= num %>.pid - su - $USERNAME -c 'cd <%= engine.root %>; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $!' > $PIDDIR/<%= name %>.<%= num %>.pid - <% end %> + if [ "$UID" -eq 0 ]; then + su - $USERNAME -c 'cd <%= engine.root %>; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $!' > $PIDDIR/<%= name %>.<%= num %>.pid + chown $USERNAME $PIDDIR/<%= name %>.<%= num %>.pid + chown $USERNAME <%= log %>/<%=name%>-<%=num%>.log + else + cd <%= engine.root %>; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $! > $PIDDIR/<%= name %>.<%= num %>.pid + fi + <% end %> <% end %> } From c7fd81d2b7deb403f851d4bde4d08a9f5652174b Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 12 Sep 2013 16:16:19 -0300 Subject: [PATCH 6/7] fix chown problem when su is used --- data/export/initscript/master.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/export/initscript/master.erb b/data/export/initscript/master.erb index c285142..b63ff53 100644 --- a/data/export/initscript/master.erb +++ b/data/export/initscript/master.erb @@ -50,8 +50,8 @@ do_start() # Create $PIDDIR/<%= name %>.<%= num %>.pid if [ "$UID" -eq 0 ]; then su - $USERNAME -c 'cd <%= engine.root %>; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $!' > $PIDDIR/<%= name %>.<%= num %>.pid - chown $USERNAME $PIDDIR/<%= name %>.<%= num %>.pid - chown $USERNAME <%= log %>/<%=name%>-<%=num%>.log + chown -R $USERNAME $PIDDIR + chown -R $USERNAME <%= log %> else cd <%= engine.root %>; export PORT=<%= engine.port_for(process, num) %>;<% engine.environment.each_pair do |var,env| %> export <%= var.upcase %>=<%= env %>; <% end %> <%= process.command %> >> <%= log %>/<%=name%>-<%=num%>.log 2>&1 & echo $! > $PIDDIR/<%= name %>.<%= num %>.pid fi From 64e9d22d60c59d8a3413e0555073ad33f98904dc Mon Sep 17 00:00:00 2001 From: Christian Rodriguez Date: Thu, 26 Sep 2013 13:45:08 -0300 Subject: [PATCH 7/7] use bash instead of sh --- data/export/initscript/master.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/export/initscript/master.erb b/data/export/initscript/master.erb index b63ff53..5d46499 100644 --- a/data/export/initscript/master.erb +++ b/data/export/initscript/master.erb @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash ### BEGIN INIT INFO # Provides: <%= app %> # Required-Start: $remote_fs $syslog