如何用本地端目錄內的 deb 套件群(詳細用法)?

Debian 有很多實用的工具如: apt 系列 、 update- 系列,但是我們卻常常忽略了!這個版就是要大家一起來分享您在使用 debian 特殊指令的經驗!請大家共襄盛舉囉!注意不要在此提問問題喔!

如何用本地端目錄內的 deb 套件群(詳細用法)?

文章flybird » 週四 12月 16, 2004 11:13 am

moto 寫:2.2 如何在本地使用APT
=====================
有時你硬碟上有許多軟件包,你會希望通過 APT 來安裝它們,以便讓它去處理軟件包間複雜的依賴關係。

想這麼做,就建一個目錄,將所有你想要安裝的 .deb 文件放入其中。例如:

mkdir /root/debs

你可以使用一個重載文件(override file)直接去修改軟件包中管理文件中的定義(definitions),使之符合你的軟件儲藏庫管理規則,在這個重載文件中,你可能希望定義一些選項來重載那些軟件包的定義,如下所示:

package priority section

package 是軟件包的名稱,
priority 有三個級別 low, medium 或 high,
section 是軟件包所屬的 section。

重載文件可任意命名,文件名將在接下來的步驟中做為參數傳遞給 dpkg-scanpackages。如果你不想寫重載文件,只需在調用 dpkg-scanpackages 時使用/dev/null就行了。

仍是在/root目錄下執行:

dpkg-scanpackages debs file | gzip > debs/Packages.gz

在上述的命令行中,file 為重載文件,命令會產生一個 Packages.gz 文件,它包含了 APT 所需的各種軟件包信息,要使用這些軟件包,在 sources.list 中加上:

deb file:/root debs/

完成了上面的工作,就可以通常那樣使用 APT 命令操作這些軟件包了。你可以使用同樣的方法生成一個源碼庫,但請記住你需要將 .orig.tar.gz 文件、.dsc 文件和 .diff.gz 文件包含在目錄中,要生成 Source.gz 文件而不是 Packages.gz 文件。所使用的命令也不相同,要使用 dpkg-scansources,命令如下所示:

dpkg-scansources debs | gzip > debs/Sources.gz

注意 dpkg-scansource 不需要重載文件,在 sources.list 中的引用法是:

deb-src file:/root debs/


這一段交代似乎不是很清楚 , 最近需新裝多台 , 總覺得浪費頻寬與下載時間 , 請問有哪位仁兄對這方法很熟 , 可請求補註上文嗎?
若用 apt-build 出來的 deb 套件是否也適用此法呢?
最後由 flybird 於 週四 12月 16, 2004 2:10 pm 編輯,總共編輯了 1 次。
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章d2207197 » 週四 12月 16, 2004 11:54 am

dpkg-scanpackages 的語法可以直接執行 dpkg-scanpackages 查看。
代碼: 選擇全部
$ dpkg-scanpackages
Usage: dpkg-scanpackages [-u] [-a<arch>] binarypath overridefile [pathprefix] > Packages

binarypath 就是你放 *.deb 的目錄,因為上面例子是在 /root 執行,而他的 *.deb 是放在 /root/debs/ ,所以 binarypath 就寫 debs/。
而後面的 overridefile 在上面的例子就是 dpkg-scanpackages debs file 的 file。
您也可以不建立 overridefile,於是 dpkg-scanpackages 就要這樣執行:
代碼: 選擇全部
dpkg-scanpackages debs/ /dev/null

(這裡在 debs 後面多加個斜線,只是讓看這篇文章的人比較容易搞懂他是一個目錄。)

正確的執行 dpkg-scanpackages,他會從 stdout 輸出 Packages 檔案的內容,您可以用 '> ' 輸出到您要置放 Packages 檔案的路徑,再用 gzip 壓縮,也可以直接透過 pipe 傳到 gzip 直接壓縮。apt-get 在執行 update 抓取 binary 檔案列表時,就是在抓 Packages.gz 檔案。要有一個可以正常運作的 apt packages archive,最少要有 *.debs 與 Packages.gz。而 dpkg-scanpackages 的功能就是在建立 Packages.gz 檔案。

另外小弟喜歡用 apt-ftparchive 來取代 dpkg-scanpackages。apt-ftparchive 的語法是:
代碼: 選擇全部
$ apt-ftparchive
Usage: apt-ftparchive [options] command
Commands: packages binarypath [overridefile [pathprefix]]
          sources srcpath [overridefile [pathprefix]]

這隻程式身兼 dpkg-scanpackages 與 dpkg-scansources 兩隻程式的功能。比如說要拿來當作 dpkg-scanpackages:
代碼: 選擇全部
$ apt-ftparchive packages debs/ > debs/Package ; gzip debs/Packages

