1.Storm 安装手册和提交Topology

目录

(一)搭建单机storm集群

一、下载所需要的资源

二、资源解压

三、安装JDK

四、安装依赖的库文件

五、安装ZMQ

六、安装jzmq

七、启动zookeeper

八、启动storm

九、在UI端访问

十、编译storm-start jar包

十一、storm-starter源码导出

十二、提交Topology

(二)搭建多机storm集群

一、基本设置

二、修改配置文件

三、启动集群

四、在UI端口访问

五、提交Topology

附一

 

Storm 安装手册

(一)搭建单机storm集群

一、下载所需要的资源

Storm:

http://storm-project.net/downloads.html

(0.9.3)apache-storm-0.9.3.tar.gz

Zookeeper:

http://www.apache.org/dyn/closer.cgi/zookeeper/

(3.4.6)zookeeper-3.4.6.tar.gz

ZMQ:

http://download.zeromq.org/

(2.1.7)zeromq-2.1.7.tar.gz

jzmq:

http://github.com/nathanmarz/jzmq/archive/master.zip

jzmq-master.zip

二、资源解压

下载完成后将资源放在自己指定的目录下

解压

tar -xvf zookeeper-3.4.6.tar.gz

tar -xvf apache-storm-0.9.3.tar.gz

tar -xvf zeromq-2.1.7.tar.gz

unzip jzmq-master.zip

 

三、安装JDK

安装openjdk

安装命令:

sudo apt-get install openjdk-7-jdk

安装完成后修改环境变量,修改文件etc/profile

vim /etc/profile

修改以下内容:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$PATH

修改完成后,使配置文件生效

source /etc/profile

四、安装依赖的库文件

运行以下命令对所需要的库文件进行安装,也可使用yum进行安装

sudo apt-get install libtool

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install g++

sudo apt-get install uuid-dev

sudo apt-get install uuid

sudo apt-get install e2fsprogs

sudo apt-get install python

五、安装ZMQ

进入zero相应目录下,运行以下命令进行安装

cd zeromq-2.1.7

./configure

若出现如下错误

configure: error: cannot link with -luuid, install uuid-dev.

解决方案如下:

yum install uuid-dev 提示找不到该依赖包  (需从网上下载安装yum)

yum install uuid*     直接用* ok

./configure  再次运行configure还是报错

configure: error: cannot link with -luuid, install uuid-dev.

上网搜索可能是还缺另外一个包

yum install e2fsprogs* ok

make

sudo make install

sudo ldconfig

六、安装jzmq

进入jzmq相应目录下,运行以下命令进行安装

cd jzmq-master

./autogen.sh

./configure

make

sudo make install

若make过程出现如下错误

***No rule to make target ‘classdist_noinst.stamp’,needed by ‘org、zeromq/ZMQ.class’. Stop

解决方法,运行如下命令解决

touch src/classdist_noinst.stamp

cd src/org/zeromq

javac *.java

cd –

make

sudo make install

七、启动zookeeper

进入zookeeper相应目录

cd zookeeper-3.4.6/

重命名./conf/zoo_sample.cfg为./conf/zoo.cfg

mv ./conf/zoo_sample.cfg ./conf/zoo.cfg

运行命令启动zookeeper

bin/zkServer.sh start

检查zookeeper是否启动成功zkServer.sh status

bin/zkCli.sh –server 127.0.0.1:2181

在出现的交互式窗口中运行

ls /

八、启动storm

进入storm相应目录,启动storm相应服务

cd apache-storm-0.9.3/bin

./storm nimbus&

./storm supervisor&

./storm ui&

九、在UI端访问

在桌面打开连接http://localhost:8080,此时能够看见Storm UI界面

wps3F67.tmp

十、编译storm-start jar包

在运行起来的集群上提交一个Topology,使用storm-starter做示范

安装git工具

sudo apt-get install git

安装leiningen工具(2.0.0以上版本),按照https://github.com/technomancy/leiningen的步骤安装

确保java版本在6以上

