2010/03/13

Oleg: 安裝 ipkg Optware 套件管理系統

ipkg 是一個套件管理系統。如果你有玩過 Fedora、Ubuntu 等等的 Linux Distributions,都有內建如 yum、apt-get 的線上套件管理系統,只要簡單下幾個指令便可以自動下載想要安裝的套件與其相依的函式庫,與傳統的原始碼編譯方法比起來,真是輕鬆快速。傳統要安裝程式,必須先安裝 gcc、make 等編譯工具,然後編譯安裝相依函式庫,最後才是編譯你要的程式才安裝。這對從 Windows 上手的使用者來說,實在是很大的門檻,就沒有可以直接下載檔案便能使用的方法嗎?為了降低使用者入門的門檻,套件管理系統便應運而生了。

但套件管理系統雖然方便,原始碼編譯的方式還是不可或缺。由於套件管理系統有一群小組負責維護,套件的版本都是再三經過驗證穩定才釋出的,因此大多不會是最新推出的版本。如果你有急需使用最新版本的需求,除了找第三方的套件來安裝外,就是自行編譯一途了。而有些程式也未必會在套件管理系統當中找到,這時候也是只能找第三方套件或自行編譯。最後是自行編譯可以更靈活的設定想要的功能 (在編譯時透過 ./configure 下一大堆 --with-XXX=OOO 參數的,有編譯過的人應該都有深刻的印象)。

初始化 ipkg

而對於 AP 這種嵌入式系統來說,自行編譯的難度太高了,因此還是推薦使用 ipkg 這個套件管理系統。以下的操作都是要透過 Telnet/SSH 登入機器進行下指令的操作,請先登入後進入命令輸入模式。Oleg 有內建,呼叫的方法如下:
ipkg.sh (操作) [參數]

副檔名 sh 代表他是一個 Shell Script,預設的情況下我們必須先更新取得線上有哪些套件可以使用才能進行後續動作,所以第一件事就是先執行:
ipkg.sh update

等待連線取得最新的套件列表後,就可以開始安裝想要的程式啦!

安裝 ipkg-opt 取代內建 ipkg.sh

內建的 ipkg.sh 雖然可以正常下載套件程式,但我直接使用它安裝了一些程式後 (例如 nano 文字編輯器),想要呼叫竟然發生 not found 的錯誤,完全無法理解。/opt/bin/nano 程式明明存在,直接呼叫 /opt/bin/nano 程式執行也是得到一樣的訊息,百思不得其解。後來我發現 ipkg.sh list | grep ipkg 竟然有 ipkg 和 ipkg-opt 這兩個套件,也就是說 ipkg.sh 可能必須用這兩個套件之一來取代才可以順利執行。而仔細研究之下,ipkg-opt 的版本 (0.99.163-10) 比 ipkg (0.99.163-2) 還新,於是我選擇安裝 ipkg-opt 來取代 ipkg.sh。
ipkg.sh install ipkg-opt

執行這個指令也會一併安裝 uclibc-opt,專供嵌入式系統設計的精簡型 C 函式庫。安裝完畢之後 ipkg.sh 就不需要再使用,以後 ipkg.sh 就可以直接用 ipkg 來取代,可以少打三個字。

安裝程式必要函式庫 libuclibc++


在剛才安裝 ipkg-opt 的時候,已經一併安裝了 uclibc-opt 這個函式庫,但是這還不夠。有的程式會用到 libuclibc++ 這套專供嵌入式系統設計的精簡型 C++ 函式庫 (不同之處就是 C 與 C++ 而已),若是沒有安裝的話可能執行某些程式 (例如 iperf 這個 TCP 檢測程式) 後發現出現如下的錯誤訊息:
XXX: can't load library 'libuClibc++.so.0'
這表示你沒有安裝 libuclibc++,我們趕快來安裝它:
ipkg install libuclibc++
執行之後就會下載並安裝完成,如果你未安裝前執行程式有遇到這樣的情況,現在應該可以正常執行了。

列出 ipkg 套件列表

第一次使用時,也不知道有哪些套件,可不可以給個總覽呢?ipkg 也提供了這個功能,請輸入指令:
ipkg list | more
執行之後即會羅列許多套件名稱、版本和簡單的說明。指令後面的 | more 是將結果分頁以方便觀看 (按 Space Bar 可換頁),不然單純執行 ipkg list 會一次全部列出,看到你眼花。

(範例) 安裝 nano 文字編輯器

似乎刷機介紹到 Optware 都會免不了介紹安裝 nano 這套文字編輯器,這個的套件名稱就是 nano,安裝指令:
ipkg install nano
執行之後便會自動下載 nano 套件及相依的 ncurses 函式庫。安裝完畢後就可以直接輸入 nano 來看看這一套編輯器的樣子:

下方列出許多快捷鍵 (ex: ^X = Ctrl + X),比起 vi 要背一堆像 :wq 指令的方式應該更容易上手。

設定 rc.unslung 開機自動啟動服務


當初在設定 /usr/local/sbin/post-boot 這個開機自動掛載磁區的檔案之中,內容有提到 /opt/etc/init.d/rc.unslung 這個檔案,這個檔案是用來開機時啟動 Optware 安裝的程式之服務。Abin 在 post-boot 時就提前設定了這個檔案,但我認為這應該要跟 Optware 一起設定才好,所以我在這邊才提起。

總之,先建立 /opt/etc/init.d 目錄。
mkdir /opt/etc/init.d -p
加上 -p 可以自動建立需要的上層資料夾,而不需要慢慢建立資料夾結構。

然後以 vi 或是 nano (需要安裝) 建立 /opt/etc/init.d/rc.unslung 檔案
vi /opt/etc/init.d/rc.unslung
或 (任選其一)
nano /opt/etc/init.d/rc.unslung

複製下面的內容後存檔: (Source: Optware » OEPackagesForUnslung)
#!/bin/sh

# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
#
for i in /opt/etc/init.d/S??* ;do

    # Ignore dangling symlinks (if any).
    [ ! -f "$i" ] && continue

    case "$i" in
       *.sh)
           # Source shell script for speed.
           (
               trap - INT QUIT TSTP
               set start
               . $i
           )
           ;;
       *)
           # No sh extension, so fork subprocess.
           $i start
           ;;
   esac
done

最後給它執行權限:
chmod +x /opt/etc/init.d/rc.unslung

這樣以後安裝 lighttpd, nginx, vsftpd 等伺服器服務時搭配 /opt/etc/init.d/S??* 設定檔案會自動於開機時執行。

沒有留言:

張貼留言