2008-10-31 76 views
8

我們有一個Linux服務器應用程序,它由許多開源工具以及我們自己編寫的程序組成。理想情況下,我們希望能夠在任何常見的Linux發行版上安裝此應用程序。爲Linux應用程序編寫通用安裝程序的最佳方法?

在過去,我們已經編寫了perl腳本來自動安裝此應用程序。不幸的是,由於不同Linux發行版的特性,這些安裝腳本中的邏輯變得非常複雜,並且可以隨着每個受支持的發行版的新版本的發佈而變化。因此,維護安裝程序成爲項目中耗時最長的部分之一!

我正在尋求幫助,無論是框架,文檔,代碼示例,這可以使此過程更輕鬆。以下是類型的東西,我們的安裝程序需要做的:

  • 創建用戶/組帳戶

  • 創建具有所有權特定目錄樹和權限

  • 安裝開源應用程序,可能編譯他們從源代碼安裝

  • 將預編譯的二進制文件,腳本,配置文件和文檔插入特定的目錄

  • 註冊初始化式啓動和關機腳本

  • 生成加密密鑰

  • 驗證連接到中央服務器

回答

9

除了安裝程序的方法,我認爲比安裝時使用單個腳本更好的方法是創建一個構建系統,該構建系統可生成.deb或.rpm文件,以便在每個必須支持的系統上進行安裝。

一個窮人的方法可能是使用checkinstall,它通過'make install'安裝的文件創建包。因此,您需要在每個系統上構建您的應用程序,並以發行版本機格式創建該包。

1

Autopackage幾年前試過,不知道它有多普遍,但工作得很好(當時是唯一真正普遍的方式)。當然,你必須提供一些LSB兼容的方法來自行設置適當的目錄,但這些軟件應該可以幫助你。

雖然仍有可能是Linux發行版中過多的多樣性做一切在一個完全平臺無關的方式,但我可能是錯的。

2

我相信你描述的大多數任務在Linux發行版之間是相當標準化的。根據我的經驗,下面應該工作Debian的家庭(包括Ubuntu)和紅帽家庭(包括Fedora和CentOS的):

  • 創建用戶/組帳戶 - adduser命令
  • 創建的目錄樹 - mkdirinstall,或者只是擴展一個tarball
  • 安裝開源應用程序 - 除非你有特別深奧的需求,否則這應該留給發行版的包管理器。
  • 安裝文件 - install,或者拓展一個壓縮包
  • 啓動和關機腳本 - install/etc/init.d然後符號鏈接到/etc/rc*.d

的VMware Server是免費提供用於Linux和做其中大部分你所描述的任務。它使用Perl和可能的shell來進行安裝和配置,所以你可能會看到它需要的方法。

但是,作爲Linux管理員,我強烈推薦更喜歡與我的軟件包管理系統集成的應用程序。換句話說,像Vinko Vrsalovic建議的那樣創建.deb和.rpm文件。建設包是非常有據可查:

1

您可能想嘗試BitRock InstallBuilder。它是一個跨平臺的安裝工具,可以讓您完全按照您的要求進行操作(添加用戶,安裝服務,安裝預編譯的二進制文件等)。儘管其他一些帖子提到了許多可以在腳本中使用的工具,但問題是每個Linux發行版都有點不同,而且當您需要使用簡單的任務(如添加服務的用戶或安裝程序)時,這些任務突然變得非常重要在Debian,Ubuntu,Mandriva,RedHat,Gentoo等平臺上執行。一個好的跨平臺安裝程序應該將您與所有這些隔離。像MySQL,SugarCRM,Zenoss,Jaspersoft,Groundwork等許多​​都基於我們的技術構建了安裝程序,正因爲如此(除了它們的常規源代碼tarball等)外,我們還爲開源項目提供免費許可證。

0

Autopackage現在與Listaller項目合併。文檔還不是很徹底,但似乎在工作。

相關問題