透過 Microsoft Services for UNIX 將 UNIX 應用程式移轉到 Windows

更新日期 : 一月 1, 1

更新日期: 2004 年 3 月 26 日
由 作者:Charlie Russel,Microsoft MVP for InteropStudio B

摘要

對於想要將 UNIX 應用程式移轉到現代而有成本效益的平台的企業而言,Microsoft Windows 會是最佳的選擇,因為它擁有堅固耐用的架構、使用商用 Intel 伺服器的能力、移轉及互通性工具的套裝程式。 本文包括 UNIX 應用程式移轉到 Microsoft Windows 的原因,也討論有助於應用程式移轉的一些特殊功能和技術。 Microsoft Services for UNIX (SFU) 的互通性功能可以讓整個移轉過程變得容易,Microsoft Windows Server 2003 和 SFU 結合提供一種優良的移轉目標平台。

本页内容

簡介
UNIX 服務
移轉課題
Windows Server 2003 搭配使用 SFU 與 Linux 的比較
Windows 和 UNIX 之間的互通性
移植問題
摘要
相關連結

簡介

UNIX 過去曾經是很多企業的預設應用程式平台。 不過,由於 Intel 伺服器功能日益強大,同時它的取得成本比專屬的精簡指令集電腦 (RISC,Reduced Instruction Set Computing) UNIX 伺服器還低,這兩種優勢使得企業組織考慮要做出不同的選擇。

