2016年1月10日 星期日

提昇 DNF 安裝、更新套件的速度

自 Fedora 22 用 DNF 取代 YUM,做為預設的「安裝、更新及移除管理」程式後,就開始用 DNF 來執行操作,有些命令參數並不能完整相容。因此,在使用 DNF 時有些不太習慣,直覺會認定是功能未能完全複製所致。最近,兩者間的差異漸漸縮小,但是偶而還是會出現更新時停滯的情形。這情形有種類似 DNF 程式當掉的錯覺,有必要查一查是怎麼一回事。
  查了一些資料,終於有了一些結論,應該是一些 YUM 當時外掛的功能在 DNF 未能順利執行。可能是要加裝什麼外掛程式,或是有些設定要修改。先查看一下 DNF 的設定檔 /etc/dnf/dnf.conf 的內容,
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=true
在研究這是設定參數的用途時,同時也發現幾個其它參數,似乎對加快 DNF 的安裝、更新有利,先將這幾個有利於加速的參數整理出來,其它完整參數內容以後再整理了。
  將 DNF 設定檔中的預設參數,再加入幾個可提昇速度、安全的參數,並整理如下表:
設 定 值參   數   說   明
best=False設為 True 則更新時,不論關聯套件有否對應更新,皆只安裝最新版,可能出現關聯性失敗訊息;預設為 False。
clean_requirements_on_remove=True當關聯套件不用時,在 DNF 清除階段移除。僅在此參數設為 True 時,關聯性套件才會被移除;預設為 True。
deltarpm=True設為 True 則 DNF 只下載更新差異檔,在本地端合成更新檔以節省頻寬,需較多 CPU 及硬碟 I/O;預設為 True。
exclude=某些套件更新後,需要額外的處理方能確保系統運作正常。將這些套件 (以『 , 』分隔) 在例行更新時將之排除,可避免系統更新後偶發的狀況。
fastestmirror=True設為 True 會忽略由「伺服器」動態生成的『鏡像清單』之順序;預設為 False。
gpgcheck=True設為 True 會對『套件庫』中找到的套件,執行 GPG 簽章檢查;預設為 False。
installonly_limit=3可同時存在系統中同一套件之新舊版本數量;預設為 3。
ip_resolve=IPv4設定在 DNF 解析 IP 位址時,只解析 IPv4 或 IPv6 位址;預設為『空白』,即兩者皆解析。
keepcache=False設定為 True 會將已下載、安裝的套件保留;預設為 False。已下載未安裝的套件,則一律保留至下次安裝完成。
max_parallel_downloads=5允許同時下載套件的最多數量;預設為 3。
minrate=10k當伺服傳送資料小於 minrate 所設最低流量閥值 (可附加單位為 k, M, G,預設為 1000) ,且持續 timeout 所設定的時間 (預設為 30 秒),則 DNF 放棄此連線。
timeout=10
上圖中,藍色是目前 DNF 設定檔內容,紅色是本文建議修改的新值。
  各項 DNF 設定修改的說明,請參考下表:
新 設 定 值設   定   說   明
best=False確保將來不會因新版 DNF 變更預設值,而被改變設定。
clean_requirements_on_remove=True
deltarpm=True
exclude=kernel*更新 Linux 核心,常需要重新編譯『驅動程式模組』,或處理第三方套件的設定,因而費時較久,如:VirtualBox 之 Extension Pack。排除某些套件更新,可節省時間;當要更新時,在命令列加『--disableexcludes main』將此參數關閉。
fastestmirror=True由「伺服器」生成之『鏡像清單』順序可能是以流量為依據,未必適合『本地電腦』所需。由 DNF 決定使用的順序,可得到較快的下載結果。
gpgcheck=True即使由『鏡像伺服器』下載的套件,也要做 GPG 簽章檢查,確保沒有被動過手腳。
installonly_limit=3可同時存在系統中同一套件之新舊版本數量;預設為 3。通常系統會保留最近三個版本的 Linux 核心。
ip_resolve=IPv4若電腦所處環境中未使用 IPv6,限制只解析 IPv4 位址,可以縮短建立連線的時間。
keepcache=False確保將來不會因新版 DNF 變更預設值,而被改變。
max_parallel_downloads=5若可用頻寬較多時,增加此值可加快下載速度。
minrate=10k提高『最低流量閥值』及降低低流量的『逾時時間』,可減少 DNF 長時間處於低流量下載的時間,間接增加下載速度。設定值需參考所處環境的網路狀況決定。
timeout=10
為方便讀者利用,保留 DNF 原有的設定參數,並將上表的設定檔整理如下,
[main]
# gpgcheck=1
# installonly_limit=3
# clean_requirements_on_remove=true

best=False
clean_requirements_on_remove=True
deltarpm=True
# exclude=kernel*
fastestmirror=True
gpgcheck=True
installonly_limit=3
ip_resolve=IPv4
keepcache=False
max_parallel_downloads=5
minrate=10k
timeout=10
讀者可以複製、貼至自己的 DNF 設定檔 /etc/dnf/dnf.conf,再修改成適合自己的設定值。

後記:

  • 2016-9-15 : 修正供剪貼用之設定檔,加入『 installonly_limit=3 』參數,解決 Linux 核心保留的版本太多,致 /boot 分割區空間不足。
  • 2016-2-28 : 修正將設定檔中『 exclude= 』功能關閉的命令列參數。正確參數應為
    『--disableexcludes main』,其中 main 之前為一空白

已測試版本:

  • Fedora: 22, 23

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)