dpkg工具之dpkg-checkbuilddeps

1、dpkg-checkbuilddepsman手冊)

做用:該命令行工具是用來檢查依賴和衝突的。linux

大綱:dpkg-checkbuilddeps [option ...] [control file]

描述:git

該程序用來檢查列舉在控制文件中的依賴和衝突,若是這當中的任何一個依賴未知足,它將列出這些包的名稱而且返回一個非零的返回值。web

默認狀況下,debian/control文件被讀取,可是你一樣能夠在命令行中指定一個可替代的配置文件名。shell

選項:數據庫

--admin-dir = dir 

這裏用來改變dpkg數據庫的默認位置,當前默認位置是在/var/lib/dpkg位置處。
-A
忽略Build-Depends-Arch和 Build-Conflicts-Arch行,當架構獨立的包被構建的時候可使用這個參數,或者當源碼包須要被構建時和-B參數一塊兒使用。
-B
忽略Build-Depends-Indep 和 Build-Conflicts-Indep行,使用當架構依賴的包被創建的時候使用,或者當源碼包須要被編譯時和-A參數一塊兒使用
-d
用戶手動指定建依賴包的列表
-c
用戶手動指定衝突字符串的列表
使用給定的構建依賴和衝突而不是包含在debian/control文件中的依賴和衝突。

-a arch
 假設用戶想要檢查指定架構系統的依賴和衝突而不是本機系統架構所缺乏的依賴和衝突,用戶可使用-a參數來檢查構建依賴和衝突列表。
-p  profile [] 
caveats:該參數選項沒有理解,往後理解會進一步補充~
-? --help
  顯示使用信息並退出
--version
  顯示版本號,而且退出

說明:該部分主要爲man手冊的理解翻譯部分ubuntu

2、dpkg-checkbuilddeps執行流程

注意:該部分爲查看dpkg-checkbuilddeps的執行過程,可是爲了流程圖的美觀中間執行步驟作了簡單的修飾(並不影響主要的執行流程)。架構

可能僅僅看流程圖仍是有點晦澀難懂,我下面舉個簡單的例子來講明一下這個過程:
ide

3、dpkg-checkbuilddeps執行流程

dpkg-checkbuilddeps示例說明工具

Debian/control文件內容以下:flex

Source: dpkg

Section: admin

Priority: required

Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>

XSBC-Original-Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>

Uploaders: Guillem Jover <guillem@debian.org>, Raphaël Hertzog <hertzog@debian.org>

Origin: debian

Bugs: debbugs://bugs.debian.org

Homepage: https://wiki.debian.org/Teams/Dpkg

Vcs-Browser: http://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git

Vcs-Git: git://anonscm.debian.org/dpkg/dpkg.git

Standards-Version: 3.9.5

Build-Depends: debhelper (>= 7), pkg-config, flex,

 gettext (>= 0.18), po4a (>= 0.41),

 zlib1g-dev, libbz2-dev, liblzma-dev,

 libselinux1-dev (>= 1.28-4) [linux-any],

 libncursesw5-dev,

 libtimedate-perl, libio-string-perl

下面說明一下一般狀況下(dpkg-checkbuilddeps debian/checkbuilddeps )的處理步驟:

1)首先會去默認讀取debian/control文件,若是未讀取到,那麼終止,反之,進入步驟2,此時能讀取到,那麼進入步驟2;

2)讀取長參數內容,檢查是否bd_value(依賴字符串)而且bc_value(衝突字符串),用戶已經自定義,若是都已經自定義,那麼進入步驟步驟8和步驟9,反之,進入步驟3,這裏很明顯長參數中並未指定-d-c參數,那麼此處進入步驟3;

3)得到build-depends字段的字符串,得到build-conflicts字段的字符串;

4)判斷長參數列表中參數-A是否指定,若是-A,已經指定,那麼忽略build-depends-arch的內容,若是沒有指定-A參數,那麼進入步驟5,此時未指定-A參數,那麼進入步驟5;

5)build-depends-arch字段鏈接到build-depends中去,將build-conflicts-arch字段鏈接到build-conflicts中去;

6)判斷長參數列表中參數-B是否指定,若是-B,已經指定,那麼忽略build-depends-indep字段的內容,反之,進入步驟7;此時未指定-B,那麼進入步驟7;

7)build-depends-indep字段鏈接到build-depends中,造成依賴列表,將build-depends-indep鏈接到build-conflicts字段中,造成衝突列表;

8) 判斷依賴列表是否爲空,若是爲空,那麼進入步驟 ,反之,從包名和版本號對比/var/lib/dpkg數據庫中已經安裝二進制包的列表,列出缺乏的依賴包;

9) 判斷衝突列表是否爲空,若是爲空,那麼進入步驟, 反之,從包名和版本號對比/var/lib/dpkg數據庫中已經安裝的二進制包的列表,列出衝突包;

10) 結束

Caveats:另外若是之後在dpkg-checkbuilddeps 長選項的時候,能夠參照流程圖去推理。

相關文章
相關標籤/搜索