blob: a179b431038de00d3f5474ba6422dbedcdcc22e6 (
plain) (
tree)
|
|
wspkg - 用 cpp 管理工作站軟體清單
=================================
217 工作站實驗室 <217ta@csie.ntu.edu.tw>
wspkg 嘗試用簡單的工具,同時管理多個平臺的軟體清單,並製作 meta-package。
我們的主要目標是替換掉工作站上原有與平臺相關、手動生成的 meta-package。
簡介
----
快速操作說明
~~~~~~~~~~~~
|=========================================================================
| `make -f Makefile.<platform> all` | 產生 meta-package 和文件
| `make -f Makefile.<platform> clean` | 清除產生的套件檔
| `make -f Makefile.<platform> clean-exe` | 清除產生的可執行檔
| `make -f Makefile.<platform> clean-doc` | 清除產生的文件
| `make -f Makefile.<platform> distclean` | 清除所有產生的檔案
|=========================================================================
`<platform>` 請自行替換成要使用的平臺名稱,例如 `debian` 或 `freebsd` 。
目前簡單的架構
~~~~~~~~~~~~~~
-----------------------------------------------------------------------------
+--------------------------+
| 主要的清單與對應的對照表 |
| packages.h |
| debian.pkg |
| freebsd.pkg |
+--------------------------+
|
| cpp 與其他簡單的處理
v
+--------------------------+
| 不同系統的軟體清單 |
| debian.list |
| freebsd.list |
+--------------------------+
/ \
/ \ 轉換成各平臺所需格式的 script
/ \
+---------------------+ +-----------------------------+
| Debian meta-package | | FreeBSD meta-ports Makefile |
+---------------------+ +-----------------------------+
-----------------------------------------------------------------------------
目前支援的平臺
~~~~~~~~~~~~~~
目前我們已經大致完成
link:debian.doc/debian.html[Debian (HTML)]
link:debian.doc/debian.pdf[Debian (PDF)] 與
link:freebsd.doc/freebsd.html[FreeBSD (HTML)]
link:freebsd.doc/freebsd.pdf[FreeBSD (PDF)]
的支援。為了避免讓 README 內容太多導致重點太過混亂,所以我們將個別平臺的文件
放到獨立的檔案中。
實作
----
為什麼要做這個東西
~~~~~~~~~~~~~~~~~~
我們系上的工作站使用了兩種以上的作業系統(目前是 Debian 和 FreeBSD),但是因為
不同系統安裝軟體的方法不同,且並非每個軟體都跨平臺,使得以往不同作業系統的軟體
清單不同步,累積了不少差異。
我們希望能藉由簡單的方法,讓不同作業系統的工作站上安裝的軟體能夠同步。當然,我
們也希望這個軟體能用於管理其他系統,並不限於系上的工作站。
如何達成這個目標
~~~~~~~~~~~~~~~~
產生一個簡單、已排序、不重複的清單,再藉由編寫 platform-dependent 的 script
來產生各平臺的 meta-package。
使用
----
如何修改這份清單
~~~~~~~~~~~~~~~~
我們有一個主要的軟體列表和各平臺的對應表:
. 主要的軟體列表: `packages.h` ,由大家熟悉的 C 語言前處理器(cpp)指令組成。
如果軟體在各平臺的名稱相同,那麼就直接寫在這個檔案中;如果不同,那可以
定一個 macro,再到各平臺的對照表將這個 macro 對應到真正的軟體名稱。注意
這檔案有對軟體分類,新增或修改軟體清單時記得要寫在 `#ifdef` 和 `#endif` 中。
. 各平臺的對應表: `*.in/*.pkg` ,同樣由 cpp 指令組成。這個檔案中要定義(#define)
在 packages.h 中的使用的 macro 所對應的真正軟體名稱。一般情況下,這個檔
案中只會出現 #define 指令。
現在可以執行 `make` 來產生 meta-package 了!
各個目錄與檔案的用途
~~~~~~~~~~~~~~~~~~~~
主要的檔案和目錄
^^^^^^^^^^^^^^^^
- `packages.h` - 主要的軟體列表,可說是最重要的資料檔。
- `*.doc` - 放置與平臺相關的文件。
- `*.in` - 放置與平臺相關的輸入檔案。
- `*.out` - 放置與平臺相關的輸出檔案。
- `*.files` - 放置與平臺相關,但產生 meta-package 過程中用不到的檔案。
這裡可以放各種準備環境用的檔案。
一些重要的資料檔
^^^^^^^^^^^^^^^^
- `*.in/*.pkg` - 各平臺套件名稱不同時使用的對照表。
- `*.in/*.sed` - 臨時修改套件清單用的 sed 指令檔,通常用於暫時刪除目前無法使用
但以後仍然可能用到的套件。
- `*.out/*.list` - 輸出的已排序而不重複的套件清單。
開發
----
基本原則
~~~~~~~~
. 用簡單易懂的格式。
. 一個小程式只做好一件事情。
. 除 `/bin/sh` 和 `/usr/bin/env` 外,不要使用絕對路徑。
. 用 shell script 寫大部分的小程式,用 Makefile 組合這些小程式。
. 只有在其他工具效能太差時,才考慮改用 C / C++ 。
可攜性要求
~~~~~~~~~~
因為軟體清單常常是用在剛安裝好,還缺少很多軟體的系統,所以我們希望使用這份清單
時,能盡量不依賴外部程式,以避免為了處理清單還需要安裝額外軟體的麻煩。原則上
我們接受使用多數 POSIX 標準內有規定的程式和語言。
我們認為以下軟體是我們可以依賴並假設一定會存在的:
. POSIX shell (`/bin/sh`) 與基本的系統指令。
. POSIX sed (`/usr/bin/sed`)
. POSIX awk (`/usr/bin/awk`)
. POSIX make (`/usr/bin/make`),我們的 Makefile 不依賴 GNU 或 BSD make 提供的。
. POSIX standard C compiler (`/usr/bin/c99`)。
. C / C\++ 編譯器與前處理器,請用 `cc` / `cpp` / `c++` 這類通用的名稱,
不要使用 `gcc` / `g++` 或 `clang` / `clang++` 這類與特定編譯器實作
有關的名稱。雖然 `CC` 也是通用的、代表 C++ 編譯器的名稱,不過因為
和 `cc` 只有大小寫的差別,所以也不要使用。
當然,如果您正在準備你正在寫 `debian.*.sh` 或 `freebsd.*.sh` 這類只使用在
特定平臺的 script,您可以使用只在特定平臺才有的程式。例如 `debian.*.sh` 內
可以使用 `bash` 和 `perl` ,而 `freebsd.*.sh` 內可以使用 `csh` 和 `bsdtar` 。
但我們仍然建議盡量不要使用這些程式,以方便在不同的平臺測試與產生清單。
待改進事項
~~~~~~~~~~
- 希望能有自動檢查是否有打錯字功能的方法。目前 FreeBSD 已經
透過搜尋 INDEX 檔案解決,Debian 這邊還沒實作。
- 希望能自動檢查目前的清單中是否有互相衝突的套件。如果可以的
化,也希望能有顯示完整相依清單的功能。
- 對於像是 perl 與 python 這類的套件,各發行版常有固定的取名
方法,但我們目情仍然是全部手動列表,維護時有些麻煩。不過要
解決這問題,我們可能就不能再用 cpp 了,得改用較強的 macro
系統,例如 m4。但改用 m4 代表著維護者需要多學一種語言。
- 網頁檢視、瀏覽支援。可能可以整合
link:http://esystem.csie.ntu.edu.tw/[CSIE Esystem]
並利用 SSO 功能讓擁有系上帳號的人可以評論或要求加入新套件。
- 我們希望可以在完全不影響 wspkg 的 source tree 的情況下使用
其他與工作站無關、自行維護的清單。
- 實作其他常見發行版的支援,像是 Fedora、Arch、Gentoo 之類的。
當然這就和工作站關係不大了,和拿去自行使用的使用者比較有關。
|