下载lein脚本(我下载的lein脚本附在最后,附一),命名为lein:

cd ~/wfm-storm/apache-storm-0.9.3/bin

vim lein

将附一的脚本粘贴到lein文件中并保存

chmod 755 ~/bin/lein

运行lein

./lein

运行lein报如下错误

“Failed to download

https://github.com/technomancy/leiningen/releases/download/2.5.0/leiningen-2.5.0-standalone.jar  (exit code 7) It's possible your HTTP client's certificate store does not have the correct certificate authority needed. This is often caused by an out-of-date version of libssl. It's also possible that you're behind a firewall and haven't set HTTP_PROXY and HTTPS_PROXY.“

解决方法:

export HTTP_CLIENT="wget --no-check-certificate -O"

./lein

export PATH=" ~/wfm-storm/apache-storm-0.9.3/bin/:$PATH"(在配置文件中加入这句)

下载storm-start源码保存在~/wfm-storm/storm-starter中

cd ~/wfm-storm/

git clone git://github.com/nathanmarz/storm-starter.git

依次执行以下命令创建项目jar包

cd storm-starter/

lein deps //下载相应的依赖包

lein compile //编译

lein install //安装打包

报backtype.storm.LocalCluster和backtype.storm.LocalDRPC类找不到:

Compiling backtype.storm.testing4j

Exception in thread "main" java.lang.ClassNotFoundException: backtype.storm.LocalCluster, compiling:(testing4j.clj:1)

        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387)

        at clojure.lang.Compiler.compile1(Compiler.java:7035)

        at clojure.lang.Compiler.compile1(Compiler.java:7025)

        at clojure.lang.Compiler.compile(Compiler.java:7097)

        at clojure.lang.RT.compile(RT.java:387)

        at clojure.lang.RT.load(RT.java:427)

        at clojure.lang.RT.load(RT.java:400)

        at clojure.core$load$fn__4890.invoke(core.clj:5415)

        at clojure.core$load.doInvoke(core.clj:5414)

解决方法:

修改storm-core/src/clj/backtype/storm/testing4j.clj

和storm-core/src/clj/storm/trident/testing.clj,分别引用这两个类:

testing4j.clj:

  1 (ns backtype.storm.testing4j

  2   (:import [java.util Map List Collection ArrayList])

  3   (:require [backtype.storm.LocalCluster :as LocalCluster])

testing.clj:

  1  (ns storm.trident.testing)

  2   (:require [backtype.storm.LocalDRPC :as LocalDRPC])

安装时出现jdk版本问题

sudo apt-get install openjdk-7-jdk

执行之后会将JDK安装到/usr/lib/jvm/java-7-openjdk-i386/

通过update-alternatives选择系统中使用的java

sudo update-alternatives --config java

有 3 个候选项可用于替换 java (提供 /usr/bin/java)。

选择  路径                         优先级  状态

------------------------------------------------------------

* 0   /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061      自动模式

1    /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061      手动模式

2    /usr/lib/jvm/java-6-sun/jre/bin/java            63        手动模式

3    /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java   1051      手动模式

要维持当前值[*]请按回车键,或者键入选择的编号:3      

update-alternatives: 使用 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 来提供 /usr/bin/java (java),于 手动模式 中。

实际是将/usr/bin/java链接到JDK7上,保证执行java命令后,实际运行的是我们的目标版本

java -version

除了java外,还有javac、jar、javah、javap、jps、jconsole等

sudo update-alternatives --config javac

sudo update-alternatives --config jar

sudo update-alternatives --config javah

sudo update-alternatives --config javap

sudo update-alternatives --config jps

sudo update-alternatives --config jconsole

补充:jps -lv  用于查看java程序的启动参数,如java版本

修改各个环境变量

sudo vim /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$PATH

source  /etc/profile

sudo vim /etc/environment

CLASSPATH=.:/usr/lib/jvm/java-7-openjdk-amd64/lib#

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/source /etc/environment

sudo vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$PATH

source ~/.bashrc

创建好的jar包storm-starter-0.0.1-SNAPSHOT.jar位于target目录下

十一、storm-starter源码导出

获取storm-starter源码

cd ~/wfm-storm

git clone git://github.com/apache/storm.git

cd storm/examples/storm-starter

storm-starter简介

storm-starter包含很多使用storm的例子。如果是第一次使用storm,建议从以下三个例子(topologies)入手:

- ExclamationTopology: 基础的topology,全部都是使用java写的

- WordCountTopology: 基础的topology ,利用multilang使用Python实现的

- ReachTopology: storm之上的复杂的DRPC例子

熟悉这几个例子之后,可看看其他的一些topologies(src/jvm/storm/starter/),其中有更多advanced的实现例子

在maven上使用storm-starter,安装maven(3.x)

下载相应maven版本(http://maven.apache.org/download.cgi),例如apache-maven-3.2.5-bin.tar.gz

解压下载的包

tar -zxf apache-maven-3.2.5-bin.tar.gz

修改环境变量M2_HOME

sudo vim /etc/profile

添加如下代码:

export M2_HOME=/home/wamdm/wfm-storm/apache-maven-3.2.5

export M2=$M2_HOME/bin

export MAVEN_OPTS="-Xms256m -Xmx512m"

export PATH=$M2:$PATH

source /etc/profile

运行mvn –version查看安装是否成功.

wps3F68.tmp

在maven上运行topologies

storm-starter topologies可以使用maven-exec-plugin执行

例如:在本地模式下编译并且运行 WordCountTopology

$ mvn compile exec:java -Dstorm.topology=storm.starter.WordCountTopology

也可以使用Maven运行clojure topologies

$ mvn compile exec:java -Dstorm.topology=storm.starter.clj.word_count

打包strom-starter用于storm集群

mvn package

运行例子:

# Example 1: Run the RollingTopWords in local mode (LocalCluster)

$ storm jar storm-starter-*-jar-with-dependencies.jar storm.starter.RollingTopWords

# Example 2: Run the RollingTopWords in remote/cluster mode,

# under the name "production-topology"

$ storm jar storm-starter-*-jar-with-dependencies.jar storm.starter.RollingTopWords production-topology remote

十二、提交Topology

进入storm文件夹的bin目录中,运行以下命令提交Topology

./storm jar ~/project/storm-starter/target/storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCount Topology wordcount

等待提交结束,刷新ui页面,可以看到提交的“Wordcount”Topology,点击Wordcount可以看到其详细的运行情况

停止storm Topology

storm kill :{toponame}

(二)搭建多机storm集群

一、基本设置

首先在每台机器上都搭建单机集群

wamdm1作为Nimbus(192.168.0.11)

wamdm2作为Zookeeper(192.168.0.12)

wamdm3作为Supervisor(192.168.0.13)

wamdm4作为Supervisor(192.168.0.14)

二、修改配置文件

修改wamdm1、wamdm3、wamdm4上的storm.yaml

(~/wfm-storm/apache-storm-0.9.3/conf)

进入conf目录

cd ~/wfm-storm/apache-storm-0.9.3/conf

修改配置文件

vim storm.yaml

将文件中添加如下代码

storm.zookeeper.servers:

- "192.168.0.12"

# - "192.168.0.13"

nimbus.host: "192.168.0.11"

#ui.port: 83

supervisor.slots.ports:

- 6700

- 6701

- 6702

- 6703

可用参数解释:

java.library.path:该配置项配置启动storm所需lib包的路径(默认可不用配置)

storm.zookeeper.servers:该配置项配置了当前集群中所有ZooKeeper机器的IP地址(这里我们只使用wamdm1作为Zookeeper服务器)

nimbus.host:该配置项指明了Nimbus机器的IP地址

ui.port:该配置项配置了Storm UI使用的端口。(默认使用8080端口)

supervisor.slots.ports:该配置项指明了一台Supervisor机器上所有可以使用的slot信息,也就是端口号。表明该机器上最多可以启动4个worker

Storm还提供了很多其他的配置项,需要时可查相应的document

三、启动集群

在wamdm2上启动zookeeper

bin/zkServer.sh start

检查zookeeper是否启动成功zkServer.sh status

bin/zkCli.sh –server 127.0.0.1:2181

在出现的交互式窗口中运行

ls /

在wamdm1上启动nimbus和ui

cd apache-storm-0.9.3/bin

./storm nimbus

./storm ui

在wamdm3上启动supervisor

cd apache-storm-0.9.3/bin

./storm supervisor

在wamdm4上启动supervisor

cd apache-storm-0.9.3/bin

./storm supervisor

四、在UI端口访问

在桌面打开连接http://192.168.0.11:8080,此时能够看见Storm集群

wps3F79.tmp

五、提交Topology

在wamdm1(Nimbus所在机器)上提交WordCountTopology到集群中,刷新ui页面,就能够看到提交的Topology了。

附一

lein

  1 #!/usr/bin/env bash
  2 
  3 # Ensure this file is executable via `chmod a+x lein`, then place it
  4 
  5 # somewhere on your $PATH, like ~/bin. The rest of Leiningen will be
  6 
  7 # installed upon first run into the ~/.lein/self-installs directory.
  8 
  9 export LEIN_VERSION="2.5.0"
 10 
 11 case $LEIN_VERSION in
 12 
 13     *SNAPSHOT) SNAPSHOT="YES" ;;
 14 
 15     *) SNAPSHOT="NO" ;;
 16 
 17 esac
 18 
 19 if [[ "$OSTYPE" == "cygwin" ]] || [[ "$OSTYPE" == "msys" ]]; then
 20 
 21     delimiter=";"
 22 
 23 else
 24 
 25     delimiter=":"
 26 
 27 fi
 28 
 29 if [[ "$OSTYPE" == "cygwin" ]]; then
 30 
 31   cygwin=true
 32 
 33 else
 34 
 35   cygwin=false
 36 
 37 fi
 38 
 39 function make_native_path {
 40 
 41     # ensure we have native paths
 42 
 43     if $cygwin && [[ "$1"  == /* ]]; then
 44 
 45     echo -n "$(cygpath -wp "$1")"
 46 
 47     elif [[ "$OSTYPE" == "msys" && "$1"  == /?/* ]]; then
 48 
 49     echo -n "$(sh -c "(cd $1 2</dev/null && pwd -W) || echo $1 | sed 's/^\\/\([a-z]\)/\\1:/g'")"
 50 
 51     else
 52 
 53     echo -n "$1"
 54 
 55     fi
 56 
 57 }
 58 
 59 #  usage : add_path PATH_VAR [PATH]...
 60 
 61 function add_path {
 62 
 63     local path_var="$1"
 64 
 65     shift
 66 
 67     while [ -n "$1" ];do
 68 
 69         # http://bashify.com/?Useful_Techniques:Indirect_Variables:Indirect_Assignment
 70 
 71         if [[ -z ${!path_var} ]]; then
 72 
 73           export ${path_var}="$(make_native_path "$1")"
 74 
 75         else
 76 
 77           export ${path_var}="${!path_var}${delimiter}$(make_native_path "$1")"
 78 
 79         fi
 80 
 81     shift
 82 
 83     done
 84 
 85 }
 86 
 87 function download_failed_message {
 88 
 89     echo "Failed to download $1 (exit code $2)"
 90 
 91     echo "It's possible your HTTP client's certificate store does not have the"
 92 
 93     echo "correct certificate authority needed. This is often caused by an"
 94 
 95     echo "out-of-date version of libssl. It's also possible that you're behind a"
 96 
 97     echo "firewall and haven't set HTTP_PROXY and HTTPS_PROXY."
 98 
 99 }
100 
101 function self_install {
102 
103   if [ -r "$LEIN_JAR" ]; then
104 
105     echo "The self-install jar already exists at $LEIN_JAR."
106 
107     echo "If you wish to re-download, delete it and rerun \"$0 self-install\"."
108 
109     exit 1
110 
111   fi
112 
113   echo "Downloading Leiningen to $LEIN_JAR now..."
114 
115   mkdir -p "$(dirname "$LEIN_JAR")"
116 
117   LEIN_URL="https://github.com/technomancy/leiningen/releases/download/$LEIN_VERSION/leiningen-$LEIN_VERSION-standalone.jar"
118 
119   $HTTP_CLIENT "$LEIN_JAR.pending" "$LEIN_URL"
120 
121   local exit_code=$?
122 
123   if [ $exit_code == 0 ]; then
124 
125       # TODO: checksum
126 
127       mv -f "$LEIN_JAR.pending" "$LEIN_JAR"
128 
129   else
130 
131       rm "$LEIN_JAR.pending" 2> /dev/null
132 
133       download_failed_message "$LEIN_URL" "$exit_code"
134 
135       exit 1
136 
137   fi
138 
139 }
140 
141 if [ `id -u` -eq 0 ] && [ "$LEIN_ROOT" = "" ]; then
142 
143     echo "WARNING: You're currently running as root; probably by accident."
144 
145     echo "Press control-C to abort or Enter to continue as root."
146 
147     echo "Set LEIN_ROOT to disable this warning."
148 
149     read _
150 
151 fi
152 
153 NOT_FOUND=1
154 
155 ORIGINAL_PWD="$PWD"
156 
157 while [ ! -r "$PWD/project.clj" ] && [ "$PWD" != "/" ] && [ $NOT_FOUND -ne 0 ]
158 
159 do
160 
161     cd ..
162 
163     if [ "$(dirname "$PWD")" = "/" ]; then
164 
165         NOT_FOUND=0
166 
167         cd "$ORIGINAL_PWD"
168 
169     fi
170 
171 done
172 
173 export LEIN_HOME="${LEIN_HOME:-"$HOME/.lein"}"
174 
175 for f in "$LEIN_HOME/leinrc" ".leinrc"; do
176 
177   if [ -e "$f" ]; then
178 
179     source "$f"
180 
181   fi
182 
183 done
184 
185 if $cygwin; then
186 
187     export LEIN_HOME=`cygpath -w "$LEIN_HOME"`
188 
189 fi
190 
191 LEIN_JAR="$LEIN_HOME/self-installs/leiningen-$LEIN_VERSION-standalone.jar"
192 
193 # normalize $0 on certain BSDs
194 
195 if [ "$(dirname "$0")" = "." ]; then
196 
197     SCRIPT="$(which $(basename "$0"))"
198 
199 else
200 
201     SCRIPT="$0"
202 
203 fi
204 
205 # resolve symlinks to the script itself portably
206 
207 while [ -h "$SCRIPT" ] ; do
208 
209     ls=`ls -ld "$SCRIPT"`
210 
211     link=`expr "$ls" : '.*-> \(.*\)$'`
212 
213     if expr "$link" : '/.*' > /dev/null; then
214 
215         SCRIPT="$link"
216 
217     else
218 
219         SCRIPT="$(dirname "$SCRIPT"$)/$link"
220 
221     fi
222 
223 done
224 
225 BIN_DIR="$(dirname "$SCRIPT")"
226 
227 export LEIN_JVM_OPTS="${LEIN_JVM_OPTS-"-XX:+TieredCompilation -XX:TieredStopAtLevel=1"}"
228 
229 # This needs to be defined before we call HTTP_CLIENT below
230 
231 if [ "$HTTP_CLIENT" = "" ]; then
232 
233     if type -p curl >/dev/null 2>&1; then
234 
235         if [ "$https_proxy" != "" ]; then
236 
237             CURL_PROXY="-x $https_proxy"
238 
239         fi
240 
241         HTTP_CLIENT="curl $CURL_PROXY -f -L -o"
242 
243     else
244 
245         HTTP_CLIENT="wget -O"
246 
247     fi
248 
249 fi
250 
251 # When :eval-in :classloader we need more memory
252 
253 grep -E -q '^\s*:eval-in\s+:classloader\s*$' project.clj 2> /dev/null && \
254 
255     export LEIN_JVM_OPTS="$LEIN_JVM_OPTS -Xms64m -Xmx512m"
256 
257 if [ -r "$BIN_DIR/../src/leiningen/version.clj" ]; then
258 
259     # Running from source checkout
260 
261     LEIN_DIR="$(dirname "$BIN_DIR")"
262 
263     # Need to use lein release to bootstrap the leiningen-core library (for aether)
264 
265     if [ ! -r "$LEIN_DIR/leiningen-core/.lein-bootstrap" ]; then
266 
267         echo "Leiningen is missing its dependencies."
268 
269         echo "Please run \"lein bootstrap\" in the leiningen-core/ directory"
270 
271         echo "with a stable release of Leiningen. See CONTRIBUTING.md for details."
272 
273         exit 1
274 
275     fi
276 
277     # If project.clj for lein or leiningen-core changes, we must recalculate
278 
279     LAST_PROJECT_CHECKSUM=$(cat "$LEIN_DIR/.lein-project-checksum" 2> /dev/null)
280 
281     PROJECT_CHECKSUM=$(sum "$LEIN_DIR/project.clj" "$LEIN_DIR/leiningen-core/project.clj")
282 
283     if [ "$PROJECT_CHECKSUM" != "$LAST_PROJECT_CHECKSUM" ]; then
284 
285         if [ -r "$LEIN_DIR/.lein-classpath" ]; then
286 
287             rm "$LEIN_DIR/.lein-classpath"
288 
289         fi
290 
291     fi
292 
293     # Use bin/lein to calculate its own classpath.
294 
295     if [ ! -r "$LEIN_DIR/.lein-classpath" ] && [ "$1" != "classpath" ]; then
296 
297         echo "Recalculating Leiningen's classpath."
298 
299         ORIG_PWD="$PWD"
300 
301         cd "$LEIN_DIR"
302 
303         LEIN_NO_USER_PROFILES=1 $0 classpath .lein-classpath
304 
305         sum "$LEIN_DIR/project.clj" "$LEIN_DIR/leiningen-core/project.clj" > \
306 
307             .lein-project-checksum
308 
309         cd "$ORIG_PWD"
310 
311     fi
312 
313     mkdir -p "$LEIN_DIR/target/classes"
314 
315     export LEIN_JVM_OPTS="$LEIN_JVM_OPTS -Dclojure.compile.path=$LEIN_DIR/target/classes"
316 
317     add_path CLASSPATH "$LEIN_DIR/leiningen-core/src/" "$LEIN_DIR/leiningen-core/resources/" \
318 
319         "$LEIN_DIR/test:$LEIN_DIR/target/classes" "$LEIN_DIR/src" ":$LEIN_DIR/resources"
320 
321     if [ -r "$LEIN_DIR/.lein-classpath" ]; then
322 
323         add_path CLASSPATH "$(cat "$LEIN_DIR/.lein-classpath" 2> /dev/null)"
324 
325     else
326 
327         add_path CLASSPATH "$(cat "$LEIN_DIR/leiningen-core/.lein-bootstrap" 2> /dev/null)"
328 
329     fi
330 
331 else # Not running from a checkout
332 
333     add_path CLASSPATH "$LEIN_JAR"
334 
335     BOOTCLASSPATH="-Xbootclasspath/a:$LEIN_JAR"
336 
337     if [ ! -r "$LEIN_JAR" -a "$1" != "self-install" ]; then
338 
339         self_install
340 
341     fi
342 
343 fi
344 
345 # TODO: explain what to do when Java is missing
346 
347 export JAVA_CMD="${JAVA_CMD:-"java"}"
348 
349 export LEIN_JAVA_CMD="${LEIN_JAVA_CMD:-$JAVA_CMD}"
350 
351 if [[ -z "${DRIP_INIT+x}" && "$(basename "$LEIN_JAVA_CMD")" == *drip* ]]; then
352 
353     export DRIP_INIT="$(printf -- '-e\n(require (quote leiningen.repl))')"
354 
355     export DRIP_INIT_CLASS="clojure.main"
356 
357 fi
358 
359 # Support $JAVA_OPTS for backwards-compatibility.
360 
361 export JVM_OPTS="${JVM_OPTS:-"$JAVA_OPTS"}"
362 
363 # Handle jline issue with cygwin not propagating OSTYPE through java subprocesses: https://github.com/jline/jline2/issues/62
364 
365 cygterm=false
366 
367 if $cygwin; then
368 
369   case "$TERM" in
370 
371     rxvt* | xterm* | vt*) cygterm=true ;;
372 
373   esac
374 
375 fi
376 
377 if $cygterm; then
378 
379   LEIN_JVM_OPTS="$LEIN_JVM_OPTS -Djline.terminal=jline.UnixTerminal"
380 
381   stty -icanon min 1 -echo > /dev/null 2>&1
382 
383 fi
384 
385 # TODO: investigate http://skife.org/java/unix/2011/06/20/really_executable_jars.html
386 
387 # If you're packaging this for a package manager (.deb, homebrew, etc)
388 
389 # you need to remove the self-install and upgrade functionality or see lein-pkg.
390 
391 if [ "$1" = "self-install" ]; then
392 
393     if [ -r "$BIN_DIR/../src/leiningen/version.clj" ]; then
394 
395         echo "Running self-install from a checkout is not supported."
396 
397         echo "See CONTRIBUTING.md for SNAPSHOT-specific build instructions."
398 
399         exit 1
400 
401     fi
402 
403     echo "Manual self-install is deprecated; it will run automatically when necessary."
404 
405     self_install
406 
407 elif [ "$1" = "upgrade" ] || [ "$1" = "downgrade" ]; then
408 
409     if [ "$LEIN_DIR" != "" ]; then
410 
411         echo "The upgrade task is not meant to be run from a checkout."
412 
413         exit 1
414 
415     fi
416 
417     if [ $SNAPSHOT = "YES" ]; then
418 
419         echo "The upgrade task is only meant for stable releases."
420 
421         echo "See the \"Hacking\" section of the README."
422 
423         exit 1
424 
425     fi
426 
427     if [ ! -w "$SCRIPT" ]; then
428 
429         echo "You do not have permission to upgrade the installation in $SCRIPT"
430 
431         exit 1
432 
433     else
434 
435         TARGET_VERSION="${2:-stable}"
436 
437         echo "The script at $SCRIPT will be upgraded to the latest $TARGET_VERSION version."
438 
439         echo -n "Do you want to continue [Y/n]? "
440 
441         read RESP
442 
443         case "$RESP" in
444 
445             y|Y|"")
446 
447                 echo
448 
449                 echo "Upgrading..."
450 
451                 TARGET="/tmp/lein-$$-upgrade"
452 
453                 if $cygwin; then
454 
455                     TARGET=`cygpath -w $TARGET`
456 
457                 fi
458 
459                 LEIN_SCRIPT_URL="https://github.com/technomancy/leiningen/raw/$TARGET_VERSION/bin/lein"
460 
461                 $HTTP_CLIENT "$TARGET" "$LEIN_SCRIPT_URL"
462 
463                 if [ $? == 0 ]; then
464 
465                     cmp -s "$TARGET" "$SCRIPT"
466 
467                     if [ $? == 0 ]; then
468 
469                         echo "Leiningen is already up-to-date."
470 
471                     fi
472 
473                     mv "$TARGET" "$SCRIPT" && chmod +x "$SCRIPT"
474 
475                     exec "$SCRIPT" version
476 
477                 else
478 
479                     download_failed_message "$LEIN_SCRIPT_URL"
480 
481                 fi;;
482 
483             *)
484 
485                 echo "Aborted."
486 
487                 exit 1;;
488 
489         esac
490 
491     fi
492 
493 else
494 
495     if $cygwin; then
496 
497         # When running on Cygwin, use Windows-style paths for java
498 
499         ORIGINAL_PWD=`cygpath -w "$ORIGINAL_PWD"`
500 
501     fi
502 
503     # apply context specific CLASSPATH entries
504 
505     if [ -f .lein-classpath ]; then
506 
507         add_path CLASSPATH "$(cat .lein-classpath)"
508 
509     fi
510 
511     if [ $DEBUG ]; then
512 
513         echo "Leiningen's classpath: $CLASSPATH"
514 
515     fi
516 
517     if [ -r .lein-fast-trampoline ]; then
518 
519         export LEIN_FAST_TRAMPOLINE='y'
520 
521     fi
522 
523     if [ "$LEIN_FAST_TRAMPOLINE" != "" ] && [ -r project.clj ]; then
524 
525         INPUTS="$@ $(cat project.clj) $LEIN_VERSION $(test -f "$LEIN_HOME/profiles.clj" && cat "$LEIN_HOME/profiles.clj")"
526 
527         export INPUT_CHECKSUM=$(echo $INPUTS | shasum - | cut -f 1 -d " ")
528 
529         # Just don't change :target-path in project.clj, mkay?
530 
531         TRAMPOLINE_FILE="target/trampolines/$INPUT_CHECKSUM"
532 
533     else
534 
535         if hash mktemp 2>/dev/null; then
536 
537             # Check if mktemp is available before using it
538 
539             TRAMPOLINE_FILE="$(mktemp /tmp/lein-trampoline-XXXXXXXXXXXXX)"
540 
541         else
542 
543             TRAMPOLINE_FILE="/tmp/lein-trampoline-$$"
544 
545         fi
546 
547         trap "rm -f $TRAMPOLINE_FILE" EXIT
548 
549     fi
550 
551     if $cygwin; then
552 
553         TRAMPOLINE_FILE=`cygpath -w $TRAMPOLINE_FILE`
554 
555     fi
556 
557     if [ "$INPUT_CHECKSUM" != "" ] && [ -r "$TRAMPOLINE_FILE" ]; then
558 
559         if [ $DEBUG ]; then
560 
561             echo "Fast trampoline with $TRAMPOLINE_FILE."
562 
563         fi
564 
565         exec sh -c "exec $(cat $TRAMPOLINE_FILE)"
566 
567     else
568 
569         export TRAMPOLINE_FILE
570 
571         "$LEIN_JAVA_CMD" \
572 
573             "${BOOTCLASSPATH[@]}" \
574 
575             -Dfile.encoding=UTF-8 \
576 
577             -Dmaven.wagon.http.ssl.easy=false \
578 
579             -Dmaven.wagon.rto=10000 \
580 
581             $LEIN_JVM_OPTS \
582 
583             -Dleiningen.original.pwd="$ORIGINAL_PWD" \
584 
585             -Dleiningen.script="$SCRIPT" \
586 
587             -classpath "$CLASSPATH" \
588 
589             clojure.main -m leiningen.core.main "$@"
590 
591         EXIT_CODE=$?
592 
593         if $cygterm ; then
594 
595           stty icanon echo > /dev/null 2>&1
596 
597         fi
598 
599         ## TODO: [ -r "$TRAMPOLINE_FILE" ] may be redundant? A trampoline file
600 
601         ## is always generated these days.
602 
603         if [ -r "$TRAMPOLINE_FILE" ] && [ "$LEIN_TRAMPOLINE_WARMUP" = "" ]; then
604 
605             TRAMPOLINE="$(cat $TRAMPOLINE_FILE)"
606 
607             if [ "$INPUT_CHECKSUM" = "" ]; then
608 
609                 rm $TRAMPOLINE_FILE
610 
611             fi
612 
613             if [ "$TRAMPOLINE" = "" ]; then
614 
615                 exit $EXIT_CODE
616 
617             else
618 
619                 exec sh -c "exec $TRAMPOLINE"
620 
621             fi
622 
623         else
624 
625             exit $EXIT_CODE
626 
627         fi
628 
629     fi
630 
631 fi

 

转载于:https://www.cnblogs.com/dmyu/p/4691980.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值