How to create Slax modules the right way 如何正確的建立Slax模組(正體中文版) 如果你只有自己用的話,Slax的模組可以隨意的包裹的。但如果你希望分享你的模組給其他使用者的話,你就必需要遵守幾項本文中所提到的規則。這些規則設計的初衷是讓end user能夠獲益;所以如果你不遵守它,你的模組將永遠不會被收入Slax官方的版本之中。 技術總覽 Slax模組是由一個壓縮過的squashfs檔案系統與 .lzm 所構成的。這個模組由mksquashfs工具所建立,並透過unsquashfs所解開。而這兩種工具都需要修改過以支援LZMA這個壓縮演算法。這些工具都已經包含在Slax之內。 每一個Slax模組都包含了所有的檔案跟完整路徑的目錄。舉例而言,一個bash模組(執行檔跟一些man pages)會像下面這樣: /bin/ /bin/bash /usr/ /usr/man/ /usr/man/man1/ /usr/man/man1/bash.1 1) 你模組中所有的目錄都要可以被一般的使用者照訪,將所有的目錄權限設置為755 (drwxr-xr-x)。除非因為一些敏感的問題,才會用到不同的目錄權限。 find ./ -type d | xargs chmod -v 755; 2) 確保你的模組夠小,解壓縮的檔案夾就讓它繼續保持在未壓縮的狀態是較安全的。 (舉例而言,man pages,因為LZMA的壓縮效果更好) 刪除所有執行程式時不需要的檔案。 (舉例而言, 不需要的文件, 用不到的音效, png/jpg圖檔, 不需要得i18n mo檔) 除去所有不需要得連結。 find ./usr/man/ -type l -name "*.gz" | xargs -r gunzip -f find ./usr/man/ ! -type l -name "*.gz" | xargs -r gunzip find . | xargs file | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 3) 如果你壓縮的模組是從source code編譯出來的,那麼你必須提供建立這個模組時所需要用到的編譯腳本(build script)。這個build script必需要掌握整個模組的建立,任何的手動操作(copying / deleting files, etc)都是不允許的。 這些腳本所提供的就像是文件一樣告訴別人如何編譯你的模組; 除此之外,若你停止更新你的模組,其他人將可以透過該腳本簡單的把你的模組重新建立起來。請複製你的編譯腳本到: /usr/src/slaxbuilds/your_module_name.slaxbuild 4) 當你編譯軟體時,請注意使用正確的cflags跟參數. 一般推薦使用的i486架構(以提供良好的向下相容),但針對提供良好的效能則是i686的架構。在Slax中,你可以執行'configure-for-slax'作為下列command的簡寫,那個效果相同。 CFLAGS="-O3 -march=i486 -mtune=i686" ./configure --prefix=/usr --build=i486-Slackware-linux 5) 永遠不要在你的模組中包含任何Slax當中已存在的檔案,即使你已經修改過它。換句話說,你的模組將永不覆蓋任何Slax當中存在的檔案。除非你有合理的原因這樣做,它會使你的模組不能相容於新版本的Slax並且造成其他使用者的問題。如果你一定得覆蓋掉一個Slax中的檔案,(舉例而言,要在/etc/ld.so.conf增加一個新的路徑),作為替代你模組直接覆蓋的檔案,你可以寫一個開機啟動的腳本在裡面,它將可以修改(更新)特定的檔案。 舉例來說,起始腳本去刪除一行ld.so.conf的路徑,並另外新增一個到該檔的結尾: #!/bin/bash sed -i -r '\;/usr/local/lib;d' /etc/ld.so.conf echo '/opt/kde/lib' >> /etc/ld.so.conf 這是一個永遠不應該加到你模組檔案中的簡單檔案列表: /etc/init.d /etc/rc.d/rc.S /etc/rc.d/rc.M /etc/rc.d/rc.K /etc/rc.d/rc.local /lib/modules/2.6.x/modules.dep /lib/modules/2.6.x/modules.alias /etc/ld.so.conf /etc/ld.so.cache /etc/passwd /etc/group /etc/shadow 6) 如果你需要在起始過程中,或系統啟動即關閉時執行某些模組。使用sysvinit風格的目錄。最佳的解決方法就是將一個萬用的腳本放在/etc/rc.d/init.d/目錄中,同時這個腳本也可以使用'start'跟'stop'等參數。所有在這個目錄的腳本都會透過'start'參數在開機時啟動模組,再關機時透過'stop'關閉。你可以透過選擇大寫S(start)或大寫K(kill)開頭的連結腳本的方式在符合特定runlevel的sysvinit目錄去開啟它,舉例而言 /etc/rc.d/rc3.d/。每一次runlevel改變後,Slax會執行改變前那個runlevel目錄裡所有K開頭的腳本,接著啟動改變後的那個runlevel目錄裡所有S開頭的腳本。 在接下來的範例中,Slax將會在runlevel 3(指的是系統開機的過程中)執行'apache.sh start',同時在runlevel 0或runlevel 6(指的是shutdown或reboot)執行'apache.sh stop'。 # 簡單的通用腳本: /etc/rc.d/init.d/apache.sh #!/bin/bash if [ "$1" = "start" ]; then echo "start apache @ startup" ... start apache here ... fi if [ "$1" = "stop" ]; then echo "stop all apache @ shutdown" ... stop apache processes here ... fi # 當你的通用腳本建立後,增加下列連結: ln -s ../init.d/apache.sh /etc/rc.d/rc3.d/S-apache ln -s ../init.d/apache.sh /etc/rc.d/rc0.d/K-apache ln -s ../init.d/apache.sh /etc/rc.d/rc6.d/K-apache 7) 如果你的軟體可以在圖形化介面(GUI)中執行(舉例而言,KDE,XFCE, etc.),你必須將icon跟menu entry(選單實體)檔案放到你的模組當中。讓使用者可以輕易的從他的選單中找到並且啟動應用。新增一個menu entry只需要簡單的建立兩個檔案: /usr/share/applications/your-application.desktop /usr/share/pixmaps/your-applications-icon.png 第一個檔案(*.desktop)是用來描述menu entry的。他也許長得像: [Desktop Entry] Encoding=UTF-8 Exec=firefox %u Icon=/usr/share/pixmaps/firefox.png Type=Application Categories=Application;Network; Name=Firefox Name[cs]=Firefox GenericName=Web Browser GenericName[cs]=Webovy prohlizec MimeType=text/html X-KDE-StartupNotify=true 8) 當你的模組上的軟體被執行時,它應該是能夠直接使用的。避免不必要的同意選項, 每日秘訣或版權同意書。記得你的模組是在一張只能夠讀取的CD片上,它不會有辦法記得執行時所動過的選項(如關閉每日秘訣 或同意你的版權同意書。), 不要讓模組每次執行時都要去麻煩你的使用者。 9) 你模組的相依性必須盡可能的低。這個意思是,你的模組越少跟其他的模組有甚麼瓜葛越好。同時記得,將你的模組盡可能的包的越小越好。舉例而言,如果你的模組可以不使用Python的情況下安全的執行,請確認你在模組中刪除所有的Python Script。以避免安裝模組的同時需要安裝Python。(譯:Python是一定要的,我建議可以刪除perl或ruby script。*誤*) 如果你需要包含某些只會被你的模組所使用到的函式庫(libraries),請將他們直接包在你的模組中,而不要分開上傳。舉例而言,XFCE需要一堆xfcelib*的函式庫,而大概沒有其他模組會用到這堆函式庫。請將他們都放到XFCE的模組中。 另外一個情況是,當你的模組需要一些函式庫,而其他模組也會使用到。請獨立的上傳它,並永遠不要將它包裹在你的模組中。舉例而言,Python的執行檔應該永遠被獨立上傳,同時不該被任何模組所包含。 上傳你的模組 當你的模組遵循那些規則,你就可以分享它給其他人。官方的模組庫應該要能夠盡可能的幫助底層的使用者;也因為這個原因,讓每一個模組都能擁有一個好的icon是非常重要的,一個螢幕快照將可以重現你在slax中執行那個軟體時的畫面(請使用預設的KDE風格避免誤解)。同時提供一個有意義的說明也是必要的,那將可以幫助人們更了解這個模組。 部份的函式庫或程式或許不會輸出沒有使用者介面,在這個狀況下螢幕快照是不需要的。但是提供一個漂亮的icon還是必需的。沒有icon的模組將很難被接受,如果你認為你的這個模組不可能找到任何icon的,那再多想一下。你的模組並不需要一個獨一無二的icon,但使用者必需要可以快速的看一眼並分辨出那是一個文字編輯器還是一個Email編輯器。 標題不需要包含無用的標點符號跟底線,簡單的放上一個軟體的名子與版本編號就可以了。下列是正確的:vim 7.1。而下列是不正確的:vim_7.1-112-i486-15。 說明的描述必須足夠到讓分類總覽看起來輕鬆,但直須需要包含對使用者有用的資訊。這個的用途是描述並解釋模組給一個完全不清楚用途跟不知道裡面有甚麼東西的人。不要有假資料,不要連結,不要有文法或拼寫的錯誤,不要用到驚嘆號跟發展歷程。推薦的長度在40個字以上。