Repository: zeppelin Updated Branches: refs/heads/master e669895d9 -> cceeaef2a
[ZEPPELIN-2277] Env variable to configure maven central repo ### What is this PR for? When deploying Zeppelin in private Cloud or within closed networks, it happens that Maven Central isn't directly reachable, so we want to configure our own proxy and do not have to wait for minutes long timeouts when importing external libraries. It is anyhow worth to let user configure maven central repo instead of hardcoding the URL. ### What type of PR is it? Improvement ### How should this be tested? Outline the steps to test the PR here. ### Questions: * Does the licenses files need update? * Is there breaking changes for older versions? * Does this needs documentation? Author: Andrea Peruffo <[email protected]> Closes #2093 from andreaTP/mavenRepo and squashes the following commits: af9accc [Andrea Peruffo] [ZEPPELIN-2277] Env variable to configure maven central repo Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/cceeaef2 Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/cceeaef2 Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/cceeaef2 Branch: refs/heads/master Commit: cceeaef2a4994ee5b40e8c2606ec7c81e7553d37 Parents: e669895 Author: Andrea Peruffo <[email protected]> Authored: Fri Mar 3 11:44:15 2017 +0100 Committer: Lee moon soo <[email protected]> Committed: Fri Mar 17 08:57:53 2017 -0700 ---------------------------------------------------------------------- conf/zeppelin-env.cmd.template | 1 + conf/zeppelin-env.sh.template | 1 + conf/zeppelin-site.xml.template | 6 ++++++ docs/install/configuration.md | 10 ++++++++-- .../main/java/org/apache/zeppelin/dep/Booter.java | 10 +++++++++- .../zeppelin/conf/ZeppelinConfiguration.java | 18 ++++++++++++------ 6 files changed, 37 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/conf/zeppelin-env.cmd.template ---------------------------------------------------------------------- diff --git a/conf/zeppelin-env.cmd.template b/conf/zeppelin-env.cmd.template index 1bbde86..548a798 100644 --- a/conf/zeppelin-env.cmd.template +++ b/conf/zeppelin-env.cmd.template @@ -38,6 +38,7 @@ REM set ZEPPELIN_NOTEBOOK_S3_SSE REM Server-side encryption enable REM set ZEPPELIN_IDENT_STRING REM A string representing this instance of zeppelin. $USER by default. REM set ZEPPELIN_NICENESS REM The scheduling priority for daemons. Defaults to 0. REM set ZEPPELIN_INTERPRETER_LOCALREPO REM Local repository for interpreter's additional dependency loading +REM set ZEPPELIN_INTERPRETER_DEP_MVNREPO REM Maven principal repository for interpreter's additional dependency loading REM set ZEPPELIN_NOTEBOOK_STORAGE REM Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote). REM set ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC REM If there are multiple notebook storages, should we treat the first one as the only source of truth? http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/conf/zeppelin-env.sh.template ---------------------------------------------------------------------- diff --git a/conf/zeppelin-env.sh.template b/conf/zeppelin-env.sh.template index 3dccca6..5e32b15 100644 --- a/conf/zeppelin-env.sh.template +++ b/conf/zeppelin-env.sh.template @@ -43,6 +43,7 @@ # export ZEPPELIN_IDENT_STRING # A string representing this instance of zeppelin. $USER by default. # export ZEPPELIN_NICENESS # The scheduling priority for daemons. Defaults to 0. # export ZEPPELIN_INTERPRETER_LOCALREPO # Local repository for interpreter's additional dependency loading +# export ZEPPELIN_INTERPRETER_DEP_MVNREPO # Remote principal repository for interpreter's additional dependency loading # export ZEPPELIN_NOTEBOOK_STORAGE # Refers to pluggable notebook storage class, can have two classes simultaneously with a sync between them (e.g. local and remote). # export ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC # If there are multiple notebook storages, should we treat the first one as the only source of truth? # export ZEPPELIN_NOTEBOOK_PUBLIC # Make notebook public by default when created, private otherwise http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/conf/zeppelin-site.xml.template ---------------------------------------------------------------------- diff --git a/conf/zeppelin-site.xml.template b/conf/zeppelin-site.xml.template index f4625c4..d172942 100755 --- a/conf/zeppelin-site.xml.template +++ b/conf/zeppelin-site.xml.template @@ -240,6 +240,12 @@ </property> <property> + <name>zeppelin.interpreter.dep.mvnRepo</name> + <value>http://repo1.maven.org/maven2/</value> + <description>Remote principal repository for interpreter's additional dependency loading</description> +</property> + +<property> <name>zeppelin.dep.localrepo</name> <value>local-repo</value> <description>Local repository for dependency loader</description> http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/docs/install/configuration.md ---------------------------------------------------------------------- diff --git a/docs/install/configuration.md b/docs/install/configuration.md index 52018d1..ac41e6f 100644 --- a/docs/install/configuration.md +++ b/docs/install/configuration.md @@ -26,7 +26,7 @@ limitations under the License. ## Zeppelin Properties There are two locations you can configure Apache Zeppelin. -* **Environment variables** can be defined `conf/zeppelin-env.sh`(`conf\zeppelin-env.cmd` for Windows). +* **Environment variables** can be defined `conf/zeppelin-env.sh`(`conf\zeppelin-env.cmd` for Windows). * **Java properties** can ba defined in `conf/zeppelin-site.xml`. If both are defined, then the **environment variables** will take priority. @@ -258,6 +258,12 @@ If both are defined, then the **environment variables** will take priority. <td>Interpreter directory</td> </tr> <tr> + <td><h6 class="properties">ZEPPELIN_INTERPRETER_DEP_MVNREPO</h6></td> + <td><h6 class="properties">zeppelin.interpreter.dep.mvnRepo</h6></td> + <td>http://repo1.maven.org/maven2/</td> + <td>Remote principal repository for interpreter's additional dependency loading</td> + </tr> + <tr> <td><h6 class="properties">ZEPPELIN_INTERPRETER_OUTPUT_LIMIT</h6></td> <td><h6 class="properties">zeppelin.interpreter.output.limit</h6></td> <td>102400</td> @@ -391,7 +397,7 @@ The following properties needs to be updated in the `zeppelin-site.xml` in order ### Obfuscating Passwords using the Jetty Password Tool Security best practices advise to not use plain text passwords and Jetty provides a password tool to help obfuscating the passwords used to access the KeyStore and TrustStore. - + The Password tool documentation can be found [here](http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html). After using the tool: http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java index 0fd0ea2..5bc58ed 100644 --- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java +++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/dep/Booter.java @@ -67,7 +67,15 @@ public class Booter { } public static RemoteRepository newCentralRepository() { - return new RemoteRepository("central", "default", "http://repo1.maven.org/maven2/"); + String mvnRepo = System.getenv("ZEPPELIN_INTERPRETER_DEP_MVNREPO"); + if (mvnRepo == null) { + mvnRepo = System.getProperty("zeppelin.interpreter.dep.mvnRepo"); + } + if (mvnRepo == null) { + mvnRepo = "http://repo1.maven.org/maven2/"; + } + + return new RemoteRepository("central", "default", mvnRepo); } public static RemoteRepository newLocalRepository() { http://git-wip-us.apache.org/repos/asf/zeppelin/blob/cceeaef2/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java index 81507ba..facf89a 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java @@ -108,7 +108,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { conf = new ZeppelinConfiguration(); } } - + LOG.info("Server Host: " + conf.getServerAddress()); if (conf.useSsl() == false) { LOG.info("Server Port: " + conf.getServerPort()); @@ -355,7 +355,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { public String getNotebookDir() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_DIR); } - + public String getUser() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_USER); } @@ -363,7 +363,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { public String getBucketName() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_BUCKET); } - + public String getEndpoint() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_ENDPOINT); } @@ -375,7 +375,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { public String getS3KMSKeyRegion() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_KMS_KEY_REGION); } - + public String getS3EncryptionMaterialsProviderClass() { return getString(ConfVars.ZEPPELIN_NOTEBOOK_S3_EMP); } @@ -449,6 +449,10 @@ public class ZeppelinConfiguration extends XMLConfiguration { return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_LOCALREPO); } + public String getInterpreterMvnRepoPath() { + return getString(ConfVars.ZEPPELIN_INTERPRETER_DEP_MVNREPO); + } + public String getRelativeDir(ConfVars c) { return getRelativeDir(getString(c)); } @@ -464,7 +468,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { public boolean isWindowsPath(String path){ return path.matches("^[A-Za-z]:\\\\.*"); } - + public boolean isAnonymousAllowed() { return getBoolean(ConfVars.ZEPPELIN_ANONYMOUS_ALLOWED); } @@ -472,7 +476,7 @@ public class ZeppelinConfiguration extends XMLConfiguration { public boolean isNotebokPublic() { return getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_PUBLIC); } - + public String getConfDir() { return getString(ConfVars.ZEPPELIN_CONF_DIR); } @@ -589,6 +593,8 @@ public class ZeppelinConfiguration extends XMLConfiguration { ZEPPELIN_INTERPRETER_JSON("zeppelin.interpreter.setting", "interpreter-setting.json"), ZEPPELIN_INTERPRETER_DIR("zeppelin.interpreter.dir", "interpreter"), ZEPPELIN_INTERPRETER_LOCALREPO("zeppelin.interpreter.localRepo", "local-repo"), + ZEPPELIN_INTERPRETER_DEP_MVNREPO("zeppelin.interpreter.dep.mvnRepo", + "http://repo1.maven.org/maven2/"), ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT("zeppelin.interpreter.connect.timeout", 30000), ZEPPELIN_INTERPRETER_MAX_POOL_SIZE("zeppelin.interpreter.max.poolsize", 10), ZEPPELIN_INTERPRETER_GROUP_ORDER("zeppelin.interpreter.group.order", "spark,md,angular,sh,"
