public void install()

in software/nosql/src/main/java/org/apache/brooklyn/entity/nosql/couchdb/CouchDBNodeSshDriver.java [88:170]


    public void install() {
        log.info("Installing {}", entity);

       List<String> couchdbUrls = resolver.getTargets();
       String coudhdbSaveAs = resolver.getFilename();

       MutableMap<String, String> installGccPackageFlags = MutableMap.of(
               "onlyifmissing", "gcc",
               "yum", "gcc",
               "apt", "gcc",
               "zypper", "gcc gcc-c++",
               "port", null);
       MutableMap<String, String> installMakePackageFlags = MutableMap.of(
               "onlyifmissing", "make",
               "yum", "make",
               "apt", "make",
               "zypper", "make",
               "port", null);
       MutableMap<String, String> installPackageFlags = MutableMap.of(
               "yum", "js-devel openssl-devel libicu-devel libcurl-devel erlang-erts erlang-public_key erlang-eunit erlang-sasl erlang-os_mon erlang-asn1 erlang-xmerl erlang erlangrebar",
               "apt", "erlang-nox erlang-dev libicu-dev libmozjs185-dev libcurl4-openssl-dev",
               "zypper", "erlang libicu-devel js-devel libopenssl-devel pcre-devel",
               "port", "icu erlang spidermonkey curl");

       List<String> cmds = Lists.newArrayList();

       cmds.add(BashCommands.INSTALL_TAR);
       cmds.add(BashCommands.ifExecutableElse0("apt-get", BashCommands.installPackage("build-essential")));
       cmds.add(BashCommands.ifExecutableElse0("yum", BashCommands.sudo("yum -y --nogpgcheck groupinstall \"Development Tools\"")));
       cmds.add(BashCommands.ifExecutableElse0("zypper", BashCommands.sudo(getZypperRepository())));
       cmds.add(BashCommands.installPackage(installGccPackageFlags, "couchdb-prerequisites-gcc"));
       cmds.add(BashCommands.installPackage(installMakePackageFlags, "couchdb-prerequisites-make"));
       cmds.add(BashCommands.installPackage(installPackageFlags, "couchdb-prerequisites"));
       cmds.addAll(BashCommands.commandsToDownloadUrlsAs(couchdbUrls, coudhdbSaveAs));

       cmds.add(format("tar xvzf %s", coudhdbSaveAs));
       cmds.add(format("cd %s", getExpandedInstallDir()));

       StringBuilder configureCommand = new StringBuilder("./configure")
               .append(format(" --prefix=%s/dist", getExpandedInstallDir()))
               .append(" --with-erlang=/usr/lib64/erlang/usr/include ");

       cmds.addAll(ImmutableList.of(
               "mkdir -p dist",
               configureCommand.toString(),
               isV2()? "make release" : "make install"));

       ScriptHelper script = newScript(INSTALLING)
               .body.append(cmds)
               .header.prepend("set -x")
               .gatherOutput()
               .failOnNonZeroResultCode(false);

       int result = script.execute();

       if (result != 0) {
           String notes = "likely an error building couchdb. consult the brooklyn log ssh output for further details.\n"+
                   "note that this Brooklyn couchdb driver compiles couchdb from source. " +
                   "it attempts to install common prerequisites but this does not always succeed.\n";
           OsDetails os = getMachine().getOsDetails();
           if (os.isMac()) {
               notes += "deploying to Mac OS X, you will require Xcode and Xcode command-line tools, and on " +
                       "some versions the pcre library (e.g. using macports, sudo port install pcre).\n";
           }
           if (os.isWindows()) {
               notes += "this couchdb driver is not designed for windows, unless cygwin is installed, and you are patient.\n";
           }

           if (!script.getResultStderr().isEmpty()) {
               notes += "\n" + "STDERR\n" + script.getResultStderr()+"\n";
               Streams.logStreamTail(log, "STDERR of problem in "+Tasks.current(), Streams.byteArrayOfString(script.getResultStderr()), 1024);
           }
           if (!script.getResultStdout().isEmpty()) {
               notes += "\n" + "STDOUT\n" + script.getResultStdout()+"\n";
               Streams.logStreamTail(log, "STDOUT of problem in "+Tasks.current(), Streams.byteArrayOfString(script.getResultStdout()), 1024);
           }

           Tasks.setExtraStatusDetails(notes.trim());

           throw new IllegalStateException("Installation of couchdb failed (shell returned non-zero result "+result+")");
       }

    }