本章讲述如何在windows和unix平台安装Apache Karaf,这里你将知道预先要安装什么软件,如何下载而且安装Karaf。html
若是你想从源码构建KARAF,需求会有点不一样:java
这过程说明如何下载和安装windows上的源码文件。注:Karaf须要java5编译,构建和运行。web
本过程将讲述如何在unix系统上下载和安装源码文件。这里假定unix机器上有浏览器,没有浏览器的请参照前面二进制unix安装区域。注:Karaf须要java5编译,构建和运行。shell
这里说明如何在windows系统上下载和安装二进制文件。数据库
这里属于如何在unix系统上下载和安装二进制文件。apache
在开始使用karaf以前强烈建议设置指向JDK的JAVA_HOME用来定位java可执行文件,而且应该配置为指向已安装java se5或者6的根目录。windows
Karaf安装目录结构以下:浏览器
Data文件夹包括karaf全部的工做和临时文件,若是你想从一个初始状态重启,你能够清空这个目录,这和“恢复初始化设置”同样的效果。缓存
本章介绍如何启动和中止Apache Karaf和各类可用的选项。安全
Windows下:打开一个控制台窗口,更改到安装目录,并运行Karaf。对于二进制文件,运行 Cd [karaf安装目录] 而后输入:bin\karaf.bat
Linux下:打开一个控制台窗口,更改到安装目录,并运行Karaf。运行 Cd [karaf安装目录] 而后输入:bin\karaf 警告:karaf运行后不要关闭控制台,不然会终止karaf(除非用非控制台启动karaf)。
没有控制台也能够启动karaf,它总能够是用远程SSH访问,是用下面的命令: bin\karaf.bat server 或者是unix下:bin/karaf server
采用如下命令能够轻易地在后台进程启动karaf: Bin\start.bat 或者在unix下:bin/start
清空[karaf安装目录]\data文件夹就能够简单的在重置模式启动karaf,为方便起见,在karaf启动脚本使用如下参数也能够实现重置启动: bin/start clean
不管是windows仍是unix,你均可以在karaf控制台采用如下命令来中止它: osgi:shutdown, 或者简单的是:shutdown。
Shutdown命令会询问你是否真的想要中止,若是你确认中止而且拒绝确认信息,你能够用-f或者-force选项: osgi:shutdown –f, 也能够用时间参数来延迟中止,时间参数有不一样的形式。
首先,能够是绝对时间各式hh:mm。第二,也能够是+m,其中m是等待的分。如今就是+0。
下面的命令能够在10:35am关闭karaf:
osgi:shutdown 10:35。
下面的命令在10分钟后关闭karaf:
osgi:shutdown +10。
若是你在主控制台运行,用注销或者Ctrl+D退出控制台也能够终止karaf实例。 在控制台你能够运行以下命令:
bin\stop.bat
或者在unix下:
bin/stop。
按提示键tab能够在控制台看到可用的命令列表:
root@root> <tab>Display all 182 possibilities? (y or n) *:help addurl admin:change-opts admin:change-rmi-registry-port admin:change-ssh-port admin:connect admin:create admin:destroy admin:list admin:rename admin:start admin:stop bundle-level cancel cat change-opts change-rmi-registry-port change-ssh-port clear commandlist config:cancel config:edit config:list config:propappend config:propdel config:proplist config:propset config:update connect create create-dump destroy dev:create-dump dev:dynamic-import dev:framework dev:print-stack-traces dev:restart dev:show-tree dev:watch display display-exception dynamic-import each echo edit exec exports features:addurl features:info features:install features:list features:listrepositories features:listurl features:listversions features:refreshurl features:removerepository features:removeurl features:uninstall framework get grep head headers help history if imports info install jaas:cancel jaas:commandlist jaas:list jaas:manage jaas:roleadd jaas:roledel jaas:update jaas:useradd jaas:userdel jaas:userlist java list listrepositories listurl listversions log:clear log:display log:display-exception log:get log:set log:tail logout ls manage more new osgi:bundle-level osgi:headers osgi:info osgi:install osgi:list osgi:ls osgi:refresh osgi:resolve osgi:restart osgi:shutdown osgi:start osgi:start-level osgi:stop osgi:uninstall osgi:update packages:exports packages:imports print-stack-traces printf propappend propdel proplist propset refresh refreshurl removerepository removeurl rename resolve restart roleadd roledel set shell:cat shell:clear shell:each shell:echo shell:exec shell:grep shell:head shell:history shell:if shell:info shell:java shell:logout shell:more shell:new shell:printf shell:sleep shell:sort shell:tac shell:tail show-tree shutdown sleep sort ssh ssh:ssh ssh:sshd sshd start start-level stop tac tail uninstall update useradd userdel userlist watch root@root>
要查看一个特定的命令的帮助,在命令后加--help或使用help命令加上命令的名称:
karaf@root> features:list --help
描述
features:list 列出库中定义的全部功能。
语法
features:list [options]
选项
--help 显示此帮助信息 -i, --installed 只列出已安装的功能列表
全部可用命令列表和它们的用法,也能够在一个专门的章节。
你在开发指南会得到更多的shell语法的深刻引导。
如开发指南解释的那样,控制台能够很容易的被新命令扩展。
Karaf Web控制台提供了一个运行时的图形概述。
你能够是用它来:
默认状况下web控制台是不安装的,安装请在karaf提示中运行如下命令: root@karaf> features:install webconsole
访问本地运行的一个karaf实例,在浏览器输入: http://localhost:8181/system/console 使用karaf用户名和karaf密码来登陆系统,若是你修改过用户名或密码,请是用修改后的。
默认状况下,控制台在8181端口运行,你能够经过建立属性文件etc/org.ops4j.pax.web.cfg并在后面添加以下属性设置(改为任意你想要的端口号)来改变端口:
org.osgi.service.http.port=8181
用它本地控制台管理karaf实例不老是有意义的,你能够用远程控制台远程管理karaf。
当你启动karaf时,它使任何其余Karaf控制台或纯SSH客户端能够经过SSH访问远程控制台。远程控制台提供本地控制台的全部功能,并经过运行它里面的容器和服务给远程用户彻底控制。
SSH主机名和端口号在配置文件[karaf安装目录]/etc/org.apache.karaf.shell.cfg用如下默认值配置:
sshPort=8101 sshHost=0.0.0.0 sshRealm=karaf hostKey=${karaf.base}/etc/host.key
你能够用初始化命令或者编辑上面的文件更改这个配置,可是须要重启ssh控制台以便它是用新的参数。
# define helper functions bundle-by-sn = { bm = new java.util.HashMap ; each (bundles) { $bm put ($it symbolicName) $it } ; $bm get $1 } bundle-id-by-sn = { b = (bundle-by-sn $1) ; if { $b } { $b bundleId } { -1 } } # edit config config:edit org.apache.karaf.shell config:propset sshPort 8102 config:update # force a restart osgi:restart --force (bundle-id-by-sn org.apache.karaf.shell.ssh)
使用ssh:ssh命令
你可使用ssh:ssh命令来链接远程karaf控制台。 karaf@root> ssh:ssh -l karaf -P karaf -p 8101 hostname
注意:默认的密码是karaf,可是咱们强烈建议个更改。在安全模块查看更多信息。 为了肯定你已经链接到正确的karaf实例,输入ssh:info在karaf提示符。返回当前链接的实例的信息,以下所示。
Karaf Karaf home /local/apache-karaf-2.0.0 Karaf base /local/apache-karaf-2.0.0 OSGi Framework org.eclipse.osgi - 3.5.1.R35x_v20090827 JVM Java Virtual MachineJava HotSpot(TM) Server VM version 14.1-b02 ...
Karaf容许你安全的链接到远程karaf实例而没必要运行本地karaf实例。
例如,在同一台机器上快速链接在server模式下运行的karaf实例,在karaf安装目录运行如下命令: bin/client。 一般状况下,你须要提供主机名,端口,用户名和密码来链接到远程实例。若是你使用的客户端在一个较大的脚本,你能够附加控制台命令以下: bin/client -a 8101 -h hostname -u karaf -p karaf features:install wrapper
显示可用的客户端选项,输入:
> bin/client --help Apache Karaf client -a [port] specify the port to connect to -h [host] specify the host to connect to -u [user] specify the user name -p [password] specify the password --helpshows this help message -vraise verbosity -r [attempts] retry connection establishment (up to attempts times) -d [delay]intra-retry delay (defaults to 2 seconds) [commands]commands to run
若是没有指定的命令,客户端将在互动模式。
你也可使用你的unix系统中的纯SSH客户端或者windows SSH客户端像putty来链接。 ~$ ssh -p 8101 karaf@localhost karaf@localhost's password:
按Ctrl+D,shell:logout或者简单的在karaf提示符输入logout就能够断开远程控制台。
若是你已经用ssh:ssh命令或者karaf客户端链接到远程控制台,你能够用使用osgi:shutdown命令来中止远程实例。 注意:在远程控制台按Ctrl + D键,简单地关闭远程链接并返回到本地shell。
使用karaf客户端中止远程实例,在karaf安装目录/lib目录运行如下命令: bin/client -u karaf -p karaf -a 8101 hostname osgi:shutdown
一个Karaf的子实例是一个副本,你能够分别启动和部署应用程序。实例不包含的完整副本Karaf,但只有一个配置文件和数据文件夹的副本,其中包含了全部运行中的信息,日志文件和临时文件。
管理控制台命令容许您在同一台机器建立和管理Karaf实例。每个新的运行时是运行时建立的子实例。您能够轻松地使用的名称管理子实例,而不是网络地址。有关管理命令的详细信息,请参阅管理命令。
你能够在karaf控制台输入admin:create建立新的运行时实例.
以下例子所示,admin:create将使运行时在活动的运行时{实例/名称}目录建立新的运行时安装。新的实例是一个新的karaf实例而且分配一个SSH端口号基于始于8101的增量和一个RMI注册端口号基于始于1099的增量。
karaf@root>admin:create finn Creating new instance on SSH port 8106 and RMI port 1100 at: /home/fuse/esb4/instances/finn Creating dir: /home/fuse/esb4/instances/finn/bin Creating dir: /home/fuse/esb4/instances/finn/etc Creating dir: /home/fuse/esb4/instances/finn/system Creating dir: /home/fuse/esb4/instances/finn/deploy Creating dir: /home/fuse/esb4/instances/finn/data Creating file: /home/fuse/esb4/instances/finn/etc/config.properties Creating file: /home/fuse/esb4/instances/finn/etc/java.util.logging.properties Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.felix.fileinstall-deploy.cfg Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.log.cfg Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.features.cfg Creating file: /home/fuse/esb4/instances/finn/etc/org.ops4j.pax.logging.cfg Creating file: /home/fuse/esb4/instances/finn/etc/org.ops4j.pax.url.mvn.cfg Creating file: /home/fuse/esb4/instances/finn/etc/startup.properties Creating file: /home/fuse/esb4/instances/finn/etc/system.properties Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.shell.cfg Creating file: /home/fuse/esb4/instances/finn/etc/org.apache.karaf.management.cfg Creating file: /home/fuse/esb4/instances/finn/bin/karaf Creating file: /home/fuse/esb4/instances/finn/bin/start Creating file: /home/fuse/esb4/instances/finn/bin/stop karaf@root>
你可使用admin:change-ssh-port命令来改变分配给子实例的SSH端口号。命令语法是: admin:change-ssh-port 实例 端口号,须要注意的必须中止子实例才能运行此命令。
一样,你可使用admin:change-rmi-registry-port命令改变分配给子实例的RMI注册端口号。命令的语法是: admin:change-rmi-registry-port instance port,须要注意的必须中止子实例才能运行此命令。
新的子实例在中止状态下被建立,用admin:start命令来启动子实例并使之准备主机应用。这个命令须要一个标识你想启动的子实例的instance-name参数。
要查看一个特定的安装下运行的全部Karaf实例的列表,使用admin:list命令。
karaf@root>admin:list SSH Port RMI Port State Pid Name [8107] [ 1106] [Started ] [10628] harry [8101] [ 1099] [Started ] [20076] root [8106] [ 1105] [Stopped ] [15924] dick [8105] [ 1104] [Started ] [18224] tom karaf@root>
你可使用admin:connect命令链接到开始的子实例远程控制台,这须要三个参数: admin:connect [-u username] [-p password] instance, 一旦你链接到子实例,karaf提示符显示如今实例的名字,以下: karaf@harry>
在实例本身内部中止一个子实例,输入osgi:shutdown或者简单的shutdown。 远程中止子实例,换句话说,从父或者兄弟实例,使用admin:stop: admin:stop instance
你可使用admin:destroy命令永久的删除一个中止的子实例:
*admin:destroy instance*
请注意只有中止的实例能够被注销。
你也能够管理本地的karaf实例,在karaf安装目录/bin目录下的管理员脚本提供了像管理员控制台相同的命令,除了admin:connect。
> bin/admin Available commands: change-ssh-port - Changes the secure shell port of an existing container instance. change-rmi-registry-port - Changes the RMI registry port (used by management layer) of an existing container instance. create - Creates a new container instance. destroy - Destroys an existing container instance. list - List all existing container instances. start - Starts an existing container instance. stop - Stops an existing container instance. Type 'command --help' for more help on the specified command.
例如,列出全部本机器的karaf实例,输入:
bin/admin list
默认安全配置使用一个位于 karaf安装目录/etc/users.properties属性文件存储受权的用户和他们的密码。
默认的用户名是karaf,与之相关联的密码也是karaf。咱们强烈建议在将karaf转移到产品前经过编辑上面的文件修改默认密码。
在karaf中用户如今被使用在三个地方:
这三种方式的所有委托基于安全认证的相同的JAAS。 users.properties文件包含一或者多行,每行都定义了一个用户,密码和相关的角色。 user=password[,role][,role]...
JAAS角色能够被各类组件使用。三个管理层(SSH,JMX和web控制台)都使用用基于认证系统的全局角色。默认的角色名称在etc/system.properties中使用karaf.admin.role系统属性配置,而且默认值是admin。对管理层进行身份验证的全部用户必须有这个角色的定义。
这个值的语法以下: [classname:]principal
其中classname是主要对象的类名(默认以org.apache.karaf.jaas.modules.RolePrincipal),主要是这一类(默认为admin)的主要的名称。 注意,可使用如下配置ConfigAdmin对于一个给定的层改变角色:
Layer | PID | Value |
---|---|---|
SSH | org.apache.karaf.shell | sshRole |
JMX | org.apache.karaf.management | jmxRole |
Web | org.apache.karaf.webconsole | role |
为了不密码是纯文本,密码能够加密存储在配置文件中。 这能够经过如下命令轻易的实现:
# edit config config:edit org.apache.karaf.jaas config:propset encryption.enabled true config:update # force a restart dev:restart
用户第一次登陆,密码将在 etc/users.properties 配置文件中被自动的加密。加密密码在前面加上{CRYPT},所以很容易识别。
更多关于更改默认领域或者部署新领域信息将会在开发者指南中被提供。
有些应用程序须要特定的安全性提供者可用,如BouncyCastle。JVM在这些jar包的使用上施加一些限制:他们必须签署和引导类路径上可用。部署这些供应商的方法之一是把他们放在位于$ JAVAHOME/ JRE/ lib / ext的JRE文件夹中而且修改安全策略配置($JAVAHOME/jre/lib/security/java.security)以登记等供应商。
虽然这种方法工做的很好,他将会有全局的影响而且须要你配置全部相应的服务器。
Karaf提供了一个简单的方式来配置额外的安全性提供者:
Karaf提供故障转移功能,使用一个简单的锁定文件系统或JDBC锁定机制。在这两种状况下,一个容器级锁系统容许绑定预装到副Karaf实例,以提供更快的故障转移性能。
简单文件锁定机制用于驻留在同一台主机的实例故障转移配置。 要使用这个功能,按照以下形式编辑$KARAF_HOME/etc/system.properties文件中的每一个系统上的主/从设置:
karaf.lock=true karaf.lock.class=org.apache.felix.karaf.main.SimpleFileLock karaf.lock.dir=<PathToLockFileDirectory> karaf.lock.delay=10
说明:确保karaf.lock.dir属性指向相同的主从实例目录,以便当主释放从,从只能得到锁定。
JDBC锁定机制的目的就是为了存在单独机器上的故障转移配置。在此部署中,主实例拥有一个Karaf锁定数据库上的表上的锁,若是主失去了锁,等待从进程得到锁定表,并全面启动它的容器。
要使用这个功能,按照以下形式设置每一个系统上的主/从设置:
更新CLASSPATH包含JDBC驱动程序
更新KARAF_HOME/bin/ karaf脚本有独特的JMX远程端口设置,若是实例驻留在同一主机上
更新KARAF_HOME的/ etc/ system.properties文件以下:
karaf.lock=true karaf.lock.class=org.apache.felix.karaf.main.DefaultJDBCLock karaf.lock.level=50 karaf.lock.delay=10 karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
说明:
在JDBC锁定状况下若是你采用oracle做为你的数据库,在$KARAF_HOME/etc/system.properties 文件中的karaf.lock.class 属性必须指向org.apache.felix.karaf.main.OracleJDBCLock。 不然,对于你的设置初始化system.properties文件是正常的,例如:
karaf.lock=true karaf.lock.class=org.apache.felix.karaf.main.OracleJDBCLock karaf.lock.jdbc.url=jdbc:oracle:thin:@hostname:1521:XE karaf.lock.jdbc.driver=oracle.jdbc.OracleDriver karaf.lock.jdbc.user=user karaf.lock.jdbc.password=password karaf.lock.jdbc.table=KARAF_LOCK karaf.lock.jdbc.clustername=karaf karaf.lock.jdbc.timeout=30
正如默认的JDBC锁定设置,Oracle JDBC驱动包必须在calsspath中,为了确保如此你能够在karaf启动以前复制ojdbc14.jar到karaf的lib文件夹下。 说明:karaf.lock.jdbc.url 须要活动的SID,这意味着在使用这个特定的锁以前你必须手动建立数据库实例。
容器级锁定容许绑定预装到从内核的实例,以提供更快的故障转移性能。容器级锁被简单的文件和JDBC锁定机制支持。 为了实现容器及说定,添加以下内容到 $KARAF_HOME/etc/system.properties 文件中在每一个系统的主从设置上:
karaf.lock=true karaf.lock.level=50 karaf.lock.delay=10
Karaf.log.level属性告诉karaf实例引导过程带来的OSGI容器有多远。分配相同级别的绑定或者是更低的也会在那个karaf实例中被启动。
绑定开始级别在$KARAF_HOME/etc/startup.properties指定,以jar.name=levle的形式。核心系统绑定级数低于50,用户绑定级别大于50。
级别 | 行为 |
---|---|
1 | 一个“冷”的备用实例,核心绑定不会被加载到容器中,从实例将等待指导锁定须要启动服务器。 |
<50 | 一个“热”的备用实例,核心捆绑将被加载到容器,从实例等待指导锁须要启动用户级别绑定。控制台对于每一个从实例能够在这个级别访问。 |
>50 | 这个设置不建议做为用户捆绑被启动。 |
注意:挡在同一主机上使用“热”备用,你须要设置JMX远程端口为惟一值以免绑定冲突,你能够编辑karaf启动脚本以包括如下内容:
DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.authenticate=false"