網頁

搜尋此網誌

2013年12月19日 星期四

Debian package 套件開發工具

Debian 套件 (Debian package) 有兩種類型,一種是執行檔套件 (Binary package),另一種是原始檔套件 (Source package),一般使用套件管理工具 (如 apt-get ) 安裝的都是執行檔套件。
  • Binary package
    以 .deb 為副檔名,套件裡面包含可直執行檔、組態檔 (configuration file)、man/info 頁面、版權資訊與相關文件。
  • Source package
    包含兩個部分,以 .dsc 為副檔名的描述檔,以及以 .orig.tar.gz 為副檔名的壓縮原始檔,另外也有可能包含一個以 .diff.gz 為副檔名的壓縮檔。
這裡我主要討論最常使用的 Binary package ,說明建置一個執行檔套件需要有哪些套件?在這裡我將採取最原始的 Debian 套件管理程式 (dpkg) 進行這項工作,使用 dpkg-deb 指令建置 Debain 套件。當然,也有其他高階的工具可以使用,不過那隱藏了一些細節,我認為不利於學習,所以我還是採用 dpkg。

由於系統預設已安裝 debconf 和 dpkg 兩個套件,下列是 Ubuntu 內建的指令:
  • 屬於 dpkg 套件
    • dpkg
    • dpkg-deb
    • dpkg-divert
    • dpkg-maintscript-helper
    • dpkg-query
    • dpkg-split
    • dpkg-statoverride
    • dpkg-trigger
  • 屬於 debconf 套件
    • debconf
    • debconf-apt-progress
    • debconf-communicate
    • debconf-copydb
    • debconf-escape
    • debconf-set-selections
    • debconf-show
    • dpkg-preconfigure
    • dpkg-reconfigure
  • 補充:其中有一個 dpkg-log-summary 指令是屬於 xdiagnose 套件,在此不列入。
當我們想要建立一個執行檔套件時,使用內建的 dpkg-deb 指令就可以開始建置,不需要再安裝其他套件。但是一個 Debain 套件包含相關設定,該如何開始學習呢?這時候就必須參考說明文件,除了線上文件之外,建議安裝 dpkg-dev 套件,或是 build-essential 套件 (build-essential已包含 dpkg-dev),dpkg-dev 除了提供一些指令之外,還包含很多有關 Debain 套件的說明文件,對於學習相當有用。

安裝指令是 sudo apt-get install dpkg-dev 或 sudo apt-get install build-essential,安裝完成之後,Ubuntu 將增加下列說明文件,請使用 man 指令讀取:
  • deb-control
  • deb-extra-override
  • deb-old
  • deb-override
  • deb-shlibs
  • deb-split
  • deb-src-control
  • deb-substvars
  • deb-symbols
  • deb-triggers
  • deb-version
  • deb
  • dpkg-architecture
  • dpkg-buildflags
  • dpkg-buildpackage
  • dpkg-checkbuilddeps
  • dpkg-distaddfile
  • dpkg-genchanges
  • dpkg-gencontrol
  • dpkg-gensymbols
  • dpkg-mergechangelogs
  • dpkg-name
  • dpkg-parsechangelog
  • dpkg-scanpackages
  • dpkg-scansources
  • dpkg-shlibdeps
  • dpkg-source
  • dpkg-vendor
參考資料:
補充:還有 debconf-doc 套件有其他的說明文件。
###

2013年12月11日 星期三

nginx 網頁伺服器

nginx (念作 engine x )是一個由 Igor Sysoev 所開發的伺服器軟體,主要用作 HTTP 和反向代理伺服器,也可以用作郵件代理伺服器。

在 Ubuntu 上安裝只需要使用 apt-get 安裝即可,指令是:sudo apt-get install -y nginx

總共會安裝 3 個套件:nginx, nginx-common, 與 nginx-full,nginx 套件設定的套件相依性,提供 nginx 安裝的進入點,nginx-full 套件包含 nginx 的執行檔,而 nginx-common 則是預設設定檔和說明文件。

