1. 程式人生 > >Openshift原始碼與運作方式初步分析

Openshift原始碼與運作方式初步分析

大致看了一下原始碼,然後參考redhat給的liveCD,分析出一些Openshift的大致運作方式。

首先:openshift是通過打包成RPM來安裝的,redhat上面的https://openshift.redhat.com/community/wiki/rebuild-openshift-origin-packages就是再說如何將源程式build成為RPM檔案。RPM大致介紹可以看http://en.wikipedia.org/wiki/RPM_Package_Manager。每個RPM都有一個以spec結尾的描述檔案,build的時候這個描述檔案來進行build。

從github上面取下來的源程式目錄結構如下:


每個資料夾大致的內容:

  • build:這個資料夾是用來建立一個Openshift Origin的環境以及提供一個liveCD的kickstart(Installs the OpenShift Origin environment locally and provides a live-cd kickstart)。這個資料夾進入之後有兩個內容,一個rakefile還有一個openshift origin的資料夾
    • rakefile是用來為ruby rake命令執行提供的描述檔案。rake是ruby的一個類似與make的工具。我們來看一下這個rakefile大致的內容。rakefile裡面定義了許多的task,可以在rake的時候顯式地呼叫他們來執行相應的任務,當然task也是可以互相呼叫的。在這個檔案中的task包括許多build、建立product或者dev的 cd、product或者dev的install。建立livecd,clean等。需要更多的研究
    • openshift origin裡面首先可以看到一個spec檔案,這個檔案就是描述如何build RPM的。在那個rakefile中也可以看到對這個檔案的引用:specs   = Dir.glob("#{basedir}/**/*.spec")。spec檔案的格式可以參考:http://hlee.iteye.com/blog/343499。看其他的資料夾,這些剩下的資料夾大部分會被拷貝至目標安裝系統的檔案系統的某個位置,在spec的%install中可以找到相應的處理
      • config資料夾:配置的引數,包括ssh key、連線限制等
      • doc資料夾:就是對openshift的說明,一個get started的頁面,另一個txt檔案
      • init-script:如果沒有搞錯,應該是livecd的啟動。裡面的指令碼寫著:live: Late init script for live image。反正它必然是一個程式的啟動指令碼,因為最終被放到init.d裡面去了
      • kickstart:不明。。
      • skel:放到/etc/skel/目錄下面的一些,目前就兩個desktop檔案,就是livecd進去之後的一個gnome和一個firefox
  • cartridge:各種支援的cartridge。然後每個cartridge資料夾裡面的結構也是比較簡單的,就是一個spec檔案和其他資料夾,spec檔案描述如何將RPM安裝至目標系統中。然後info資料夾是cartridge的主要執行指令碼及資料所在。這個資料夾會被拷貝至目標系統檔案系統中。比如在liveCD中,位置為:/user/libexec/stickshift/cartridges。至於在執行的時候如何呼叫info中的指令碼,則應該是ruby的事情了
  • stickshift:ruby主程式。裡面包括了其各個模組:broker、common、node、controller以及我不認識的abstract。每個模組當中都有相應的desc檔案描述如何建立RPM。具體的就不清楚了,還沒有分析
  • swingshift:是一個提供使用者認證的可選外掛,MD5+salt的方式。同時使用mongodb作為持久化儲存。
  • uplift:提供動態DNS服務
  • gearchanger:message/log control
  • rel-eng:版本資訊