拿來當作 dpkg-scansources:
代碼: 選擇全部
$ apt-ftparchive sources debs/ | gzip > debs/Packages.gz


至於是什麼程式建立的 deb 並無影響,無論你是用 apt-build,或是自己手動包出來的 deb 都一樣是 deb,都可以用。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章flybird » 週四 12月 16, 2004 3:29 pm

viewtopic.php?t=1229

原來 APT 的操作流程是這麼回事! 感謝再感謝 :finger1:

但是 /var/cache/apt-build/repository/ 目錄內也有這個 Packages.gz 檔案 ,
安裝 apt-build 時也有將這個目錄增加到sources.list 中 ,
可是進行 APT 操作時 , 這個套件下載來源都會出錯 ? :-?
螢幕上會提示找不到 /var/lib/apt/lists/ 目錄下的檔案 :
_var_cache_apt-build_repository_dists_apt-build_main_binary-i386_Packages :crying:

deb file:/var/cache/apt-build/repository apt-build main 格式與上文有異? :(

另外發現 sources.list 中每個套件下載來源都有對應檔 , 例如 :
/var/lib/apt/lists/ 目錄下的檔案 :
debian.linux.org.tw_debian_dists_testing_main_binary-i386_Packages
debian.linux.org.tw_debian_dists_testing_main_binary-i386_Releases
lock ...
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章d2207197 » 週四 12月 16, 2004 5:05 pm

您是說 Releases 檔案嗎?
裡面是放此 apt pachages archive 的一些資訊,可以自己找一個 APT 站台,抓他們的 Releases 檔案來看看。

不過缺少這個檔案,此 APT packages archive也是能運作的。
如果有的話,小弟也不清楚他對系統內部套件管理有何影響。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章flybird » 週四 12月 16, 2004 5:33 pm

Solution at here:
viewtopic.php?p=31287#31287 :)
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

Re: re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章訪客 » 週四 12月 16, 2004 5:59 pm

d2207197 寫:您是說 Releases 檔案嗎?
裡面是放此 apt pachages archive 的一些資訊,可以自己找一個 APT 站台,抓他們的 Releases 檔案來看看。

不過缺少這個檔案,此 APT packages archive也是能運作的。
如果有的話,小弟也不清楚他對系統內部套件管理有何影響。


debian.linux.org.tw_debian_dists_testing_main_binary-i386_Packages
debian.linux.org.tw_debian_dists_testing_main_binary-i386_Releases
lock ...
我不懂地是這些檔案如何影響 APT 的操作流程? :mrgreen:
訪客
 

Re: re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章d2207197 » 週四 12月 16, 2004 7:58 pm

Anonymous 寫:debian.linux.org.tw_debian_dists_testing_main_binary-i386_Packages
debian.linux.org.tw_debian_dists_testing_main_binary-i386_Releases
lock ...
我不懂地是這些檔案如何影響 APT 的操作流程? :mrgreen:

?? 聽不懂
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章flybird » 週五 12月 17, 2004 11:15 am

我想apt-get自當會去讀 /etc/apt/sources.list 以便得知這些檔案 , 並且會更新其內容!但是沒看過文件這麼講 :-P
viewtopic.php?p=31287#31287
由這篇--我是這麼的推論(自圓一下哈哈 :D )

可是還無法確認這些檔案何時被存取 , 其內容又有什麼功用?
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章d2207197 » 週五 12月 17, 2004 11:54 am

大致上,就是 apt-get install 時,會看 那些 *_Packages 檔案,而得知要安裝的套件的相依關係、Md5Sum 等等種種資訊;同時他也會查看 sources.list 而得知套件取得來源。接著就計算安裝順序,然後執行安裝。

apt-cache search 或 show 時也是查看那些 _Packages 檔案,而作搜尋及顯示其資訊。

詳細的小弟就不太清楚了,看看 apt howto 吧
代碼: 選擇全部
http://www.debian.org/doc/user-manuals#apt-howto
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

re:如何用本地端目錄內的 deb 套件群(詳細用法)?

文章flybird » 週五 12月 17, 2004 4:55 pm

<<實驗結論>>
/var/lib/apt/lists/ 目錄下的檔案是 apt-get update 時從 sources.list 所指定的套件下載來源 copy 並更名而產生.

新問題是 apt-get update 如何判定那些站台必需更新?

apt-build install kde-core 會跑不動 ?
先編
apt-build install kdelibs && apt-build update && apt-build upgrade
再編
apt-build install kde-core <--- 可以了!
apt-get install kde-i18n-zhtw <--abt-build沒反應 ; 我想中文化與執行碼應該關係不大 , 所以先直接安裝囉!
flybird
懵懂的國中生
懵懂的國中生
 
文章: 249
註冊時間: 週三 7月 07, 2004 4:40 pm
來自: ROT


回到 debian command

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客