Ubuntu環境下,如何下載「Source Package」

測試環境

以下測試是在「Xubuntu 14.04 64位元」。

前提

以「hello」這個「Package」為例。

方式一

執行「apt-get source」下載「hello」這個套件的「Source Package」。

1
$ apt-get source hello

顯示下列的訊息

1
2
3
4
5
6
7
8
9
10
11
12
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 711 kB of source archives.
Get:1 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (dsc) [1,290 B]
Get:2 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (tar) [697 kB]
Get:3 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (diff) [12.5 kB]
Fetched 711 kB in 0s (762 kB/s)
sh: 1: dpkg-source: not found
Unpack command 'dpkg-source -x hello_2.8-4.dsc' failed.
Check if the 'dpkg-dev' package is installed.
E: Child process failed

其中有一行訊息

1
Check if the 'dpkg-dev' package is installed.

從上面的訊息可以知道,少裝了「dpkg-dev」這個套件。

基本上「hello」的「Source Package」是有下載下來

1
$ ls -1

顯示

1
2
3
hello_2.8-4.debian.tar.gz
hello_2.8-4.dsc
hello_2.8.orig.tar.gz

但是是在解開的時候出現問題。

上面的訊息有一行

1
Unpack command 'dpkg-source -x hello_2.8-4.dsc' failed.

所以先安裝「dpkg-dev」這個套件

1
$ sudo apt-get install dpkg-dev

再執行一次

1
$ apt-get source hello

這次顯示的訊息

1
2
3
4
5
6
7
8
9
10
11
12
Reading package lists... Done
Building dependency tree
Reading state information... Done
Need to get 711 kB of source archives.
Get:1 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (dsc) [1,290 B]
Get:2 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (tar) [697 kB]
Get:3 http://tw.archive.ubuntu.com/ubuntu/ trusty/main hello 2.8-4 (diff) [12.5 kB]
Fetched 711 kB in 1s (681 kB/s)
dpkg-source: info: extracting hello in hello-2.8
dpkg-source: info: unpacking hello_2.8.orig.tar.gz
dpkg-source: info: unpacking hello_2.8-4.debian.tar.gz
dpkg-source: info: applying 99-config-guess-config-sub

觀看有哪些檔案

1
$ ls -1

會顯示

1
2
3
4
hello-2.8
hello_2.8-4.debian.tar.gz
hello_2.8-4.dsc
hello_2.8.orig.tar.gz

額外一提

通常安裝「build-essential」這個「Metapackage」時,就會安裝「dpkg-dev」這個套件了。

可以執行下面的指令驗證看看

1
$ apt-cache show build-essential | grep Depends:

就會顯示

1
Depends: libc6-dev | libc-dev, gcc (>= 4:4.4.3), g++ (>= 4:4.4.3), make, dpkg-dev (>= 1.13.5)

或是執行

1
$ apt-cache rdepends dpkg-dev | grep build-essential

會顯示

1
build-essential

source.list

要執行「apt-get source」這個動作,還有一個要注意的,就是「/etc/apt/sources.list」,裡面要有「deb-src」開頭的設定,設定Source Repository。

例如下面這一行

1
deb-src http://tw.archive.ubuntu.com/ubuntu/ trusty main restricted universe multivers

更多參考

方式二

直接到下面的頁面,找到網址下載,以下是以「14.04(trusty)」為例。

https://packages.ubuntu.com/source/trusty/hello

用瀏覽器開啟頁面,

執行

1
$ lynx http://packages.ubuntu.com/source/trusty/hello

或是執行

1
$ firefox http://packages.ubuntu.com/source/trusty/hello

下面有一個「Download hello」,有列三個檔

1
2
3
4
          File            Size (in kB)           MD5 checksum
hello_2.8-4.dsc 1.3 kB 1b6c5e82702d5d0c7876cd7aeb63c38b
hello_2.8.orig.tar.gz 681.1 kB 6a67cbbbc0420061ef938a9a2736fbd6
hello_2.8-4.debian.tar.gz 12.2 kB 585acd817162ae52f6abf01b8f38880b

執行下面指令下載下來

1
2
3
4
5
wget -c http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8-4.dsc

wget -c http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8.orig.tar.gz

wget -c http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8-4.debian.tar.gz

或是將下面三行

1
2
3
http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8-4.dsc
http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8.orig.tar.gz
http://archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.8-4.debian.tar.gz

存成一個檔叫「list.txt」。

1
$ vi list.xt

存檔後,執行下面指令下載

1
$ wget -c -i list.txt

下載完成

1
$ ls -1

一樣可以看到三個檔

1
2
3
4
hello_2.8-4.debian.tar.gz
hello_2.8-4.dsc
hello_2.8.orig.tar.gz
list.txt

然後利用「dpkg-source」這個指令解開。

1
$ dpkg-source -x hello_2.8-4.dsc

就可以看到下面的訊息

1
2
3
4
dpkg-source: info: extracting hello in hello-2.8
dpkg-source: info: unpacking hello_2.8.orig.tar.gz
dpkg-source: info: unpacking hello_2.8-4.debian.tar.gz
dpkg-source: info: applying 99-config-guess-config-sub

並且多出一個資料夾「hello-2.8」

1
$ ls -1

顯示

1
2
3
4
5
hello-2.8
hello_2.8-4.debian.tar.gz
hello_2.8-4.dsc
hello_2.8.orig.tar.gz
list.txt

基本上,「方式二」這個流程,跟「方式一」是一樣的,只是利用一個指令就搞定了 :-)

另外也可以到下面這個網址,觀看hello有哪些檔案。

https://archive.ubuntu.com/ubuntu/pool/main/h/hello/

用瀏覽器開啟頁面,

執行

1
$ lynx http://archive.ubuntu.com/ubuntu/pool/main/h/hello/

或是執行

1
$ firefox http://archive.ubuntu.com/ubuntu/pool/main/h/hello/