aboutsummaryrefslogtreecommitdiffstats
path: root/README.txt
blob: d12e1a75b199e79bf981f819501c73b3bdf55d18 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
wspkg - 用 cpp 管理工作站軟體清單
=================================
217 工作站實驗室 <217ta@csie.ntu.edu.tw>

操作說明
--------
|===================================================================
| make readme         | 產生這份文件
| make debian         | 產生給 Debian 用的 meta-package
| make freebsd        | 產生給 FreeBSD 用的 meta-ports Makefile
| make                | 做完以上所有事情
|===================================================================

|===================================================================
| make clean          | 清除產生的套件檔
| make clean-exe      | 清除產生的可執行檔
| make clean-doc      | 清除產生的文件
| make distclean      | 做完以上所有事情
|===================================================================

目標
----
我們系上的工作站使用了兩種以上的作業系統(目前是 Debian 和 FreeBSD),但是因為
不同系統安裝軟體的方法不同,且並非每個軟體都跨平臺,使得以往不同作業系統的軟體
清單不同步,累積了不少差異。
我們希望能藉由簡單的方法,讓不同作業系統的工作站上安裝的軟體能夠同步。

方法
----
產生一個簡單、已排序、不重複的清單。

統一的軟體列表
~~~~~~~~~~~~~~
現在我們只需要一個主要的軟體列表!當然,有些軟體只能在特定作業系統執行,也有些
軟體在不同系統使用了不同的名稱,因此我們需要一些對照表。也就是說,我們需要準備
這些檔案:

 . 主要的軟體列表:packages.h,由大家熟悉的 C 語言前處理器(cpp)指令組成。
   如果軟體在各平臺的名稱相同,那麼就直接寫在這個檔案中;如果不同,那可以
   定一個 macro,再到各平臺的對照表將這個 macro 對應到真正的軟體名稱。注意
   這檔案有對軟體分類,新增或修改軟體清單時記得要寫在 #ifdef 和 #endif 中。

 . 各平臺的對應表:*.pkg,同樣由 cpp 指令組成。這個檔案中要定義(#define)
   在 packages.h 中的使用的 macro 所對應的真正軟體名稱。一般情況下,這個檔
   案中只會出現 #define 指令。

不同的套件格式
~~~~~~~~~~~~~~
有了軟體列表,接著我們就能產生真正的軟體清單了。使用 cpp 處理 packages.h 和
*.pkg,再加上一些簡單的後續處理,我們就能得到一個每行只有一個軟體名稱,且排序
好、不重複的清單 *.list。我們只需要將清單檔轉換成最終管理用的 meta-package 就
行了!

目前看起來長這樣
~~~~~~~~~~~~~~~~

-----------------------------------------------------------------------------

           +--------------------------+
           | 主要的清單與對應的對照表 |
           |        packages.h        |
           |        debian.pkg        |
           |        freebsd.pkg       |
           +--------------------------+
                       |
                       | cpp 與其他簡單的處理
                       v
           +--------------------------+
           |     不同系統的軟體清單   |
           |        debian.list       |
           |        freebsd.list      |
           +--------------------------+
                    /     \
                   /       \   轉換成各平臺所需格式的 script
                  /         \
  +---------------------+  +-----------------------------+
  | Debian meta-package |  | FreeBSD meta-ports Makefile |
  +---------------------+  +-----------------------------+

-----------------------------------------------------------------------------

檔名
----
 - *.pkg - 各系統套件名稱不同時使用的對照表。
 - *.list - 處理過後已排序、不重複的套件清單。
 - *.sh - 用於產生其他檔案的 script,輸出檔名應該是把 shell script 檔名的 .sh
   刪除後得到的名稱。例如 debian.control.sh 就是產生 debian.control 的 script。
 - *.in - 用於生成 meta-package 使用的範本檔案,命名規則同上。
 - *.out - 儲存輸出的 meta-package 檔案。

原則
----
因為軟體清單常常是用在剛安裝好,還缺少很多軟體的系統,所以我們希望使用這份清單
時,能盡量不依賴外部程式,以避免為了處理清單還需要安裝額外軟體的麻煩。我們認為
以下軟體是我們可以依賴並假設一定會存在的:

 . POSIX shell (/bin/sh) 與基本的系統指令。
 . POSIX standard C compiler (/usr/bin/c99)。
 . POSIX make (/usr/bin/make),我們的 Makefile 不依賴 GNU 或 BSD make。
 . C / C\++ 編譯器與前處理器,請用 cc / cpp / c\++ 這類通用的名稱,不要使用
   gcc / g\++ 或 clang / clang++ 這類與特定編譯器實作有關的名稱。

當然,如果你正在準備你正在寫 debian.\*.sh 或 freebsd.\*.sh 這類只使用在特定平臺
的 script,你可以使用只在特定平臺才有的程式。例如 debian.\*.sh 內可以使用 bash
和 perl,而 freebsd.*.sh 內可以使用 csh 和 bsdtar。

目前支援的平臺
--------------
目前我們已經大致完成 link:debian.html[Debian] 與 link:freebsd.html[FreeBSD]
的支援。為了避免讓 README 內容太多導致重點太過混亂,所以我們將個別平臺的文件
放到獨立的檔案中。