從源碼配置和構建 Samba
和大多數(shù) Linux 軟件一樣,Samba 是開源的,您可以得到程序員所用的源代碼文件,然后編譯成您自己系統(tǒng)的一個二進制文件包。這樣您就可以運行新的軟件而不是版本維護人員所提供的舊版本,調整編譯時間選項,設置編譯器特性實現(xiàn)最優(yōu)性能,甚至更改源代碼。學習操作方法。
獲取 Samba 源代碼
Samba 源代碼在 Samba 網(wǎng)站中提供。如果您對從源代碼編譯和安裝軟件比較熟悉,使用 Samba 可能不會有麻煩,但是,由于 Samba 對許多安裝的關鍵特性,您需要格外注意,確保您的軟件是您所信任的。為此,Samba 開發(fā)人員提供認證密鑰,您可以用來驗證您的下載。
下載一個源 tarball
您可以從主 Samba Web 頁面下載 Samba 源代碼。一個鏈接連接到主頁上顯示的最新穩(wěn)定版本(撰寫本文時是版本 3.5.6)。單擊它獲取這個版本,tarball 出現(xiàn)在您的 Web 瀏覽器將其下載的地方。下一代 Samba(Samba 版本 4)的一個可下載鏈接也出現(xiàn)在主頁面上;然而 Samba 版本 4 目前正在進行 alpha 測試,已經(jīng)好幾年了。如果您一定要試用其功能或者想要幫助 Samba 開發(fā),可以使用它。
構建您自己的提要您可以構建一個 RSS、Atom 或 HTML 提要,以便在我們添加新文章或更新內容時收到通知。訪問 developerWork RSS 提要。選擇 Linux 作為專區(qū),Articles 作為類型,輸入 Linux Professional Institute 作為關鍵字。然后選擇您想要的提要類型。在主下載鏈接附近,您將發(fā)現(xiàn)一個到當前版本發(fā)行說明的鏈接,還有另一個到簽名的鏈接,您可以用來識別軟件的完整性。如果您的目的是驗證軟件的完整性,就應該下載簽名文件。(要實現(xiàn)這一點,需要右鍵單擊該鏈接。)這個文件稱為 samba-version.tar.asc,其中 version 是 Samba 版本號。
額外下載選項在 Samba 下載頁面出現(xiàn)。這個頁面包括到舊版 Samba 歸檔文件的鏈接;使用 Git 下載軟件的操作指南、Control Version System、以及其他工具;到相關工具的鏈接,比如圖形化用戶界面管理器和用于其他平臺的 Server Message Block (SMB)/Common Internet File System (CIFS)包;等等。一個尤其重要的鏈接是到 Samba 包 GnuPG (GPG) 密鑰的鏈接。如果您想要驗證 Samba 包的真實性,必須下載該文件(samba-pubkey.asc),如下所述。
驗證軟件真實性
不驗證軟件的真實性,也可以解壓、編譯、安裝和使用 Samba。但是,由于服務器極其重要,運行少數(shù)必要命令來驗證其真實性通常是個好主意。執(zhí)行以下步驟:
1、確保您已經(jīng)下載了 samba-version.tar.asc 和 samba-pubkey.asc 文件。
2、輸入 gunzip samba-version.tar.gz 來解壓(而不是用 untar 命令)這個打包文件。
3、如果您還沒有這么做,輸入 gpg --import samba-pubkey.asc 將 Samba 公共密鑰導入到您的 GPG 密鑰環(huán)。
4、輸入 gpg --verify samba-version.tar.asc 驗證這個密鑰。這個程序應該響應類似的消息:
gpg: Signature made Thu 07 Oct 2010 02:23:24 PM EDT using DSA key ID 6568B7EA gpg: Good signature from "Samba Distribution Verification Key <samba-bugs@samba.org\>"
輸出結果可能繼續(xù)是一條消息,大致意思是密鑰不能被一個可信簽名所認證。這條消息強調了剛才描述的驗證過程的一個局限性:如果主 Samba 網(wǎng)站被破壞,入侵者可能會使用假冒版本替換 Samba 包和兩個密鑰,這可能會誤導您接受虛假密鑰。在某種程度上,您可以通過在第 4 步 gpg 中使用 --keyserver wwwkeys.pgp.net 選項來保護您自己。該選項導致 gpg 將檢索來自 wwwkeys.gpg.net 的密鑰作為驗證過程的一部分。除了 Samba 服務器之外,有些人發(fā)布的假 Samba 包可能會破壞這個密鑰服務器。
解封 tarball
假設您的軟件包已經(jīng)通過了驗證步驟(或者,如果您不想再為此步驟而傷神),您可以解封您的源代碼 tarball。在您的主目錄下,或者在 /usr/src/ 這樣一個路徑進行該操作,其目的是保留源代碼進行軟件的本地安裝。如果您在 /usr/src/ 解封源代碼,您可能需要請求根權限或者更改對 /usr/src/ 的訪問權限,使普通用戶可以寫入此目錄。
無論您怎樣做,都需要切換到您想要將源代碼解壓到其中的目錄區(qū)。然后輸入以下命令:
$ tar xvf ~/samba-version.tar
該命令假設您已經(jīng)解壓了 tarball,而且位于您的主目錄區(qū)。如果 tarball 仍然是壓縮的,您可以先解壓它,或者將 z 添加到 tar 命令中,然后更改文件名,命令如下:
$ tar xvzf ~/samba-version.tar.gz
如果文件駐留在其他位置,而不是主目錄區(qū),應相應調整路徑。當然,您還應該更改文件名來反映您所使用的版本。
在解壓這些文件時,該命令生成一個文件列表。如果您看到錯誤消息,可能是您沒有權限寫入當前目錄,或者可能是耗盡了可用磁盤空間。一旦任務成功完成,您將看到出現(xiàn)一個新的子目錄:samba-version。這就是您的 Samba 源代碼樹。
編譯 Samba
源代碼現(xiàn)在已經(jīng)可用,可以開始編譯流程了。在開始之前,檢查您的系統(tǒng)中的必備軟件。您必須在執(zhí)行實際編譯之前配置該軟件。您可能會遇到問題,但您必須解決。
安裝必備軟件
要編譯 Samba,必須提供其他一些軟件包,最引人注目的就是 GCC。GCC 是 C 語言的一個編譯器集合,大多數(shù) Samba 都是用 C語言編寫的。在大多數(shù) Linux 版本中,不出預料,您可以從一個名為 gcc 的包中安裝 GCC。另一個關鍵開發(fā)工具是 make,這可以調用 gcc 和其他開發(fā)工具,調用模式由 Samba 開發(fā)人員決定。
Samba 代碼依賴其他幾個 libraries— 軟件包,為其他程序的使用提供支持功能。這些庫可能已經(jīng)安裝在您的計算機上了,但要編譯一個程序,您需要庫的頭文件,這通常安裝在單獨的軟件包(名稱以 -dev 或 -devel. 結束)中。至少,使用您的版本的打包工具確保libc 或 libc6 開發(fā)庫已安裝。有些庫需要,有些庫不需要,具體取決于您的配置選項。如果一個庫找不到,configure 腳本 — 有可能是構建進程自身— 將生成一個錯誤消息,您可能要追查到相關庫。
很多發(fā)行版可以很容易地在一次操作中安裝一個開發(fā)工具和庫的基本選項。例如,在 Ubuntu 中,您可以安裝 build-essential 包。在諸如 Fedora 這類版本中,在安裝操作系統(tǒng)時可以安裝大量軟件包,這樣如果您在安裝操作系統(tǒng)時知道您的計算機將用于軟件開發(fā),那么您可以在那時選擇相關包。如果您找到這樣一個適合您的操作系統(tǒng)的選項,您不得不逐個安裝軟件包。
配置 Samba
要配置 Samba,首先更改 Samba 源代碼主目錄的 source3 子目錄。該目錄有供主要 Samba 包使用的源代碼。
注意: Samba 源代碼主目錄的其他子目錄保存輔助程序、支持程序、文檔等等的源代碼。例如,客戶端子目錄保存與 Linux 作為客戶機安裝 SMB/CIFS 共享的能力相關的文件;swat 子目錄有 Samba Web Administration Tool (SWAT) 源代碼。構建 Samba 主文件包也需要編譯這些程序,但是您可能需要手動編譯其他程序。編譯 Samba 主體,在 source3 子目錄中,構建關鍵 smbd 和 nmbd 服務器程序以及支持庫和一些相關工具。
configure 腳本處理配置流程,最簡單的情況下,您可以輸入 ./configure 使用其默認選項來配置 Samba。很多參數(shù)都可以對編譯時間選項進行微調。輸入 ./configure --help 來查看選項清單。(如果您在一個控制臺上工作,不要上下滾動,您可能想將輸出重新指向一個文件,這樣您可以通過 less 詳細閱讀或者在一個文本編輯器中閱讀。)
您也可能想要設置各種環(huán)境變量,這也在 ./configure --help 輸出中有詳細描述。大多數(shù)情況下,默認就可以了,但是,如果您對相關系統(tǒng)有足夠的了解,您可以調整選項以滿足您的需求。例如,您可以設置 CFLAGS 環(huán)境變量來調整您的 C 編譯器標記。如果您對環(huán)境變量不是很了解,最好不要管它。
您詳細閱讀了選項和環(huán)境變量后,您就可以配置您的 Samba:
$ CFLAGS="-O3" ./configure --without-ldap
該示例告訴腳本使用 -O3 GCC 編譯器,然后編譯 Samba ,不需要支持 Lightweight Directory Access Protocol。您可以更改或忽略這些選項,當然,根據(jù)您安裝的版本視情況而定。
編譯軟件
實際上,編譯軟件對于您而言不費吹灰之力。僅輸入:
$ make
結果是出現(xiàn)一系列代碼行,顯示 make 實用工具正在進行的處理,如下:
Compiling lib/netapi/joindomain.c Compiling lib/netapi/serverinfo.c Compiling lib/netapi/getdc.c
運氣好的話,這一進程將繼續(xù)直至軟件被編譯,這很可能需要幾分鐘,但具體時間稍有差異,具體取決于您的計算機的速度。如果您的機器運行不止一個處理器或者多核處理器,您可能需要使用 -j 選項來 make,使其同時運行多個編譯任務,因而加快進程速度。例如,您可以輸入 make -j 4,使得 make 可以同時運行 4 個源代碼文件。軟件編譯完成后,您可以使用 install 目標運行 make 來安裝它:
# make install
盡管您可以作為一個普通用戶執(zhí)行上述操作(假設您像那個用戶那樣擁有對源代碼目錄樹的 Write 訪問權限),但是使用 make install 需要您有 root 權限,所以該命令將 Samba 二進制文件和文檔復制到計算機的系統(tǒng)目錄中(通常在 /usr/local/ 中,除非您通過 configure 腳本選項更改了該位置) 。
解決問題
很遺憾,配置和編譯有時會失敗。這類問題最常見的原因是庫的缺失。如果配置失敗,您可能會在輸出底部附近看到一個消息,指出缺失什么 — 例如,該消息可能指出不能找到 Pluggable Authentication Module 庫。然后,您可以使用您的系統(tǒng)包管理工具,比如 Synaptic 或 Yumex,來搜索和安裝相關軟件。記住,您可能需要將開發(fā)庫與主庫文件包分開安裝。
您可以以類似的方式在 make 階段處理錯誤;然而這類錯誤通常生成大量錯誤消息。不要管列表中后面出現(xiàn)的錯誤,向上滾動找到第一個錯誤消息。通常,一個錯誤會導致另一個,以此類推。更正了第一個錯誤就打破了這鏈條,通常會使軟件能夠正確編譯。
更正 make 錯誤可能比更正 configure 錯誤需要更多的說明,因為 make 錯誤可能反映文件缺失甚至文件中不正確的元素。如果一個缺失的文件是罪魁禍首,那么它的名稱通常就是一個線索,試著找到您版本的發(fā)行包,去掉文件名中的所有擴展名;這樣會幫助您找到一個丟失的配置庫(configure 忽略了的)進行標記。如果這也失敗的話,使用文件名嘗試一個 Web 搜索,這可能引導您找到需要安裝的庫的名稱。如果錯誤是有關錯誤語法的,問題可能更嚴重。您可能會禁用與 configure 腳本選項相關的特性;然而您可能需要升級(或降級) 您的 C 編譯器或者您想要編譯的 Samba 版本。如果您正在處理軟件的一個預發(fā)布版本,您可能會遇到一個 bug,需要您自己進行修補。這類任務超出了本文的范圍,您需要向 Samba 開發(fā)人員或經(jīng)驗豐富的程序員尋求幫助。
【編輯推薦】