My code works, I don’t know why.

國王的耳朵是驢耳朵

[Debian套件打包] 如何更新現有套件並重新打包?

| Comments

Debian New Maintainers’ Guide提供了一些更新打包過的套件的建議: 分為

修復錯誤的情況

需要更改原本套件中的程式碼

  • 透過dquilt整理成patch
    • dquilt new 描述修正的檔名.patch
    • dquilt add 要修正的程式碼檔名
    • 修改要修正的程式碼檔內部程式碼
    • dquilt refresh產生patch
    • dquilt header -e描述剛才的更改

需要更改原本套件中debian/patches的patch

  • 透過dquilt整理成patch
    • dquilt pop 要修正的patch檔名
      • dqulit會幫你un-patch
    • 修改要修正的patch檔名內部程式碼
    • dquilt refresh產生patch
    • dquilt header -e描述剛才的更改
    • while dquilt push; do dquilt refresh; done
      * Apply 之前被pop的patch
      

更改完畢並產生完patch後,請更改debian/changelog說明更改項目。可以人肉修正、使用dch -i指令或是使用dch -v 新的版號協助更改。

如果更新的原因是因為套件管理系統中有bug report,在debian/changelog中需要特別提到Close: 錯誤追蹤編號,上傳的時候系統會自動根據該編號關閉相對issue。

更改完debian/changelog後請依照之前的建議重新測試套件。測試無誤後,應將changelog中的狀態從UNRELEASED改為unstable或是experimental並且上傳。由於只有更改部份檔案,所以不需要上所有檔案。


打包上游更新原始套件

首先要確認新版和舊版都是最乾淨的情況,也就是說autotools產生的檔案如configure等都不應該存在。接下來使用diff人肉檢查是否有可疑要注意的地方。指令如下:

  • diff -urN 乾淨舊版目錄 乾淨新版目錄

接下來把舊版的debian目錄放置到新版的原始乾淨目錄中。debian目錄在打包的時候應該會單獨產生一個tarball,檔名為套件名稱.debian.tar.gz。做以下的更動

  • 以前格式將上游的tarball以套件名稱.org.tar.gz存檔。
  • 使用dch -v 新版本號碼更新debian/changelog
    • 說明更新上游原始套件,如果有fix bug report的話也要加入Close: 錯誤追蹤編號
    • while dquilt push; do dquilt refresh; done
      • Apply 之前被pop的patch
      • 基本上新版有沒有需要apply自己patch?個人覺得不一定。就算需要,行號等資訊會因為程式碼更動等原因而不一定能夠patch上去。當發生問題時手冊有下面建議
        • 如果這個patch上游原始套件已經fix了,請直接使用dquilt delete刪除該套件。
        • 使用dquilt push -f暴力patch,然後人肉檢查patch退貨的檔案。接下來觀察退貨檔案,自幹新的patch。
        • 重複 while dquilt push; do dquilt refresh; done直到都可以apply為止。
  • 上面的動作可以使用uupdate幫你簡化部份操作。

如果debian下的watch有指定的話,可以使用uscan代替update,主要的差別是uscan會根據debian/watch去下載上游原始套件而不需要人肉下載。

跳過部份

  • 從舊的debian格式更新成新的debian格式
  • 更上游原始套件的文字檔到UTF-8

參考資料

Comments