本章講述如何在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"