顯示具有 ubuntu-build 標籤的文章。 顯示所有文章
顯示具有 ubuntu-build 標籤的文章。 顯示所有文章

2012年11月18日 星期日

查詢 Ubuntu package 編譯時的參數

GDB Python API 提到要在編譯 gdb 時有加 --with-python 才會支援此功能, 想確認編譯 Ubuntu 12.04 的 gdb 時, 是否有下參數 --with-python, 參考資料: compiling - Where can I find the configure options used to build a package? - Ask Ubuntu

摘要回覆的作法如下

抓原始碼看編譯規則

$ apt-get source gdb
$ cd gdb-7.4-2012.04/
$ vi debian/rules

然後看到兩組 configure rule, 一個對到 --without-python, 另一個對到 --with-python, 嗯..., 雖然看起來比較像後者, 還是有些懷疑

查官方 build log

$ apt-cache showpkg gdb

得知名稱是 7.4-2012.04-0ubuntu2, 接著到 https://launchpad.net/ubuntu/+source/gdb 查詢:

  • click 7.4-2012.04-0ubuntu2 updates (main) 2012-05-15
  • click Builds 下的 amd64
  • click Build status 下的 buildlog

查詢 ./configure 找到 --with-python, 所以應該是有加上 --with-python 才是

2012年1月18日 星期三

自行編譯含 debug symbol 的套件 (package)

對函式庫 X 來說

  • X-dev 表示讓開發者用的, 有裝 header、文件之類的
  • X-dbg 內容類似 X, 不過有留 debug symbol

比方說 libjpeg, 三種的描述如下:

  • libjpeg62 - The Independent JPEG Group's JPEG runtime library
  • libjpeg62-dbg - Development files for the IJG JPEG library
  • libjpeg62-dev - Development files for the IJG JPEG library

裝了 X-dbg 後什麼事也不用做, gdb 自己會優先用含 debug symbol 的版本。不過若官方沒提供供 X-dbg 的話, 就得自己編。參考官方文件《HowToGetABacktrace - Debian Wiki》, 做法如下:

  • $ apt-get install build-essential fakeroot gdb
  • $ apt-get build-dep X
  • $ DEB_BUILD_OPTIONS="nostrip noopt" fakeroot apt-get -b source X
  • $ dpkg -i X.deb

針對上述指令, 補充幾點

  • 編好套件後, 可用 dpkg -c X.deb 先看裡面裝了什麼
  • 用 objdump --source FILE 查看裡面有沒有含程式碼, 有的話才表示確實有含 debug symbol。這個作法比用 file FILE 看是否有 strip 更確實。二進位檔有可能沒含 debug symbol 也沒 strip。

2016/02/16 更新

遇到 "trying to overwrite ..." 的錯誤 時,可以用 sudo dpkg -i --force-overwrite X.deb 強制安裝。

2011年1月20日 星期四

在 Ubuntu 上編原始碼安裝的方法

官網有超詳細的說明, 看完這兩篇後就有基本戰鬥力了:
編原始碼的三個步驟是
  1. ./configure
  2. make
  3. make install
最難的是第一步, 這要看 tarball 裡附的 INSTALL 或 README 或 ./configure --help 了解相關設定, 要有耐心。編的過程遇到問題就用 apt-file 或 auto-apt 找出相關套件, 裝好後再繼續, 缺 header 的話, 通常是要裝 X-dev  這類 package。
第二步沒什麼好說的, 第三步最好改用 checkinstall, 可以包成 package 再裝, 日後可用 dpkg -r PKG 移除, 還有用 dpkg -l 查版本, 用 dpkg -L PKG 了解裝了那些檔案。以前用 make install 都會怕怕的, 不知道到底裝了什麼, 裝爛後要怎麼移除。有 checkinstall 實在太方便啦!! 若有多台同 OS 的機器, 編一次之後, 剩下的機器可以用 package 安裝, 省下不少工夫。
但是 Ubuntu 上用 checkinstall 安裝時會出現 "No such file or directory" 的錯誤, 從 console 的訊息來看, checkinstall 嘗試一些 mkdir 的操作, 卻沒有真的建出那些目錄。查了一下, 官網的 bug report 有提到解法, 要加 --fstrans=no, 也就是用 sudo checkinstall -D --fstrans=no 來安裝。另外可用 –install=no 只包 package 不安裝, 還有用 --requires 自己建 package dependency。這裡有些介紹, 超簡單的。

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...