aboutsummaryrefslogblamecommitdiffstats
path: root/README.txt
blob: a179b431038de00d3f5474ba6422dbedcdcc22e6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10



                                              

                                                                                                    
 
 

      
 











                                                                                           
              

                                                                             



















                                                                       


                                                                             











                                                                                                              
    















                                                                                                                     
    
 


                                                               
 



                                                                                                            
 












































































                                                                                                                     
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 之類的。
   當然這就和工作站關係不大了,和拿去自行使用的使用者比較有關。