數位天堂

Nokia:科技始終來自於人性; 拜耳:如果文明不能使我們更相愛,那科技便失去意義!
歡迎您的加入,讓我們一起討論科技與環保的整合應用...

您尚未登入。

#1 2011-12-15 16:21:05

hippo
天使
註冊日期: 2008-10-07
文章數: 1562
目前積分 :   20 

ipkg套件的製作

如果您已經搞懂交叉編譯, 在路由器上與眾多程式周旋之際, 可能會發現一個問題: 如果日後我要重新安裝或升級, 移除程式, 難道要一個個砍, 一個個安裝嗎? 砍錯了, 導致其他程式不能執行, 怎麼辦?
嘿, 這問題就交由套件管理程式解決吧. 以微軟的術語來說, 就是控制台內的新增移除程式.

在嵌入式系統, 最常使用的套件來源是Optware, 使用輕量級的ipkg作為套件管理程式. 但ipkg似乎已停止維護, 所以OpenWrt改採另一套輕量級的opkg來管理套件.
當然, 其他NAS廠商也有各自的作法. 例如: 威聯通使用qpkg; 友訊, 華碩使用apkg, 但未公開. 本文的重點放在, 如何製作ipkg套件(.ipk), 其他套件管理程式的優劣, 請自行找資料.

因為我由opkg開始研究, 本來是ipkg與opkg二套共存於系統. 雖然Optware ddwrt的套件內容是mips32, 但進一步檢討後, 不能捨棄Optware. 所以藉ipkg的皮, 管理自己交叉編譯後的程式. 這樣系統就僅存一套ipkg套件管理程式, 清爽多了.
當然, 若您想直攻ipkg, NSLU2-Linux內有ipkg原始碼可供研究.

先來看看ipkg套件內容, 以wget舉例.

$ wget http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/wget_1.12-2_mipsel.ipk $ tar -xzf wget_1.12-2_mipsel.ipk


1. 解套件控制說明

$ tar -xzf control.tar.gz


$ cat control Package: wget Architecture: mipsel Priority: optional Section: net Version: 1.12-2 Maintainer: NSLU2 Linux Source: http://ftp.gnu.org/pub/gnu/wget/wget-1.12.tar.gz Description: A network utility to retrieve files from the Web Depends: Conflicts: wget-ssl


套件敘述: control, 是套件組成必備元素, 由Package, Version, Architecture欄位組合成套件檔案名稱wget_1.12-2_mipsel.ipk

$ cat conffiles /opt/etc/wgetrc


設定檔: conffiles, 用於套件升級時, 是否覆寫舊套件設定檔的偵測.
2. 解套件程式內容

$ tar -xzf data.tar.gz


$ tree opt/ opt/ ├── bin │ └── wget ├── etc │ └── wgetrc └── man └── man1 └── wget.1 4 directories, 3 files


套件安裝後, 實際的安裝路徑, 以/opt為根目錄. (您現在應能理解我為何要將/opt/usr當作自編程式的根目錄了吧.)
再換一套, 看看別的東西. 以lighttpd舉例.

$ tar -xzf lighttpd_1.4.29-1_mipsel.ipk $ tar -xzf control.tar.gz


套件控制部分, 有postinst, prerm二個script. 分別代表套件安裝後, 套件移除前要執行的相關指令.
這些簡單的解釋, 您應該能稍微理解ipkg的組織架構了. 參考Firmware Modification Kit作者寫的IPK Creation Kit.

開始建構ipkg的目錄架構. 假設我只要封裝自己編譯的wget執行檔, 則目錄架構為:

$ tree . ├── CONTROL │ └── control └── opt └── usr └── bin └── wget


編輯套件敘述:
$ nano CONTROL/control

Package: wget Version: 1.13.4 Architecture: mipsel Section: utility Priority: optional Source: ftp://ftp.twaren.net/Unix/GNU/gnu/wget/wget-1.13.4.tar.bz2 Maintainer: 套件維護者 Description: http://zh.wikipedia.org/wiki/Wget


套件封裝前, 先準備套件封裝工具, ipkg-build或opkg-build都可以.

$ wget http://ipkg.nslu2-linux.org/sources/ipkg-utils-1.7.tar.gz $ tar -xzf ipkg-utils-1.7.tar.gz



$ wget http://svn.openmoko.org/trunk/src/host/opkg-utils/opkg-build $ chmod u+x opkg-build


使用方法:

$ ./ipkg-build Usage: ./ipkg-build [-c] [-C] [-o owner] [-g group] []


$ ./opkg-build Usage: ./opkg-build [-c] [-C] [-O] [-o owner] [-g group] []


都是script, 查看內容可得知control相關欄位的設定值.

開始封裝:

$ ipkg-build -c -o root -g root Wget


產生的wget_1.13.4_mipsel.ipk就是了.

同樣上傳到路由器, 安裝測試:

# ipkg-opt install wget_1.13.4_mipsel.ipk


參考:
1. ipkg-輕量級套件管理系統
2. IPKG Howto
3. Construct ipkg packages (for developers)



最後修改: hippo (2011-12-15 16:40:16)


離線

 

#2 2013-06-07 11:03:30

jzmno1
新生
註冊日期: 2012-07-27
文章數: 7
目前積分 :   

Re: ipkg套件的製作

目前看见的最有价值的帖子之一,非常感谢大大教程



離線

 

#3 2015-11-18 12:49:10

rv2231
新生
註冊日期: 2015-02-15
文章數: 11
目前積分 :   

Re: ipkg套件的製作

值得好好研究  一直沒搞懂的基礎觀念 jolin 這次要弄懂


離線

 

友情連結

論壇頁尾

Powered by PunBB
© Copyright 2018 Rickard Andersson
RSS Feed