安裝完 nginx 之後,預設是沒有開啟伺服器,請用 sudo service nginx start 或 sudo service nginx restart 啟動服務,在瀏覽器輸入 http://127.0.0.1 將會看到「Welcome to nginx」的訊息。

nginx 的設定檔是 /etc/nginx/nginx.conf , 預設的使用者名稱是 www-data,有一個預設虛擬主機的設定檔在 /etc/nginx/sites-available/default ,相關的參數設定可以參考 nginx 核心功能的說明。

最後介紹一本參考書籍,由佳魁資訊所出版的「Nginx-完全取代Apache,超輕、快、強的Web伺服器」,這大概是中文第一本有關 nginx 的書籍,全書共分為四篇:基礎篇、進階篇、實戰篇與模組篇,大致上涵蓋所有 nginx 所需要的知識。不過書上所介紹的 nginx 版本是 0.6.x 版,目前已經是 1.4.x 版,Google 之後發現原簡體書是 2010 年所發行的,目前看來內容稍微舊了一點,但這不影響學習與參考的價值。

張宴,Nginx-完全取代Apache,超輕、快、強的Web伺服器,台北:佳魁資訊,2012。
譯自:實戰Nginx:取代Apache的高性能Web伺服器,電子工業出版社,2010年3月。

補充,目前2013年佳魁資訊已再出版另一本「王者歸來:進擊的伺服器 - 用Nginx取代Apache建立全語言種類的雲端網站」,有興趣者可以參考。

###

2013年12月3日 星期二

Lexical structure of JavaScript and Python 詞彙結構

詞彙結構 (Lexical Structure) 是程式語言最基礎的規則,說明如何使用一個程式語言撰寫程式。當程式語言定義一套詞彙結構之後,程式開發人員撰寫程式碼,詞彙分析器 (Lexical Analyzer) 將程式碼分析為標記 (token),解析器 (parser) 處理標記才能給編譯器或解析器處理,由此可知,一個程式語言最底層的是詞彙結構,若要設計一個程式語言,也應該要從詞彙結構開始。

這裡我將比較 JavaScript 和 Python 這兩種程式語言的詞彙結構。

JavaScript (ECMAScript 3) Python (2.6)
字元集 (character set) Unicode 預設是7-bit ASCII
可使用特殊註解指定字元集
# -*- coding: encoding -*-
識別字 (identifier) 區分大小寫 (case-sensitive)
字母、底線或錢字符號開始
區分大小寫
字母或底線開始
註解 (comment) //雙斜線表示單行註解
/*斜線與星號之間為多行註解*/
#數字符號 (number sign) 表示單行註解
"""多行註解可用3個單引號或雙引號"""
空白 (space) space (\u0020)
tabulation (\u0009)
vertical tabulation (\u000B)
form feed (\u000C)
no-break space (\u00A0)
byte order mark (\uFEFF)
space (\u0020)
tabulation (\u0009)
form feed (\u000C)
行結束字元 (line terminator) line feed (\u000A),即LF
carriage return (\u000D),即CR
line separator (\u2028)
paragraph separator (\u2029)
基本上是line feed (\u000A)
Windows平台則是CRLF
Unix平台則是LF
多行程式碼 程式碼直接分行,最後必須用分號 (semicolon ;) 結束 每行結尾必須用反斜線 (backslash \) 表示分行
關鍵字 (keyword)
保留字 (reserved words)
基本上共29個
break case catch
continue debugger default
delete do else
false finally for
function if in
instanceof new null
return switch this
throw true try
typeof var void
while with

ECMAScript 5增加下列幾個
class const enum export 
extends import super
共31個
and as assert  
break class continue
def del elif
else except exec
finally for from
global if import
in is lambda
not or pass
print raise return
try while with
yield
字面值 (literal) 數字(整數、浮點數)
字串
布林
正規表示式
物件
陣列
字串
數字(整數、浮點數、複數)


###

熱門文章