Intel 結構的 CPU 的功能不斷提升,不但符合摩爾定律 (Moor's Law) 的標準,甚至還有凌駕於其上的趨勢。 隨著超行緒處理器和對稱型多處理器 (SMP,Symmetrical Multi-processor) 伺服器問世,加上能使用這些設備的作業系統,Intel 伺服器擁有執行商用重要伺服器的能力是顯而易見的。

從過去以來,Intel 伺服器的成本總是比 UNIX (RISC) 伺服器低很多。 現在仍是如此,目前的 Intel 處理器功能更強了,與 UNIX 廠商提供的低容量、專屬的 RISC 相較之下,Intel 伺服器的高容量對業界是個相當吸引人的選擇。

乍看之下,採用 Intel 平台所節省的成本好像會被將 UNIX 應用程式移轉到 Intel 平台的成本抵銷。 然而,並不是平台本身提供了經營企業需要的功能 - 真正提供這些功能的,是平台上建置的應用程式。 如果採用低成本伺服器的第一個步驟即是複雜且昂貴的應用程式移轉,那麼很多企業都不會願意做這種改變。

有些公司將 Linux 視為降低應用程式成本的方法。 在他們的理解中,認為 Linux 既然是 UNIX 系統的一支,移轉過程理應是直接與簡易的。 雖然 Linux 和 UNIX 的確通用許多命令,但是兩者並不完全相同。 因此,並非所有 Linux 散佈版本和 UNIX 產品都是相同的。 實際上,移轉 UNIX 應用程式頗費功夫。

Microsoft 特別設計了一套解決方案來協助想要移轉 UNIX 應用程式的企業組織。 這套解決方案包括 Windows Server 2003、Microsoft Services for UNIX (SFU) 以及一套工具及服務。整合使用這些方法時,可以讓移轉應用程式到 Windows 的程序要比移轉到 Linux 還容易。 本文將探討有關將 UNIX 應用程式移轉到 Linux 和移轉到 Windows Server 2003 再搭配用 SFU 的課題。

UNIX 服務

Windows Server 2003 提供的多項服務能夠和 UNIX 系統完善地相互操作,包括 Telnet 用戶端和伺服器、允許跨平台列印的 lpr 和 lpd 列印服務,以及 TCP/IP 的基本連線能力和檔案移動資源。 然而,若想享有完全的互通性、耐用及多功能的移轉平台,加入 SFU 後將能提供您所有簡化 UNIX LOB 應用程式移轉的功能及工具。

SFU 提供單一整合的套件來滿足上述的互通性需求,並能執行下列功能:

  • 使用網路檔案系統 (NFS,Network File System) 進行 UNIX 和 Windows 之間的檔案分享。 SFU 提供:

    • NFS 用戶端

    • NFS 伺服器

    • NFS 閘道

  • Windows 和 UNIX 之間的遠端命令列存取。SFU 提供:

    • Telnet 用戶端

    • Telnet 伺服器

  • 完整跨平台指令碼處理能力。 SFU 提供以下項目的一致實作模式:

    • Korn Shell

    • C Shell

    • 350 個以上常用的 UNIX 命令及公用程式

  • 提供使用 Microsoft Windows Server 2003 Active Directory™ 的 Network Information System (NIS) 伺服器功能,來執行一般的網路管理。

  • Windows 和 UNIX 之間的密碼同步

  • 使用 Microsoft Windows Installer 執行安裝

  • 使用 Microsoft Management Console (MMC) 執行 UNIX 元件和服務的管理。

  • 使用 Windows Management Instrumentation (WMI) 進行 SFU 元件管理

除了這些功能之外,SFU 還可以安裝在 Windows 2000、Windows XP 或 Windows Server 2003 的電腦,並可以和多種 UNIX 電腦互通。 SFU 3.0 也能支援 Microsoft Windows NT 4.0 SP6a 和舊版 UNIX,讓密碼同步化。 它提供密碼同步的 UNIX PAM/SSOD 元件原始程式碼,並提供 Solaris 7 或 8、HP-UX 11i、Red Hat Linux 8.0 和 IBM AIX 5L 5.2. 先行編譯的二進位檔案。

移轉課題

多數企業組織考慮將 RISC/UNIX 移轉到 Intel 時,最關心的就是他們安裝在 UNIX 伺服器的應用程式,可能無法在新環境下執行,而會需要大量重寫或取代。 從實際成本及移轉的風險而言,因為變更核心應用程式可能會大幅改變企業組織的整個作業方式,這個移轉程序可能會所費不貲。 除此之外,大部分企業組織在 UNIX 管理指令碼和訓練上都曾經投注過大量的心力,實在難以割捨。

考慮這類移轉時有三大值得關注的領域:

  • 應用程式移轉,即是指應用程式的實際傳送

  • 資源移轉,即是移動支援性的資源,包括檔案、帳戶和資料庫

  • 技術移轉,即是要求您的全體員工學習支援新環境的新型專門技術

原本假設 Linux 可以輕易地達成這三項關注點,但是這個假設並未獲得證實。 應用程式及技術移轉會遇到的問題,是各種 UNIX 和 Linux 的變體版本之間皆有細微但卻普遍存在的差異。 尤其是許多應用程式都需要針對現有程式庫及執行方法的差異來進行修改,而針對公用程式、工具及 shell 的差異則需要系統管理員、開發人員及使用者做大幅的調整才可以使用。 但是如果使用 NFS 檔案系統和很多相同的設定檔,將資源從 UNIX 移轉到 Linux 應是亳不費力的。 不過 ,Red Hat 和一些其他的 Linux 版本在處理或設立群組的方式和多數的 UNIX 版本並不一致,它們為每個使用者建立不同的群組,並使用相同的群組名稱來當作使用者名稱。 想要讓應用程式運用群組權限和成員資格時,就必須先修改應用程式或是基礎環境。

而 SFU 能提供良好的移轉解決方案來因應這三項關注點。 它所提供的高效能環境,讓 UNIX 開發人員或系統管理員能夠輕鬆自在地移植應用程式及指令碼。 SFU 包含一套具有 1,900 個以上的 UNIX API,它們與在 UNIX 環境裡的運作方式同出一轍。 SFU 也包含完整的 UNIX 環境,擁有數百套 UNIX 應用程式、Korn shell 和 C shell,讓企業組織只需要作輕微變更,甚至不需變更即可輕易將自定應用程式和指令碼移植到 Windows 的環境。 因為在 Windows 環境中仍可以使用相同的技術和指令碼,所以企業組織過去在技術及指令碼方面的投資就不會損失。

以 LBM Systems, LLC 為例。該公司曾經使用 SFU 將 UniQue 和 ClusterQue 輸出管理應用程式移植到 Windows。 正如 LBM 的總裁 Steven Bardwell 曾說過:「移植到 Interix 的確相當簡單, 它不會比移植到其他 UNIX 系統更困難或花費更多的時間。」 如需關於 LBM Systems 個案研究的詳細資訊,請參閱: http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=13486

應用程式移轉

使用 SFU,不論是純字元、curse 或以 X Windows 為基礎的 UNIX 應用程式,實際移轉它們的操作都是整個移轉程序中最容易且最低風險的部分。 這項技術在核心層級被當作是一套完整的 Windows 子系統來作業,所附的公共程式提供的環境及作業方式都類似於其他的 UNIX 系統。 它能針對區分大小寫的檔案名稱、工作控制、編譯工具、shell 指令檔以及 300 個以上的 UNIX 命令與公共程式,提供單一的根目錄檔案系統及完整的支援。 因為這個子系統是 Windows 核心的一部分,不需要模擬或損失效能,即可提供真正的 UNIX 功能。 它的單一根目錄檔案系統會不讓 UNIX 環境察覺到 Windows 磁碟區式檔案環境 (C:、D: 等) 的存在,並能讓公共程式及設定檔駐留在 UNIX 使用者或系統管理員預期的位置。

資源移轉

從 UNIX 移轉應用程式時,也需要移轉那些支援應用程式的檔案系統、列印和帳戶資源。 若想同時移轉應用程式和資源,則會增加移轉的風險,並且使排解疑難的工作更加困難。

Red Hat 和其他 Linux 變體版本提供一套良好的互通性工具,包括 NFS 用戶端和伺服器,以及 NIS 帳戶管理的支援。 因為 Red Hat 設定群組的方法有所差異,系統管理員可能需要修改帳戶的基本假設內容,以建立一般的群組。但是如果是移轉到新的 Linux 環境時,此步驟就不重要了。

SFU 同時提供一套完整的互通性工具,包括 NFS 用戶端和伺服器產品,以及完整的 NIS 支援。 這些工具大幅地簡化了移轉程序,可以讓開發人員和系統管理員進行階段性的移轉。 開發人員可移轉現用的應用程式,將應用程式所使用的檔案及資料留在 UNIX,或者先移植資料和檔案,之後再移轉應用程式。 SFU 提供的互通性工具,可讓開發人員及系統管理員控制移轉時間表及移轉程序,而不必擔心資源存放的位置。

技術移轉

技術移轉是任何移轉計畫中經常被忽略,但卻是很重要的一環。 UNIX 開發人員、使用者和系統管理員的知識及技術代表企業相當大的投資部分。 如果假定由於 Red Hat 和其他 Linux 變體版本與 UNIX 類似,因此就能提供無瑕的技術轉移,這種想法嚴格說起來並不正確。 支援的命令選項和組成環境中許多公共程式及工具的輸出都有顯著的差異。 此外,雖然 Linux 的 bash shell 多與 UNIX Korn shell 相似,但是它缺少 Korn shell 的一些功能,而且指令碼若不經過大幅度的修改,也經常不能作移轉。 SFU 的 Interix 技術在 Windows 中提供完整的 UNIX 環境,讓這些技術也可以被移轉,讓它們繼續做為企業組織的資產,同時也能大幅降低學習新技術的阻礙。

SFU 使用 UNIX 系統管理員熟悉的設定檔案和系統管理公用程式,包括 inetd.confresolv.conf,這些程式都在 /etc 目錄內,也是管理員預期的位置。 這項功能可以執行簡易與低風險的傳送作業,同時還可以進行最大量的技術移轉。 如同從一種 UNIX 系統轉換到另一種一般,UNIX 的系統管理員使用的是熟悉的工具和環境,所以不需要再接受大量的訓練。 檔案既然已在熟悉的位置內,即可將指令碼和程式碼的變更動作減至最少,降低整體的移轉風險。 實際上,這些功能可已讓移植 UNIX 應用程式到 Windows 的作業,比將它們移植到 Linux 系統時更為簡易,因為 Linux 的工具和環境仍含有細微卻重要的差異。

下列是系統管理員和開發人員廣泛使用的 UNIX 環境元件。

Shell

Red Hat 和其他 Linux 變體版本主要使用的 shell 是 bash shell,並且具備 C shell (tcsh)。 Bash shell 是一種具有彈性、功能強大,具備基本 UNIX Bourn shell (/bin/sh) 的可回溯相容性,同時也具備許多 Korn shell 的功能和改良內容。 使用 Korn (/bin/ksh) shell 功能的指令碼可能需要作一些修改,而 bash 用在命令列的行為也與 ksh 有所不同。 Red Hat Linux 可以使用 Korn shell (pdksh) 的公共網域版本,但並不會預設使用這個版本。

SFU 包含 pdksh shell、/bin/ksh、符合 POSIX.2 規格的 shell,tcsh 實作 C shell 為 /bin/tcsh (並將 /bin/csh 當作符號連結)。 SFU 不提供純粹的 Bourne shell,而是提供一個符號連結到 /bin/ksh,給需要用 /bin/sh 的指令碼來使用。因為 pdksh 能提供強大的 Bourne shell 指令碼回溯相容性,所以為 Bourne shell 所寫的指令碼幾乎不需作任何修改。 至於需要 bash shell 的 SFU 使用者,可以從 Interop Systems (http://www.interopsystems.com/tools) 下載。

C shell 雖然不是主要的指令碼執行環境,但向來是許多互動式使用者和系統管理員的最愛,Red Hat Linux 和 SFU 都會提供 /bin/tcsh 給這類使用者。

公用程式

多數 UNIX 應用程式以及幾乎所有的 UNIX 指令碼都可以預期並且妥善地運用 UNIX 豐富的命令列環境。 雖然 Red Hat 和其他 Linux 變體版本也能提供很多這類相同的工具,但是不同的 Linux 版本總是有些微的混合差異存在。 許多工具並能支援略有不同的命令列選項,最後的輸出也會有些細微的差異,因而會給預期特定結果的程式和指令碼帶來問題。 有很多例子裡,特定公用程式的設計目標較注重在提供額外彈性及選項的功能,而比較不注在意 UNIX 的回溯相容性。

而另一方面,SFU 以能提供 UNIX 完整的相容性為設計目標,它包括了 300 種以上的 UNIX 公用程式,提供使用者、管理者和研發人員需要的工具。 這些 UNIX 公用程式是完整、原生的 UNIX 應用程式,其操作行為全如 UNIX 使用者之預期,並且包含從 tar 和 cpio 到 awk、sed 和 tr 的所有內容。

應用程式、指令碼和 shell 的互動式使用者可以在預期的位置找到那些公用程式。 標準的 UNIX 環境可以大幅地簡化移轉作業,因為企業組織可以善用他們既有的訓練及技術資產,並且可在不需支付大量移植成本時,再好好利用指令碼和自訂的應用程式。

Telnet 和 r 公用程式

雖然 Red Hat 的早期版本沒有包含 Telnet,目前的 Red Hat 和其他 Linux 變體大都提供 Telnet 伺服器和用戶端,以及一整組的 r 公用程式。 SFU 包含 Win32 和 Interix 的 Telnet 伺服器和用戶端,也有完全的 r 公用程式支援,提供完全的相容性和跨平台的維護,以及執行指令檔的能力。 Win32 Telnet 伺服器容許完整的連線,並且能依照伺服器獲准使用的授權連線數來限制工作階段數量。 Interix telnetd 精靈提供完整的 UNIX 相容性且使用 /bin/ksh 或 /bin/tcsh 為預設的 shell,給 UNIX 使用者一個能支援標準 UNIX 指令碼的熟悉舒適的外觀。

SFU 提供給 UNIX r 公用程式的支援,包括遠端複製 (rcp,remote copy)、遠端散發的用戶端和伺服器 (rdist 和 rdistd,remote distribution)、遠端登入 (rlogin,remote login) 和遠端 shell (rsh,remote shell)。 雖然一些企業組織可能不會在他們的環境中使用這些工具,或者是基於安全的理由而嚴格限制使用,不過它們仍然可以用作為簡單且有效的跨平台工具。 這些企業組織可以使用 F-Secure 的 SSH 商用版,或使用 Open Source 版的 OpenSSH。 OpenSSH 也可以從 Interop Systems 的網站下載。

其他元件

Linux 和 SFU 提供許多協力廠商和 Open Source 的公用程式、shell 和工具,兩者都能簡易地編譯所用的 Open Source 程式。 SFU 的先行編譯 Open Source 公用程式之最佳來源可在 Interop Systems 的 Tool Warehouse (http://www.interopsystems.com/tools/warehouse.htm) 內找到。 Interop Systems 提供大量的先行編譯工具和開發人員們可以討論移轉問題的社群論壇。

移轉原則

如果您計畫將 UNIX 應用程式移轉到 Windows,則可以運用曾經執行過移轉的開發人員之專業知識。 Microsoft 提供了大量資料來協助您將 UNIX 應用程式移轉到 Windows 環境,包括評估移轉的需求性,到提供完整移轉指南,讓您遵循特定步驟來進行成功的移轉作業。

若需詳細資訊,請參考 http://www.microsoft.com/windows2000/migrate/unix/default.asp。 您可以在 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnucmg/html/ucmglp.asp 網站, 找到有關 UNIX ANSI C/C++/Fortran 程式碼移轉的模式和實務的詳細討論內容。

Windows Server 2003 搭配使用 SFU 與 Linux 的比較

Windows Server 2003 搭配 SFU 能提供完整的 UNIX 開發及部署環境,包含 Korn shell 和 C shell,超過 300 個 UNIX 公用程式,1900 個以上的 UNIX API,以及完整的互通性工具。 雖然同時也有 Korn shell 和 C shell 的版本,Red Hat 和其他 Linux 變體版本主要使用 bash shell。 此外,雖然 Linux 的各種版本也能為 UNIX 提供類似的 API 和公用程式,但是它們並不能完全吻合,移植時可能會大費周章。 此外,移植到 Linux 本身並不是單一的目標。 雖然一些 Linux 廠商想要達成某種共同的移植目標,但這並不包括所有的廠商,而且它還在雛型階段,這表示任何想要移植到特定 Linux 散發版本的應用程式,都可能需要額外的工作才能再支援其他的散發版本。

Linux 散發版本的差異並非異常 - UNIX 本身因為由不同的廠商所支持而發展出互異的版本。 為了達成 UNIX 的可攜性允諾,POSIX 標準也應運而生。 過去 UNIX 變體版本能支援 POSIX 標準,意即它也可以支援依照這個標準所寫的應用程式。 SFU 實質上與 POSIX 相容。 如果所寫的 LOB 應用程式能運用這個可攜性標準,在移轉到 Windows 時就可享受成果。但是如果您移轉到與 POSIX 不相容的 Linux,情況就不同了,因為它尚未與 POSIX 相容。

這兩個平台之間最大的差異在於比較兩者的附加價值。 您一旦移植到 Linux 後,仍然無法使用 Windows 環境的豐富資源。 移植到 Linux 的做法只是從一個基礎平台移到另一個基礎平台。 移到 Windows 環境可以獲得明顯的高附加價值,包括從搭配您桌面環境的豐富嶄新的應用程式到 .NET 架構的 Web 服務功能。 最後,Microsoft 提供 Windows 的支援遠比 Linux 廠商為他們的散發版本所提供的層級更高,包括從廠商電話支援的線上社群到上述的移轉指南。

Windows 和 UNIX 之間的互通性

即使您決定要移轉部分或全部的主要應用程式,不論是短期移轉或長期的雙平台運作,您可能同時需要擁有 Windows 和 Unix 兩種伺服器環境的支援。 SFU 提供的互通性工具,可降低支援這兩種環境的負擔和風險。 移轉到 Red Hat 或其他 Linux 變體版本之一,與移轉到 Windows 挑戰程度相同,此外,在移轉過程中,您可能需要支援三種作業環境,因為 Windows 至少也可能是移轉環境的一部分。

互通性工具

Red Hat 和其他 Linux 變體版本主要由 SAMBA 提供 Windows 用戶端和伺服器之間的互通性。 SAMBA 使用 Windows 網路中原生的伺服器訊息區 (SMB,Server Message Block) 通訊協定,來提供和 Windows 用戶端與伺服器檔案系統的互通性。 然而, SAMBA 在與 Active Directory 和磁碟區陰影複製的相容性落後於 Windows Server 2003,因而限制了它運用 Windows Server 2003 進階功能環境的實用性。

Windows Server 2003 搭配 SFU 則能提供完全而且廣泛的互通性環境,包括可以允許 UNIX 和 Windows 和平共存與共享資源的工具。 其中包含檔案系統互通性的工具,例如 NFS 用戶端、NFS 伺服器和 NFS 閘道,在網路上都能提供檔案系統的完整互通性。 SFU 進一步能提供驗證和帳戶互通性的工具,包括 NIS 伺服器、使用者名稱對應 (UNM,User Name Mapping) 和雙向密碼同步。 另外,還有 UNIX 列印服務 (屬於基礎 Windows Server 2003 作業系統的一部分) 提供列印相容性,以及系統管理和指令碼相容性的工具,例如 Telnet、Perl、Korn shell 和 C shell。

網路檔案系統

NFS 多年來已成為 UNIX 的標準,在網路上提供一個簡單有效的方法來共享檔案系統。 SFU 包含 NFS 用戶端和伺服器兩者,可以和 UNIX 系統有完整的互通性。 NFS 閘道也是 SFU 的一部分,讓網路上所有 Windows 電腦再不需額外增加下游 Windows 電腦軟體的情形下,就可以存取網路上的 NFS 資源。

SFU 的 NFS 模組用戶端提供彈性、相容性高的 NFS 用戶端,讓您可以輕易存取舊 UNIX 伺服器儲存的檔案系統資源,對 Windows 使用者而言,完全不會感受到任何差異。 NFS 用戶端和 Windows 檔案總管的介面已完全整合,包含完整的命令列支援,能讓使用者直接存取 UNIX 伺服器儲存的檔案,不會感受到任何差異。 命令列支援讓系統管理員可以彈性地在命令列使用 Windows 或 UNIX 的語法,輕鬆跨平台處理指令碼。

SFU 的 NFS 伺服器 (Server for NFS) 模組提供 UDP 和 TCP 連線的完整支援,並支援 NFS 2 及 NFS 3,而與各種 UNIX 用戶端有完整的相容性。 UNIX 系統的使用者可以直接完全存取 Windows 伺服器的檔案系統,這對傳送及移轉應用程式有很大的幫助。

SFU 的 NFS 閘道 (Gateway for NFS) 模組提供一種機制,允許下游 Windows 用戶端不須購買或安裝額外的軟體,即可完全存取 UNIX 檔案系統資源。 NFS 的資源與閘道電腦的磁碟機代號相對應,並且使用標準的 Windows SMB 共用,可以讓 Windows 用戶端共享。 雖然進階使用者可能會比較喜歡在本機上安裝 NFS 用戶端,不過,在轉移時期使用 NFS 閘道,以最少的變更設定來讓所有使用者繼續進行存取,可以大幅地簡化移轉和互通性的課題。

注意:NFS 閘道只能安裝在伺服器層級的產品上,而不能安裝在 NFS 用戶端所在的相同伺服器上,因為這兩者是彼此互斥的。 然而,NFS 閘道整合了用戶端的存取功能,可存取它所在伺服器的 UNIX NFS 資源。

API

Windows 開發人員對屬於 Windows 開發環境一部分的 API 很熟悉,而 UNIX 開發人員則慣用 UNIX API,包括特定版本的 UNIX 所特有的 API。 SFU 包括 Interix 軟體開發工具 (SDK,Software Development Kit) 和 gnu SDK,可以讓開發人員存取 Interix SDK 中 1,900 個以上的 UNIX API,同時還支援 C 程式的 Microsoft Visual C++ 編譯器、gnu 編輯器和開發工具,其中包括 gcc、g++ 及 gdb。 原生的 Windows 開發人員可以使用他們比較熟悉的 IDE 和編譯器,而 UNIX 開發人員則有一些 gnu 編譯器和工具可供選擇,包括 gnu 的偵錯程式 gdb。

此外,種類廣泛的 Open Source 工具和公用程式中,已經移植的可以透過 Interop Systems 取得,或者可以移植到 SFU,讓開發人員可以選擇作業環境和工具。Microsoft 的 Interop Systems 合作關係 (http://www.interopsystems.com) 也提供 SFU 環境新的更新程式庫和 API。

使用者管理

SFU 包括雙向密碼同步。 這項機制能讓使用者從 UNIX 或 Windows 環境中,變更他們 UNIX 和 Windows 的密碼,大幅簡化從 UNIX 移轉到 Windows 時的互通性。

SFU 支援 NIS 的使用者驗證和它本身的 UNM 服務,同時也提供 PCNFS 伺服器以支援其他需要它的應用程式。 UNM 可以使用它本身 Active Directory 的 NIS 或既有 UNIX 的 NIS 進行驗證,或者也可以使用 PCNFS 類型的檔案。

移植問題

將一個 UNIX 應用程式移植到 Red Hat、其他 Linux 變體或到 Windows 環境中,都牽涉到很多問題。 這些問題包括使用者帳戶的移轉、現行應用程式的移轉、資料庫支援和應用程式資源的移轉。

帳戶移轉

移轉應用程式只是整個解決方案中的一部分, 您還需要移轉使用者社群和應用程式的安全性配置。

NIS 可用於多類型的 UNIX 平台,提供單一網路驗證和登入機制。 SFU 支援 NIS 做為 NFS 存取驗證機制,提供完整的 NIS 伺服器 (Server for NIS),讓 UNIX 系統管理員可以將主要的 NIS 資料庫移動到 Active Directory,並且將現有的 UNIX 帳戶移轉到 Windows。 Red Hat 和其他 Linux 變體版本支援 OpenLDAP,但是並不會支援完整的單一登入,因而需要額外的系統管理能力,但是 Red Hat 系統管理尚未整合這個部份。 此外,由於多數的企業組織都有 Windows 的使用者,Red Hat 缺乏 Active Directory 的支援也限制了可選擇的項目。

UNIX、Linux 和 Windows 帳戶本質上是不同的,並且使用不同的驗證機制。 在移轉階段中,當使用者、開發人員和系統管理員需要存取 UNIX 和 Windows 伺服器資源時,這些差異經常會造成顯著而微妙的問題。 即使仔細地將這些帳戶的登入設成一樣時,還是會有一些差異 - UNIX 機器上的使用者 jdoe 仍然不同於 Windows 的使用者 DOMAIN\jdoe 。 如上一節曾提到的,為了協助傳送和移轉程序,SFU 包含了 UNM 服務。 即使 UNIX 和 Windows 的帳戶的登入不同,UNM 提供 UNIX 帳戶對應到 Windows 帳戶,以及 Windows 帳戶對應到 UNIX 帳戶的機制。 UNIX 移轉至 Windows 期間,這項功能大幅地簡化了帳戶維護的工作,只需適當的認證,即可以讓使用者作完全的存取。 您只需在網域中建立及維護單一的 UNM 伺服器,簡化了維護及設定的課題。

POSIX

SFU 和尚無法完全與 POSIX 相容的 Red Hat 和其他 Linux 散發版本不同。SFU 具有符合 POSIX.1 的子系統,包含完整 POSIX 規格的支援,也支援其他擴充和功能,例如,通訊端、Berkeley Software Distribution (BSD) 4.4 介面、System V 處理程序之間通訊 (IPC,Interprocess Communication) 機制、虛擬終端以及不屬於 POSIX.1 標準的記憶體對應檔案。

依照純粹 POSIX.1 規格而寫的應用程式、以及混合使用條件式編譯 (#ifdef 前置處理器命令) 或包裝函式來處理可能替換選項的應用程式,都不需修改即可移動到 SFU 的子系統。 將軟體移植到 SFU 子系統的動作包括:

  • 盡量使原始檔具有可攜性。 如果您寫的是純粹的 POSIX 應用程式,它應該只會在 Interix 作重新編譯,但是幾乎沒有任何應用程式是純粹的 POSIX 應用程式。 了解您的應用程式與 POSIX 之間的差異,並且使用所提供的移轉原則,可以協助您順利地進行移轉。

  • 使用支援的 POSIX 擴充。 SFU 支援 POSIX,同時也支援取自其他標準的一般擴充和 API,這些標準包括 Single UNIX Specification 和取自傳統 UNIX 系統的擴充,例如 BSD 或 System V 系出物件。

  • 若要探討 SFU 的子系統的特定課題,請參閱《UNIX 應用程式移轉指南》(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnucmg/html/ucmglp.asp)(英文)。

擴充

SFU 能支援一些嚴格 POSIX.1 標準以外的擴充,包括 XPG4.2 規格。 若要善加利用這些擴充,將 #include 陳述式放入任何標頭檔之前,您需要在程式碼的開頭使用 #define _ALL_SOURCE 1。 否則,系統便會採用較嚴格的 _POSIX_SOURCE。

Interix SDK 包含的擴充有:

  • 記憶體對應檔案

  • System V IPC 機制,例如共用的記憶體、訊息佇列和旗號

  • Berkeley 形式通訊端

  • BSD 字串和記憶體函式,例如 Single UNIX Specification 所包括的 bcopy() 和 strncasecmp(),還有 BSD 4.4 strsep() 和 strcasestri()

  • ncurse 套件和 termcap 常式的 curse 和終端常式

  • 支援 BSD 和 System V 兩種方式的虛擬終端

SFU 的特定課題

與傳統的 UNIX 比較,在 SFU 的子系統執行一些程式碼時,可能會造成一些問題。 特別是傳統 UN IX 系統中常會忽略的未初始化指標解除參照的情形,會在 SFU 會造成分割錯誤 (segmentation fault)。 即使忽略這項實務,結果仍會導致細微的問題,因此,這種解除參照會被視為不良的編碼,不建議您使用。 雖然這會讓您在初步的移植花費一些功夫,但是移植完成之後,應用程式會比較耐用。

Windows 使用的安全性系統能比傳統 UNIX 系統所使用的還要嚴格。0 /etc/passwd 和 /etc/group 檔案所定義的使用者識別碼 (UID) 和群組識別碼 (GID) 組的概念,已被單一安全性識別碼 (SID,Single Security Identifier) 所取代,這個識別碼含有獨特的網域名稱/登入名稱組和網域名稱/群組名稱組,都是單一命名空間的一部分。 由於沒有 /etc/passwd 或 /etc/group 檔案,開發人員需要以不同方法處理 struct passwd。 例如,getpwnam() 和 getgrnam() 呼叫程序會接受 domainname+username 組,不只是接受使用者名稱或群組名稱,同時會取用 Windows 使用者帳戶的 [描述] 欄位文字來填入 pw_gecos。

X Windows

Interix SDK 包括 X11 程式庫、標頭檔和各種建立 X Windows 應用程式的工具。 然而,SFU 並包括 X Windows 伺服器,因此需要在本機工作站的 X Windows 顯示的應用程式必須安裝 X Windows 伺服器程式。 有一些優良的 X Windows 伺服器產品可供選用,其中包括專為 Interix 所撰寫,由 Interop Systems 提供的 Interop X Server 8.0 for SFU/Interix。

多數為 X Windows 所撰寫的程式碼會假設具有 /usr/X11 的目錄結構,但是 Interix 使用特定版本的 /usr/X11Rn 目錄結構,當中的 n 已被 X11 的版本層級所取代。 最佳的處理差別方式是建立符號連結來指向新的目錄,而不需要在應用程式變更任何程式碼。 SFU 3.0 版只包含 X11R5,但是 Services for UNIX 3.5 含有 X11R6.6 (2004 年 1 月發行),您可以到 Interop Systems Tool Warehouse (http://www.interopsystems.com/tools/warehouse.htm) 網站為需要 SFU 3.0 X11 更新版的應用程式下載 X11 的更新版本。

Curse

對於使用 curse 的字元模式應用程式而言,Interix SDK 包含 Eric S. Raymond 和 Zeyd M. Ben-Halim 撰寫的 curse 的 ncurses 實作。 關於這個相容性高且耐用的 curse 實作模式,在 SFU Help 應用程式中提供了詳細的說明,以及有關撰寫 curse 應用程式和 ncurse 實作特殊資訊的完整說明文件。

摘要

以 Intel 為基礎的系統現在已經達到商業應用程式需求的效能層級。 這項因素結合了這些系統低成本的特點,開始吸引各公司考慮將應用程式移轉到 Intel 平台。

雖然將 UNIX 應用程式移轉到 Red Hat 或其他 Linux 變體版本的 Intel 平台,像是個很自然的選擇,但是這項選擇並非不必付出代價,也絕非沒有問題:

  • 缺乏應用程式及管理的整合,增加開發和維護 Linux 應用程式的總成本,

  • 沒有可以提供完整支援的單一來源

  • 廣泛的硬體支援,但是驅動程式的品質參差不齊,而且不具備憑證或驅動程式驗證

Microsoft Windows Server 2003 搭配 SFU 提供能支援原生 UNIX 應用程式的工具和環境,而且轉換的成本也比 Linux 需要的少。 此外,移植到 Windows Server 2003 之後,利用 Windows Server 2003 環境的功能,您可以有很多擴充應用程式的機會,包括 .NET Framework 和 Microsoft 應用程式庫。 Microsoft Windows Server 2003 搭配 SFU 是理想的作業系統平台,可裝載舊版 UNIX 環境的應用程式。

以 Windows Server System 為移轉目標可享有許多有利的優點,其中包括:

  • 擁有整合的解決方案,使用一致的應用程式、伺服器、用戶端和平台管理

  • 透過 MMC 擁有強大而集中的管理能力,可擴充的嵌入式結構,和「群組原則」散發系統

  • 全球最強大的支援組織和社群,經過廣泛的測試、開發和認證服務為後盾,多數發生單點失敗的問題與針對它們做成的解決方案

  • 耐用並可以擴充的平台,具有精密的開發工具,眾多可用的應用程式,和透過 .NET 結構即可輕易取得的 Web 服務

相關連結

如須進詳細資訊,請參閱下列的資源:

顯示: