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+")");
}
}