網樂通雖然有內建的 opkg, 但是已經沒有人幫它封裝套件了. 所以,試看看從 STLinux 2.3 安裝套件. 開發了一個約 750 行的 bash script, 可用於安裝 STLinux/Fedora 套件, 也可自製套件放進去。免責說明: 使用前自行備份, 不確定不會毀損系統, 2013/06/27 fedora 套件回來了, 該網站又提供下載了, 使用方式請自行調整 /etc/shpkg.conf 將 fedora 那兩行開頭的 # 註解移除即可.
自 sh4twbox 0.8 以後,採用 shpkg 新版(以dash開發, 1046行)
shpkg 運作原理是將STLinux 官方網站的套件的 rpm 解開, 調整目錄後, 放到網樂通裡面, 目前也引入 fedora sh4 套件, 也是直接解開並不處理 rpm 內部的 scripts.
shpkg 2013xxx 版 適用於 stlinux 2.4 編譯套件 (sh4twbox 0.7~)
shpkg 13xxx 版 適用於 stlinux 2.3 編譯套件 (sh4twbox 0.5~0.6.2)
shpkg 有兩個不同平台版本, 下載網址
- shpkg-st 用來放在網樂通內部,多了個虛擬目錄, 將 STLinux 的檔案轉到根目錄安裝
- shpkg 用來放在各平台(比方說交互編譯的PC), 可以安裝 STLinux 套件到 /opt/STM... 目錄
- 在 PC 上使用 shpkg 安裝 STLinux 的 rpm 套件要以 -Sd 選項忽略相依性安裝, 以下幾個套件則無法直接安裝
- stlinux23-host-stworkbench
- stlinux23-sh4-filesystem # error on real rpm cpio failed
- stlinux23-sh4-Maelstrom # error on real rpm -ltt-control
- stlinux23-sh4-makedev # may useless because don't making devices
安裝方式
- 已安裝 sh4twbox 者
- shpkg -Syu 即可升級 shpkg-st 套件, 或手動強迫重裝 shpkg -Sy shpkg-st
- 未安裝 sh4twbox 者
- 以本站編的 busybox 替換舊版busybox (需要 bash>=3.0 wget awk tar rpm)已安裝 sh4twbox 者此步驟可省略.
- 下載 shpkg-st-<version>.txz 放到網樂通主機後, 安裝方式:
- cd /
- xzcat shpkg.<version>.txz | tar xf -
- tar xf shpkg.<version>.txz # 較方便的語法, 限 busybox 1.20.2 以上版本
使用方式:
- shpkg # 顯示語法說明
- shpkg -Sy # 從網站更新套件列表
- shpkg -Syu # 系統升級
- shpkg -Sl # 列出所有提供的套件
- shpkg -Sl sh4twbox # 列出本站封裝好的套件
- shpkg -SEs filesystem # 快速搜尋名稱中有 filesystem 字樣的套件
- shpkg -Ss filesystem # 搜尋名稱中有 filesystem 字樣的套件
- st23sh4 stlinux23-sh4-filesystem 1.0-14.sh4 # 格式為 <server> <名稱> <版號>
- shpkg -St stlinux23-sh4-filesystem # 安裝前先看一下會裝哪些檔案
- ls /var/cache/shpkg/pkg/stlinux23-sh4-filesystem* # 套件檔暫存於此, 覺得不妥, 可以自己手動解壓縮
- shpkg -S shpkg-st # 重新安裝之前本站封裝的 shpkg 套件覆蓋原先手動安裝的, 這樣才會有套件版號紀錄存在, 方便未來升級(注意: 在網樂通裡面應該用shpkg -S shpkg-st)
- shpkg -E # 自動找系統內的執行檔缺少之動態連結檔(.so)
- 此功能為人工提供相依性套件列表安裝, 仍需網友協助校正增補
- 若找到套件安裝後, 可能新的套件還需要再執行 shpkg -E 再找相依性
- 若還是不能運作, 請參考 wiki 網頁看看網友提供的修正方式
- 若發現要求重複安裝已安裝套件的訊息, 則需安裝相關套件, 舉例如下:
shpkg -S stlinux23-sh4-ppp
shpkg -E # 出現安裝 stlinux23-sh4-libpcap-dev 訊息, 按 Enter 安裝
shpkg -E # 又出現安裝 stlinux23-sh4-libpcap-dev
** 20:38:03 generating .so file listing
/usr/sbin/pppd libpcap.so 這行訊息代表需要.so 的執行檔
以 ldd /usr/sbin/pppd 可以看到確實沒有找到 libpcap.so
其實 /usr/sbin/libpcap.so 存在, 但是指向未安裝的 libpcap.so.0.9.8
shpkg -S stlinux23-sh4-libpcap # 因此安裝相關套件(去掉 -dev 或是 -devel) - shpkg -E <執行檔名> # 自動將執行檔沒安裝 .so 的找出對應套件
- shpkg -SE <套件名稱> # 自動安裝套件及其相依套件
- 使用 wget 替代 busybox 的 wget 希望使下載更穩定
- shpkg -SEs glibc # 找出套件名稱, eg. stlinux24-sh4-glibc
- shpkg -S stlinux24-sh4-glibc
- shpkg -SEs wget # 使用較好的 wget (非 busybox 版)
- shpkg -S stlinux24-sh4-wget
- rm /bin/wget # 因為內定 PATH 優先順序 /bin 優先其次才是 /usr/bin
- wget # 此時若出現 -bash: /bin/wget: No such file or directory
- hash wget # 重新讓 bash 對應 wget 到 /usr/bin/wget
- shpkg -R xxx # 移除套件
- shpkg -U xxx.txz # 強迫更新套件(適用於新版套件有問題, 換回舊版)
- shpkg -Scc # 清除下載暫存的套件檔案空間
- 實際安裝案例參考sh4twbox 0.7 以後範例網頁、0.5~0.6.2 範例網頁
進階配置
- 可編寫 /etc/shpkg.conf 將自己的 mirror 網站放在前面, 這樣就可以優先下載自己 mirror 檔案,例如:
sh4twbox txz http://sh4twbox.googlecode.com/files \ http://localhost:8000/mirror/sh4twbox \ http://sh4twbox.googlecode.com/files - 找類似函式庫的方法, 比方說你裝了最新版的 readline(提供usr/lib/libreadline.so.6.2), 而有些程式需要舊版的 libreadline.so.5,
ln -s /usr/lib/libreadline.so.6.2 /usr/lib/libreadline.so.5 # 直接以新版試看看
xzgrep libhistory /var/lib/shpkg/sync/*solist* # 若不行再查看看有沒有版本一致的
安裝該版本套件(較安全的方法是解開該 so 檔, 只放該舊版 so)
封裝套件方式
- 2013*版套件名稱規則
- stlinux/fedora: <name>-<ver>-<rel>.<arch>.rpm
- arch: <name>-<ver>-<rel>-<arch>.pkg.tar.xz
- shpkg: <name>-<ver>-<rel>-<arch>.<ext> where <ext> maybe tar.gz,tgz,txz
- where <ver> start from a number and can not contain '-'
- <arch> maybe one of all,noarch,any,i686,x86_64,arm,sh4,src,nosrc
- <name> start from a alphabet
- <rel> start from number or r<number> or v<number>
- 13*版(舊版)套件名稱規則 <英文>-<版號>-<包裝號>.<副檔名> 這裡的減號很重要, 用來區別套件名稱。若要編譯交互編譯函式庫, 檔名請取 stlinux23-sh4- 開頭,總共支援四種分段方式
- <name>-<ver>.<ext>
- <name>-<subname>-<ver>.<ext>
- <name>-<subname>-<ver>-<rel>.<ext>
- <name>-<subname>-<ver>-<rel>-<arch>.<ext>
- 支援 rpm (僅簡單解開壓縮檔,放到根目錄,不會執行script)
- 支援 txz (即 tar.xz 格式)
例如: 封裝 shpkg 的 script 如下(建議用 root 或 fakeroot 封裝, uid,gid 才會正確)
VERSION="20130112-2"
rm -rf pkg
mkdir -p pkg/{,usr,usr/bin,etc}
cp shpkg pkg/usr/bin
cp shpkg.release.conf pkg/etc/shpkg.conf
fakeroot tar -C pkg -cJf shpkg-$VERSION.txz usr etc
fakeroot tar -C pkg -czf shpkg-$VERSION.tgz usr etc
mkdir -p pkg/opt/STM/STLinux-2.4/devkit/sh4
ln -s ../../../../.. pkg/opt/STM/STLinux-2.4/devkit/sh4/target
fakeroot tar -C pkg -cJf shpkg-st-$VERSION.txz usr etc opt
2013*版自製套件列表方法如下:
ls *.txz | xz > sh4twbox.xz # repository name is sh4twbox
13*版(舊版)自製套件列表方法如下:
ls *.txz | awk '{ print "basename",$1,".txz"}' | sh | xz > sh4twbox.xz
2013*版自製套件列表方法如下:
ls *.txz | xz > sh4twbox.xz # repository name is sh4twbox
ls *.txz | awk '{ print "basename",$1,".txz"}' | sh | xz > sh4twbox.xz
封裝函式庫套件方式
以編譯 intltool 為例, 建議安裝目錄設定到 STLinux24 底下, 例如: mk_intool.sh.
開發經驗談
約 1069 行 script, 目前自動測試有 57 個案例- 函數盡量使用 local 變數宣告, 因為少宣告 local, 為了抓 bug, 花了3個小時
- 善用版本管理系統(推薦 fossil), 紀錄開發過程, 利於追出 bug
- 測試函數盡量使用 < <(...) 寫法來取代 |, 這樣可以讓 make test 時每次的畫面結果完全一致,利於比較每次改版後功能是否正常(此語法為 bash ㄊ, dash/sh 沒有)
- dash 使用變數存放 10000多個套件名稱做循序查詢運作速度在網樂通太慢
已知問題
- shpkg 版本比對誤將 xxx-9-1 認為比 xxx-10-1 版本還新
A: 因為採用簡單的 sort 比對法, 希望有人提供正確的 bash 函數, 才可能比對成功 - 套件列表有重複的套件名稱時, 僅安裝第一個,若仍需要安裝,可改以 repository/package_name 輸入套件名稱,或是手動修改套件名稱並自建套件列表
- shpkg -Qo /usr/bin/ar 找不到
A: 因為 shpkg-st 以更改目錄方式安裝, 因此自己手動下指令
grep usr/bin/ar /var/lib/shpkg/local/*/files 就可以查到 stlinux23-sh4-binutils 套件 - shpkg 本身不檢查檔案複寫別的套件的問題
- shpkg -S 會自動安裝相依的程式函式庫,但有時失靈,需自行指定安裝, 方法參考網址
- 裝了 shpkg 要換裝 shpkg-st 失敗A:因為這兩個檔其實是互相衝突的, 暫時解法如下
- 從 shpkg 改 shpkg-st(適用於網樂通內部)
- shpkg -Sw shpkg shpkg-st # 兩個都先下載
- shpkg -R shpkg
- rm -rf /opt/STM # 移除之前裝到目錄的檔案
- tar xf /var/cache/shpkg/pkg/shpkg-st-<version>.txz
- shpkg -S shpkg-st
- 從 shpkg-st 換 shpkg(適用於PC端)
- shpkg -Sw shpkg shpkg-st # 兩個都先下載
- shpkg -R shpkg-st
- rm -rf /opt/STM # 移除之前的連結
- shpkg -S shpkg
- 發現 google 似乎會 cache 相同檔名的資料一段時間, 所以看得到新的 sha1sum 但無法正確下載到檔案, busybox 的 wget 沒有 --no-cache 功能, 所以若急的話可以改換wget, 方法如下:
- shpkg -S stlinux24-sh4-wget
- /usr/bin/wget # 先使用看看確定可以使用
- rm /bin/wget # 移除 busybox 的 wget 連結
版本更新
- 2013/01/09 支援 busybox rpm 安裝版
- 2013/01/11 支援 rpm, txz
- 2013/01/12 支援 rpm, txz, tgz
- 2013/01/12-2 修正 shpkg-st 少封裝 opt 目錄問題
- 2013/01/13 v13012-3 增加 test 套件庫,只包裝還沒測過, 收錄 626 套件
- 2013/01/15 v13015-1 增加 -r 選項, 修正 owner 功能
- 2013/01/15 v13015-2 修正套件列表, 支援多種檔名分段格式
- 2013/01/17 v13016-1 修正套件升級時勿將 shpkg 和 shpkg-st 檔名判斷錯誤問題
- 2013/01/18 v13016-4 設定檔套件庫下載網址改設為 googlecode
- 2013/01/18 v13018-1 修正 -St 功能
- 2013/01/19 v13019-1 修正 -Qo 功能
- 2013/01/21 更新 stlinux 套件庫, st23:808套, stsh4:742套
- 2013/01/23 加入 fedora9 套件庫 8270 套(已測試 agrep 可使用)
- 2013/01/23 v130123-2 修正同名套件安裝問題
- 2013/01/26 新增 -E 以套件so對照檔找出相依性套件功能, 修正 -Qo 顯示訊息
- 2013/01/27 v130127-2 加入 fedora9 套件so對照檔, 移除 'file/realpath' 相依性, 加速 shpkg -E 速度
- 2013/01/28 v130128-1 增加 shpkg -E 搜尋深度(會變慢), 以利正確判斷(例如安裝: mysql)
- 2013/01/29 v130129-1 修正 shpkg -E 找 ssl.so 時,優先找到 fedora lighttpd 的問題
- 2013/02/15 v130215-1 加速 shpkg -Q. 修正 sh4twbox-kernel 版本解析錯誤問題
- 2013/02/16 增加找 library 方法說明
- 2013/03/04 說明 fedora 套件問題自2013/03起,目前所有 fedora9 repository 因為原日本網站不再提供, 只能靠網友之前備份檔案. 目前盡量使用 stlinux 部份套件. 若有人提供 mirror site 空間, 再想辦法放進去.
- 2013/06/27 fedora 套件回來了, 該網站又提供下載了, 使用方式請自行調整 /etc/shpkg.conf 將 fedora 那兩行開頭的 # 註解移除即可.
- 2013/10/25 release 20131025-3528 版,使用 dash 編寫,因此使用 busybox 即可執行
- 2013/10/26 release 20131026-6bba 版,儘量移除 grep 加速運作
- 2013/10/30 release 20131029-1.1062 版,修正 shpkg -Ql rpm 問題
- 2013/11/04 release 20131103-1.4f69 版
- 增加 shpkg -S 可以自動安裝相依性套件
- 完成 shpkg -E 安裝 so 檔案功能
- 改善 shpkg -Q 速度
- 將 2013*版 .so 索引檔更明為 soidx 以避免和13*版檔名混淆
- 2013/11/05 release 20131105-1.26e0 版
- 增加 -SE 安裝相依套件 , -SEs 快速功能
- 修正 soidx 索引檔
2 則留言:
shpkg 版本比對誤將 xxx-9-1 認為比 xxx-10-1 版本還新
A: 因為採用簡單的 sort 比對法, 希望有人提供正確的 bash 函數, 才可能比對成功
請問不能將版號由xxx-9-1 變成 xxx-09-01
這樣在比對時排序就應該不會有問題!!
因為套件來源眾多,包含 fedora,stlinux 及本站自編套件, 套件版本編號及命名方式不是自己能決定的.
張貼留言