Fixes APLO-332: Apollo not starting with cygwin under windows7 The Apollo unix distro now does the right thing when run in cygwin.
Project: http://git-wip-us.apache.org/repos/asf/activemq-apollo/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-apollo/commit/a325f0fb Tree: http://git-wip-us.apache.org/repos/asf/activemq-apollo/tree/a325f0fb Diff: http://git-wip-us.apache.org/repos/asf/activemq-apollo/diff/a325f0fb Branch: refs/heads/trunk Commit: a325f0fbe7a4e28bda6f65c89bdb1e3a05b12e11 Parents: feb2a17 Author: Hiram Chirino <hi...@hiramchirino.com> Authored: Thu Jan 30 15:58:02 2014 -0500 Committer: Hiram Chirino <hi...@hiramchirino.com> Committed: Thu Jan 30 15:58:02 2014 -0500 ---------------------------------------------------------------------- .../activemq/apollo/broker/BrokerCreate.scala | 64 +++++++++++++------- .../activemq/apollo/commands/Create.scala | 4 +- .../src/main/descriptors/common-bin.xml | 21 +++++++ apollo-distro/src/main/descriptors/unix-bin.xml | 14 +---- .../src/main/descriptors/windows-bin.xml | 11 ---- apollo-distro/src/main/release/bin/apollo | 5 +- .../activemq/apollo/web/ApolloApplication.scala | 2 +- 7 files changed, 71 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/BrokerCreate.scala ---------------------------------------------------------------------- diff --git a/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/BrokerCreate.scala b/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/BrokerCreate.scala index 2e57682..a47c621 100644 --- a/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/BrokerCreate.scala +++ b/apollo-broker/src/main/scala/org/apache/activemq/apollo/broker/BrokerCreate.scala @@ -27,8 +27,8 @@ class BrokerCreate { var directory:File = _ var host:String = _ var force = false - var base: String = _ - var home: String = System.getProperty("apollo.home") + var base: File = _ + var home: File = new File(System.getProperty("apollo.home")) var with_ssl = true var encoding = "UTF-8" @@ -53,10 +53,12 @@ class BrokerCreate { val IS_WINDOWS = System.getProperty("os.name").toLowerCase().trim().startsWith("win"); + val IS_CYGWIN = IS_WINDOWS && System.getenv("OSTYPE") == "cygwin"; def run() = { try { + println("Creating apollo instance at: %s".format(directory)) if( host == null ) { @@ -92,7 +94,7 @@ class BrokerCreate { "-dname", "cn=%s".format(host), "-validity", "3650"))==0 if(!rc) { - println("WARNNIG: Could not generate the keystore, make sure the keytool command is in your PATH") + println("WARNING: Could not generate the keystore, make sure the keytool command is in your PATH") } rc } @@ -122,23 +124,25 @@ class BrokerCreate { write("bin/apollo-broker.cmd", bin/"apollo-broker.cmd", true) write("bin/apollo-broker-service.exe", bin/"apollo-broker-service.exe") write("bin/apollo-broker-service.xml", bin/"apollo-broker-service.xml", true) - } else { - write("bin/apollo-broker", bin/"apollo-broker", true) + } + + if( !IS_WINDOWS || IS_CYGWIN ) { + write("bin/apollo-broker", bin/"apollo-broker", true, false, true) setExecutable(bin/"apollo-broker") - write("bin/apollo-broker-service", bin/"apollo-broker-service", true) + write("bin/apollo-broker-service", bin/"apollo-broker-service", true, false, true) setExecutable(bin/"apollo-broker-service") } println("") println("You can now start the broker by executing: ") println("") - println(" \"%s\" run".format((bin/"apollo-broker").getCanonicalPath)) + println(" \"%s\" run".format(cp(bin/"apollo-broker", true))) val service = bin / "apollo-broker-service" println("") - if( !IS_WINDOWS ) { + if( !IS_WINDOWS || IS_CYGWIN ) { // Does it look like we are on a System V init system? if( new File("/etc/init.d/").isDirectory ) { @@ -147,24 +151,26 @@ class BrokerCreate { println("") println(" sudo ln -s \"%s\" /etc/init.d/".format(service.getCanonicalPath)) println(" /etc/init.d/apollo-broker-service start") + println("") } else { println("Or you can run the broker in the background using:") println("") - println(" \"%s\" start".format(service.getCanonicalPath)) - + println(" \"%s\" start".format(cp(service,true))) + println("") } - } else { + } + if ( IS_WINDOWS ) { - println("Or you can setup the broker as system service and run it in the background:") + println("Or you can setup the broker as Windows service and run it in the background:") + println("") + println(" \"%s\" install".format(cp(service,true))) + println(" \"%s\" start".format(cp(service,true))) println("") - println(" \"%s\" install".format(service.getCanonicalPath)) - println(" \"%s\" start".format(service.getCanonicalPath)) } - println("") } @@ -176,7 +182,17 @@ class BrokerCreate { null } - def write(source:String, target:File, filter:Boolean=false, text:Boolean=false) = { + def cp(value:String, unixPaths:Boolean):String = cp(new File(value), unixPaths) + def cp(value:File, unixPaths:Boolean):String = { + if( unixPaths && IS_CYGWIN ) { + import scala.sys.process._ + Seq("cygpath", value.getCanonicalPath).!!.trim + } else { + value.getCanonicalPath + } + } + + def write(source:String, target:File, filter:Boolean=false, text:Boolean=false, unixTarget:Boolean=false) = { if( target.exists && !force ) { error("The file '%s' already exists. Use --force to overwrite.".format(target)) } @@ -194,20 +210,19 @@ class BrokerCreate { def replace(key:String, value:String) = { content = content.replaceAll(Pattern.quote(key), Matcher.quoteReplacement(value)) } - def cp(value:String) = new File(value).getCanonicalPath replace("${user}", System.getProperty("user.name","")) replace("${host}", host) replace("${version}", Broker.version) if( home !=null ) { - replace("${home}", cp(home)) + replace("${home}", cp(home, unixTarget)) } - replace("${base}", directory.getCanonicalPath) - replace("${java.home}", cp(System.getProperty("java.home"))) + replace("${base}", cp(directory, unixTarget)) + replace("${java.home}", cp(System.getProperty("java.home"), unixTarget)) replace("${store_config}", store_config) if( base !=null ) { - replace("${apollo.base}", base) + replace("${apollo.base}", cp(base, unixTarget)) } replace("${broker_security_config}", broker_security_config) @@ -216,7 +231,12 @@ class BrokerCreate { // and then writing out in the new target encoding.. Let's also replace \n with the values // that is correct for the current platform. - val in = new ByteArrayInputStream(content.replaceAll("""\r?\n""", Matcher.quoteReplacement(System.getProperty("line.separator"))).getBytes(encoding)) + var separator = if ( unixTarget && IS_CYGWIN ) { + "\n" + } else { + System.getProperty("line.separator") + } + val in = new ByteArrayInputStream(content.replaceAll("""\r?\n""", Matcher.quoteReplacement(separator)).getBytes(encoding)) using(new FileOutputStream(target)) { out=> copy(in, out) http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-cli/src/main/scala/org/apache/activemq/apollo/commands/Create.scala ---------------------------------------------------------------------- diff --git a/apollo-cli/src/main/scala/org/apache/activemq/apollo/commands/Create.scala b/apollo-cli/src/main/scala/org/apache/activemq/apollo/commands/Create.scala index 02a8d51..64a4e04 100755 --- a/apollo-cli/src/main/scala/org/apache/activemq/apollo/commands/Create.scala +++ b/apollo-cli/src/main/scala/org/apache/activemq/apollo/commands/Create.scala @@ -38,9 +38,9 @@ class Create extends Action { var force = false @option(name = "--home", description = "Directory where apollo is installed") - var home: String = _ + var home: File = _ - @option(name = "--with-ssl", description = "Generate an SSL enabled configuraiton") + @option(name = "--with-ssl", description = "Generate an SSL enabled configuration") var with_ssl = true @option(name = "--encoding", description = "The encoding that text files should use") http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-distro/src/main/descriptors/common-bin.xml ---------------------------------------------------------------------- diff --git a/apollo-distro/src/main/descriptors/common-bin.xml b/apollo-distro/src/main/descriptors/common-bin.xml index 4b0008a..0ca203d 100644 --- a/apollo-distro/src/main/descriptors/common-bin.xml +++ b/apollo-distro/src/main/descriptors/common-bin.xml @@ -117,6 +117,27 @@ </dependencySets> <fileSets> + + <!-- Copy the unix scripts .. chmod 755 and exclude the windows bits--> + <fileSet> + <directory>src/main/release/bin</directory> + <outputDirectory>/bin</outputDirectory> + <lineEnding>unix</lineEnding> + <fileMode>0755</fileMode> + <excludes> + <exclude>*.cmd</exclude> + </excludes> + </fileSet> + + <!-- Copy the windows scripts .. exclude the unix bits--> + <fileSet> + <directory>src/main/release/bin</directory> + <outputDirectory>/bin</outputDirectory> + <lineEnding>dos</lineEnding> + <includes> + <include>*.cmd</include> + </includes> + </fileSet> <!-- copy the website docs --> <fileSet> http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-distro/src/main/descriptors/unix-bin.xml ---------------------------------------------------------------------- diff --git a/apollo-distro/src/main/descriptors/unix-bin.xml b/apollo-distro/src/main/descriptors/unix-bin.xml index 045ed1d..19ec9ba 100755 --- a/apollo-distro/src/main/descriptors/unix-bin.xml +++ b/apollo-distro/src/main/descriptors/unix-bin.xml @@ -33,19 +33,7 @@ </excludes> <lineEnding>unix</lineEnding> </fileSet> - - <!-- Copy the unix scripts .. chmod 755 and exclude the windows bits--> - <fileSet> - <directory>src/main/release/bin</directory> - <outputDirectory>/bin</outputDirectory> - <lineEnding>unix</lineEnding> - <fileMode>0755</fileMode> - <excludes> - <exclude>*.bat</exclude> - <exclude>*.cmd</exclude> - </excludes> - </fileSet> - + <!-- filtered files --> <fileSet> <directory>src/main/release</directory> http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-distro/src/main/descriptors/windows-bin.xml ---------------------------------------------------------------------- diff --git a/apollo-distro/src/main/descriptors/windows-bin.xml b/apollo-distro/src/main/descriptors/windows-bin.xml index 8679290..9dfc12e 100755 --- a/apollo-distro/src/main/descriptors/windows-bin.xml +++ b/apollo-distro/src/main/descriptors/windows-bin.xml @@ -33,17 +33,6 @@ <lineEnding>dos</lineEnding> </fileSet> - <!-- Copy the windows scripts .. exclude the unix bits--> - <fileSet> - <directory>src/main/release/bin</directory> - <outputDirectory>/bin</outputDirectory> - <lineEnding>dos</lineEnding> - <includes> - <include>*.bat</include> - <include>*.cmd</include> - </includes> - </fileSet> - <!-- filtered files --> <fileSet> <directory>src/main/release</directory> http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-distro/src/main/release/bin/apollo ---------------------------------------------------------------------- diff --git a/apollo-distro/src/main/release/bin/apollo b/apollo-distro/src/main/release/bin/apollo index 75d8005..e502fb5 100755 --- a/apollo-distro/src/main/release/bin/apollo +++ b/apollo-distro/src/main/release/bin/apollo @@ -33,7 +33,10 @@ fi cygwin=false; darwin=false; case "`uname`" in - CYGWIN*) cygwin=true ;; + CYGWIN*) cygwin=true + OSTYPE=cygwin + export OSTYPE + ;; Darwin*) darwin=true if [ -z "$JAVA_HOME" ] ; then JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home http://git-wip-us.apache.org/repos/asf/activemq-apollo/blob/a325f0fb/apollo-web/src/main/scala/org/apache/activemq/apollo/web/ApolloApplication.scala ---------------------------------------------------------------------- diff --git a/apollo-web/src/main/scala/org/apache/activemq/apollo/web/ApolloApplication.scala b/apollo-web/src/main/scala/org/apache/activemq/apollo/web/ApolloApplication.scala index faecb69..99561f1 100644 --- a/apollo-web/src/main/scala/org/apache/activemq/apollo/web/ApolloApplication.scala +++ b/apollo-web/src/main/scala/org/apache/activemq/apollo/web/ApolloApplication.scala @@ -47,7 +47,7 @@ class ApolloApplication extends Filter { if( !conf.exists() ) { val create = new BrokerCreate create.directory = base - create.base = base.getCanonicalPath + create.base = base create.broker_security_config = "<jmx admin_url='"+sc.getContextPath+"'/>" create.host_security_config = "" create.home = null